<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0" xml:base="http://danielmclaren.com">
<channel>
 <title>danielmclaren.com blogs</title>
 <link>http://danielmclaren.com/blog</link>
 <description />
 <language>en</language>
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/danielmclaren_blogs" /><feedburner:info uri="danielmclaren_blogs" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
 <title>Visualizing LinkedIn Connections Using Protovis</title>
 <link>http://feedproxy.google.com/~r/danielmclaren_blogs/~3/X5vJe3eqQeQ/visualizing-linkedin-connections-using-protovis</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;!--break--&gt;
&lt;div class="image"&gt;
&lt;a href="/demo/2011/02/08/inmaps-protovis"&gt;
&lt;img src="/sites/danielmclaren.com/files/imagecache/large/images/2011/inmaps_protovis_screenshot01.jpg" width="540" height="364" alt="InMaps + Protovis" /&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;A couple weeks ago, LinkedIn released &lt;a href="http://inmaps.linkedinlabs.com" class="external" rel="external"&gt;InMaps&lt;/a&gt;, a tool for visualizing your professional network. You can see mine &lt;a href="http://inmaps.linkedinlabs.com/share/Daniel_McLaren/59933603404633628547726614821043633847" class="external" rel="external"&gt;right here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The layouts are fantastic and they show the clusters well but &lt;strong&gt;I wanted a bit more interactivity in the UI.&lt;/strong&gt; I used Protovis because it seems to be one of the best Javascript visualization packages out there.&lt;/p&gt;

&lt;p&gt;Firebug helped me grab the JSON files used by LinkedIn and set about feeding the data to Protovis. A little bit of data-munging and we were good. As usual, though, it took a bit of wrestling to get the force-directed layout to behave.&lt;/p&gt;

&lt;p&gt;One of the first things I did was remove the node representing myself. This node was connected to every other node so &lt;strong&gt;it didn't communicate anything useful&lt;/strong&gt; and it was causing the entire network to oscillate and disappear off screen.&lt;/p&gt;

&lt;p&gt;So far Protovis has been pretty nice to work with, though I ran into some problems with user interaction. Specifically, I want the user to be able to click a node to open the LinkedIn profile. However, when the user drags a node, the click event fires and opens a new window.&lt;/p&gt;

&lt;p&gt;The documentation was also a bit brief but between the example code and the source code it wasn't too hard to figure things out. &lt;strong&gt;Looking forward to working more with it!&lt;/strong&gt;&lt;/p&gt;

&lt;ul class="actions"&gt;
  &lt;li&gt;View the &lt;a href="/demo/2011/02/08/inmaps-protovis"&gt;InMaps + Protovis demo&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;!-- google_ad_section_end --&gt;</description>
 <category domain="http://danielmclaren.com/category/label/dataviz">DataViz</category>
 <category domain="http://danielmclaren.com/taxonomy/term/61">GraphVis</category>
 <category domain="http://danielmclaren.com/category/label/open-source">Open Source</category>
 <pubDate>Tue, 08 Feb 2011 17:44:07 +0000</pubDate>
 <dc:creator>daniel</dc:creator>
 <guid isPermaLink="false">180 at http://danielmclaren.com</guid>
<feedburner:origLink>http://danielmclaren.com/blog/2011/02/08/visualizing-linkedin-connections-using-protovis</feedburner:origLink></item>
<item>
 <title>New Twitter Network Graph Viz</title>
 <link>http://feedproxy.google.com/~r/danielmclaren_blogs/~3/GZypURuDbfA/new-twitter-network-graph-viz</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;!--break--&gt;

&lt;div class="image"&gt;
&lt;a href="http://apps.asterisq.com/mentionmap" class="external" rel="external"&gt;&lt;img src="/sites/danielmclaren.com/files/imagecache/large/images/2009/screenshot.png" width="540" height="364" alt="Mentionmap Twitter visualization" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;I just finished up a graph visualization for your Twitter network.  It's a dynamic, interactive application that tracks the number of times you mentioned other users or hashtags.  You can &lt;a href="http://asterisq.com/blog/2009/10/14/explore-your-twitter-network-with-mentionmap" class="external" rel="external"&gt;read more about it&lt;/a&gt; on the Asterisq website or, if you have a Twitter account, give it a spin.&lt;/p&gt;

&lt;ul class="actions"&gt;
  &lt;li&gt;&lt;a href="http://apps.asterisq.com/mentionmap" class="external" rel="external"&gt;Launch Mentionmap&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;!-- google_ad_section_end --&gt;</description>
 <category domain="http://danielmclaren.com/category/label/asterisq">Asterisq</category>
 <category domain="http://danielmclaren.com/taxonomy/term/58">Constellation</category>
 <category domain="http://danielmclaren.com/category/label/dataviz">DataViz</category>
 <category domain="http://danielmclaren.com/category/label/graphviz">GraphViz</category>
 <category domain="http://danielmclaren.com/taxonomy/term/69">Interactive</category>
 <pubDate>Wed, 14 Oct 2009 21:03:06 +0000</pubDate>
 <dc:creator>daniel</dc:creator>
 <guid isPermaLink="false">156 at http://danielmclaren.com</guid>
<feedburner:origLink>http://danielmclaren.com/2009/10/14/new-twitter-network-graph-viz</feedburner:origLink></item>
<item>
 <title>How Google Website Optimizer Encourages Visitors to Act</title>
 <link>http://feedproxy.google.com/~r/danielmclaren_blogs/~3/GPvWTWetDtQ/how-google-website-optimizer-encourages-visitors-to-act</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;I learned a lot about Google Website Optimizer in a presentation at &lt;a href="http://www.meetup.com/Vancouver-social-media-nonprofits-social-change/" class="external" rel="external"&gt;Net Tuesday Vancouver&lt;/a&gt; earlier this week.  I also have a &lt;a href="/2009/10/07/tips-for-google-web-optimizer-and-adsense"&gt;write-up on Adsense&lt;/a&gt; from the same event, if you're interested.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.vkistudios.com/" class="external"&gt;VKI Studios&lt;/a&gt;' John Hossack was the speaker.  &lt;strong&gt;His presentation focused on the "post-click" portion of online advertising.&lt;/strong&gt;  It starts from when a user clicks on an advertisement and ends up in your website.&lt;/p&gt;

&lt;p&gt;The goal of this process is to &lt;strong&gt;get the user to perform some action&lt;/strong&gt;, like purchasing your product, making a donation, or telling their friends about your product or service.  There are many different ways you can encourage a visitor to take action.  Different wording, button styles, product images, and layouts all have an effect.&lt;/p&gt;

