<?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" gd:etag="W/&quot;A0EDQH08eSp7ImA9WxNUFU8.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841</id><updated>2009-11-06T17:47:51.371Z</updated><title>Jonathan Levin's Axioms</title><subtitle type="html">Ideas, Rants, Theories vs Getting Things Done</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>77</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/WhenPetProjectsBiteBack" type="application/atom+xml" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">WhenPetProjectsBiteBack</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;CUcMSHYzcSp7ImA9WxNXEkk.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-2660135618188176021</id><published>2009-09-29T16:47:00.004+01:00</published><updated>2009-09-29T17:51:29.889+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-29T17:51:29.889+01:00</app:edited><title>Cycle of Acquiring Knowledge</title><content type="html">&lt;div&gt;I have been doing some reading into data mining recently. It's really interesting stuff.  &lt;/div&gt;&lt;div&gt;To explain it, lets take an example:&lt;/div&gt;&lt;div&gt;Lets say you work in a business that has been working for some years. They have their own way of running themselves and their processes. One day someone comes along and suggests that the business should automate some of their procedures by developing a website that would interact with customers and process their orders. &lt;/div&gt;&lt;div&gt;Some nice PHP/MySQL guy or girl is hired and develops the website and the cycle of acquiring knowledge has unwittingly started.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The diagram below describes how management starts to process its own business knowledge and passes them down the chain so they can be implemented into the application.&lt;/div&gt;&lt;img src="http://4.bp.blogspot.com/__8lgzcJRF8U/SsIs1u3lV5I/AAAAAAAAI6s/b_wN2OsWnbo/s400/down.gif" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 358px; height: 400px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5386917405914388370" /&gt;Eventually, every transaction is saved in the database. Over time, the database has more and more data and then the management of the company asks to get reports from this data.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Why would they ask that? Because they are interested to get an overview about the operations from this new part of the business. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What they could also benefit from is finding patterns and trends from the data which can help the business increase its  own business knowledge. Meaning, data mining.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The diagram below explains the process for that:&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__8lgzcJRF8U/SsIs11tB4kI/AAAAAAAAI60/EZ9mqldtVoU/s1600-h/up.gif"&gt;&lt;/a&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__8lgzcJRF8U/SsIs11tB4kI/AAAAAAAAI60/EZ9mqldtVoU/s1600-h/up.gif" style="text-decoration: none;"&gt;&lt;img style="text-align: left;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; cursor: pointer; width: 379px; height: 400px; " src="http://1.bp.blogspot.com/__8lgzcJRF8U/SsIs11tB4kI/AAAAAAAAI60/EZ9mqldtVoU/s400/up.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5386917407749169730" /&gt;&lt;/a&gt;Here the data goes upstream and back to the business's management. Assuming they find trends or patterns that help them be a better business and more competitive, they should apply that knowledge into the operations of the business.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, I have a question....&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lets say, that the business decided to take the NEW business knowledge and apply it to their website. For example, every person who buys a red hat would also probably buy a green tie (like what 'amazon recommends' does ) or if you come to this landing page, there is an 87.2% chance you are only interested in these lines of products and nothing else. &lt;/div&gt;&lt;div&gt;So they would ask the developers to add that new rule to the website which would in turn make the website better to its users (hopefully).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This means that the cycle went from down to up (like in the first diagram) to up to down (like in the second diagram) and back again. Ergo, a cycle.&lt;/div&gt;&lt;div&gt;And my question is.... how fast on average, do companies repeat the cycle?&lt;/div&gt;&lt;div&gt;How often do they learn from their data lying in their databases and apply it to their businesses?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm going to guess around 6-12 months for a whole cycle, but its a wild guess based on no data whatsoever and in the data mining book I'm reading, you shouldn't really guess with no data.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-2660135618188176021?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/2660135618188176021/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=2660135618188176021" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/2660135618188176021?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/2660135618188176021?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/09/cycle-of-acquiring-knowledge.html" title="Cycle of Acquiring Knowledge" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/__8lgzcJRF8U/SsIs1u3lV5I/AAAAAAAAI6s/b_wN2OsWnbo/s72-c/down.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total></entry><entry gd:etag="W/&quot;A0YHSXw6fip7ImA9WxNQFk4.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-8481023813110202191</id><published>2009-09-22T13:52:00.011+01:00</published><updated>2009-09-22T18:05:38.216+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-22T18:05:38.216+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MySQL" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><title>MySQL2GoogleSpreadsheets</title><content type="html">&lt;div style="text-align: left;"&gt;I've managed to find a way to connect MySQL directly to Google Spreadsheets and although that its not yet perfect, it does show a lot of potential.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You will have a MySQL table directly fed into Google Spreadsheets. From there, you could do some charts, highlights some trends or simply share the data as is with our people in our out of your organization is a secure way.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The end result should look something like this:&lt;/div&gt;&lt;div&gt;&lt;img src="http://code.google.com/securedataconnector/docs/tutorials/spreadsheets_display.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 652px; height: 269px;" border="0" alt="" /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;What you will need:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;A Linux Server with Apache and MySQL&lt;/div&gt;&lt;div&gt;A Google Apps &lt;b&gt;Premier&lt;/b&gt; account&lt;/div&gt;&lt;div&gt;&lt;a href="http://code.google.com/securedataconnector/"&gt;Google Secure Data Connector&lt;/a&gt; installed on your Linux server&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;SDC&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Installing the SDC is a bit tricky but not too difficult and there is a lot of documentation as to how to do it. A lot of it is giving things the right permissions and  configuring 2-3 XML files.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can read more about how SDC works, but from my impressions, it runs on your Linux server and gets data from apache. It then sends that data in a secure way into Google Spreadsheets. So when you query your data, the URL you use is "localhost" which is as if you are on the server.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Apache&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Again, its important to note that everything that SDC gets has to go through Apache, which gives you the option of static data (in the form of CSV or XML files) or dynamic data (from PHP for example). It also means that you should secure Apache to not give the whole world this data. You can do this with &lt;a href="http://oauth.net/"&gt;OAuth&lt;/a&gt; (and there are a lot of instructions as to how to secure Apache with SDC in the SDC documentation) or you could try restricting Apache to know that it will only server 127.0.0.1 since SDC runs on your server. Either way, you need to factor that in.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;MySQL&lt;/b&gt;&lt;/div&gt;&lt;div&gt;The question you must be asking now is, since SDC connects to Apache, how to I get data out of MySQL directly? (hopefully in the future SDC might be able to query MySQL directly)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In order to achieve that, I have used &lt;a href="http://dev.mysql.com/tech-resources/articles/csv-storage-engine.html"&gt;MySQL CSV Storage Engine&lt;/a&gt;, which basically means that MySQL will store all the data from the table into a CSV file on the hard disk (I hope that you are already imagining the possibilities here).&lt;/div&gt;&lt;div&gt;All you would need to do is update that table with an INSERT or UPDATE statement and the CSV file gets updated.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Symlink&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Now we need to connect that CSV file to Apache. For that, we can use a &lt;a href="http://en.wikipedia.org/wiki/Symbolic_link"&gt;Symbolic Link&lt;/a&gt; in Linux and connect the CSV into Apache by placing the link into the directory Apache reads files from (where ever your index.html file is, usually /var/www/html).&lt;/div&gt;&lt;div&gt;Now another thing to remember is that you need to give Apache rights to see the MySQL directory and be careful about doing that. An option could be to create a new database which would create a new directory on the hard disk and to let Apache see that directory. Do try not to let someone that might possible hack Apache to also hack MySQL, but I will leave that kind of thinking to the security analysts.&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;SDC XML configuration file&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;You need to add this symlink as a new rule in the SDC configuration file. You can see some examples there inside the file. When adding a new rule, you need to remember that SDC accesses Apache from the same machine, meaning your URLs should start with &lt;b&gt;http://localhost/&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;Google Spreadsheets&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Go into your Google Spreadsheets and go the to first cell (A1) and type: &lt;blockquote&gt;=importData('http://localhost/[Your File Here]&lt;the&gt;')&lt;/the&gt;&lt;/blockquote&gt; &lt;/div&gt;&lt;div&gt;&lt;img src="http://code.google.com/securedataconnector/docs/tutorials/spreadsheets_import.png" style="text-align: left;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; cursor: pointer; width: 292px; height: 288px; " border="0" alt="" /&gt;&lt;/div&gt;&lt;div&gt;Hopefully, you should see the data from the MySQL CSV table. &lt;/div&gt;&lt;div&gt;If not, you might need to debug it some more.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Problems with SDC&lt;/b&gt;&lt;/div&gt;&lt;div&gt;The installation process wasn't as smooth as we would have liked but we did try something new at the time with MySQL. But apart from that, there are 2 problems we have noticed with SDC:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Refresh rates&lt;/li&gt;&lt;li&gt;High number of rows&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;SDC caches extremely aggressively and when we wanted to make changes to our CSV file, we still saw the old data which confused us through out the process.&lt;/div&gt;&lt;div&gt;A trick to help solve this is, if you goto Google Spreadsheets and in the importData function you change "http://localhost/sample.csv" to "http://localhost/sample.csv?a"&lt;/div&gt;&lt;div&gt;This will force Google to get the new data and you can change the "a" to whatever you like.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A high number of rows (I tried 31k) will get Google Spreadsheets stuck. And when I mean stuck, I don't mean that their server crashes or anything, just that you would wait a long long time to get any results. So you should just show the summarized data you wanted to show.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I am under the impression that this is a relatively new technology for Google and its not 100% tweaked and finalized (it was launched around the end of April 2009). I would assume that it would be good to invest time in structuring it now (meaning, you would be an early adopter), while Google catches up.&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/375697951860081841-8481023813110202191?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/8481023813110202191/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=8481023813110202191" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/8481023813110202191?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/8481023813110202191?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/09/mysql2googlespreadsheets.html" title="MySQL2GoogleSpreadsheets" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;C08CQ3g4eyp7ImA9WxNSF0w.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-8884121954674476216</id><published>2009-08-25T11:31:00.009+01:00</published><updated>2009-08-31T10:44:22.633+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T10:44:22.633+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Jobs" /><title>UK Offshoring Data-Analysis</title><content type="html">&lt;p class="zemanta-img" style="margin: 1em; float: right; display: block; width: 160px;"&gt;&lt;a href="http://www.daylife.com/image/00yt2c9eyZfi7?utm_source=zemanta&amp;amp;utm_medium=p&amp;amp;utm_content=00yt2c9eyZfi7&amp;amp;utm_campaign=z1"&gt;&lt;img src="http://cache.daylife.com/imageserve/00yt2c9eyZfi7/150x100.jpg" alt="BANGALORE, INDIA - APRIL 13:  A tutor talks on..." style="border: medium none ; display: block;" width="150" height="100" /&gt;&lt;/a&gt;&lt;span class="zemanta-img-attribution"&gt;Image by &lt;a href="http://www.daylife.com/source/Getty_Images"&gt;Getty Images&lt;/a&gt; via &lt;a href="http://www.daylife.com/"&gt;Daylife&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: left;"&gt;&lt;a href="http://www.theitjobboard.com/"&gt;TheITJobBoard&lt;/a&gt; contacted me and gave me some more data about an &lt;a href="http://blog.theitjobboard.co.uk/2009/08/sap-offshoring/"&gt;Offshoring Survey&lt;/a&gt; they conducted in the UK.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;From the survey:&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;65.7%&lt;/b&gt; have outsourced part of their IT department to outside the UK in the last 6 months.&lt;/div&gt;&lt;div&gt;Out of the companies that have not outsourced, &lt;b&gt;3.3%&lt;/b&gt; plan to outsource in the next 6 months.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here is a diagram that describes how much the companies would like to outsource their IT departments&lt;/div&gt;&lt;div&gt;&lt;center&gt;&lt;img src="http://spreadsheets.google.com/pub?key=tukGXXeqEKlvNZ6ivrAP_pQ&amp;amp;oid=6&amp;amp;output=image" /&gt;&lt;/center&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;From this chart we can see that people who have outsources more then 51% of their IT departments are quite happy to continue to outsource. While the late comers would also like to outsource a large chunk. And there are those that outsource but very slowly and carefully.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This diagram describes the types of positions that are being outsourced.&lt;/div&gt;&lt;img src="http://1.bp.blogspot.com/__8lgzcJRF8U/SpPO8v05jrI/AAAAAAAAI6c/zPp8AjI0vns/s400/outsource1.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 273px;" alt="" id="BLOGGER_PHOTO_ID_5373866323408948914" border="0" /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;As you can see, the developer/testers and IT/Systems support are the jobs being "commoditized" the most.  It is important to mention if a company is intending on outsourcing managerial and analyst positions, they fully intend on outsourcing the whole spectrum of positions. &lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;The positions from the survey that are "safe" from being outsourced were: IT sales, IT training and IT consulting which accounted for 3% of the total positions being outsourced.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt; &lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;img src="http://1.bp.blogspot.com/__8lgzcJRF8U/SpPQ1PzrGzI/AAAAAAAAI6k/rs8ofFOAJoI/s400/outsource2.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 281px;" alt="" id="BLOGGER_PHOTO_ID_5373868393578044210" border="0" /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;I wanted to show a trend with outsourcing certain positions. Here you can see that while developer/testers and support jobs are the largest part of positions that companies want to outsource, in 52% of cases, they would like to outsource both types of positions at the same time.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;This to me shows that companies are interested to outsource whole parts of their IT departments and not just individual positions.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;According to this survey, offshoring is due to increase in the UK.&lt;/div&gt;&lt;div style="text-align: left;"&gt;I would not like to argue over the effects of this in the economy.&lt;/div&gt;&lt;div style="text-align: left;"&gt;I would like to compare it to the manufacturing factories a few decades ago, which were all offshored to (mainly) Asia. Perhaps this might be a new trend with IT.&lt;/div&gt;&lt;div style="text-align: left;"&gt;  &lt;/div&gt;  &lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-8884121954674476216?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/8884121954674476216/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=8884121954674476216" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/8884121954674476216?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/8884121954674476216?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/08/uk-offshoring-data-analysis.html" title="UK Offshoring Data-Analysis" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/__8lgzcJRF8U/SpPO8v05jrI/AAAAAAAAI6c/zPp8AjI0vns/s72-c/outsource1.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry><entry gd:etag="W/&quot;C04FQHk5fyp7ImA9WxNSF0w.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-6295175053534029004</id><published>2009-08-05T20:25:00.004+01:00</published><updated>2009-08-31T10:45:11.727+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T10:45:11.727+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Jobs" /><title>Life After Redundancy</title><content type="html">&lt;p class="zemanta-img" style="margin: 1em; float: right; display: block; width: 160px;"&gt;&lt;a href="http://www.daylife.com/image/089r25O0Ve1jl?utm_source=zemanta&amp;amp;utm_medium=p&amp;amp;utm_content=089r25O0Ve1jl&amp;amp;utm_campaign=z1"&gt;&lt;img src="http://cache.daylife.com/imageserve/089r25O0Ve1jl/150x100.jpg" alt="BIRMINGHAM, ENGLAND - JUNE 11:  LDV workers wa..." style="border: medium none ; display: block;" width="150" height="100" /&gt;&lt;/a&gt;&lt;span class="zemanta-img-attribution"&gt;Image by &lt;a href="http://www.daylife.com/source/Getty_Images"&gt;Getty Images&lt;/a&gt; via &lt;a href="http://www.daylife.com/"&gt;Daylife&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;I was made redundant about 2 months ago. The reason why I was made redundant was because my previous company cut slightly under 30% of its staff. Apparently, online retail companies are not doing so well and my former company can add to that statistic.&lt;br /&gt;&lt;br /&gt;Personally, I thought that letting go of so many people was very risky. A lot of expertise and system knowledge was lost instantly, particularly in IT. In addition, there had been a few redundancies in the previous 6 months that forced the remaining people to do other people’s work. The question remains, is it possible for a company to be able to respond to the market with a skeleton crew that mainly maintains the existing systems.&lt;br /&gt;&lt;br /&gt;Perhaps this is a feeling that everyone gets when they leave a job – “They won’t be able to last without me!”, but the truth of the matter is, they probably will.&lt;br /&gt;&lt;br /&gt;As for me, I ploughed the unsympathetic fields of job advertisements. I wasn’t particularly encouraged. My main gripe was that some 8-10 months ago, even if I only had half the experience the companies were looking for, I would still be considered. Now, you basically have to have 125% of what the job requires in terms of experience which necessarily means that you need to lower your asking price. There really was/is a lot of very skilled and experienced people looking for work and you get the feeling that they have been waiting in line a lot more then you have.&lt;br /&gt;&lt;br /&gt;There is a happy ending to my story. I did manage to find a job and I now work for a search engine marketing agency.  This would mean that I would get to work with a lot of data on a day-to-day basis and be able to learn more about statistical analysis and data mining.&lt;br /&gt;&lt;br /&gt;What I took away from this experience, is to be careful of small and “exciting” companies, because they are the first ones to get rid of people when things turn bad.&lt;br /&gt;The other thing is if you are spending a lot of time at home, then spend it with your wife.&lt;div&gt;&lt;br /&gt;&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-6295175053534029004?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/6295175053534029004/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=6295175053534029004" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/6295175053534029004?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/6295175053534029004?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/08/life-after-redundancy.html" title="Life After Redundancy" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></entry><entry gd:etag="W/&quot;C04CQ3c6fSp7ImA9WxNQFk4.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-4808407615093380043</id><published>2009-07-24T15:27:00.006+01:00</published><updated>2009-09-22T16:06:02.915+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-22T16:06:02.915+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Jobs" /><title>DBA Salaries in the UK - TheITJobBoard</title><content type="html">TheITJobBoard published a report for 18 different types of IT jobs and what salaries they can expect in different part of the UK&lt;br /&gt;I made my own analysis for DBAs using the pandora software inside google spreadsheets&lt;br /&gt;&lt;i&gt;(Please note, that DBAs positions in this survey include Oracle, MS SQL and MySQL DBAs)&lt;/i&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="width: 477px; text-align: left;" id="__ss_1764731"&gt;&lt;a style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;" href="http://www.slideshare.net/JonathanL/dba" title="DBA Salaried in the UK"&gt;DBA Salaries in the UK&lt;/a&gt;&lt;object style="margin: 0px;" width="477" height="510"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayerd.swf?doc=dba-124844749731-phpapp01&amp;amp;stripped_title=dba"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayerd.swf?doc=dba-124844749731-phpapp01&amp;amp;stripped_title=dba" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="477" height="510"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;View more &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/"&gt;documents&lt;/a&gt; from &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/JonathanL"&gt;JonathanL&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Original:&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 477px; text-align: left;" id="__ss_1763293"&gt;&lt;a style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;" href="http://www.slideshare.net/TheITJobBoard/the-it-job-board-salary-survey" title="The IT Job Board Salary Survey"&gt;The IT Job Board Salary Survey&lt;/a&gt;&lt;object style="margin: 0px;" width="477" height="510"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayerd.swf?doc=theitjobboardsalarysurvey-090724050527-phpapp02&amp;amp;stripped_title=the-it-job-board-salary-survey"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayerd.swf?doc=theitjobboardsalarysurvey-090724050527-phpapp02&amp;amp;stripped_title=the-it-job-board-salary-survey" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="477" height="510"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;View more &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/"&gt;documents&lt;/a&gt; from &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/TheITJobBoard"&gt;TheITJobBoard&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-4808407615093380043?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/4808407615093380043/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=4808407615093380043" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/4808407615093380043?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/4808407615093380043?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/07/theitjobboards-report-for-jobs-in-uk.html" title="DBA Salaries in the UK - TheITJobBoard" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;C04HQXs9eSp7ImA9WxNSF0w.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-8025850234877905696</id><published>2009-07-22T12:41:00.005+01:00</published><updated>2009-08-31T10:45:30.561+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T10:45:30.561+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MySQL" /><category scheme="http://www.blogger.com/atom/ns#" term="Oracle" /><title>Oracle, Sun and Interesting Possibilities</title><content type="html">&lt;p class="zemanta-img" style="margin: 1em; float: right; display: block; width: 137px;"&gt;&lt;a href="http://www.daylife.com/image/046Ncpg2FxaLW?utm_source=zemanta&amp;amp;utm_medium=p&amp;amp;utm_content=046Ncpg2FxaLW&amp;amp;utm_campaign=z1"&gt;&lt;img src="http://cache.daylife.com/imageserve/046Ncpg2FxaLW/127x150.jpg" alt="SAN FRANCISCO - NOVEMBER 14:  Sun Microsystems..." style="border: medium none ; display: block;" width="127" height="150" /&gt;&lt;/a&gt;&lt;span class="zemanta-img-attribution"&gt;Image by &lt;a href="http://www.daylife.com/source/Getty_Images"&gt;Getty Images&lt;/a&gt; via &lt;a href="http://www.daylife.com/"&gt;Daylife&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;a href="http://www.sdtimes.com/blog/post/2009/07/16/The-End-of-Sun.aspx"&gt;Sun is now/soon-to-be part of Oracle&lt;/a&gt; and I am extremely concerned about MySQL. There has been &lt;a href="http://opendatabasealliance.com/"&gt;reassurances from the community&lt;/a&gt;... and I believe they could probably work.&lt;br /&gt;&lt;br /&gt;&lt;span class="zem_olink"&gt;I was wondering however, about the hardware side of Sun. Sun has always thought that by &lt;/span&gt;giving something for free, you encourage customers to buy something else from the same company.&lt;br /&gt;They put that model to work with open-source software like MySQL and hoped that customer will buy their hardware servers.&lt;br /&gt;Oracle hasn't had a hardware side (as far as I know of) and I was wondering what they would do with their new acquisition of Sun's hardware.&lt;br /&gt;&lt;br /&gt;It occurred to me that Oracle could be in a position to develop an SQL-chip, like that on &lt;a href="http://www.kickfire.com/"&gt;kickfire&lt;/a&gt; and sell a "&lt;a href="http://en.wikipedia.org/wiki/Turnkey"&gt;Turn-Key&lt;/a&gt;" hardware solution to its customers. One that they will control and be able to support from the ground up, probably including the operating system.&lt;br /&gt;It would make sense to me that Oracle would invest in hardware that will improve their database's performance and even more probable would be to sell it as a whole to customers.&lt;br /&gt;In addition, if it would be something like kickfire's SQL-chip, then Oracle would increase its position in the BI world and compete with vendors like &lt;a href="http://www.netezza.com/"&gt;netezza&lt;/a&gt; and &lt;a class="zem_slink" href="http://www.teradata.com/" title="Teradata" rel="homepage"&gt;teradata&lt;/a&gt;.&lt;br /&gt;Ultimately, it would provide a one-stop-shop solution to its customers and probably decrease drastically the combined cost of purchasing from several vendors.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;My prediction.&lt;br /&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&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/375697951860081841-8025850234877905696?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/8025850234877905696/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=8025850234877905696" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/8025850234877905696?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/8025850234877905696?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/07/oracle-sun-and-interesting.html" title="Oracle, Sun and Interesting Possibilities" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;C04BRXc8eyp7ImA9WxNSF0w.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-2991786408981366059</id><published>2009-07-16T02:01:00.008+01:00</published><updated>2009-08-31T10:45:54.973+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T10:45:54.973+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="Data" /><title>Google Fusion Tables and Publicly Available Data</title><content type="html">&lt;p class="zemanta-img" style="margin: 1em; float: right; display: block; width: 160px;"&gt;&lt;a href="http://www.daylife.com/image/0e9i7OY8d18SG?utm_source=zemanta&amp;amp;utm_medium=p&amp;amp;utm_content=0e9i7OY8d18SG&amp;amp;utm_campaign=z1"&gt;&lt;img src="http://cache.daylife.com/imageserve/0e9i7OY8d18SG/150x95.jpg" alt="MOUNTAIN VIEW, CA - OCTOBER 18, 2007: (FILE PH..." style="border: medium none ; display: block;" width="150" height="95" /&gt;&lt;/a&gt;&lt;span class="zemanta-img-attribution"&gt;Image by &lt;a href="http://www.daylife.com/source/Getty_Images"&gt;Getty Images&lt;/a&gt; via &lt;a href="http://www.daylife.com/"&gt;Daylife&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;I had a thought. What if &lt;a href="http://tables.googlelabs.com/Home"&gt;Google's Fusion Tables&lt;/a&gt; could host in the future all the publicly available data like the UN data and then allow people around the world to view and analyze it.&lt;br /&gt;&lt;br /&gt;What if the point was to have people make sense of the data for you in a collaborative way so that the publisher benefits with free insights into the data and everyone else benefits from these insights as well.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To fully appreciate what I mean, please watch this really good &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/TED_%28conference%29" title="TED (conference)" rel="wikipedia"&gt;TED&lt;/a&gt; video about visualizing data.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="334" height="326"&gt;&lt;param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;param name="bgColor" value="#ffffff"&gt; &lt;param name="flashvars" value="vu=http://video.ted.com/talks/embed/HansRosling_2006-embed_high.flv&amp;amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/HansRosling-2006.embed_thumbnail.jpg&amp;amp;vw=320&amp;amp;vh=240&amp;amp;ap=0&amp;amp;ti=92"&gt;&lt;embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgcolor="#ffffff" allowfullscreen="true" flashvars="vu=http://video.ted.com/talks/embed/HansRosling_2006-embed_high.flv&amp;amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/HansRosling-2006.embed_thumbnail.jpg&amp;amp;vw=320&amp;amp;vh=240&amp;amp;ap=0&amp;amp;ti=92" width="334" height="326"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-2991786408981366059?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/2991786408981366059/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=2991786408981366059" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/2991786408981366059?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/2991786408981366059?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/07/google-fusion-tables-and-publicly.html" title="Google Fusion Tables and Publicly Available Data" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry><entry gd:etag="W/&quot;C04DQXc-fCp7ImA9WxNSF0w.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-5885363575006376936</id><published>2009-07-16T01:33:00.006+01:00</published><updated>2009-08-31T10:46:10.954+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T10:46:10.954+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Data mining" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><title>Free Business Intelligence - Come Get Some</title><content type="html">&lt;p class="zemanta-img" style="margin: 1em; float: right; display: block; width: 250px;"&gt;&lt;a href="http://www.flickr.com/photos/26286356@N00/266951932"&gt;&lt;img src="http://farm1.static.flickr.com/81/266951932_0ce04e4224_m.jpg" alt="Google Docs &amp;amp; Spreadsheets Logo" style="border: medium none ; display: block;" width="240" height="131" /&gt;&lt;/a&gt;&lt;span class="zemanta-img-attribution"&gt;Image by &lt;a href="http://www.flickr.com/photos/26286356@N00/266951932"&gt;dannysullivan&lt;/a&gt; via Flickr&lt;/span&gt;&lt;/p&gt;Apparently, Google and &lt;a class="zem_slink" href="http://www.panorama.com/" title="Panorama Software" rel="homepage"&gt;Panorama Software&lt;/a&gt; has been giving away free analytical and &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Data_mining" title="Data mining" rel="wikipedia"&gt;data-mining&lt;/a&gt; capabilities within &lt;a class="zem_slink" href="http://docs.google.com/" title="Google Docs" rel="homepage"&gt;Google Spreadsheets&lt;/a&gt; for a while now.&lt;br /&gt;&lt;br /&gt;So to spread the word, here is the tutorial page:&lt;div&gt;&lt;a href="http://www.panoramasoftware.com/google/pivot-table-overview.html"&gt;http://www.panoramasoftware.com/google/pivot-table-overview.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;and here are 2 interviews discussing the product:&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.kyte.tv/ch/6118-scobleizer/302155-part-i-of-changing-business-intel"&gt;http://www.kyte.tv/ch/6118-scobleizer/302155-part-i-of-changing-business-intel&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.kyte.tv/ch/6118-scobleizer/302179-part-ii-of-changing-business-inte"&gt;http://www.kyte.tv/ch/6118-scobleizer/302179-part-ii-of-changing-business-inte&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;After reading those, if you ask yourself "but how can I upload data to Google Spreadsheets?", you can use &lt;a href="http://code.google.com/securedataconnector/"&gt;Google Secure Connector.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Share and Enjoy.  &lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;br /&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-5885363575006376936?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/5885363575006376936/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=5885363575006376936" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/5885363575006376936?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/5885363575006376936?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/07/free-business-intelligence-come-get.html" title="Free Business Intelligence - Come Get Some" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry><entry gd:etag="W/&quot;D0QCQH07eCp7ImA9WxNUFU8.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-7799864616426713200</id><published>2009-06-16T18:33:00.010+01:00</published><updated>2009-11-06T16:36:01.300Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-06T16:36:01.300Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Data mining" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><category scheme="http://www.blogger.com/atom/ns#" term="business" /><title>Business Intelligence for the People</title><content type="html">&lt;a href="http://dilbert.com/strips/comic/2009-03-07/" title="Dilbert.com"&gt;&lt;img alt="Dilbert.com" border="0" src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/40000/3000/500/43544/43544.strip.gif" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Business_intelligence" rel="wikipedia" title="Business intelligence"&gt;Business intelligence&lt;/a&gt; has been talked about for quite a while. Even today, while companies are looking to make budget cuts, some experts are saying that &lt;a href="http://www.silicon.com/research/specialreports/maximising-business-intelligence/beat-the-recession-with-bi-39439890.htm"&gt;BI can be used to beat the recession&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
When I hear about BI systems, the first thing that comes to my mind is a huge and expensive system that has very powerful servers, that sucks data from many sources and runs some intensive and even more expensive reporting suite. Since I had been involved in projects to set those systems up, I know that it can probably take around a year to complete.&lt;br /&gt;
&lt;br /&gt;
So everyone is in fact thinking about saving money yet still being competitive and aggressive in the market. On that subject, there are very popular and stable &lt;a href="http://mysqlbarbeque.blogspot.com/2008/03/open-source-etl-tools-vs-commerical-etl.html"&gt;open source BI suites&lt;/a&gt; and similar products (&lt;a href="http://www.kickfire.com/"&gt;kickefire&lt;/a&gt;, &lt;a href="http://www.scaledb.com/"&gt;scaledb&lt;/a&gt;) to achieve both those goals. Before you deploy some “black magic BI”, because that’s what the big companies are doing, there are some simple things you can do to get valuable information from your data.&lt;br /&gt;
&lt;br /&gt;
Assuming your data is in one place, you can create reports using standard SQL that will benefit your company and make them more competitive. To help with that, I have compiled a list of relatively generic reports that most companies might/should be interested in. There is a good chance that after making these reports, the management will see that you actually have some business knowledge and might ask you for more specific reports. If that is the case, then consider the information you have delivered to be a success.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Sales&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;What is the total number of placed orders?&lt;/li&gt;
&lt;li&gt;What is the total number of orders that were shipped or invoiced? - When a customer places an order it is not always the case that the products are in stock.&lt;/li&gt;
&lt;li&gt;What is the total amount of money from placed orders? – Sum of order value. This can be with or without shipping costs, depends on the management.&lt;/li&gt;
&lt;li&gt;What is the total amount of money from orders that were shipped or invoiced?&lt;/li&gt;
&lt;li&gt;What is the total number of returned/cancelled orders?&lt;/li&gt;
&lt;li&gt;What is the total amount of money that was lost from returned or cancelled orders (or credit notes)?&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
These reports should be for specific period of time. For example 1,2,6 and 12 months or 1,7,14,21 and 28 days.&lt;br /&gt;
You can compare this month to last month’s results or this month to the same month a year ago.&lt;br /&gt;
&lt;br /&gt;
These reports can also be grouped by:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Product types or product ranges&lt;/li&gt;
&lt;li&gt;Geographical areas (city, country or continent)&lt;/li&gt;
&lt;li&gt;Customer matrix (teenagers, elderly, soccer moms, university students..). &lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;Products&lt;/b&gt; (Best Sellers)&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Which products sell the most quantity?&lt;/li&gt;
&lt;li&gt;Which products generate the most revenue? – (product price * quantity)&lt;/li&gt;
&lt;li&gt;Which products generate the most profit? – ((product price – product cost) * quantity) – To make your business more profitable, you should invest your energy in the 20% of the products that generate 80% of the profits.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;Customers&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;How many new accounts/customers do we get (each day, week, month, half year or year)?&lt;/li&gt;
&lt;li&gt;Who are our best customers – that buy the most from us? - The top 20% that make 80% of the profits.&lt;/li&gt;
&lt;li&gt;What is our attrition rate – the numbers of accounts/customers we lose (each day, week, month, half year or year)? - If your attrition rate is high, the sales team needs to find a lot of new people just to keep things the same.&lt;/li&gt;
&lt;li&gt;What is the customer satisfaction? – You will probably get this from surveys or customer feedback.&lt;/li&gt;
&lt;li&gt;What are the top reasons for complaints?&lt;/li&gt;
&lt;li&gt;How many existing customers referred new customers to your company? – You might need to setup something to collect this data. If you send your customers to do your &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Marketing" rel="wikipedia" title="Marketing"&gt;marketing&lt;/a&gt; for you, you can save a lot of money.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Website&lt;/b&gt;&lt;br /&gt;
(Some of these reports can be handled by a separate application like &lt;a href="http://www.google.com/analytics/"&gt;google analytics&lt;/a&gt;)&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Which product pages get the most views?&lt;/li&gt;
&lt;li&gt;Which news/blog articles get the most views?&lt;/li&gt;
&lt;li&gt;How many minutes does the user spend on the website?&lt;/li&gt;
&lt;li&gt;What is the percentage of abandoned shopping carts?&lt;/li&gt;
&lt;li&gt;What is the average amount of time a customer spends in the shopping cart/session?&lt;/li&gt;
&lt;li&gt;Most important – What is the &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Conversion_rate" rel="wikipedia" title="Conversion rate"&gt;conversion rate&lt;/a&gt; of the visitors coming to the site and the people who purchase a product?&lt;/li&gt;
&lt;li&gt;Which &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Landing_page" rel="wikipedia" title="Landing page"&gt;landing pages&lt;/a&gt; are the most viewed?&lt;/li&gt;
&lt;li&gt;Which landing pages have the highest conversion rate?&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Final Words&lt;/b&gt;&lt;br /&gt;
I genuinely hope that this list of reports will help you influence your business and your position in the company for the better.&lt;br /&gt;
&lt;br /&gt;
I would very much like to welcome ideas for new reports or comments on current ones if they are unclear. Your feedback is appreciated.&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;&lt;script defer="defer" src="http://static.zemanta.com/readside/loader.js" type="text/javascript"&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-7799864616426713200?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/7799864616426713200/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=7799864616426713200" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/7799864616426713200?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/7799864616426713200?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/06/business-intelligence-for-people.html" title="Business Intelligence for the People" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CEUFRXw_fyp7ImA9WxJUE0g.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-8527284256041662285</id><published>2009-06-14T14:01:00.008+01:00</published><updated>2009-07-11T23:43:34.247+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-11T23:43:34.247+01:00</app:edited><title>Tired of Youtube? Try the hacked version</title><content type="html">&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap; "&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Tired of not watching the latest&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt; music videos on &lt;a href="http://www.youtube.com/"&gt;youtube&lt;/a&gt; like the way you used to before? Frustrated at the live performance or unplugged version of the song you wanted to hear (I actually like it that way, but anyway…)?  Well do I have a solution for you! &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;China has their own version of youtube called &lt;/span&gt;&lt;a href="http://www.youku.com/"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;YouKu&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap; "&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;We all know for a long time now that in China, they copy everything and have very little or no respect for copyright laws. This sometimes upsets us (check out &lt;a href="http://stackoverflow.com/"&gt;StackOverFlow&lt;/a&gt; vs &lt;a href="http://www.cnprog.com/"&gt;CNprog&lt;/a&gt;), but here is a chance for us to get something back.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap; "&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="  white-space: pre-wrap; "&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Go there and put in the search a name of a particularly famous/infamous blonde singer and see all the lost or missing music videos from youtube.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;a href="http://www.youku.com/"&gt;&lt;img src="http://2.bp.blogspot.com/__8lgzcJRF8U/SjT1aUdm2NI/AAAAAAAAIjc/z3aV3kvg9ho/s400/youku.gif" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 258px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5347168490113915090" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="  white-space: pre-wrap; "&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;If you are lucky, you might even see full movies on it.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="  white-space: pre-wrap; "&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;However, it might be “a bit” slower then youtube is. Sorry.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:-webkit-monospace;font-size:100%;"&gt;&lt;span class="Apple-style-span"  style=" white-space: pre-wrap;font-size:13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-8527284256041662285?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/8527284256041662285/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=8527284256041662285" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/8527284256041662285?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/8527284256041662285?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/06/tired-of-youtube-try-hacked-version.html" title="Tired of Youtube? Try the hacked version" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/__8lgzcJRF8U/SjT1aUdm2NI/AAAAAAAAIjc/z3aV3kvg9ho/s72-c/youku.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CEUBQXsyeip7ImA9WxNSF0w.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-5800757006944599980</id><published>2009-05-30T23:19:00.006+01:00</published><updated>2009-08-31T10:50:50.592+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T10:50:50.592+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="caching" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title>Caching Business Logic in the Database</title><content type="html">This is a presentation I gave at the Cloud Expo Europe in London on the 21st of May 2009.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;I speak about: &lt;div&gt;&lt;blockquote&gt;&lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Cache" title="Cache" rel="wikipedia"&gt;Caching&lt;/a&gt; the results of processed data - data that had business logic applied to it - to the database to be re-used later.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="400" height="300"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4918382&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=4918382&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/4918382"&gt;Caching Business Logic in the Database&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="width: 425px; text-align: left;" id="__ss_1511266"&gt;&lt;object style="margin: 0px;" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cbl-124372220719-phpapp02&amp;amp;stripped_title=cbl-1511266"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cbl-124372220719-phpapp02&amp;amp;stripped_title=cbl-1511266" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-5800757006944599980?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/5800757006944599980/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=5800757006944599980" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/5800757006944599980?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/5800757006944599980?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/05/caching-business-logic-in-database.html" title="Caching Business Logic in the Database" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CEUNRns4eSp7ImA9WxNSF0w.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-7185969948279655941</id><published>2009-05-07T15:45:00.005+01:00</published><updated>2009-08-31T10:51:37.531+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T10:51:37.531+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="caching" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title>I Will be Speaking at the Cloud Computing Expo</title><content type="html">As the title says, I will be speaking at the &lt;a href="http://www.cloudexpoeurope.com/Conference-Sessions/Technical-Track"&gt;Cloud Computing Expo&lt;/a&gt;.&lt;div&gt;And while I have &lt;a href="http://mysqlbarbeque.blogspot.com/2009/03/speeding-up-mysql-for-website.html"&gt;spoken before&lt;/a&gt; to a bunch of people before, this is by far, a lot bigger.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The topics I was thinking of talking about was a piece from my previous presentation which would be about speeding up MySQL for a web site developers.&lt;/div&gt;&lt;div&gt;I have edited those parts of the presentation and uploaded then to youtube.&lt;/div&gt;&lt;div&gt;They can be found &lt;a href="http://www.youtube.com/watch?v=b1qFbi4lPVQ"&gt;here&lt;/a&gt; and &lt;a href="http://www.youtube.com/watch?v=Wie4TgHZPiw"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What I'd like to talk about is a mixture of the posts I had about &lt;a href="http://mysqlbarbeque.blogspot.com/2008/08/storing-conditions.html"&gt;Storing Conditions&lt;/a&gt; and &lt;a href="http://mysqlbarbeque.blogspot.com/2008/02/using-business-rules-in-mysql-overview.html"&gt;Using Business Rules in MySQL&lt;/a&gt;. The idea, as a friend of mine put it is "&lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Cache" title="Cache" rel="wikipedia"&gt;Caching&lt;/a&gt; of Logic" in the database in order to save reprocessing data.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I hope that I am not very vague and I guess that I will need to make it clearer. But for now, I will start preparing the presentation (and I am quite excited about it).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-7185969948279655941?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/7185969948279655941/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=7185969948279655941" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/7185969948279655941?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/7185969948279655941?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/05/i-will-be-speaking-at-cloud-computing.html" title="I Will be Speaking at the Cloud Computing Expo" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry><entry gd:etag="W/&quot;CEQFSXk9eip7ImA9WxNSF0w.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-1512184577965010387</id><published>2009-04-17T02:00:00.005+01:00</published><updated>2009-08-31T10:51:58.762+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T10:51:58.762+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MySQL" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title>Slave Replication Errors</title><content type="html">&lt;p class="zemanta-img" style="margin: 1em; float: right; display: block; width: 250px;"&gt;&lt;a href="http://www.flickr.com/photos/78866962@N00/244949913"&gt;&lt;img src="http://farm1.static.flickr.com/96/244949913_fbbb8166b2_m.jpg" alt="replication errors_edit1" style="border: medium none ; display: block;" /&gt;&lt;/a&gt;&lt;span class="zemanta-img-attribution"&gt;Image by &lt;a href="http://www.flickr.com/photos/78866962@N00/244949913"&gt;MethoxyRoxy&lt;/a&gt; via Flickr&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;I had a problem with slave replication, every now and then we would get an error which manually had to be resolved&lt;/p&gt;&lt;p class="MsoNormal"&gt;We used &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Set Global sql_slave_skip_counter = 1; start slave;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;You might also get some of those when you set up a new slave using a mysqldump. If from the time you started the mysqldump and by the time it finished, some lines were added to the bin logs or you started it at the wrong position, then you would get some duplication errors. &lt;/p&gt;&lt;p class="MsoNormal"&gt;While it looks concerning, don’t panic. You can fix it by skipping the lines that are duplicates, although it’s not an ideal situation.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Now if you want to completely avoid errors, or specifically duplicates and you are sure that the odd ones that come along are not important, then why not try &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/replication-options-slave.html"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;log-slave-errors=1062&lt;/span&gt;&lt;/a&gt; . Even better, you can set it to “&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;all&lt;/span&gt;” and be completely oblivious to any problem that comes along.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Every now and then you can check the log errors and if there are too many problems, get a new mysqldump to re-sync the slave.&lt;/p&gt;&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-1512184577965010387?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/1512184577965010387/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=1512184577965010387" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/1512184577965010387?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/1512184577965010387?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/04/slave-replication-errors.html" title="Slave Replication Errors" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total></entry><entry gd:etag="W/&quot;CEQAQXY9cSp7ImA9WxNSF0w.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-6074933771128403756</id><published>2009-03-15T14:41:00.008Z</published><updated>2009-08-31T10:52:20.869+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T10:52:20.869+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MySQL" /><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title>Speeding Up MySQL for Website Developers</title><content type="html">I gave a presentation for PHP West Midlands (UK) about how to speed up MySQL for people who are primarily website developers.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now the audio for the presentation could have been better. I speak very fast for some reason. I am foreign, so I have an accent. And to top it all off, I have some mistakes here and there.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If this still hasn't discouraged you, please watch the video&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;object width="400" height="300"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5030466&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=5030466&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;div style="width: 425px; text-align: left;" id="__ss_1512415"&gt;&lt;object style="margin: 0px;" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=thequickandeasyguidetospeedingupmysql-090531064406-phpapp01&amp;amp;stripped_title=the-quick-and-easy-guide-to-speeding-up-my-sql"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=thequickandeasyguidetospeedingupmysql-090531064406-phpapp01&amp;amp;stripped_title=the-quick-and-easy-guide-to-speeding-up-my-sql" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div style="width: 425px; text-align: left;" id="__ss_1512415"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="width: 425px; text-align: left;" id="__ss_1512415"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-6074933771128403756?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/6074933771128403756/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=6074933771128403756" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/6074933771128403756?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/6074933771128403756?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/03/speeding-up-mysql-for-website.html" title="Speeding Up MySQL for Website Developers" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></entry><entry gd:etag="W/&quot;CEQBSH08fyp7ImA9WxNSF0w.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-1579992960755453856</id><published>2009-03-07T00:20:00.016Z</published><updated>2009-08-31T10:52:39.377+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T10:52:39.377+01:00</app:edited><title>Follow Up - Question of Speed and Technological Progress</title><content type="html">&lt;p class="zemanta-img" style="margin: 1em; float: right; display: block; width: 310px;"&gt;&lt;a href="http://commons.wikipedia.org/wiki/Image:SixHardDriveFormFactors.jpg"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/be/SixHardDriveFormFactors.jpg/300px-SixHardDriveFormFactors.jpg" alt="Six hard disk drives with cases opened showing..." style="border: medium none ; display: block;" width="300" height="225" /&gt;&lt;/a&gt;&lt;span class="zemanta-img-attribution"&gt;Image via &lt;a href="http://commons.wikipedia.org/wiki/Image:SixHardDriveFormFactors.jpg"&gt;Wikipedia&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;Well, the servers we bought (Dell R200) were in fact very cheap. &lt;div&gt;We were using 2 of them and they could not stack up to 4-5 year old servers (Dell 1750 and 1850) which have SCSI hard disks. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I added a 4 year old Dell 1850 with SCSI disks next to the 2 R200's which were all connected to a separate server running &lt;a href="http://www.apsis.ch/pound/"&gt;pound load balancer&lt;/a&gt;. The total number of maximum concurrent connections tripled.  &lt;/div&gt;&lt;div&gt;The Dell R200's cannot actually take SCSI/&lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Serial_Attached_SCSI" title="Serial Attached SCSI" rel="wikipedia"&gt;SAS&lt;/a&gt; drives (unless you go buy a proper controller). By default, they can only take Nearline-SAS which I heard is not something you would want for a web server.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I would have to say that I am putting the blame on the &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Serial_ATA" title="Serial ATA" rel="wikipedia"&gt;SATA&lt;/a&gt; drives. I would have thought that by now, SATA drives would be as fast as old SCSI drives, but I guess not.&lt;/div&gt;&lt;div&gt;Apart from that, I am still surprised that the new R200's with &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;EIGHT&lt;/span&gt; Gbs of ram could not keep up (not even close) with much older servers.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What I'm looking into now is using &lt;a href="http://www.squid-cache.org/"&gt;squid&lt;/a&gt; for web accelerating. There is a &lt;a href="http://kevin.vanzonneveld.net/techblog/article/install_squid_apache_on_1_server/"&gt;good article&lt;/a&gt; explaining how to install it. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While I can plainly see that the servers we chose were not amazingly fast out of the box, I'd like to believe with some tweaking and using more of the memory, they could get close to the older servers. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The final point is, that it costs man-hours to do any tweaking to the new servers. If you calculate the cost of the man-hours you would be better off just buying a faster server.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-1579992960755453856?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/1579992960755453856/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=1579992960755453856" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/1579992960755453856?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/1579992960755453856?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/03/follow-up-question-of-speed-and.html" title="Follow Up - Question of Speed and Technological Progress" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry><entry gd:etag="W/&quot;CEQMQHw9fCp7ImA9WxNSF0w.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-4776379620542221402</id><published>2009-03-03T23:04:00.009Z</published><updated>2009-08-31T10:53:01.264+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T10:53:01.264+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MySQL" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title>How to Move Your Web Server With No Downtime</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__8lgzcJRF8U/Sa26UNyXohI/AAAAAAAAIjA/4SavpI84N58/s1600-h/moving6pf-268x300.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 179px; height: 200px;" src="http://3.bp.blogspot.com/__8lgzcJRF8U/Sa26UNyXohI/AAAAAAAAIjA/4SavpI84N58/s200/moving6pf-268x300.jpg" alt="" id="BLOGGER_PHOTO_ID_5309104392200757778" border="0" /&gt;&lt;/a&gt;&lt;div style="text-align: left;"&gt;How do you move your web servers to another location with no downtime?&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The answer: the magic of &lt;a href="http://www.howtoforge.com/mysql_master_master_replication"&gt;MySQL Master-Master Replication&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, we are in the process of moving our web servers to another location. As usual, we would prefer to move them without anyone really noticing. What we have done is set up a skeleton of web servers in the new location as well as one database server. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now the trick is, to move without anyone knowing it AND that everything else continues working. In this example, the original location has servers that query the database if there are any new orders and process them. So it is important to keep all the parts of the system running by continually updating the database in the original location. So in this example, if you point your DNS at the new web servers and don’t update the old database, you will basically lose money.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, what do you do?&lt;/div&gt;&lt;div&gt;Well firstly, you should set up a secure and stable connection between the two locations so that the databases can communicate with one another. &lt;a href="http://mysqlbarbeque.blogspot.com/2008/12/ssh-tunneling-between-databases-with.html"&gt;An SSH tunnel&lt;/a&gt;, will do the trick. You can set them up on the actual database server on a certain port, and it will seamlessly connect to the other database server as if it’s on your local network. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Secondly, you set up a Master/Master Active/Passive replication. This is a replication set up which is usually used for &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/High_availability" title="High availability" rel="wikipedia"&gt;high-availability&lt;/a&gt;. You can also use Active/Active replication for &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Load_balancing_%28computing%29" title="Load balancing (computing)" rel="wikipedia"&gt;load balancing&lt;/a&gt; if you take into consideration that auto-incrementing numbers would conflict on both servers. &lt;a href="http://www.howtoforge.com/mysql_master_master_replication#comment-7114"&gt;There is a solution for that as well&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On the day of the move, tell your web servers from the original location to query the database in the new location through the SSH tunnel. This will slow them down, but it should be only for a few moments.&lt;/div&gt;&lt;div&gt;Change the DNS to point to the new web servers and that they are pointing to the new database server.&lt;/div&gt;&lt;div&gt;Now you have your web servers in your new location and all the other servers and services running from the updated database in your old location. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All that’s left is to move the other servers and complete the entire move. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Job well done! You have completed the move with (hopefully) no downtime and no orders were lost. Your boss(es) will definitely be pleased with you.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-4776379620542221402?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/4776379620542221402/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=4776379620542221402" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/4776379620542221402?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/4776379620542221402?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/03/how-to-move-your-web-server-with-no.html" title="How to Move Your Web Server With No Downtime" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/__8lgzcJRF8U/Sa26UNyXohI/AAAAAAAAIjA/4SavpI84N58/s72-c/moving6pf-268x300.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry><entry gd:etag="W/&quot;CEQNSHk6fCp7ImA9WxNSF0w.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-7180139525830489804</id><published>2009-03-01T01:41:00.010Z</published><updated>2009-08-31T10:53:19.714+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T10:53:19.714+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MySQL" /><title>A Question of Speed and Technological Progress</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/__8lgzcJRF8U/SansTjWseyI/AAAAAAAAIiQ/8dHi-Mu-u9U/s1600-h/500_1185305951_19108619.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 150px;" src="http://2.bp.blogspot.com/__8lgzcJRF8U/SansTjWseyI/AAAAAAAAIiQ/8dHi-Mu-u9U/s200/500_1185305951_19108619.jpg" alt="" id="BLOGGER_PHOTO_ID_5308033456484940578" border="0" /&gt;&lt;/a&gt;&lt;div&gt;&lt;a href="http://mysqlbarbeque.blogspot.com/2009/03/follow-up-question-of-speed-and.html"&gt;Follow up post to this one&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At my company, we have some really old web servers that host our website. They are from late 2004 and early 2005. Now, at the time, I am sure they were quite expensive.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Recently, we wanted to move to newer web servers and we bought the basic Dell R200 rack servers. Now, arguably they are quite cheap, but thinking about it they will definitely be faster then 4 year old servers, right? &lt;/div&gt;&lt;div&gt;Well, that’s what my predecessor thought when he bought those servers and I myself didn’t think about it till we wanted to start using them. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We noticed that the new servers are at least twice as slow as old servers and that just completely baffled us. No one saw it coming. I mean, the old servers are optimized and tweaked and the new servers just have an un-tweaked but clean install of Ubuntu server with apache. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So what’s going on exactly? How is it that when hardware is so cheap and supposedly so fast, that we now have to spend some time going into configurations, messing around with things, benchmarking and basically spending man hours on something that is supposed to be quite basic. I mean, I even used my cure-all method and threw some memory at the new servers to get them to 8Gb and it still didn’t work.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway, so now we have to start spending time on speeding up the servers. Things that have been suggested were:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Removing un-needed modules or parts from the linux kernel and recompiling it. Although, I’m not too thrilled about that.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Tweaking Apache Config&lt;br /&gt;&lt;/li&gt;&lt;li&gt;And my suggestion which was put everything in memory with TMPFS. Again, I like memory, I’m from a MySQL background.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;From my experience, PHP isn’t usually the bottleneck. So I need to look at the whole puzzle to see where the bottlenecks are. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For my part, I have looked at the MySQL server and we also monitor it with Nagios. I am not seeing any particular slowness from it and Nagios isn’t telling me that its being overused, but I guess I could still run some benchmarks on it. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway, it’s a big mystery to us why it is as slow as it is compared to some 4 year old servers. Granted, the servers we have now are quite inexpensive, but we are still very surprised.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Conclusion&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Moore`s law doesn't apply to web servers and cheap hardware will always be cheap.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I’ll leave some links that I found recently and we will try to use them to speed up the web servers. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Slashdot Effect&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.linuxformat.co.uk/pdfs/download.php?PDF=LXF97.slashdot.pdf"&gt;http://www.linuxformat.co.uk/pdfs/download.php?PDF=LXF97.slashdot.pdf&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Apache Tweaks&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.askapache.com/htaccess/apache-web-server-speed-configuration-hacks.html"&gt;http://www.askapache.com/htaccess/apache-web-server-speed-configuration-hacks.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;TMPFS – Linux Memory Partition&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.howtoforge.com/storing-files-directories-in-memory-with-tmpfs"&gt;http://www.howtoforge.com/storing-files-directories-in-memory-with-tmpfs&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://kevin.vanzonneveld.net/techblog/article/create_turbocharged_storage_using_tmpfs/"&gt;http://kevin.vanzonneveld.net/techblog/article/create_turbocharged_storage_using_tmpfs/&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://mysqlbarbeque.blogspot.com/2009/03/follow-up-question-of-speed-and.html"&gt;Follow up post to this one&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;br /&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-7180139525830489804?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/7180139525830489804/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=7180139525830489804" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/7180139525830489804?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/7180139525830489804?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/03/question-of-speed-and-technological.html" title="A Question of Speed and Technological Progress" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/__8lgzcJRF8U/SansTjWseyI/AAAAAAAAIiQ/8dHi-Mu-u9U/s72-c/500_1185305951_19108619.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></entry><entry gd:etag="W/&quot;CEMBRX45cCp7ImA9WxNSF0w.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-1741476656951473393</id><published>2009-01-28T00:47:00.010Z</published><updated>2009-08-31T10:54:14.028+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T10:54:14.028+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><title>What the ‘Microsoft’?!</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__8lgzcJRF8U/SX-rj2ELNUI/AAAAAAAAIhU/BF1VSL0O1Xk/s1600-h/frustrated_with_computer.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 239px; height: 159px;" src="http://4.bp.blogspot.com/__8lgzcJRF8U/SX-rj2ELNUI/AAAAAAAAIhU/BF1VSL0O1Xk/s400/frustrated_with_computer.jpg" alt="" id="BLOGGER_PHOTO_ID_5296140319107790146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;I’ve had about enough of Microsoft and its approach to help small businesses develop application. The .NET platform is FAR FAR from ‘working everywhere’ and being compatible to everything. Let me write down some points to what I mean.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Windows Applications that are developed in Visual Studio.NET by SMBs usually (almost always):&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Do not work on other machines, even when its .NET.  Don’t assume a .NET application will work on every machine. You need an installation of visual studio for &lt;span class="Apple-style-span" style="font-style: italic;"&gt;each&lt;/span&gt; machine you want your application to work on.&lt;/li&gt;&lt;li&gt;Do not work with Crystal Reports. It might work “ok” on your computer, but if/when it doesn’t print on someone else’s machine, try to find some support.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Stop working when you update windows. Update at your own risk&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Randomly disconnects from the network or has DNS problems. From the words of my system administrator “its being windows”.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Randomly doesn’t connect to the database. See above.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Locks up the database with all the open connections. That’s what happens when you distribute fat clients to everyone.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Crashes when some windows services mysteriously stop working.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Have issues when being deployed and make you click 10 ‘OK’ buttons just to open it. I do not know why, but someone previously decided to have a shared network drive with the .NET files on it, so that we can update one place and everyone goes there to run it (every single time). But try as they might, they still needed to put some config files on each machine.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Have a low learning curve which lets idiots make decisions on software architecture which afterwards are too complicated to change.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My personal opinion is that the Microsoft lock-in, is the problem. It starts off with &lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Oh yes, its so comfy and easy using Excel sheets&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Oh.. lets write some functions using my macros&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Now lets try some VBA/VB6&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Hmm… we need a database… oh.. lets use Access.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;(A year goes by….)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Hmm.. we need something more serious, we have more people using our system…. lets call someone and ask what we need…&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Salesman: “yes, what you need is first of all 2 Windows servers, one with a domain controller/Active Directory and one with MS SQL database. Then you will need lots of CALs (licenses). If you are already there, you might as well use Exchange too. Then you need 2-3 copies of Visual Studio.NET team edition for your small development team. You know what?.. I think you will need a BizTalk server as well, just to be on the safe side. Oh.. and finally, installation and maintenance fees will come to ££££££££££££££££££!”.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Managing Director *gulp*.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Maybe nowadays this scenario may not be so common and more people would be happy cutting down costs. Perhaps by using MySQL instead of MS SQL. However, then you have interfered with the natural order of the way Microsoft wants things to be.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I don’t know, obviously this is a rant because I’m frustrated about some things. I guess I am glad &lt;a href="http://mysqlbarbeque.blogspot.com/2009/01/developing-internal-business.html"&gt;I decided to do something about it&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;br /&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-1741476656951473393?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/1741476656951473393/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=1741476656951473393" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/1741476656951473393?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/1741476656951473393?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/01/what-microsoft.html" title="What the ‘Microsoft’?!" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/__8lgzcJRF8U/SX-rj2ELNUI/AAAAAAAAIhU/BF1VSL0O1Xk/s72-c/frustrated_with_computer.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total></entry><entry gd:etag="W/&quot;CEMMQ3Y8cSp7ImA9WxNSF0w.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-1528452718258131140</id><published>2009-01-18T17:50:00.010Z</published><updated>2009-08-31T10:54:42.879+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T10:54:42.879+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="caching" /><title>Caching and Actually Speeding Things Up</title><content type="html">&lt;p class="zemanta-img" style="margin: 1em; float: right; display: block; width: 250px;"&gt;&lt;a href="http://www.flickr.com/photos/37855527@N00/248144593"&gt;&lt;img src="http://farm1.static.flickr.com/93/248144593_c30c85f4e2_m.jpg" alt="The effect of WP-Cache on Wordpress speed" style="border: medium none ; display: block;" width="240" height="65" /&gt;&lt;/a&gt;&lt;span class="zemanta-img-attribution"&gt;Image by &lt;a href="http://www.flickr.com/photos/37855527@N00/248144593"&gt;Peter Forret&lt;/a&gt; via Flickr&lt;/span&gt;&lt;/p&gt;&lt;div&gt;I've ran into many people throughout my career that were under the impression that caching is a cure for cancer, world hunger and global warming. I myself often fall pray to the "just add more memory" approach for solving problems. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some 5 years ago, while I was working with ASP classic and VB 6 (yes, you are allowed to chuckle now) on my online movie collection, I came up with the idea that nothing actually beats a flat and pre-processed HTML file for speed. I mean, this may seem obvious and no matter how many times I tried to add cache and do all sorts of tricks, nothing would beat a static file. The problem here is that when I suggest this sort of solution, people would almost always answer that "well, we have caching anyway" and that this sort of solution would actually be going backwards.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now granted, you cannot use static files for most dynamic pages (static != dynamic) and maybe this would never be a real long-term solution, however lets just consider these &lt;a href="http://www.avnetlabs.com/php/php-framework-comparison-benchmarks"&gt;benchmarks for PHP and Ruby Frameworks&lt;/a&gt;. No matter how many different types of caches you apply to your framework, you will never actually beat HTML files or baseline PHP files for that matter. But the point is, that going back to basics beats frameworks by an order of magnitude. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This reminded me of something I wrote a loooong time ago about&lt;a href="http://mysqlbarbeque.blogspot.com/2007/11/exploring-event-driven-publishing.html"&gt; event-driven publishing&lt;/a&gt;, when something is updated in the database, the webpage cache of a website gets regenerated.&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;div&gt;This also reminded me about my thoughts about &lt;a href="http://mysqlbarbeque.blogspot.com/2008/08/storing-conditions.html"&gt;storing conditions in database tables&lt;/a&gt;, where you can save pre-processed results to the database to save you re-processing them. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Conclusion&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well, not so much a conclusion, but an option. Consider making the parts of your website that do not change very often, into static files if you are very concerned about speed. Have your system generate these static files every time they need to be updated.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-1528452718258131140?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/1528452718258131140/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=1528452718258131140" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/1528452718258131140?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/1528452718258131140?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/01/caching-and-actually-speeding-things-up.html" title="Caching and Actually Speeding Things Up" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CEIEQno8eyp7ImA9WxNSF0w.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-3812637649859655289</id><published>2009-01-12T13:44:00.005Z</published><updated>2009-08-31T10:55:03.473+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T10:55:03.473+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><title>Developing Internal Business Applications with PHP</title><content type="html">&lt;p class="zemanta-img" style="margin: 1em; float: right; display: block; width: 310px;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Image:PHP-logo.svg"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/en/thumb/2/27/PHP-logo.svg/300px-PHP-logo.svg.png" alt="PHP" style="border: medium none ; display: block;" width="300" height="159" /&gt;&lt;/a&gt;&lt;span class="zemanta-img-attribution"&gt;Image via &lt;a href="http://en.wikipedia.org/wiki/Image:PHP-logo.svg"&gt;Wikipedia&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;Recently, my company has decided to go full (or mostly) open source by moving away from Microsoft technologies. This is a particularly exciting venture to be part of, but in order to explain what I mean, I need to go back a bit and explain the history of the company.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;History&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Since its inception, the company has been a traditional LAMP stack. Over time, some internal business applications were needed to be developed. The initial platform to solve this requirement was Microsoft Office and specifically Access database and some Excel sheets. Later on, more and more VBA programming was added to the Access database. At some stage, a decision was made to move to VB.NET and port the VBA/VB6 code to it.&lt;br /&gt;So far, this story is not that unique and I am sure many of you reading this can either relate to it or know of examples from other places.&lt;br /&gt;&lt;br /&gt;There were issues moving to VB.NET from the start. It took over a year to finally move to it with many complications and a lot of resources invested in it during that time. After some time, the resources depleted and 1 developer was left to maintain the system.&lt;br /&gt;With time, the application stagnated and the 1 developer could not keep up with the bugs and requirements for new features.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Present&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;At this stage I came into the company and I decided that some serious work had to be done to improve the internal business application. I had made a plan to fix and improve the existing code base but saw that it would take a considerable amount of time and energy as well as expertise that we did not have.&lt;br /&gt;At this point, I took a look at other parts of the company. The company has a very good history with open source products. The relatively new PHP team was accomplishing quite a lot of things. All the servers are on various flavours of Linux and maintained well.&lt;br /&gt;&lt;br /&gt;The only parts that were holding the company back were closed source technologies. Specifically, incompatibilities between 3rd party applications, printers and forced networking standards that come with closed source. The cost for .NET developers was also an issue.&lt;br /&gt;It seemed to me that the culture of the company is more aligned with open-source and ultimately, that would be the direction the company should follow. The only problem was that, because of initial convenient and easy-to-use application, the company was locked in to a now costly and constricted system.&lt;br /&gt;&lt;br /&gt;The system that was chosen was PHP. From one point of view, PHP was the obvious choice, considering the expertise the company has. From another point of view, selecting a web-based technology to replace fat clients with rich GUI, isn’t the most obvious choice.&lt;br /&gt;Considering all the different points (and after being grilled by the executives a bit), the decision was made mainly because of our strong history, achievements and expertise with PHP and Linux. The difficulties that PHP might have to replace the VB.NET system were researched and solutions were offered.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Official Reasons to Move to PHP from VB.NET&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;To cut down costs and unify technical support expertise. It is difficult and costly to support multiple systems technologies.&lt;/li&gt;&lt;li&gt;To reduce complexity and speed up development time. The company has had a lot of success delivering products and features with PHP and believes that this success can be replicated for the internal business application.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Full Steam Ahead&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When making this system it is very important to make sure that the system will be very stable, maintainable and flexible for future changes. It would need to prove that it can overcome the difficulties that the old system had troubles facing. After that, development speed is crucial as all new features will have to be put on hold until all the system (or at least some parts of it) is rewritten.&lt;br /&gt;&lt;br /&gt;So the important factors were the quality and flexibility of the code as well as speed of development. I decided that in order to achieve these goals, we would need to use frameworks, tools, add-ons and coding standards. The idea is to leverage existing open-source products and best practices to save time and ensure quality. It is also important to make sure that by using the same tools and following the same coding standards, the code will be maintainable for many years to come.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The List of Technologies&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I have compiled a detailed list of technologies, open-source products, frameworks, tools and coding standards we plan to use to get this project done properly. All of these are supposed to lay the foundation for a rigid and structured development process.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;LAMP Stack - &lt;a href="http://www.php.net/"&gt;PHP 5&lt;/a&gt;, &lt;a href="http://dev.mysql.com/downloads/mysql/5.1.html"&gt;MySQL 5.1&lt;/a&gt;  – for improved replication and partitioning, &lt;a href="http://www.ubuntu.com/products/whatIsubuntu/serveredition"&gt;Ubuntu Server &lt;/a&gt; and &lt;a href="http://httpd.apache.org/"&gt;Apache Web Server &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://framework.zend.com/"&gt;Zend framework&lt;/a&gt; – This is something the company has chosen a long time ago and it’s something we plan to continue with.&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.php.net/apc"&gt;APC&lt;/a&gt;  – &lt;a href="http://en.wikipedia.org/wiki/PHP_accelerator"&gt;PHP accelerating&lt;/a&gt; to speed up bootstrapping.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.danga.com/memcached/"&gt;Memcached&lt;/a&gt; – To speed up database interactions. We came to the conclusion that memcached sped our whole system by a factor of 40.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.doctrine-project.org/"&gt;Doctrine&lt;/a&gt; ORM – I didn’t want us to spend a second of a developers time on mapping database tables to classes, so I wanted an ORM. Doctrine seemed to have a better website then Propel, so we chose that. So it’s literally a case of judging a book by its cover.&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.yahoo.com/yui/"&gt;YahooUI&lt;/a&gt; Javascript Framework – After my developers being biased to &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; and I was biased for &lt;a href="http://www.extjs.com/"&gt;ExtJS&lt;/a&gt;, we decided to choose YahooUI as it was somewhat close to the rich GUI that our VB.NET uses now. We chose this framework to try to keep javascript development to as low as possible by using already made widgets and libraries from the framework.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.phpunit.de/"&gt;PHPUnit&lt;/a&gt;  – This is one of the important parts of the foundation we need to start building the new system. If we cannot have some guarantee that the system is stable then what is the point of the whole thing.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.phpundercontrol.org/"&gt;phpUnderControl&lt;/a&gt; with &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt; (&lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Continuous_integration" title="Continuous integration" rel="wikipedia"&gt;Continuous integration server&lt;/a&gt;) – “&lt;a href="http://en.wikipedia.org/wiki/Continuous_integration"&gt;Continuous integration&lt;/a&gt; describes a set of software engineering practices that speed up the delivery of software by decreasing integration times”. phpUnderControl uses PHPUnit, &lt;a href="http://www.phpdoc.org/"&gt;PHPDocumentor&lt;/a&gt;, &lt;a href="http://pmd.sourceforge.net/"&gt;PMD&lt;/a&gt;, &lt;a href="http://pear.php.net/package/PHP_CodeSniffer"&gt;PHP_CodeSniffer&lt;/a&gt; and &lt;a href="http://checkstyle.sourceforge.net/"&gt;CheckStyle&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; SCM – We obviously, need source control management and we are already familiar with subversion. We had considered &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt;, but didn’t choose it in the end.&lt;/li&gt;&lt;li&gt;&lt;a href="http://framework.zend.com/manual/en/coding-standard.coding-style.html"&gt;Zend Coding Style&lt;/a&gt; – The development team decided that in order to organize and standardize their code, they want to use the Zend Coding style. I also understood that it will later help with phpUnderControl with its style checking.&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Scrum_%28development%29"&gt;Scrum&lt;/a&gt; with &lt;a href="http://www.danube.com/scrumworks"&gt;ScrumWorks&lt;/a&gt; – We use Scrum and we find it very effective. The application we use for it is ScrumWorks Basic. Even though we don’t think it’s the best one, it works for most cases and is quite convenient.&lt;/li&gt;&lt;li&gt;&lt;a href="http://seleniumhq.org/"&gt;Selenium&lt;/a&gt; with &lt;a href="http://www.phpunit.de/manual/3.1/en/selenium.html"&gt;PHPUnit extension&lt;/a&gt; – for front-end testing. Selenium can test front end pages/forms and javascript functionality. Selenium can be called from PHPUnit which will fit with the automated testing suite.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.extremeprogramming.org/rules/userstories.html"&gt;Acceptance Testing for our User Stories&lt;/a&gt; – This is a standard we liked. We like to specify with the user stories the acceptance test or success criteria for this user story to be considered done.&lt;/li&gt;&lt;li&gt;&lt;a href="http://mikebernat.com/blog/MVC_-_Fat_Models_and_Skinny_Controllers_"&gt;Fat-Models, Skinny Controllers&lt;/a&gt; – A standard we are all in agreement is a very good practice.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.phpunit.de/manual/3.1/en/other-uses-for-tests.html"&gt;PHPUnit TestDox&lt;/a&gt; for documentation - I wanted the tests to be the actual documentation. All the requirements and behaviors of the system should be the actual tests of the system. PHPUnit has a way to extract the test name and generate documentation for them. We will also use PHPDocumentor and &lt;a href="http://www.dokuwiki.org/"&gt;Dokuwiki&lt;/a&gt; for anything else.&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/SOAP_%28protocol%29"&gt;SOAP&lt;/a&gt;/&lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;REST&lt;/a&gt;– We will use SOAP/REST for any component that might need to be called from another location. With all the talk about &lt;a href="http://en.wikipedia.org/wiki/Service-Oriented_Architecture"&gt;SOA&lt;/a&gt;, I decided to just implement the minimum use of it, which is to use it when other locations need to use this functionality. This is instead of having the code in 2 places and both try to get data from the same database as the point of integration.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mozilla.com/firefox/"&gt;FireFox&lt;/a&gt;/&lt;a href="https://developer.mozilla.org/en/Prism"&gt;Prism&lt;/a&gt; - We can dictate which default browser we plan to support. Prism is also quite a cool application to make our application look like… a real application.&lt;/li&gt;&lt;li&gt;Validations for HTML and CSS – Even though we don’t need to make our internal business application &lt;a href="http://en.wikipedia.org/wiki/Search_engine_optimization"&gt;SEO&lt;/a&gt; friendly, it still might be a good idea to run some validation on it.&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol"&gt;LDAP&lt;/a&gt; (linux) - We though it might be a good idea to have this for user logging and authentication, but the brightest idea would be that we would then know which printer is closest to that user.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/%28http://www.nagios.org/"&gt;Nagios&lt;/a&gt; for &lt;a href="http://www.mydigitallife.info/2006/09/23/monitor-and-check-web-site-or-server-uptime-and-availability-for-free/"&gt;Web Page monitoring&lt;/a&gt; – We can monitor if the website is up and get advanced warning if something is wrong.&lt;/li&gt;&lt;li&gt;&lt;a href="http://incubator.apache.org/log4php/"&gt;Log4php&lt;/a&gt; – a ready made logging library ported from java.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We are all quite pleased about the decision and look forward to start working on this project. I hope to learn as much as I can from this experience and I am sure the development team feels the same way.&lt;br /&gt;I strongly believe that PHP with the addition of other open source products can deliver the same if not better results then VB.NET/ASP.NET would and I plan to put my money where my mouth is.&lt;br /&gt;&lt;br /&gt;For writing this article, I did some research into Enterprise PHP, but did not find too many (current) articles about them. I hope to start seeing a bigger trend towards Enterprise PHP applications&lt;br /&gt;I will keep bloging about the project when interesting things come up and I keep the right to update the list I made in case we decide that some parts of it are not as good as we thought&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-3812637649859655289?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/3812637649859655289/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=3812637649859655289" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/3812637649859655289?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/3812637649859655289?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2009/01/developing-internal-business.html" title="Developing Internal Business Applications with PHP" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">9</thr:total></entry><entry gd:etag="W/&quot;AkcDRH47eyp7ImA9WxVTF04.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-158329619524730741</id><published>2008-12-31T15:16:00.003Z</published><updated>2008-12-31T15:41:15.003Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-31T15:41:15.003Z</app:edited><title>New Year's Resolution</title><content type="html">Its been a while since I blogged.. and my new year's resolution would be to blog more.&lt;div&gt;&lt;ul&gt;&lt;li&gt;I could say that I have been very busy at work. I can't really say that I haven't been using MySQL, since I've been using it more these days than I have in my entire career.&lt;/li&gt;&lt;li&gt;I could say that I am noticing a trend to blog less in the MySQL community. I could be wrong about that, but I definitely don't see the same names blogging as the ones I used to see a year ago. But that could be that some people just moved on.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I could say that I have just been lazy. My blog statistics certainly reflect that.&lt;/li&gt;&lt;li&gt;Finally, I could say that I lost a bit of enthusiasm for blogging about MySQL. This could be that my priorities have shifted slightly, but I plan to get myself a bit more involved with database developing/administrating in the very near future.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Other things on my list for the new year is:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Re-learn the PHP that I forgot&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Learn Subversion branching&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Learn Git&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Learn PHPUnit testing &lt;- almost done&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Learn how to use CruiseControl or PHPUnderControl&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Look into ExtJS (for a Intranet Project)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Learn Ruby and/or Erlang in my free time......&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&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/375697951860081841-158329619524730741?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/158329619524730741/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=158329619524730741" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/158329619524730741?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/158329619524730741?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2008/12/new-years-resolution.html" title="New Year's Resolution" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CEACRnk6eip7ImA9WxNSF0w.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-6272964934183533119</id><published>2008-12-14T16:08:00.014Z</published><updated>2009-08-31T10:59:27.712+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T10:59:27.712+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MySQL" /><title>Reporting SpeedUp Trick</title><content type="html">I've been asked to make some reports recently for some people in my company.&lt;div&gt;Almost all of them are quite heavy and hit the database pretty hard.&lt;/div&gt;&lt;div&gt;The thing is that these reports are usually generated once or twice a month, but they process a year's worth of data. Every time they are generated, they really upsets my poor production MySQL database.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I was thinking if there maybe could be a better way to just save the processed data in a table and update it every now and then.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So.. this is what I did: &lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;I created a table that keeps the aggregated results from the report.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I added to the start of the SQL statement "&lt;a href="http://dev.mysql.com/doc/refman/5.1/en/insert-select.html"&gt;INSERT INTO reports.thistable SELECT &lt;/a&gt;(the worlds most intensive SQL query)  ;"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;At this point I realised that I need a bit extra help determining which parts of the data should be updated and which is already in the table. So I added an "last_updated" column in both tables with a &lt;a href="http://dev.mysql.com/doc/refman/5.1/en/timestamp.html"&gt;current_timestamp&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I changed the INSERT INTO statement to an &lt;a href="http://dev.mysql.com/doc/refman/5.1/en/insert.html"&gt;INSERT.. ON DUPLICATE KEY&lt;/a&gt; so it can add to the previous amount in the aggregated table.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I also made sure that I added more primary keys to the reports table so the statement will know which fields are in fact duplicate keys.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Lastly, I added: WHERE filter the data table's timestamp column by -&gt; (SELECT the last timestamp on the reports table). So basically, you are (in theory) only getting fresh data to update into your reports table.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is fine for tables that only have data inserted into them. If existing rows get updated, you might need to use a trigger. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What I plan to do is to give an option to clear the whole report table if the user doesn't trust the data. However, in the future, I will limit that query from running during certain work hours to avoid upsetting the production database.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-6272964934183533119?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/6272964934183533119/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=6272964934183533119" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/6272964934183533119?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/6272964934183533119?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2008/12/reporting-speedup-trick.html" title="Reporting SpeedUp Trick" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;DEAHQH4ycCp7ImA9WxNSF0w.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-7187987959505669729</id><published>2008-12-10T20:15:00.004Z</published><updated>2009-08-31T12:05:31.098+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T12:05:31.098+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MySQL" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title>Prepared Statements Killed My Database</title><content type="html">In two separate instances, prepared statements used up all my database's connections and completely locked it. To the point that we had to restart the mysql server and in the other case, physically reset the server (not something you usually do with linux servers).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Apparently, one table had a read lock on it, which made the prepared statement wait a bit too long and it decided to flood the database connections till it would got an answer. Only the table was still locked and the database came to a screeching halt.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;The last thing I saw on my screen was a bunch of the same prepared statement on my process list screen, completely taking up all the slots and then.... I lost my connection to see the process list.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I don't really understand how the perl script and php page that ran the prepared statement could be so aggressive or where was it defined to continue opening new connections till they got an answer.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is definatly a first for me and afterwards I changed some of the tables to be more transactional, so that they wont lock.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Conclusion... well there is no conclusion. I'm not going to rule out using prepared statements, but I am going to look more into their behavior (once I find out where they are).&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-7187987959505669729?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/7187987959505669729/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=7187987959505669729" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/7187987959505669729?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/7187987959505669729?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2008/12/prepared-statements-killed-my-database.html" title="Prepared Statements Killed My Database" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total></entry><entry gd:etag="W/&quot;DEABRX87cCp7ImA9WxNSF0w.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-3052144589396641452</id><published>2008-12-04T12:32:00.007Z</published><updated>2009-08-31T12:05:54.108+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T12:05:54.108+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MySQL" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title>SSH Tunneling between databases with MySQL</title><content type="html">Dear Lazyweb&lt;br /&gt;&lt;br /&gt;I saw recently an interesting installation at a company. This company had databases in two different locations and they established a connection using SSH tunneling.&lt;br /&gt;&lt;br /&gt;The thing that looked very interesting to me is, they setup a dedicated machine that had a MySQL instance on it. That database was mostly empty, but it had a port open on that machine that is a "virtual" tunnel. This allowed you to connect to the databases in the second location but it seemed as if the database is local to the network.&lt;br /&gt;I believe this opens up a SSH tunnel and from my first impressions, it appears to be the case. My question is, how is that setup?&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/375697951860081841-3052144589396641452?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/3052144589396641452/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=3052144589396641452" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/3052144589396641452?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/3052144589396641452?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2008/12/ssh-tunneling-between-databases-with.html" title="SSH Tunneling between databases with MySQL" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total></entry><entry gd:etag="W/&quot;A0AHQXk_eSp7ImA9WxNSFUg.&quot;"><id>tag:blogger.com,1999:blog-375697951860081841.post-8518688590351471670</id><published>2008-11-24T21:42:00.004Z</published><updated>2009-08-29T16:28:50.741+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-29T16:28:50.741+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MySQL" /><title>MySQL Function to Change Hard-Coded Tax, Anyone?</title><content type="html">In the UK, &lt;a href="http://news.bbc.co.uk/1/hi/uk_politics/7745340.stm"&gt;tax prices have gone down from 17.5% to 15%&lt;/a&gt; .&lt;div&gt;Good news!&lt;/div&gt;&lt;div&gt;However, its a bit of a nightmare to change the prices on our websites. We're lucky. We don't have to reprint thousands of pamphlets that have prices for Christmas sales, since we are a primarily web-based company.&lt;/div&gt;&lt;div&gt;My boss said that this is like the Y2K bug, only you have 1 week to fix it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Basically, we need to go over hundreds of pages of code for some 'very' hard-coded tax figures.&lt;/div&gt;&lt;div&gt;Our databases will also need to have a look at. I might need to have an all-encompassing function to look for products with tax already calculated into them and update them.&lt;/div&gt;&lt;div&gt;Oh well, it looks like it will be interesting.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wish me luck.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&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/375697951860081841-8518688590351471670?l=www.jonathanlevin.co.uk'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jonathanlevin.co.uk/feeds/8518688590351471670/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=375697951860081841&amp;postID=8518688590351471670" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/8518688590351471670?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/375697951860081841/posts/default/8518688590351471670?v=2" /><link rel="alternate" type="text/html" href="http://www.jonathanlevin.co.uk/2008/11/mysql-function-to-change-hard-coded-tax.html" title="MySQL Function to Change Hard-Coded Tax, Anyone?" /><author><name>Jonathan</name><uri>http://www.blogger.com/profile/17336586681878234499</uri><email>BoogyBo@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="06703318287193483852" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry></feed>
