<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DkEFSHo5cCp7ImA9WhVTEEQ.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761</id><updated>2012-02-24T06:43:39.428-08:00</updated><category term="ruby" /><category term="SMIL" /><category term="mobile" /><category term="linux" /><category term="Hewlett Packard" /><category term="story" /><category term="South Africa" /><category term="LINQ" /><category term="MSM 710" /><category term="soap" /><category term="HIV" /><category term="crazy monkey man" /><category term="politics" /><category term="programming" /><category term="death" /><category term="steve ballmer" /><category term="web development" /><category term="CK editor" /><category term="monitoring" /><category term="open source" /><category term="toys" /><category term="C#" /><category term="compression" /><category term="ANC" /><category term="PHP" /><category term="asterisk" /><category term="android" /><category term="zabbix" /><category term="SEO" /><category term="backlinks" /><category term="fantasy" /><category term="servers" /><category term="twitter" /><category term="spam" /><category term=".mobi" /><category term="license" /><category term="microsoft" /><category term="standards" /><category term="adventures in IT" /><category term="corruption" /><category term="cakePHP" /><category term="medicine" /><category term="database" /><category term=".NET" /><title>Adventures in IT</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://abeak.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>51</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/KRCe" /><feedburner:info uri="blogspot/krce" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>blogspot/KRCe</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;DkQARHozfyp7ImA9WhVTEEQ.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-6207412090368570889</id><published>2012-02-24T06:34:00.001-08:00</published><updated>2012-02-24T06:39:05.487-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-24T06:39:05.487-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><category scheme="http://www.blogger.com/atom/ns#" term="soap" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><title>Consuming Microsoft .NET SOAP server datasets in PHP</title><content type="html">&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;img border="0" height="300" src="http://4.bp.blogspot.com/-lWHEiqV4a-8/T0ed8A0eknI/AAAAAAAABFY/cRYMzOvtnNA/s320/1157681_clown.jpg" style="margin-left: auto; margin-right: auto;" width="200" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Microsoft Just Clowning Around Again&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;If you're impatient &lt;a href="http://www.bin-co.com/php/scripts/xml2array/" target="_blank"&gt;here is the link&lt;/a&gt; that this article leads to &lt;br /&gt;
&lt;/p&gt;&lt;p&gt;SOAP is generally understood to be a simple method for systems to exchange data in a standard manner.  This allows for remote systems to make calls on a server application.  This sounds like a Good Idea.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Microsoft, however, does not appear to fully understand the concept of SOAP when it comes to providing a SOAP server based on "datasets".&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Apparently the use of these datasets make it much easier for programmers using Microsoft languages to consume web services.&amp;nbsp; &lt;br /&gt;
Unfortunately it makes it inconvenient for everybody else.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;So we have a standard way of doing things, but Microsoft decides to "improve" it and thereby forces everybody else to manually parse their XML responses.  What is the point of having a standard method of accessing server methods if Microsoft then makes their implementation inoperable to Java, PHP, Ruby, Python, developers?&amp;nbsp; &lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Isn't the whole idea of SOAP to allow remote access? &amp;nbsp;So why make things difficult for everybody except the people who choose Microsoft as their vendor for Server, Desktop, Development IDE, Programming Language, Email, and Security? &amp;nbsp;What about somebody who wants to use a vendor other than Microsoft for one of these software services? &amp;nbsp;Is it technically better? &amp;nbsp;Is it better for a client to be locked into a vendor? &amp;nbsp;Or does Microsoft make more money by trying to force you to make them your vendor for all software?&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Well in any case, if you are trying to consume a Microsoft dataset SOAP packet you will end up needing to write your own helper classes to decipher their code. &amp;nbsp;That's the bad news. &amp;nbsp;Trust me, I asked on Stackoverflow, Googled extensively (I didn't use Bing to search though, maybe I should have), and otherwise checked and rechecked why I was not able to handle the SOAP packets being returned by the Microsoft server.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;PHP developers can use &lt;a href="http://www.bin-co.com/php/scripts/xml2array/" target="_blank"&gt;this code&lt;/a&gt; (http://www.bin-co.com/php/scripts/xml2array/) as a start to developing their class. &amp;nbsp;The code given there will help shortcut the process of reading the Microsoft dataset SOAP response. &amp;nbsp;If anybody has similar solutions for other languages please feel free to forward them to me.&lt;br /&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-6207412090368570889?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/eR9mkVu-VoX2Lz224_jRYuJ35QQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eR9mkVu-VoX2Lz224_jRYuJ35QQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/eR9mkVu-VoX2Lz224_jRYuJ35QQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eR9mkVu-VoX2Lz224_jRYuJ35QQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=2sZDsmUMj7M:Gy8ofwGTrKk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=2sZDsmUMj7M:Gy8ofwGTrKk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=2sZDsmUMj7M:Gy8ofwGTrKk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=2sZDsmUMj7M:Gy8ofwGTrKk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/2sZDsmUMj7M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/6207412090368570889/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2012/02/consuming-microsoft-net-soap-server.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/6207412090368570889?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/6207412090368570889?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/2sZDsmUMj7M/consuming-microsoft-net-soap-server.html" title="Consuming Microsoft .NET SOAP server datasets in PHP" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-lWHEiqV4a-8/T0ed8A0eknI/AAAAAAAABFY/cRYMzOvtnNA/s72-c/1157681_clown.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2012/02/consuming-microsoft-net-soap-server.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMCRXw6cSp7ImA9WhRaEkU.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-5222343183622009993</id><published>2012-02-14T22:07:00.005-08:00</published><updated>2012-02-14T22:14:24.219-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-14T22:14:24.219-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><title>Questions for mid-level PHP developer candidates</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.sxc.hu/pic/m/c/ch/chahad/1320683_lcd_monitor_.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="300" src="http://www.sxc.hu/pic/m/c/ch/chahad/1320683_lcd_monitor_.jpg" width="202" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
I often get CV's from developers applying for positions.  Some colleges give people a certificate without really giving the candidate any problem solving skills or real understanding of theory.  Here are some standard questions that I ask candidates to complete with pen and paper without access to Google.  They cover basic OOP theory, logic, basic PHP syntax, and try to get some idea of the candidates passion for learning.  I don't usually ask Linux questions, but find that candidates who use Linux are generally more clued up than people bound to using Microsoft products.&lt;br /&gt;
&lt;br /&gt;
In the rare occasion that a candidate actually bothers to investigate the company and finds my blog they will naturally be expected to do well on this quiz. &amp;nbsp;I guess that's bonus marks for being prepared :p&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;PHP quiz
========

1)  Explain what SQL injection is and give TWO ways to combat it
2)  Explain the difference between the use of single quote and double quotes&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;when evaluating strings
3)  What is an abstract class?
4)  How would you call the construct method of a parent class inside&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;a child of that class?
5)  Given two variables $a and $b which contain integer numbers. &amp;nbsp;&lt;/pre&gt;&lt;pre&gt;Swap the values of $a and $b without declaring a third variable and using&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;only the mathematical functions +,*,-,/
6)  Define a class called House that has an owner property and a method&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;called sell that accepts a string parameter which changes the owner
7)  Explain call by value and call by reference.  Which method does PHP5&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;use when passing primitive variable types and objects?
8)  What does AJAX stand for?  Write a jQuery AJAX call to 'weather.php'&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;which updates the contents of with the results from that file
9)  What is JSON?  What is it used for?
10) What is the difference between GET and POST?
11) What blogs do you follow regularly and have memberships at? &amp;nbsp;&lt;/pre&gt;&lt;pre&gt;Do you have a reputation on any sites like Stackoverflow?
12) What is the most recent thing you have learned in PHP?
13) What design patterns are you familiar with?  What do you think about&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;the use of the Singleton pattern in PHP?
14) Write a program to roll two six-sided dice 10,000 times.  Sum the two&lt;/pre&gt;&lt;pre&gt;values on each roll.  At the end of the program run output the average sum&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;of all the rolls.
15) What is the value of $a if $a = ( '42' === 42 ) ? 'answer one' : 'answer two';
&lt;/pre&gt;&lt;br /&gt;
&lt;p&gt;Feel free to use any or all of these questions if you like them. &amp;nbsp;They're awkwardly formatted on the blog because of the template I'm using. &amp;nbsp;I have shared a raw copy on &lt;a href="https://docs.google.com/open?id=0ByrjsEadxS6kYzkzYWY2ODEtMTliOS00NjViLTkwNWQtMDZiZDkxOGFiODVm"&gt;Google Docs&lt;/a&gt;.&lt;br /&gt;
&lt;/p&gt;I have seen question number 5 done in a single line by the way (usually it takes three).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-5222343183622009993?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TyVMMuFBTIfEIqDlgjty8a5NHWg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TyVMMuFBTIfEIqDlgjty8a5NHWg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TyVMMuFBTIfEIqDlgjty8a5NHWg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TyVMMuFBTIfEIqDlgjty8a5NHWg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=hrkQl2_58_0:jnjj1qgueU4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=hrkQl2_58_0:jnjj1qgueU4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=hrkQl2_58_0:jnjj1qgueU4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=hrkQl2_58_0:jnjj1qgueU4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/hrkQl2_58_0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/5222343183622009993/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2012/02/questions-for-mid-level-php-developer.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/5222343183622009993?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/5222343183622009993?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/hrkQl2_58_0/questions-for-mid-level-php-developer.html" title="Questions for mid-level PHP developer candidates" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2012/02/questions-for-mid-level-php-developer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQEQXgzcCp7ImA9WhRbFU4.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-6029495528027892302</id><published>2012-02-06T04:22:00.000-08:00</published><updated>2012-02-06T04:45:00.688-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-06T04:45:00.688-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><title>Reverse Engineering an MS-SQL database without Visio</title><content type="html">&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-u210kY2U7-s/Ty_FvVT-6BI/AAAAAAAABFI/EKaKziCipuY/s1600/fig-1-346x444.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-u210kY2U7-s/Ty_FvVT-6BI/AAAAAAAABFI/EKaKziCipuY/s320/fig-1-346x444.jpg" width="249" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The splash screen for Squirrel SQL&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;I'm working on a project that draws from a Microsoft Sql Database. &amp;nbsp;Unfortunately there is no project documentation which means that it takes longer to become familiar with the design. &amp;nbsp;I particularly wanted an ERD of the database but this wasn't available. &amp;nbsp;So I looked for open source reverse engineering tools and found &lt;a href="http://www.squirrelsql.org/" target="_blank"&gt;Squirrel SQL&lt;/a&gt;. &amp;nbsp;This is a very handy tool as it supports a variety of databases and client operating systems.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Installing the Microsoft JDBC (&lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=21599" target="_blank"&gt;available from the Microsoft site&lt;/a&gt;) was a snap:&lt;br /&gt;
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Just download the archive, extract it somewhere meaningful (I put mine as a directory in Squirrel).&lt;/li&gt;
&lt;li&gt;Edit the Microsoft SQL driver in your driver list&lt;/li&gt;
&lt;li&gt;Add an extra class and point it to the JDBC4 jar file (version 4 is required for newer versions of the JDK)&lt;/li&gt;
&lt;li&gt;The driver should load now&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;Then proceed to add your connection alias per normal and you're connected to your MS-SQL database.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;The plugin to reverse engineer your database is called "Graph". &amp;nbsp;Simply connect to your database and select the tables you want. &amp;nbsp;Right click them and choose "Add to graph" from the context menu.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-6029495528027892302?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MoZ89RgzpI7ag0WgzJh73rYYvSs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MoZ89RgzpI7ag0WgzJh73rYYvSs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MoZ89RgzpI7ag0WgzJh73rYYvSs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MoZ89RgzpI7ag0WgzJh73rYYvSs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=FwXTBtOIGTY:xgVuhCoWydM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=FwXTBtOIGTY:xgVuhCoWydM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=FwXTBtOIGTY:xgVuhCoWydM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=FwXTBtOIGTY:xgVuhCoWydM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/FwXTBtOIGTY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/6029495528027892302/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2012/02/reverse-engineering-ms-sql-database.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/6029495528027892302?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/6029495528027892302?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/FwXTBtOIGTY/reverse-engineering-ms-sql-database.html" title="Reverse Engineering an MS-SQL database without Visio" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-u210kY2U7-s/Ty_FvVT-6BI/AAAAAAAABFI/EKaKziCipuY/s72-c/fig-1-346x444.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2012/02/reverse-engineering-ms-sql-database.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIERng9fyp7ImA9WhRbEkg.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-7759474176971447728</id><published>2012-02-02T23:14:00.000-08:00</published><updated>2012-02-02T23:18:27.667-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-02T23:18:27.667-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="compression" /><title>Online file resizer</title><content type="html">&lt;img align="right" alt="Kraken resizer" border="0" height="105" src="http://www.webresourcesdepot.com/wp-content/uploads/kraken_io.gif" width="200" /&gt;&lt;a href="http://kraken.io/"&gt;Kraken&lt;/a&gt;&amp;nbsp;is an online image compressing utility that compresses &amp;nbsp;jpeg, gif, and png formats using a new algorithm. &amp;nbsp;It claims that the compression on existing files can be losslessly improved.&lt;br /&gt;
&lt;br /&gt;
Does it work?&lt;br /&gt;
&lt;br /&gt;
I tried it on a random file on my hard-drive and the algorithm reduced the size from 853kb to 729kb (about a 14% reduction).&lt;br /&gt;
&lt;br /&gt;
Here is the original file (click to view full size):&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-CI33fdXjcpg/TyuI0b4Pj-I/AAAAAAAABEo/Ntoq3s37l80/s1600/13.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-CI33fdXjcpg/TyuI0b4Pj-I/AAAAAAAABEo/Ntoq3s37l80/s320/13.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
And here is the reduced file:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Az7m_WeSrkI/TyuJ6DkTDvI/AAAAAAAABE4/qvvDJ5a5sLc/s1600/13.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-Az7m_WeSrkI/TyuJ6DkTDvI/AAAAAAAABE4/qvvDJ5a5sLc/s320/13.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-7759474176971447728?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AXz-F26aMIgaKDna5K-bZmH2A_k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AXz-F26aMIgaKDna5K-bZmH2A_k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AXz-F26aMIgaKDna5K-bZmH2A_k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AXz-F26aMIgaKDna5K-bZmH2A_k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=hjlXTjjMa18:T0X0HSx_fjU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=hjlXTjjMa18:T0X0HSx_fjU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=hjlXTjjMa18:T0X0HSx_fjU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=hjlXTjjMa18:T0X0HSx_fjU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/hjlXTjjMa18" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/7759474176971447728/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2012/02/online-file-resizer.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/7759474176971447728?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/7759474176971447728?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/hjlXTjjMa18/online-file-resizer.html" title="Online file resizer" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-CI33fdXjcpg/TyuI0b4Pj-I/AAAAAAAABEo/Ntoq3s37l80/s72-c/13.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2012/02/online-file-resizer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMCRXw8eip7ImA9WhRUE08.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-3687274946541612117</id><published>2012-01-23T06:21:00.000-08:00</published><updated>2012-01-23T06:21:04.272-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-23T06:21:04.272-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Screen capture in Android 2.2.1 "Froyo"</title><content type="html">&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-PBzVxXuznB0/Tx1sFEiC-SI/AAAAAAAABEg/-36_PQbVfBM/s1600/SC20120123-161154.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-PBzVxXuznB0/Tx1sFEiC-SI/AAAAAAAABEg/-36_PQbVfBM/s320/SC20120123-161154.png" width="213" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;My Android Desktop snapped with this method&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;I took a screen capture by mistake once but then struggled to repeat the behaviour. &amp;nbsp;After Googling for a solution I found some very complicated solutions. &amp;nbsp;Probably the best way to do this is to buy an application on the Market, but I don't want to spend money on a toy.&lt;br /&gt;
&lt;br /&gt;
If you look in your "Settings » Applications » Running Services" menu you should see a service called "ScreenCaptureService". &lt;br /&gt;
&lt;br /&gt;
This allows you to take a screenshot by pressing the "Back" and "Home" buttons simultaneously.&lt;br /&gt;
&lt;br /&gt;
What works for me is to press and hold "Back" and then to press and release "Home" (while holding "Back"). &amp;nbsp;This makes a snapshot noise and displays a message. &amp;nbsp;Files are saved to the ScreenCapture directory on your SD card and should appear in your gallery.&lt;br /&gt;
&lt;br /&gt;
Of course this is a problem if you try to take a snapshot of a running application because pressing "back" causes it to quit. &amp;nbsp;I could not find a workaround for this and there doesn't seem to be anything much on Google. &amp;nbsp;I'm not sure if they did this deliberately or if for some reason the developers didn't consider this when implementing the system. &amp;nbsp;It seems too obvious an oversight to be anything but deliberate to me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-3687274946541612117?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JbskFb6DSjnSyebQupOk3TFBkM0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JbskFb6DSjnSyebQupOk3TFBkM0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JbskFb6DSjnSyebQupOk3TFBkM0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JbskFb6DSjnSyebQupOk3TFBkM0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=4rDKC7fpi3I:zHLLuv2_WjE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=4rDKC7fpi3I:zHLLuv2_WjE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=4rDKC7fpi3I:zHLLuv2_WjE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=4rDKC7fpi3I:zHLLuv2_WjE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/4rDKC7fpi3I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/3687274946541612117/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2012/01/screen-capture-in-android-221-froyo.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/3687274946541612117?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/3687274946541612117?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/4rDKC7fpi3I/screen-capture-in-android-221-froyo.html" title="Screen capture in Android 2.2.1 &quot;Froyo&quot;" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-PBzVxXuznB0/Tx1sFEiC-SI/AAAAAAAABEg/-36_PQbVfBM/s72-c/SC20120123-161154.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2012/01/screen-capture-in-android-221-froyo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEHRHo-fip7ImA9WhdXEUw.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-7982256786249340105</id><published>2011-08-23T07:42:00.000-07:00</published><updated>2011-08-23T07:43:55.456-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-23T07:43:55.456-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><title>Listing event handlers tied to DOM elements with jQuery and Firebug</title><content type="html">I'm busy hacking a template from an existing source to fit into a new Cake backend. &amp;nbsp;The template is pretty well written but I need to update the way in which content is being loaded and displayed. &amp;nbsp;Currently the site loads the *entire* site into one page and then flipping the visibility of&amp;nbsp;elements in order to simulate dynamic loading. &amp;nbsp;Of course this works fine for the demo site the template loads, but is not going to fly for a production site.&lt;br /&gt;
&lt;br /&gt;
I ran into the problem of having to work out where the event handlers are being declared for various elements on the page. &amp;nbsp;I was faced with the task of trekking through 15 files of Javascript. &amp;nbsp;Okay some are obviously not candidates (like jQuery.js itself) but that's still a mission.&lt;br /&gt;
&lt;br /&gt;
Luckily jQuery has an extra bit of goodness that made the task trivial. &amp;nbsp;It stores event handlers in the data attribute (read up about that here&amp;nbsp;&lt;a href="http://api.jquery.com/jQuery.data/"&gt;http://api.jquery.com/jQuery.data/&lt;/a&gt;&amp;nbsp;). &lt;br /&gt;
&lt;br /&gt;
Using Firebug you can open your console tab and bash in the magic command:&lt;br /&gt;
&lt;br /&gt;
$('#sneakybatmachine').data('events');&lt;br /&gt;
&lt;br /&gt;
replacing the element selector with something more likely to match in your document.&lt;br /&gt;
&lt;br /&gt;
That will give you a nice interactive way to explore the element and all of it's handlers, letting you click through right to the point in script where the handler is defined.&lt;br /&gt;
&lt;br /&gt;
This saves lots of time having to RTFS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-7982256786249340105?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/T21aGMFZ-Yl0tIv3yiWnMjaPPx4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/T21aGMFZ-Yl0tIv3yiWnMjaPPx4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/T21aGMFZ-Yl0tIv3yiWnMjaPPx4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/T21aGMFZ-Yl0tIv3yiWnMjaPPx4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=I36boYoLX4w:a83NLvecCWc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=I36boYoLX4w:a83NLvecCWc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=I36boYoLX4w:a83NLvecCWc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=I36boYoLX4w:a83NLvecCWc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/I36boYoLX4w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/7982256786249340105/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2011/08/listing-event-handlers-tied-to-dom.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/7982256786249340105?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/7982256786249340105?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/I36boYoLX4w/listing-event-handlers-tied-to-dom.html" title="Listing event handlers tied to DOM elements with jQuery and Firebug" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2011/08/listing-event-handlers-tied-to-dom.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cAQHYzfCp7ImA9WhdQFUo.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-1367917884528717507</id><published>2011-08-17T03:59:00.000-07:00</published><updated>2011-08-17T04:04:01.884-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-17T04:04:01.884-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><title>Caching your Twitter feed on your website in PHP</title><content type="html">Instead of reinventing the wheel I'm going to copy the script found at css-tricks.com (&lt;a href="http://css-tricks.com/snippets/php/get-latest-twitter-status/"&gt;click here&lt;/a&gt;)&lt;br /&gt;
&lt;pre&gt;function getTwitterStatus($userid){
$url = "http://twitter.com/statuses/user_timeline/$userid.xml?count=1";

$xml = simplexml_load_file($url) or die("could not connect");

       foreach($xml-&amp;gt;status as $status){
       $text = $status-&amp;gt;text;
       }
       echo $text;
 }

//my user id kenrick1991
getTwitterStatus("kenrick1991");
&lt;/pre&gt;&lt;br /&gt;
I'm leaving the original author's Twitter ID in there, but obviously you'll change this to yours.&lt;br /&gt;
&lt;br /&gt;
This function will retrieve the most recent Tweet from your feed (see the "count=1" variable in the URL).  But it will request this every time the page loads.&lt;br /&gt;
&lt;br /&gt;
The most simple caching strategy is to write your Twitter status to disk, and when your page loads check the timestamp of the file against the value returned by time().  If it exceeds whatever threshold you deem appropriate you can reload the feed from the web.&lt;br /&gt;
&lt;br /&gt;
Rather than boring you with code that demonstrates the use of file_exists(), filemtime(), and file_get_contents() I'll save you a Google search by highlighting the way to serialize and deserialize a simplexml object so that it is suitable for writing to disk (or database).&lt;br /&gt;
&lt;br /&gt;
Here's a routine to dump the Twitter simplexml object to disk:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;private function updateCache() {
        &lt;strong&gt;$xml = $this-&amp;gt;xml-&amp;gt;asXML();&lt;/strong&gt;
        $handle = fopen($this-&amp;gt;cacheFile,'w');
        fwrite($handle, $xml);
        fclose($handle);
    }
&lt;/pre&gt;&lt;br /&gt;
And here is how to retrieve it:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;$xmlCache = file_get_contents($this-&amp;gt;cacheFile);
&lt;strong&gt;$this-&amp;gt;xml = simplexml_load_string($xmlCache);&lt;/strong&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-1367917884528717507?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/P-EBjsokx2hraK_y4Jp81Jx2Ja8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P-EBjsokx2hraK_y4Jp81Jx2Ja8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/P-EBjsokx2hraK_y4Jp81Jx2Ja8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P-EBjsokx2hraK_y4Jp81Jx2Ja8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=yOaji4LsZrI:8-PMkAxj3fI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=yOaji4LsZrI:8-PMkAxj3fI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=yOaji4LsZrI:8-PMkAxj3fI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=yOaji4LsZrI:8-PMkAxj3fI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/yOaji4LsZrI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/1367917884528717507/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2011/08/caching-your-twitter-feed-on-your.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/1367917884528717507?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/1367917884528717507?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/yOaji4LsZrI/caching-your-twitter-feed-on-your.html" title="Caching your Twitter feed on your website in PHP" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2011/08/caching-your-twitter-feed-on-your.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMNQHg5eyp7ImA9WhdSEUg.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-7916980319963647538</id><published>2011-07-20T01:28:00.000-07:00</published><updated>2011-07-20T01:28:11.623-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-20T01:28:11.623-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="standards" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><category scheme="http://www.blogger.com/atom/ns#" term="crazy monkey man" /><title>Microsoft Internet Explorer - a "special needs" browser</title><content type="html">When developing a website I usually consider how long it will take to code the site, template it, and test it. &amp;nbsp;Then I add a whole lot of extra time to make it work in Internet Explorer.&lt;br /&gt;
&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-dZ6CPjclig4/TiaMLDiCT1I/AAAAAAAABD4/yhbsnhjsey8/s1600/the-internet.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="189" src="http://2.bp.blogspot.com/-dZ6CPjclig4/TiaMLDiCT1I/AAAAAAAABD4/yhbsnhjsey8/s320/the-internet.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;A Microsoft User - ready to use the interweb&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;In a way Microsoft's refusal to believe that there is a world of computing outside of Redmond is a good thing - it means that I get more billable hours per project. &amp;nbsp;Of course those billable hours are spent in frustrating searches through Google to try and work out all of the various quirks and bugs in Internet Explorer.&lt;br /&gt;
&lt;br /&gt;
I tend to think of Microsoft Internet Explorer users as "special needs" kids who are being set loose in the playground that is the Internet. &amp;nbsp;Barely able to prevent themselves from drooling on their keyboards and eating their mouses they demand that websites conform to their special needs. &amp;nbsp;Standards such as Javascript DOM level 2, HTML5, CSS, CSS3 are pretty much ignored because their parent doesn't believe in modern technology. &amp;nbsp;Microsoft and the Amish are pretty much similar in that respect. &amp;nbsp;They're both American, highly insulated, and refuse to believe in an outside world that is advancing without them.&lt;br /&gt;
&lt;br /&gt;
BUT Microsoft insists on installing its browser into its Windows operating system. &amp;nbsp;And not only does it ship as a default browser, but it's so deeply entrenched into the OS that you can't uninstall it. &amp;nbsp;I'm not sure why Microsoft thinks that a web browser should be integrated into an operating system, but I'm sure there is a reason for this (like preventing users from choosing other browsers).&lt;br /&gt;
&lt;br /&gt;
So the average Internet Explorer user is a Windows user (typically less savvy than Mac/Linux users) who is unaware that there are better ways to explore the Internet (less savvy than Firefox or Chrome users). &amp;nbsp;Who would choose a browser that is slower and less featured than a competing browser (like Chrome)?&lt;br /&gt;
&lt;br /&gt;
So, if your target market consists of special needs people who "choose" inferior products then by all means target the&amp;nbsp;gullible Internet Explorer users. &amp;nbsp;It's like taking candy from special needs kids.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Is there hope for the future?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.sk8loc8.com/deposit/Stupid_InternetPolice.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="220" src="http://www.sk8loc8.com/deposit/Stupid_InternetPolice.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;An Internet Explorer is pulled over on the Internet Highway&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;Of course Microsoft is promising to change in IE9. &amp;nbsp;They are promising "native" support for HTML5. &amp;nbsp;Apart from the fact that HTML5 is an external standard and doesn't belong to Microsoft why would they want to &amp;nbsp;build this into their operating system? &lt;br /&gt;
&lt;br /&gt;
Ah well, that's Microsoft for you. &amp;nbsp;But Microsoft also promised that IE8 would be standards compliant and would solve problems like world hunger. &amp;nbsp;I'm still hungry and margin:auto doesn't work, and neither do phase down events in Javascript, neither does HTML5 and CSS3 is also ignored. &amp;nbsp;So when Microsoft aims to be standards compliant they actually mean "Microsoft standards compliant" and not the standards that the rest of us use.&lt;br /&gt;
&lt;br /&gt;
IE7 promised to offer a cure for cancer and be an improvement on IE6. &amp;nbsp;That's pretty much the only promise that Microsoft actually managed to keep, but having Satan poke my eyes out while &lt;a href="http://www.youtube.com/watch?v=KMU0tzLwhbE"&gt;Steve Ballmer (crazy monkey man) &lt;/a&gt;sodomizes me would be better than IE6. &amp;nbsp;So by aiming for the low hanging fruit Microsoft actually delivered on a promise. &amp;nbsp;Sodomy from the world's sweatiest&amp;nbsp;billionaire would only be made worse by his screams "DEVELOPERS DEVELOPERS DEVELOPERS" which I imagine would be &amp;nbsp;his replacement for "oh God I'm coming". &amp;nbsp;I'm not suggesting Mr Ballmer enjoys anal sex (I know he's married with tadpoles) but he does appear to have a somewhat sadistic approach to web developers so the analogy is used. &amp;nbsp;I'm actually quite fond of the monkey man - he gives me about 5 hours extra on every project I do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-7916980319963647538?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BpcJAc-Ksj-BWUBKg3v8XJw3Xl8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BpcJAc-Ksj-BWUBKg3v8XJw3Xl8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BpcJAc-Ksj-BWUBKg3v8XJw3Xl8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BpcJAc-Ksj-BWUBKg3v8XJw3Xl8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=UbTo6x29tLg:58pu8rL_WBI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=UbTo6x29tLg:58pu8rL_WBI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=UbTo6x29tLg:58pu8rL_WBI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=UbTo6x29tLg:58pu8rL_WBI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/UbTo6x29tLg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/7916980319963647538/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2011/07/microsoft-internet-explorer-special.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/7916980319963647538?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/7916980319963647538?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/UbTo6x29tLg/microsoft-internet-explorer-special.html" title="Microsoft Internet Explorer - a &quot;special needs&quot; browser" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-dZ6CPjclig4/TiaMLDiCT1I/AAAAAAAABD4/yhbsnhjsey8/s72-c/the-internet.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Redmond, WA, USA</georss:featurename><georss:point>47.6739881 -122.121512</georss:point><georss:box>47.6289396 -122.1854005 47.7190366 -122.05762349999999</georss:box><feedburner:origLink>http://abeak.blogspot.com/2011/07/microsoft-internet-explorer-special.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIMRns_eyp7ImA9WhdTEU4.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-8730629586561189051</id><published>2011-07-08T07:09:00.000-07:00</published><updated>2011-07-08T07:16:27.543-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-08T07:16:27.543-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><category scheme="http://www.blogger.com/atom/ns#" term="cakePHP" /><title>CakePHP : Changing .htaccess to prevent one (or more) directory from being handled by Cake</title><content type="html">This technique may be useful if for example you have decided to use Wordpress to handle your blog, rather than trying to code your own competing blog system.&lt;br /&gt;
&lt;br /&gt;
This .htaccess file is based on the CakePHP default but simply adds a rewrite rule to exclude the "blog" directory from Cake's control.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&amp;lt;ifmodule mod_rewrite.c=""%gt;
   RewriteEngine on
   
   RewriteRule   ^(blog).* - [NC,L]
   
   RewriteRule    ^blog /blog    [L]
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
&amp;lt;/ifmodule%gt;
&lt;/pre&gt;&lt;br /&gt;
If you want to prevent Cake from controlling multiple directories you can simply modify the rewrite rule like such:  &lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;RewriteRule   ^(blog|my|other|directories|go|here).* - [NC,L]
&lt;/pre&gt;&lt;br /&gt;
In order to accomplish this on an IIS server you can email sballmer@microsoft.com and ask for support in getting his expensive software to do what it says it does on the box.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-8730629586561189051?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ar01NrOqABuRDiXxiNwrsvh7mpo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ar01NrOqABuRDiXxiNwrsvh7mpo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ar01NrOqABuRDiXxiNwrsvh7mpo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ar01NrOqABuRDiXxiNwrsvh7mpo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=Dr-Dwvw8AYY:QzSyzy90kHI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=Dr-Dwvw8AYY:QzSyzy90kHI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=Dr-Dwvw8AYY:QzSyzy90kHI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=Dr-Dwvw8AYY:QzSyzy90kHI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/Dr-Dwvw8AYY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/8730629586561189051/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2011/07/cakephp-changing-htaccess-to-prevent.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/8730629586561189051?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/8730629586561189051?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/Dr-Dwvw8AYY/cakephp-changing-htaccess-to-prevent.html" title="CakePHP : Changing .htaccess to prevent one (or more) directory from being handled by Cake" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2011/07/cakephp-changing-htaccess-to-prevent.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYEQ3Y_fyp7ImA9WhZaGUg.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-1351530250834017243</id><published>2011-07-04T04:11:00.000-07:00</published><updated>2011-07-06T05:41:42.847-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-06T05:41:42.847-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><category scheme="http://www.blogger.com/atom/ns#" term="CK editor" /><title>CakePHP : Adding a file upload and adding a select list of URLs for users in a CMS</title><content type="html">&lt;p&gt;CakePHP automagically generates textboxes for users, but it's usually a project requirement that these boxes are "user friendly".&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Adding CK editor to CakePHP is easy, but lets go a few steps further and give it the ability to allow users to upload images directly into their content and to select a list of pages when creating a link.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;This article is based heavily on two articles (&lt;a href="http://www.mixedwaves.com/2010/02/integrating-fckeditor-filemanager-in-ckeditor/" target="_blank"&gt;Adding file upload in CK editor&lt;/a&gt; and &lt;a href="http://blog.xoundboy.com/?p=393" target="_blank"&gt;Adding a ‘Link to local page from site’ field&lt;/a&gt;) which I have simply modified to be CakePHP specific.  So all credits to Ben Roberts and Zac.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Step 1 - Adding CK editor to CakePHP with the FileManager plugin&lt;/span&gt;&lt;br /&gt;
1) Download CK editor from the &lt;a href="http://ckeditor.com/" target="_blank"&gt;official site&lt;/a&gt; and unzip it into your /app/webroot/js directory.  To make things easy I put it in /app/webroot/ckeditor directory.&lt;br /&gt;
2) Download FCK editor from the same site. &amp;nbsp;It was at the bottom of the CK downloads page (because it is deprecated). &amp;nbsp;Unzip it to a temporary directory and copy the filemanager directory (fckeditor/editor/) to /app/webroot/ckeditor/filemanager directory. &amp;nbsp;We will be using the FCK filemanager in CK editor.&lt;br /&gt;
3) Edit filemanager/connectors/php/config.php and enable the plugin and do whatever other configuration you may require.  Take note of the document root option and remember that this is going through Javascript and not CakePHP, which means that you need to set it /app/webroot/userfiles and not the default of /userfiles&lt;br /&gt;
4) Open up filemanager/connectors/php/config.php and make the following changes:&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Add this function:&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;pre style="width: 300px;"&gt;function GetUrlParam( paramName )
{
 var oRegex = new RegExp( '[\?&amp;amp;]' + paramName + '=([^&amp;amp;]+)', 'i' ) ;
 var oMatch = oRegex.exec( window.top.location.search ) ;
 
 if ( oMatch &amp;amp;&amp;amp; oMatch.length &amp;gt; 1 )
  return decodeURIComponent( oMatch[1] ) ;
 else
  return '' ;
}
&lt;/pre&gt;Replace the OpenFile function with the below function:&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;pre style="width: 300px;"&gt;function OpenFile( fileUrl )
{
 
 //PATCH: Using CKEditors API we set the file in preview window. 
 
 funcNum = GetUrlParam('CKEditorFuncNum') ;
 //fixed the issue: images are not displayed in preview window when filename contain spaces due encodeURI encoding already encoded fileUrl 
 window.top.opener.CKEDITOR.tools.callFunction( funcNum, fileUrl);
 
 ///////////////////////////////////
 window.top.close() ;
 window.top.opener.focus() ;
}
&lt;/pre&gt;Create a new helper in your helpers directory called fck.php and include the code below.  Remember to use this helper in the controller you want to be able to use CK editor.  This helper is based on the one available &lt;a href="http://bakery.cakephp.org/articles/Valkum/2009/11/08/ckeditor-3-x-new-fckeditor-version" target="_blank"&gt;in the bakery &lt;/a&gt; but I have modified the code so that it uses the file manager we copied in from FCK.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;pre style="width: 300px;"&gt;// file /app/views/helpers/fck.php
class FckHelper extends Helper { 