&lt;p&gt;So how can Google help?  One way to decide which button style makes more users want to click it is to use your experience or intuition.  &lt;strong&gt;Another way is to test, test, test.  And that's where Website Optimizer comes in.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;What Website Optimizer Does&lt;/h2&gt;

&lt;p&gt;Website Optimizer a free service from Google that allows you to &lt;strong&gt;present different versions of your website to users.&lt;/strong&gt;  Each time somebody visits your website they'll see one of your test cases.  If you're testing button styling, one test case might be a yellow button and another case a red button.&lt;/p&gt;

&lt;p&gt;Web Optimizer records which version of the website was displayed and then records whether or not the user clicked the button.  This button click is your "success event" and should lead to one of the desired actions mentioned above.&lt;/p&gt;

&lt;p&gt;Once you get enough of these "success events" you can look at the numbers to determine which button was more likely to be clicked.  By testing different improvements all over your website, you can &lt;strong&gt;make it more effective at getting visitors to perform the desired action.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;Notes on Website Optimizer&lt;/h2&gt;

&lt;p&gt;There's a caveat to all this.  Your site needs to have visitors coming in and triggering "success events" fairly regularly for this to be useful.  If only ten people click the button in a month then you don't have very much data to measure.  &lt;strong&gt;John recommends having at least 100 success events per test case per month.&lt;/strong&gt;&lt;/p&gt;

&lt;p class="pull_quote_right"&gt;"Test shouts, not whispers."&lt;/p&gt;

&lt;p&gt;John also points out that you should be testing big changes.  He likes to use the six-foot rule: you should be testing changes that are visible from six feet away from the monitor.&lt;/p&gt;

&lt;p&gt;I have to say I learned a lot from &lt;a href="/2009/10/07/tips-for-google-web-optimizer-and-adsense"&gt;both speakers&lt;/a&gt; at Net Tuesday.  &lt;strong&gt;Many thanks to the speakers!&lt;/strong&gt;  &lt;a href="http://www.meetup.com/Vancouver-social-media-nonprofits-social-change/messages/7828577/" class="external" rel="external"&gt;Slides for both presentations&lt;/a&gt; are now available to Net Tuesday Meetup members.&lt;/p&gt;&lt;!-- google_ad_section_end --&gt;</description>
 <category domain="http://danielmclaren.com/taxonomy/term/43">Events</category>
 <category domain="http://danielmclaren.com/category/label/marketing">Marketing</category>
 <category domain="http://danielmclaren.com/taxonomy/term/4">Resources</category>
 <category domain="http://danielmclaren.com/category/label/webmastering">Webmastering</category>
 <pubDate>Fri, 09 Oct 2009 19:04:37 +0000</pubDate>
 <dc:creator>daniel</dc:creator>
 <guid isPermaLink="false">153 at http://danielmclaren.com</guid>
<feedburner:origLink>http://danielmclaren.com/2009/10/09/how-google-website-optimizer-encourages-visitors-to-act</feedburner:origLink></item>
<item>
 <title>Import Drupal Comments into Disqus</title>
 <link>http://feedproxy.google.com/~r/danielmclaren_blogs/~3/m0giHUzw13Y/import-drupal-comments-into-disqus</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;Among the recent updates to this powered-by-Drupal blog is a switch to having Disqus manage comments.  The standard comment module has a few shortcomings which are solved by Disqus.  &lt;strong&gt;However, Disqus isn't without its own problems&lt;/strong&gt; and the absent "import comments from Drupal" functionality is one of them.&lt;/p&gt;

&lt;!--break--&gt;

&lt;div class="message-box"&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Apparently, this post only covered half the battle.  I'm still fighting with Disqus' comment import page which is giving me vague error messages&lt;/p&gt;&lt;/div&gt;

&lt;h2&gt;Reasons for the Switch&lt;/h2&gt;

&lt;p&gt;My main reason for the change is because &lt;strong&gt;Disqus allows users to subscribe to followup comments by email.&lt;/strong&gt;  I was using Drupal's &lt;a href="http://drupal.org/project/subscriptions" class="external" rel="external"&gt;subscriptions module&lt;/a&gt; to notify users when a new comment was posted.  However, this module processed comments before &lt;a href="http://drupal.org/project/akismet" class="external" rel="external"&gt;Akismet&lt;/a&gt; and I ended up blasting subscribers with spam.&lt;/p&gt;

&lt;p&gt;That's not all, though. are some other &lt;a href="http://www.mikeslife.org/content/switching-disqus-comments" class="external" rel="external"&gt;advantages of using Disqus over Drupal&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The big problem for me, however, is that &lt;strong&gt;Disqus doesn't have an easy way to import comments from Drupal.&lt;/strong&gt;  Since this blog has been up for a while, I would lose a lot of comments if I just let them go.  A lot of them provide additional help on tutorial blog posts so there is definitely motivation to keep them.&lt;/p&gt;

&lt;h2&gt;Getting Drupal's Comments into Disqus&lt;/h2&gt;

&lt;p&gt;Now Disqus isn't missing import functionality altogether.  I'm sure that eventually, the &lt;a href="http://drupal.org/project/disqus" class="external" rel="external"&gt;Disqus module&lt;/a&gt; for Drupal will include it.  WordPress already has a plug-in that can do this and &lt;strong&gt;there are options to upload XML comment files exported from JS-Kit and IntenseDebate.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="image"&gt;&lt;img src="/sites/danielmclaren.com/files/imagecache/large/images/2009/intensedebate_to_disqus.png" width="460" height="171" alt="IntenseDebate to Disqus" /&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;I took the easy route&lt;/strong&gt;: instead of learning the Disqus API, I learned the IntenseDebate comment export format.  I signed up for an IntenseDebate account, created some test comments, and hit export.  The format is pretty straightforward, and, since it's XML, self-descriptive.&lt;/p&gt;

&lt;label for="intenseDebateSampleXML"&gt;IntenseDebate Export Sample&lt;/label&gt;
&lt;div class="geshifilter"&gt;&lt;pre class="geshifilter-xml"&gt;&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;output&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;blogpost&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;url&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;http%3A%2F%2Fdanielmclaren.com%2Fnode%2F4&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/url&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;title&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;How to Use Cross-Domain Shared Objects in Flash&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/title&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;guid&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;http://danielmclaren.com/node/4&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/guid&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;comments&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;comment&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;isAnon&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;1&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/isAnon&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;name&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;so-and-so&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/name&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;email&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;so-and-so@example.com&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/email&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;url&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;http://example.com&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/url&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;ip&lt;/span&gt;&lt;span style="font-weight: bold; color: black;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;comment&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;I like your site!&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/comment&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;date&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;2009-10-08 10:25:25&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/date&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;gmt&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;2009-10-08 10:25:25&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/gmt&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;score&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;1&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/score&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/comment&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/comments&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/blogpost&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Using a PHP script, you can generate the XML output for your own comments.  Ideally, the comment info would be gathered using the Drupal API but I just plugged right into the database.  Now all you have to do is save the XML to a local file, and upload that file in the Disqus import/export page, using IntenseDebate as the format.&lt;/p&gt;

