<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>InternetSchminternet</title>
    <link>http://www.internetschminternet.com/</link>
    <description>Adventures in life..because it hurts..</description>
    <language>en-us</language>
    <item>
      <title>Advice: scaling to 1 Billion pages view per month</title>
      <description>Here is a great &lt;a href="http://blogs.zdnet.com/enterprisealley/?p=188" target="_blank" title="Scaling an application to 1 Billion page views per month"&gt;article&lt;/a&gt; describing how Jim Meyer, Manager of Linked In's Light Engineering Development scaled his facebook application, &lt;a href="http://apps.facebook.com/bumpersticker/" target="_blank" title="LinkedIn's facebook app - serving over 1 billion page views per month"&gt;Bumpersticker&lt;/a&gt;, to over 1 Billion page views per month.&lt;br /&gt; &lt;br /&gt; In a nutshell, his three design guidlines are :&lt;br /&gt; &lt;ul&gt;&lt;li&gt;Talking to spindles is bad - talking to file systems and databases has to be minimized&lt;/li&gt;&lt;li&gt;Dynamic content is your enemy. Anything you can turn into static, including periodic re-caching should be removed.&lt;/li&gt;&lt;li&gt;Push everything you possibly can to the client to reduce the amount of traffic going over the network no matter where the client is.&lt;/li&gt;&lt;/ul&gt;Thanks to the guys at &lt;a href="http://www.railsenvy.com" target="_blank" title="RailsEnvy - thanks for the podcast guys"&gt;RailsEnvy&lt;/a&gt; for the tip.&lt;br /&gt; </description>
      <author>Matt.stone</author>
      <pubDate>Wed, 09 Jul 2008 22:38:39 -0700</pubDate>
      <link>http://www.internetschminternet.com/posts/51-Advice-scaling-to-1-Billion-pages-view-per-month</link>
      <guid>http://www.internetschminternet.com/posts/51-Advice-scaling-to-1-Billion-pages-view-per-month</guid>
    </item>
    <item>
      <title>Building code quality into the culture of a development team. </title>
      <description>I like to build code quality in the culture of development team. Being proud of the code quality is something that I want my developers to aspire to. I actively manage towards this by focusing on shipping high quality production code; not on technical issues [I'm pretty agnostic when it comes to technology].&lt;p&gt;The three management tools I use to achieve this are:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Agile development methodologies&lt;/li&gt;&lt;li&gt;Building code quality into programmer KPIs&lt;/li&gt;&lt;li&gt;Make programmer KPI measurements public&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;Agile Development Methodologies&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;By this I mean:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Small milestones of production quality code &amp;amp; all stakeholders having visibility of project progress&lt;/li&gt;&lt;li&gt;Programmer commits own tests with code&lt;/li&gt;&lt;li&gt;At least a daily build, or preferably a build with every commit &amp;amp; the team is notified of a commit that breaks the build; ie: &lt;a href="http://cruisecontrol.sourceforge.net/" target="_blank" title="Cruisecontrol"&gt;cruisecontrol&lt;/a&gt;&amp;nbsp; &lt;/li&gt;&lt;li&gt;Daily team meetings [ie:&lt;a href="http://en.wikipedia.org/wiki/Scrum_(development)" target="_blank" title="Scrum Agile methodology"&gt;scrum&lt;/a&gt;] that update on progress&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stake holders should be able to see an up to date view of project progress &amp;amp; quality. Issues should be identified early &amp;amp; remedial action can be taken before a small issue becomes a large issue.&lt;/p&gt;&lt;p&gt;I like to have a stated code testing/quality assurance strategy. With Tickex, we had commercial pressures to ship code very fast, &amp;amp; change often so I settled up on the follow [its tailored for a Ruby on Rails project]:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Standardise environments [development, test, stage, production]. Developers can use their preferred tools, but commited code must work on the standardised environment.&lt;/li&gt;&lt;li&gt;Aim for 100% &lt;a href="http://rspec.info/" target="_blank" title="Rspec"&gt;Rspec&lt;/a&gt; Model coverage&lt;/li&gt;&lt;li&gt;&lt;a href="http://cruisecontrol.sourceforge.net/" target="_blank" title="Cruisecontrol by thoughworks"&gt;Cruisecontrol&lt;/a&gt; runs tests on every commit &amp;amp; notifies team if build is broken&lt;/li&gt;&lt;li&gt;Utilise &lt;a href="http://selenium.openqa.org/" target="_blank" title="Selenium userland testing by thoughtworks"&gt;Selenium&lt;/a&gt; for user land testing, rather than testing controller actions.&lt;/li&gt;&lt;li&gt;Performance testing using &lt;a href="http://code.whytheluckystiff.net/hpricot/" target="_blank" title="Hpricot - from _why - tastes just as good as chunky bacon"&gt;Hpricot&lt;/a&gt; &amp;amp; &lt;a href="http://selenium-grid.openqa.org/" target="_blank" title="Selenium Grid by ThoughtWorks - takes the drudgery out of userland testing"&gt;Selenium Grid&lt;/a&gt; -&amp;nbsp; - to script concurrent user sessions&lt;/li&gt;&lt;li&gt;Manual tests for muliple browsers [ok as long as the feature set is not massive]&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This is a balances providing the high level of testing coverage with the ability to rapidly turn around features. As a result of this, we have experienced zero downtime from code issues, and very few bugs have made it into production [&amp;amp; most of those have been specification issues, rather than code].&lt;br /&gt; &lt;/p&gt;&lt;strong&gt;Build Code Quality into Programmer KPIs&lt;/strong&gt;&lt;br /&gt;Every environment is different, but here are some guidelines. Each metric on its own is pretty much worthless, but the whole will build a picture.&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Quantative KPIs&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;lines of code &lt;/li&gt;&lt;li&gt;milestones met or features delivered&lt;/li&gt;&lt;li&gt;bugs in code&lt;/li&gt;&lt;li&gt;number of times commits break build&lt;/li&gt;&lt;/ul&gt;&lt;em&gt;Note:&lt;/em&gt; lines of code is a bit controversial as on its own its a pretty meaningless measure [a good programmer will do something in many lines less than a bad programmer, but will also complete more features]. I have a couple of MBA type CEO's who have really struggled with this. Patterns should be investigated though.&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Qualitative KPIs&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Peer reviews - both quality of code &amp;amp; as a team member&lt;/li&gt;&lt;li&gt;Customer/Stakeholder feedback - satisfaction with work&lt;/li&gt;&lt;li&gt;Test coverage of code&lt;/li&gt;&lt;li&gt;Team fit&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Make programmer KPI measurements public&lt;/strong&gt;&lt;br /&gt; Making these measure available public, on a wiki, &amp;amp; in regular team meetings is intended to build a team spirit. Peer pressure can be a better motivator than agressive management.&lt;br /&gt; &lt;br /&gt;I don't favour an agressive leadership style. Fear is one motivitor,but I don't believe it leads to habits being formed &amp;amp; long term behaviourial change. I think that respect of a manager &amp;amp; peer pressure lead to long lasting habits being formed. This is not to say be a push over, think hard but fair; If someone is not performing, I put the ownus upon the team to sort the issue quickly, then act accordingly and decisively if needed. The message will be seen that code quality cannot be compromised. &lt;/p&gt;&lt;p&gt;This philosophy is independent of team size or technology. Whether a small ruby/php team or a large .Net or Java team it does not matter to me. What matters is predictably shipping high quality production code that meets customer requirements.&lt;br /&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>Matt.stone</author>
      <pubDate>Wed, 09 Jul 2008 22:05:29 -0700</pubDate>
      <link>http://www.internetschminternet.com/posts/50-Building-code-quality-into-the-culture-of-a-development-team-</link>
      <guid>http://www.internetschminternet.com/posts/50-Building-code-quality-into-the-culture-of-a-development-team-</guid>
    </item>
    <item>
      <title>Google now hosting Ajax libraries - w00t!</title>
      <description>&lt;p&gt;Google's new Ajax libaries API is a great way to help offload bandwdith &amp;amp; speed up your sites performance. Google hosts the most popular open source Javascript libraries on their content distribution network architecture. By using the &lt;a href="http://code.google.com/apis/ajax/documentation/"&gt;Google AJAX API Loader's&lt;/a&gt; google.load() method you can access:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/ajaxlibs/documentation/index.html#jquery"&gt;jQuery&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/ajaxlibs/documentation/index.html#prototype"&gt;prototype&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/ajaxlibs/documentation/index.html#script_aculo_us"&gt;script.aculo.us&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/ajaxlibs/documentation/index.html#mootools"&gt;MooTools&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/ajaxlibs/documentation/index.html#dojo"&gt;dojo&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;   &lt;a href="http://www.strictlyuntyped.com/2008/06/using-google-ajax-libraries-api-with.html" target="_blank"&gt;&lt;span style="font-family: verdana"&gt;&lt;/span&gt;Here&lt;/a&gt; is a great article describing how to use this in Rails, although it will soon be in plugin form I believe.</description>
      <author>Matt.stone</author>
      <pubDate>Mon, 07 Jul 2008 06:52:38 -0700</pubDate>
      <link>http://www.internetschminternet.com/posts/49-Google-now-hosting-Ajax-libraries-w-t-</link>
      <guid>http://www.internetschminternet.com/posts/49-Google-now-hosting-Ajax-libraries-w-t-</guid>
    </item>
    <item>
      <title>Your chance to influence Google's web spam team</title>
      <description>&lt;p&gt;&lt;a href="http://www.mattcutts.com/blog/suggest-what-webspam-should-work-on-next/" target="_blank"&gt;Matt Cutts&lt;/a&gt; has a thread on his blog asking for what Google's web spam team should work on next. It makes for very interesting reading.&lt;br /&gt; &lt;br /&gt; Topics of note:&lt;br /&gt; - Adwords &amp;amp; Blogspot spam will probably soon be targeted&lt;br /&gt; - Link farms and paid links are still working for people &amp;amp; Google can't seem to get onto of this.&lt;/p&gt;&lt;p&gt;Hopefully Google &amp;amp; Matt Cutts will start communicating back to the community a little better after this process. &lt;br /&gt; &lt;/p&gt;</description>
      <author>Matt.stone</author>
      <pubDate>Mon, 07 Jul 2008 06:38:07 -0700</pubDate>
      <link>http://www.internetschminternet.com/posts/48-Your-chance-to-influence-Google-s-web-spam-team</link>
      <guid>http://www.internetschminternet.com/posts/48-Your-chance-to-influence-Google-s-web-spam-team</guid>
    </item>
    <item>
      <title>Web designers rejoice!</title>
      <description>&lt;p&gt;Google can now index &lt;a href="http://googlewebmastercentral.blogspot.com/2008/06/improved-flash-indexing.html" target="_blank" title="Google indexes flash."&gt;flash&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Well, kind of, sort of.. but its definitely better than it was. &lt;/p&gt; &lt;p&gt;Binary content such as images &amp;amp; FLV's will probably always remain invisible to the google spiders.&lt;/p&gt; &lt;p&gt;I think the real bummer is that if I build anything with the two most interesting client side technologies, flash &amp;amp; javascript - it won't get spidered &amp;amp; I won't get search engine traffic.&lt;/p&gt;</description>
      <author>Matt.stone</author>
      <pubDate>Mon, 07 Jul 2008 06:12:13 -0700</pubDate>
      <link>http://www.internetschminternet.com/posts/47-Web-designers-rejoice-</link>
      <guid>http://www.internetschminternet.com/posts/47-Web-designers-rejoice-</guid>
    </item>
    <item>
      <title>HTTP Basic Authentication</title>
      <description>&lt;p&gt;At &lt;a href="http://www.tickex.com" target="_blank" title="Tickex - the ticket search engine"&gt;Tickex&lt;/a&gt; we have an API that is accessed via HTTP Basic Authentication. &lt;/p&gt;&lt;p&gt;Here are a few links for developers to read a little bit more about this.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.ie-soft.de/blog/PermaLink,guid,11609e8d-e0fc-41f4-83a2-6e8ea46339f6.aspx" target="_blank" title="basic authentication c# dotnet"&gt;c# dotnet&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;a href="http://www.java-tips.org/other-api-tips/httpclient/how-to-use-basic-authentication.html" target="_blank" title="http basic authentication java"&gt;java &lt;/a&gt;&lt;br /&gt;ruby - it's just one line using open_uri - open(&amp;quot;http://www.example.com&amp;quot;, :auth_info =&amp;gt; [user, pwd]) do |f|&lt;br /&gt;&lt;a href="http://www.php.net/features.http-auth" target="_blank" title="http basic authentication dotnet"&gt;PHP &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ruby is awesome for this kind of stuff - a bit high in CPU usage, but your done in a few minutes.&lt;/p&gt;</description>
      <author>Matt.stone</author>
      <pubDate>Wed, 25 Jun 2008 01:19:52 -0700</pubDate>
      <link>http://www.internetschminternet.com/posts/46-HTTP-Basic-Authentication</link>
      <guid>http://www.internetschminternet.com/posts/46-HTTP-Basic-Authentication</guid>
    </item>
    <item>
      <title>IE &amp; XML MIME Type</title>
      <description>It's been awhile since I used IE &amp;amp; had forgotten that it does not handle MIME Type XML very well. IE will treat an XML file as file to be downloaded; which if fine as you can save the file &amp;amp; look at in in notepad or a programming editor. It did cause me some confusion as I told it a client that it would render fine in their browser :-(&lt;br /&gt;&lt;br /&gt;Try this url in Firefox, Safari, or Opera &amp;amp; they will actually render the data - Firefox is best as it keeps the XML formatting.&lt;br /&gt;&lt;br /&gt;</description>
      <author>Matt.stone</author>
      <pubDate>Wed, 25 Jun 2008 01:15:31 -0700</pubDate>
      <link>http://www.internetschminternet.com/posts/45-IE-XML-MIME-Type</link>
      <guid>http://www.internetschminternet.com/posts/45-IE-XML-MIME-Type</guid>
    </item>
    <item>
      <title>Google appengine fetch basic authentication</title>
      <description>&lt;p&gt;Google's documentation for the appengine is a bit basic for those not to familiar with Python, like me.&lt;/p&gt;&lt;p&gt;If your building a mashup, &amp;nbsp;your going to want to use the fetch routine to pull down data from a web service. This is one of those vaguely documented features.&lt;/p&gt;&lt;p&gt;Here is how it's done.&amp;nbsp;&lt;/p&gt;&lt;p&gt;import base64&lt;br /&gt;from google.appengine.api import urlfetch&lt;/p&gt;&lt;p&gt;url = &amp;quot;www.target_webservice.com&amp;quot;&lt;br /&gt;username = &amp;quot;your_username&amp;quot;&lt;br /&gt;password = &amp;quot;your_password&amp;quot;&amp;nbsp;&lt;br /&gt;base64string = base64.encodestring('%s:%s' % (username, password)) &lt;br /&gt;headers      = {'Authorization': &amp;quot;Basic %s&amp;quot; % base64string} &lt;br /&gt;result       = urlfetch.fetch(url, headers=headers)&lt;/p&gt;&lt;p&gt;if result.status_code == 200:&lt;br /&gt;&amp;nbsp;all is good&lt;br /&gt;else:&lt;br /&gt;&amp;nbsp;something went wrong&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>Matt.stone</author>
      <pubDate>Fri, 20 Jun 2008 07:33:10 -0700</pubDate>
      <link>http://www.internetschminternet.com/posts/44-Google-appengine-fetch-basic-authentication</link>
      <guid>http://www.internetschminternet.com/posts/44-Google-appengine-fetch-basic-authentication</guid>
    </item>
    <item>
      <title>Why are there no rails CMS like Joomla?</title>
      <description>&lt;p&gt;If you compare the open source Content Management Systems available in &lt;a href="http://wiki.rubyonrails.org/rails/pages/Ruby+on+Rails+based+CMS " target="_blank" title="Rails Content Management Systems"&gt;rails&lt;/a&gt;, with those availble in PHP, Java, Python [ie: Django], and even dotnet, I think that you'll be disappointed by the feature sets of the rails&amp;nbsp;&lt;br /&gt;software. &lt;/p&gt;&lt;p&gt;Although &lt;a href="http://lovdbyless.com/" target="_blank" title="lovdbyless.com"&gt;lovdbyless&lt;/a&gt; &amp;amp; the &lt;a href="http://missingmethod.brunobornsztein.com/projects/community_engine/" target="_blank" title="The community engine plugin"&gt;community engine&lt;/a&gt; plugin, whilst not strictly being CMS's provide a social network/blog straight out of the box with a feature set that exceeds the PHP CMS's - for the social networking side of things.&amp;nbsp;&lt;/p&gt;&lt;p&gt;This is not such a big surprise. Firstly the majority of the open source CMS's [ie: Joomla &amp;amp; Django] are quite mature compared to the rails options. Secondly, and much more importantly [having battled with Joomla quite a bit] .. I think the Rails way would be to build it yourself.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://railsforum.com/viewtopic.php?id=14216" target="_blank" title="Tutorial on Restful Authentication"&gt;Restful authentication&lt;/a&gt;, Restful scaffolding, layouts, plugins, &amp;amp; the mentioned above make it possible to build something quite quickly.&lt;br /&gt;&lt;br /&gt;Building it yourself means your not constrained by what someone else thinks you needs. The flipside is you need to have the chops to develop what you want. Just as importantly, you need to know what you want.&lt;br /&gt;&lt;br /&gt;On the ruby on rails home page there is a &lt;a href="http://www.rubyonrails.org/screencasts" target="_blank" title="Rails screencasts"&gt;screencast&lt;/a&gt; of someone building a blog in 15 minutes. Its not very pretty &amp;amp; its not something I would ever put into production use, but you get the idea of rapid development.&lt;/p&gt;</description>
      <author>Matt.stone</author>
      <pubDate>Fri, 20 Jun 2008 01:44:27 -0700</pubDate>
      <link>http://www.internetschminternet.com/posts/43-Why-are-there-no-rails-CMS-like-Joomla-</link>
      <guid>http://www.internetschminternet.com/posts/43-Why-are-there-no-rails-CMS-like-Joomla-</guid>
    </item>
    <item>
      <title>rake &amp; the test database</title>
      <description>&lt;p&gt;Gentle reminder:&lt;/p&gt;&lt;p&gt; Never, ever point your test environment at your production db.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Here are the comments from database.yml&lt;/p&gt;&lt;p&gt;# Warning: The database defined as 'test' will be erased and&lt;br /&gt;# re-generated from your development database when you run 'rake'.&lt;br /&gt;# Do not set this db to the same as development or production.&lt;/p&gt;&lt;p&gt;enough said.&amp;nbsp;&lt;/p&gt;</description>
      <author>Matt.stone</author>
      <pubDate>Fri, 20 Jun 2008 01:26:50 -0700</pubDate>
      <link>http://www.internetschminternet.com/posts/42-rake-the-test-database</link>
      <guid>http://www.internetschminternet.com/posts/42-rake-the-test-database</guid>
    </item>
  </channel>
</rss>