    var $helpers = Array('Html', 'Javascript'); 

    function load($id) { 
        $did = ''; 
        foreach (explode('.', $id) as $v) { 
            $did .= ucfirst($v); 
        }  
        // filebrowser patch   
        $here = 'http://' .  $_SERVER['HTTP_HOST'] . $this-&amp;gt;webroot; 

        $fileBrowser = "{\n
            filebrowserBrowseUrl :'".$here."js/ckeditor/filemanager/browser/default/browser.html?Connector=".$here."js/ckeditor/filemanager/connectors/php/connector.php',\n
            filebrowserImageBrowseUrl : '".$here."js/ckeditor/filemanager/browser/default/browser.html?Type=Image&amp;amp;Connector=".$here."js/ckeditor/filemanager/connectors/php/connector.php',\n
            filebrowserFlashBrowseUrl :'".$here."js/ckeditor/filemanager/browser/default/browser.html?Type=Flash&amp;amp;Connector=".$here."js/ckeditor/filemanager/connectors/php/connector.php'}\n";

        $code = "CKEDITOR.replace( '".$did."', $fileBrowser );"; 
        return $this-&amp;gt;Javascript-&amp;gt;codeBlock($code);  
    } 
} 
&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;When you want to include CK editor in a view you can now use the code provided in the bakery.  I'm just quoting a snippet, but you can &lt;a href="http://bakery.cakephp.org/articles/Valkum/2009/11/08/ckeditor-3-x-new-fckeditor-version"&gt;view the full source here&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;pre style="width: 300px;"&gt;echo $javascript-&amp;gt;link('ckeditor/ckeditor', NULL, false);  
 echo $form-&amp;gt;input('body', array('cols' =&amp;gt; '60', 'rows' =&amp;gt; '3')); 
 echo $fck-&amp;gt;load('News.body'); 