&lt;ul class="actions"&gt;
  &lt;li&gt;&lt;a href="/sites/danielmclaren.com/files/drupal_to_disqus.zip"&gt;Download the script&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;The IntenseDebate Export Script&lt;/h2&gt;

&lt;p&gt;A few notes about the script which translates your Drupal comments to the IntenseDebate format:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The script assumes you're using clean URLs.&lt;/li&gt;
  &lt;li&gt;Registered users aren't handled any differently from anonymous users.  I'm the only registered user on my blog so if your website is any different, you might need to make changes.&lt;/li&gt;
  &lt;li&gt;The script includes a bunch of entity information in the doctype so you can view the XML properly in Firefox.  Comment out the DOCTYPE lines if you don't need it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just to be safe, I'd recommend backing up your database.  Also, have a good look at the output XML before uploading it to Disqus.  You might want to do some tweaking before sending off to their import service.&lt;/p&gt;

&lt;p&gt;Let me know if you find this useful or if you run into problems.  Good luck!&lt;/p&gt;&lt;!-- google_ad_section_end --&gt;</description>
 <category domain="http://danielmclaren.com/taxonomy/term/6">Development</category>
 <category domain="http://danielmclaren.com/taxonomy/term/71">Drupal</category>
 <category domain="http://danielmclaren.com/category/label/webmastering">Webmastering</category>
 <enclosure url="http://danielmclaren.com/sites/danielmclaren.com/files/drupal_to_disqus.zip" length="8477" type="application/zip" />
 <pubDate>Thu, 08 Oct 2009 20:17:12 +0000</pubDate>
 <dc:creator>daniel</dc:creator>
 <guid isPermaLink="false">152 at http://danielmclaren.com</guid>
<feedburner:origLink>http://danielmclaren.com/2009/10/08/import-drupal-comments-into-disqus</feedburner:origLink></item>
<item>
 <title>Getting the Most Out of Google Adsense</title>
 <link>http://feedproxy.google.com/~r/danielmclaren_blogs/~3/9UGZDh7cWAw/tips-for-google-web-optimizer-and-adsense</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;I checked out the &lt;a href="http://www.meetup.com/Vancouver-social-media-nonprofits-social-change/" class="external" rel="external"&gt;Net Tuesday meetup&lt;/a&gt; last night.  If you're not familiar with the group, they're &lt;strong&gt;bring together social change organizations and social/web media types.&lt;/strong&gt;  &lt;a href="http://danielmclaren.com/2009/09/02/vancouver-set-to-publish-open-datasets"&gt;Last month's meetup&lt;/a&gt; showcased some exciting projects going on in Vancouver so I was looking forward to my second time at Net Tuesday.&lt;/p&gt;

&lt;p&gt;This month, Omar Al-Hajjar from &lt;a href="http://www.magnetsearchmarketing.com/about-us/management-team/vancouver-office/" class="external" rel="external"&gt;Magnet Search Marketing&lt;/a&gt; and John Hossack of &lt;a href="http://www.vkistudios.com/" class="external"&gt;VKI Studios&lt;/a&gt; presented on Google Adsense and Google Web Optimizer, respectively.  I'll post about John's presentation another time but for now, &lt;strong&gt;here are some highlights from what Omar talked about.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;Getting More Visitors to Your Website&lt;/h2&gt;

&lt;p&gt;In a web campaign, users go through a process where they discover your website, visit it, and then perform some desired action.  This could be buying your product or making a donation.  &lt;strong&gt;Omar tackled the "pre-click" portion of this process&lt;/strong&gt;&amp;#8212;that's the bit before they visit your site by clicking on a link or an ad.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google Adsense can display your message on specific search result pages.&lt;/strong&gt;  For example, your &lt;a href="http://sketchyd.com/sketch/181" class="external" rel="external"&gt;infinite, circular sheet music&lt;/a&gt; business might want to target keywords like "sheet music" and "piano music."&lt;/p&gt;

&lt;p&gt;The presentation wasn't geared so much on getting started with Adsense but more toward creating better ads through optimization.  You see, Adsense allows you to publish multiple ads and compare their performance.  &lt;strong&gt;Omar tells us to run two ads: the champion and the challenger.&lt;/strong&gt;  If more visitors click the challenger ad during the test period, the previous champion is scrapped and you have a new champion.&lt;/p&gt;

&lt;p class="pull_quote_right"&gt;I tried testimonials in ad copy... and they worked!"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Omar emphasized that you shouldn't just test once, but iteratively on a regular basis.&lt;/strong&gt;  Keep creating new challenger ads to try to upset your current top-performer and over time you will see a big improvement in click-throughs.&lt;/p&gt;

&lt;p&gt;We also heard some great tips on writing good ads, including a clever point about using testimonials in ads.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Be direct.&lt;/strong&gt;  Remember, attention is in short supply on the web.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Get rid of marketing speak.&lt;/strong&gt; That includes slogans and catch phrases.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Make the ad relevant to the viewer.&lt;/strong&gt;  Since you know what they searched for, mention that.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;State your unique value proposition.&lt;/strong&gt;  What sets you apart from competition?&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Try using keyword misspellings.&lt;/strong&gt;  These ads are often cheaper because of lower demand.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Many thanks, Omar, for a great presentation.  Oh, and if anybody's looking for the presentation slides, they should be posted on the &lt;a href="http://www.meetup.com/Vancouver-social-media-nonprofits-social-change" class="external" rel="external"&gt;Net Tuesday meetup site&lt;/a&gt; in the near future.&lt;/p&gt;&lt;!-- google_ad_section_end --&gt;</description>
 <category domain="http://danielmclaren.com/taxonomy/term/43">Events</category>
 <category domain="http://danielmclaren.com/category/label/marketing">Marketing</category>
 <category domain="http://danielmclaren.com/taxonomy/term/4">Resources</category>
 <category domain="http://danielmclaren.com/category/label/webmastering">Webmastering</category>
 <pubDate>Wed, 07 Oct 2009 19:53:49 +0000</pubDate>
 <dc:creator>daniel</dc:creator>
 <guid isPermaLink="false">149 at http://danielmclaren.com</guid>
