<?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:blogger='http://schemas.google.com/blogger/2008' 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-3241921104762993287</id><updated>2024-11-01T19:18:29.788+11:00</updated><category term="PHP_CodeSniffer"/><category term="MySource4"/><category term="MySource Matrix"/><category term="WebDAV"/><category term="MySource Mini"/><category term="Squiz"/><category term="PHP"/><category term="PEAR"/><category term="PHPUnit"/><category term="Testing"/><category term="svn"/><category term="JavaScript"/><category term="Zend"/><category term="Accessibility"/><category term="Documentation"/><category term="Performance"/><category term="CSS"/><category term="Dreamweaver"/><category term="Ethereal"/><category term="HIPOs"/><category term="IP.Board"/><category term="JavaScript Lint"/><category term="Licencing"/><category term="MMIUC2008"/><category term="Open Source"/><category term="Roles"/><category term="Steve Agland"/><category term="Viper"/><category term="WYSIWYG"/><category term="Zend Code Analyzer"/><category term="peardoc"/><category term="Ajax"/><category term="Aleks Bochniak"/><category term="Animal Logic"/><category term="Ant"/><category term="Apache"/><category term="Apple"/><category term="Asset Listing"/><category term="CGI"/><category term="CMS Watch"/><category term="Caching"/><category term="Checkstyle"/><category term="Community Server"/><category term="Computerworld"/><category term="Content Editing"/><category term="Continuous Integration"/><category term="CruiseControl"/><category term="DAL"/><category term="Design"/><category term="DocBook"/><category term="Firefox"/><category term="GD"/><category term="Games"/><category term="Gerred"/><category term="Greg Beaver"/><category term="Happy Feet"/><category term="IPC"/><category term="Keywords"/><category term="Lighttpd"/><category term="Locking"/><category term="MMIUC2009"/><category term="Malta"/><category term="Metadata"/><category term="Microsoft"/><category term="Movies"/><category term="Mozile"/><category term="MySource Classic"/><category term="OS X"/><category term="PHP5"/><category term="PMD"/><category term="Permissions"/><category term="Peter Brownlow"/><category term="Phing"/><category term="RedDot"/><category term="Sebastian Bergmann"/><category term="Selenium"/><category term="Squiz Labs"/><category term="Squiz Server"/><category term="TextMate"/><category term="Tutorials"/><category term="Twitter"/><category term="VirtualBox"/><category term="Web 2.0"/><category term="Xdebug"/><category term="Zend Framework"/><category term="iPhone"/><category term="iPod Touch"/><category term="jQuery"/><category term="jslint"/><category term="phpArchitect"/><title type='text'>Greg Sherwood</title><subtitle type='html'>A stream of consciousness from a web developer</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gregsherwood.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>100</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-7281735826240836143</id><published>2009-12-09T16:04:00.003+11:00</published><updated>2009-12-09T16:27:10.500+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PHP_CodeSniffer"/><title type='text'>PHP_CodeSniffer 1.3.0 development plan</title><content type='html'>A while ago, I was contacted by Gabriele Santini, lead PHP architect for &lt;a href=&quot;http://www.sqli.com/&quot;&gt;SQLI&lt;/a&gt; in Paris. Gabriele had some great ideas to make PHP_CodeSniffer more powerful and had already started developing a wrapper for PHP_CodeSniffer to implement many of them. I finally got the time to look through this wrapper recently and I was impressed with what I saw, but couldn&#39;t change PHP_CodeSniffer in a way that would make it easy for Gabriele to maintain the wrapper without duplicating a lot of code.&lt;br /&gt;&lt;br /&gt;But these were such great ideas that I had to act on them. So we&#39;ve now teamed up to implement the changes into PHP_CodeSniffer itself. Work has already started (the first commits went in today) and a development plan has been created.&lt;br /&gt;&lt;br /&gt;You can read about the features on the &lt;a href=&quot;http://www.squizlabs.com/php-codesniffer/big-plans-for-phpcs&quot;&gt;Squiz Labs blog post&lt;/a&gt;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/7281735826240836143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/7281735826240836143'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2009/12/phpcodesniffer-130-development-plan.html' title='PHP_CodeSniffer 1.3.0 development plan'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-9158702050971247831</id><published>2009-11-24T11:45:00.002+11:00</published><updated>2009-11-24T11:52:02.797+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MySource Mini"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP_CodeSniffer"/><category scheme="http://www.blogger.com/atom/ns#" term="Squiz"/><category scheme="http://www.blogger.com/atom/ns#" term="Squiz Labs"/><title type='text'>New PHP_CodeSniffer blog</title><content type='html'>&lt;a href=&quot;http://www.squizlabs.com&quot;&gt;Squiz Labs&lt;/a&gt; (the R&amp;D arm of &lt;a href=&quot;http://www.squiz.net&quot;&gt;Squiz&lt;/a&gt;, and the company that I work for) launched their new blog last week, developed in our new &lt;a href=&quot;http://mini.squiz.net&quot;&gt;MySource Mini CMS&lt;/a&gt;. This blog covers the CMS products we produce, but also has a dedicated section for PHP_CodeSniffer.&lt;br /&gt;&lt;br /&gt;I&#39;ll be blogging about PHP_CodeSniffer over there, so subscribe to that dedicated PHP_CodeSniffer RSS feed if you want to keep up-to-date with what is happening on the project.&lt;br /&gt;&lt;br /&gt;The RSS feed URL is: &lt;a href=&quot;http://feeds.feedburner.com/SquizLabsBlog-PHP_CodeSniffer&quot;&gt;http://feeds.feedburner.com/SquizLabsBlog-PHP_CodeSniffer&lt;/a&gt;&lt;br /&gt;The PHP_CodeSniffer blog URL is: &lt;a href=&quot;http://www.squizlabs.com/php-codesniffer&quot;&gt;http://www.squizlabs.com/php-codesniffer&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Not much there right now, but I did at least remember to post a notification about the 1.2.1 release even though I forgot to post about it here.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/9158702050971247831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/9158702050971247831'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2009/11/new-phpcodesniffer-blog.html' title='New PHP_CodeSniffer blog'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-7386417008632999566</id><published>2009-10-30T09:58:00.008+11:00</published><updated>2009-10-30T11:46:26.101+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MySource Mini"/><category scheme="http://www.blogger.com/atom/ns#" term="VirtualBox"/><title type='text'>Running the MySource Mini VM with VirtualBox</title><content type='html'>If you don&#39;t have access to VMWare player to give the &lt;a href=&quot;http://mini.squiz.net/download&quot;&gt;MySource Mini virtual machine image&lt;/a&gt; a try, you can use the free &lt;a href=&quot;http://www.virtualbox.org/&quot;&gt;VirtualBox&lt;/a&gt; player instead. VirtualBox has the ability to use the HDD image from VMWare without the need to have VMWare installed. You do need to set a couple of options though, which I&#39;ll run you through.&lt;br /&gt;&lt;br /&gt;The first thing you need to do is &lt;a href=&quot;http://www.virtualbox.org/wiki/Downloads&quot;&gt;download VirtualBox&lt;/a&gt;. Make sure you have the latest version (I&#39;m using 3.0.10) as I&#39;ve read that older versions may not have all the options we need.&lt;br /&gt;&lt;br /&gt;Now you want to create a new virtual machine. Give it a name (MySource Mini is fine) and it will ask you what type of OS it is. You want to pick Linux, Debian (64 bit).&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi18ICr5TiDMlXm_1HUZP3NYgoeFORFg1WI7cXK4B5s6RkNrQwwLrJN0YXiln5-UDXP_ICaIWXwgg49ve2pUiFQfs7up3RJRfCd3s2EDsLn6mUd0ilVrGYkgwz9WXvTOBL4c1TXEpO68UkW/s1600-h/vb-mini-1.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 296px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi18ICr5TiDMlXm_1HUZP3NYgoeFORFg1WI7cXK4B5s6RkNrQwwLrJN0YXiln5-UDXP_ICaIWXwgg49ve2pUiFQfs7up3RJRfCd3s2EDsLn6mUd0ilVrGYkgwz9WXvTOBL4c1TXEpO68UkW/s320/vb-mini-1.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5398168098544245378&quot; /&gt;&lt;/a&gt;&lt;br /&gt;You&#39;ll need to pick how much memory you want to give it. I gave mine 512MB but it doesn&#39;t really matter as you can change this later.&lt;br /&gt;&lt;br /&gt;The next bit is the virtual hard disk. You want to use an existing hard disk. Click the icon to launch the Virtual Media Manager. Click &lt;strong&gt;Add&lt;/strong&gt; and then locate the MySource Mini folder that was extracted from the MySource Mini download. Select the file &lt;strong&gt;MySource Mini.vmdk&lt;/strong&gt; and then use this as hard disk for your VM.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7L34lvsNiQ7KsTuJvjMLogRxYhRbRh6Bnabv6-xlkRNHkKfFc4RV8Ako-SbXPjgHso7eQmfFjLdN43KmcH_6qMQBMHOq1sZzzyjiftDucF2lR965PZKLPv8f54sZ130jbfBsFgA-SkDys/s1600-h/vb-mini-2.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 296px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7L34lvsNiQ7KsTuJvjMLogRxYhRbRh6Bnabv6-xlkRNHkKfFc4RV8Ako-SbXPjgHso7eQmfFjLdN43KmcH_6qMQBMHOq1sZzzyjiftDucF2lR965PZKLPv8f54sZ130jbfBsFgA-SkDys/s320/vb-mini-2.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5398168318786803746&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Now you can finish creating your VM. It will appear in the VM list once it has been created, but you need to configure a few more things before you can start it up.&lt;br /&gt;&lt;br /&gt;Select the VM and click &lt;strong&gt;Settings&lt;/strong&gt;. Go to &lt;strong&gt;System&lt;/strong&gt; and make sure &lt;strong&gt;Enable IO APIC&lt;/strong&gt; is selected.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3rGtEzv0pqzp4V5J7z2v20_QV0psK1_HN0GjwSQ7_gwh1UlVmtYSF7pGbEnG0f7W92hCbUb3krRQkKW0gD10UZH8-Qchlr8NbW9EtHxhM4YNOYuC5b-G-DQ-iwxdi8UBj6ghOK1GGqDty/s1600-h/vb-mini-3.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 238px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3rGtEzv0pqzp4V5J7z2v20_QV0psK1_HN0GjwSQ7_gwh1UlVmtYSF7pGbEnG0f7W92hCbUb3krRQkKW0gD10UZH8-Qchlr8NbW9EtHxhM4YNOYuC5b-G-DQ-iwxdi8UBj6ghOK1GGqDty/s320/vb-mini-3.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5398168600031556882&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Now go to &lt;strong&gt;Storage&lt;/strong&gt;, select &lt;strong&gt;Enable Additional Controller&lt;/strong&gt; and make sure &lt;strong&gt;SATA (AHCI&lt;/strong&gt;) is selected from the drop-down. In the &lt;strong&gt;Attachments&lt;/strong&gt; section at the bottom, click &lt;strong&gt;IDE Primiary Master&lt;/strong&gt; and select &lt;strong&gt;SATA Port 0&lt;/strong&gt; instead.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQmh3gwmJBrFwkcKQK2uMtKSIrwVboXOyB6z26ugJToQOW9rkYCq_09CuDMaVGfyXb78Wi65KaasOwjoF477DKMsrdZ7tRiBZLRiGaEGFbT1qKzckH4eM8eEY6AZeUw-X_UMQysaf-n5Zo/s1600-h/vb-mini-4.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 276px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQmh3gwmJBrFwkcKQK2uMtKSIrwVboXOyB6z26ugJToQOW9rkYCq_09CuDMaVGfyXb78Wi65KaasOwjoF477DKMsrdZ7tRiBZLRiGaEGFbT1qKzckH4eM8eEY6AZeUw-X_UMQysaf-n5Zo/s320/vb-mini-4.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5398168774734799346&quot; /&gt;&lt;/a&gt;&lt;br /&gt;You may need to fiddle with your &lt;strong&gt;Network&lt;/strong&gt; settings as well. I had to use Bridged networking for some reason, but I haven&#39;t looked into why NAT was not working for me.&lt;br /&gt;&lt;br /&gt;If everything works, your VM will boot and entering &lt;strong&gt;ifconfig eth0&lt;/strong&gt; should show you a valid IP address you can connect to. Now you can follow the &lt;a href=&quot;http://mini.squiz.net/quick-start-guide/vm&quot;&gt;VM Quick Start guide&lt;/a&gt; and have your MySource Mini system up and running in a few minutes.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/7386417008632999566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/7386417008632999566'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2009/10/running-mysource-mini-vm-with.html' title='Running the MySource Mini VM with VirtualBox'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi18ICr5TiDMlXm_1HUZP3NYgoeFORFg1WI7cXK4B5s6RkNrQwwLrJN0YXiln5-UDXP_ICaIWXwgg49ve2pUiFQfs7up3RJRfCd3s2EDsLn6mUd0ilVrGYkgwz9WXvTOBL4c1TXEpO68UkW/s72-c/vb-mini-1.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-6262897664138492860</id><published>2009-10-30T08:53:00.005+11:00</published><updated>2009-10-30T09:40:20.687+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MMIUC2009"/><category scheme="http://www.blogger.com/atom/ns#" term="MySource Mini"/><category scheme="http://www.blogger.com/atom/ns#" term="Open Source"/><category scheme="http://www.blogger.com/atom/ns#" term="svn"/><category scheme="http://www.blogger.com/atom/ns#" term="WYSIWYG"/><title type='text'>MySource Mini now free to download</title><content type='html'>The big news (for me) at the MySource Matrix International User Conference (MMIUC) this year was that MySource Mini can now be downloaded for free as a virtual machine image. You&#39;ll need VMWare player to run the image, but you are also free to convert it to another format if you want.&lt;br /&gt;&lt;br /&gt;In addition, Squiz showed its commitment to open source by announcing that MySource Mini will be released under the GPL and will have a public SVN repository. We&#39;re in the process of getting this ready and we&#39;ll have it done in a couple of weeks.&lt;br /&gt;&lt;br /&gt;Sticking with our goal of keeping everything about MySource Mini simple, the virtual machine is easy to install and you can subscribe to the automatic up-to-date system to have it upgrade itself. A personal subscription is only $250 a year and when you take a look what has been added in just 6 months, it&#39;s great value.&lt;br /&gt;&lt;br /&gt;I showed a demonstration at the MMIUC of the new features added since the MySource Mini launch in April this year. The main features I showed were:&lt;br /&gt;- multi-site support&lt;br /&gt;- &lt;a href=&quot;http://mini.squiz.net/features/movies&quot;&gt;embedded videos&lt;/a&gt; and &lt;a href=&quot;http://gregsherwood.blogspot.com/2009/06/managing-videos-in-mysource-mini.html&quot;&gt;automatic conversion to FLV files&lt;/a&gt;&lt;br /&gt;- embedded and lightbox-style &lt;a href=&quot;http://mini.squiz.net/features/image-galleries&quot;&gt;image galleries&lt;/a&gt;&lt;br /&gt;- &lt;a href=&quot;http://mini.squiz.net/features/track-changes&quot;&gt;track changes functionality&lt;/a&gt; built right into the inline WYSIWYG editor&lt;br /&gt;- improvements to the help system for new users&lt;br /&gt;- an integrated bug-tracker based on Bugzilla&lt;br /&gt;&lt;br /&gt;I&#39;ve been saying how good MySource Mini is for a while and how its powerful functionality is made simple through great user interfaces. But now you don&#39;t have to take my word for it. Grab the VM and have a play around yourself.&lt;br /&gt;&lt;br /&gt;Product site: &lt;a href=&quot;http://mini.squiz.net&quot;&gt;http://mini.squiz.net&lt;/a&gt;&lt;br /&gt;Download page: &lt;a href=&quot;http://mini.squiz.net/download&quot;&gt;http://mini.squiz.net/download&lt;/a&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/6262897664138492860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/6262897664138492860'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2009/10/mysource-mini-now-free-to-download.html' title='MySource Mini now free to download'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-6460590353901678696</id><published>2009-09-29T14:17:00.000+10:00</published><updated>2009-09-29T14:18:41.021+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CSS"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP_CodeSniffer"/><title type='text'>Why check JavaScript and CSS files with PHP_CodeSniffer?</title><content type='html'>Websites and browser-based application interfaces are getting richer. This isn&#39;t new, but it&#39;s certainly increasing and is now a much higher expectation of popular sites and software products. This means more JavaScript and more CSS and it often means much more advanced JavaScript and CSS than PHP developers are used to.&lt;br /&gt;&lt;br /&gt;PHP may power the guts of your application, but the interface has moved on. It&#39;s not just a heap of hard-coded HTML output via your PHP template engine with a few JS and CSS files included. It&#39;s now a proper grown-up rich user interface with all sorts of trickery and fanciness. And PHP developers are having to add JavaScript and CSS to their everyday toolkit.&lt;br /&gt;&lt;br /&gt;The days of JavaScript development and CSS styling being a nice change for a PHP developer are gone. It&#39;s quite likely you are doing more JavaScript and CSS work than PHP for much of the time. You know PHP and it&#39;s easy to implement the basic functionality you need quite quickly. But the interface takes longer. Everyone sees your interface code and it has to run in a range of web browsers.&lt;br /&gt;&lt;br /&gt;You&#39;ll probably spend quite a lot of time working on interfaces before having to head back into PHP to make some functional changes. And this is exactly where coding standards come in handy. You are necessarily having to change between different development languages and all PHP developers on your team need to be able to produce good quality JavaScript and CSS, no just a select few.&lt;br /&gt;&lt;br /&gt;PHP_CodeSniffer has support for checking JavaScript and CSS files in addition to PHP source code. It does this by using custom tokenizers to make JavaScript code look as close as possible to PHP code to the sniffs. CSS code looks different but sniffs are written in the same way as PHP and JavaScript sniffs and can listen for special token types that PHP_CodeSniffer creates.&lt;br /&gt;&lt;br /&gt;So here is the main benefit of using a PHP_CodeSniffer standard that checks JavaScript and CSS files; consistency.&lt;br /&gt;&lt;br /&gt;Just like PHP code, developers tend to write JavaScript and CSS in whatever style they are used to. I believe consistency is much more of a problem with these file types because developers can be lacking knowledge, reverting to copy/paste jobs from the published code examples, or possibly just focusing so much on this new code that they forget that their code will need to be maintained by others. And then there is the fact that the JavaScript engines are pretty forgiving and you can seemingly write code however you please.&lt;br /&gt;&lt;br /&gt;PHP developers are really embracing quality assurance processes like unit testing and coding standards. Don&#39;t leave the basics behind when you leave PHP behind to work on an interface. Keep your code clean and consistent and follow a coding standard so your whole team can read and maintain your code more easily.&lt;br /&gt;&lt;br /&gt;But consistency is not limited to code created by multiple developers in a single language. A good coding standard can actually make your PHP and JavaScript code look similar, providing consistency between languages. This makes it much easier to switch between PHP and JavaScript code, either for writing code or just reading it during debugging, and is equally as good for fast switching throughout the day or long stretches spent coding in a single language.&lt;br /&gt;&lt;br /&gt;A nice side-effect of using a good coding standard that has support for JavaScript and CSS checking is that it can find errors in your code that can cause browser compatibility issues. This is something PHP developers don&#39;t think a lot about when doing day-to-day PHP development, but it is something vitally important when working on interfaces.&lt;br /&gt;&lt;br /&gt;So what do I recommend? PHP_CodeSniffer of course, but potentially a more strict and comprehensive standard than the default PEAR standard. The PEAR standard does not check JavaScript and CSS files and doesn&#39;t included sniffs that hook into the 3rd-party JavaScript lint tools. The Squiz standard does all this and might be a good option for you if you are deciding on a standard to use. It is very strict (121 sniffs as opposed to 26 for the PEAR standard) but I do believe it helps produce very good code and it is extremely well maintained. Or you can always build a custom coding standard as well, pulling sniffs from the Squiz standard as required.&lt;br /&gt;&lt;br /&gt;Whatever path looks best for you, I encourage you to make a JavaScript and CSS coding standard part of your development kit. You can use PHP_CodeSniffer to enforce it in the same way you check your PHP files, so there is really no excuse any more.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/6460590353901678696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/6460590353901678696'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2009/09/why-check-javascript-and-css-files-with.html' title='Why check JavaScript and CSS files with PHP_CodeSniffer?'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-1010778368723200049</id><published>2009-08-17T13:39:00.003+10:00</published><updated>2009-08-17T13:52:30.571+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PHP_CodeSniffer"/><title type='text'>PHP_CodeSniffer 1.2.0 released</title><content type='html'>It&#39;s been just over 13 months since the last stable release of PHP_CodeSniffer, but today I&#39;ve finally released version 1.2.0 and it&#39;s packed with features and fixes.&lt;br /&gt;&lt;br /&gt;Some of the highlights:&lt;br /&gt;- &lt;a href=&quot;http://gregsherwood.blogspot.com/2008/10/phpcodesniffer-csscodesniffer.html&quot;&gt;support for checking CSS files&lt;/a&gt;&lt;br /&gt;- &lt;a href=&quot;http://gregsherwood.blogspot.com/2009/07/suppress-error-and-warning-messages-in.html&quot;&gt;the ability to tell PHP_CodeSniffer to ignore parts of your code&lt;/a&gt;&lt;br /&gt;- &lt;a href=&quot;http://gregsherwood.blogspot.com/2008/12/phpcodesniffer-reporting-improvements.html&quot;&gt;writing any report to a file&lt;/a&gt;&lt;br /&gt;- a new emacs report format&lt;br /&gt;- &lt;a href=&quot;http://gregsherwood.blogspot.com/2008/11/phpcodesniffer-and-jslint.html&quot;&gt;integration with JSLint&lt;/a&gt;&lt;br /&gt;- the ability to specify a list of sniffs on the command line&lt;br /&gt;- support for multi-file sniffs&lt;br /&gt;- full support for the new PEAR coding standard&lt;br /&gt;- 35 new sniffs to use in your own standards&lt;br /&gt;- 27 bug fixes&lt;br /&gt;&lt;br /&gt;Thanks to everyone who tested alpha and beta releases over the last 12 months and a special thanks to everyone who took the time to submit bug reports and contribute features.&lt;br /&gt;&lt;br /&gt;You can view the full changelog and download the release on the &lt;a href=&quot;http://pear.php.net/package/PHP_CodeSniffer/download/1.2.0&quot;&gt;package download page&lt;/a&gt;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/1010778368723200049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/1010778368723200049'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2009/08/phpcodesniffer-120-released.html' title='PHP_CodeSniffer 1.2.0 released'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-1265406809920504155</id><published>2009-07-29T14:34:00.003+10:00</published><updated>2009-07-29T14:56:23.672+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Performance"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP_CodeSniffer"/><category scheme="http://www.blogger.com/atom/ns#" term="Testing"/><title type='text'>An easy way to leak memory using DirectoryIterator</title><content type='html'>I&#39;ve been trying to track down a memory leak while running the PHP_CodeSniffer unit tests after being told the PEAR-wide test suite was running out during my run. My own testing showed the unit tests started at 11MB of memory used and ballooned out to about 56MB, even with no error messages being generated.&lt;br /&gt;&lt;br /&gt;I already do a bit of cleanup to save memory (unset()ing some member vars mostly) and I tried cleaning just about everything else out, but memory usage didn&#39;t drop. I don&#39;t have any circular references, so I had nothing obvious to try.&lt;br /&gt;&lt;br /&gt;After a bit of playing, I found the problem; a DirectoryIterator.&lt;br /&gt;&lt;br /&gt;My code looked a bit like this:&lt;br /&gt;&lt;pre&gt;$di = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));&lt;br /&gt;foreach ($di as $file) {&lt;br /&gt;    $basename = basename($file, &#39;.php&#39;);&lt;br /&gt;    if (substr($basename, -5) !== &#39;Sniff&#39;) {&lt;br /&gt;        continue;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;The $file variable is a DirectoryIterator item. I was passing it into the basename() function and relying on the fact that PHP would cast it to a string (the file name).&lt;br /&gt;&lt;br /&gt;I changed the code to grab the file name first and then pass it into the basename() function, like this:&lt;br /&gt;&lt;pre&gt;$di = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));&lt;br /&gt;foreach ($di as $file) {&lt;br /&gt;    $fileName = $file-&gt;getFilename();&lt;br /&gt;    $basename = basename($fileName, &#39;.php&#39;);&lt;br /&gt;    if (substr($basename, -5) !== &#39;Sniff&#39;) {&lt;br /&gt;        continue;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;So now the tests only use 16MB of memory; a healthy saving of 40MB. There is probably a bit more that can be saved by calling this code less during testing, but this was a good (and easy) result regardless.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/1265406809920504155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/1265406809920504155'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2009/07/easy-way-to-leak-memory-using.html' title='An easy way to leak memory using DirectoryIterator'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-6684376514325509635</id><published>2009-07-07T12:02:00.003+10:00</published><updated>2009-07-07T12:07:09.457+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PHP_CodeSniffer"/><title type='text'>PHP_CodeSniffer 1.2.0RC3 released</title><content type='html'>I&#39;ve just uploaded version 1.2.0RC3 of PHP_CodeSniffer. RC3 is a feature release rather than a bug fix release because there were a few nifty features (like &lt;a href=&quot;http://gregsherwood.blogspot.com/2009/07/suppress-error-and-warning-messages-in.html&quot;&gt;error message suppression&lt;/a&gt;) that I wanted to get in before the next stable.&lt;br /&gt;&lt;br /&gt;This is the last planned release candidate before 1.2.0 stable.&lt;br /&gt;&lt;br /&gt;You can view the full changelog and download the release on the &lt;a href=&quot;http://pear.php.net/package/PHP_CodeSniffer/download/1.2.0RC3&quot;&gt;package download page&lt;/a&gt;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/6684376514325509635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/6684376514325509635'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2009/07/phpcodesniffer-120rc3-released.html' title='PHP_CodeSniffer 1.2.0RC3 released'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-300353897721516589</id><published>2009-07-03T16:45:00.001+10:00</published><updated>2009-07-03T16:45:59.706+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PHP_CodeSniffer"/><title type='text'>Suppress error and warning messages in PHP_CodeSniffer</title><content type='html'>Just over 13 months ago, I had a feature request submitted for PHP_CodeSniffer to allow developers to annotate their code with comments that tell PHP_CodeSniffer to ignore some lines. At the time, I remember thinking &quot;This is a hack!&quot;, but I&#39;ve changed my mind. PHP_CodeSniffer version 1.2.0 will have error message suppression comment tags.&lt;br /&gt;&lt;br /&gt;You use them like so:&lt;br /&gt;&lt;pre&gt;$var = TRUE;&lt;br /&gt;// @codingStandardsIgnoreStart&lt;br /&gt;if ($var === true) {&lt;br /&gt;    echo &quot;true that&quot;;&lt;br /&gt;}&lt;br /&gt;// @codingStandardsIgnoreEnd&lt;/pre&gt;&lt;br /&gt;If you use the Squiz coding standard that comes bundled with PHP_CodeSniffer, it will complain about pretty much everything and tell you you can&#39;t have &quot;true&quot; in lowercase and that echo&#39;d string can&#39;t be in double quotes.&lt;br /&gt;&lt;br /&gt;Without the new suppression tags in place, you get this:&lt;br /&gt;&lt;pre&gt;FILE: /Users/gsherwood/PHP_CodeSniffer/temp.php&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;FOUND 3 ERROR(S) AND 0 WARNING(S) AFFECTING 3 LINE(S)&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt; 2 | ERROR | Missing file doc comment&lt;br /&gt; 4 | ERROR | TRUE, FALSE and NULL must be uppercase; expected&lt;br /&gt;   |       | &quot;TRUE&quot; but found &quot;true&quot;&lt;br /&gt; 5 | ERROR | String &quot;true that&quot; does not require double quotes;&lt;br /&gt;   |       | use single quotes instead&lt;br /&gt;---------------------------------------------------------------&lt;/pre&gt;&lt;br /&gt;With them in place, you get this:&lt;br /&gt;&lt;pre&gt;FILE: /Users/gsherwood/PHP_CodeSniffer/temp.php&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;FOUND 1 ERROR(S) AND 0 WARNING(S) AFFECTING 1 LINE(S)&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt; 2 | ERROR | Missing file doc comment&lt;br /&gt;---------------------------------------------------------------&lt;/pre&gt;&lt;br /&gt;Too easy. Sorry it took so long.&lt;br /&gt;&lt;br /&gt;Please don&#39;t be tempted to wrap your entire file in these tags. The Squiz standard will still find ways to yell at you and you&#39;re not fooling anyone.&lt;br /&gt;&lt;br /&gt;Grab the code from CVS now or wait for the next release, which will be whenever I get my act together.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/300353897721516589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/300353897721516589'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2009/07/suppress-error-and-warning-messages-in.html' title='Suppress error and warning messages in PHP_CodeSniffer'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-6519841365859907530</id><published>2009-06-03T14:39:00.004+10:00</published><updated>2009-06-03T15:02:04.507+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MySource Mini"/><title type='text'>Managing videos in MySource Mini</title><content type='html'>In the next couple of weeks, we&#39;ll be releasing a MySource Mini update that contains much more advanced video management functionality than the first release. In typical MySource Mini style, it&#39;s simple and sexy while still being very powerful. And I&#39;ve got some screenshots of the feature in development as a bit of a teaser.&lt;br /&gt;&lt;br /&gt;Our end goal for this development was to allow users to upload any common video format and be able to embed it in their websites in a way that made it available to the highest number of site visitors. Like most video sharing websites, we decided on a Flash-based player and we will be creating our own player so we can skin it in the way users want.&lt;br /&gt;&lt;br /&gt;We also had to take editing, thumbnails and versioning into account so movies fit seamlessly into the MySource Mini graphical environment.&lt;br /&gt;&lt;br /&gt;Uploading a movie is as easy as uploading an image.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixKV5p-zHKjudXRHklgu6NGr7WramBG-h9_YU724G_tELYBVOEwcmgnz31mqq5svsHZwGpSDEWWpE30qdD3DD6upOeGvjaV1S0YypgdJwQ5fStAcISrpCX32IpWavZZp6__306cSeg44WU/s1600-h/upload-movie.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 303px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixKV5p-zHKjudXRHklgu6NGr7WramBG-h9_YU724G_tELYBVOEwcmgnz31mqq5svsHZwGpSDEWWpE30qdD3DD6upOeGvjaV1S0YypgdJwQ5fStAcISrpCX32IpWavZZp6__306cSeg44WU/s400/upload-movie.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5342960913443708546&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Once you&#39;ve uploaded your movie, it is converted to an FLV file automatically so we can play it using our flash player. The original file is retained so you can link to your high quality MOV/AVI/etc. if you&#39;d like. We also extract thumbnails from the movie so you can select the one that fits the best without having to create your own.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXrh2VZr3wKrxlXk9_qdTgeGiH-LM-OOPfI-2-lCyqO5Q0PU4OYEHPzzcRJW2dAjBwDxRPJA9WfXlGe2_KjU9rO_GmquFJ32r2Jrc61koi1oGWW3vsbaxP8Y7ekJYWfoBKiKTiZG77IgEG/s1600-h/pick-thumb.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 303px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXrh2VZr3wKrxlXk9_qdTgeGiH-LM-OOPfI-2-lCyqO5Q0PU4OYEHPzzcRJW2dAjBwDxRPJA9WfXlGe2_KjU9rO_GmquFJ32r2Jrc61koi1oGWW3vsbaxP8Y7ekJYWfoBKiKTiZG77IgEG/s400/pick-thumb.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5342960918648950834&quot; /&gt;&lt;/a&gt;&lt;br /&gt;In the future, we&#39;ll be adding an option that allows you to replace this thumbnail with one you have created yourself, but we want to keep things simple to start with.&lt;br /&gt;&lt;br /&gt;Now that your movie is loaded into the system, you will be able to embed it into any page using the Viper WYSIWYG editor. It will be the same process as inserting an image, but we are still building this WYSIWYG plugin so I can&#39;t show you any screens of it yet.&lt;br /&gt;&lt;br /&gt;Versioning is great feature of MySource Mini and movies fit nicely into the whole system. Just like with pages, you can flick through different versions of your movie by looking at quick-loading images. Even if you&#39;ve uploaded a large movie, this montage-based preview allows you to quickly scan through versions without having to download each one. When you&#39;ve found the one you like, you can download it as normal.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKdsBPpUgkiVmuesprAFfWkal0U3EG8Kbv9YXs7TWCCXDcaizrj0VJEXCCcicqLCtP7SFDJ4eEz8qKnW_A4iBh0Y_kgPOcBFpAtsXVtpKCw6MFAvAkr1KhtCx8UBeHBQbUkeIehirruo0-/s1600-h/movie-version-1.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 303px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKdsBPpUgkiVmuesprAFfWkal0U3EG8Kbv9YXs7TWCCXDcaizrj0VJEXCCcicqLCtP7SFDJ4eEz8qKnW_A4iBh0Y_kgPOcBFpAtsXVtpKCw6MFAvAkr1KhtCx8UBeHBQbUkeIehirruo0-/s400/movie-version-1.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5342960921292263522&quot; /&gt;&lt;/a&gt;&lt;br /&gt;The movie shown above is an old preview of the MySource Mini caching system, so the whole movie looks similar. I&#39;ve also got a more interesting image for an old versioning system preview movie.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_5cmRDIZHqM8Urt6Nm3gBtNnEh93xxGWu4oUH4-1E1BbCYJA-pSPs08T72mGNL4pyssHLGXKD91BpCOFxbQHQNbkvFm4H7wKzEKwRaf20kyla7WGtiLt-cioHApFzOSWVH4z4l05B-IV8/s1600-h/movie-version-2.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 303px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_5cmRDIZHqM8Urt6Nm3gBtNnEh93xxGWu4oUH4-1E1BbCYJA-pSPs08T72mGNL4pyssHLGXKD91BpCOFxbQHQNbkvFm4H7wKzEKwRaf20kyla7WGtiLt-cioHApFzOSWVH4z4l05B-IV8/s400/movie-version-2.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5342960920852623586&quot; /&gt;&lt;/a&gt;&lt;br /&gt;For more information about MySource Mini, see the &lt;a href=&quot;http://mini.squiz.net&quot;&gt;MySource Mini&lt;/a&gt; website, or follow &lt;a href=&quot;http://twitter.com/mysourcemini&quot;&gt;@mysourcemini&lt;/a&gt; on Twitter.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/6519841365859907530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/6519841365859907530'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2009/06/managing-videos-in-mysource-mini.html' title='Managing videos in MySource Mini'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixKV5p-zHKjudXRHklgu6NGr7WramBG-h9_YU724G_tELYBVOEwcmgnz31mqq5svsHZwGpSDEWWpE30qdD3DD6upOeGvjaV1S0YypgdJwQ5fStAcISrpCX32IpWavZZp6__306cSeg44WU/s72-c/upload-movie.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-7917186616745499326</id><published>2009-05-25T15:30:00.003+10:00</published><updated>2009-05-25T15:37:20.494+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PHP_CodeSniffer"/><category scheme="http://www.blogger.com/atom/ns#" term="svn"/><title type='text'>PHP_CodeSniffer 1.2.0RC2 released</title><content type='html'>I&#39;ve just uploaded the a new PHP_CodeSniffer release. RC2 is a bug-fix only release, although it does contain one tiny change to the test suite so it can be integrated more easily run by external testing scripts.&lt;br /&gt;&lt;br /&gt;Please download and review. There are currently no bugs in the PHP_CodeSniffer bug tracker, so this will become the stable 1.2.0 unless any show-stoppers are found.&lt;br /&gt;&lt;br /&gt;For those reporting problems with the SVN pre-commit hook on this blog, I&#39;ve tested everything (including adding directories) and it is all working fine. If you have any problems, please report a bug using the PEAR bug tracker (no bug reports in comments please).&lt;br /&gt;&lt;br /&gt;You can view the full changelog and download the release on the &lt;a href=&quot;http://pear.php.net/package/PHP_CodeSniffer/download/1.2.0RC2&quot;&gt;package download page&lt;/a&gt;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/7917186616745499326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/7917186616745499326'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2009/05/phpcodesniffer-120rc2-released.html' title='PHP_CodeSniffer 1.2.0RC2 released'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-1741599378482317880</id><published>2009-05-07T19:08:00.003+10:00</published><updated>2009-05-07T19:19:38.346+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MySource Mini"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP_CodeSniffer"/><category scheme="http://www.blogger.com/atom/ns#" term="Twitter"/><title type='text'>Missing/Back in action</title><content type='html'>It&#39;s been about 2 months since my last post. A lot has been happening and I&#39;ve been really busy. If I had posted over the last couple of months, the posts would have covered:&lt;br /&gt;&lt;br /&gt;MySource Mini, MySource Mini and more MySource Mini. I&#39;ve been so busy getting this product ready for launch that I&#39;ve been almost completely consumed by it. It&#39;s a terrific product though and I&#39;m very proud of we we&#39;ve achieved. We had the launch last week (&lt;a href=&quot;http://doctordada.blogspot.com/2009/05/mysource-mini.html&quot;&gt;a great review here&lt;/a&gt;), had a great team dinner at Sydney Tower on the weekend to celebrate and are now busily preparing units for delivery. Along with that, I&#39;m also working hard on the MySource Mini product website (running on a Mini of course) and getting the news out via &lt;a href=&quot;http://twitter.com/mysourcemini&quot;&gt;Twitter&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Sadly, I&#39;ve neglected PHP_CodeSniffer over the last few months as a result. The bug reports started piling up but I&#39;m happy to report I&#39;m getting on top of them now. I think there is currently one outstanding at the moment, which isn&#39;t too bad. Downloads of PHP_CodeSniffer have been through the roof over the last two months so I&#39;ll be putting out an RC2 soon for people to try out before the next stable release.&lt;br /&gt;&lt;br /&gt;I&#39;ll start posting again soon. In the meantime, &lt;a href=&quot;http://twitter.com/gregsherwood&quot;&gt;follow me on Twitter&lt;/a&gt;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/1741599378482317880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/1741599378482317880'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2009/05/missingback-in-action.html' title='Missing/Back in action'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-4216519475177471661</id><published>2009-03-09T14:45:00.003+11:00</published><updated>2009-03-09T14:59:50.235+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PHP_CodeSniffer"/><title type='text'>PHP_CodeSniffer 1.2.0RC1 released</title><content type='html'>I was just looking at the download stats for PHP_CodeSniffer version 1.2.0alpha1. Normally, my alpha releases get a very small number of downloads due to most users not allowing alpha state packages to be installed via PEAR (fair enough). But the 1.2.0 alpha got over 300 downloads. That&#39;s a great figure and a few bugs were fixed from that testing, but there is a very good reason why there were so many downloads - I released it nearly 4 months ago.&lt;br /&gt;&lt;br /&gt;To be honest, besides fixing the odd bug, I haven&#39;t been working on PHP_CodeSniffer lately. I&#39;m very busy working on the &lt;a href=&quot;http://gregsherwood.blogspot.com/2008/10/mysource-mini-demonstration.html&quot;&gt;MySource Mini&lt;/a&gt; and our coding standard seems to be nearing completion, so there is less work to be done there as well. But 1.2.0 is a good release with some great &lt;a href=&quot;http://gregsherwood.blogspot.com/2008/12/phpcodesniffer-reporting-improvements.html&quot;&gt;reporting improvements&lt;/a&gt;, so it&#39;s about time I released a beta version.&lt;br /&gt;&lt;br /&gt;This release candidate is essentially a bug-fix only release, but please test it if you can so I can push it stable as soon as possible and start working on new features again.&lt;br /&gt;&lt;br /&gt;You can view the full changelog and download the release on the &lt;a href=&quot;http://pear.php.net/package/PHP_CodeSniffer/download/1.2.0RC1&quot;&gt;package download page&lt;/a&gt;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/4216519475177471661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/4216519475177471661'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2009/03/phpcodesniffer-120rc1-released.html' title='PHP_CodeSniffer 1.2.0RC1 released'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-2006171589851351462</id><published>2009-01-04T08:14:00.003+11:00</published><updated>2009-01-04T08:23:03.175+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PEAR"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP_CodeSniffer"/><title type='text'>Seven Things - Tagged by Sebastian and Manuel</title><content type='html'>I&#39;ve been tagged for this meme by &lt;a href=&quot;http://sebastian-bergmann.de/archives/838-Seven-Things-Tagged-by-Derick-Rethans.html&quot;&gt;Sebastian Bergmann&lt;/a&gt; and &lt;a href=&quot;http://www.manuel-pichler.de/archives/49-Seven-Things-Tagged-by-Kore-Nordmann.html&quot;&gt;Manuel Pichler&lt;/a&gt;, so I can hardly ignore it now!&lt;br /&gt;&lt;br /&gt;Seven things you may not know about me:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I didn&#39;t even know how to code a table in HTML when I started as a web developer at Squiz.&lt;/li&gt;&lt;li&gt;I didn&#39;t pick the name PHP_CodeSniffer. It was suggested by Pierre-Alain Joye (http://blog.thepimp.net) when I submitted &quot;Snoopy&quot; to PEAR.&lt;/li&gt;&lt;li&gt;I&#39;m slightly addicted to WoW, but I swear it&#39;s not my fault and my wife is addicted too, so it&#39;s not that bad.&lt;/li&gt;&lt;li&gt;I&#39;ve never been to a PHP conference or user group. I just can&#39;t ever seem to find the time, especially now with a 1 year old.&lt;/li&gt;&lt;li&gt;I&#39;m the main cook in the house, and I love it!&lt;/li&gt;&lt;li&gt;I love cats and dogs and have had 5 dogs and 4 cats as pets so far.&lt;/li&gt;&lt;li&gt;I don&#39;t have a Facebook account even though several people have tried to sign me up. One less thing to be addicted to.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;And the seven lucky people I have picked to do this next are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://till.klampaeckel.de/blog/&quot;&gt;Till Klampaeckel&lt;/a&gt; for being a PHP_CodeSniffer early adopter&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blog.thepimp.net&quot;&gt;Pierre-Alain Joye&lt;/a&gt; for helping me get into the wonder that is PEAR&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://pear.laurent-laville.org/&quot;&gt;Laurent Laville&lt;/a&gt; for helping me get PHP_CodeSniffer working on Windows&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://scott-kim.net/blog/&quot;&gt;Scott Kim&lt;/a&gt; because he codes PHP all day long and needs something to add to his blog&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://richardhulse.blogspot.com/&quot;&gt;Richard Hulse&lt;/a&gt; for convincing me Git is a great VCS, even if I haven&#39;t done anything about it&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.atnan.com/&quot;&gt;Nathan de Vries&lt;/a&gt; because he&#39;s a smart guy with and without PHP&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.zedsaid.com/blog&quot;&gt;Nic Hubbard&lt;/a&gt; for making his first contribution to a PHP open source project just recently&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;And here are the rules of the game:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Link your original tagger(s), and list these rules on your blog.&lt;/li&gt;&lt;li&gt;Share seven facts about yourself in the post - some random, some wierd.&lt;/li&gt;&lt;li&gt;Tag seven people at the end of your post by leaving their names and the links to their blogs.&lt;/li&gt;&lt;li&gt;Let them know they&#39;ve been tagged by leaving a comment on their blogs and/or Twitter.&lt;/li&gt;&lt;/ul&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/2006171589851351462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/2006171589851351462'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2009/01/seven-things-tagged-by-sebastian-and.html' title='Seven Things - Tagged by Sebastian and Manuel'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-9004783210353293447</id><published>2008-12-17T16:12:00.004+11:00</published><updated>2008-12-17T16:25:31.382+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MySource4"/><category scheme="http://www.blogger.com/atom/ns#" term="PHPUnit"/><category scheme="http://www.blogger.com/atom/ns#" term="Sebastian Bergmann"/><title type='text'>PHPUnit training at Squiz</title><content type='html'>&lt;a href=&quot;http://sebastian-bergmann.de/&quot;&gt;Sebastian Bergmann&lt;/a&gt; was in Sydney last week and I took the opportunity to have him come in and do a day of PHPUnit training for the developers at Squiz. We also went through continuous integration software like &lt;a href=&quot;http://www.phpundercontrol.org&quot;&gt;phpUnderControl&lt;/a&gt; and &lt;a href=&quot;http://www.atlassian.com/software/bamboo/&quot;&gt;Bamboo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It was great to finally meet Sebastian and learn a lot about the tools we will be using in MySource4 to ensure the quality of our product.&lt;br /&gt;&lt;br /&gt;If you are thinking of some in-house PHP training, Sebastian is great tutor on all things testing and comes pre-loaded with some funny and informative stories about his travels and PHP development in general.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/9004783210353293447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/9004783210353293447'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2008/12/phpunit-training-at-squiz.html' title='PHPUnit training at Squiz'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-2179224078048044439</id><published>2008-12-17T15:25:00.008+11:00</published><updated>2008-12-17T16:11:39.062+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Continuous Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP_CodeSniffer"/><title type='text'>PHP_CodeSniffer reporting improvements</title><content type='html'>Spurred on by some feature requests and at least one annoying colleague (you know who you are), I&#39;ve made some fairly good improvements to the way PHP_CodeSniffer reports the errors and warnings it finds. I&#39;ve added support for the concept of error sources, allowing you to see which sniff generated an error and also filter out the messages for that sniff.&lt;br /&gt;&lt;br /&gt;The XML, CSV and CheckStyle report formats all now include a source attribute in their output. This will allow continuous integration platforms to call PHP_CodeSniffer and produce a report of the most common errors rather than just display a list of all errors or the number of errors for each file.&lt;br /&gt;&lt;br /&gt;You can also expose this information in the full and summary reports, although it is off by default to avoid clutter. Use the new command line argument -s to show sources in these reports. Instead of something like this:&lt;br /&gt;&lt;pre&gt;FILE: /home/squiz/PHP_CodeSniffer/temp.php&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;FOUND 6 ERROR(S) AND 0 WARNING(S) AFFECTING 5 LINE(S)&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt; 2 | ERROR | Missing file doc comment&lt;br /&gt; 3 | ERROR | Object operator not indented correctly; expected 4 spaces but&lt;br /&gt;   |       | found 0&lt;br /&gt; 3 | ERROR | Object operator must be at the start of the line, not the end&lt;br /&gt; 4 | ERROR | TRUE, FALSE and NULL must be lowercase; expected &quot;true&quot; but found&lt;br /&gt;   |       | &quot;TRUE&quot;&lt;br /&gt; 6 | ERROR | Object operator not indented correctly; expected 4 spaces but&lt;br /&gt;   |       | found 1&lt;br /&gt; 9 | ERROR | TRUE, FALSE and NULL must be lowercase; expected &quot;false&quot; but found&lt;br /&gt;   |       | &quot;FALSE&quot;&lt;br /&gt;--------------------------------------------------------------------------------&lt;/pre&gt;You get this:&lt;br /&gt;&lt;pre&gt;FILE: /home/squiz/PHP_CodeSniffer/temp.php&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;FOUND 6 ERROR(S) AND 0 WARNING(S) AFFECTING 5 LINE(S)&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt; 2 | ERROR | Missing file doc comment (PEAR.Commenting.FileComment)&lt;br /&gt; 3 | ERROR | Object operator not indented correctly; expected 4 spaces but&lt;br /&gt;   |       | found 0 (PEAR.WhiteSpace.ObjectOperatorIndent)&lt;br /&gt; 3 | ERROR | Object operator must be at the start of the line, not the end&lt;br /&gt;   |       | (PEAR.WhiteSpace.ObjectOperatorIndent)&lt;br /&gt; 4 | ERROR | TRUE, FALSE and NULL must be lowercase; expected &quot;true&quot; but found&lt;br /&gt;   |       | &quot;TRUE&quot; (Generic.PHP.LowerCaseConstant)&lt;br /&gt; 6 | ERROR | Object operator not indented correctly; expected 4 spaces but&lt;br /&gt;   |       | found 1 (PEAR.WhiteSpace.ObjectOperatorIndent)&lt;br /&gt; 9 | ERROR | TRUE, FALSE and NULL must be lowercase; expected &quot;false&quot; but found&lt;br /&gt;   |       | &quot;FALSE&quot; (Generic.PHP.LowerCaseConstant)&lt;br /&gt;--------------------------------------------------------------------------------&lt;/pre&gt;&lt;br /&gt;There is also a totally new report format that shows a summary of your error sources. You use the command line argument --report=source to print a report like this:&lt;br /&gt;&lt;pre&gt;PHP CODE SNIFFER VIOLATION SOURCE SUMMARY&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;STANDARD   CATEGORY      SNIFF                         COUNT&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;PEAR       White space   Object operator indent        3&lt;br /&gt;Generic    PHP           Lower case constant           2&lt;br /&gt;PEAR       Commenting    File comment                  1&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;A TOTAL OF 6 SNIFF VIOLATION(S) WERE FOUND IN 3 SOURCE(S)&lt;br /&gt;------------------------------------------------------------&lt;/pre&gt;You can also get it to use official source names using the -s command line argument:&lt;br /&gt;&lt;pre&gt;PHP CODE SNIFFER VIOLATION SOURCE SUMMARY&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;SOURCE                                                 COUNT&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;PEAR.WhiteSpace.ObjectOperatorIndent                   3&lt;br /&gt;Generic.PHP.LowerCaseConstant                          2&lt;br /&gt;PEAR.Commenting.FileComment                            1&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;A TOTAL OF 6 SNIFF VIOLATION(S) WERE FOUND IN 3 SOURCE(S)&lt;br /&gt;------------------------------------------------------------&lt;/pre&gt;&lt;br /&gt;The idea with these source IDs is that you can then use them to filter your (potentially) long list of error messages and target a particular rule that you want to fix all in one go. So in this report, we have 3 errors generated from PEAR.WhiteSpace.ObjectOperatorIndent. To find out what they are, add the command line argument --sniffs=PEAR.WhiteSpace.ObjectOperatorIndent to get this:&lt;br /&gt;&lt;pre&gt;FILE: /home/squiz/PHP_CodeSniffer/temp.php&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;FOUND 3 ERROR(S) AND 0 WARNING(S) AFFECTING 2 LINE(S)&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt; 3 | ERROR | Object operator not indented correctly; expected 4 spaces but&lt;br /&gt;   |       | found 0&lt;br /&gt; 3 | ERROR | Object operator must be at the start of the line, not the end&lt;br /&gt; 6 | ERROR | Object operator not indented correctly; expected 4 spaces but&lt;br /&gt;   |       | found 1&lt;br /&gt;--------------------------------------------------------------------------------&lt;/pre&gt;&lt;br /&gt;Another related feature that was added is the ability to write the report output to a file in addition to writing it to the screen. This solves the problem where PHP_CodeSniffer comes across some code it cannot parse and throws PHP notices before XML output, creating invalid XML. Writing to a file is easy; just use the --report-file=filename command line argument.&lt;br /&gt;&lt;br /&gt;All these features are currently in CVS and will be released in 1.2.0a1 very soon.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/2179224078048044439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/2179224078048044439'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2008/12/phpcodesniffer-reporting-improvements.html' title='PHP_CodeSniffer reporting improvements'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-1166798262986709857</id><published>2008-11-12T16:14:00.004+11:00</published><updated>2008-11-12T16:22:11.879+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jslint"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP_CodeSniffer"/><title type='text'>PHP_CodeSniffer and JSLint</title><content type='html'>PHP_CodeSniffer has had &lt;a href=&quot;http://gregsherwood.blogspot.com/2008/03/phpcodesniffer-and-javascript-lint.html&quot;&gt;integration with JavaScript Lint&lt;/a&gt; for a while, but I recently found out that the excellent online JavaScript verifier, &lt;a href=&quot;http://www.jslint.com/&quot;&gt;JSLint&lt;/a&gt;, can be run from the command line using &lt;a href=&quot;http://www.mozilla.org/rhino/&quot;&gt;Rhino&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I&#39;ve just committed the JSLint sniff into the Squiz standard under the Debug category. The sniff requires you to have &lt;a href=&quot;http://www.jslint.com/rhino/index.html&quot;&gt;jslint.js&lt;/a&gt; on your server and rhino installed on the same machine as PHP_CodeSniffer and you need to tell PHP_CodeSniffer where to find it.&lt;br /&gt;&lt;pre&gt;$ phpcs --config-set jslint_path /path/to/jslint.js&lt;br /&gt;$ phpcs --config-set rhino_path /path/to/rhino&lt;br /&gt;$ phpcs --standard=squiz /path/to/file.js&lt;/pre&gt;Like JavaScript Lint, not all errors and warnings need fixing, so all messages reported by jslint.js are warnings within PHP_CodeSniffer and can be hidden easily.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/1166798262986709857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/1166798262986709857'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2008/11/phpcodesniffer-and-jslint.html' title='PHP_CodeSniffer and JSLint'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-8392021528339191212</id><published>2008-10-30T20:16:00.003+11:00</published><updated>2008-10-31T07:59:49.781+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Design"/><category scheme="http://www.blogger.com/atom/ns#" term="MySource Mini"/><title type='text'>Interface design; an interative process</title><content type='html'>I was looking back at some old mockups and screenshots of the MySource Mini today and it is really amazing to see how the product&#39;s interface has progressed over the last 12 months or so. It&#39;s interesting to see how elements of the design changed, and while not all these mockups were built, all contributed something to the design we have today.&lt;br /&gt;&lt;br /&gt;In this post, I&#39;m going to show you the mockups we produced of the Settings/Administration interface. This is where you configure things like designs and caching for individual assets and for the site as a whole.&lt;br /&gt;&lt;br /&gt;This first mockup was implemented in early 2007 and represents the first interface of the MySource Mini. We went for a desktop feel with large icons, but it gave us very little space to fit the actual editing interface. We still love large icons, and the concept of icons to represent different systems remains today.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgstDkAzq7ywvJtjfwkN7XmTQ9ZAoVgJG7IbD5d5g-Pg7FoI20wry2wnseA8ef4HB469Hvq8T8Tt2iC_eZSDLZGWmX71Ycz3Dhhn8E1Y72lX6RknOSPDWhONW6CXgVGc2-3ckMx9mArYqsL/s1600-h/screen1.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 250px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgstDkAzq7ywvJtjfwkN7XmTQ9ZAoVgJG7IbD5d5g-Pg7FoI20wry2wnseA8ef4HB469Hvq8T8Tt2iC_eZSDLZGWmX71Ycz3Dhhn8E1Y72lX6RknOSPDWhONW6CXgVGc2-3ckMx9mArYqsL/s320/screen1.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5262866839688276994&quot; /&gt;&lt;/a&gt;&lt;br /&gt;It was soon clear we needed more space for the editing interfaces, so we went full screen. That meant sacrificing the large icons we loved so much and moving to a toolbar along the top, a concept that remains today.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha_f5VtiZNsygjxBGHt8xlrzH2n20-QQV57Tfj4a8t92oL6VGRhxNKLTrZIn945yjMmgUH4mmxVVGJuw-dzBtLP0BS-LwD99Xp0ZT62Dk3y_G4YeRp0sCLen7fC-fIUy75EyyecyX3lDAP/s1600-h/screen2.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 250px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha_f5VtiZNsygjxBGHt8xlrzH2n20-QQV57Tfj4a8t92oL6VGRhxNKLTrZIn945yjMmgUH4mmxVVGJuw-dzBtLP0BS-LwD99Xp0ZT62Dk3y_G4YeRp0sCLen7fC-fIUy75EyyecyX3lDAP/s320/screen2.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5262867645771930226&quot; /&gt;&lt;/a&gt;&lt;br /&gt;The start of 2008 saw us bring on a dedicated interface designer who began reworking the main concepts of the interface. At the time, the inline content editing interface was progressing well and we wanted to bring the context you get from that interface into the settings screens. So we scaled back from full screen a little so you could see the page underneath.&lt;br /&gt;&lt;br /&gt;This mockup was done in January 2008 and implemented soon after. It was the first time we really tried to bring that context into the rest of the interface, which we have now done using thumbnails of the page. Notice the side menu, which is almost identical to the current multi-add wizard interface.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4cRrgmeGqzUSN31Y8aRo2aQHfaF13tMUGZs0cuw4hxb3oNwoFjm50DwQ3deMgmFTakFPNlTS7K3cHZURd6B2RlxbDiEk0Y_1pV2zgqzplK3pqWne-4PPFKhoZksaiZnGoy0_u902lq8hL/s1600-h/screen3.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 250px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4cRrgmeGqzUSN31Y8aRo2aQHfaF13tMUGZs0cuw4hxb3oNwoFjm50DwQ3deMgmFTakFPNlTS7K3cHZURd6B2RlxbDiEk0Y_1pV2zgqzplK3pqWne-4PPFKhoZksaiZnGoy0_u902lq8hL/s320/screen3.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5262868842108234066&quot; /&gt;&lt;/a&gt;&lt;br /&gt;One thing that always bothered us with this temporary interface was how dark it was. We didn&#39;t want to go for the desktop-inspired background image from the earlier mockups, but we wanted something lighter to contrast well with the black MySource Mini toolbar.&lt;br /&gt;&lt;br /&gt;This mockup was done in March 2008 and was not implemented. It was used in most of our mockups for quite a while and was growing on us. It was light and looked fresh. It didn&#39;t have large icons, but the chunky menu buttons made up for it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7K_ivhfGBc5yJp8-wHXjOc8czsrK2af1IV9KP3uKxZco2L4ylRzZeWWDSZM_ktdHWTuvWM957hgi1ljfIhsUQMimFdfeivewtc71m2tpFvW3U-7eiNDt1m6zrVNO4XCI7_ee5x9oqqOSC/s1600-h/screen4.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 250px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7K_ivhfGBc5yJp8-wHXjOc8czsrK2af1IV9KP3uKxZco2L4ylRzZeWWDSZM_ktdHWTuvWM957hgi1ljfIhsUQMimFdfeivewtc71m2tpFvW3U-7eiNDt1m6zrVNO4XCI7_ee5x9oqqOSC/s320/screen4.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5262868856703183730&quot; /&gt;&lt;/a&gt;&lt;br /&gt;There was one thing lacking though; context. We needed somewhere to put our thumbnail and asset information.&lt;br /&gt;&lt;br /&gt;This next mockup was very close to being the final interface. It was designed in May 2008 and implemented, although all the system icons were the same at the time. It is the first time the blue info box made an appearance, which gave us room to add a thumbnail and asset information.&lt;br /&gt;&lt;br /&gt;In this mockup, an administration screen is shown, so the blue box does not contain asset information, but you should be able to see how we jumped to our final interface design from here.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOZvCxoyIs9n5DO_86OIpZDI0O6Ty9j0H15fVZG9ms2subkoNOvax3jgOnU7WxdKz5kEte4wk0tHBRXjlToPr_MgJw_0gXVpqHrkxXwcxeodx4dD0ZQfzcfZ5szEHFyzCpJD3zEI8dEj1/s1600-h/screen5.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 250px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOZvCxoyIs9n5DO_86OIpZDI0O6Ty9j0H15fVZG9ms2subkoNOvax3jgOnU7WxdKz5kEte4wk0tHBRXjlToPr_MgJw_0gXVpqHrkxXwcxeodx4dD0ZQfzcfZ5szEHFyzCpJD3zEI8dEj1/s320/screen5.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5262868856385802402&quot; /&gt;&lt;/a&gt;&lt;br /&gt;In August 2008, we changed our minds again. The grey bar at the top was looking too much like a second toolbar and didn&#39;t feel polished enough. The whole interface was looking a bit too much like an old desktop application and we wanted something fresh.&lt;br /&gt;&lt;br /&gt;We decided to lighten everything up and add the large icons back in. We had heaps of room for the content editing area, so we could go very web 2.0 with large menus and bright colours.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF77MxHWafm7kYuIcB-1lCx3vK8Ith2cbPygt2Na8dp1OBUJVPlMxxRYYj9VD3-Bhptye0i9JPWGVI1OctwsS58b7RnHQWMvojQEb70pJbe7mXn7nQ3xuRR41BnRAZbvcyp7uNGBzRfNRR/s1600-h/screen6.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 250px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF77MxHWafm7kYuIcB-1lCx3vK8Ith2cbPygt2Na8dp1OBUJVPlMxxRYYj9VD3-Bhptye0i9JPWGVI1OctwsS58b7RnHQWMvojQEb70pJbe7mXn7nQ3xuRR41BnRAZbvcyp7uNGBzRfNRR/s320/screen6.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5262868861754151330&quot; /&gt;&lt;/a&gt;&lt;br /&gt;I&#39;ve promised the team that I wont change my mind again, so this &lt;em&gt;&lt;strong&gt;is&lt;/strong&gt;&lt;/em&gt; the interface we will be using in the final MySource Mini release. I&#39;m sure you&#39;ll agree it is a big improvement over our original interface and I hope you&#39;ve enjoyed this small insight into our interface design process.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/8392021528339191212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/8392021528339191212'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2008/10/interface-design-interative-process.html' title='Interface design; an interative process'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgstDkAzq7ywvJtjfwkN7XmTQ9ZAoVgJG7IbD5d5g-Pg7FoI20wry2wnseA8ef4HB469Hvq8T8Tt2iC_eZSDLZGWmX71Ycz3Dhhn8E1Y72lX6RknOSPDWhONW6CXgVGc2-3ckMx9mArYqsL/s72-c/screen1.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-7116543255445444540</id><published>2008-10-29T20:38:00.009+11:00</published><updated>2008-11-19T10:27:51.416+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MySource Mini"/><title type='text'>MySource Mini demonstration</title><content type='html'>&lt;div style=&quot;background-color: #FDF0C1; border: 1px solid rgb(192, 192, 192); margin: 5px 5px 20px 0px; padding: 6px; float: left;&quot;&gt;&lt;strong&gt;Update:&lt;/strong&gt; After being featured on &lt;a href=&quot;http://ajaxian.com/archives/mysource-mini-2008s-fluxiom&quot;&gt;Ajaxian&lt;/a&gt;, Vimeo decided they don&#39;t want to host my videos any more and deleted my account without warning. I&#39;ve re-posted the 30 min demo below, but be warned - it is 117MB!&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I recorded the 30 minute demonstration of the MySource Mini that I gave at the MySource Matrix International User Conference a couple of weeks ago. I&#39;ve posted the demonstration online so everyone can check out this new product from Squiz, even if you couldn&#39;t make it to beautiful Coogee for the conference this year.&lt;br /&gt;&lt;br /&gt;&lt;p style=&quot;text-align: center&quot;&gt;&lt;object width=&quot;400&quot; height=&quot;300&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0&quot;&gt;&lt;br /&gt;&lt;embed src=&quot;http://dl.getdropbox.com/u/217755/Flash/flvplayer.swf&quot; width=&quot;400&quot; height=&quot;300&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot; flashvars=&quot;&amp;file=http://dl.getdropbox.com/u/217755/MySource%20Mini/MySource%20Mini%20-%20MMIUC08.flv&amp;displayheight=300&amp;height=300&amp;image=http://dl.getdropbox.com/u/217755/MySource%20Mini/MySource-Mini%20-%20MMIUC08.jpg&amp;width=400&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/embed&gt;&lt;br /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://dl.getdropbox.com/u/217755/Flash/flvplayer.swf?displayheight=300&amp;file=http://dl.getdropbox.com/u/217755/MySource%20Mini/MySource%20Mini%20-%20MMIUC08.flv&amp;height=400&amp;image=http://dl.getdropbox.com/u/217755/MySource%20Mini/MySource-Mini%20-%20MMIUC08.jpg&amp;width=400&quot; /&gt;&lt;br /&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot; /&gt;&lt;br /&gt;&lt;/object&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/7116543255445444540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/7116543255445444540'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2008/10/mysource-mini-demonstration.html' title='MySource Mini demonstration'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-5340708494374097720</id><published>2008-10-28T16:37:00.003+11:00</published><updated>2008-10-28T16:51:56.150+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CSS"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP_CodeSniffer"/><title type='text'>PHP_CodeSniffer == CSS_CodeSniffer?</title><content type='html'>Earlier this year, I added support for &lt;a href=&quot;http://gregsherwood.blogspot.com/2008/02/phpcodesniffer-jscodesniffer.html&quot;&gt;tokenizing JavaScript files&lt;/a&gt; to PHP_CodeSniffer so developers could ensure their JS files also conform to their coding standards. With new products like the MySource Mini using such rich JS interfaces, PHP developers are having to move away from traditional server-side coding improve their client-side coding skills. Having JS support in PHP_CodeSniffer was a move to recognise this and we are now using it very successfully within Squiz to check for formatting and performance errors.&lt;br /&gt;&lt;br /&gt;The next natural step was to add support for checking CSS files. These same PHP developers are having to write large amounts of CSS these days and, in my experience, CSS files tend to be fairly messy when a large number of developers are working on them. To counter this, I&#39;ve added a basic CSS tokenizer to PHP_CodeSniffer and the Squiz coding standard now enforces formatting standards such as indentation and spacing around colons.&lt;br /&gt;&lt;br /&gt;Sniffs can be written to improve the performance of both PHP and JS code and the same is true for CSS files, although it works a little differently. One of the sniffs in the Squiz standard ensures that shorthand notation is used to define CSS colours where possible (e.g., #F0F instead of #FF00FF). This helps to ensure developers focus on keeping the size of CSS files down, even though we will certainly minimise the size before deployment. I think PHP_CodeSniffer helps to remind developers of these performance issues each time they run the checker, which can only be a good thing.&lt;br /&gt;&lt;br /&gt;I&#39;ve committed the CSS tokenizing code to CVS, so you can grab it directly from there or wait until the 1.2.0a1 release in the next few weeks.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/5340708494374097720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/5340708494374097720'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2008/10/phpcodesniffer-csscodesniffer.html' title='PHP_CodeSniffer == CSS_CodeSniffer?'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-2328338015301303915</id><published>2008-10-25T12:52:00.008+11:00</published><updated>2008-10-25T13:11:59.219+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MMIUC2008"/><category scheme="http://www.blogger.com/atom/ns#" term="MySource Mini"/><title type='text'>MySource Mini hands-on at the MMIUC 2008</title><content type='html'>The MySource Matrix International User Conference for 2008 finished up just over a week ago. On the final day, I gave a 30 min live demonstration of the MySource Mini, which was followed by an afternoon of hands-on demonstrations with conference attendees on three test systems we had made available at the conference.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0LdQlRRAZKhMP3KOQKDhS0DvpGi7Q92UKIcqW6ILWg4XzBUF3uvYljoIoG8ZjrK4454OebZ-ZLJET-2nnjJ6xpCIjyVSjOYmwc_0l4_fDvoebiiY6LUOpQlRlTfyWm043bgNH7ca4irlV/s1600-h/IMG_0942.JPG&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 214px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0LdQlRRAZKhMP3KOQKDhS0DvpGi7Q92UKIcqW6ILWg4XzBUF3uvYljoIoG8ZjrK4454OebZ-ZLJET-2nnjJ6xpCIjyVSjOYmwc_0l4_fDvoebiiY6LUOpQlRlTfyWm043bgNH7ca4irlV/s320/IMG_0942.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5260905148837140994&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhs-88MCCiNlLmLcq-7a_RdFBLQ6z3U12npjnH1007o1oZxe752vnGK3Rlc4mh3JLy_HCyboL_U8lKKmIZRw6d8RZUnzgkTXJckIEk2uZYHHYIn5hCpdCjboldI3F69e7wYyPKoKlolZ8Y3/s1600-h/IMG_0943.JPG&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 214px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhs-88MCCiNlLmLcq-7a_RdFBLQ6z3U12npjnH1007o1oZxe752vnGK3Rlc4mh3JLy_HCyboL_U8lKKmIZRw6d8RZUnzgkTXJckIEk2uZYHHYIn5hCpdCjboldI3F69e7wYyPKoKlolZ8Y3/s320/IMG_0943.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5260905425614763698&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We all use Macs for development, but rest assured that the MySource Mini will work on Windows and Linux as well!&lt;br /&gt;&lt;br /&gt;The whole MySource Mini team was available to walk people through the product and answer questions about both existing and upcoming features. The test systems were very popular and the developers kept busy throughout the afternoon.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZISsM7dHATAJ9FDrNKDe3-bmDpv_4u1v9cX6S8b4fZQNnubgrhzwldSjOrz2vGN1DQA9W03OKzHVx0tVdR5j18_EjNvYwQv9_i3sIOFeDSzt-Y-fpfLISy0SfOcYowqk1RlTHjT0K09bA/s1600-h/IMG_0956.JPG&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 214px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZISsM7dHATAJ9FDrNKDe3-bmDpv_4u1v9cX6S8b4fZQNnubgrhzwldSjOrz2vGN1DQA9W03OKzHVx0tVdR5j18_EjNvYwQv9_i3sIOFeDSzt-Y-fpfLISy0SfOcYowqk1RlTHjT0K09bA/s320/IMG_0956.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5260906606167569346&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkrU_nXB8-4MG002hGRujrWNDrW14H-LtEPDiGLu5ifTYwpmLEDXIIc0aZXskXLfuPyqt3TVRROUOprkZxKhwDdSejY1sceruYi8wrPZ62-7u5Z31xcHniL2HZaIFy8MEgMNmYLFANSVh1/s1600-h/IMG_0955.JPG&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 214px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkrU_nXB8-4MG002hGRujrWNDrW14H-LtEPDiGLu5ifTYwpmLEDXIIc0aZXskXLfuPyqt3TVRROUOprkZxKhwDdSejY1sceruYi8wrPZ62-7u5Z31xcHniL2HZaIFy8MEgMNmYLFANSVh1/s320/IMG_0955.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5260906732240712946&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic4JeWsu6uewfTEVX1mz7lewYpZConPX_PPuaXHdzUBKn30Nw5XtyukDGhlptaJSlz4bfKmn7G5m1yOkrCJGT1IBoMlg9-NJ4IrF37I8yGtst2aiUyZRWAon9r-qBJZGCJA7vWVGCOdwpW/s1600-h/IMG_0957.JPG&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 214px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic4JeWsu6uewfTEVX1mz7lewYpZConPX_PPuaXHdzUBKn30Nw5XtyukDGhlptaJSlz4bfKmn7G5m1yOkrCJGT1IBoMlg9-NJ4IrF37I8yGtst2aiUyZRWAon9r-qBJZGCJA7vWVGCOdwpW/s320/IMG_0957.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5260906902411692802&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Congratulations to the whole MySource Mini team for producing such an amazing product and for being such fantastic instructors on the day. The Mini was well received and plenty of people are looking forward to its release in March next year, so get back to work!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/2328338015301303915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/2328338015301303915'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2008/10/mysource-mini-hands-on-at-mmiuc-2008.html' title='MySource Mini hands-on at the MMIUC 2008'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0LdQlRRAZKhMP3KOQKDhS0DvpGi7Q92UKIcqW6ILWg4XzBUF3uvYljoIoG8ZjrK4454OebZ-ZLJET-2nnjJ6xpCIjyVSjOYmwc_0l4_fDvoebiiY6LUOpQlRlTfyWm043bgNH7ca4irlV/s72-c/IMG_0942.JPG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-4017381307889404810</id><published>2008-10-05T20:27:00.005+11:00</published><updated>2008-10-05T20:45:15.695+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MMIUC2008"/><category scheme="http://www.blogger.com/atom/ns#" term="MySource Mini"/><category scheme="http://www.blogger.com/atom/ns#" term="MySource4"/><title type='text'>MySource Mini at the MMIUC 2008</title><content type='html'>I&#39;ve been really quiet on this blog for a few months, and have even let some PHP_CodeSniffer bug reports go unfixed for several weeks. That&#39;s pretty unusual for me, but I&#39;ve been both sick and very focused on the MySource Mini that will be presented at the &lt;a href=&quot;http://www.squiz.net/news/MySource-Matrix-User-Conference&quot;&gt;MySource Matrix International User Conference 2008&lt;/a&gt; in less than 2 weeks!&lt;br /&gt;&lt;br /&gt;I can&#39;t say much about the Mini, but now that the &lt;a href=&quot;http://www.squiz.net/news/MySource-Matrix-User-Conference/agenda&quot;&gt;agenda&lt;/a&gt; has been posted, I can at least use the name and confirm it has something to do with MySource4, which I&#39;ve been babbling about on this blog for a while now.&lt;br /&gt;&lt;br /&gt;I&#39;ve gone a bit quiet about parts of MySource4 that we have been working on, but not because they are any less amazing than the features I have spoken about. Apart from our custom-built true inline WYSIWYG editor that I demonstrated last year, I&#39;ll be showing the caching system &lt;a href=&quot;http://gregsherwood.blogspot.com/2008/01/mysource4-caching-and-keywords-i-think.html&quot;&gt;I&#39;ve mentioned before&lt;/a&gt;, a versioning system to replace rollback that I&#39;ve had to stop myself blogging about so I don&#39;t give away its secrets, and the most amazing context sensitive help system I&#39;ve ever seen in any application. There will also be some systems available for conference attendees to play around with, and the whole MySource4 team (development, interface and documentation) will be there to answer all your questions.&lt;br /&gt;&lt;br /&gt;Want to come along? &lt;a href=&quot;http://www.hotelnetwork.com.au/conferences/conferences/squiz/registration&quot;&gt;Register here&lt;/a&gt;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/4017381307889404810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/4017381307889404810'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2008/10/mysource-mini-at-mmiuc-2008.html' title='MySource Mini at the MMIUC 2008'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-7903755109844215070</id><published>2008-10-05T20:06:00.006+11:00</published><updated>2008-10-05T20:23:45.869+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PHP_CodeSniffer"/><category scheme="http://www.blogger.com/atom/ns#" term="PHPUnit"/><category scheme="http://www.blogger.com/atom/ns#" term="Squiz"/><title type='text'>Sebastian Bergmann giving 3-day QA workshop in Sydney</title><content type='html'>Earlier in the year, Sebastian gave QA workshops in both Melbourne and Brisbane. He&#39;s heading back to Australia in December to run his 3-day QA workshop in Sydney.&lt;br /&gt;&lt;blockquote&gt;This 3-day workshop will introduce the attendees to writing unit tests for the backend and system tests for the frontend of a web application as well as managing the quality from development to deployment and maintainance using tools such as PHPUnit, Selenium RC, phpUnderControl, PHP_CodeSniffer, and PHP_Depend.&lt;/blockquote&gt;&lt;br /&gt;The workshop costs $1695 + GST and is running between Mon 8 Dec and Wed 10 Dec. You can read more about it at &lt;a href=&quot;http://sebastian-bergmann.de/archives/819-PHPUnit-Workshop-in-Sydney.html&quot;&gt;Sebastian&#39;s blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The cost of the workshop is minimal compared to the skills you will learn and the QA tools you will be introduced to (over 3 days remember!). I think it is so worthwhile that I want all the PHP developers at &lt;a href=&quot;http://www.squiz.net&quot;&gt;Squiz&lt;/a&gt; (some already familiar with PHPUnit and PHP_CodeSniffer) to attend. Now that &lt;em&gt;would&lt;/em&gt; really hurt the budget and our timelines, so I&#39;m hoping to get Sebastian in to give a shortend workshop at Squiz. He is available for custom in-house training if you are also interested. More details at &lt;a href=&quot;http://openquery.com.au/training/custom&quot;&gt;Open Query&lt;/a&gt;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/7903755109844215070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/7903755109844215070'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2008/10/sebastian-bergmann-giving-3-day-qa.html' title='Sebastian Bergmann giving 3-day QA workshop in Sydney'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-6580680843192156656</id><published>2008-08-02T14:09:00.005+10:00</published><updated>2008-08-02T14:30:00.885+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IP.Board"/><title type='text'>Unable to reset a member&#39;s password in IP.Board</title><content type='html'>I came across a strange problem with IP.Board today where I was unable to reset a user&#39;s password using the admin interface. I got the error message &quot;There was an error loading the user&#39;s account&quot;. A quick search didn&#39;t find anything useful, so this solution is both for those also suffering and for myself if it ever happens again.&lt;br /&gt;&lt;br /&gt;First, this appears to be caused by changing email addresses using the admin interface and also, based on some quick searching, appears to happen mostly to admin accounts.&lt;br /&gt;&lt;br /&gt;IP.Board member accounts are stored in the ipb_members tables. Passwords (MD5&#39;d) and the salt is stored in the ipb_members_converge table. This table contains a column called coverge_id, which appears to be the member&#39;s ID (ipb_members.id). The table also contains a column converge_email, which appears to be the member&#39;s email (ipb_members.email).&lt;br /&gt;&lt;br /&gt;For whatever reason, the email addresses can become out of sync. If this happens, changing passwords for the affected users produces the error &quot;There was an error loading the user&#39;s account&quot;.&lt;br /&gt;&lt;br /&gt;The solution is pretty easy; update ipb_members_converge.converge_email so that the email address for the user ID that is causing problems matches the email stored in ipb_members.email.&lt;br /&gt;&lt;br /&gt;For example, let ipb_members.email = admin@example.com for user ID 123. You may find that ipb_members_converge table lists the email as test@example.com for user ID 123, so run the following query to get them in sync:&lt;br /&gt;&lt;pre&gt;UPDATE ipb_members_converge&lt;br /&gt;SET converge_email = &#39;admin@example.com&#39;&lt;br /&gt;WHERE converge_id = &#39;123&#39;;&lt;/pre&gt;&lt;br /&gt;The IP.Board admin interface makes this pretty easy as you can execute DB queries directly from the interface using the SQL Toolbox (under the Admin tab). Very useful if you don&#39;t have access to the DB server from where you are.&lt;br /&gt;&lt;br /&gt;After running the query, reset the member&#39;s password as normal. If you had the same problem as me, you&#39;re done.&lt;br /&gt;&lt;br /&gt;You could run a query that will sync the emails for all accounts, but I don&#39;t know IP.Board well enough to recommend that, so I&#39;d have to recommend against it. This issue is obviously so rare that it shouldn&#39;t be much of a hassle to fix each account manually.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/6580680843192156656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/6580680843192156656'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2008/08/unable-to-reset-members-password-in.html' title='Unable to reset a member&#39;s password in IP.Board'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3241921104762993287.post-6734704369115791642</id><published>2008-07-17T16:05:00.009+10:00</published><updated>2008-12-12T04:58:43.846+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Firefox"/><category scheme="http://www.blogger.com/atom/ns#" term="MySource Matrix"/><title type='text'>Firefox 3 usage on the MySource Matrix site</title><content type='html'>Richard Hulse, New Media Manager at &lt;a href=&quot;http://www.radionz.co.nz/&quot;&gt;Radio New Zealand&lt;/a&gt; (and a MySource Matrix user) posted &lt;a href=&quot;http://richardhulse.blogspot.com/2008/07/some-interesting-statistics.html&quot;&gt;an interesting article&lt;/a&gt; today about the uptake of Firefox 3. The post has some graphs that clearly show a large shift to Firefox 3 for visitors to the Radio NZ website. That prompted me to check my own statistics for the &lt;a href=&quot;http://matrix.squiz.net/&quot;&gt;MySource Matrix website&lt;/a&gt;, which are very similar.&lt;br /&gt;&lt;br /&gt;Like Richard, I didn&#39;t see any noticeable difference in the number of users using Firefox, but there was a definite shift from Firefox 2 to Firefox 3 around the middle of June.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Visitors using Firefox&lt;/h4&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeRQ2naDHdMIJSTBXBQDco3MC7zFobJywS9Anc5luTHMYdYsCq6TWuD_CMWfRi39TeS4z48_MyiNZQo37GQtyg0TM8jKyIhp85s7CntX4G4lh0iWJebA1sawBhyphenhyphenBgNeeN4nP96qaOf3uTS/s1600-h/firefox.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeRQ2naDHdMIJSTBXBQDco3MC7zFobJywS9Anc5luTHMYdYsCq6TWuD_CMWfRi39TeS4z48_MyiNZQo37GQtyg0TM8jKyIhp85s7CntX4G4lh0iWJebA1sawBhyphenhyphenBgNeeN4nP96qaOf3uTS/s400/firefox.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5223866355929577826&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Visitors using Firefox 3&lt;/h4&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXPbPCwQ44AY6NzcMkPnIS1MixAJ92HjbhRgnlBeDG6TBnpAV4ase7ZpL_jmoB4STuBwgrNHNpPnoD1lIRbiBqBmMJYjS7zKnyOegAxJjTF3jdXYXZIZk4hCI0RuhuuVIa8Rlt6Q4XNTc5/s1600-h/firefox3.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXPbPCwQ44AY6NzcMkPnIS1MixAJ92HjbhRgnlBeDG6TBnpAV4ase7ZpL_jmoB4STuBwgrNHNpPnoD1lIRbiBqBmMJYjS7zKnyOegAxJjTF3jdXYXZIZk4hCI0RuhuuVIa8Rlt6Q4XNTc5/s400/firefox3.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5223866507143761666&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Visitors using Firefox 2&lt;/h4&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpv5itioXyXHYelTj1DE127woI6g2_oEpBz6oQO8HYzwsR1pTDiiL1yszXzyQbLkbyeuQifAZ0WBUb4LlawGXjCihTxrtQ9dzu_9isAF3I4N0fOUE3TBy9Nr_8_MZXoGXqhmyzF1p-jFXl/s1600-h/firefox2.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpv5itioXyXHYelTj1DE127woI6g2_oEpBz6oQO8HYzwsR1pTDiiL1yszXzyQbLkbyeuQifAZ0WBUb4LlawGXjCihTxrtQ9dzu_9isAF3I4N0fOUE3TBy9Nr_8_MZXoGXqhmyzF1p-jFXl/s400/firefox2.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5223866694010006210&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Firefox users certainly heard the call.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/6734704369115791642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3241921104762993287/posts/default/6734704369115791642'/><link rel='alternate' type='text/html' href='http://gregsherwood.blogspot.com/2008/07/firefox-3-usage-on-matrix-site.html' title='Firefox 3 usage on the MySource Matrix site'/><author><name>Greg Sherwood</name><uri>http://www.blogger.com/profile/11903564819503122634</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG4jUrhyLfm3gl5A_Jnko_GGtVITjl_fK-xJzWxWPbJgfNCWIYMcjAAJaBNgd02x9dZMUt2v0-2I637ty_myrwSqyiAETA6KaUmiq5TNoFk1SROMWYRpv7__9DXQU4S_o/s220/avatar.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeRQ2naDHdMIJSTBXBQDco3MC7zFobJywS9Anc5luTHMYdYsCq6TWuD_CMWfRi39TeS4z48_MyiNZQo37GQtyg0TM8jKyIhp85s7CntX4G4lh0iWJebA1sawBhyphenhyphenBgNeeN4nP96qaOf3uTS/s72-c/firefox.jpg" height="72" width="72"/></entry></feed>