&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;We should now be able to include CK editor and make use of the File Manager.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Step 2 - Allowing users to select a list of URL's on the site&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;This section is a CakePHP specific implementation of the guide published online &lt;a href="http://blog.xoundboy.com/?p=393" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;I'm using a menu table in my database to list a menu name and url.  It doesn't really matter how you want to handle your pages just so long as you can get them into JSON formatted string of description/url pairs.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Here is an example of the desired output in your controller:&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;pre style="width: 300px;"&gt;[['Home Page','home'],['About Us','about'],['Contact','contact']]
&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;I used code like the following snippet, because for this project I am using a "slug" field to be the same as the page title (project specification).  Slugs are stored in my database with a hyphen which is simply stripped to get the page title.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;pre style="width: 300px;"&gt;// get pages for ckEditor
$this-&amp;gt;ContentItem-&amp;gt;recursive = -1;
$contentItems = $this-&amp;gt;ContentItem-&amp;gt;find('all',array('fields'=&amp;gt;array('slug')));
$json_links = array();
    foreach ($contentItems as $contentItem) {
        $slug = $contentItem['ContentItem']['slug'];                                      
        $description = str_replace('-',' ',$slug);
        $json_links[] .= "['" . $description . "','". $slug ."']";
    }     
    $json_links = '[' . implode(',',$json_links) . ']';               
    $this-&amp;gt;set(compact('json_links'));