<feedburner:origLink>http://danielmclaren.com/2009/10/07/tips-for-google-web-optimizer-and-adsense</feedburner:origLink></item>
<item>
 <title>Website Back Online With a New Theme</title>
 <link>http://feedproxy.google.com/~r/danielmclaren_blogs/~3/6-4qGoXEfBU/website-back-online-with-new-theme</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;I started the process of upgrading to Drupal 6.  Turned out, I had terrible timing and was suddenly swamped with work so the website has been down for several days now.  Happy to say it's back up and running.&lt;/p&gt;

&lt;p&gt;Downside is, I still don't have time to properly complete the upgrade so there's going to be a lot of quirky behaviour.  If you find broken or strangely-behaving pages, you can help me out by giving me a heads up.&lt;/p&gt;

&lt;p&gt;Cheers!&lt;/p&gt;&lt;!-- google_ad_section_end --&gt;</description>
 <category domain="http://danielmclaren.com/taxonomy/term/40">Personal</category>
 <pubDate>Tue, 06 Oct 2009 21:33:01 +0000</pubDate>
 <dc:creator>daniel</dc:creator>
 <guid isPermaLink="false">148 at http://danielmclaren.com</guid>
<feedburner:origLink>http://danielmclaren.com/2009/10/06/website-back-online-with-new-theme</feedburner:origLink></item>
<item>
 <title>Setting Up OpenFrameworks with Code::Blocks</title>
 <link>http://feedproxy.google.com/~r/danielmclaren_blogs/~3/KaMQb33lDjc/setting-up-openframeworks-with-codeblocks</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;I just got setup with &lt;a href="http://www.openframeworks.cc/" class="external" rel="external"&gt;OpenFrameworks&lt;/a&gt; which is sort of the C++ version of the popular Processing engine.  OpenFrameworks launched fairly recently so I had a few kinks getting up and running.  Hopefully this helps.&lt;/p&gt;

&lt;p&gt;I'm using Code::Blocks as my editor, and OpenFrameworks prerelease v0.06 on Windows XP.  At the end of the tutorial you'll have compiled and run an OpenFrameworks application that does nothing.  Fortunately, it doesn't die spewing errors either.  (-;&lt;/p&gt;

&lt;h2&gt;Downloads&lt;/h2&gt;

&lt;p&gt;Here's what you'll need get your first application up and running.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://www.codeblocks.org/downloads/5" class="external" rel="external"&gt;Code::Blocks editor &lt;em&gt;with MinGW&lt;/em&gt;&lt;/a&gt;.  It's important that you get the version that's packaged with the MinGW compiler.&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.openframeworks.cc/download" class="external" rel="external"&gt;OpenFrameworks&lt;/a&gt;.  Make sure you get the Code::Blocks version.&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.openframeworks.cc/content/files/codeblocks_additions.zip" class="external" rel="external"&gt;OpenFrameworks additions for Code::Blocks&lt;/a&gt;.  This contains a bunch of files you need to copy into Code::Blocks' "/includes" and "/libs" directories.&lt;/li&gt;
  &lt;li&gt;&lt;a href="/sites/danielmclaren.com/files/public/2009/openframeworks_setup/first.zip"&gt;A test project&lt;/a&gt;.  It's based on the "emptyExample" sample app, including some DLLs I had to download separately.  The ".cbp" project file assumes you installed OpenFrameworks to "C:/openframeworks" but you can change this using a text editor.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Installing OpenFrameworks and Code::Blocks&lt;/h2&gt;

&lt;p&gt;Okay, so you can get most of the way there by following the &lt;a href="http://www.openframeworks.cc/setup/codeblocks" class="external" rel="external"&gt;OpenFrameworks for Code::Blocks setup guide&lt;/a&gt;.  I wish I'd seen this before.  (-:&lt;/p&gt;

&lt;p&gt;Once you've gone through the guide, make sure Code::Blocks knows where to find the MinGW compiler by opening the "Settings" menu and choosing "Compiler and debugger...".  Under the "Toolchain executables" tab you'll find the installation directory.  Make sure this points to a folder which contains "bin/mingw32-gcc.exe".&lt;/p&gt;

&lt;p&gt;Now you can unzip the test project archive.  If you installed OpenFrameworks in a directory other than "c:/openframeworks" you'll need to update "first.cbp" with the correct location.  Find and replace in a text editor will do the trick.&lt;/p&gt;

&lt;p&gt;You're ready to run the project.  Open the workspace file and hit "Build" and you should be good to go!&lt;/p&gt;

&lt;p&gt;If that doesn't work, you can always visit the &lt;a href="http://www.openframeworks.cc/forum/" class="external" rel="external"&gt;OpenFrameworks forum&lt;/a&gt;.&lt;/p&gt;&lt;!-- google_ad_section_end --&gt;</description>
 <category domain="http://danielmclaren.com/taxonomy/term/6">Development</category>
 <category domain="http://danielmclaren.com/category/label/openframeworks">OpenFrameworks</category>
 <category domain="http://danielmclaren.com/taxonomy/term/4">Resources</category>
 <pubDate>Sat, 12 Sep 2009 19:02:48 +0000</pubDate>
 <dc:creator>daniel</dc:creator>
 <guid isPermaLink="false">146 at http://danielmclaren.com</guid>
<feedburner:origLink>http://danielmclaren.com/2009/09/12/setting-up-openframeworks-with-codeblocks</feedburner:origLink></item>
<item>
 <title>Do You Have a Polling Addiction?</title>
 <link>http://feedproxy.google.com/~r/danielmclaren_blogs/~3/xIqTVDx3mwo/do-you-have-a-polling-addiction</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;!--break--&gt;

&lt;div class="image_small_right"&gt;&lt;a href="http://www.informationisbeautiful.net/visualizations/the-hierarchy-of-digital-distractions" class="external" rel="external"&gt;&lt;img src="/sites/danielmclaren.com/files/public/2009/polling_addiction/hierarchy_distractions-resized.gif" width="233" height="145" alt="Digital Distractions" /&gt;&lt;/a&gt;
&lt;p class="caption"&gt;Here's a &lt;a href="http://www.informationisbeautiful.net/visualizations/the-hierarchy-of-digital-distractions" class="external" rel="external"&gt;visualization of some of the digital distractions we have to deal with&lt;/a&gt; by David McCandless at Information Is Beautiful.&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;My name is Daniel and I'm a polling addict.&lt;/strong&gt;  Anyone who works on a computer connected to the internet knows what I'm talking about.  It's those compulsive visits to the likes of Craigslist, eBay, and even services like Google Analytics to see if there's been any change.  We're waiting for new job postings or new bids or a slew of new visits from a referring website.  Each of these tools definitely has its use but we polling addicts check on them with pointless frequency.&lt;/p&gt;

