<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tony's Place &#187; Tony Primerano</title>
	<atom:link href="http://www.tonycode.com/blog/archives/author/admin/feed" rel="self" type="application/rss+xml" />
	<link>http://www.tonycode.com/blog</link>
	<description>Random thoughts</description>
	<lastBuildDate>Tue, 23 Feb 2010 01:41:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>My Wordpress Notes</title>
		<link>http://www.tonycode.com/blog/archives/179</link>
		<comments>http://www.tonycode.com/blog/archives/179#comments</comments>
		<pubDate>Tue, 23 Feb 2010 01:41:32 +0000</pubDate>
		<dc:creator>Tony Primerano</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.tonycode.com/blog/?p=179</guid>
		<description><![CDATA[While I&#8217;ve been using Wordpress for my blog for over 5 years I dig into the internals so rarely that I often forget some of the cool things I&#8217;ve learned and done.   In addition to my blog I&#8217;ve used it more like a CMS system where there were only pages and no posts, [...]]]></description>
			<content:encoded><![CDATA[<p>While I&#8217;ve been using Wordpress for my blog for over 5 years I dig into the internals so rarely that I often forget some of the cool things I&#8217;ve learned and done.   In addition to my blog I&#8217;ve used it more like a CMS system where there were only pages and no posts, in this case the site used a static front page.  I haven&#8217;t written any themes from scratch but I&#8217;m pretty comfortable hacking other people&#8217;s themes and adding new features.</p>
<p>I should probably do this on my wiki but I&#8217;m going to try putting some useful notes here.</p>
<h2>Viewing database queries</h2>
<p>Recently I tried out a calendar plugin that allowed you to enter and display future events.  For some reason it only let you show events 99 days in the future. I hacked the code to let me use 3 digits and it took forever to load my events so I added the following to the bottom of my footer.php (before &lt;/body&gt;)</p>
<pre>&lt;?php
if (current_user_can('administrator')){
 global $wpdb;
 echo "&lt;pre&gt;";
 print_r($wpdb-&gt;queries);
 echo "&lt;/pre&gt;";
}
?&gt;</pre>
<p>This dumps all database queries that are made to the bottom of the page.  Turned out that the plugin was querying the database once for each date in the future.  So when I set it to 200 it was making over 200 queries.  Rather than figure out why it was coded tis way I switched to using <a href="http://wordpress.org/extend/plugins/the-events-calendar/" target="_blank">The Events Calendar</a> Plugin.  It lets you specify if a post is an event and then you can add details.  It works well.</p>
<h2>Header and Footer snippets</h2>
<p>I had an application that I wanted to use the header and footer from a live wordpress blog.  Any time the blog header/footer was updated the application would update too.  The idea here is the wordpress and application maintain the same look and feel and  navigation.</p>
<p>To do this I created a header.php and footer.php file in my wordpress root directory (where wp-config.php is).  The files started with</p>
<pre>&lt;?php
require('./wp-blog-header.php');
?&gt;
</pre>
<p>And then I stole code from the theme header.php and footer.php files to build the code snippets needed for the header and footer for my application.  I then did server side pulls of these live files, cached them and displayed them as my application header and footer.</p>
<p>I guess instead of copying the code I should try to factor out the common code between the theme files and these files so I don&#8217;t repeat it.  Has anyone done this?  I haven&#8217;t tried it yet.</p>
<h2>No HTTPS?  Use OpenId</h2>
<p>I hate sending passwords in the clear but often the cost of SSL is more than the cost of hosting your site so we just do without.  Personally I always link my openId to my main account and use that to sign in.  My assumption is this is much more secure than sending credentials in the clear.  I use the <a href="http://wordpress.org/extend/plugins/openid/" target="_blank">OpenID</a> plugin for this.  I&#8217;m happy that Google now has OpenId support via their profiles.</p>
<h2>Caching</h2>
<p><strong>DB Cache Reloaded or WP Super Cache?</strong></p>
<p>I&#8217;ve used both although there are times when I think a database query is faster than building all these local files.  For low traffic sites does the cache help or hurt?  I don&#8217;t have any stats here.  Just thinking out loud.  <img src='http://www.tonycode.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h2><strong>Broken Link Checker</strong></h2>
<p>Some sites have a lot of links.  This plugin lets you know when you&#8217;re pointing to a dead end.  Very handy.  <a href="http://wordpress.org/extend/plugins/broken-link-checker/">http://wordpress.org/extend/plugins/broken-link-checker/</a></p>
<h2>Akismet</h2>
<p>Install this or spend all day deleting spam comments.</p>
<h2>Backups</h2>
<p>Moving my homeowners association web site from static files to wordpress allowed us to have multiple editors but it makes backing up the system much more difficult.  Before the site consisted of about 80 files.   Now there is a database and many more things can go wrong.   I had downloaded a wordpress backup plugin a few months ago but it wasn&#8217;t ready for prime time.   At the moment my backup consists of daily mysqldumps via cron that reside with my wordpress installation.  I then rsync that to my local machine (the wordpress install with db backups).   It&#8217;s not perfect but it works for now. I guess I could share these scripts in another post.</p>
<h2>One more thing</h2>
<p>I forgot what I was going to say,  maybe it will come to me later tonight.   This is why I should have done this on the wiki.  <img src='http://www.tonycode.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />   I hope someone finds this useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tonycode.com/blog/archives/179/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Snow removal in Montgomery County Maryland</title>
		<link>http://www.tonycode.com/blog/archives/150</link>
		<comments>http://www.tonycode.com/blog/archives/150#comments</comments>
		<pubDate>Sat, 19 Dec 2009 17:36:14 +0000</pubDate>
		<dc:creator>Tony Primerano</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[snowstorm]]></category>

		<guid isPermaLink="false">http://www.tonycode.com/blog/?p=150</guid>
		<description><![CDATA[Back in February 2003 we got about 2 feet of snow in Montgomery County Maryland.   The snow plows completely ignored the side streets and focused on the primary roads.
The result?   3 days after the storm my street looked like this.

When the small plows finally came they were unable to deal with the heavy/wet snow so [...]]]></description>
			<content:encoded><![CDATA[<p>Back in February 2003 we got about 2 feet of snow in Montgomery County Maryland.   The snow plows completely ignored the side streets and focused on the primary roads.</p>
<p>The result?   3 days after the storm my street looked like this.</p>
<p><a rel="attachment wp-att-151" href="http://www.tonycode.com/blog/archives/150/snowedin"><img class="size-full wp-image-151 alignnone" title="3 days after the storm" src="http://www.tonycode.com/blog/wp-content/uploads/2009/12/snowedin.jpg" alt="3 days after the storm" width="465" height="312" /></a></p>
<p>When the small plows finally came they were unable to deal with the heavy/wet snow so it took them a while to clear the streets.</p>
<p>I hope this doesn&#8217;t happen again.  It&#8217;s not like I live in the middle of nowhere.  300 ft up my street is 7 Locks Road which was kept clear.  Unfortunately,  &#8220;up&#8221; is the operative word here and no one was able to escape before the plows came.</p>
<p>I&#8217;m still hoping FedEx makes it today,  but the mailman got stuck a few hours ago so I&#8217;m not counting on it.  <img src='http://www.tonycode.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />    I did make the mailman&#8217;s day by helping him get out.</p>
<h2> Update </h2>
<p>I&#8217;m happy to report that my street was plowed around 4PM on the 20th so we were snowed in for less than 48 hours.   </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tonycode.com/blog/archives/150/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>My experience with Rackspace Cloud Sites</title>
		<link>http://www.tonycode.com/blog/archives/133</link>
		<comments>http://www.tonycode.com/blog/archives/133#comments</comments>
		<pubDate>Wed, 04 Nov 2009 18:17:34 +0000</pubDate>
		<dc:creator>Tony Primerano</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[rackspace]]></category>

		<guid isPermaLink="false">http://www.tonycode.com/blog/?p=133</guid>
		<description><![CDATA[I&#8217;ve been using Rackspace&#8217;s Cloud Servers for months now and I thought moving some of our standard PHP apps (like wordpress) to Cloud Sites would save me some time as a sysadmin/developer.  I also figured I would setup a database there and use it for my Rails application that runs on Cloud servers (instead of [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using Rackspace&#8217;s Cloud Servers for months now and I thought moving some of our standard PHP apps (like wordpress) to Cloud Sites would save me some time as a sysadmin/developer.  I also figured I would setup a database there and use it for my Rails application that runs on Cloud servers (instead of building my own or using Amazon&#8217;s RDS).</p>
<p>I&#8217;m sorry to say that after a few days of working with Cloud Sites, I think managing the sites myself on Cloud Servers would be easier.   Fortunately, many of the problems I am having can be easily fixed.</p>
<h2>My issues</h2>
<p>1) No rsync or scp access.  Installing a wordpress site via FTP or Rackspaces file manager was just plain painful.  The file manager didn&#8217;t allow me to move files and it always extracted zip files to the root directory.  Maybe it works correctly on IE?   I only run linux so I have no way of knowing.</p>
<p>2) No easy way to do backups.   Cloud Sites allow you to run cron jobs but the example backups build tarballs on the same host that the site is running on.  When I saw they had ruby as a cron shell option I assumed they had the CloudFiles gem installed,  but they didn&#8217;t.  I want my backups off moved off the host.  I don&#8217;t want to log into my account and download them manually.</p>
<p>3) No access to database binary logs.  I like to take a snapshot every 15 minutes or so in case I lose my database but this is not an option with the cloudsites database.  You could do a mysql dump from another host but you probably don&#8217;t want to do this every 15 minutes.</p>
<p>4) For my Cloud Server rails app there was no LAN address to access my Cloud Site database so all my queries incurred bandwidth charges.</p>
<h2>Feature Requests (easy to hard)</h2>
<p>1) Give people a cron job (or simple backup tab like cloud servers has) that can be used to dump their database daily to Cloud Files.  Its a win for everyone.  The user gets automated backup and you get more Cloud Files revenue.   Here is a script I run from a Cloud Server to back up my Cloud Site database nightly (I can not run it as a Cloud Site job as the CloudFiles gem is not installed on the hosts..  as i mentioned above).</p>
<pre>def run(command)
  result = system(command)
  raise("error, process exited with status #{$?.exitstatus}") unless result
end

cf = CloudFiles::Connection.new(@account_name, @cloud_key)
container = cf.container(@directory_name)
cmd = "mysqldump -C --opt -h #{@mysql_host} -u#{@mysql_user}  "
cmd += " -p'#{@mysql_password}'" unless @mysql_password.nil?
cmd += " #{@mysql_database} | gzip &gt; #{@backup_directory}#{@db_file}"
run(cmd)
t = container.create_object(@db_file)
t.load_from_filename "#{@backup_directory}#{@db_file}"</pre>
<p>2) Advertise the LAN address of the Database Hosts&#8230;  of course the address given now is probably a switch that hits several DB machines.</p>
<p>3) Fix the File Manager.   Maybe it&#8217;s just me but on Firefox/Linux moving files doesn&#8217;t work.  A crippled version of rsync may also be nice.  I suspect there are security issues here but shell access sure would be nice.</p>
<p>4) This is probably hard but it would be nice if I could get access to the MySQL binary logs.</p>
<p>Thanks for listening.  <img src='http://www.tonycode.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tonycode.com/blog/archives/133/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Why I chose The Rackspace Cloud over AWS</title>
		<link>http://www.tonycode.com/blog/archives/122</link>
		<comments>http://www.tonycode.com/blog/archives/122#comments</comments>
		<pubDate>Thu, 03 Sep 2009 13:05:40 +0000</pubDate>
		<dc:creator>Tony Primerano</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[rackspace]]></category>

		<guid isPermaLink="false">http://www.tonycode.com/blog/?p=122</guid>
		<description><![CDATA[Last October at BarCamp DC 2 I ran a session called  “To Cloud or Not? AWS, EC2, S3 or build your own“.  Unfortunately the barcamp wiki died and my notes are gone but at the time it seemed that everyone loved Amazon&#8217;s services.   I tried using EC2 in April and while the ablity to select [...]]]></description>
			<content:encoded><![CDATA[<p>Last October at BarCamp DC 2 I ran a session called  <a title="To Cloud or Not? AWS, EC2, S3" href="http://www.tonycode.com/blog/archives/80" target="_blank">“To Cloud or Not? AWS, EC2, S3 or build your own</a>“.  Unfortunately the barcamp wiki died and my notes are gone but at the time it seemed that everyone loved Amazon&#8217;s services.   I tried using EC2 in April and while the ablity to select from several pre-configured AMIs was nice, building your own AMI should have been easier.  I wanted to configure my machine and then push a button to have my image created.   With Amazon you needed to install tools and go through several steps to create an image.</p>
<p>Then I found Slicehost.  It was owned by Rackspace and had servers for as little as $20/month (for a 256MB instance).   A few weeks later I stumbled on Mosso, also owned by Rackspace and it had servers for about $11/month (plus bandwidth).   Since my applications were using very little bandwidth, I moved to Mosso which is now called <a href="http://www.rackspacecloud.com/" target="_blank">The Rackspace Cloud</a>.   With the Rackspace offerings you install your operating system image, <a href="http://cloudservers.mosso.com/index.php/List_of_Articles#CentOS" target="_blank">configure it</a> and then, from their control panel you can then back it up with 1 click.  You can also schedule backups.   This was so much easier than EC2.</p>
<p>Then there is the pricing.  Amazon&#8217;s small instance is a big vitrual machine and at $0.10/hour it runs around $70/month (i think it was 0.12/hour when I 1st started using it).    This is probably a good price if you need that much horsepower.    What could you possibly run from a 256MB instance anyway?  Here&#8217;s what I am running.</p>
<ul>
<li>A full rails app using Apache/Passenger and MySql (I had to remove several unused modules from apache config and my database is small at the moment)</li>
<li>Apache PHP &#8212; I don&#8217;t have a database here but I suspect there is room</li>
</ul>
<p>I suspect a 512MB instance a safe bet for most applications and I will lilely upgrade as my traffic and database size increases.   Depending on the situation, I may just spin up more instances of the same server as redunancy is a good thing.   Sure I could run everything on 1 AWS instance but if it dies I&#8217;m really SOL.</p>
<p>If you ever need a bigger slice you can upgrade in the control panel with 1 click.  All your configurations and IP address are kept the same. I usually make a backup (1 click) before doing this just in case something bad happens.</p>
<p>Rackspace is still making improvements to their APIs and Image Management so while they don&#8217;t offer as many services as Amazon, they have offered all important features to make developer&#8217;s lives easier, IMO.</p>
<p>For the record, I actually backup my Rackspace Databases to Amazon&#8217;s S3, I feel better knowing my backups are in a different datacenter.  <img src='http://www.tonycode.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>If you sign up (and found this post helpful) please use my referral code when creating your account.  It is REF-TONYCODE</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tonycode.com/blog/archives/122/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>An outsider&#8217;s take on Government 2.0 Camp</title>
		<link>http://www.tonycode.com/blog/archives/112</link>
		<comments>http://www.tonycode.com/blog/archives/112#comments</comments>
		<pubDate>Sun, 29 Mar 2009 23:30:33 +0000</pubDate>
		<dc:creator>Tony Primerano</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[gov20camp]]></category>

		<guid isPermaLink="false">http://www.tonycode.com/blog/?p=112</guid>
		<description><![CDATA[I&#8217;ve lived just outside of DC for 16 years now and having never worked for the government, I find it a complete mystery.  This is one of the reasons I took a vacation day from work on Friday and spent most of Saturday at Government 2.0 Camp.   The other reason?  Hope that government will [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve lived just outside of DC for 16 years now and having never worked for the government, I find it a complete mystery.  This is one of the reasons I took a vacation day from work on Friday and spent most of Saturday at <a href="http://gov20camp.eventbrite.com/" target="_blank">Government 2.0 Camp</a>.   The other reason?  Hope that government will start doing more interesting work in the web space.    DC has a growing tech community but most of the interesting work is being done outside of the Federal Government space.</p>
<p>Just drop in on a <a href="http://techcocktail.com/" target="_blank">Tech Cocktail</a> or <a href="http://barcampdc.org/" target="_blank">BarCamp</a> and you&#8217;ll find some of DC and Baltimore&#8217;s brightest.  <a href="http://www.istrategylabs.com/" target="_blank">Peter Corbett</a> helped to bring DC&#8217;s old and new tech communities together with the <a href="http://blog.washingtonpost.com/washbizblog/2008/07/the_twin_tech_towns_come_toget.html" target="_blank">Twin Tech</a> events and Government 2.0 Camp went a step further and brought Government employees into the fold.   There are lots of great notes about the event on the <a href="http://www.government20club.org/" target="_blank">Government 2.0 Club</a> site so I won&#8217;t repeat them here.</p>
<p>As a Software Engineer I was encouraged by the technology progress many agencies are making but since this wasn&#8217;t a tech conference I left feeling a bit unfulfilled.  At BarCamp we&#8217;re often hacking things together and discussing implementations and APIs.    There were several good discussions, but some sessions were more like marketing pitches and others attempted to push certain agendas.   I guess this is normal in the government space.</p>
<p>One sad part of this conference was the Saturday attendance.  Most unconferences I have attended happened on the weekend.  People attend because they were passionate about the topic of the conference.   This conference started on a Friday and the government presence on Saturday was greatly diminished.   Most of the government people I talked to on Saturday were from out of town.  <span style="text-decoration: line-through;">Many locals skipped out since they weren&#8217;t on the clock.</span> (see comments regarding strike through)  This (The low attendance) left a bad taste in my mouth but we still discussed setting up another conference to help non-profits and agencies that need tech help  done for free.</p>
<p>Our Government servants want us to contribute for free.  There was even a session on Friday called <a title="Getting People to do Stuff for Free" rel="bookmark" href="http://www.government20club.org/2009/03/getting-people-to-do-stuff-for-free/" target="_blank">Getting People to do Stuff for Free</a>.  I&#8217;m all for giving back, but come on people!  Government employees are already stereotyped as lazy, throw us a bone and show up on Saturday next time!</p>
<p>That said there were some great local folks there on Saturday including Macon Phillips and Bev Godwin.   We&#8217;re all looking forward to more great things coming out of the White House.  If you&#8217;re looking for any developers ping <a href="http://www.tonycode.com/blog/about" target="_blank">me</a>.  <img src='http://www.tonycode.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Many thanks to <span class="fn"><a href="http://mixtmediastrategies.com/" target="_blank">Maxine Teller</a>, </span><a href="http://www.istrategylabs.com/" target="_blank">Peter Corbett</a>, <a href="http://www.ndu.edu/ctnsp/drapeau_bio.htm" target="_blank">Mark Drapau</a> and <a href="http://www.govloop.com/profiles/blog/list?user=28e2wynnsadv3" target="_blank"><span class="fn">Jeffrey Levy </span></a>for making this conference happen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tonycode.com/blog/archives/112/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t let internal wikis leak company secrets.</title>
		<link>http://www.tonycode.com/blog/archives/81</link>
		<comments>http://www.tonycode.com/blog/archives/81#comments</comments>
		<pubDate>Sun, 01 Feb 2009 17:53:17 +0000</pubDate>
		<dc:creator>Tony Primerano</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://www.tonycode.com/blog/archives/81</guid>
		<description><![CDATA[Good wiki pages have good titles and the title is usually in the URL.   This is all well and good but if you&#8217;re creating pages on a corporate wiki that is hidden from the outside world, your title may be giving away too much information.
A few days ago on twitter one of my colleagues noticed [...]]]></description>
			<content:encoded><![CDATA[<p>Good wiki pages have good titles and the title is usually in the URL.   This is all well and good but if you&#8217;re creating pages on a corporate wiki that is hidden from the outside world, your title may be giving away too much information.</p>
<p>A few days ago on twitter one of my colleagues noticed this post on twitter.</p>
<blockquote><p><a target="_blank" onclick="pageTracker._trackPageview('/exit/to/JonGretar');" href="http://twitter.com/JonGretar">JonGretar</a>: <span class="msgtxt en" id="msgtxt1154915405">I think <strong>AOL</strong> is using <strong>Erlang</strong> for it&#8217;s chat system redesign.  </span>about 6 hours ago · <a target="_blank" class="litnv" onclick="pageTracker._trackPageview('/exit/reply/JonGretar');" href="http://twitter.com/home?status=@JonGretar">Reply</a> · <a target="_blank" class="lit" onclick="pageTracker._trackPageview('/exit/status/1154915405');" href="http://twitter.com/JonGretar/statuses/1154915405">View Tweet</a></p></blockquote>
<p>His initial thought was that all our candid discussions about Erlang on twitter gave us away.  But this wasn&#8217;t the case.</p>
<div class="msg">
<blockquote><p><a target="_blank" onclick="pageTracker._trackPageview('/exit/to/JonGretar');" href="http://twitter.com/JonGretar">JonGretar</a>: <span class="msgtxt en" id="msgtxt1154986230"><a target="_blank" onclick="pageTracker._trackPageview('/exit/to/tumka')" href="http://twitter.com/tumka">@tumka</a> Because of people viewing my <strong>erlang</strong> tutorial with referrer: wiki.office.<strong>aol</strong>.com/wiki/Open_Chat_Backend_Redesign</span> about 5 hours ago · <a target="_blank" class="litnv" onclick="pageTracker._trackPageview('/exit/reply/JonGretar');" href="http://twitter.com/home?status=@JonGretar">Reply</a> · <a target="_blank" class="lit" onclick="pageTracker._trackPageview('/exit/status/1154986230');" href="http://twitter.com/JonGretar/statuses/1154986230">View Tweet</a></p></blockquote>
</div>
<p><a class="litnv" onclick="new Ajax.Updater('thr1154986230', '/search/thread/1154986230?index=0', {asynchronous:true, evalScripts:true, onComplete:function(request){Effect.toggle('thr1154986230', 'blind',{duration:0.2}); Element.toggle( 'show_thr1154986230'); Element.toggle( 'hide_thr1154986230'); translateThread('thr1154986230');}, parameters:'authenticity_token=' + encodeURIComponent('1da1d169b2f708dbed806d07c105f125f530f3e9')}); return false;" href="http://search.twitter.com/search?q=erlang+aol#"><span id="show_thr1154986230" /></a>Ooops.   Fortunately our Chat Backend Redesign is not a secret and our wiki page has links to all sorts of external sites.</p>
<p>For those non-techies out there let me explain what a referrer is.</p>
<p>When you click a link on a web page, the destination site is sent information on what page sent it the traffic.  The source page is the referrer (or referer as it is misspelled in the HTTP spec).    There are several useful applications that use the referrer information that I won&#8217;t discuss here.  Naturally, Wikipedia has a good article on the subject.  <a href="http://en.wikipedia.org/wiki/Referer">http://en.wikipedia.org/wiki/Referer</a></p>
<p>What would have been worse is if we had a page called <span class="msgtxt en" id="msgtxt1154986230">wiki.office.<strong>aol</strong>.com/wiki/Technology_Acquisitions</span>_In_Process and someone at company X noticed this referrer in their access logs.  If company X was a public company that person might run off and buy a pile of stock based on this simple observation.</p>
<p>Now most wikis are public and people wouldn&#8217;t be creating pages like this in the public space.  But more and more companies have internal wikis and it is becoming common to discuss things on these pages that should not be shared with the public.    Rather than having to worry about your page titles giving away too much information I have created a mediawiki extension that will prevent referrer information from being sent to external sites.</p>
<p>Information on the extension can be found here.</p>
<p><a href="http://www.mediawiki.org/wiki/Extension:HideReferringPage">http://www.mediawiki.org/wiki/Extension:HideReferringPage</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tonycode.com/blog/archives/81/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Good Times at BarCampDC2</title>
		<link>http://www.tonycode.com/blog/archives/80</link>
		<comments>http://www.tonycode.com/blog/archives/80#comments</comments>
		<pubDate>Tue, 21 Oct 2008 00:20:16 +0000</pubDate>
		<dc:creator>Tony Primerano</dc:creator>
				<category><![CDATA[barcampdc2]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[internet buzz]]></category>

		<guid isPermaLink="false">http://www.tonycode.com/blog/archives/80</guid>
		<description><![CDATA[On Saturday, I spent the day at BarCampDC2.    Like last year there were plenty of great sessions.  I really wanted to discuss Amazon&#8217;s EC2 as I think it is where most small companies should be moving their sites and I see huge business opportunities in this space.   As the session board was being [...]]]></description>
			<content:encoded><![CDATA[<p>On Saturday, I spent the day at <a target="_blank" href="http://barcampdc.org/">BarCampDC2</a>.    Like last year there were plenty of great <a target="_blank" href="http://barcampdc.org/wiki/The_Second_BarCamp_DC#Sessions">sessions</a>.  I really wanted to discuss Amazon&#8217;s <a target="_blank" href="http://aws.amazon.com/ec2/">EC2</a> as I think it is where most small companies should be moving their sites and I see huge business opportunities in this space.   As the session board was being built I kept looking for something on Amazon&#8217;s EC2, S3 or AWS.  I had not used the services yet, but I was determined to discuss them as I know many of the companies present were using them.   In desperation, I grabbed a pen and a post it note and wrote  <a title="To Cloud or Not? AWS, EC2, S3" href="http://barcampdc.org/wiki/To_Cloud_or_Not%3F_AWS%2C_EC2%2C_S3">&#8220;To Cloud or Not? AWS, EC2, S3 or build your own</a>&#8220;.   I owned the session and I hoped I would have a few experts in the room so I could act as a moderator instead of presenter.</p>
<p>The room was packed and I started out by telling everyone that I had no presentation or experience with these technologies and hoped we had some experts in the room.   As I expected there were plenty of experts in the room and we had a great discussion on what Amazon had to offer and other offerings that companies can leverage.</p>
<p>The room was filled with some of the greatest minds from the DC Tech scene.<br />
<img title="My Session" alt="My Session" src="http://photos-a.ak.facebook.com/photos-ak-snc1/v351/194/111/510128458/n510128458_888024_2181.jpg" /></p>
<p><img title="the room,  to my left" alt="the room,  to my left" src="http://photos-b.ak.facebook.com/photos-ak-snc1/v351/194/111/510128458/n510128458_888025_2411.jpg" />More pics are <a target="_blank" href="http://www.facebook.com/album.php?aid=39104&#038;l=de1f3&#038;id=510128458">here</a>.</p>
<p>My notes from the session are <a target="_blank" href="http://barcampdc.org/wiki/To_Cloud_or_Not%3F_AWS%2C_EC2%2C_S3">here</a>. <span class="fn"><a target="_blank" href="http://nikolasco.livejournal.com/">Nikolas Coukouma</a> helped clean them up and added some additional pointers.   </span></p>
<p>After my session I attended several hard core geek sessions, as usual there were many sessions I was unable to attend.   Maybe we can videotape the sessions next time?<br />
I attended</p>
<ul>
<li>11AM &#8211; Nitrogen Web Framework</li>
<li>1PM &#8211; <a title="Git" href="http://barcampdc.org/wiki/Git">Git</a></li>
<li>2PM &#8211; <a title="MySQL Optimization" href="http://barcampdc.org/wiki/MySQL_Optimization">MySQL Optimization</a></li>
<li>3PM-5PM wandered through various sessions.</li>
<li>5PM &#8211; Beer!   Great presentation by <a target="_blank" href="http://www.voodootikigod.com/">Chris Williams</a>.   I thought this was an early happy hour room but instead Chris schooled us on the history of beer.</li>
</ul>
<p>Afterward we headed to McFadden&#8217;s where I consumed several pints of  Guinness.   Fortunately I had taken the bus and metro from my house so getting home was a non-issue.</p>
<p>Thanks to <a target="_blank" href="http://www.cdiabu.com/">Center for Digital Imaging Arts at Boston University</a> for letting us have the conference there and  thanks to all the folks that helped put this together.   Can we do this again in 6 months?  <img src='http://www.tonycode.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tonycode.com/blog/archives/80/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>LifeStream Aggregators</title>
		<link>http://www.tonycode.com/blog/archives/79</link>
		<comments>http://www.tonycode.com/blog/archives/79#comments</comments>
		<pubDate>Fri, 15 Aug 2008 11:56:40 +0000</pubDate>
		<dc:creator>Tony Primerano</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[internet buzz]]></category>

		<guid isPermaLink="false">http://www.tonycode.com/blog/archives/79</guid>
		<description><![CDATA[A few months ago I was asked to do a Technology Due Diligence of SocialThing.   My 1st reaction was why do we need another aggregator?    We have BuddyFeed and several technologies that are proven to scale.  People always snicker when AOL and technology are mentioned in the same sentence but the fact of the matter [...]]]></description>
			<content:encoded><![CDATA[<p>A few months ago I was asked to do a Technology Due Diligence of SocialThing.   My 1st reaction was why do we need another aggregator?    We have BuddyFeed and several technologies that are proven to scale.  People always snicker when AOL and technology are mentioned in the same sentence but the fact of the matter is that we&#8217;ve been building products that need to scale to millions of users, on day one, for well over 15 years.  There are some amazing software engineers at AOL.</p>
<p>Back to SocialThing&#8230;.  <img src='http://www.tonycode.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>As <a target="_blank" href="http://www.techcrunch.com/2008/03/10/watch-out-friendfeed-socialthing-is-even-easier-to-use/">TechCrunch</a> and others have noted, there are several social aggregators out there, but SocialThing found a powerful niche in the LifeStream aggregation market.   Let me start by defining what a LifeStream is and then I&#8217;ll get to what makes SocialThing unique.<br />
LifeStreams focus on feeds about your life.</p>
<ul>
<li>What you are doing right now</li>
<li>What pictures you recently uploaded</li>
<li>What you posted to your blog.</li>
</ul>
<p>Feeds on news and other events that are published by 3rd parties are not part of a LifeStream. They may still be feeds but they are not part of your life.</p>
<h3>Life with a single social network</h3>
<p>If everyone updated their status, uploaded pictures and blogged on a single social network LifeStreams would be easy. The standard Facebook News Feed would be all we needed to keep up to date with what our friend were up to. Of course, if there was a single network it would probably be pretty boring. Competition between social networks means we&#8217;ll always have the latest and greatest features, and if we don&#8217;t we&#8217;ll eventually move to where the best features are.</p>
<p>The problem with this competition is that our online life is fragmented and our friends are in various places. If we want to keep up with everyone we need to sign into several services or find a way to aggregate information on the people we care about.</p>
<p>LifeStream Aggregators try to make this easy.  I&#8217;ll compare three of them here.   These <a target="_blank" href="http://tonycode.com/wiki/index.php?title=Social_Aggregators">notes</a> were made on my wiki a few months ago when I was hashing out what it was we were looking to buy.</p>
<h3>FriendFeed</h3>
<p>Many of the things our friends do are available via public feeds. This makes pulling them together in a meaningful way easy. <a rel="nofollow" title="http://friendfeed.com" class="external text" href="http://friendfeed.com/">FriendFeed</a> makes this easy but you need to define what you want people to see in your feed (Me Feed) and then people can subscribe to your feed.</p>
<p>For example.  I can quickly build a feed on <a rel="nofollow" title="http://friendfeed.com" class="external text" href="http://friendfeed.com/">FriendFeed</a> that includes my <a rel="nofollow" title="http://friendfeed.com/primerano" class="external text" href="http://friendfeed.com/primerano">Twitter, Pownce, Flickr and Blog feeds</a>. Then my friends that use FriendFeed can subscribe to my feed to build a LifeStream of people they follow. FriendFeed makes this easy but its another account you need to create.</p>
<h3>AIM Buddy Feed/ <a target="_blank" href="http://buddyupdates.aim.com/">Buddy Updates</a></h3>
<p>AIM has a buddy feed that does almost the same thing as FriendFeed. The AIM Buddy Feed feature is not well advertised but if you set it up your updates will show up in your friends buddy lists. Setup your feed <a rel="nofollow" title="http://buddyupdates.aim.com/" href="http://buddyupdates.aim.com/">here</a>. If AOL promotes this feature and your friends are already on AIM this will save you from registering at yet another site. The aggregation of all LifeStreams of your buddies has been at dashboard.aim.com at times and then disappears. I hope it comes back soon.</p>
<h3>Social Thing</h3>
<p>SocialThing makes aggregation simpler than FriendFeed and AIM Buddy Feed because they took a different approach. Instead of requiring all your friends to join SocialThing they just pull your friend&#8217;s feeds from the networks you already belong to. They also let you post messages to your various networks.</p>
<p>They can do this because they ask you for your name and password on these sites. Personally I find this scary. Some sites like Facebook can give 3rd party sites tokens that they can store and use to access your account so the password is never sent to the 3rd party site. But sites like Twitter do not have this capability so sites like SocialThing need to save your username and password.</p>
<p>What do you get for giving up your usernames and passwords?   Power!</p>
<p>Some services like Twitter have APIs to fetch your aggregated LifeStream in a single call. This makes SocialThing&#8217;s job easy. Other APIs require a 2 step process to get the aggregated LifeStream.</p>
<ul>
<li>Step 1 &#8212; Fetch my friends</li>
<li>Step 2 &#8212; Fetch my friend&#8217;s &#8220;Me&#8221; Feeds.</li>
</ul>
<p>This second scenario presents a scaling nightmare. If I login to SocialThing and I have 5 networks that require a 2 step process and I have approximately 50 friends in each, they need to make (5 + 50*5) 255 calls anytime I visit. They then need to keep polling these services to keep them up to date. This is a lot of work for SocialThing to be doing but it is also beating up on my 5 networks. As SocialThing grows its user base they might find their IP Address block as they overload the sites they are polling to build LifeStreams.</p>
<p>Another nice feature that you get by giving SocialThing your password is the ability to send messages to your various networks from SocialThing. With 1 click you can update your status on Twitter, Facebook and Pownce.</p>
<h3>What&#8217;s next?</h3>
<p>Honestly, I don&#8217;t know.  <img src='http://www.tonycode.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />      At this point the product folks are in control.   We have an opportunity to make a great product even better and to bring our AOL, AIM and Bebo users into the world of LifeStream aggregation.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tonycode.com/blog/archives/79/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Omaha businesses talking advantage of Berkshire shareholders</title>
		<link>http://www.tonycode.com/blog/archives/77</link>
		<comments>http://www.tonycode.com/blog/archives/77#comments</comments>
		<pubDate>Fri, 16 May 2008 21:16:16 +0000</pubDate>
		<dc:creator>Tony Primerano</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://www.tonycode.com/blog/archives/77</guid>
		<description><![CDATA[Two weeks ago I went to Omaha to attend the Berkshire Hathaway shareholders meeting.  The meeting was great and Omaha was fun to explore, but 2 businesses left a mark on the entire trip.
1) As I checked out of my hotel at 4AM I noticed the charges were not consistent with my reservation.  [...]]]></description>
			<content:encoded><![CDATA[<p>Two weeks ago I went to Omaha to attend the Berkshire Hathaway shareholders meeting.  The meeting was great and Omaha was fun to explore, but 2 businesses left a mark on the entire trip.</p>
<p>1) As I checked out of my hotel at 4AM I noticed the charges were not consistent with my reservation.  They were higher, I called the office when I arrived home and they fixed the charge.</p>
<p>2) Today as I looked at my credit card statement I noticed my rental car bill was about 70% higher than the estimated charge.    I assumed they dropped a discount but when I called them, they said there was a $71 fuel surcharge (inc. tax).    The needle was past full when I dropped the car off. If they tried hard they might have been able to squeeze a 1/2 gallon into the tank.   They have now removed the charge.</p>
<p>Since these companies fixed the charges I&#8217;m not going to name them but I wonder if this is common on the shareholder&#8217;s weekend.    I suspect less than 50% of consumers would have noticed the discrepancy resulting in more profit for these companies.  But as Warren Buffet would say &#8220;we never want to trade reputation for money&#8221;.</p>
<p>Post a comment if you had a similar experience in Omaha.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tonycode.com/blog/archives/77/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building Bebo Apps.   Part 2 (Auto-Updating the Profile Page)</title>
		<link>http://www.tonycode.com/blog/archives/76</link>
		<comments>http://www.tonycode.com/blog/archives/76#comments</comments>
		<pubDate>Wed, 16 Apr 2008 15:13:27 +0000</pubDate>
		<dc:creator>Tony Primerano</dc:creator>
				<category><![CDATA[bebo]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://www.tonycode.com/blog/archives/76</guid>
		<description><![CDATA[Handles are the key to having applications update on the profile page without a user taking action.   Some notes on how to do this on Facebook are here.  Since Bebo has implemented most of the Facebook API this should be easy but I think some things (like Infinite session keys) are still [...]]]></description>
			<content:encoded><![CDATA[<p>Handles are the key to having applications update on the profile page without a user taking action.   Some notes on how to do this on Facebook are <a target="_blank" href="http://joel.neubeck.net/2007/10/facebook-fbml-ref/">here</a>.  Since Bebo has implemented most of the Facebook API this should be easy but I think some things (like Infinite session keys) are still missing.  Hoping someone will leave me pointer proving me wrong on this.  <img src='http://www.tonycode.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>By placing a handle on a user&#8217;s page you can (in theory) push updates to a user&#8217;s profile page without them interacting with the application.  For example.  If you had a &#8220;Washington Capitals Fans&#8221; application that pushed news to every user&#8217;s profile that had the application, all these pages would have the same handle. Having a single handle means that a single update of the handle content would update all profiles using the application.</p>
<p>In other cases you might want a unique handle per profile.  For example, if your application injected an RSS feed of the user&#8217;s choice onto their profile.<br />
Here is a simple example of setting a handle on a user&#8217;s page.  I use the user&#8217;s UID as the handle in this case.</p>
<p><a target="_blank" href="http://tonycode.com/wiki/index.php?title=Bebo_Examples#Set_a_handle_on_a_user.27s_profile"><span class="toctext" /></a><a href="http://tonycode.com/wiki/index.php?title=Bebo_Examples#Set_a_handle_on_a_user.27s_profile"><span class="toctext">Set a handle on a user&#8217;s profile</span></a></p>
<p>I then write an update.php file that injects the date on the user&#8217;s profile</p>
<p><a target="_blank" href="http://tonycode.com/wiki/index.php?title=Bebo_Examples#Update_a_handle_on_a_user.27s_profile"><span class="toctext">Update a handle on a user&#8217;s profile</span></a></p>
<p>That&#8217;s all fine and good but the update wasn&#8217;t automatic.  The user had to hit the update.php file.   In a real application we would have a database of all the users and we could periodically update the handles.  Assuming there is an infinite session concept in the Bebo API.   Since I could not figure out how to implement an infinite session here is my hack.</p>
<p>I place a hidden image on the user&#8217;s page that calls the update function.<br />
Now when a user views their profile, the hidden image calls refresh.php and the handle content is updated.  Unfortunately, the update happens after the page is rendered so you&#8217;ll need to reload to see the change.</p>
<p>The code&#8230;</p>
<p><a target="_blank" href="http://tonycode.com/wiki/index.php?title=Bebo_Examples#Set_a_handle_on_a_user.27s_profile_and_use_hidden_image_for_update"><span class="toctext">Set a handle on a user&#8217;s profile and use hidden image for update</span></a></p>
<p>Unfortunately, the update happens after the page is rendered so you&#8217;ll need to reload the page to see the change.  It should also be noted that anytime someone views your page they will call the update.php.  If they also have the application installed your handle will be updated.</p>
<p>Assuming infinite sessions keys are unavailable I would leverage app users to update their peers.  In your database of users keep track of the last time they were updated.  Anytime the update.php function is called do an update on all handles that haven&#8217;t been updated in a specific period of time.   As the user base grows this should allow for a more even distribution of updates.   This might even be better than the cron jobs that infinite session key users use in their cron jobs.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tonycode.com/blog/archives/76/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