&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;You will no doubt need to modify this to suit your needs, either in your model or controller depending on your coding style.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Open up the view and add a dummy input box like the tutorial suggests:&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;pre style="width: 300px;"&gt;&amp;lt;input type='hidden' id='pageListJSON' value="&amp;lt;?php echo $json_links; ?&amp;gt;" &amp;gt;
&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;Personally I feel that there is probably a better way to do this, but since this method works I'm not going to bother trying to improve on it.  The only reason the author of the tutorial uses the input is to use a Javascript query on it later.  So I wonder if setting a variable there and replacing this look-up later would be a better approach?  Comments anybody?  Anyway, back to work...&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;You can now follow the rest of the &lt;a href="http://blog.xoundboy.com/?p=393" target="_blank"&gt;tutorial that this section is based on&lt;/a&gt; from step 3 as this all deals with the Javascript and so can be directly applied to Cake.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;When following the tutorial make sure that you take note of the comment made by amosmos on 01.01.11 regarding the code addition in step 5... if you are using a database to pull your pages you may need to add a prefix to your URL (or you can do it in your Model/Controller when you encode in JSON):  &lt;pre&gt;attributes[ 'data-cke-saved-href' ] = 'pages/' + data.localPage; &lt;/pre&gt;&lt;/p&gt;&lt;p&gt;You should now have a workable CK Editor for your CakePHP CMS.&lt;br /&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-1351530250834017243?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/p2jRoW5jn7QRc-QEgS2Z_Hy2eE0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p2jRoW5jn7QRc-QEgS2Z_Hy2eE0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/p2jRoW5jn7QRc-QEgS2Z_Hy2eE0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p2jRoW5jn7QRc-QEgS2Z_Hy2eE0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=xi1TxCKHMg0:OtrRBhmEMaI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=xi1TxCKHMg0:OtrRBhmEMaI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=xi1TxCKHMg0:OtrRBhmEMaI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=xi1TxCKHMg0:OtrRBhmEMaI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/xi1TxCKHMg0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/1351530250834017243/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2011/07/cakephp-adding-file-upload-and-adding.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/1351530250834017243?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/1351530250834017243?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/xi1TxCKHMg0/cakephp-adding-file-upload-and-adding.html" title="CakePHP : Adding a file upload and adding a select list of URLs for users in a CMS" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2011/07/cakephp-adding-file-upload-and-adding.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUERH44fCp7ImA9WhZRGEo.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-8060248157965072662</id><published>2011-04-15T05:56:00.000-07:00</published><updated>2011-04-15T05:56:45.034-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-15T05:56:45.034-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="web development" /><category scheme="http://www.blogger.com/atom/ns#" term="servers" /><title>Hassles with Uniforum and co.za registration</title><content type="html">&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-YoZBOREzbbw/Tag_xmMJYII/AAAAAAAABDQ/syuTYYWylXY/s1600/1160561_digital_dreams.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-YoZBOREzbbw/Tag_xmMJYII/AAAAAAAABDQ/syuTYYWylXY/s1600/1160561_digital_dreams.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Dreams of Technology foiled by pokey companies&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;I've previously found that the Uniforum email form does not allow for providing more than a certain, fixed, number of nameservers.&amp;nbsp; Apparently nobody would ever require more than that number.&amp;nbsp; Well unless they're using a high availability DNS service (like www.dnsmadeeasy.com) that is.&amp;nbsp; If you happen to be using more nameservers than Uniforum has determined to be the maximum that South Africans need then they won't register your domain.&lt;br /&gt;
&lt;br /&gt;
More recently I've found that they don't like nameservers where the FQDN lookup doesn't match the reverse lookup.&amp;nbsp; This is pretty much understandable, but what I don't understand is why it was working for a particular host I use until a month ago and is now no longer working.&lt;br /&gt;
&lt;br /&gt;
I raised a support ticket with Uniforum and it took them a good couple of days to come back to me.&amp;nbsp; I wonder how a company that charges R 50 for every single co.za domain offers such poor service and such an antiquated API (email forms?&amp;nbsp; I mean really).&lt;br /&gt;
&lt;br /&gt;
To put things in perspective.&amp;nbsp; To register a domain in .com costs about R 67 (without shopping around).&amp;nbsp; This is R 17 more than a co.za domain.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
There are many benefits to using a .com domain:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;foreign customers will recognize .com better,&amp;nbsp;&lt;/li&gt;
&lt;li&gt;it's easier to say on the radio,&amp;nbsp;&lt;/li&gt;
&lt;li&gt;domains can be locked against transfers,&amp;nbsp;&lt;/li&gt;
&lt;li&gt;you can register them automatically,&amp;nbsp;&lt;/li&gt;
&lt;li&gt;you can register them for multiple years at a time, and&amp;nbsp;&lt;/li&gt;
&lt;li&gt;you don't have to hassle with Uniforum.&lt;/li&gt;
&lt;/ol&gt;Is it time for another company to replace Uniforum?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-8060248157965072662?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/j1ofmY3PoWU687pprk5GWih6UQE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/j1ofmY3PoWU687pprk5GWih6UQE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/j1ofmY3PoWU687pprk5GWih6UQE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/j1ofmY3PoWU687pprk5GWih6UQE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=Hg-wbhE2_-s:QXgfhpXBwVQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=Hg-wbhE2_-s:QXgfhpXBwVQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=Hg-wbhE2_-s:QXgfhpXBwVQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=Hg-wbhE2_-s:QXgfhpXBwVQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/Hg-wbhE2_-s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/8060248157965072662/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2011/04/hassles-with-uniforum-and-coza.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/8060248157965072662?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/8060248157965072662?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/Hg-wbhE2_-s/hassles-with-uniforum-and-coza.html" title="Hassles with Uniforum and co.za registration" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-YoZBOREzbbw/Tag_xmMJYII/AAAAAAAABDQ/syuTYYWylXY/s72-c/1160561_digital_dreams.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2011/04/hassles-with-uniforum-and-coza.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEEQHk-fSp7ImA9WhZaGUg.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-6845403347210614643</id><published>2010-09-13T22:53:00.000-07:00</published><updated>2011-07-06T05:00:01.755-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-06T05:00:01.755-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="web development" /><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><title>One way to reduce HTTP requests</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.sxc.hu/pic/m/b/bo/boroda003/1015626_traffic_light_for_bikes_.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://www.sxc.hu/pic/m/b/bo/boroda003/1015626_traffic_light_for_bikes_.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;CSS Data URI's are a way to encode images directly into CSS.&amp;nbsp; This helps to reduce the number of HTTP requests on your server.&amp;nbsp; For example:&amp;nbsp; Instead of linking to an external resource like a background image, your CSS can have the image available within it.&amp;nbsp; As soon as the CSS is loaded the browser is ready to render the image.&lt;br /&gt;
&lt;br /&gt;
This can have real speed advantages, especially if the browser is configured to limit the number of connections to a host.&amp;nbsp; By freeing up a connection you can improve your rendering time.&lt;br /&gt;
&lt;br /&gt;
Another advantage is that if you are serving across a secure connection then all of your page elements can originate from the same, secure site, and not generate those annoying warnings to your visitors that some elements are not secure.&lt;br /&gt;
&lt;br /&gt;
More information on CSS data URI is available at &lt;a href="http://www.blogger.com/goog_1108421982"&gt;&lt;/a&gt;&lt;a href="http://en.wikipedia.org/wiki/Data_URI_scheme"&gt;http://en.wikipedia.org/wiki/Data_URI_scheme&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Spritebaker (&lt;a href="http://www.spritebaker.com/"&gt;http://http://www.spritebaker.com/&lt;/a&gt;) offers a free web-service.&amp;nbsp; They will take your CSS and parse it for content, then return to you the newly encoded CSS file.&lt;br /&gt;
&lt;p&gt;Of course the size of your CSS will increase because it now contains extra data.&amp;nbsp; Implementing server side compression can help reduce the impact of this bloat.&amp;nbsp; Spritebaker offers some advice on enabling mod_gzip on Apache and &lt;a href="http://www.webcodingtech.com/php/gzip-compression.php"&gt;this tutorial&lt;/a&gt; is useful background reading.&lt;br /&gt;
&lt;/p&gt;And if you're using IIS then you don't need to worry about compression.&amp;nbsp; People should buy faster computers and get more expensive internet connections to support your Microsoft habit.&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-6845403347210614643?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/U-8Zof744Jf6Tjl2e3BFbfteC4o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U-8Zof744Jf6Tjl2e3BFbfteC4o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/U-8Zof744Jf6Tjl2e3BFbfteC4o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U-8Zof744Jf6Tjl2e3BFbfteC4o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=ioz7oZAE3Ys:fLxtcHBZPe4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=ioz7oZAE3Ys:fLxtcHBZPe4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=ioz7oZAE3Ys:fLxtcHBZPe4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=ioz7oZAE3Ys:fLxtcHBZPe4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/ioz7oZAE3Ys" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/6845403347210614643/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2010/09/one-way-to-reduce-http-requests.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/6845403347210614643?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/6845403347210614643?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/ioz7oZAE3Ys/one-way-to-reduce-http-requests.html" title="One way to reduce HTTP requests" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2010/09/one-way-to-reduce-http-requests.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MCQH0zeCp7ImA9Wx5RFEU.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-4368270035811403169</id><published>2010-08-22T05:36:00.000-07:00</published><updated>2010-08-22T05:51:01.380-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-22T05:51:01.380-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="asterisk" /><title>Fixing mySQL CDR module compile error for Asterisk 1.6 in Ubuntu</title><content type="html">There is a bug in the Ubuntu release (still in 10.04) that causes a mismatch between the Asterisk 1.6 package and its addon package.  This results in the error message:&lt;blockquote&gt;WARNING[4238] loader.c: Module 'app_addon_sql_mysql.so' was not compiled with the same compile-time options as this version of Asterisk.&lt;/blockquote&gt;To produce this error you just need to apt-get install asterisk-mysql in an effort to get the cdr logging to a mySQL database (assuming that you also used aptitude to install Asterisk 1.6 of course).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In order to fix it do the following:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;aptitude purge asterisk-mysql&lt;/blockquote&gt;&lt;blockquote&gt;apt-get build-dep asterisk-mysql&lt;/blockquote&gt;&lt;blockquote&gt;apt-get -b source asterisk-mysql&lt;/blockquote&gt;&lt;blockquote&gt;dpkg -i asterisk-mysql_1.6.2.0-1_i386.deb&lt;/blockquote&gt;Do this in a temp folder as it will create a number of .deb packages.  You may need to change the filename depending on your hardware architecture.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.sxc.hu/pic/m/d/da/davdibiase/173833_an_asterisk.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 228px; height: 300px;" src="http://www.sxc.hu/pic/m/d/da/davdibiase/173833_an_asterisk.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The idea is to uninstall the faulty package that Ubuntu created and then compile a copy of the addons that matches the current Asterisk version.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since you've had the error of loading I can assume that you've edited modules.conf and cdr.conf properly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you run asterisk CLI and then use the command "module show like mysql" you should see the modules have loaded.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Assuming that you have properly defined your database table&lt;/div&gt;&lt;div&gt;you should be one step closer to having your CDR recording in mySQL.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-4368270035811403169?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FFYwFgUsQUF84vg-LrYgPGqkXlQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FFYwFgUsQUF84vg-LrYgPGqkXlQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FFYwFgUsQUF84vg-LrYgPGqkXlQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FFYwFgUsQUF84vg-LrYgPGqkXlQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=3eomNm_ip3E:bo04F3Y8-1E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=3eomNm_ip3E:bo04F3Y8-1E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=3eomNm_ip3E:bo04F3Y8-1E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=3eomNm_ip3E:bo04F3Y8-1E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/3eomNm_ip3E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/4368270035811403169/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2010/08/fixing-mysql-cdr-module-compile-error.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/4368270035811403169?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/4368270035811403169?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/3eomNm_ip3E/fixing-mysql-cdr-module-compile-error.html" title="Fixing mySQL CDR module compile error for Asterisk 1.6 in Ubuntu" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2010/08/fixing-mysql-cdr-module-compile-error.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QBQ3k-eip7ImA9WxFQFUg.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-6032918610295524700</id><published>2010-05-10T22:09:00.001-07:00</published><updated>2010-05-10T22:22:32.752-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-10T22:22:32.752-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="servers" /><title>Kannel Configuration</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.sxc.hu/pic/m/s/sh/shlomaster/1162258_green.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 300px; height: 200px;" src="http://www.sxc.hu/pic/m/s/sh/shlomaster/1162258_green.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;It took a whole day in front of an ssh screen onto my server to get Kannel up and running, but I finally managed to get a box ready to be tested.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A very useful resource is the SMSC emulator from &lt;a href="http://seleniumsoftware.com/"&gt;Selenium Software&lt;/a&gt;.  They're kind enough to give it away, and it is definitely the pick of the litter compared to the other free options.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I needed this because for some reason Kannel wasn't liking the fake SMSC setting.  I had noticed that the binary file they refer to in their documentation was missing from my install (a Debian &lt;i&gt;apt-get install kannel&lt;/i&gt; default).  So I thought I would rather emulate an SMSC than fiddle with trying to get the fake one running.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I had a few errors that were baffling due to the lack of thorough documentation, but the users@kannel.org list (subscription needed to send to it) was awesomely helpful.  Within an hour of posting my config files and outlining what I had tried I had a solution thanks to a tip from them.  The mailing list is searchable so it can take the place of trouble shooting documentation in my opinion.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What worried me was that the default example config file that Kannel distributes did not work out of the box.  I had reverted to using it after my handcrafted config was spitting "&lt;b&gt;smsbox_list empty!&lt;/b&gt;" warnings on the bearerbox.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Fixing the "smsbox_list empty!" problem&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;In any case fixing the "smsbox_list empty!" warning for me was just a matter of sending an SMS through the smsbox.  Kannel does not recognize an smsbox as being routable until it has been identified or had an MT sent from them.  I had seen the logic in the bb_boxc.c code, but needed a Kannel guru to interpret this for me.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's just a question of having the proper routes and services set, which for a test installation is easy to do using the Kannel documentation.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-6032918610295524700?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pfsOO1oxmFt_uXANRfta7qzLUKc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pfsOO1oxmFt_uXANRfta7qzLUKc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pfsOO1oxmFt_uXANRfta7qzLUKc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pfsOO1oxmFt_uXANRfta7qzLUKc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=tJx2Blrx4U4:DtfIRXqjOXs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=tJx2Blrx4U4:DtfIRXqjOXs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=tJx2Blrx4U4:DtfIRXqjOXs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=tJx2Blrx4U4:DtfIRXqjOXs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/tJx2Blrx4U4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/6032918610295524700/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2010/05/kannel-configuration.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/6032918610295524700?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/6032918610295524700?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/tJx2Blrx4U4/kannel-configuration.html" title="Kannel Configuration" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2010/05/kannel-configuration.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EARHg6fip7ImA9WxFQE0Q.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-8703837855749960825</id><published>2010-05-09T01:51:00.000-07:00</published><updated>2010-05-09T02:00:45.616-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-09T02:00:45.616-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><category scheme="http://www.blogger.com/atom/ns#" term="servers" /><title>Getting cURL to work in XAMPP</title><content type="html">I'm playing around with installing Magento in XAMPP at the moment and discovered that the XAMPP package does not ship with cURL enabled by default.&lt;br /&gt;&lt;br /&gt;Getting cURL to work in XAMPP was very simple:&lt;br /&gt;&lt;br /&gt;1) Find the php.ini file (in \xampp\php )&lt;br /&gt;2) Open it in your favourite text editor and search for "curl"&lt;br /&gt;3) You should see a line like this --&gt; ;extension=php_curl.dll&lt;br /&gt;4) Remove the semi-colon to uncomment the line and enable cURL&lt;br /&gt;5) Restart the Apache server&lt;br /&gt;&lt;br /&gt;Of course this was also easy on my Kubuntu Linux box:&lt;br /&gt;&lt;pre style="margin-left: 30px"&gt;&lt;br /&gt;sudo apt-get install php5-curl&lt;br /&gt;sudo apache2ctl restart&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-8703837855749960825?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Wor0DbUz33nU_9rb5KBOrJG9kDg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Wor0DbUz33nU_9rb5KBOrJG9kDg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Wor0DbUz33nU_9rb5KBOrJG9kDg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Wor0DbUz33nU_9rb5KBOrJG9kDg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=QwYDh9PNJ4Y:mSZu007XqlU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=QwYDh9PNJ4Y:mSZu007XqlU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=QwYDh9PNJ4Y:mSZu007XqlU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=QwYDh9PNJ4Y:mSZu007XqlU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/QwYDh9PNJ4Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/8703837855749960825/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2010/05/getting-curl-to-work-in-xampp.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/8703837855749960825?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/8703837855749960825?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/QwYDh9PNJ4Y/getting-curl-to-work-in-xampp.html" title="Getting cURL to work in XAMPP" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2010/05/getting-curl-to-work-in-xampp.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4BRn89eCp7ImA9WhRREUw.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-4546800297458811104</id><published>2010-04-22T21:45:00.000-07:00</published><updated>2011-11-23T22:42:37.160-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-23T22:42:37.160-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><category scheme="http://www.blogger.com/atom/ns#" term="steve ballmer" /><title>Installing PHPmyadmin on Kubuntu 9.10</title><content type="html">I've now nearly fully given up on suckling from the breast of Microsoft.  My little Linux laptop is now a fully functioning development box.  I must say that so far  I have had no separation anxiety as a result of leaving behind the &lt;a href="http://www.codinghorror.com/blog/2005/07/steve-ballmer-sweatiest-billionaire-ever.html"&gt;sweaty manboobs of Microsoft&lt;/a&gt; and moving on to a more solid diet.&lt;br /&gt;
&lt;br /&gt;
Anyway installing PHPmyadmin is a cinch. I used Kpackagemanager (the Ubuntu version is Synaptic) to get the package.&lt;br /&gt;
&lt;br /&gt;
In retrospect I prefer the Debian apt-get approach of the command line but I like the GUI for its ability to search through all packages to discover cool new toys.&lt;br /&gt;
&lt;br /&gt;
The only trick to installing PHPmyadmin is that you need to reconfigure it once it is up.&lt;br /&gt;
&lt;br /&gt;
Jump to a Konsole and run the command:&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;pre style="font-weight: bold;"&gt;sudo dpkg-reconfigure -plow phpmyadmin&lt;/pre&gt;&lt;/div&gt;This will give you the configuration options that the GUI installer does not.  Specifically it sets up the config files so that Apache knows to alias the /phpmyadmin directory to the proper /etc/phpmyadmin.&lt;br /&gt;
&lt;br /&gt;
If for some reason (as was the case with my Kubuntu 11.10) you need to fix the phpmyadmin Apache binding then use these commands:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-left: 10px;"&gt;&lt;pre style="font-weight: bold;"&gt;sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/sites-enabled/001-phpmyadmin
sudo service apache2 restart
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
This will add phpmyadmin to Apache's list of enabled sites so that you can browse it as you would expect.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-4546800297458811104?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oPeQEViuVLi01b_GxYAJ-BPlENE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oPeQEViuVLi01b_GxYAJ-BPlENE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oPeQEViuVLi01b_GxYAJ-BPlENE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oPeQEViuVLi01b_GxYAJ-BPlENE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=BA79mHDuxRk:MD9JkPDtZaY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=BA79mHDuxRk:MD9JkPDtZaY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=BA79mHDuxRk:MD9JkPDtZaY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=BA79mHDuxRk:MD9JkPDtZaY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/BA79mHDuxRk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/4546800297458811104/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2010/04/installing-phpmyadmin-on-kubuntu-910.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/4546800297458811104?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/4546800297458811104?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/BA79mHDuxRk/installing-phpmyadmin-on-kubuntu-910.html" title="Installing PHPmyadmin on Kubuntu 9.10" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2010/04/installing-phpmyadmin-on-kubuntu-910.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08DQHsyeCp7ImA9WhZVE04.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-5776595735697940938</id><published>2010-04-21T01:37:00.000-07:00</published><updated>2011-05-25T08:04:31.590-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-25T08:04:31.590-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="toys" /><title>Asterisk Open Source g.729 driver</title><content type="html">&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5462509711196440818" src="http://1.bp.blogspot.com/_uoDmJXxXBuA/S867pAX8SPI/AAAAAAAABBM/hYKbcz6l4d0/s200/1262065_delicate_music_background.jpg" style="cursor: pointer; float: right; height: 133px; margin: 0pt 0pt 10px 10px; width: 200px;" /&gt;&lt;br /&gt;
&lt;a href="http://asterisk.org/"&gt;Asterisk&lt;/a&gt; is an Open Source "all in one" telephony system.  It's really hard to configure, but that's a story for another day.&lt;br /&gt;
&lt;h2&gt;Asterisk and g.729&lt;/h2&gt;&lt;p&gt;Asterisk supports the g.729 codec to compress audio.  Digium, the guys who support Asterisk development, have a commercial offering on &lt;a href="http://kb.digium.com/entry/5/"&gt;their site&lt;/a&gt;.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;There however is an &lt;a href="http://asterisk.hosting.lv/"&gt;open source g.729 codec implementation&lt;/a&gt; for Asterisk developed available (&lt;a href="http://asterisk.hosting.lv/"&gt;click here, for some reason Blogger is hiding my link&lt;/a&gt;).  Installation questions are answered in the discussion on the Google group (&lt;a href="http://groups.google.com/group/asterisk-g729"&gt;here&lt;/a&gt;), but the installation is actually very simple.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;All you need to do is wget the appropriate file to your /usr/lib/asterisk/modules directory and then mv it to codec_g729.so (or codec_g723.so as may be).  It should take you only a few minutes to work out which file version to download.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;h2&gt;Other Asterisk resource links&lt;/h2&gt;&lt;p&gt;I found these links to be invaluable in sorting out my installation:&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Click on this link if you are getting a &lt;a href="http://ubuntuforums.org/showthread.php?t=609803"&gt;Non existent user in Asterisk CLI&lt;/a&gt; message every couple of seconds when you run asterisk -r.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.voip-info.org/"&gt;VOIP info&lt;/a&gt; was far and away the most comprehensive resource site I could find.  It has a wealth of information and configuration examples for Asterisk.&lt;br /&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-5776595735697940938?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/i3aFf0cxckYW0eNZzFcHBJn_Mtk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i3aFf0cxckYW0eNZzFcHBJn_Mtk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/i3aFf0cxckYW0eNZzFcHBJn_Mtk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i3aFf0cxckYW0eNZzFcHBJn_Mtk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=WLMYHrtQanM:k1F-JldmvQQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=WLMYHrtQanM:k1F-JldmvQQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=WLMYHrtQanM:k1F-JldmvQQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=WLMYHrtQanM:k1F-JldmvQQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/WLMYHrtQanM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/5776595735697940938/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2010/04/asterisk-open-source-g729-driver.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/5776595735697940938?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/5776595735697940938?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/WLMYHrtQanM/asterisk-open-source-g729-driver.html" title="Asterisk Open Source g.729 driver" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_uoDmJXxXBuA/S867pAX8SPI/AAAAAAAABBM/hYKbcz6l4d0/s72-c/1262065_delicate_music_background.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://abeak.blogspot.com/2010/04/asterisk-open-source-g729-driver.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08DRHwzcCp7ImA9WxFTFk4.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-1254675455895787</id><published>2010-04-07T02:14:00.000-07:00</published><updated>2010-04-07T02:17:55.288-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-07T02:17:55.288-07:00</app:edited><title>How to remotely destroy a Nokia N73 or Nokia N81</title><content type="html">Send them an SMS with this text:&lt;br /&gt;&lt;br /&gt;//SCKL23F423F4990101 424547494e3a56434152440d0a464e3a43656c6c736d617274204a48420d0a54454c3b505245463a2b32373131363436373335330d0a454e443a56434152440d0a&lt;br /&gt;&lt;br /&gt;This is a vCard formatted according to the guidelines on the Nokia developer forums that for some reason crashes a Nokia N73 or Nokia N81.&lt;br /&gt;&lt;br /&gt;It causes them to receive hundreds of fake business cards.  Even if they take the SIM card out they will continue to receive the cards.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-1254675455895787?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mXfcpdReblkfaveVrwyjJfVoPtA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mXfcpdReblkfaveVrwyjJfVoPtA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mXfcpdReblkfaveVrwyjJfVoPtA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mXfcpdReblkfaveVrwyjJfVoPtA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=pugpnD8Czd8:Ro_SP8or-EI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=pugpnD8Czd8:Ro_SP8or-EI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=pugpnD8Czd8:Ro_SP8or-EI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=pugpnD8Czd8:Ro_SP8or-EI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/pugpnD8Czd8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/1254675455895787/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2010/04/how-to-remotely-destroy-nokia-n73-or.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/1254675455895787?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/1254675455895787?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/pugpnD8Czd8/how-to-remotely-destroy-nokia-n73-or.html" title="How to remotely destroy a Nokia N73 or Nokia N81" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2010/04/how-to-remotely-destroy-nokia-n73-or.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MGR3Y9cSp7ImA9WxFTFU4.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-1257480238477898510</id><published>2010-04-05T23:15:00.001-07:00</published><updated>2010-04-05T23:30:26.869-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-05T23:30:26.869-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Send a vCard in PHP with an SMPP gateway</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_uoDmJXxXBuA/S7rU83mqocI/AAAAAAAABBE/D2lDMjK1PlA/s1600/1023122_book.jpg"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 200px; height: 124px;" src="http://2.bp.blogspot.com/_uoDmJXxXBuA/S7rU83mqocI/AAAAAAAABBE/D2lDMjK1PlA/s200/1023122_book.jpg" alt="" id="BLOGGER_PHOTO_ID_5456908040696144322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I was recently asked to write a program that will send a broker's phone number as a vCard to a list of leads.  There is a surprising number of pages dedicated to this problem, but no simple solutions.  Here's a quick and easy PHP solution to the problem:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$header = "//SCKL23F4 ";&lt;br /&gt;$vcard = bin2hex("BEGIN:VCARD\r\nFN:Cellsmart JHB\r\nTEL;PREF:+27116467353\r\nEND:VCARD\r\n");      &lt;br /&gt;$message = $header . $vcard;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Then send the $message using your SMSC SMPP gateway as usual.&lt;br /&gt;&lt;br /&gt;The W3C has some &lt;a href="http://www.w3.org/2002/12/cal/vcard-notes.html"&gt;notes on the vCard&lt;/a&gt; that has a useful example of a card but a Google search should quickly reveal the full standard details.&lt;br /&gt;&lt;br /&gt;Just by the way the $header variable is set to //SCKL23F4 because this is a newer format and is supposed to support vCards that need to be sent over two messages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-1257480238477898510?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1Gh_f34kHb3AabqXuCs4Uy_FsGA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1Gh_f34kHb3AabqXuCs4Uy_FsGA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1Gh_f34kHb3AabqXuCs4Uy_FsGA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1Gh_f34kHb3AabqXuCs4Uy_FsGA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=5knWRrL-GK0:tWBAEuo21I8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=5knWRrL-GK0:tWBAEuo21I8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=5knWRrL-GK0:tWBAEuo21I8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=5knWRrL-GK0:tWBAEuo21I8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/5knWRrL-GK0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/1257480238477898510/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2010/04/send-vcard-in-php-with-smpp-gateway.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/1257480238477898510?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/1257480238477898510?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/5knWRrL-GK0/send-vcard-in-php-with-smpp-gateway.html" title="Send a vCard in PHP with an SMPP gateway" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_uoDmJXxXBuA/S7rU83mqocI/AAAAAAAABBE/D2lDMjK1PlA/s72-c/1023122_book.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2010/04/send-vcard-in-php-with-smpp-gateway.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQMRng-cSp7ImA9WxBaEEU.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-1248119522033298186</id><published>2010-03-20T05:06:00.000-07:00</published><updated>2010-03-20T05:33:07.659-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-20T05:33:07.659-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="web development" /><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><title>Detecting handset type in WAP websites</title><content type="html">&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 200px; height: 133px;" src="http://2.bp.blogspot.com/_uoDmJXxXBuA/S6S7jCany6I/AAAAAAAABA8/ZqAJtdteTLg/s200/1094092_cell_phone.jpg" alt="Mobile Phone" id="BLOGGER_PHOTO_ID_5450687659643489186" border="0" /&gt;&lt;br /&gt;The supposedly standard method of retrieving a handset's capability is through UAPROF (see &lt;a href="http://en.wikipedia.org/wiki/UAProf" target="_blank"&gt;UAPROF&lt;/a&gt; on Wikipedia).  Very simply put a mobile phone should send through identifying information when it retrieves a website.  However, UAPROF is entirely voluntary and there are several problems associated with relying on it.&lt;br /&gt;&lt;br /&gt;Along comes &lt;a href="http://wurfl.sourceforge.net/"&gt;WURFL&lt;/a&gt;, which touts itself as a free option to consider when looking to identify the capabilities of your visitors browsers.  There are of course paid options to help you identify mobile phones visiting your site (such as &lt;a href="http://deviceatlas.com/"&gt;device atlas&lt;/a&gt;), but why pay for a service when you can get it free?&lt;br /&gt;&lt;br /&gt;At first glance WURFL looked very promising.  It has an active project on Sourceforge and a set of API's for PHP, JAVA, and others.&lt;br /&gt;&lt;br /&gt;One immediate problem I encountered was that the current release revision (1.1.r2) of the WURFL API is buggy.  Well that's not fair for me to say actually- the API works perfectly, it's just the example code that doesn't work&lt;br /&gt;&lt;br /&gt;A quick look at their source code revealed that the release version forgets to include a reference to a class library.  Fixing that allowed the demo code to run, and generate the next series of errors.&lt;br /&gt;&lt;br /&gt;I then realized that there is a marked &lt;span style="font-weight: bold;"&gt;lack of documentation&lt;/span&gt;.  They do have a user forum that has the ominously unfriendly warning "Don't post if you don't know what you are doing.  *YOU MAY BE BANNED INSTANTLY!!!!!*  If your question reveals that you lack basic web programming skills, you will be banned instantly".  To further emphasise the point they place this in bold and require administrator approval of your account before you can post a question.&lt;br /&gt;&lt;br /&gt;Given the lack of documentation and unfriendly user forums I would have liked their example code to work.&lt;br /&gt;&lt;br /&gt;I decided to rather use an older version of the code and downloaded version 1.1r1.  I had my application up and running in about 30 minutes using this code.&lt;br /&gt;&lt;br /&gt;So the short story is:&lt;br /&gt;1) Download the latest WURFL and patch files (&lt;a href="http://wurfl.sourceforge.net/"&gt;here&lt;/a&gt;)&lt;br /&gt;2) Download the older copy of the new WURFL API (&lt;a href="http://sourceforge.net/projects/wurfl/files/WURFL%20PHP/1.1/wurfl-php-1.r1.tar.gz/download" target="_blank"&gt;here&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Remember to point your main file setting in wurfl-config.php to the zip of the WURFL XML.  This reminder will make more sense to you once you unpack the files from 1 and 2.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-1248119522033298186?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/E69SedJkzx9B2y5E6SA6lci760c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/E69SedJkzx9B2y5E6SA6lci760c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/E69SedJkzx9B2y5E6SA6lci760c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/E69SedJkzx9B2y5E6SA6lci760c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=VO1A55HDqY0:-3enwsKl8b0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=VO1A55HDqY0:-3enwsKl8b0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=VO1A55HDqY0:-3enwsKl8b0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=VO1A55HDqY0:-3enwsKl8b0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/VO1A55HDqY0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/1248119522033298186/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2010/03/detecting-handset-type-in-wap-websites.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/1248119522033298186?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/1248119522033298186?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/VO1A55HDqY0/detecting-handset-type-in-wap-websites.html" title="Detecting handset type in WAP websites" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_uoDmJXxXBuA/S6S7jCany6I/AAAAAAAABA8/ZqAJtdteTLg/s72-c/1094092_cell_phone.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2010/03/detecting-handset-type-in-wap-websites.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUAQn4yfip7ImA9WxBUGUg.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-7753011670737804545</id><published>2010-03-07T01:08:00.000-08:00</published><updated>2010-03-07T01:30:43.096-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-07T01:30:43.096-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SEO" /><title>Should I do reciprocal linking on my site?</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_uoDmJXxXBuA/S5Ntebx1JhI/AAAAAAAABA0/oqMIecPQLi4/s1600-h/1165439_seo_2.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 149px;" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/S5Ntebx1JhI/AAAAAAAABA0/oqMIecPQLi4/s200/1165439_seo_2.jpg" alt="" id="BLOGGER_PHOTO_ID_5445816744041326098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Reciprocal links are touch and go for a few reasons.&lt;br /&gt;&lt;br /&gt;The reason that incoming links are good is that search engines think your site is worthwhile if humans are linking to it.  In other words, if a webmaster reviews your content and links to it then your content must be good (thinks the search engine).&lt;br /&gt;&lt;br /&gt;So people actively started to try and build links, to make search engines think that their content is good.&lt;br /&gt;&lt;br /&gt;The only thing is that search engines hate it when you do things just to optimize your site for search engines.  &lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;Optimize your site for users&lt;/span&gt;, while making it easy for search engines to see what it's about (this is where the &lt;b&gt;bold&lt;/b&gt;, &lt;i&gt;italics&lt;/i&gt;, page title and headings come in)&lt;br /&gt;&lt;br /&gt;Search engines see reciprocal links as a distortion.  The webmaster is not linking to you because your content is good, they're only linking to you because they're getting something in return (a link to their site, or even money).  If you have a page of links that link to sites that are linking to you a search engine is going to realize that none of those links actually mean anything.  They're going to think that you're trying SEO "tricks".&lt;br /&gt;&lt;br /&gt;Google specifically warns against "excessive" reciprocal linking, but doesn't quantify this.  So if you find a nice juicy site that insists on a reciprocal link then fine - give them a link from an article.  Never create a page of reciprocal links to a whole bunch of worthless sites that are irrelevant, or have low page rank.  Think how easy it would be for a search engine to spot this.&lt;br /&gt;&lt;br /&gt;Google puts this a whole lot better than I can (in their &lt;a href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;amp;answer=35769"&gt;Guidelines for Webmasters&lt;/a&gt;) when they say "make pages primarily for users, not for search engines. ... Don't participate in link schemes designed to increase your site's ranking or PageRank."&lt;p style="margin-left: 80px;"&gt; &lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;They expand on this when defining &lt;a href="http://www.google.com/support/webmasters/bin/answer.py?answer=66356"&gt;link schemes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Two better alternatives to reciprocal linking are to use &lt;a href="http://www.websitemagazine.com/content/blogs/posts/pages/the-anatomy-of-linkbait.aspx" target="_blank"&gt;link bait&lt;/a&gt; and to submit your site to &lt;a href="http://www.masternewmedia.org/rss/top55/" target="_blank"&gt;RSS aggregators&lt;/a&gt;.  Don't go rushing off to build hundreds of reciprocal links to other sites.  Rather spend your energy building your site into a great resource that people will want to visit (and link to).&lt;br /&gt;&lt;br /&gt;By the way, to report a site that is using link spam you can use the Google tool: &lt;a href="http://goo.gl/linkspam"&gt;http://goo.gl/linkspam&lt;/a&gt; .  If you can use this tool, then your competitors can use it on you too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-7753011670737804545?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Adm50HluCWVHiDk9cYkWUDJQNo0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Adm50HluCWVHiDk9cYkWUDJQNo0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Adm50HluCWVHiDk9cYkWUDJQNo0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Adm50HluCWVHiDk9cYkWUDJQNo0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=Zrv0bWnFp6o:C3Nj2BEYit8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=Zrv0bWnFp6o:C3Nj2BEYit8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=Zrv0bWnFp6o:C3Nj2BEYit8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=Zrv0bWnFp6o:C3Nj2BEYit8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/Zrv0bWnFp6o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/7753011670737804545/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2010/03/should-i-do-reciprocal-linking-on-my.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/7753011670737804545?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/7753011670737804545?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/Zrv0bWnFp6o/should-i-do-reciprocal-linking-on-my.html" title="Should I do reciprocal linking on my site?" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_uoDmJXxXBuA/S5Ntebx1JhI/AAAAAAAABA0/oqMIecPQLi4/s72-c/1165439_seo_2.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2010/03/should-i-do-reciprocal-linking-on-my.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAHQnc8fSp7ImA9WxBUGEo.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-5294874865565078587</id><published>2010-03-06T04:22:00.000-08:00</published><updated>2010-03-06T04:32:13.975-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-06T04:32:13.975-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SEO" /><title>A SEO letter to a new webmaster</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_uoDmJXxXBuA/S5JJjscKz0I/AAAAAAAABAs/u6Q4s37tl1E/s1600-h/1165440_seo_3.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 149px;" src="http://1.bp.blogspot.com/_uoDmJXxXBuA/S5JJjscKz0I/AAAAAAAABAs/u6Q4s37tl1E/s200/1165440_seo_3.jpg" alt="" id="BLOGGER_PHOTO_ID_5445495777017909058" border="0" /&gt;&lt;/a&gt;Dear Webmaster,&lt;br /&gt;&lt;br /&gt;First off, I want to demystify search engine optimization.  I've read so many blogs and books by specialists and it seems that most SEO specialists are actually marketing themselves rather than dispensing the very core knowledge that is required.&lt;br /&gt;&lt;br /&gt;There is really only one page whose opinion I trust and that is the official Google Guidelines for Webmasters (find it here - &lt;a href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;amp;answer=35769" target="_blank"&gt;http://www.google.com/support/&lt;wbr&gt;webmasters/bin/answer.py?hl=&lt;wbr&gt;en&amp;amp;answer=35769&lt;/a&gt; ).  Make sure that you read this page and ask me any questions that will clarify your understanding of it.  If anybody tells you to do something other than what is written on this page be very careful.&lt;br /&gt;&lt;br /&gt;Yes - there are "tricks" in SEO.  But think about it - Google hires teams of incredibly clever people (read Matt Cutts academic profile if you don't believe me).  What are the chances that Google is going to be tricked for very long?  Very slim.  And Google punishes sites that have tricked it in the past.  So avoid using SEO "tricks" and focus on building a sustainable strategy.  The site I optimized, has retained it's #1 position for over a year now - simply because I followed the Google guidelines and some extra stuff that I'll explain here.&lt;br /&gt;&lt;br /&gt;Next, ask yourself how does Google make money?  It makes money by selling advertising.  It gets people to click its adverts by attracting them to its search engine.  How does it attract people to its search engine?  By providing the most relevant results.&lt;br /&gt;&lt;br /&gt;So, how do you make life easier for Google?  Provide useful information that people will want to read.  This leads to the mantra that you will hear all the time : "&lt;b&gt;Content is King&lt;/b&gt;".&lt;br /&gt;&lt;br /&gt;Google wants to help people find useful information.  If you provide useful information Google will help people find your site.  This is the most simple rule of SEO and I'm surprised it isn't drilled into people's skulls.&lt;br /&gt;&lt;br /&gt;So to recap:&lt;br /&gt;1) Read &lt;a href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;amp;answer=35769" target="_blank"&gt;http://www.google.com/support/&lt;wbr&gt;webmasters/bin/answer.py?hl=&lt;wbr&gt;en&amp;amp;answer=35769&lt;/a&gt; carefully and study it&lt;br /&gt;2) Add content to your site regularly&lt;br /&gt;&lt;br /&gt;Right - lets focus on your content.  We need to be able to help Google realize that your site is valuable and what information it has.&lt;br /&gt;&lt;br /&gt;We do this in a few ways:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;META tags.&lt;br /&gt;1) &lt;/b&gt;Although the "keywords" tag is not so important install a Joomla module that will write it for you automatically.  There might be some search engines that use it, and there might one day be a resurgance.  Plus it requires no effort to do.&lt;br /&gt;&lt;b&gt;2) &lt;/b&gt;Your description tag is sometimes used by the search engine in its results page.  Make sure that your description tag is unique for each page and summarizes the content.&lt;br /&gt;&lt;b&gt;3) &lt;/b&gt;The TITLE tag is essential.  Use keywords from your page in your page titles.  Make every page title unique.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;HEADINGS&lt;br /&gt;&lt;/b&gt;Use keywords in headings in your text.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Bold and &lt;i&gt;emphasis&lt;/i&gt;&lt;br /&gt;&lt;/b&gt;Use bold and italics (emphasis) on keywords in your text.  Do this once per paragraph.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Images&lt;/b&gt;&lt;br /&gt;Images can have an "ALT tag".  Make sure that you right-click an image, click properties, and see it's ALT tag.  This will be displayed to blind readers, and search engines use it as a clue to find out what the picture is about.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;Keywords&lt;br /&gt;&lt;/b&gt;A keyword should actually be called a key phrase since it can consist of several words.  "Key phrases" are easier to target than key words.  For example: "Drug rehab in Pretoria" is easier to target than "Drug rehab" because it is a narrower market.&lt;br /&gt;&lt;br /&gt;Use modifying words to target key phrases so "affordable drug rehab", "luxury drug rehab", "drug rehab in cape town", "best private drug rehab" will be target keyphrases/keywords.&lt;br /&gt;&lt;br /&gt;Decide what a page is about and choose two or three keywords for that page.  Use them at a rate of about 5% in your content, headings, title, meta tags, and picture ALT tags.  Don't use your keyphrase over and over again just to try and impress search engines.&lt;br /&gt;&lt;br /&gt;Under no circumstances stuff keywords into META tags, headings, or your page content.   Don't make your content sound unnatural in order to stuff keywords in.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Focus your page content&lt;/b&gt;&lt;br /&gt;When you add a page decide in advance what search phrase people will be typing in on the search engine.  Use this exact phrase a few times in your article.  Answer the question that people are asking.&lt;br /&gt;&lt;br /&gt;I like to link to other pages about similar issues.  I'm not to fussy about marking these links "nofollow" (some people will talk about this).  I think it adds value to my readers if they can find more information from my page. Just make them &lt;span style="font-style: italic;"&gt;target="_blank"&lt;/span&gt; so that people can come back to your site.  Never link to bad sites (anything you would be ashamed to show your mom, your wife/husband, your boss, or a court of law is a bad site).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Regular content updates&lt;/b&gt;&lt;br /&gt;Don't add 50 pages in one day, rather write 1 article per day for 50 days in a row.  Keep your content additions regular and even.  Keep adding valuable content.  Aim to have at least a few hundred targetting your specific area of expertise on your site.  When you reach about 500 articles you will find that you start doing really well on search engines.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;INCOMING LINKS&lt;br /&gt;&lt;/b&gt;* Get people to link to your site.  Find the industry experts and ask them to link to you.  Show them the useful information you have and how it can benefit their readers.&lt;br /&gt;* Do not  do link exchanges (also called reciprocal links) where somebody links to you in exchange for you linking to them.&lt;br /&gt;* Do NOT pay for links (!)&lt;br /&gt;* It is better to have a few high quality links than hundreds of irrelevant links.  Get links from sites with a high page rank.  Install the Google Toolbar into your browser to be able to see a sites page rank.&lt;br /&gt;* Register on forums related to your industry.  Put your site in your signature and post to these forums.  Ask the moderators if they give "dofollow" links - these forums will be better for you to post on.&lt;br /&gt;* Ask your suppliers to link to you.&lt;br /&gt;* Find out who is linking to your competitors and approach them for links (do a Google search like this ---&gt; link:&lt;a href="http://yourcompetitorssite.com/" target="_blank"&gt;yourcompetitorssite.com&lt;/a&gt; )&lt;br /&gt;* Try getting a DMOZ link, but don't sweat if you can't.  I'm personally surprised that search engines trust it so much, given the slow turnaround on the site.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Other&lt;/b&gt;&lt;br /&gt;Add a sitemap module to your site.&lt;br /&gt;&lt;br /&gt;Search Engine Optimization is hard work, not magic.  Good luck!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-5294874865565078587?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gtfzLE97wD8lPcr8BZ6yHHLPXYA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gtfzLE97wD8lPcr8BZ6yHHLPXYA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gtfzLE97wD8lPcr8BZ6yHHLPXYA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gtfzLE97wD8lPcr8BZ6yHHLPXYA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=ZyyPKN8w0HA:BQqz8Cind1U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=ZyyPKN8w0HA:BQqz8Cind1U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=ZyyPKN8w0HA:BQqz8Cind1U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=ZyyPKN8w0HA:BQqz8Cind1U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/ZyyPKN8w0HA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/5294874865565078587/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2010/03/seo-letter-to-new-webmaster.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/5294874865565078587?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/5294874865565078587?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/ZyyPKN8w0HA/seo-letter-to-new-webmaster.html" title="A SEO letter to a new webmaster" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_uoDmJXxXBuA/S5JJjscKz0I/AAAAAAAABAs/u6Q4s37tl1E/s72-c/1165440_seo_3.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2010/03/seo-letter-to-new-webmaster.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQBR3cyeSp7ImA9WxBUF0s.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-7066160341825583400</id><published>2010-03-04T21:00:00.000-08:00</published><updated>2010-03-04T21:35:56.991-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-04T21:35:56.991-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SMIL" /><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><title>Changing background color in SMIL</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_uoDmJXxXBuA/S5CQyF5N40I/AAAAAAAABAk/mbaPi1BGb7w/s1600-h/1108254_pda_phone.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 200px;" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/S5CQyF5N40I/AAAAAAAABAk/mbaPi1BGb7w/s200/1108254_pda_phone.jpg" alt="" id="BLOGGER_PHOTO_ID_5445011139740951362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I've been working on a gateway system that will help a WASP to accept MMS requests and pass them on to the network for delivery to a mobile handset.  For some reason the original designers of the gateway decided not to allow service consumers the ability to upload SMIL directly.  Rather, an XML is POSTed to a webservice.  The XML is then parsed into SMIL and handed to the network provider in a nice SOAP wrapper.&lt;br /&gt;&lt;br /&gt;Why is this a problem?  Well it means that only the gateway only supports a subset of SMIL.  So in order to make a slide look the way that our client wants it to look we have to modify the gateway code to allow text colours and backgrounds to change.&lt;br /&gt;&lt;br /&gt;Another problem I've had is that there seem to be very few &lt;span style="font-style: italic;"&gt;SMIL tutorials online&lt;/span&gt;.  When I'm learning a new language I usually pick up what I need by asking Google.  Unfortunately even the mighty search engine draws a blank, provides hopelessly outdated pages, or documents like the technical specifications which I don't have time to wade through.&lt;br /&gt;&lt;br /&gt;One useful &lt;span style="font-weight: bold;"&gt;SMIL tutorial&lt;/span&gt; I found was the one provided by the folks who bring you &lt;span style="font-weight: bold;"&gt;Real player&lt;/span&gt;.  They were one of the early adopters of SMIL technology and seem to be fairly heavily invested in providing Real Player for the mobile market.  Their &lt;a href="http://service.real.com/help/library/guides/realone/ProductionGuide/HTML/htmfiles/layout.htm#174692"&gt;SMIL tutorial&lt;/a&gt; is at least up to date, easy to read, and transfer well to open source development.  Of course their player is proprietary and so isn't supported by &lt;span style="font-weight: bold;"&gt;Ambulant&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;player&lt;/span&gt; (an &lt;a href="http://www.ambulantplayer.org/"&gt;open source SMIL 3.0 compliant player&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;The MMS gateway that I'm working on was written in C# about a year and a half ago (I'm guessing).  The SMIL code it produces is definitely version 1.0, which wasn't even a full W3C standard.  It was only since the release of SMIL 2.0 that it has become a recommendation, which has now been superceded by &lt;span style="font-weight: bold;"&gt;SMIL 3.0&lt;/span&gt;.  I found a useful summary of changes between two of these versions (&lt;a href="http://www.w3c.rl.ac.uk/pasttalks/slidemaker/XML_Multimedia/XML_Multimedia/slide62-0.html"&gt;here&lt;/a&gt;), but can't find a cheat sheet for version 3.0.  As soon as I do I will update this post with it.&lt;br /&gt;&lt;br /&gt;I worked out that although the gateway is sending a version 2.0 header it is parsing incoming XML into version 1.0 tags.  Instead of properly parsing the incoming color parameters it had a hardcoded value setting all slides to black and white.  Since the project is due immediately I decided to rather "cheat" instead of fixing the gateway to parse correctly.  I wrote a small PHP image editing class that simply writes whatever text I send it on top of a background image.  I then base64_encode the image and send that as normal jpeg image content in my slide.  This worked first time.&lt;br /&gt;&lt;br /&gt;SMIL defaults the &lt;code&gt;&lt;root&gt;&lt;/root&gt;&lt;/code&gt; and &lt;code&gt;&lt;toplayout&gt;&lt;/toplayout&gt;&lt;/code&gt; areas to a uniform black, while regions and subregions are set to be transparent.  To change the background colour in SMIL 2.0 you set the &lt;span style="font-weight: bold;"&gt;backgroundColor&lt;/span&gt; attribute (in SMIL 1.0 you would use &lt;span style="font-weight: bold;"&gt;background-color&lt;/span&gt; &lt;code&gt;&lt;background-color&gt;&lt;/background-color&gt;&lt;/code&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-7066160341825583400?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5GE8yYb2HCj6WrvsP4AVqQDLm3o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5GE8yYb2HCj6WrvsP4AVqQDLm3o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5GE8yYb2HCj6WrvsP4AVqQDLm3o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5GE8yYb2HCj6WrvsP4AVqQDLm3o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=mCmKgzpigKI:3BXTuyzUwm8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=mCmKgzpigKI:3BXTuyzUwm8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=mCmKgzpigKI:3BXTuyzUwm8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=mCmKgzpigKI:3BXTuyzUwm8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/mCmKgzpigKI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/7066160341825583400/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2010/03/changing-background-color-in-smil.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/7066160341825583400?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/7066160341825583400?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/mCmKgzpigKI/changing-background-color-in-smil.html" title="Changing background color in SMIL" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_uoDmJXxXBuA/S5CQyF5N40I/AAAAAAAABAk/mbaPi1BGb7w/s72-c/1108254_pda_phone.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2010/03/changing-background-color-in-smil.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ANRnkzeip7ImA9WxBVEkw.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-3929104742721075229</id><published>2010-02-14T21:17:00.000-08:00</published><updated>2010-02-14T21:29:57.782-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-14T21:29:57.782-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><category scheme="http://www.blogger.com/atom/ns#" term="crazy monkey man" /><title>Microsoft error message "452 4.3.1 Out of memory"</title><content type="html">I'm troubleshooting a Microsoft mail server.  I go through the logical process of realizing that unless &lt;a href="http://www.youtube.com/watch?v=wvsboPUjrGc" target="_blank"&gt;Crazy Monkey Man&lt;/a&gt; has put some sort of voodoo magic on my server box there must be a good reason why a Microsoft product isn't working.  *cough*.&lt;br /&gt;&lt;br /&gt;Right, I telnet onto the server, authenticate myself and try sending a "mail from:" command.  I get the error message "452 4.3.1 Out of memory" which I assume means I'm out of memory.  So I check my server memory to see that it still has 2 gig free and is under no heavy load right now.&lt;br /&gt;&lt;br /&gt;Hmm, how could an SMTP service demand 2gig of RAM I wonder?  Not even Microsoft would be so daring to put a hardware requirement like that.&lt;br /&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_uoDmJXxXBuA/S3jbhA7oH8I/AAAAAAAABAc/BCmSE57eOW4/s200/861118_clown.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5438337910282133442" alt="Microsoft should choose a new mascot" /&gt;&lt;br /&gt;The truth is that when Microsoft says that you're "Out of memory" what they actually mean is that you don't have write privileges to a particular folder (&lt;a href="http://support.microsoft.com/kb/276326" target="_blank"&gt;click here if you don't believe me&lt;/a&gt;).  They just say you're out of memory to trick you.  Sort of like Microsoft's idea of a friendly joke.&lt;br /&gt;&lt;br /&gt;Only problem is that I *do* have write privileges on the folder in question.&lt;br /&gt;&lt;br /&gt;Further investigation reveals that Microsoft has two seperate documents on this issue and the error message "Out of memory" can actually mean one of three things.  None of which involve memory.  &lt;a href="http://support.microsoft.com/kb/329167" target="_blank"&gt;Click here if you don't believe me&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Haha, good one Microsoft.  I bet you're laughing all the way to the bank with your little prank.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-3929104742721075229?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mCDKhKFi41hhESF_tTj_d4Bf_4s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mCDKhKFi41hhESF_tTj_d4Bf_4s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mCDKhKFi41hhESF_tTj_d4Bf_4s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mCDKhKFi41hhESF_tTj_d4Bf_4s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=TcyMWBAFeKk:pBBbI0Gk4Rs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=TcyMWBAFeKk:pBBbI0Gk4Rs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=TcyMWBAFeKk:pBBbI0Gk4Rs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=TcyMWBAFeKk:pBBbI0Gk4Rs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/TcyMWBAFeKk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/3929104742721075229/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2010/02/microsoft-error-message-452-431-out-of.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/3929104742721075229?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/3929104742721075229?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/TcyMWBAFeKk/microsoft-error-message-452-431-out-of.html" title="Microsoft error message &quot;452 4.3.1 Out of memory&quot;" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_uoDmJXxXBuA/S3jbhA7oH8I/AAAAAAAABAc/BCmSE57eOW4/s72-c/861118_clown.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2010/02/microsoft-error-message-452-431-out-of.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IDQXw9cSp7ImA9WxBWGEs.&quot;"><id>tag:blogger.com,1999:blog-1356169494544655761.post-241599046181668536</id><published>2010-02-10T20:44:00.000-08:00</published><updated>2010-02-10T21:19:30.269-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-10T21:19:30.269-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><category scheme="http://www.blogger.com/atom/ns#" term="adventures in IT" /><title>Connecting PHP to a MS-SQL database</title><content type="html">As is so often the case a surprise twist was added to one of my projects.  You see, the project manager who had initially briefed this campaign left my company.  A detail on one of my projects had not been communicated to me.  &lt;img style="float:right; margin:10px 10px 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_uoDmJXxXBuA/S3OMauQZzzI/AAAAAAAABAU/Shjy37Z7Z1o/s200/161361_computer_keyboard_2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5436843565887639346" /&gt;This detail was the requirement that my mobile website use the user authentication data from a traditional browser website being set up by another agency.&lt;br /&gt;&lt;br /&gt;This presented a number of problems, not least was the extremely tight deadline.  More concerning was the fact that the database design that had been agreed upon (unbeknownst to me) was obviously not going to work.  When I pointed this out to the other agency they stuck to their guns and insisted that they were not going to change their design.  Ego is such a terrible thing.  Eventually I emailed the stakeholders and said that I was going to code to their specification but wanted everybody to know that it was not going to meet project requirements.  It was only after I had coded to their faulty design and had completed testing that they decided to change their database design.  This was a somewhat phyrric victory in that I had to recode (again).  *sigh*&lt;br /&gt;&lt;br /&gt;My next major concern was the fact that this company is a Microsoft house and so my lovely LAMP setup would have to play nice with the beast that is Microsoft SQL server.&lt;br /&gt;&lt;h3&gt;The hard way&lt;/h3&gt;&lt;br /&gt;There are Microsoft drivers that run PHP in MS-SQL (see &lt;a href="http://php.net/manual/en/book.mssql.php" target="_blank"&gt;php.net&lt;/a&gt;).  The driver leverages the ODBC driver included in the "Microsoft SQL Server 2008 Native Client" thus this PHP lib will only run on Windows.  How many production WAMP servers are there in the world?  I've never seen one.  Linux users are recommended to use FreeTDS that has been compiled using --enable-msdblib.&lt;br /&gt;&lt;br /&gt;Right!  So off I go to download and compile FreeTDS.  Then I recompile PHP with the appropriate flag and the ms-sql extension is now visible in phpinfo().  Hurray!&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;The expensive way&lt;/h3&gt;&lt;br /&gt;There are also a few proprietory solutions that I looked over, but when it comes to Linux I always look for OSS.  I would rather RTFM or RTFS than spend hundreds of dollars buying a proprietory Microsoft SQL driver.  Even if the money doesn't go to &lt;a href="http://www.google.co.za/search?q=crazy+monkey+man&amp;ie=utf-8&amp;oe=utf-8&amp;aq=t&amp;client=firefox-a&amp;rlz=1R1GGGL_en-GB___ZA360" target="_blank"&gt;crazy monkey man&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;On day two with one day to deadline I was still having issues with the FreeTDS implementation.  I kept blaming my code, my installation, or whichever colleague was within range.  Eventually it turns out that the other agency had forgotten to allow remote network connections to the SQL server.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;An easier way&lt;/h3&gt;&lt;br /&gt;If you don't have time, don't feel like recompiling PHP, don't feel like compiling FreeTDS, and just want a quick solution then try the &lt;a href="http://pear.php.net/package/MDB2" target="_blank"&gt;PEAR database abstraction layer&lt;/a&gt;.  For some reason I've always been slightly averse to using PEAR, but it is a very simple way to implement Microsoft SQL into your project.  Because I only had a day to go I did a very quick and dirty PEAR implementation which was stable enough to convince me to check on their server setup.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1356169494544655761-241599046181668536?l=abeak.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7b5VVEAp-gZPIE94lZf-3823ZIo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7b5VVEAp-gZPIE94lZf-3823ZIo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7b5VVEAp-gZPIE94lZf-3823ZIo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7b5VVEAp-gZPIE94lZf-3823ZIo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=ZwQpgCaxbFg:5zZPuVY1fV8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=ZwQpgCaxbFg:5zZPuVY1fV8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?i=ZwQpgCaxbFg:5zZPuVY1fV8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/KRCe?a=ZwQpgCaxbFg:5zZPuVY1fV8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/KRCe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KRCe/~4/ZwQpgCaxbFg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://abeak.blogspot.com/feeds/241599046181668536/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://abeak.blogspot.com/2010/02/connecting-php-to-ms-sql-database.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/241599046181668536?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1356169494544655761/posts/default/241599046181668536?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KRCe/~3/ZwQpgCaxbFg/connecting-php-to-ms-sql-database.html" title="Connecting PHP to a MS-SQL database" /><author><name>Andy Beak</name><uri>http://www.blogger.com/profile/17958054507464898637</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/_uoDmJXxXBuA/TP5_IhTN9YI/AAAAAAAABCM/Nrwo09Q8qeo/S220/funny-pictures-cat-winks-at-you.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_uoDmJXxXBuA/S3OMauQZzzI/AAAAAAAABAU/Shjy37Z7Z1o/s72-c/161361_computer_keyboard_2.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://abeak.blogspot.com/2010/02/connecting-php-to-ms-sql-database.html</feedburner:origLink></entry></feed>