&lt;h2 style="clear:none"&gt;Identifying the Pattern&lt;/h2&gt;

&lt;p&gt;Targets of polling addiction have some pretty specific characteristics.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Potential for change.&lt;/strong&gt;  Even a miniscule possibility that the price will change on your watched product or some one will comment on your Flickr photo could be enough.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;No notifications.&lt;/strong&gt;  If you're already receiving notifications for the website or service, you probably won't feel compelled to check it manually by visiting the website.  If the notifications are too infrequent (e.g., weekly) this might not apply.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Easy access.&lt;/strong&gt;  The barrier to entry has to be pretty low for the behaviour to become compulsive.  If you need to login with a massive password everytime you check for an update you'll be less likely to poll it.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Relatively infrequent change.&lt;/strong&gt;  If the status of your polling target changes too often, the need to check up on it falls off.  However, in some cases, you just refine the criteria that you're checking for in the service so that it occurs less frequently.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are basically two situations when this behavior kicks in.  When you're procrastinating from some big task and when you're bored.  Procrastinating isn't so bad because visiting a website to see if anything's changed doesn't take long.  However, you might poll the same websites several times while milking other distractions before getting down to business.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The worst trigger for polling addiction is short-term boredom.&lt;/strong&gt;  Whenever you have to wait a few seconds for a code compile or a slow website you might "just quickly check" whether your Flickr stats have changed.&lt;/p&gt;

&lt;p&gt;I know that when I see a progress bar for more than a second I impulsively switch tabs or windows to continue with another task.  Sometimes, though, it means I'll go check couch prices on Craigslist and spend much more time there than it took for the progress bar to finish.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So why do we do this?  It's your basic reward system.&lt;/strong&gt;  If there is a change, that is, if a new couch has appeared or a new comment or a new bid, then we get a reward.  Part of that reward comes from the novelty of the new item but it can also be tied to getting attention from others or even financial/success-related.&lt;/p&gt;

&lt;h2&gt;Countering Polling Addiction&lt;/h2&gt;

&lt;p&gt;The problem with polling addiction is that, in the long run, a lot of time gets wasted and it adds to distractions from work.  Also, research shows that &lt;a href="http://news.stanford.edu/news/2009/august24/multitask-research-study-082409.html" class="external" rel="external"&gt;doing too much multi-tasking makes us worse at task-switching&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So here are a few ideas for controlling the compulsive website-visiting:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Make the websites harder to access.&lt;/strong&gt;  By increasing the barrier to access, you reduce the likelihood that you'll try to visit the website.  You can do this by deleting bookmarks and forcing yourself to type in the URL.  You could also use a Greasemonkey script to prevent you from accessing the website during specific time periods.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Get notifications.&lt;/strong&gt;  If there's a way to get automatic email notifications from the service, you can rely on those instead of visiting the site manually.  Just make sure the frequency of these notifications is limited so you don't end up with another distraction.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Exercise some self-control.&lt;/strong&gt;  Easier said than done, but realizing when you're about to check Craigslist for the third time in a day and building the habit of going back to what you were doing before is really the best way to deal with the distraction.&lt;/li&gt;
&lt;/ul&gt;


&lt;!-- google_ad_section_end --&gt;</description>
 <category domain="http://danielmclaren.com/taxonomy/term/57">Misc</category>
 <pubDate>Tue, 08 Sep 2009 21:30:58 +0000</pubDate>
 <dc:creator>daniel</dc:creator>
 <guid isPermaLink="false">145 at http://danielmclaren.com</guid>
<feedburner:origLink>http://danielmclaren.com/2009/09/08/do-you-have-a-polling-addiction</feedburner:origLink></item>
<item>
 <title>Vancouver Set to Publish Open Datasets</title>
 <link>http://feedproxy.google.com/~r/danielmclaren_blogs/~3/55tbgVPvqFI/vancouver-set-to-publish-open-datasets</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;I attended &lt;a href="http://www.meetup.com/Vancouver-social-media-nonprofits-social-change/" class="external" rel="external"&gt;the Net Tuesday Meetup&lt;/a&gt; last night and got to see a variety of people talk about the cool projects they're undertaking in Vancouver.  Turns out there's a lot going on, but &lt;strong&gt;there was one presentation in particular that struck a chord with me.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.google.com/profiles/tmg.wilson" class="external" rel="external"&gt;Tim Wilson&lt;/a&gt;, Advisor to the Mayor's Office, spoke about &lt;strong&gt;an initiative called "&lt;a href="http://eaves.ca/2009/05/14/vancouver-enters-the-age-of-the-open-city/" class="external" rel="external"&gt;Open3&lt;/a&gt;."&lt;/strong&gt;  This is a motion which was passed by the city back in May and it calls for openness in three major areas:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Open Data:&lt;/strong&gt; Public data will be made publicly available.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Open Standards:&lt;/strong&gt; The city will shift to using open, non-proprietary formats.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Open Source:&lt;/strong&gt; The city will shift to using open source software.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The open source and open standards goals are going to have a huge impact as well, but what I'm really excited about is the open data.  &lt;strong&gt;By giving "we the people" access to our city's public data we can find additional benefits from it that the city might not have the resources to explore.&lt;/strong&gt;  Even simple things like getting a text message reminder to take out the garbage&amp;#8212;an idea Tim mentioned&amp;#8212;can help make life easier.&lt;/p&gt;

&lt;p&gt;Vancouver's not the first city to take part in this movement.  The Obama administration has &lt;a href="http://flowingdata.com/2009/05/21/datagov-is-live-get-your-data-while-its-hot/" class="external" rel="external"&gt;already launched Data.gov&lt;/a&gt; and projects like &lt;a href="http://oakland.crimespotting.org" class="external" rel="external"&gt;Oakland Crimespotting&lt;/a&gt; show what's possible when a city opens the doors.&lt;/p&gt;

&lt;p&gt;Apparently, &lt;strong&gt;the first datasets are set to be released in late September.&lt;/strong&gt;  I'm really excited to see what's going to be available and what kind of useful data visualizations might be possible.&lt;/p&gt;

&lt;p&gt;These are exciting times we live in!&lt;/p&gt;&lt;!-- google_ad_section_end --&gt;</description>
 <category domain="http://danielmclaren.com/category/label/dataviz">DataViz</category>
 <category domain="http://danielmclaren.com/taxonomy/term/43">Events</category>
 <category domain="http://danielmclaren.com/category/label/open-data">Open Data</category>
 <pubDate>Thu, 03 Sep 2009 05:34:40 +0000</pubDate>
 <dc:creator>daniel</dc:creator>
 <guid isPermaLink="false">144 at http://danielmclaren.com</guid>
