<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7681844163425794280</id><updated>2012-01-10T22:57:59.788-08:00</updated><category term='gareth'/><category term='Vista'/><category term='Microsoft'/><category term='MVC'/><category term='APC'/><category term='sysadmin'/><category term='gadgets'/><category term='World of Warcraft'/><category term='apple'/><category term='elections'/><category term='piracy'/><category term='advertising'/><category term='Ajax'/><category term='Blizzard'/><category term='kwin'/><category term='MusicDNA'/><category term='Trac'/><category term='amazon'/><category term='DRM'/><category term='windows'/><category term='Apache'/><category term='Porn'/><category term='Warcraft'/><category term='iPod Touch'/><category term='Windows 7'/><category term='Sam Raimi'/><category term='macintosh'/><category term='Internet'/><category term='kubuntu'/><category term='WoW'/><category term='mouse gestures'/><category term='RIAA'/><category term='Chrome OS'/><category term='security'/><category term='resizing'/><category term='music'/><category term='government'/><category term='Bitwise'/><category term='Synaq'/><category term='Session'/><category term='Search'/><category term='Google'/><category term='kde'/><category term='Open Source'/><category term='kindle'/><category term='YAML'/><category term='expansion'/><category term='xorg'/><category term='PHP'/><category term='movie'/><category term='Bing'/><category term='Starcraft'/><category term='iPhone'/><category term='memory cache'/><category term='national skirt extension program'/><category term='MPAA'/><category term='Linux'/><category term='mac'/><category term='ATI'/><category term='Lenovo'/><category term='about me'/><category term='server'/><category term='Cataclysm'/><category term='symfony'/><category term='Propel'/><category term='issue tracking'/><category term='ubuntu'/><category term='Pinpoint 2'/><category term='karmic'/><title type='text'>Gareth McCumskey ... a PHP Developer</title><subtitle type='html'>My musings, findings, experiments and help related to PHP, general web development and pretty much anything else</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>29</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-7024141748590551841</id><published>2011-11-28T02:42:00.001-08:00</published><updated>2011-11-28T04:22:27.513-08:00</updated><title type='text'>Thinking Critically #1: Homeopathy</title><content type='html'>This is the first in a series of articles I've decided to write that takes current controversial topics and looks at them with an unbiased, critical point of view by weighing up the claims and evidence (if any) that may exist out there. At the end, I will also give a run down of my personal views of the topics I talk about in these articles.&lt;br /&gt;&lt;br /&gt;As I am sure you could have gathered from the title, this particular post is about Homeopathy.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What is Homeopathy exactly?&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;There seems to be a lot of misunderstanding as to what homeopathy actually is. People I have spoken to (family and friends) seem to misunderstand it, thinking it means natural or herbal remedies. While a lot of homeopathic remedies do purport to contain natural ingredients, a lot do not. So if homeopathy isn't about natural/herbal treatments, what is it? The easiest way to describe it is to go through the process a homeopathic remedy goes through to be prepared:&lt;br /&gt;&lt;br /&gt;1. Identify the condition or&amp;nbsp;affliction&amp;nbsp;you wish to cure. Such as insomnia for example (of which there are many homeopathic remedies).&lt;br /&gt;2. Find an active ingredient that would replicate the symptoms; in the case of insomnia, caffeine would replicate the symptom. This called the mother tincture (undiluted).&lt;br /&gt;3. Dilute the active ingredient at a ratio of 1ml per 100ml. Thus creating a 1C solution as per homeopathic nomenclature.&lt;br /&gt;4. Perform a process, known as succussion by homeopathic practitioners, which is supposed to activate the vital energy of the active ingredient. It involves a sequence of shaking and strikes against a surface.&lt;br /&gt;5. Dilute this diluted, succussed liquid into another 100ml of water at the same ratio as the first dilution and perform succussion again. We now have a 1:1000 solution. In other words for every 1 molecule of the original active ingredient we have 1000 parts of water. This gives us a 2C solution to follow homeopathic nomenclature.&lt;br /&gt;6. Continue this process again another 28 times until we arrive at a 30C solution, the recommended dilution according to the homeopathic founder&amp;nbsp;Samuel Hahnemann. We now end up with a solution that is&amp;nbsp;10&lt;sup&gt;−60&lt;/sup&gt;. Or in other words 1 part of active ingredient per 10&lt;sup&gt;60&lt;/sup&gt; of water.&lt;br /&gt;&lt;br /&gt;To put that into perspective, "... a patient would need to consume 1041 pills (a billion times the mass of the Earth), or 1034 gallons of liquid remedy (10 billion times the volume of the Earth) to consume a single molecule of the original substance ..." &lt;a href="http://en.wikipedia.org/wiki/Homeopathy#Dilutions"&gt;as quoted from Wikipedia&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Why is it purported to work?&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;So with such a massive amount of dilution why are there so many people that believe it works? Putting aside the erroneous belief that homeopathy is about natural and/or herbal products, the following is how homeopathy is explained to work:&lt;br /&gt;&lt;br /&gt;1. The act of succussion releases the active ingredients active energy into the water molecules which have the capacity to "remember" that energy, and the potency of that energy stored within the water molecules is enhanced with further dilutions and succussion.&lt;br /&gt;2. That the electron makeup of the water molecules vibrate at the same frequency as the energy of the water molecules and therefore impart the benefits even with no active ingredient remaining.&lt;br /&gt;&lt;br /&gt;There is also a lot of incidental evidence based on the reports from specific individuals that have claimed that they have suffered from a specific affliction that conventional medicines have been unable to cure but after using homeopathic remedies the symptoms and affliction have stopped. You can see people&amp;nbsp;espousing&amp;nbsp;such events on YouTube for example, and these isolated testimonies are often used as an indicator of its efficacy by homeopathic practitioners and those who believe in it.&lt;br /&gt;&lt;br /&gt;The testimony of&amp;nbsp;individual, isolated cases is not, however, a valid way to prove the efficacy of any medical treatment. There are just too many unaccounted for and uncontrolled variables to be able to truly determine if it was the homeopathic remedy that cured/alleviated the persons affliction or some other cause. Other possible causes that could be unaccounted for (and this is not a complete list, just what comes off the top of my head):&lt;br /&gt;&lt;br /&gt;1. Environmental: Perhaps some aspect of the persons environment changed such as change of season (pollen, temperature, winds, etc) or they are no longer subjected to an external cause such as heavy metals, fungus', spores, etc.&lt;br /&gt;2. Placebo Effect: A known medical phenomenon whereby a person given a treatment and told the treatment will help them feels an improvement even though the treatment was faked (sugar pill, fake surgery, etc). Essentially an anomaly produced by the mind that replicates the expected effects of the treatment had it been real.&lt;br /&gt;3. Daily Habits: Perhaps the person started eating a healthier diet at the same time? Maybe they started an exercise regimen? Perhaps they shower more regularly, use a different route to work, or any number of possible alternatives...&lt;br /&gt;&lt;br /&gt;It would also be good to mention that there are many individual, isolated cases where people have shown that homeopathic remedies do not work. These individuals will, for example, take an entire bottle full of homeopathic sleeping pills and show no effect.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What undeniable evidence exists to prove the claims?&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;I have hunted high and low for any studies by those for and against (and neutral) towards homeopathy. While there seem to be many studies that show homeopathy has no benefit besides that which a placebo would give you (such as &lt;a href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pmcentrez&amp;amp;artid=1874503"&gt;this one&lt;/a&gt;, &lt;a href="http://www.parliament.uk/business/committees/committees-a-z/commons-select/science-and-technology-committee/inquiries/homeopathy-/"&gt;this one&lt;/a&gt;, &lt;a href="http://webarchive.nationalarchives.gov.uk/+/www.nhs.uk/Conditions/Homeopathy/Pages/Issues.aspx"&gt;this one&lt;/a&gt;, &lt;a href="http://www.mayoclinicproceedings.com/content/82/1/69"&gt;this one&lt;/a&gt; or even&lt;a href="http://www.thelancet.com/journals/lancet/article/PIIS0140-6736(05)67177-2/fulltext"&gt; this one&lt;/a&gt;), I have yet to find any definitive studies that prove the efficacy of homeopathy greater than a placebo.&lt;br /&gt;&lt;br /&gt;While I have read a number of studies that claim to provide undeniable evidence for the efficacy of homeopathy there have been numerous problems with these:&lt;br /&gt;&lt;br /&gt;1. The study is not done in an isolated, lab environment and therefore cannot control for other possible effects correctly within statistical norms.&lt;br /&gt;2. Population group of study participants are not randomised validly thereby biasing the end result (one study allowed the participants to choose whether they wanted to be treated with the homeopathic vs the conventional medicine which would bias the placebo effect).&lt;br /&gt;3. The participants aren't limited in the affliction they suffer from, thereby introducing many unknowns into the study that cannot adequately be accounted for (one study used a group of cancer sufferers as the basis of its investigation but included around 10-15 different types of cancer sufferers).&lt;br /&gt;4. Cherry picking of data. Some studies blatantly ignore any results that would show against homeopathy and only choose the results that show for homeopathy.&lt;br /&gt;5. Comparisons of homeopathic treatments to invalid data sets. Some studies will take the results of the treatments and compare them to conventional medicine results from other sources such as other hospitals, or even results in of global averages instead of comparing with data retrieved from similar situations.&lt;br /&gt;6.&amp;nbsp;Separate&amp;nbsp;groups are treated&amp;nbsp;differently. One study had the homeopathic group also receiving additional care from medical staff where the "modern medicine" group did not receive this additional care. The improvement in quality of life of the participants would therefore be biased.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What &lt;i&gt;would &lt;/i&gt;be undeniable evidence?&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;There is a very simple and logical method to attempt to prove the efficacy of any drug. A technique &amp;nbsp;used all the time by pharmaceutical companies. It goes something like this:&lt;br /&gt;&lt;br /&gt;1. Get together a large group of people. The more the better, but no less than say a couple hundred. These people need to all be suffering from the same affliction that your treatment/remedy is supposed to cure in relatively the same intensity if possible.&lt;br /&gt;2. Split these people into two groups with roughly the same number in each group.&lt;br /&gt;3. Tell both groups they will be given a remedy to help cure or alleviate the condition they suffer from.&lt;br /&gt;4. Give only ONE group the actual remedy you want to test while giving the other group a placebo.&lt;br /&gt;5. While the test is underway both groups are treated identically to not bring any bias into the results.&lt;br /&gt;6. Measure the changes in participants over time from both groups by asking the same questions and doing the same tests.&lt;br /&gt;&lt;br /&gt;After such a study you will now be able to compare both groups to each other. Seems reasonable to assume that if a remedy/treatment actually worked then the test group should show much better results than the control group. This setup also helps negate the placebo effect to some degree.&lt;br /&gt;&lt;br /&gt;But that's not quite enough. This test would need to be done multiple times with different people. Preferably by different scientists as well to help negate any bias the experimenters may have.&lt;br /&gt;&lt;br /&gt;To date, there have not been any such tests that prove the efficacy of homeopathy as a valid alternative treatment to modern medicine.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;My personal view&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;I remain completely unconvinced. The first step, I feel, to proving homeopathy's efficacy as a viable medical treatment is to perform the kind of tests and studies as I have detailed above. Every other such study has proven it does no better than the placebo group but homeopathic practitioners cry foul of these studies.&lt;br /&gt;&lt;br /&gt;The problem with the homeopathic "culture" is that it is also tends to make conspiratorial accusations. Claims against "Big Pharma" (whatever that is supposed to mean) try to denounce any studies that disprove homeopathy's effectiveness as attempts by the big pharmaceutical companies to protect their own profits. What doesn't seem to be factored in is that, if homeopathic remedies really did work, then the pharmaceutical companies would be the first ones to leap on it as a new revenue producer.&lt;br /&gt;&lt;br /&gt;Speaking of big money, there are homeopathic suppliers which charge outrageous sums of money for these alternative and more "effective" remedies. Homeopathy is a big business, making a lot of money, out of peoples ignorance.&lt;br /&gt;&lt;br /&gt;There are also the scientific issues to deal with. Those dilutions I talked about would essentially wipe out all possibility for even one molecule of the active ingredient to be present in a remedy. And once the dilution gets far enough, there will even be water molecules that have never came into contact with the original active ingredient.&amp;nbsp;Apparently, it will inherit the "energy" or vibration of the ingredient from the water molecules carried over.&lt;br /&gt;&lt;br /&gt;Homeopathic practitioners also will tell you that homeopathic remedies should be used in &lt;i&gt;conjunction &lt;/i&gt;with conventional treatments. This serves very well to hide the lack of effect.&lt;br /&gt;&lt;br /&gt;And lastly, &lt;b&gt;the biggest reason I try to educate people on homeopathy&lt;/b&gt;, is that, unlike other pseudo-sciences like Astrology or the existence of Psychics, we are dealing with peoples health and well being here! People are using homeopathic remedies expecting to be cured and only end up delaying treatments that DO work or &lt;a href="http://whatstheharm.net/homeopathy.html"&gt;dying&lt;/a&gt; because there is an industry of quacks, peddling water, that claim it cures you when there is NO evidence it does!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-7024141748590551841?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/7024141748590551841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2011/11/thinking-critically-1-homeopathy.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/7024141748590551841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/7024141748590551841'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2011/11/thinking-critically-1-homeopathy.html' title='Thinking Critically #1: Homeopathy'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-1291152901214880551</id><published>2011-11-23T21:56:00.001-08:00</published><updated>2011-11-23T22:21:28.155-08:00</updated><title type='text'>Reading the article critically (i.e. properly)</title><content type='html'>Internet news sources are all fighting for readership, the more readers you have, the more advertising revenue you can generate. And therefore, so many of them now resort to linkbaiting tactics and misleading representation of data in order to "scare" people into reading their supposedly factual news article. The problem is also, that so many people just cannot seem to read between the lines to really see what a lot of these news reports are saying.&lt;br /&gt;&lt;br /&gt;Lets take an example. I have just read an article by Juniper Networks about the rise of mobile malware. The title is the usual link-baiting, scare tactic fare;&amp;nbsp;Mobile Malware Development Continues To Rise, Android Leads The Way. The article is &lt;a href="http://globalthreatcenter.com/?p=2492"&gt;here&lt;/a&gt; if you want to give it a quick once over. I'm going to cover the title first. Take the word "malware" out of that title (Mobile Development Continues To Rise, Android Leads The Way). Now we can all probably surmise thats true as well. More and more development is happening in the mobile space every day. More and more companies and software developers are jumping on the mobile bandwagon. And, in fact, Android is also leading the way there too. Android Market is having more new apps being developed for it than any other mobile application store.&lt;br /&gt;&lt;br /&gt;And this is my first point. If you say X phenomenon is on the increase, you firstly need to determine if thats an anomaly based on the trend in the area it operates in. I don't have figures for this (because, wouldn't you know it, that article didn't give any), but this discussion isn't about proving the article, its about discussing the misleading way things are being reported.&lt;br /&gt;&lt;br /&gt;For example, if all mobile application development is seeing an increase of 100%, and at the same time we are also seeing malware development increasing by the same 100%, well, that's not pointing to a unexpected increase in malware. &lt;i&gt;All &lt;/i&gt;mobile apps are increasing by that amount. Its just a part of the curve.&lt;br /&gt;&lt;br /&gt;What a lot of articles tend to do as well is throw "data" at a reader that make things look worse than they really are, and the use of "% increase from last year" is another popular tactic used. A lot of readers don't really seem to understand how that works. Using the linked Juniper article as an example, they make the claim:&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;A 472% increase in Android malware samples since July 2011.&lt;/blockquote&gt;Ok. Thanks. But what was the actual number in July, 2011? If there were only 10 malware apps in July, that means now there are only &amp;nbsp;57.2. A tiny number compared to the vast number of non-malware applications. Why wouldn't they give you the real figures? I'm not privy to what they were thinking, but my first assumption is that the actual numbers are so low that it wouldn't be compelling reading, so they rather use the scarier 472%.&lt;br /&gt;&lt;br /&gt;And this practice continues throughout the article. All accurate data, just completely out of context and therefore ... useless!&lt;br /&gt;&lt;br /&gt;But along with the use of out-of-context data, writers of these articles like to mix in other data which looks related but actually isn't. Here's an example from the piece:&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;October showed a 110% increase in malware sample collection over the previous month and a striking 171% increase from what had been collected up to July 2011.&lt;/blockquote&gt;&lt;br /&gt;So, the way they collect data about malware is by collecting the actual malware. Kind of like anti-virus software on a computer does it. What they don't mention in the article is that the increase in malware "collection" isn't &lt;i&gt;only &lt;/i&gt;a factor of there actually being more malware. Its also a factor of improved methods of detecting and "collecting" them. Those are two very different trends which the article tries to bundle into one in order to help paint a scarier picture.&lt;br /&gt;&lt;br /&gt;Readers should (must) read articles far more critically as there are innumerable tactics writers will use to find ways to make you click that link, become outraged at the content, and share it. When you eventually break it down, they are usually full of half truths and data taken out of context.&lt;br /&gt;&lt;br /&gt;They find a way to lie by telling you the truth...&lt;br /&gt;&lt;br /&gt;(And for the record, with regard to the example article itself, I don't think malware is not &lt;i&gt;an &lt;/i&gt;issue on mobile devices, I just don't think its anywhere near as bad as Juniper paints it)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-1291152901214880551?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/1291152901214880551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2011/11/reading-article-critically-ie-properly.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/1291152901214880551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/1291152901214880551'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2011/11/reading-article-critically-ie-properly.html' title='Reading the article critically (i.e. properly)'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-7981678381049874587</id><published>2011-11-20T22:03:00.001-08:00</published><updated>2011-11-21T01:26:12.736-08:00</updated><title type='text'>Thinking about your data model</title><content type='html'>Web applications are so much more than they used to be these days. With integrations into other web applications through exposed API's, the shifts to Single Sign On mechanisms, data sources that vary from the traditional database backends, no-sql solutions such as the Cassandra's out there and even flat files, the amount of data an application needs to process and be aware of is pretty intense.&lt;br /&gt;&lt;br /&gt;And yet most web applications treat every data source except the local database as a second-class citizen. Even though those alternate data sources are critical to the running of the application, its only the database itself that is treated with abstraction within the application's model layer.&lt;br /&gt;&lt;br /&gt;Model Layer? Well, any web developer attempting to build a web application in this day and age without the structure of some form of MVC (Model-View-Controller) architecture behind it is asking for a difficult time ahead. MVC imparts a fixed structure to a project with a very sensible&amp;nbsp;separation&amp;nbsp;of concerns in order to make your web application a more maintainable as well as extensible product. If you still work in the days of single files with HTML, business logic and data access all scrunched together, then you are woefully behind the best practices at the moment.&lt;br /&gt;&lt;br /&gt;Unfortunately, a lot of the power of the MVC design pattern is diluted by misuse. Hell, I have even caught myself doing it at times. The one aspect I am discussing here is the model (or data) layer, which exists for the sole reason of being a central mechanism to allow you to grab the data you need for your application without having to worry about how that data is implemented, where it is stored, what the database architecture is, or even if its a database at all. And that last point is where things fall short.&lt;br /&gt;&lt;br /&gt;A number of web apps I have seen (and BrandFu is not exempt from this unfortunately) will use the model layer exclusively for the applications own database. Any other data source is accessed ad hoc, and in varying ways, all throughout the application's controller and view layers and occasionally within the model but only to extend the abilities of grabbing rows out of the database. The problem with this method is that, if you ever want to decouple from a specific data source, such as a web service for example, and want to switch from consuming that web service to storing and managing that data on your own database, it will be a nightmare.&lt;br /&gt;&lt;br /&gt;I am not saying I am not to blame either. I do get caught out with this myself. Developing BrandFu, we found ourselves occasionally making calls to external web service from outside the model layer. And a few weeks ago, we had some interest from a company who would like to have the service installed as a seperate instance over their own network to be able to provide BrandFu services to their own clients but on their own managed servers.&lt;br /&gt;&lt;br /&gt;Sounds great but theres one problem. At SYNAQ we have an internally used "API" and Single Sign On (SSO) system called SASY. The BrandFu application itself relies quite heavily on SASY as a data source, but unfortunately for us, the web service requests are scattered around the code in the controller layer. Not all, but a fair number of them.&lt;br /&gt;&lt;br /&gt;The solution? Replicate the object model returned from these existing API calls as pseudo-database tables in our symfony schema.yml file. Essentially, map the data returned from these API calls as if they were tables in our local database. symfony can then auto-generate the model classes for these API calls, exactly as it would in the more traditional database model, except we can then go ahead and create methods within these model classes that, instead of resulting in calls to our database, will make the API request to SASY, hydrate the object and send that back.&lt;br /&gt;&lt;br /&gt;The result is that any chunk of code that needs that data doesn't know where it came from. It doesn't care. As long as it gets what it wants and can continue processing, why should it? This also encourages re-use a lot more, reduces code complexity, and makes maintenance even easier.&lt;br /&gt;&lt;br /&gt;The other benefit, is that if we ever need to move away from an API-based data source for those "tables", well, their schema has already been defined and adding the bit of additional code to make a database query instead of a REST request is a lot simpler. You could even have support for both an API data source or a local database and switch between the two via config.&lt;br /&gt;&lt;br /&gt;In fact, that's exactly I will be doing now. BrandFu is going to be transitioned to as clean a data model as possible over the next few weeks. This will simply make the application easier to maintain, easier to extend and easier to implement over a variety of systems and networks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-7981678381049874587?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/7981678381049874587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2011/11/thinking-about-your-data-model.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/7981678381049874587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/7981678381049874587'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2011/11/thinking-about-your-data-model.html' title='Thinking about your data model'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-4673257673288490083</id><published>2011-10-03T03:00:00.000-07:00</published><updated>2011-10-03T03:00:17.939-07:00</updated><title type='text'>BrandFu: Distilling the lessons learnt</title><content type='html'>Over the last few months, yours truly has been a little busy. We recently built and launched a product in the US called &lt;a href="http://www.brandfu.com/"&gt;BrandFu&lt;/a&gt;. I'll let you go look at the site for details on what it actually does.&lt;br /&gt;&lt;br /&gt;Along the way, I have also been doing a bunch of reading up on different aspects of our Internet economy. &lt;a href="http://www.buzzmachine.com/"&gt;Jeff Jarvis'&lt;/a&gt; books was one source. &lt;a href="http://www.buzzmachine.com/what-would-google-do/"&gt;What Would Google Do?&lt;/a&gt; is actually a fantastic&amp;nbsp; look at the way the Internet (and not just Google) has changed the face of our economies and how to leverage the same techniques as the big players in that space to excel at what you want to accomplish in your business. I also just recently bought another book of his as soon as I heard it was available on the Kindle; &lt;a href="http://www.buzzmachine.com/publicparts/"&gt;Public Parts&lt;/a&gt;. I haven't read it yet, only just started the intro, but again, it seems like a must read for anyone involved in online economies.&lt;br /&gt;&lt;br /&gt;Another addition to the reading list is &lt;a href="http://theleanstartup.com/"&gt;The Lean Startup&lt;/a&gt; by IMVU co-founder, Eric Ries. Again, not finished it, but another good read that does echo a lot of the same thoughts as the other two books.&lt;br /&gt;&lt;br /&gt;So with the references out of the way up front, I just wanted to highlight some of the big lessons learnt from our own experiment launching BrandFu into an unknown market, as well as what these books point out.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Be prepared to move out of your comfort zone&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The first thing to be aware of is that the modern age requires that people can multi-task. These days, if you want to be considered a valuable asset to your organisation, you need to be able to do more than just be an engineer. More than just a designer. You need to be able to dip your hand into marketing and customer service as much as you do actual coding.&lt;br /&gt;&lt;br /&gt;Sounds like this has been said before but its surprising how many people, including myself, struggle to move out of that comfort zone. I wanted to develop a product. Dealing with customers was someone else's problem. What I didn't realise was that without customers (via marketing), we could get no feedback (via customer service) which meant we could not develop an application that best suited their needs. That customer interaction was vital to the engineering.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Release early. Even if you think you're not ready!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This is one of those scary aspects for developers. We want perfection. We don't want to push code out that might be buggy and feature-poor. But as I said above, you need customer input. You could spend 12 months in a silo developing what you believe is an awesome application, only to have customers come to you afterwards and tell you that it doesn't do what they need.&lt;br /&gt;&lt;br /&gt;For BrandFu, we did an experiment first. We went from a very simple Proof of Concept just to see what our stumbling blocks would be, to a rapid 3 month development cycle. And then we released the product to a South African customer-base, leveraging off of SYNAQ's existing clientele. Sure, it was buggy, had features missing we thought would be awesome, but by releasing as early as possible to an admittedly smaller audience, we learnt a ton.&lt;br /&gt;&lt;br /&gt;First of all, we learnt that the stuff we thought would be the most popular feature, banner campaigns, actually was secondary to the signature management aspect of the product. If we had siloed ourselves we would have made the banner and campaign management portion of the application absolutely kick ass, but people wanted to use the signature management stuff more. Releasing as early as we did pointed this out to us. We were able to shift focus rapidly and early.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Stay Agile! Especially in the first few months&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;One of the key things we tried to do was to remain as agile as possible. We have a ticket tracking system, JIRA, which is an awesome piece of kit, but we found it slowed us down. While developing our Minimum Viable Product for BrandFu, we were still getting constant feedback from our South African user base. This meant that when new information came in, we had to analyse it, determine what we would do it about it, and then implement. JIRA was slowing us down.&lt;br /&gt;&lt;br /&gt;We ended up with the team sitting in one room, around one table with a big whiteboard. Ideas were hashed out immediately, details were scrawled onto the whiteboard and eventually erased when implemented. It meant our turn around time was hours instead of weeks. We could keep on top of changes we needed to make for our launch rapidly.&lt;br /&gt;&lt;br /&gt;Now that things have launched and we don't have a crazy deadline, we can switch back to the more staggered process of log ticket, allocate to sprint, execute and so on.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Don't get attached to your code&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Your customers will feedback (if you let them to of course, and why wouldn't you), and they will tell you things you don't want to hear. That feature you thought would be awesome and then people tell you they don't want it? Say good bye to it. Never be afraid of throwing stuff away. The Lean Startup even has an example of IMVU, where the product had to be altered so dramatically after launch, that it is now an almost entirely different product serving an entirely different need than it started with.&lt;br /&gt;&lt;br /&gt;Things will change, things will be added, and things will need to get thrown away. It happens.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5. Anything else?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Sure! There was tons of things learnt. But a blog post is really not a good way to point them out here. The books I mentioned I would consider invaluable reading for anyone looking to develop a commercial application on the web. Hell, if your looking to create ANY business in this era of Internet transactions and communications, you would find good use out of the material in those books. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-4673257673288490083?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/4673257673288490083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2011/10/brandfu-distilling-lessons-learnt.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/4673257673288490083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/4673257673288490083'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2011/10/brandfu-distilling-lessons-learnt.html' title='BrandFu: Distilling the lessons learnt'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-1328672772021434529</id><published>2011-01-11T02:24:00.001-08:00</published><updated>2011-01-12T05:07:03.533-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='expansion'/><category scheme='http://www.blogger.com/atom/ns#' term='Blizzard'/><category scheme='http://www.blogger.com/atom/ns#' term='World of Warcraft'/><category scheme='http://www.blogger.com/atom/ns#' term='Cataclysm'/><category scheme='http://www.blogger.com/atom/ns#' term='WoW'/><title type='text'>World of Warcraft: Cataclysm - First thoughts</title><content type='html'>If you have been living under a rock, you may not have heard of the release of the next expansion to the World of Warcraft franchise called Cataclysm. To summarise what this expansion adds:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Two new races. Worgen for the Alliance (a shape shifting, werewolf race coming from the Kingdom of Gilneas which, through WoW's 6 year past, were hiding behind the Greymane Wall in Silverpine Forest) and the Goblin's for the Horde.&lt;/li&gt;&lt;li&gt;Level cap increase to 85 with all the associated questing zones for those 5 levels as well as dungeons and starting raids.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Now that seems par for the course when it comes to a new expansion for an MMO. But what Blizzard did in addition is that before the expansion was released they "shattered" all the old, 6-year old content. Essentially, they gave themselves licence to go back and change, well, everything of the old world that was released with the World of Warcraft 6 years ago. This specific change has me so excited, and I have delved deeply into playing the rebooted content.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My first impression of it? Holy crap its awesome! They have taken every lesson learnt from the last two expansions (Burning Crusade and Wrath of the Lich King) as well as the technologies employed in Wrath like the phasing technology to make questing in starting zones feel more persistent. One of the oddities of questing was when you did a quest such as fight off a horde of invading forces, go hand in the quest where the quest giver thanks you profusely for helping them and it will make life so much easier and yet you go back to where you did the quest and things are still the same. Now, with the phasing tech, they can actually make "permanent" changes to the world for your character.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One of my favourite moments was levelling my new Night Elf Mage (yes, Night Elves can now be mages), and arriving at Astranaar, the town is under attack by the Horde. Your first quests are to kill the fires burning all over the town and then hop into a glaive thrower and kill off a bunch of Horde flyers attacking the town. When you hand the quest in, the fires are gone and the Horde are no longer attacking. Definitely makes it feel like your doing quests actually has an impact on the game world.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The other thing that Blizzard has changed is reducing (and in some zones, eliminating) the stupid quests where you need to kill some bunnies or a few pigs that the guy asking you to do it could probably get it done himself. Now, starter quests make you feel a lot more epic. Every starting zone I have tried so far has that "epic" quest line just before you move onto the next zone. This is important because Blizzard has said they have a large number of new accounts that get created and then never progress past level 10. Making a new player, still getting used to his or her class, feel like they are important to helping save Azeroth will make them want to continue on with their adventure.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There is one exception to this however that I encountered. I created a Human Hunter, just to see what the newer starting area for humans felt like, and unfortunately you still have those rather silly quests in Elwynn Forest where you need to help two love struck farmer's children meet up in secret because their families are feuding. Not exactly inspiring for whats to come but I guess Blizzard had a few limitations as to what changes they could squeeze in before release.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All in all, this is by far the best expansion Blizzard has produced for a game I enjoy playing (as well as, apparently, 12 million other people) and they deserve the record breaking sales they are getting. With all the changes to all the starting content it is far less intimidating than it used to be to get started in WoW as a new player and old players can find some extra fun checking out what was ripped to shreds and replaced.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-1328672772021434529?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/1328672772021434529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2011/01/world-of-warcraft-cataclysm-first.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/1328672772021434529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/1328672772021434529'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2011/01/world-of-warcraft-cataclysm-first.html' title='World of Warcraft: Cataclysm - First thoughts'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-8208561045045879993</id><published>2010-03-19T06:08:00.000-07:00</published><updated>2010-03-19T06:35:19.109-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='resizing'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><category scheme='http://www.blogger.com/atom/ns#' term='kubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='xorg'/><category scheme='http://www.blogger.com/atom/ns#' term='kwin'/><category scheme='http://www.blogger.com/atom/ns#' term='ATI'/><title type='text'>FIX for the ATI/Kubuntu bug for Window resizing</title><content type='html'>So for a long time now, since I have had this machine, I have had an annoying bug. It really is only an annoyance but one I am glad I have finally gotten rid of!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The problem? If you have Kubuntu window compositing turned on and you have an ATI graphics card, resizing a window lags by a few seconds. In effect it means that you drag a window border to resize it, and while your mouse cursor moves to the new destination it takes a few seconds for the window to actually move to the new resized location. This also affected maximising a window from the task bar and even getting the Kmenu to display.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The cause? After a bit of reading, it seems to have something to do with a "fix" added to the Xorg server (one of the components of Kubuntu that handles creating the GUI display) to prevent "garbage" graphical anomalies that displayed for certain Intel graphics cards. The side-effect was that unfortunately, ATI's driver support being what it is (read abysmal), this fix caused resize effects to become incredibly laggy.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The solution? Well, if only there was some way to remove that fix from the Xorg server so that it doesn't affect ATI users (we don't need it after all)? The good news is that you can and it really is not that difficult. We need to replace the existing Xorg server packages with one that does not have this fix in it. Thankfully there is a handy repository that contains just that replacement. Below are the steps to replace the Xorg server with the "unfixed" version that should totally remove the resize issue:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Use Alt + F2 to open the run dialog, and type in konsole.&lt;/div&gt;&lt;div&gt;2. Press enter to open the Konsole terminal application.&lt;/div&gt;&lt;div&gt;3. To add the new location for these replacement Xorg files we need to paste the following into the terminal:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;sudo add-apt-repository ppa:launchpad-weyland/xserver-nobackfill&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4. Once it completes type in:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;sudo aptitude update&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;5. This will reload all the available packages you can install by adding those packages from the new repository we added above. Now type in:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;sudo aptitude upgrade&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;6. You should now get a list of upgrades that will be installed, amongst them being x-server upgrades. Enter Y to prompt asking if you are sure and the downloads will begin.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;7. Once things are download and installed, close the Konsole and then logout (you don't need to shutdown but you can if you really want). Once back on the login screen press Alt+E, which forces the Xorg server to restart.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;8. Log back in and enjoy the compositing effects as they were meant to be enjoyed.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-8208561045045879993?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/8208561045045879993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2010/03/fix-for-atikubuntu-bug-for-window.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/8208561045045879993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/8208561045045879993'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2010/03/fix-for-atikubuntu-bug-for-window.html' title='FIX for the ATI/Kubuntu bug for Window resizing'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-2349651704223644095</id><published>2010-01-25T01:59:00.000-08:00</published><updated>2010-01-25T02:25:58.016-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DRM'/><category scheme='http://www.blogger.com/atom/ns#' term='MPAA'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='RIAA'/><category scheme='http://www.blogger.com/atom/ns#' term='MusicDNA'/><category scheme='http://www.blogger.com/atom/ns#' term='movie'/><title type='text'>Movies do well while music suffers - How to prevent piracy</title><content type='html'>Last year (2009) saw the movie industry breaking records at the box office left, right and center. From the smash-hit Avatar really making a big splash, to record-number turn outs at the cinemas making the movie industry a bucket load of cash. And yet movie piracy is still on the increase.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2009 also saw sales on the traditional music CD dropping and profits dipping for record labels. While artists revenue has increased some have commented that this is simply because artists have been working harder with schedules more stuffed with live performances than ever before.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So why is it that the movie industry is still making huge profits, even though both entertainment industries are suffering from piracy? To me, I see this as a perfect example of the value proposition that each industry's products represent to the average Joe.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When you pirate an album what do you lose out on compared to buying the original CD? Well, you lose the cover art but you can download that online too. The lyrics potentially but again, easily downloaded. Ummmmm.... You do however, depending on the record label, GAIN from piracy because you no longer need to deal with potentially draconian DRM measures that make your life difficult.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lets look at the movie industry. What do you lose when pirating a movie as opposed to going to the cinema? Well, in short ... you don't get to go to the cinema! Sure, you can download the movie, then gather your friends at your place to watch it together. But you don't get to "go out" to the cinema! You don't get to share the mob excitement of watching this new movie. Shuffling into your seat in this vast space with other like-minded people. Have your eyes bedazzled by the enormous big screen in front of you and even experience 3D. Have a top of the range surround sound system that would cause the police to come knocking at your door due to noise complaints if you tried that volume at home. In essence, the experience of going to the movies is something substantial and meaningful to miss by just pirating to watch at home. Sure, its a LOT cheaper to just copy that movie over peer-to-peer networks than for each person to have to pay for a seat, but we pay it anyway because the experience is just not possible to duplicate. And besides, the guys who will download and not go the movies probably cannot afford the ticket prices. However, they get to watch it anyway, spread the word on awesome they thought it was, and potentially push more people to go to the cinema.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A pirated MP3 on my MP3 player sounds just the same as the original CD. So why should I shell out a lot of money for something I can essentially get for free. There is &lt;i&gt;some&lt;/i&gt; good news, however, on the music front. A new technology called &lt;a href="http://www.musicdna.info/"&gt;MusicDNA&lt;/a&gt; has been touted as the new replacement for MP3 and aims to add more to the experience of a genuinely purchased music file from valid commercial sources by embedding new content into a music file as well as meta-information that can get updated over time. This would be the right thinking amongst the record labels. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The only irreplaceable aspect of the music industry right now for customers is the live performance. You cannot download the excitement and feeling of connection with your favorite band or singer a live performance gives you by downloading it. This, in my opinion, is why artists are making more from live performances. And as I said before, people are attributing this to the fact that artists are now working harder doing more live performances. Well, of course, the only way to fulfill demand for more live shows (apart from doubling the sizes of concert venues) is to have more shows. If you have a lot more people wanting to go to the live show, you're going to schedule more of them. Totally logical. And why are there suddenly more people wanting to go to live shows? Perhaps because piracy of music has meant artists are actually getting more exposure than before because their music is being so widely distributed. An audience is being generated where previously there was no traction due to the relatively high cost of buying genuine media.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The movie industry is still breaking box office records because the cinema-going experience cannot be replicated (at least not all that easily)  by piracy, whereas the music industry is essentially stuck offering the exact same thing people can get for nothing. MusicDNA is a good idea that has some merit in trying to do what the movie industry has done; create an experience people are willing to pay for that can't be replaced that easily. In addition, the music industry needs to re-invent itself around the live performance which is the closest corollary to "going to the movies" they have, as this is what people are willing to pay for.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-2349651704223644095?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/2349651704223644095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2010/01/movies-do-well-while-music-suffers-how.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/2349651704223644095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/2349651704223644095'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2010/01/movies-do-well-while-music-suffers-how.html' title='Movies do well while music suffers - How to prevent piracy'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-6366498247602204959</id><published>2009-11-23T22:34:00.000-08:00</published><updated>2009-11-23T22:52:46.054-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Chrome OS'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Chrome OS: The big misunderstanding</title><content type='html'>For some reason people are mistakenly calling Chrome OS a Windows killer. The more I read the comments that come with articles on Google's newly open-sourced Chrome OS, the more I realise people don't actually read the articles. Some people will comment that they believe Chrome OS will be a replacement and actually beat other desktop operating systems like Windows or the Linux operating systems. If people actually read what Chrome OS is and what it does they would realise this is simply not the case. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Google stated pretty blatantly that Chrome OS is basically a web browser built as an operating system. It is being designed to be installed on netbook computers and will &lt;i&gt;only&lt;/i&gt; give access to the Internet and the associated applications. Files will not be stored on the local file system as we know it today. The only local storage will be as a cache. All files are permanently stored on the cloud. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The devices that will have Chrome OS installed on them will be, according to Google, companion devices. Most people will have their traditional, full-blown desktop machine or laptop and a Chrome OS netbook. The netbook will be useful for the times you are out and about and want to quickly access your email, Twitter, Google Apps, etc.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There is a good reason for this, again according to Google. They want to create an experience with the device whereby if you happen to lose it, it breaks or gets stolen you can just pick up a new device, login and all that data is still available. Also, with no local applications they can also make the OS more secure. If there is an application running that shouldn't be there, and by default there should be no apps apart from what is included on purchase, then Chrome OS can reset the entire device. Again, all your data is stored remotely, so you lose nothing with a reset, just a local cached copy.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;These features, while a great idea, mean that Chrome OS is by no means a replacement for your current desktop operating system. There are just too many things that need a desktop application that the cloud does not yet provide for. But if you're an online connected kind of person you will find use for it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What Chrome OS may do, however, is start to push people toward the cloud a bit more. If you use a Chrome OS device, you will need to make sure your documents are stored somewhere that would be available to you over the Internet. And, if you do start storing and even working on all your documents and work over the Internet from your desktop machine, only then will Chrome OS look like a viable alternative to your current desktop OS.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is a very clever tactic by Google, because, while the world isn't ready for running everything off the Internet right now, Google's business &lt;i&gt;is&lt;/i&gt; the Internet, and by releasing an operating system that starts pushing people towards trusting and utilising the cloud for everything, they are inexorably increasing their reach and possibility for providing web based services to .... well everyone. Extend that a little further and this means big money potentially for the Internet giant.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-6366498247602204959?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/6366498247602204959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/11/chrome-os-big-misunderstanding.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/6366498247602204959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/6366498247602204959'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/11/chrome-os-big-misunderstanding.html' title='Chrome OS: The big misunderstanding'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-4538996946046061299</id><published>2009-10-26T22:46:00.000-07:00</published><updated>2009-10-27T00:07:38.516-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='karmic'/><category scheme='http://www.blogger.com/atom/ns#' term='Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Jaunty was Canonical's Vista</title><content type='html'>Jaunty Jackelope, compared to the Karmic Koala Beta I recently installed, seems to have been to Canonical what Windows Vista was to Microsoft. And both Jaunty and Vista suffered problems for the same reason; the OS's included too many new and "improved" features that hardware and software vendors just weren't ready for.&lt;br /&gt;&lt;br /&gt;What really was the major issue with Jaunty was a newer version of the X server that eschewed the proven track record of using xorg.conf files for the auto-generated X configurations. Great idea but didn't work so well, especially for folks forced to use older graphics drivers or even anyone using ATI graphics cards and ATI's proprietary drivers. For myself, with an ATI card installed at home, it meant I had to do some rather tedious work arounds to get my graphics card working on Jaunty.&lt;br /&gt;&lt;br /&gt;Another issue was the switch to Pulse audio being the default sound sub-system in Jaunty. Again, Pulse is great technology but people just weren't fully prepared for it. To this day I still have sound issues with my USB sound card "dongle" for my headphones, as well as issues with sound from Flash video in Firefox.&lt;br /&gt;&lt;br /&gt;With Karmic, it looks as if the Ubuntu developers have not messed around with systems so dependant on outside support such as the graphics and sound systems. Massive improvements to the startup systems though have meant I have boot times of around 5 to 10 seconds (yes you read that right).&lt;br /&gt;&lt;br /&gt;Jaunty was, however never an out and out disaster like Vista was for Microsoft. It had its issues, but with a 6 month release cycle, as opposed to Microsoft's years of development, things can get back on track very quickly, and Karmic sure seems to show that they are.&lt;br /&gt;&lt;br /&gt;One of the big advantages of agile, open source development that Canonical has over Microsoft.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-4538996946046061299?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/4538996946046061299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/10/jaunty-was-canonicals-vista.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/4538996946046061299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/4538996946046061299'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/10/jaunty-was-canonicals-vista.html' title='Jaunty was Canonical&apos;s Vista'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-2303874524308241184</id><published>2009-10-14T00:10:00.000-07:00</published><updated>2009-10-14T00:48:41.845-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='symfony'/><category scheme='http://www.blogger.com/atom/ns#' term='Pinpoint 2'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='Session'/><title type='text'>PHP Session write locking and how to deal with it in symfony</title><content type='html'>It has been a while since I last posted to my blog.  My personal life has seen a lot of upheaval recently with a house move, a hiatus from Synaq, then back to Synaq, and the release of Pinpoint 2 to Synaq customers all playing a major role in eating into my personal time.&lt;br /&gt;&lt;br /&gt;So as my comeback article I thought I would write on an issue that was plaguing us in development of Pinpoint and how, thanks to help from the great symfony community at the symfony users mailing list, we got it resolved.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The problem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With Pinpoint 2, a symfony based application we have developed here at Synaq, we employ quite a lot of Ajax requests in order to make the interface more responsive and less bandwidth hungry; why reload an entire page when you really only want a small sub-set of that page to change? A problem came about when we had an Ajax request running, and while this request was waiting for a response from the server, if a user clicked another link, that link would not "process" until the previous Ajax request had completed. What this meant to us was that it seemed that our requests were "queuing" instead of working asynchronously as they should.&lt;br /&gt;&lt;br /&gt;On one particular section of Pinpoint, we have a number of Ajax requests loading at once, each one interrogating the database for data. Each of those requests "queued" behind each other, and any attempt by the user to go to another module resulted in waiting for each of these queued requests to complete before the browser would process the users interaction.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The cause&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After going through all sorts of different possible fixes, none of which worked, I eventually submitted the above problem to the symfony users mailing list. The response that came back was that it probably had something to do with PHP session-write locking.&lt;br /&gt;&lt;br /&gt;PHP manages sessions, this anyone who codes in PHP knows, and in order to ensure that session data does not become corrupted between requests, PHP will lock write access to the session files for a user while it is processing a request. This results in the following process if you have multiple requests coming through:&lt;br /&gt;&lt;br /&gt;1. Request comes into server, and PHP locks session files.&lt;br /&gt;2. Another request comes in but cannot access the session files because they are locked.&lt;br /&gt;3. The first request processes, running all SQL, processing results, etc.&lt;br /&gt;4. Yet another request comes in but cannot process because session files are locked.&lt;br /&gt;5. The first response is finally finished, sends its output back to the calling function and unlocks session files.&lt;br /&gt;6. The second request begins processing, locks session files and continues to do what it needs to.&lt;br /&gt;7. Request three is still waiting for session access.&lt;br /&gt;8. Yet another request comes in but ..... I think you get the picture.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The solution&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;The only way to resolve this issue is to force the requests to unlock the session files as soon as possible. Thankfully symfony has its own user session storage classes that make this incredibly easy.&lt;br /&gt;&lt;br /&gt;The one problem is that you cannot release the session lock until &lt;span style="font-style: italic;"&gt;after &lt;/span&gt;you have saved data into session that needs to be saved. Our solution was that for each action that processes an Ajax request, write everything as soon as possible to session that needs it and then unlock session to allow any other request to begin processing.&lt;br /&gt;&lt;br /&gt;We hit a roadbump. Using symfony's $this-&gt;getUser()-&gt;setAttribute() command to store session data, we then used PHP's session_write_close() to force PHP to let go of the lock and let the next request begin work. This did unlock session but we noticed that all the data allocated to session using $this-&gt;getUser()-&gt;setAttribute() was not saved.&lt;br /&gt;&lt;br /&gt;After a little exploration of the symfony classes we noticed that when the setAttribute() method is used, in order to speed up processing, symfony does not immediately write to the global PHP $_SESSION variable. Instead it keeps those values in an array until the end of script execution and only then writes to session. Using PHP's session_write_lock() we pretty much made it impossible for symfony to do this because to prevent session data from losing concurrency, PHP does not allow a script to write to session if the session was unlocked.&lt;br /&gt;&lt;br /&gt;We did, however, find another method: $this-&gt;getUser()-&gt;shutdown(). This forces symfony, when the shutdown() method is called, to write session data into $_SESSION and then it also runs session_write_close() itself.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The end result&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;We now have actions that process Ajax requests&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;and once all data has been sent to session using $this-&gt;getUser()-&gt;setAttribute() we run the $this-&gt;getUser()-&gt;shutdown() method. The difference was incredible and has actually speeded up our entire application a ton.&lt;br /&gt;&lt;br /&gt;One thing to be careful of however. You do need to be sure that you call that shutdown() command at the right time, because if you call it too early, session data will not get saved and PHP will just ignore it. We had to reshuffle some code so that all the database calls and data processing functions were run after shutdown() as well.&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Thanks again to the symfony community for helping to point this out and hope this helps others who may have the same issue as well.&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-2303874524308241184?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/2303874524308241184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/10/php-session-write-locking-and-how-to.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/2303874524308241184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/2303874524308241184'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/10/php-session-write-locking-and-how-to.html' title='PHP Session write locking and how to deal with it in symfony'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-5311860142576748437</id><published>2009-07-22T03:01:00.000-07:00</published><updated>2009-07-22T03:28:00.649-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sam Raimi'/><category scheme='http://www.blogger.com/atom/ns#' term='Blizzard'/><category scheme='http://www.blogger.com/atom/ns#' term='World of Warcraft'/><category scheme='http://www.blogger.com/atom/ns#' term='Warcraft'/><category scheme='http://www.blogger.com/atom/ns#' term='movie'/><category scheme='http://www.blogger.com/atom/ns#' term='WoW'/><title type='text'>Warcraft Movie is going to ROCK!</title><content type='html'>I am sorry, but I absolutely HAD to blog about this. It is now confirmed that &lt;a href="http://www.blizzard.com/us/press/090721.html"&gt;Sam Raimi will be directing the upcoming Warcraft movie&lt;/a&gt; based on Blizzard's Warcraft game franchise. For those not in the know, Warcraft has been around since 1994 in the form of a real-time strategy game with two sequels and a number of expansions. It then transformed into the now massive World of Warcraft, the worlds largest Massively Multiplayer Online game, with over 11 million subscribers.&lt;br /&gt;&lt;br /&gt;How do I know its going to be amazing?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. The franchise lore&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The storyline that accompanies Warcraft and the events that play out in its plot all the way from the 1994 RTS game to the current WoW are a move makers delight. Full of action, intrigue, drama, wars, treachery and love stories.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Sam Raimi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When Blizzard first publicly expressed an interest back in 2007 about making a Warcraft movie, Uwe Boll approached Blizzard saying he could direct for them. With this directors serious lack of success at game to movie conversions (anyone remember Street Fighter?), Blizzard pretty much laughed him out and told him where he could stick his offer. They then went and selected, in my opinion, one of the industries finest action/fantasy directors. Pretty much anything Sam has directed has ended up golden.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. Blizzards neurotic caution with its IP&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Blizzard has a very big reputation for ensuring that the quality of anything related to its IP is stellar. For evidence, look at Starcraft Ghost, a game that was supposed to be an FPS based version of the Starcraft universe that was never launched because Blizzard thought it wasn't good enough. The expansions for World of Warcraft were also supposed to only take a year each and notoriously took a lot longer because Blizzard wanted to ensure a quality product. Starcraft 2 as well was supposed to be released last year but was delayed because again, Blizzard wanted it perfect.&lt;br /&gt;&lt;br /&gt;I have no doubt they will employ the same tactic with the movie and not allow it to be released if it ends up being a load of crap.&lt;br /&gt;&lt;br /&gt;There have also been numerous comments around by people who are not as in love with the Warcraft universe as I am, or the 11 million other players of WoW, and believe that only die-hard fans will watch it. Personally I don't think this is the case. The same was said about Harry Potter and yet more people have watched the movies than have read the books or even knew about the books. The lore and storyline that exists within the Warcraft universe is so broad and appealing that it should be a great movie to watch regardless of if you have ever seen or taken part in the games.&lt;br /&gt;&lt;br /&gt;So come release day I will be at the front of the ticket buying queue and happily settle down in front of the big screen with popcorn and drink to be absorbed in a universe I have come to love.&lt;br /&gt;&lt;br /&gt;Lok'tar Ogar!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-5311860142576748437?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/5311860142576748437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/07/warcraft-movie-is-going-to-rock.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/5311860142576748437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/5311860142576748437'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/07/warcraft-movie-is-going-to-rock.html' title='Warcraft Movie is going to ROCK!'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-1577426820868698089</id><published>2009-07-21T22:40:00.001-07:00</published><updated>2009-07-21T23:00:27.197-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='piracy'/><category scheme='http://www.blogger.com/atom/ns#' term='RIAA'/><title type='text'>RIAA needs to follow the example of other industries</title><content type='html'>By now, the RIAA's actions in its attempts to combat piracy is infamous. From suing individuals that they think have illegally downloaded content (even if it is blatantly obvious they never did) to trying to push ISP's into policing the Internet on their behalf. However, there are other IP industries that have moved on and followed the times, innovating to keep themselves current and up-to-date with the latest information age trends that demand content online. I am referring specifically to the movie and book publishing industries.&lt;br /&gt;&lt;br /&gt;One of my fondest memories here in South Africa, was writing an article to a local IT publication, discussing how the latest movie titles can be bought at almost any street corner for about half what they cost in the stores, and that the best way that the movie industry could combat these pirates was to drop pricing and so make it unprofitable and too risky for these operators to continue. A few months later, genuine DVD titles in shops dropped from R300 each to a paltry R150 or thereabouts. Now, even if you went looking, the street-side vendors selling their pirated versions have all but vanished.&lt;br /&gt;&lt;br /&gt;Combine this kind of pro-active approach to keeping your physical stock moving with online content-delivery platforms, and the amount of news I read about the movie industry losing out to pirates is so minimal its more like background noise.&lt;br /&gt;&lt;br /&gt;Moving onto book publishers, ebooks could have been a real threat and could have resulted in publishers employing tactics similar to the RIAA. Instead, you can now buy ebooks online for a fraction of the price of physical books themselves. And developments like the iPhone and iPod Touch (amongst others) make consuming an ebook that much more pleasant. While devices like the Kindle by Amazon and now &lt;a href="http://online.wsj.com/article/SB124812243356966275.html"&gt;Barnes &amp;amp; Nobles own ebook reader&lt;/a&gt; also point to the book publishing worlds flowering digital transformation, I still think these large, expensive devices are ridiculous, but that is just a personal opinion.&lt;br /&gt;&lt;br /&gt;The RIAA on the other hand seems convinced that the only way to continue in a world where people want their content digitally, is to deny them that and enforce draconian and, to be honest, ridiculous measures to preserve a business model that is so behind the times its laughable. People are already buying music online on a per track basis. The RIAA, and the companies it apparently attempts to protect, need to realise that the days of the "album" are nearly at an end. People want songs not epics. People do not want to be forced to buy a physical storage medium like a CD that contains 12 songs when they are only interested in 1.&lt;br /&gt;&lt;br /&gt;Lastly, if the RIAA is not careful, they may find themselves defunct, along with the record companies they represent. With the explosion in online presence by artists and the ease with which anyone can publish content online, even music, recording studios that sign up artists as has traditionally been done, may no longer be necessary. Artists generate the majority of their own income by touring and royalties, not record sales. Record sales only help market the artist to a prospective audience and line the recording studios coffers. But when an artist has access to an all pervasive medium like the Internet as well as the multitude of portals to market their own content (YouTube, etc), they may realise they don't actually need a recording studio anymore. Artists may dictate to marketing agencies how they want their content promoted instead of the other way round.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-1577426820868698089?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/1577426820868698089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/07/riaa-needs-to-follow-example-of-other.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/1577426820868698089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/1577426820868698089'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/07/riaa-needs-to-follow-example-of-other.html' title='RIAA needs to follow the example of other industries'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-315305496691617169</id><published>2009-07-20T01:44:00.001-07:00</published><updated>2009-07-20T02:27:49.988-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='symfony'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>PHP Security Tips</title><content type='html'>Having worked with PHP for a number of years I am still at times shocked at how little some developers know about the security implications of their code or how they may be inadvertently compromising their applications by coding a certain way. This articles focusses on some aspects of PHP coding and what to look out for while you are developing to help make your application as secure as possible.&lt;br /&gt;&lt;br /&gt;The following tips I have arranged in order of what I feel can be the most dangerous. If anyone has any comments please feel free to post them up and share with everyone else.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Command line commands&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;PHP has a great amount of power, and that power extends to the servers command line itself, allowing you to execute shell commands to the server directly from within the script you are coding. I have seen some coders liberally pepper their code with the &lt;a href="http://us3.php.net/manual/en/function.shell-exec.php"&gt;shell_exec()&lt;/a&gt; function or equivalent PHP functions without a seeming care for what they may be opening up.&lt;br /&gt;&lt;br /&gt;My first tip here ... don't use these functions! That's right, if you have no critical need to actually run a command on the servers shell then just don't do it. Rather take the time to figure out another way, rather than potentially open up your server to an attack through this vector.&lt;br /&gt;&lt;br /&gt;Now granted that there are numerous ways that the server itself can be setup, as far as PHP's rights as a user to access certain server functions, and these should be enabled anyway. These are topics for a system admin and so are out of scope of this article, but why run the risk anyways.&lt;br /&gt;&lt;br /&gt;Secondly, if all other options are exhausted and you absolutely have to use the shell, then please remember to clean up all data being run. As an easy way to clean, you can use PHP's own &lt;a href="http://us3.php.net/manual/en/function.escapeshellarg.php"&gt;escapeshellarg() &lt;/a&gt;function which can clean some obviously shell-like stuff from any input, but this is also not good on its own.&lt;br /&gt;&lt;br /&gt;Another tactic is to avoid using user submitted data as part of the shell argument. For example you can let a user choose from a few options and then run a corresponding argument in shell that was pre-written, rather than add a users submitted data in the argument.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Variable variables&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Like shell commands above, just don't use them! They are a very big potential risk security-wise and there is almost always an alternate method to using a variable variable. For those who are not sure what I mean, &lt;a href="http://us3.php.net/manual/en/language.variables.variable.php"&gt;PHP has the ability to create variables based on the value of another variable&lt;/a&gt;, for example:&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;&lt;br /&gt;$foo = bar;&lt;br /&gt;$$foo = "Hello";&lt;br /&gt;echo $foo.'\n';&lt;br /&gt;echo $bar.'\n';&lt;br /&gt;echo $$foo.'\n';&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;What would be echoed is:&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;&lt;br /&gt;bar&lt;br /&gt;Hello&lt;br /&gt;Hello&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now imagine a hacker figures this out and is able to submit user data to overwrite one of your own variables with his value and so compromise your system. The consequences, depending on where its been used, can be very dangerous.&lt;br /&gt;&lt;br /&gt;Other ways to make using this more secure? There aren't any. Just don't use them!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. Clean, clean, clean those submitted values&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We all know the $_SERVER, $_COOKIE, $_GET and $_POST server variables. Those oh so convenient variables that store all that lovely URL and form data that a user submits. But it is shocking how many developers go straight from using that user input as is! Values submitted in URL's and forms by hackers is the number ONE vector of attacks on web applications and therefore should get the biggest attention when you are developing applications. Great PHP frameworks like symfony will escape arguments from forms and URL's as a matter of course and are therefore great, but this doesn't mean you are still safe.&lt;br /&gt;&lt;br /&gt;SQL injection is the biggest attack through form submission and is really quite preventable. Functions such as  &lt;a href="http://us3.php.net/manual/en/mysqli.real-escape-string.php" class="function"&gt;mysqli_real_escape_string()&lt;/a&gt; are great for ensuring that posted data is escaped properly before it hits the database query level.&lt;br /&gt;&lt;br /&gt;Another to check for, and this applies to framework users as well, is to properly validate your data. Frameworks can do some basic checking on data but are not complete as they tend to be very generic, validating for the sake of "is it a string", "is it x characters long", "is it an email address" etc. Fields like First Name in a form for example can be validated further. Does the name have any spaces? If so, it is incorrect. Does it have any numbers? If so it is invalid. Again, these just help prevent any possible vectors of attack.&lt;br /&gt;&lt;br /&gt;These are just a few of the very large security risks to keep a look-out for while developing. While this isn't a complete guide by any stretch of the imagination on PHP application security, hopefully people may find the information here useful.&lt;br /&gt;&lt;br /&gt;If you have any comments or extra tips to share, feel free to add your comment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-315305496691617169?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/315305496691617169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/07/php-security-tips.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/315305496691617169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/315305496691617169'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/07/php-security-tips.html' title='PHP Security Tips'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-7085955725761471283</id><published>2009-07-14T02:10:00.000-07:00</published><updated>2009-07-14T02:37:57.584-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='mouse gestures'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><category scheme='http://www.blogger.com/atom/ns#' term='kubuntu'/><title type='text'>Mouse gestures with KDE 4.3</title><content type='html'>For a few months now I have been using KDE 4.3 which, as of this post, is in RC 2 stage and will be the default on Kubuntu Karmic Koala (9.10). One of the greatest features I have found with this new version of KDE is the ability to use mouse gestures!&lt;br /&gt;&lt;br /&gt;Sure, mouse gestures themselves are nothing new and have been used in the likes of the Opera browser for years now, but to have an operating system supporting this feature is a great step as it just increases the usefulness of the feature ten fold. This post is just a quick demo to show how to setup and use mouse gestures. Remarkably very easy.&lt;br /&gt;&lt;br /&gt;First of all, you need to get to the System Settings panel. Press Alt+F2 and type "System Settings" or go to the Application Launcher &gt;&gt; Computer &gt;&gt; System Settings until you see this window:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_r9OXHxsJDJI/SlxQSwAeRaI/AAAAAAAAACY/8PzVGanqQJU/s1600-h/System_settings.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 278px;" src="http://4.bp.blogspot.com/_r9OXHxsJDJI/SlxQSwAeRaI/AAAAAAAAACY/8PzVGanqQJU/s320/System_settings.png" alt="" id="BLOGGER_PHOTO_ID_5358245939718800802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now open the Input Actions applet and you should see:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r9OXHxsJDJI/SlxQdGtGgqI/AAAAAAAAACg/4zgtWgpMQXg/s1600-h/Input_actions.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 278px;" src="http://1.bp.blogspot.com/_r9OXHxsJDJI/SlxQdGtGgqI/AAAAAAAAACg/4zgtWgpMQXg/s320/Input_actions.png" alt="" id="BLOGGER_PHOTO_ID_5358246117610259106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Along the left side there is a tree menu. Just right-click on the blank space there and navigate to New &gt;&gt; Mouse Gesture Action and click on Command/URL. You will then see:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r9OXHxsJDJI/SlxQs8OxdZI/AAAAAAAAACo/PEC5JZYX1vs/s1600-h/new_command.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 278px;" src="http://3.bp.blogspot.com/_r9OXHxsJDJI/SlxQs8OxdZI/AAAAAAAAACo/PEC5JZYX1vs/s320/new_command.png" alt="" id="BLOGGER_PHOTO_ID_5358246389676602770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Enter the name Firefox. On the right side, click the tab near the top labelled Trigger so that we can set what mouse action will open Firefox. Click the Edit button at the bottom and a new window pops open. Hold the left mouse button down and draw whatever mouse movement you want to use to open Firefox. In my case I did an upside-down L or rather an F without the little line. Generally you want to keep the gestures as uncomplicated as possible. You should now see:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r9OXHxsJDJI/SlxQ5OX2elI/AAAAAAAAACw/uhFJaK77xhI/s1600-h/trigger_set.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 278px;" src="http://1.bp.blogspot.com/_r9OXHxsJDJI/SlxQ5OX2elI/AAAAAAAAACw/uhFJaK77xhI/s320/trigger_set.png" alt="" id="BLOGGER_PHOTO_ID_5358246600704948818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Click the Action tab at the top and in the Command field type in "firefox" (minus the quotes of course). Hit the Apply button and its setup.&lt;br /&gt;&lt;br /&gt;By default, mouse gestures work while holding the right mouse button down. So hold your right mouse button and draw the gesture you decided on anywhere on the screen. In my case I will draw my upside-down L. Firefox should now open. You can of course change which mouse button needs to be used; especially useful if you have a multi-button mouse.&lt;br /&gt;&lt;br /&gt;Under the tree-menu click the Settings button. You will see it says that mouse button 3 is selected. 1 is the left button, 2 is the wheel and three is the right mouse button. Change the number, hit apply, test your gesture with the mouse button you want use and if it doesn't work change it again. Eventually you will get the correct number that corresponds to the mouse button you want to use.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r9OXHxsJDJI/SlxRDUQeSDI/AAAAAAAAAC4/5E-_wg73f2U/s1600-h/settings.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 278px;" src="http://2.bp.blogspot.com/_r9OXHxsJDJI/SlxRDUQeSDI/AAAAAAAAAC4/5E-_wg73f2U/s320/settings.png" alt="" id="BLOGGER_PHOTO_ID_5358246774083307570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;There are other options as well for mouse gestures. For example, by exploring the DBus option, I was able to figure out how to use a mouse gesture to allow me to switch desktops easily. This is a very advanced feature however and I'll put together a little demo on how to use DBus and mouse gestures in another post if I have time. For now, enjoy the ease-of-use that this advanced new feature of KDE 4.3 gives you and have fun. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-7085955725761471283?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/7085955725761471283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/07/mouse-gestures-with-kde-43.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/7085955725761471283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/7085955725761471283'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/07/mouse-gestures-with-kde-43.html' title='Mouse gestures with KDE 4.3'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_r9OXHxsJDJI/SlxQSwAeRaI/AAAAAAAAACY/8PzVGanqQJU/s72-c/System_settings.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-2409027463552182915</id><published>2009-06-11T22:26:00.001-07:00</published><updated>2009-06-11T22:48:50.834-07:00</updated><title type='text'>Why Linux will take over from Windows</title><content type='html'>Oh no, not another one of these "Linux ruls, Windoze sucks and must die!!1!1" posts. Thank god, therefore, that I am not writing one. No, this is a long term prediction based on the two very different development methodologies employed in Windows vs Linux development.&lt;br /&gt;&lt;br /&gt;To sum it up briefly, Linux's open source, distributed development by a group of passionate developers has a far greater longevity than Microsoft's hierarchical, closed-source development driven by money. But why does this make such a big difference? First lets look at the two groups drivers and what makes them do what they do.&lt;br /&gt;&lt;br /&gt;Microsoft develops Windows as a closed-source proprietary and, most importantly, commercial product. Microsoft is a corporation and therefore needs to answer to share-holders, governments, anti-trust law makers, and other businesses. The biggest reason Microsoft develops Windows is to generate revenue. They employ developers to work on the project, and so monetary cost affects the skills and numbers of developers they can acquire. who are instructed as to what they should develop with Microsoft management guiding the direction and mission (in a holistic sense) of the design and development. They are under pressure to develop products with strict timelines in place and investors to satisfy.&lt;br /&gt;&lt;br /&gt;Linux is developed by an organisation of non-profit developers. The developers who work on the project volunteer (for the most part) and so are driven not by the pay-check but by a passion for what they do. Generally speaking, people can select what they want to work on and what best fits their own skill sets. In addition, being open-source, anyone can get involved, and in fact they have their entire user-base available as potential contributors. Naturally not all can be developers but contributions can be made many ways. Linux does not need to answer to shareholders to justify its releases. Goals for a specific distributions release are decided upon communally so features get completed that the users actually want. Linux does not want to make money from sales of the operating system so there are no problems with anti-trust. Commercial backing, while helpful, is not necessary so Linux cannot go bankrupt or suffer cashflow problems (very applicable in the current uncertain economy) .&lt;br /&gt;&lt;br /&gt;Its pretty much because of these differences that Linux distributions have an edge over their commercial counterparts. Microsoft, because of its reliance on being commercial, could go bang at any time. We don't know what goes on behind the closed doors of the Redmond giant. Who knows if Microsoft will be the next Exxon? Perhaps the money troubles at Microsoft are larger than they let on? Or it is possible that some new form of anti-monopoly legislation shoots them in the foot and makes it difficult for them to continue developing Windows the way they are. Who knows? We can't tell because everything at Microsoft is closed off to us and they rely on dollars, not contributors, to keep ticking. If Microsoft suddenly shut its doors, all those Windows users would be left high and dry because Windows is closed source. No one can pick it up and carry on.&lt;br /&gt;&lt;br /&gt;Even if the financial world collapses totally, Linux wouldn't die. Being developed by passionate contributors they do not rely on a pay check to keep working. Even if a single Linux distribution nabbed 90% market share, anti-trust is not an issue because it is open-source and freely available, there isn't any direct income generated from sales of the distribution. And because of its open source nature, even if every single core developer for a Linux distribution left the project, the community behind can still keep developing it. Anyone can pick up the source code and continue development. Users wouldn't be shafted!&lt;br /&gt;&lt;br /&gt;A timeline? I have no idea. Like I said, this is a long term prediction. It may take 2 years, may take 10. But eventually the time will come where Microsoft can no longer compete development-wise and the crown will start slipping, perhaps dramatically, perhaps over a slow, accretionary process of user disgust. Only time will tell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-2409027463552182915?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/2409027463552182915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/06/why-linux-will-take-over-from-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/2409027463552182915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/2409027463552182915'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/06/why-linux-will-take-over-from-windows.html' title='Why Linux will take over from Windows'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-563825865446943790</id><published>2009-06-05T05:21:00.000-07:00</published><updated>2009-06-05T05:31:12.516-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Search'/><category scheme='http://www.blogger.com/atom/ns#' term='Bing'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Microsoft's new babies don't play well together</title><content type='html'>Microsoft has released Windows 7 as a Release Candidate. In other words this is pretty much what we can expect to hit shelves in October of this year, bar a few bug fixes and maybe a small interface fix here and there. Microsoft also released their new search engine, Bing, aimed at competing head on with the giant Google. But, however, it seems Bing doesn't like Windows 7.&lt;br /&gt;&lt;br /&gt;I have Windows 7 installed on my home machine and have been giving the RC a spin over the last few months (before that the Beta as well). And when I attempted to use Bing on Firefox in Windows 7, I noticed that most of its flash (literally) and pizaz were missing. I didn't get the little mouse-over effects on the Bing homepage nor did I get a link to search for Video in the options. Thinking that this was probably a quirk of Firefox on the Windows 7 RC, I opened Internet Explorer 8. Low and behold, I had the same problem.&lt;br /&gt;&lt;br /&gt;My next port of call was the Adobe Flash plugin, as Bing seems to use that for its homepage effects as well as for the video search pages. I checked and the plugin was actually installed both on Firefox and IE 8. To make sure that I hadn't missed something obvious I uninstalled the plugins for both browsers and reinstalled. Still no joy. It seems that Bing is unable to detect that IE 8 or Firefox on Windows 7 actually have Flash installed. Either that, or it checks for a supported operating system and Bing just hasn't got Windows 7 on the list yet.&lt;br /&gt;&lt;br /&gt;Microsoft's newest baby Bing, seems to not play well with its other baby, Windows 7. So they cannot even make sure their own products work well together.&lt;br /&gt;&lt;br /&gt;One consolation. I have been using Bing on Kubuntu 9.04 with Firefox 3.0 with absolutely no problem. At least they are supporting the rival OS......&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-563825865446943790?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/563825865446943790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/06/microsofts-new-babies-dont-play-well.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/563825865446943790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/563825865446943790'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/06/microsofts-new-babies-dont-play-well.html' title='Microsoft&apos;s new babies don&apos;t play well together'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-278237068885233397</id><published>2009-06-02T23:21:00.000-07:00</published><updated>2009-06-02T23:57:53.798-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Search'/><category scheme='http://www.blogger.com/atom/ns#' term='Bing'/><category scheme='http://www.blogger.com/atom/ns#' term='Porn'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Microsoft's Bing is cool but....</title><content type='html'>After reading a lot about &lt;a href="http://www.microsoft.com/"&gt;Microsoft&lt;/a&gt;'s attempt at improving search and trying to steal market share I decided to try it myself. No, this is not a bashing post about a monopoly trying to monopolise. Microsoft do not have a monopoly on search, &lt;a href="http://www.google.com/"&gt;Google&lt;/a&gt; do, and any decent competition in search would be a good thing as it would drive improvements in the field including at Google if Microsoft were successful in pulling a large enough market share. In fact, Microsoft are now so confident in Bing as a search portal that they have made it the &lt;a href="http://www.techcrunch.com/2009/06/02/oops-bing-is-now-your-default-search-engine-on-ie6-whether-you-like-it-or-not/"&gt;default search engine for Internet Explorer 6 &lt;/a&gt;(whethere you want that or not).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bing.com/"&gt;Bing&lt;/a&gt; is actually really good. It eschews Google's philosophy of simple and clean by making the search interface more attractive. It keeps a search history so you can always refer back to what you searched for before which in itself attracts me as I constantly need to re-search for things. One of its greatest features is the mini-preview of a site you can get by hovering on a link to the right of the search result which gives you a quick run down of what that page is about and relevant links on that page that may be useful too making getting to what you want on that site relatively easy. See the pic showing the search results for Synaq and the preview of the first result.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r9OXHxsJDJI/SiYeZAXIE8I/AAAAAAAAACQ/bXZGPk1DHi0/s1600-h/bing_preview.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 269px;" src="http://1.bp.blogspot.com/_r9OXHxsJDJI/SiYeZAXIE8I/AAAAAAAAACQ/bXZGPk1DHi0/s320/bing_preview.png" alt="" id="BLOGGER_PHOTO_ID_5342991422864233410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So why the but in the title? Bing will probably get blocked at pretty much any organisations firewall level, perhaps even at home. The simple reason for this is because Bing also allows you to preview video results by just hovering over a video thumbnail. The video itself actually plays in the search results window as you hover over it, which is a great way to preview video but can allow people to bypass firewall settings that are supposed to block things like porn.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.techcrunch.com/2009/06/01/badda-bing-indeed/"&gt;Techcrunch have already written about this&lt;/a&gt; and it can mean bad things for Microsoft's goal to grab market share. Hard to do that if schools, corporations and any other organisation providing people Internet access over its network block access to Bing. The problem is because most organisations filter on a per site basis. Bing circumvents that with its video preview feature acting as a kind of proxy to these not-so-safe sites. The feature is great and makes finding that video you are after even easier, but human nature will abuse it and already has started doing so.&lt;br /&gt;&lt;br /&gt;Sure there are other ways to filter at a firewall like if the url contained certain search strings. But then someone has to maintain a growing list of potential search terms that people can use to try and get results from Bing to satisfy their craving for the hardcore. Its a lot easier to just add www.bing.com to a block list and will probably end up being the norm unless Microsoft can come up with a better way to do this.&lt;br /&gt;&lt;br /&gt;Bing does have a safe search setting, like Google, but its a matter of two clicks to disable it. One way Microsoft can help alleviate this issue is to include the safe search setting (full, moderate, off) into the url as well with each web request. A firewall can then filter based on that, allowing people onto Bing if their safe search setting is on full.&lt;br /&gt;&lt;br /&gt;Who knows though what the big Redmond will end up doing. I'd actually hate to have that video preview ability removed because it is really useful, especially in a place like South Africa where bandwidth is still at a premium and being able to preview a video quickly for a few seconds before loading up the entire host site is advantageous to the bottom line.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-278237068885233397?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/278237068885233397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/06/microsofts-bing-is-cool-but.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/278237068885233397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/278237068885233397'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/06/microsofts-bing-is-cool-but.html' title='Microsoft&apos;s Bing is cool but....'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_r9OXHxsJDJI/SiYeZAXIE8I/AAAAAAAAACQ/bXZGPk1DHi0/s72-c/bing_preview.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-7402493645812482937</id><published>2009-05-24T22:28:00.001-07:00</published><updated>2009-05-24T22:51:21.700-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='symfony'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Synaq'/><title type='text'>Symfony ... Good for ALL your projects</title><content type='html'>A while ago now, Fabien Potencier and Francois Zaninotto were&lt;a href="http://devzone.zend.com/article/1878"&gt; interviewed for the Zend Developer Zone blog&lt;/a&gt; and Fabien commented on how &lt;a href="http://www.symfony-project.com/"&gt;symfony&lt;/a&gt; is really better suited to larger web applications. I am here to counter that statement and show that symfony is good for &lt;span style="font-style: italic;"&gt;all &lt;/span&gt;your web projects.&lt;br /&gt;&lt;br /&gt;I can understand why Fabien would make a comment like that. To get going with symfony can be a little bit time consuming and to get to grips with its architecture and how to "code for symfony" can again take some time. But if you have already used symfony and learnt how to use it or plan to use it for all your projects, then those disadvantages fall away.&lt;br /&gt;&lt;br /&gt;There is another reason why I feel symfony is great for even the small projects. How many "small" projects actually stay small? How many times have you started work on a project that is supposed to take only a few weeks at most to finish and it ends up still in active development months later? The problem with starting any project with the mind set that its only a small one is when it suddenly grows to be a rather large application, extensability and maintenance starts to become, well, a little nightmarish.&lt;br /&gt;&lt;br /&gt;If you start a new project, even a so-called small one, with symfony, the abstraction required for good extensibility and maintainability is enforced on you. If this project suddenly grows its not a problem because everything is already setup to allow it be expanded.&lt;br /&gt;&lt;br /&gt;An example is here at Synaq, one of our Senior Linux Technicians, a guy who usually works on setting up new servers, was asked to create a simple little interface for a Small Business Firewall product we are developing. This application was only really supposed to pull basic info into a simple interface for a customer to read. The problem is that now, more functionality than was originally planned needs to be integrated into this little app and it now needs a database backend to accomplish that. If the project had been started with symfony, it would have been a simple case of creating the database itself, &lt;a href="http://www.symfony-project.org/book/1_2/08-Inside-the-Model-Layer"&gt;sending a couple of symfony commands&lt;/a&gt; to generate an ORM model to interact with that database and 90% of the work would have been done.&lt;br /&gt;&lt;br /&gt;After chatting with Jason, the System admin developing this application that &lt;span style="font-style: italic;"&gt;used to be  &lt;/span&gt;considered small, and explaining symfony, he is thinking of migrating the application to it. &lt;a href="http://www.symfony-project.org/book/1_2/11-Ajax-Integration"&gt;Ajax was another example&lt;/a&gt;. Some of the functionality that was added to the requirements of this little application was that data be updated on a few pages every few seconds. This meant that Jason now had to learn the Protoype library. With symfony he could have just used the built in helper functions to accomplish the same thing.&lt;br /&gt;&lt;br /&gt;The biggest problems with "small" projects is what people don't forsee. A lot of the time these projects end up growing in requirements and suddenly turn into large, unwieldy projects that are difficult to maintain and extend with new functionality. By using symfony you may have a little slow down (perhaps) in the beggining, but you will end up with a far more robust and useful framework around which you can almost infinitely extend into the near future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-7402493645812482937?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/7402493645812482937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/05/symfony-good-for-all-your-projects.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/7402493645812482937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/7402493645812482937'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/05/symfony-good-for-all-your-projects.html' title='Symfony ... Good for ALL your projects'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-866025496171842417</id><published>2009-05-12T01:45:00.000-07:00</published><updated>2009-05-12T02:12:16.708-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Starcraft'/><category scheme='http://www.blogger.com/atom/ns#' term='Blizzard'/><category scheme='http://www.blogger.com/atom/ns#' term='World of Warcraft'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='WoW'/><title type='text'>Why Blizzard rocks!</title><content type='html'>I really do love &lt;a href="http://www.blizzard.com/"&gt;Blizzard&lt;/a&gt;. They are a group of incredibly intelligent and insightful games developers. They only have 4 game franchises to their name and yet they are infinitely succesful. From the strategy genre with the likes of Warcraft and Starcraft to RPG's and MMO's such as World of Warcraft.&lt;br /&gt;&lt;br /&gt;The real reason I love them is that while most games development houses are so focussed on the latest and greatest graphical punishment for your PC's hardware, Blizzard will work out the lowest common-denominator when it comes to hardware specs and then focus on that level of graphical grunt. No need for the latest price busting graphics card to play World of Warcraft or Warcraft 3. And the good news is that their upcoming releases, Diablo 3 and Starcraft 2 will follow the same trend.&lt;br /&gt;&lt;br /&gt;Instead of graphics, Blizzard focus on what is, to me at least, a more important aspect; gameplay. A game can be absolutely drop-dead gorgeous in the eye-candy department and yet still totally suck as far as enjoyment is concerned. I played Crysis. Gorgeous game, with everything looking so incredibly realistic it was jaw dropping. But after the jaw was picked up off the desk and glitz fades away what was left? A game that was, well, average in my humble opinion. I never finished Crysis because it bored me eventually.&lt;br /&gt;&lt;br /&gt;Blizzard's focus on aspects such as playability and plot means that its games far outlast those that focus primarily on visuals. Look at Starcaft as an example. There are &lt;span style="font-style: italic;"&gt;professional&lt;/span&gt; (yes, people get paid) &lt;a href="http://www.sc2gg.com/"&gt;Starcraft leagues and tournaments in Korea&lt;/a&gt; with huge attendances. Not to mention &lt;a href="http://www.gomtv.net/"&gt;television rights&lt;/a&gt; as well. This is from a game that was released in 1998 for goodness sake. World of Warcraft is another example. Graphically WoW is slightly aging, and yet it still manages to enthral a massive audience (&lt;a href="http://www.wowinsider.com/2008/10/28/world-of-warcraft-hits-11-million-subscribers-worldwide/"&gt;well over 11 million subscribers now&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;What this also means is good news for Linux gamers. I play WoW on Kubuntu (my Linux distribution of choice) and it runs better in Linux with Wine than it does in Windows XP. Recently I found my Starcraft CD's from back in the day and they played too. Diablo 2 also does as well as Warcraft 3.&lt;br /&gt;&lt;br /&gt;This is absolute brilliance by Blizzard. Not only are they ensuring that the largest possible group of hardware configurations on PC can play their games, but they are turning every Linux user into a fan at the same time by their decisions to not be "cutting-edge" in hardware needs.&lt;br /&gt;&lt;br /&gt;I just hope that with the soon to be released Starcraft 2 and Diablo 3 that they haven't forgotten that and that us Linux users will be able to help contribute to Blizzard's bottom-line by spending our money on their great games ... and then play them for the next 10 years. From what I have seen of the video's and screenshots, this does happily, seem to be the case. Only time will tell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-866025496171842417?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/866025496171842417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/05/why-blizzard-rocks.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/866025496171842417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/866025496171842417'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/05/why-blizzard-rocks.html' title='Why Blizzard rocks!'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-8730195374450009437</id><published>2009-05-11T06:18:00.000-07:00</published><updated>2009-05-12T02:11:45.748-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPod Touch'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='kindle'/><category scheme='http://www.blogger.com/atom/ns#' term='amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='gadgets'/><title type='text'>The Kindle: Whats the point</title><content type='html'>Amazon have released the Kindle. A hand held device to ... read books. When I eventually heard the details, including the price-tag of $485, my first thought was "What's the point?"&lt;br /&gt;&lt;br /&gt;I certainly am not going to pay nearly $500 for something that will let me read an e-book. In South Africa that's close to R 5000, enough to get yourself a reasonable desktop PC. If I really &lt;span style="font-style: italic;"&gt;had &lt;/span&gt;to have a device to read e-books on the move I would rather get myself an iPod Touch or even go the whole hog and get an iPhone. the i devices can also allow you to read books but adds music player, wifi access, 3G Internet and a whole lot more.&lt;br /&gt;&lt;br /&gt;But even the iPhone. Do we really &lt;span style="font-style: italic;"&gt;need&lt;/span&gt; a device like that? Or many of the other gadgets and paraphernalia that clutter our lives and the shelves of electronics stores. Sure it looks gorgeous, and if you're a travelling salesman who needs access to your documents, emails and the web while on the move, then I can see it being a good tool. But for most people who go to work and work in an office; you have a PC on your desk. Then you go home inthe evenings; you have a PC (or laptop) there as well usually.&lt;br /&gt;&lt;br /&gt;I am not one of those gadget freaks who must have the latest and greatest just because everyone else does. I will not buy an iPhone (even though I am enamoured by its capabilities and sexyness) because for me the vast majority of its features would just be a toy. I don't own a PS3 or XBox 360 because my PC at home has enough gaming potential to keep me more than happy.&lt;br /&gt;&lt;br /&gt;Why do we allow our money-spending decisions to be dictated by fashion? Who cares what the Jones' have or want? Is our society really so driven by the materialism-as-status mindset that, like someone I know, they will put themselves into debt just to keep up with "everyone else"? Questions I don't have the answer to, unfortunately.&lt;br /&gt;&lt;br /&gt;A fantastic I was pointed at a while discusses our materialistically driven society and how that affects the world we live in. &lt;a href="http://www.thestoryofstuff.com/"&gt;The Story of Stuff&lt;/a&gt; is a fantastic narrative about what our society's impact is on the world we live in and how we cannot keep wanting wanting wanting. Take a look and tell me that its not at least a little eye-opening.&lt;br /&gt;&lt;br /&gt;Next time you watch that advert about the latest sexy gadget that really adds no value to your life apart from you being able to say you have one, ask yourself if buying it is really what you need in your life. If in owning it it will change your life for the better or if it will merely be an ornament.&lt;br /&gt;&lt;br /&gt;The Amazon Kindle? Last I heard books were available on this fantastic technology called paper for a 10th of that price. Perhaps we should buy more of those and fill book shelves. Or maybe &lt;span style="font-style: italic;"&gt;I'm  &lt;/span&gt;the odd one. If thats the case ... then I guess just ignore this blog post....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-8730195374450009437?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/8730195374450009437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/05/kindle-whats-point.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/8730195374450009437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/8730195374450009437'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/05/kindle-whats-point.html' title='The Kindle: Whats the point'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-4100032422191589704</id><published>2009-04-29T01:23:00.000-07:00</published><updated>2009-04-30T07:26:43.659-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='symfony'/><category scheme='http://www.blogger.com/atom/ns#' term='Pinpoint 2'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Propel'/><category scheme='http://www.blogger.com/atom/ns#' term='Synaq'/><category scheme='http://www.blogger.com/atom/ns#' term='Bitwise'/><title type='text'>Don't forget your Bitwise Operators</title><content type='html'>&lt;blockquote style="font-weight: bold;"&gt;Edit &lt;span style="font-weight: normal;"&gt;After getting some comments about this post I realised some people might want a little intro into what Bitwise operators are. A great tutorial on it for PHP can be found &lt;a href="http://www.litfuel.net/tutorials/bitwise.htm"&gt;here&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;I have had discussions before with other PHP developers, and in fact with developers in general, geeking out about ways to get things done in our respective languages etc. One thing I noted from these chats is that the knowledge of Bitwise operations, and how they can be used to create cleaner, more efficient applications, seems to be lacking. So I thought I would take the opportunity to point out one way that we are using Bitwise operators to make our jobs a little easier here at Synaq in developing Pinpoint 2.&lt;br /&gt;&lt;br /&gt;A little bit of a history. Pinpoint 2 is our own development to replace the aging Pinpoint 1 interface which is based on the widely used, open source Mailwatch PHP application. Essentially it is a front end interface for the Mail Security service we provide; scanning companies mail on our servers for viruses, spam, etc, before forwarding the clean mail onto the clients own network. One thing that the old system (and of course the new one) needs to do is store classifications of mail. Some of the types they get classified as are Low Scoring Spam (i.e. probably spam but a chance that it could be clean), High Scoring Spam (i.e. definitely spam with a very slim chance that is clean), Virus, Bad Content (eg. the client blocks all mail with movie attachments), etc, etc. The old Pinpoint 1 based on Mailwatch uses a database schema that stores a 1 or 0 flag for that specific type. As a simplified example:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;is_high_scoring: 0 or 1&lt;/li&gt;&lt;li&gt;is_low_scoring: 0 or 1&lt;/li&gt;&lt;li&gt;is_virus : 0 or 1&lt;/li&gt;&lt;li&gt;is_bad_content: 0 or 1&lt;/li&gt;&lt;/ul&gt;As you can see this gets rather limiting because what if, for example, you wanted to add another classification type? You then need to go ahead and alter the table schema in order to accomodate adding another is_* column to the table which is really kludgy and not that easy to implement.&lt;br /&gt;&lt;br /&gt;So for Pinpoint 2 we decided to reduce all those classification columns into one and assign each classification a bit value. For example:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;if clean: classification = 0&lt;/li&gt;&lt;li&gt;if low scoring: classification = classification + 1&lt;/li&gt;&lt;li&gt;if high scoring: classification = classification + 2&lt;/li&gt;&lt;li&gt;if virus: classification = classification + 4&lt;/li&gt;&lt;li&gt;if bad content: classification = classification + 8&lt;/li&gt;&lt;li&gt;if something else: classification = classification + 16&lt;/li&gt;&lt;li&gt;if another something else: classification = classification + 32&lt;/li&gt;&lt;/ul&gt;So if we had a mail that was classified as high scoring spam with a virus attached and would you know it, the content is also bad its classification value would be :&lt;br /&gt;&lt;blockquote&gt;2 + 4 + 8 = 14&lt;/blockquote&gt;So in our classification column a value of 14 is stored. If we now want to in our interface check the type we do not have to access multiple columns and determine if it contains a 1 or 0 but instead retrieve one value and work our bitwise operators on them. For example with Propel in symfony, if we wanted all messages that were viruses:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="php"&gt;&lt;br /&gt;$mail_detail_c = new Criteria();&lt;br /&gt;$mail_detail_c-&gt;add(MailDetailsPeer::CLASSIFICATION,  4 , Criteria::BINARY_AND);&lt;br /&gt;$virus_mail_obj_array = MailDetailsPeer::doSelect($mail_detail_c);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;We now have an array of results with all messages that are viruses. If we wanted all messages that were viruses AND high scoring spam:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="php"&gt;&lt;br /&gt;$mail_detail_c = new Criteria();&lt;br /&gt;$mail_detail_c-&gt;getNewCriterion(MailDetailsPeer::CLASSIFICATION,  4 , Criteria::BINARY_AND);&lt;br /&gt;$classification_criterion = $mail_detail_c-&gt;getNewCriterion(MailDetailsPeer::CLASSIFICATION,  4 , Criteria::BINARY_AND);&lt;br /&gt;$classification_criterion-&gt;addAnd($mail_detail_c-&gt;getNewCriterion(MailDetailsPeer::CLASSIFICATION,  8, Criteria::BINARY_AND);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You can see from all this it is a lot easier to write dynamic queries using bitwise operators than it is to try and add new columns to a schema everytime you add a new classification type.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-4100032422191589704?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/4100032422191589704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/04/dont-forget-your-bitwise-operators.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/4100032422191589704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/4100032422191589704'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/04/dont-forget-your-bitwise-operators.html' title='Don&apos;t forget your Bitwise Operators'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-1998949362690266044</id><published>2009-04-22T10:05:00.000-07:00</published><updated>2009-04-22T11:00:04.148-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lenovo'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Matt Kohut. A man in need of an education</title><content type='html'>&lt;blockquote&gt;&lt;/blockquote&gt;A scathing title? I know. And to be honest I don't really care. Matt &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Kohut&lt;/span&gt; is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Lenovo&lt;/span&gt;’s Worldwide Competitive Analyst, and he is sorely in need of an education in operating systems and specifically Linux. &lt;a href="http://tech.blorge.com/Structure:%20/2009/04/21/lenovo-analyst-linux-on-netbooks-is-doomed/"&gt;In a recent blog on tech.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;blorge&lt;/span&gt;&lt;/a&gt;, Mr &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Kohut&lt;/span&gt; is quoted as saying a few hilarious things. Blatantly incorrect statements and remarks about the state of Linux development that is about 5 years behind the times makes for some entertaining reading. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;The&lt;/span&gt; reason I am upset by this, and not just amused, is that it was said by a high level representative for a major player in the hardware industry, someone that the average user looks up to, listens to. Someone in that position shouldn't be &lt;span style="font-style: italic;"&gt;allowed &lt;/span&gt;to spout his mouth off without at least verifying the most basic of facts. Lets go through a few.&lt;br /&gt;&lt;blockquote&gt;“There were a lot of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;netbooks&lt;/span&gt; loaded with Linux, which saves $50 or $100 or whatever, but from an industry standpoint, there were a lot of returns because people &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;didn&lt;/span&gt;’t know what to do with it,” he said.&lt;/blockquote&gt;There is no way to verify whether this is true or not but lets assume it is. The simple reason why no one knows what to do with it is because the world is so ingrained into using Windows that they have no idea that there is something else. They see something different and they think it is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;immediatly&lt;/span&gt; inferior just because it is not familiar. This is, of course, speculation on my part so lets move on for now.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;“Linux, even if you’&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;ve&lt;/span&gt; got a great distribution and you can argue which one is better or not, still requires a lot more hands-on than somebody who is using Windows.&lt;/p&gt; &lt;p&gt;“You have to know how to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;decompile&lt;/span&gt; codes and upload data, stuff that the average person, well, they just want a computer.&lt;/p&gt; &lt;p&gt;“So, we’&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;ve&lt;/span&gt; seen overwhelmingly people wanting to stay with Windows because it just makes more sense: you just take it out of the box and it’s ready to go.”&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;4 months ago my fiance moved in with me. Her computer was flaky as hell &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;because&lt;/span&gt; Windows &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;XP&lt;/span&gt; did not like her hardware for whatever reason. The problem is that because no one except Microsoft can see source code there were no guides to help fix her problem on the web so it was either spend a ton of cash or try another Operating System.&lt;br /&gt;&lt;br /&gt;She did still want Windows for the familiarity and a "safety net" so we started off by reformatting her drive into two chucks for a dual boot configuration. We installed Windows. Four hours and three restarts later, Windows was up. But this was a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;pre&lt;/span&gt;-SP1 disk she had with her machine so we had to install our own firewall, antivirus and a trove of other "security software" before we went online to install Windows Updates.&lt;br /&gt;&lt;br /&gt;Whew! That done we decided to install &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Ubuntu&lt;/span&gt; on the other partition. 45 minutes later she was looking at her Gnome desktop. Her 4 year old printer worked out the box, scanner, the lot.&lt;br /&gt;&lt;br /&gt;Then the other day she wanted to get her favourite old game Dungeon Keeper 2 installed so that she could play for a  bit. I suggested she just boot into Windows &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;XP&lt;/span&gt; cos it was more likely to run. I suggested this simply because I was busy at the time and didn't want to have to go through the hassle of trying to make a game designed for Windows ONLY to run on Linux.&lt;br /&gt;&lt;br /&gt;She pouted at me. She &lt;span style="font-style: italic;"&gt;actually&lt;/span&gt; dropped her lip in a sullen pout and then, and I will never forget, uttered the words "I don't like Windows". I felt so elatedly happy that I got up and got Dungeon Keeper 2 working. And as a side note, there was no problem getting it working. It installed and ran with no fuss whatsoever.&lt;br /&gt;&lt;br /&gt;My point? My fiance uses a PC in her job. She is by &lt;span style="font-style: italic;"&gt;no&lt;/span&gt; means a computer geek or ultra-savvy. She had to ask how to watch a DVD in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;Ubuntu&lt;/span&gt;. I told her to put the disk in. It loaded and she watched with no problem. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;Decompile&lt;/span&gt; codes (whatever that means anyway) and upload files? I beg your pardon?&lt;br /&gt;&lt;blockquote&gt;Kohut argues that for Linux to be successful on netbooks (or notebooks or desktops for that matter), the open source operating system needs to catch up with where Windows is now.&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;“Linus needs to get to the point where if you want to plug something in, Linux loads the driver and it just works.&lt;/p&gt; &lt;p&gt;“If I need to go to a website and download another piece of code or if I need to reconfigure it for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;internet&lt;/span&gt;, it’s just too hard.&lt;/p&gt; &lt;p&gt;“I’&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;ve&lt;/span&gt; played around with Linux enough to know that there are some that are better at this than others. But, there are some that are just plain difficult.”&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;Ubuntu, as far as an interface goes, exceeded Windows XP and Vista even a year before Vista was released. The combination of Gnome and Compiz or KDE 4.2 blows away anything Microsoft has been able to get Windows to do visually. Stability? Linux has been the predominant server technology keeping hugely complicated web presences and sites running for decades now, so stability is &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; something to worry about.&lt;br /&gt;&lt;br /&gt;A few years ago I tried running a Fedora desktop but I struggled to get my USB DSL modem working to get online. These days? I plug it in. It asks me for username and password, I am online. Thats it. Could it &lt;span style="font-style: italic;"&gt;get&lt;/span&gt; any easier, Mr Kohut?&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;“From a vendor perspective, Linux is very hard to support because there are so many different versions out there: do we have Eudora, do we have SUSE, do we have Turbo Max?&lt;/blockquote&gt;This is just evidence of Mr Kohut's lack of expertise in the field. Eudora is a mail client (you know, like Outlook?), Turbo Max has nothing to do with software as far as Google tells me. And no .. you don't have to support every distribution of Linux. Pick one or two (Ubuntu and Fedora are two good ones) and support &lt;span style="font-style: italic;"&gt;only&lt;/span&gt; them. In fact, charge for Ubuntu and Fedora like you do for Windows installations but instead of it being payment for the software make it payment for &lt;span style="font-style: italic;"&gt;support&lt;/span&gt; that people can actually get. They get the OS for free, you charge for support, and customers actually &lt;span style="font-style: italic;"&gt;do&lt;/span&gt; get support on their OS.&lt;br /&gt;&lt;br /&gt;I am shocked, angry and a little sad too that someone in that position of influence and power can be so dense, clueless and down-right imbecilic. How can you make remarks on a topic that you obviously know nothing about? What also saddens me is that these comments, my own and those of all the other outraged Linux users, will not by read by the majority of users.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-1998949362690266044?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/1998949362690266044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/04/matt-kohut-man-in-need-of-education.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/1998949362690266044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/1998949362690266044'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/04/matt-kohut-man-in-need-of-education.html' title='Matt Kohut. A man in need of an education'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-7021312015779560699</id><published>2009-04-20T22:45:00.000-07:00</published><updated>2009-04-21T04:31:19.806-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='macintosh'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Mac Ads seem to be a little presumptuous</title><content type='html'>I was checking out the &lt;a href="http://www.apple.com/getamac/ads/"&gt;Mac adverts&lt;/a&gt; that Apple post on their web site and had to shake my head in amazement once or twice. Admittedly they are funny but for some reason it seems that Apple think all &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;PC's&lt;/span&gt; run Windows. I know that the vast majority do run Windows but not all. And the fact that on the PC I have a choice of operating system seems lost on the marketing guys at Apple. Perhaps the IT guys briefing the marketing firm didn't fill them in on the fact that there is another player in the Desktop Operating System arena, namely &lt;a href="http://www.ubuntu.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Ubuntu&lt;/span&gt;&lt;/a&gt;. With the new &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Ubuntu&lt;/span&gt; Jaunty &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Jackelope&lt;/span&gt; (9.04) about to be released in a couple of days from this post, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Ubuntu&lt;/span&gt; (and its derivatives such as &lt;a href="http://www.kubuntu.org/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Kubuntu&lt;/span&gt;&lt;/a&gt;) are a massive improvement over Windows.&lt;br /&gt;&lt;br /&gt;And it got me thinking, what reason do people have to switch to Mac? For the stability of the OS? The built in nature of all the applications? The one downside (and the ONLY reason that I keep a Windows &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;XP&lt;/span&gt; installation on my home PC) is that gaming, with some exceptions, does not work on Mac or &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Ubuntu&lt;/span&gt;. But then, when you can buy &lt;span style="font-style: italic;"&gt;two&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;PC's&lt;/span&gt; with the same hardware specs as a Mac and then install &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Ubuntu&lt;/span&gt; on both for &lt;span style="font-style: italic;"&gt;nothing&lt;/span&gt; and get all the same benefits as a Mac, I still don't understand why people are so drawn to it. I understand that the Mac is prettier to look at but not everyone has R12 000 for the bottom range Macintosh just for eye candy.&lt;br /&gt;&lt;br /&gt;The Mac ads seem to point out that &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;PC's&lt;/span&gt; suffer viruses. That they have no applications for producing cool movies, pictures, etc. Crash constantly. And now, need massive hardware upgrades because of the operating system they use. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Erm&lt;/span&gt;. None of that is true if &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;Ubuntu&lt;/span&gt; is used. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;Ubuntu&lt;/span&gt; has access to safe collections of applications. In fact, since my switch to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Ubuntu&lt;/span&gt; as my primary OS, I have never had to worry about finding an application to do what I want. I needed to find a book cataloguing system because I do have a rather large collection and to keep track of the books I still want can be a little hard. Alexandria is a freely available application that took me 5 minutes to locate on one of these collections. For those already using &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;Ubuntu&lt;/span&gt; just do a search in your package manager for Alexandria or on terminal&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;sudo&lt;/span&gt; apt-get install &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;alexandria&lt;/span&gt;.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I load up my Windows machine and want to find an application to use and its a few Google searches to find an application written by somebody. I then have to hope that this person is on the level and that its safe to use (i.e. contains no viruses) and that the application will actually work properly on my PC and not slow things down too much.&lt;br /&gt;&lt;br /&gt;The funniest thing? I play World of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;Warcraft&lt;/span&gt; (I know, seriously geeky, but &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;thats&lt;/span&gt; another discussion). &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;WoW&lt;/span&gt; actually plays &lt;span style="font-style: italic;"&gt;faster&lt;/span&gt; in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;Ubuntu&lt;/span&gt; using Wine (Wine is another application to try and make Windows programs work on Linux) than in Windows &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;XP&lt;/span&gt;! I couldn't believe it myself but its true. A game made for Windows runs faster on a competing operating system that has to use a translation layer like Wine.&lt;br /&gt;&lt;br /&gt;So no .. I won't be buying a Mac because I am &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; afraid of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;malware&lt;/span&gt; or viruses, I do &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; have problems finding applications I need and my operating system is &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; unstable. In fact... I think I can go get another PC. You stick to your one Apple Mac then.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-7021312015779560699?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/7021312015779560699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/04/mac-ads-seem-to-be-little-presumptious.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/7021312015779560699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/7021312015779560699'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/04/mac-ads-seem-to-be-little-presumptious.html' title='Mac Ads seem to be a little presumptuous'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-8893951458429175612</id><published>2009-04-08T02:16:00.000-07:00</published><updated>2009-04-08T02:42:18.722-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='sysadmin'/><category scheme='http://www.blogger.com/atom/ns#' term='Trac'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><category scheme='http://www.blogger.com/atom/ns#' term='issue tracking'/><title type='text'>What Trac really needs</title><content type='html'>Anyone who has read this blog before might have found my previous post where I mentioned &lt;a href="http://garethmccumskey.blogspot.com/2009/04/non-sysadmin-trying-sysadmin.html"&gt;how I started getting into setting up my own web server&lt;/a&gt; on Linode.com and that I was also installing &lt;a href="http://trac.edgewall.org/"&gt;Trac&lt;/a&gt;,  which according to the Trac &lt;a href="http://trac.edgewall.org/wiki"&gt;documentation&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;"Trac is a &lt;strong&gt;minimalistic&lt;/strong&gt; approach to &lt;strong&gt;web-based&lt;/strong&gt; management of &lt;strong&gt;software projects&lt;/strong&gt;. Its goal is to simplify effective tracking and handling of software issues, enhancements and overall progress."&lt;/blockquote&gt;Well, I have got Trac up and running. Trac actually relies quite heavily on its command-line client which, to be honest, I have no problem in using. Anyone that develops and/or works on and for a *nix environment is probably more than comfortable using the command-line and probably, like me, finds it far more useful and efficient than any GUI could probably be. There were a few issues however in setting up Trac that I thought I would share here for anyone reading and interested in setting up their own Trac installation.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;1. Command Line requires a learning curve&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This may seem counter to what I said above but the one advantage a GUI interface has over a command-line is that it is intuitive. With a GUI you can see buttons and prompts beckoning you to use them. With a command line you need to know the commands or ... well you can do nothing. This means that anyone looking to install and run Trac as of now will have to spend extra time learning the, albeit rather basic, commands.&lt;br /&gt;&lt;br /&gt;This is alleviated somewhat with a very useful help system as well as fantastic online documentation for Trac, but the fact still remains that that learning curve might put people off.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;2. Root access needed&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Trac is not a simplistic web application, even though the documentation calls it minimalistic. It requires the person installing to have root access to the machine and is one of the reasons why I am moving to running my own server as opposed to continuing with a shared, managed service as I have done in the past. While it is understandable to some degree because of the SVN integration, again, this requirement will limit the available user-base to those who know how to setup and maintain web servers or have enough dosh to fling around to get their server management company to install it for them.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;3. No built-in authentication&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Thats right. Unfortuantely Trac does not include its own authentication system, so managing multiple projects for different clients who should not have access to one anothers projects can be a little nightmarish. If you want authentication then Trac expects you to use Apache's own built-in authentication system's (or whichever web server you happen to have installed). This means that anyone installing this also needs to know how to setup Apache in order to authenticate users based on encrypted, password files stored on the server itself and referenced to using Virtual Host settings.&lt;br /&gt;&lt;br /&gt;Again, this limits the potential users of Trac to those that are sys-admins or have the money lying around to get someone to do it for them.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;4. Lets give Trac a break&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I mentioned a few issues I had but lets cut the developers some slack. Why? Well, Trac is only at release 0.11. Yup! They haven't even reached a full release version yet and pretty much what is available is beta-ish. Once you know that Trac development is still steaming ahead and that the "issues" I described above will probably have solutions to make things easier once the development team do incremement that version counter to 1.0, it doesn't seem such a bad deal for a free development management and bug-tracking application. I am pretty sure that in the next few weeks to months we will see Trac become a feature complete system and I cannot wait for that day. So far I am very impressed with what I can do with it and am so glad I stumbled across it a few months ago.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-8893951458429175612?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/8893951458429175612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/04/what-trac-really-needs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/8893951458429175612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/8893951458429175612'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/04/what-trac-really-needs.html' title='What Trac really needs'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-8962039645920517044</id><published>2009-04-06T21:49:00.000-07:00</published><updated>2009-04-07T02:34:35.524-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='advertising'/><category scheme='http://www.blogger.com/atom/ns#' term='elections'/><category scheme='http://www.blogger.com/atom/ns#' term='government'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='national skirt extension program'/><title type='text'>National Skirt Extension Project is a WHAT?!</title><content type='html'>Yes thats right. The National Skirt Extension Program. This morning sitting in my car listening to a popular, local radio station and I hear an advert for the National Skirt Extension Program which aims, get this, "To increase the displayed length of a ladies skirt on restroom signs". Feel free to go check it out yourself &lt;a href="http://www.nsep.co.za/"&gt;here&lt;/a&gt;. There is also a telephone number to call for more information. There are some fears that calling that number will result in large call fees as if you had called one of those premium number sex lines, but the 0860 number is NOT a premium call number so out of curiosity I called it. After listening to a recording about the NSEP I hung up.&lt;br /&gt;&lt;br /&gt;I honestly cannot think there is anything real about this. If our government really &lt;span style="font-style: italic;"&gt;has&lt;/span&gt; initiated a project as frivolous as this, then we really do need to be careful who we vote into power in the next election. I can only see this as some form of prank. One &lt;a href="http://idale.co.za/fashion/breaking-news-national-skirt-extension-project/"&gt;person commented on another blog&lt;/a&gt; that he  actually called the agency responsible who apprently says its for real and their client is the NSEP but that they couldn't go into more details.&lt;br /&gt;&lt;br /&gt;I hope this is only some delayed April Fool's joke or an attempt by someone to garner attention and then use that attention to launch some other project or initiative. If any one has anymore information please feel free to share because this is a little scary if it's real....&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;EDIT: &lt;/span&gt;Apparently there is speculation that this advertising is being arranged by UniLever, you know, the household products company. If this really is a viral marketing strategy by a company then I must say they have done good work here. I am actually surprised there is nothing from the government yet to denounce the adverts as nothing to do with them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-8962039645920517044?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/8962039645920517044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/04/national-skirt-extension-program-is.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/8962039645920517044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/8962039645920517044'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/04/national-skirt-extension-program-is.html' title='National Skirt Extension Project is a WHAT?!'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-8852315606276926998</id><published>2009-04-06T02:31:00.000-07:00</published><updated>2009-04-08T06:25:50.833-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='symfony'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='APC'/><category scheme='http://www.blogger.com/atom/ns#' term='Propel'/><category scheme='http://www.blogger.com/atom/ns#' term='memory cache'/><category scheme='http://www.blogger.com/atom/ns#' term='Synaq'/><title type='text'>Memory caching can be a saviour</title><content type='html'>At Synaq we are busy working on a pretty complex application. Essentially its a frontend interface to a system that scans and processes customers emails for spam then records the results of the scans in a MySQL database. Without going into too much senseless detail, the backend processes a few million items per day and suffice it say that is one helluva database to search through when you need to extract useful data.&lt;br /&gt;&lt;br /&gt;Because of the sheer quantity of data we have had to use numerous techniques to try and make the frontend still act at least &lt;span style="font-style: italic;"&gt;reasonably&lt;/span&gt; responsive when it needs to query the database. Then one day I asked myself "Does the interface really need to query that database so often for data that in essence hardly ever changes?". The scenario is that the interface does not really make many alterations to the data extracted and a lot of the data used is repeated per page for a specific users session. One security feature we have for example is that every user is defined as belonging to a specific Organisation (or Organisational Unit to be technically correct) and every page load requires retrieving this list of Organisations that the current user is allowed to see. This is not likely to change that often and so we came up with an idea.&lt;br /&gt;&lt;br /&gt;We use APC, a memory caching facility for PHP scripts, and it also allows you to store your own values through your code into memory explicitly. Thankfully, symfony provides a class that can manage that for us as well, the SfAPCCache Class, that makes using the cache a doddle. Our problem? We need to ensure that the data we store is totally unique.&lt;br /&gt;&lt;br /&gt;The solution was to store the results of a database query for our OrganisationalUnits model class into the APC Cache memory. The way we did this was to use the Criteria object for the Propel query as the name of the item to be stored. It stands to reason that if the Criteria object for a specific query is unique then the result will be unique. If the same Criteria object is passed again then the results from the database will be the same as the same Criteria object we passed before. Why query the database a second time?&lt;br /&gt;&lt;br /&gt;The APC Cache though cannot take an object type as a name only a string. Easily enough done with PHP's serialize() function. But that string is excessively long (a few thousand characters sometimes) so we need to find a way to shorten and yet keep the uniqueness. So we get the MD5 hash of that serialized Criteria object. There we go. But due to our own paranoia and the need to be 110% sure that we wont by some ridiculous stroke of bad luck create another Criteria object later that against all the statistics of MD5 creates the same hash, we also make an SHA1 hash and concatenate the two hashes. There! Now the chances of any Criteria objects having the same name are so remote as to be nigh-on impossible.&lt;br /&gt;&lt;br /&gt;But it doesn't end there. This doesn't help us if we don't know a way to actually add this to the cache and remove etc. For this we go to our OrganisationalUnitsPeer class and overwrite the doSelect method that recieves all calls to run a query onthe database as such:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="php"&gt;public static function doSelect(Criteria $criteria, $con = null)&lt;br /&gt;   {&lt;br /&gt;       $data_cache = new sfAPCCache();&lt;br /&gt;     &lt;br /&gt;       $serialised = serialize($criteria);&lt;br /&gt;       $md5_hash = md5($serialised);&lt;br /&gt;       $sha1_hash = sha1($serialised);&lt;br /&gt;     &lt;br /&gt;       $complete_name = "organisational_units_doSelect_".$md5_hash.$sha1_hash;&lt;br /&gt;     &lt;br /&gt;       if ($data_cache-&gt;has($complete_name))&lt;br /&gt;       {&lt;br /&gt;         &lt;br /&gt;         &lt;br /&gt;           return unserialize($data_cache-&gt;get($complete_name));&lt;br /&gt;       }&lt;br /&gt;       else&lt;br /&gt;       {&lt;br /&gt;           $query_result = parent::doSelect($criteria);&lt;br /&gt;           $data_cache-&gt;set($complete_name, serialize($query_result), 3600);&lt;br /&gt;         &lt;br /&gt;           return $query_result;&lt;br /&gt;       }&lt;br /&gt;     &lt;br /&gt;   }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Rather simple I thought. We also wanted to be sure that if the user added, updated or removed a new Organisation that the cache would not give the incorrect listing so we added to OrganisationalUnits class (not Peer):&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="php"&gt;public function save($con = null)&lt;br /&gt;   {&lt;br /&gt;       $data_cache = new sfAPCCache();&lt;br /&gt;     &lt;br /&gt;       $data_cache-&gt;removePattern("organisational_units**");&lt;br /&gt;     &lt;br /&gt;       $return = parent::save();&lt;br /&gt;     &lt;br /&gt;       return $return;&lt;br /&gt;   }&lt;br /&gt; &lt;br /&gt;   public function delete($con = null)&lt;br /&gt;   {&lt;br /&gt;       $data_cache = new sfAPCCache();&lt;br /&gt;     &lt;br /&gt;       $data_cache-&gt;removePattern("organisational_units**");&lt;br /&gt;     &lt;br /&gt;       $return = parent::delete();&lt;br /&gt;     &lt;br /&gt;       return $return;&lt;br /&gt;   }&lt;/pre&gt;&lt;br /&gt;Just doing this to the one set of data has increased our page loads speeds dramatically as well as reducing the load on the server itself as well when we do intense performance testing. We hope to employ this further along with other items that similarly load for each page etc and will never change.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-8852315606276926998?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/8852315606276926998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/04/memory-caching-can-be-saviour.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/8852315606276926998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/8852315606276926998'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/04/memory-caching-can-be-saviour.html' title='Memory caching can be a saviour'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-8452221604219164954</id><published>2009-04-03T01:59:00.000-07:00</published><updated>2009-04-03T02:57:58.279-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='symfony'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='Synaq'/><category scheme='http://www.blogger.com/atom/ns#' term='YAML'/><title type='text'>Our background in symfony</title><content type='html'>PHP is a great language, in my humble opinion, to program in because of its flexibility and pervasiveness. It has its odd quirks, which you get used to, but generally speaking coding in PHP has always been fun for me. One problem that the development world has had is using programming languages to build large and complex applications. While the efforts of Object Oriented Design have done a great deal to help push the mantra of making code re-usable, extensible and maintainable, it can still be a daunting task to build some of those projects out there.&lt;br /&gt;&lt;br /&gt;One very important design principle I came across years ago was something called MVC; Model View Controller. Essentially what that entails is instead of bunging all your PHP code (and MVC does not only refer to PHP, its a design concept used in lots of other languages) into one file to represent a page, like database connection, running a query on the database, formatting that data and manipulating it, followed by echo'ed HTML to display that data in tables or whatever format is desired, MVC seeks to seperate all the different parts of a web application to make managing them easier.&lt;br /&gt;&lt;br /&gt;Model refers to the actual object classes that describe the database schema your data is stored in. Instead of writing your own SQL queries by hand and hard-coding things like database, table and column names, the model is the intermediary. The model is responsible for connecting to the database, generating a query based on parameters you have passed to it, manipulating that returned data and then sending the end result back to whatever called it ready for use.&lt;br /&gt;&lt;br /&gt;View refers the actual presentation on screen that an end user would see. The view doesn't care what the database looks like or even if one exists at all as long as it has the data it needs to create the presentation it is supposed to. It will generate the HTML needed for that data the model extracted to be displayed in a way that makes sense to the user.&lt;br /&gt;&lt;br /&gt;Controller is the intermediary. It will take the events generated from the View, such as mouse clicks, page loads, etc, analyse what the view has done, decide what the next step will be, such as load another view or ask the model to return more data and then send that data to another view, etc. The controller can be thought of as the glue that binds the model and views together.&lt;br /&gt;&lt;br /&gt;Whew! Ok, enough of that lecture. There is one problem with this seemingly clever seperation of tasks. Coding an MVC framework can be a nightmarish task and the complexity of making an MVC alone work can be more effort than its worth. This is where &lt;a href="http://www.symfony-project.org/"&gt;symfony&lt;/a&gt; comes in. Symfony is an already pre-built MVC framework for PHP, and while setting up your own MVC structure would be laborious, symfony's is ready to go and using the framework as opposed to writing your own PHP code from scratch actually makes the job even faster than using no MVC at all.&lt;br /&gt;&lt;br /&gt;So why is symfony so great? Well, feel free to try it yourself. Symfony's philosophy is &lt;a href="http://en.wikipedia.org/wiki/Convention_over_Configuration"&gt;convention over configuration&lt;/a&gt; which means that, instead of explictly defining the relationships between classes and database schema, for example, that there is an implied relationship. For example, if you had a table called "sales_history", the model class that deals with interacting with that table is called "SalesHistory". Its a &lt;span style="font-weight: bold;"&gt;convention&lt;/span&gt;, we agree to use it this way. It is only if you decide to &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; use this convention and name your class "SalesMade" that you need to worry about re&lt;span style="font-weight: bold;"&gt;configuring&lt;/span&gt; aspects of your code to do that.&lt;br /&gt;&lt;br /&gt;Because of this convention scenario you can do the following steps, after having installed symfony, to have a fully working set of database-agnostic model classes ready to use in your application:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Go to a terminal and enter:&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;mkdir project_name;&lt;br /&gt;cd project_name;&lt;br /&gt;/path/to/symfony generate:project project_name&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;Then go to "/path/to/project_name/config/schema.yml" and define your database structure in the easy to use &lt;a href="http://www.yaml.org/"&gt;YAML syntax&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Go to terminal and enter "symfony propel:build-model;"&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;And voila! There you have it. You now have classes that match your schema that you can use anywhere in your symfony application.&lt;br /&gt;&lt;br /&gt;At Synaq, we have been using symfony for over a year now on a specific, large, and complex project and it has proved invaluable. There has been a lot of learning and experimentation involved in getting to know and use the framework to its best, but the experience has been well worth it seeing how quickly, even with the learning curve, we have been able to produce results.&lt;br /&gt;&lt;br /&gt;There is far too much involved with symfony for me to be able to go into great detail here, and I will be giving more information in future on tricks and tips we have learnt while using it. Suffice it to say, if you want to simplify the way you develop large projects, feel free to go give symfony a look.&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-8452221604219164954?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/8452221604219164954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/04/our-background-in-symfony.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/8452221604219164954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/8452221604219164954'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/04/our-background-in-symfony.html' title='Our background in symfony'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-6131715001918445775</id><published>2009-04-02T00:56:00.001-07:00</published><updated>2009-04-02T02:51:45.254-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='server'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='sysadmin'/><category scheme='http://www.blogger.com/atom/ns#' term='Trac'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>A non sysadmin trying sysadmin</title><content type='html'>Well I couldn't resist waiting till tomorrow but I have over the last few days been attempting something I have never done before. But a wee little bit of background first.&lt;br /&gt;&lt;br /&gt;In the past as a PHP developer I have usually used servers to host the work I have done that have already been pre-setup, using a shared/managed hosted service where all the necessary server software (Apache, PHP, MySQL etc) is already up and running. This has served me well in the past because I could then focus on making the applications and leave the server administration to those more qualified.&lt;br /&gt;&lt;br /&gt;However, over the last few days, I purchased myself a &lt;a href="http://www.linode.com"&gt;Linode&lt;/a&gt;, a VPS, which allows me to install a Linux distro of my choice as well as then go ahead and install my own applications onto it with the eventual aim of being the web and mail server for my domain (which is currently hosted at an afore-mentioned shared hosting company). Doing this has helped me learn an absolute ton about what goes into setting up a Linux, production web server as well as helping hone my Google search skills even further.&lt;br /&gt;&lt;br /&gt;The reasons I decided to do this was simple. I needed a server that would allow me root access to install applications such as &lt;a href="http://trac.edgewall.org"&gt;Trac&lt;/a&gt;, an SVN repository and issue tracking, web based application. Also, I wanted more control over things such as the modules of PHP I can install myself and even which version of PHP as well.&lt;br /&gt;&lt;br /&gt;For this little project I chose to use the Ubuntu 8.10 (Intrepid Ibex) server distribution. One reason was simply I am used to using Ubuntu as it is my desktop environment as well, and also because one of my colleagues at &lt;a href="http://www.synaq.com"&gt;Synaq&lt;/a&gt; (a systems administrator by profession) suggested it, citing that for my limited needs I needn't worry about LTS versions and so on. Included in my little server are the usual applications:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Apache 2 for webserver&lt;/li&gt;&lt;li&gt;PHP 5.2. I needed 5.2 because I want to use the new Propel 1.3 ORM in my PHP applications and 5.2 is a minimum requirement.&lt;/li&gt;&lt;li&gt;MySQL 5.0 as my primary database application predominantly because I am used to it. I plan to also install and experiment with PostgreSQL, amongst others.&lt;/li&gt;&lt;li&gt;Python, perl and Ruby. All because I plan to play with them too :)&lt;/li&gt;&lt;li&gt;SVN as my code store and code backup&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Trac (which runs off Python/perl) to use as my Project management and SVN interface tool for a few projects I'd love to make.&lt;/li&gt;&lt;/ul&gt;A few of the sites I visited to help teach me how to set all this up, seeing as I had never really done this before were:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.howtoforge.com/perfect-server-ubuntu8.04-lts-p6"&gt;http://www.howtoforge.com/perfect-server-ubuntu8.04-lts-p6&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://help.ubuntu.com/8.10/serverguide/C/index.html"&gt;https://help.ubuntu.com/8.10/serverguide/C/index.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://help.ubuntu.com/community/SubversionInstall"&gt;https://help.ubuntu.com/community/SubversionInstall&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://help.ubuntu.com/community/Trac"&gt;https://help.ubuntu.com/community/Trac&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://trac.edgewall.org/wiki/TracGuide"&gt;http://trac.edgewall.org/wiki/TracGuide&lt;/a&gt;&lt;/li&gt;&lt;li&gt;A whole heap of others I used to help fix small problems here and there that I came up against that the more "official" docs above had not covered.&lt;/li&gt;&lt;/ul&gt;What I loved about this experience was that I was now able to better appreciate the work the sysadmins here do, as well as be amazed once again how little time I spent picking their brains because of the wealth of knowledge the Internet provides. I love WWW :D&lt;br /&gt;&lt;br /&gt;The best part of this whole experience is going to my new server IP address (I haven't tranferred the domain yet, DNS is the next issue I need to tackle) and seeing it all happily load in my browser....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-6131715001918445775?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/6131715001918445775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/04/non-sysadmin-trying-sysadmin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/6131715001918445775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/6131715001918445775'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/04/non-sysadmin-trying-sysadmin.html' title='A non sysadmin trying sysadmin'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7681844163425794280.post-9185294222718202087</id><published>2009-04-01T23:04:00.000-07:00</published><updated>2009-04-01T23:18:40.730-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gareth'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='about me'/><category scheme='http://www.blogger.com/atom/ns#' term='Synaq'/><title type='text'>Its all about me.</title><content type='html'>Well, no, I am not that pretentious. This blog is all about me and my day-to-day activities related to web development, primarily with that revolutionary, server-side scripting language known as PHP, which started out standing for Personal Home Page and now represents Hypertext Pre-Processor ... pretty much a "hacked" acronym.&lt;br /&gt;&lt;br /&gt;But enough about the boring history of PHP (I assume boring as when I discuss it with most people the glazed look is a dead give-away), and more about me. I am Gareth ... Oh, you want a bit more? Alrighty then. I am as of the date of this post a 28 year-old, engaged (should earn me some kudos with the little lady), South African guy, currently employed by &lt;a href="http://www.synaq.com"&gt;Synaq&lt;/a&gt;, a company that specialises in providing Managed Linux Services to corporations using Open Source technologies. Pretty much were a bunch of Open Source geeks having a blast playing with really powerful machines that handle millions of processes per day. Well, thats what the System Admin's do at least. I am the geek that makes some of the software my fellow colleagues use and even some of our clients. I am the Web Developer. Or rather &lt;span style="font-style: italic;"&gt;a&lt;/span&gt; web developer because with my compatriot Scott we are the team of two that try our best to write, hack, squeeze, prod, improve, maintain and otherwise maul code into some semblance of what the company wants. Its a nice job ... keeps me kinda busy .. and we get free coffee .. which is a nice perk..&lt;br /&gt;&lt;br /&gt;And I am waffling so ONWARD! The reason I created this blog is simply because in my day-to-day work I often find myself sitting with a Great Discovery in my hands, either conjured alone or with Scott, and no one to share it with. While there are sites I could post this stuff onto it somehow feels more like just chucking stuff at the world in general than it does making a contribution. So, I hope to use this blog to share my web development woes and I have a few ideas I hope to get up and running on here as well. One of which is a complete A-Z tutorial of becoming a PHP web developer. All the way from understanding the client-server chain, to installing a testing server on your machine, choosing an IDE and getting stuck into the coding.&lt;br /&gt;&lt;br /&gt;Well enough waffle for today. Tomorrow I shall make my first post (or later if I can't contain myself). Thanks for taking the time to read my first piece of drivel and hope you come back&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7681844163425794280-9185294222718202087?l=garethmccumskey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://garethmccumskey.blogspot.com/feeds/9185294222718202087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://garethmccumskey.blogspot.com/2009/04/its-all-about-me.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/9185294222718202087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7681844163425794280/posts/default/9185294222718202087'/><link rel='alternate' type='text/html' href='http://garethmccumskey.blogspot.com/2009/04/its-all-about-me.html' title='Its all about me.'/><author><name>Gareth McCumskey</name><uri>https://profiles.google.com/105849771369868895436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-tPXAjpPDQEg/AAAAAAAAAAI/AAAAAAAAAd8/OsH4hFSBDsc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