<feedburner:origLink>http://danielmclaren.com/2009/09/02/vancouver-set-to-publish-open-datasets</feedburner:origLink></item>
<item>
 <title>SketchyD Favourites for August</title>
 <link>http://feedproxy.google.com/~r/danielmclaren_blogs/~3/zJrxvfigMU8/sketchyd-favourites-for-august</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;h2&gt;Shoot Film, Not Bullets&lt;/h2&gt;

&lt;div class="image"&gt;
&lt;a href="http://sketchyd.com/sketch/356" class="external" rel="external"&gt;&lt;img src="http://sketchyd.com/content_images/image356.jpg" width="480" height="360" alt="Shoot Film, Not Bullets" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;This one arose from a conversation with friend and Emily Carr film student, &lt;a href="http://www.vimeo.com/user1440368" class="external" rel="external"&gt;Kyla Plewes&lt;/a&gt;.  We then discovered more English language oddities with the verb "shoot" whose subject can vary between:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;the tool used to shoot a projectile,&lt;/li&gt;
  &lt;li&gt;the projectile itself,&lt;/li&gt;
  &lt;li&gt;the victim.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Strangely, depending on what you're shooting, not all three work.  For instance, you can shoot an arrow but shooting a bow doesn't sound quite right.  Neither does, "shoot your camera."&lt;/p&gt;

&lt;h2&gt;Yoga for Dogs&lt;/h2&gt;

&lt;div class="image"&gt;
&lt;a href="http://sketchyd.com/sketch/352" class="external" rel="external"&gt;&lt;img src="http://sketchyd.com/content_images/image352.jpg" width="480" height="360" alt="Yoga for Dogs" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;The little "doggie boutiques" in Yaletown, Vancouver definitely raise eyebrows.  Some people love to spoil their pets rotten so I didn't think it would be too surprising to see a "Dog Yoga" session pop up.  Well, turns out this idea's been baked.  Check out the video:&lt;/p&gt;

&lt;div style="margin:0 auto;width:425px"&gt;
&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ouccHJYDP7I&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/ouccHJYDP7I&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;

&lt;h2&gt;The Banff Photo-Bombing Squirrel&lt;/h2&gt;

&lt;div class="image"&gt;
&lt;a href="http://sketchyd.com/sketch/355" class="external" rel="external"&gt;&lt;img src="http://sketchyd.com/content_images/image355.jpg" width="480" height="360" alt="Shoot Film, Not Bullets" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Earlier this month, a squirrel crashed a photo in Banff and the shot spread across the internet.  A couple setup their camera on timer to catch the beautiful Lake Minnewanka in the background.  The inquisitive squirrel climbed into the shot and the auto-focus shifted to catch the little creature in a once-in-a-lifetime shot.&lt;/p&gt;

&lt;p&gt;Here's &lt;a href="http://www.cbc.ca/canada/edmonton/story/2009/08/13/squirrel-banff-photo-brandts-geographic.html" class="external" rel="external"&gt;CBC's take on the Banff Squirrel&lt;/a&gt;.&lt;/p&gt;&lt;!-- google_ad_section_end --&gt;</description>
 <category domain="http://danielmclaren.com/taxonomy/term/40">Personal</category>
 <pubDate>Mon, 31 Aug 2009 17:10:23 +0000</pubDate>
 <dc:creator>daniel</dc:creator>
 <guid isPermaLink="false">143 at http://danielmclaren.com</guid>
<feedburner:origLink>http://danielmclaren.com/2009/08/31/sketchyd-favourites-for-august</feedburner:origLink></item>
<item>
 <title>Using ASDoc with MXML Files and Included Scripts</title>
 <link>http://feedproxy.google.com/~r/danielmclaren_blogs/~3/-mQLBupjAZg/using-asdoc-with-mxml-files-and-included-scripts</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;The new ASDoc tool in Flex 4 does a great job getting rid of problems documenting with MXML components.  You can now document projects that contain references to MXML &lt;em&gt;and&lt;/em&gt; you can document the MXML components themselves!&lt;/p&gt;&lt;p&gt;The ASDoc documentation generator tool that ships with Flex is extremely useful but not without its drawbacks.  In Flex 3, ASDoc's support for MXML files is missing completely: not only does it produce no documentation for MXML files, &lt;strong&gt;it won't even compile if your regular ActionScript classes make any references to MXML components.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A lot of custom Flex components are more efficiently expressed in MXML so I didn't want to give up on MXML components because of a problem with ASDoc.  It might be possible to work around this problem using some object-oriented trickery (I think creating Actionscript superclasses might do the trick), however, &lt;strong&gt;there's a much better solution.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In Flex 4, Adobe has addressed the limitations with MXML.  If you download one of the &lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4" class="external" rel="external"&gt;Flex 4 nightly builds&lt;/a&gt;, you'll have the updated ASDoc tool.&lt;/p&gt;

&lt;p&gt;The version I used won't choke on source trees with references to MXML and files.  &lt;strong&gt;Even better, it will produce documentation from comments in the MXML that begin with three hyphens:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="geshifilter"&gt;&lt;pre class="geshifilter-mxml"&gt;&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;---&lt;/span&gt;
      This comment will be found by the new ASDoc tool!
    --&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Check out the &lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/ASDoc+in+MXML" class="external" rel="external"&gt;MXML spec&lt;/a&gt; for more information.  Like the Actionscript inline documentation, you have to put these comments in specific places so the documentation generator knows what to do with them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unfortunately, there are still some problems with the tool.&lt;/strong&gt;  Scripts that you include with a &lt;span class="geshifilter"&gt;&lt;code class="mxml geshifilter-mxml"&gt;&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;mx:Script&lt;/span&gt; &lt;span style="color: #000066;"&gt;source&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;script.as&amp;quot;&lt;/span&gt; &lt;span style="font-weight: bold; color: black;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt; tag aren't handled very well.  If you use modifiers/namespaces like &lt;span class="geshifilter"&gt;&lt;code class="as3 geshifilter-as3"&gt;&lt;span style="color: #0033ff; font-weight: bold;"&gt;public&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;, &lt;span class="geshifilter"&gt;&lt;code class="as3 geshifilter-as3"&gt;&lt;span style="color: #0033ff; font-weight: bold;"&gt;protected&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;, or &lt;span class="geshifilter"&gt;&lt;code class="as3 geshifilter-as3"&gt;static&lt;/code&gt;&lt;/span&gt;, the compiler's going to complain that they're not members of a class.&lt;/p&gt;

&lt;div class="geshifilter"&gt;&lt;pre class="geshifilter-text"&gt;C:\src\script.as(288): col: 1 Error: The private attribute may be used
only on class property definitions.
&amp;nbsp;
private function func():void&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;There are two ways to get around this.  Don't use the "source" attribute to include the script, just paste it directly into your MXML file under a &lt;span class="geshifilter"&gt;&lt;code class="mxml geshifilter-mxml"&gt;&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;mx:Script&lt;/span&gt; &lt;span style="font-weight: bold; color: black;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt; tag.&lt;/p&gt;

&lt;p&gt;I haven't tried option number two but you should be able to define the members and methods on an Actionscript class, and then create an MXML component as a subclass.  Private methods would have to be set to protected.&lt;/p&gt;

&lt;p&gt;Still an annoying drawback as I like to separate MXML and AS3 code but this is a huge improvement!&lt;/p&gt;

&lt;p&gt;By the way, if you're generating AS3 documentation on windows, &lt;strong&gt;this &lt;a href="http://danielmclaren.com/2008/10/21/convenient-flashflex-docs-with-asdoc-and-a-batch-file"&gt;ASDoc batch file example&lt;/a&gt; might be of use to you.&lt;/strong&gt;&lt;/p&gt;&lt;!-- google_ad_section_end --&gt;</description>
 <category domain="http://danielmclaren.com/taxonomy/term/3">AS3</category>
 <category domain="http://danielmclaren.com/taxonomy/term/6">Development</category>
 <category domain="http://danielmclaren.com/category/label/documentation">Documentation</category>
 <category domain="http://danielmclaren.com/taxonomy/term/65">Flex</category>
 <pubDate>Fri, 28 Aug 2009 23:34:55 +0000</pubDate>
 <dc:creator>daniel</dc:creator>
 <guid isPermaLink="false">142 at http://danielmclaren.com</guid>
<feedburner:origLink>http://danielmclaren.com/2009/08/28/using-asdoc-with-mxml-files-and-included-scripts</feedburner:origLink></item>
<item>
 <title>Are Situations the Root of All Evil?</title>
 <link>http://feedproxy.google.com/~r/danielmclaren_blogs/~3/0oAbAmX9S4I/are-situations-the-root-of-all-evil</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;&lt;a href="http://www.ted.com/index.php/talks/philip_zimbardo_on_the_psychology_of_evil.html" class="external" rel="external"&gt;Phillip Zimbardo&lt;/a&gt;'s talk about how ordinary people can become monsters gives interesting insight into humans and evil.  He did some research in a mock prison where he took good, ordinary people and made half of them prisoners and the other half prison guards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Over the course of two weeks, these guards were made to do increasingly terrible and humiliating things to the prisoners.&lt;/strong&gt;  This was obviously done back when psychology experiments weren't regulated to preserve human rights.  Here's the video of his talk at TED, below.&lt;/p&gt;

&lt;div style="margin:0 auto;width:446px"&gt;
&lt;object width="446" height="326"&gt;&lt;param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;param name="bgColor" value="#ffffff"&gt;&lt;/param&gt; &lt;param name="flashvars" value="vu=http://video.ted.com/talks/embed/PhilZimbardo_2008-embed_high.flv&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/PhilZimbardo-2008.embed_thumbnail.jpg&amp;vw=432&amp;vh=240&amp;ap=0&amp;ti=272" /&gt;&lt;embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="446" height="326" allowFullScreen="true" flashvars="vu=http://video.ted.com/talks/embed/PhilZimbardo_2008-embed_high.flv&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/PhilZimbardo-2008.embed_thumbnail.jpg&amp;vw=432&amp;vh=240&amp;ap=0&amp;ti=272"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p class="caption"&gt;Phillip Zimbardo's talk at TED.  His presentation contains very graphic depictions of abuse and violence.  Proceed with caution.&lt;/p&gt;
&lt;/div&gt;

&lt;h2&gt;Zimbardo's Prison Experiment&lt;/h2&gt;

&lt;p&gt;The idea of Zimbardo's experiment was to show that he could take regular citizens and get them to do bad things.  His success echoes that of the Milgram experiments where people were encouraged to administer an electric shock to another person.  There were many variations of the experiment but &lt;strong&gt;a surprisingly large number of people were willing to administer a shock at the maximum voltage when encouraged by a person of authority.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And that person of authority was key.  There had to be an authoritative figure in a lab coat telling the subject to administer the shock.  &lt;strong&gt;Zimbardo also points out that anonymity is an important factor&lt;/strong&gt;: changing your appearance by wearing a uniform, for example, makes it easier to get people to become monsters.&lt;/p&gt;

&lt;h2&gt;Evil in the Real World&lt;/h2&gt;

&lt;div class="image_medium_right"&gt;&lt;a href="http://sketchyd.com/sketch/91" class="external" rel="external"&gt;&lt;img src="/files/public/2009/situational_evil/good_and_evil_icbms.png" width="377" height="283" alt="Good and Evil ICBMs" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Applying these experiments to real life events, it's easier to understand how German officers&amp;#8212;yes, Nazis are people, too&amp;#8212;were able to do such terrible things to their fellow humans during the holocaust.  Same goes for the Abu Ghraib trials.&lt;/p&gt;

&lt;p&gt;It's the situation, then, that allows these people to do evil things.  You would have a terrible time convincing a stranger to, say, punch a random person in the arm.  &lt;strong&gt;But if you set everything up the right way, you get the holocaust.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I think it's also interesting how TV shows like Dexter and Breaking Bad have been able to &lt;strong&gt;get viewers to sympathize with serial killers and drug dealers by associating their evil actions with their situation or history and not the characters themselves.&lt;/strong&gt;  I'm not saying this is a new development but these are the two stories that came first to mind.&lt;/p&gt;

&lt;h2&gt;Breaking the Situations&lt;/h2&gt;

&lt;p&gt;Once you understand where these "evil actions" are coming from, how do you prevent it?  Zimbardo talks briefly about preventing these situations from occurring in the first place.  Definitely a good idea, but I think that we should also rise above our situations.  We are not the sum of our experiences but something more.  I'm not saying it's easy but &lt;strong&gt;we can't blame our actions entirely on our history and the situation we find ourselves in.&lt;/strong&gt;&lt;/p&gt;



&lt;!-- google_ad_section_end --&gt;</description>
 <pubDate>Thu, 27 Aug 2009 08:49:35 +0000</pubDate>
 <dc:creator>daniel</dc:creator>
 <guid isPermaLink="false">141 at http://danielmclaren.com</guid>
<feedburner:origLink>http://danielmclaren.com/2009/08/27/are-situations-the-root-of-all-evil</feedburner:origLink></item>
<item>
 <title>The Scope of this Blog is Expanding</title>
 <link>http://feedproxy.google.com/~r/danielmclaren_blogs/~3/WIxRGneJdWI/the-scope-of-this-blog-is-expanding</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;Currently, this blog is mostly an outlet for programming experiments and a resource for technical tutorials and source code.  Those will continue with their regular irregularity, however, I'm shifting the scope a bit to also include less-technical topics and ideas.&lt;/p&gt;

&lt;p&gt;Hopefully the change isn't unwelcome but you can always subscribe to a particular topic rather than the global feed.  You can do this by clicking the tags you're interested in and finding the RSS icon at the bottom of the page.&lt;/p&gt;

&lt;p&gt;In any case, consider yourself warned.  (-;&lt;/p&gt;&lt;!-- google_ad_section_end --&gt;</description>
 <category domain="http://danielmclaren.com/taxonomy/term/40">Personal</category>
 <pubDate>Tue, 25 Aug 2009 21:56:44 +0000</pubDate>
 <dc:creator>daniel</dc:creator>
 <guid isPermaLink="false">140 at http://danielmclaren.com</guid>
<feedburner:origLink>http://danielmclaren.com/2009/08/25/the-scope-of-this-blog-is-expanding</feedburner:origLink></item>
<item>
 <title>PayPal Can't Handle Identical Home and Business Addresses</title>
 <link>http://feedproxy.google.com/~r/danielmclaren_blogs/~3/fmKeBbefAt0/paypal-cant-handle-identical-home-and-business-addresses</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;This one's for people who use PayPal for their home business.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apparently, the PayPal system isn't able to use the same address for home and business.&lt;/strong&gt;  When I moved, I created a new address, set it as my home address, and updated my credit cards.  Problem was, the old address was still listed as my business address.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;PayPal wouldn't let me delete the old address because I need to have a business address.&lt;/li&gt;
  &lt;li&gt;There was no way to set the new address as my business address.&lt;/li&gt;
  &lt;li&gt;I couldn't edit the old address to match the new address.  PayPal would barf back a message saying, &lt;cite&gt;"To make a change to your address, please select the address you'd like to update and click the "Edit" button below."&lt;/cite&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;The Workaround for Matching Street Addresses in PayPal&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;It looks like the only solution is to make the two address different somehow.&lt;/strong&gt;  Adding or omitting the space in the Canadian postal code doesn't help but I added a zero before my suite number and the PayPal website was fine with that.&lt;/p&gt;

&lt;p&gt;The second time I phoned customer support they did basically the same thing except they put the suite and street numbers on "Address Line 1" and the street under "Address Line 2."&lt;/p&gt;

&lt;p&gt;Another hacky solution but better than the first call: after walking me through the basic steps of changing my address she told me there was a problem with the system and that I should try again tomorrow.&lt;/p&gt;

&lt;p&gt;What did we complain about before customer support?  (-:&lt;/p&gt;&lt;!-- google_ad_section_end --&gt;</description>
 <category domain="http://danielmclaren.com/taxonomy/term/41">Business</category>
 <category domain="http://danielmclaren.com/taxonomy/term/48">Fixes</category>
 <category domain="http://danielmclaren.com/taxonomy/term/40">Personal</category>
 <pubDate>Wed, 01 Jul 2009 17:30:42 +0000</pubDate>
 <dc:creator>daniel</dc:creator>
 <guid isPermaLink="false">139 at http://danielmclaren.com</guid>
<feedburner:origLink>http://danielmclaren.com/2009/07/01/paypal-cant-handle-identical-home-and-business-addresses</feedburner:origLink></item>
<item>
 <title>Import Multiple RSS Feeds into Facebook Notes</title>
 <link>http://feedproxy.google.com/~r/danielmclaren_blogs/~3/wjxerHlr3VI/import-multiple-rss-feeds-into-facebook-notes</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;Facebook's notes application doesn't have a built-in way to handle multiple streams of RSS input.  You only get to choose one URL to import your notes from and that's what appears on your profile.  However, if you've got multiple streams of content you can still have it all published on Facebook.&lt;/p&gt;

&lt;h2&gt;Overview&lt;/h2&gt;

&lt;p&gt;Here's the basic idea for combining your feeds: Google Reader lets you expose aggregated feeds on a public URL.  So we take that URL and hook it up to Facebook notes.  Simple!&lt;/p&gt;

&lt;h2&gt;The Google Reader Side of Things&lt;/h2&gt;

&lt;p&gt;Firing up Reader, you'll first need to subscribe to your own content.  (This is useful for seeing how your stuff looks in feed readers, too!)  Next, you add all these feeds to a single folder using the "Feed settings..." drop down menu.&lt;/p&gt;

&lt;p&gt;Now if you go to settings in the top right corner, there's a tab labeled, "Folders and Tags."  Click the RSS icon beside your folder to make the feed public.  Click "View Public Page" to make sure all your content is actually coming through.&lt;/p&gt;

&lt;p&gt;Finally, click the "Atom Feed" link under your profile information on the right side of the public page.  This is the URL we're going to drop into Facebook.&lt;/p&gt;

&lt;h2&gt;Importing the Feed in Facebook Notes&lt;/h2&gt;

&lt;p&gt;It took me a while to find the import page again: click "Applications" in the bottom left corner in Facebook and choose "Notes."  Now on the right side under the "Write a new note" button you'll find the link to edit your import settings.&lt;/p&gt;

&lt;p&gt;Facebook will probably change the layout again in a few months but for now, that's where you can find it.&lt;/p&gt;

&lt;p&gt;All you have to do now is plug in the atom URL we copied from above, follow the confirmation, and you're good to go.&lt;/p&gt;

&lt;p&gt;Happy publishing.&lt;/p&gt;&lt;!-- google_ad_section_end --&gt;</description>
 <category domain="http://danielmclaren.com/taxonomy/term/41">Business</category>
 <category domain="http://danielmclaren.com/category/label/facebook">Facebook</category>
 <pubDate>Thu, 25 Jun 2009 16:50:05 +0000</pubDate>
 <dc:creator>daniel</dc:creator>
 <guid isPermaLink="false">138 at http://danielmclaren.com</guid>
<feedburner:origLink>http://danielmclaren.com/2009/06/25/import-multiple-rss-feeds-into-facebook-notes</feedburner:origLink></item>
</channel>
</rss>

