<?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>Barklund.org &#187; Trends</title>
	<atom:link href="http://www.barklund.org/blog/category/trends/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.barklund.org/blog</link>
	<description>work smarter when building current web trends</description>
	<lastBuildDate>Wed, 26 May 2010 09:49:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Why events suck in ActionScript 3</title>
		<link>http://www.barklund.org/blog/2010/05/07/events-suck-actionscript-3/</link>
		<comments>http://www.barklund.org/blog/2010/05/07/events-suck-actionscript-3/#comments</comments>
		<pubDate>Thu, 06 May 2010 22:04:45 +0000</pubDate>
		<dc:creator>Barklund</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Trends]]></category>

		<guid isPermaLink="false">http://www.barklund.org/blog/?p=788</guid>
		<description><![CDATA[I&#8217;ve had it with events in ActionScript 3! They are annoying to structure, annoying to extend, annoying to dispatch but most importantly annoying to consume &#8211; and I consume events a lot more than write or dispatch my own. But! The idea of listening for stuff I really do like. I have some ideas about [...]


Related posts:<ol><li><a href='http://www.barklund.org/blog/2009/11/23/link-sharing-spam-facebook/' rel='bookmark' title='Permanent Link: Link sharing spam on Facebook'>Link sharing spam on Facebook</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="attachment_804" class="wp-caption alignright" style="width: 336px"><a href="http://www.barklund.org/blog/wp-content/uploads/2010/05/ignoring_the_event.png"><img src="http://www.barklund.org/blog/wp-content/uploads/2010/05/ignoring_the_event.png" alt="" title="Ignoring the event" width="326" height="93" class="size-full wp-image-804" /></a><p class="wp-caption-text">I actually took this from production code!</p></div>
<p>I&#8217;ve had it with events in ActionScript 3! They are annoying to structure, annoying to extend, annoying to dispatch but most importantly annoying to consume &#8211; and I consume events a lot more than write or dispatch my own.</p>
<p>But! The idea of listening for stuff I really do like. I have some ideas about how this could be done a lot easier. Oh, and please stick around until the very end of this post.</p>
<p><span id="more-788"></span></p>
<h3 id="toc-background">Background</h3>
<p>For those who can&#8217;t remember exactly, events in AS3 are consumed by listening for certain events and passing a function, that will be called when this event occurs. The function will <strong>always</strong> be invoked with the event type, that you listen for &#8211; and only that argument will be given to the callback. You cannot define extra arguments in any way or not accept the event argument. Let&#8217;s for example listen for when the use clicks a button &#8211; which is the <code>MouseEvent.CLICK</code> event (of type <code>MouseEvent</code> of course):</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">init</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
  <span style="color: #6699cc; font-weight: bold;">var</span> myButton<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Sprite</span> = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">Sprite</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
  ...
  myButton.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">MouseEvent</span>.<span style="color: #004993;">CLICK</span>, buttonPressed<span style="color: #000000;">&#41;</span>;
  ...
<span style="color: #000000;">&#125;</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> buttonPressed<span style="color: #000000;">&#40;</span>me<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">MouseEvent</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
  <span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;the button has been pressed, hurray&quot;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>We abidingly accept the <code>me:MouseEvent</code> argument even though we don&#8217;t intend to use it.</p>
<p>The event object has information about the event, about who sent it, information related to the bubbling nature of events (that very few people ever use in ActionScript 3) and additional specific attributes only relevant for specific events. For instance, if we have several buttons representing different related actions, we can examine the <code>event.target</code property to see which of the dispatcher send the event:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> selectRed<span style="color: #000000; font-weight: bold;">:</span>ColorButton;
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> selectGreen<span style="color: #000000; font-weight: bold;">:</span>ColorButton ;
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> selectBlue<span style="color: #000000; font-weight: bold;">:</span>ColorButton;
<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">init</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
  ...
  selectRed.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">MouseEvent</span>.<span style="color: #004993;">CLICK</span>, selectColor<span style="color: #000000;">&#41;</span>;
  selectGreen.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">MouseEvent</span>.<span style="color: #004993;">CLICK</span>, selectColor<span style="color: #000000;">&#41;</span>;
  selectBlue.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">MouseEvent</span>.<span style="color: #004993;">CLICK</span>, selectColor<span style="color: #000000;">&#41;</span>;
  ...
<span style="color: #000000;">&#125;</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> selectColor<span style="color: #000000;">&#40;</span>me<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">MouseEvent</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
  <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">color</span><span style="color: #000000; font-weight: bold;">:</span>ColorButton = me.<span style="color: #004993;">target</span> <span style="color: #0033ff; font-weight: bold;">as</span> ColorButton;
  <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight: bold;">!</span><span style="color: #004993;">color</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
    <span style="color: #0033ff; font-weight: bold;">throw</span> <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">Error</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;color selected was not actually a color&quot;</span><span style="color: #000000;">&#41;</span>;
  <span style="color: #000000;">&#125;</span>
  <span style="color: #0033ff; font-weight: bold;">switch</span> <span style="color: #000000;">&#40;</span><span style="color: #004993;">color</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
    <span style="color: #0033ff; font-weight: bold;">case</span> selectRed<span style="color: #000000; font-weight: bold;">:</span> <span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;you chose a red Papa Smurf&quot;</span><span style="color: #000000;">&#41;</span>; <span style="color: #0033ff; font-weight: bold;">break</span>;
    <span style="color: #0033ff; font-weight: bold;">case</span> selectGreen<span style="color: #000000; font-weight: bold;">:</span> <span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;you chose a green Papa Smurf&quot;</span><span style="color: #000000;">&#41;</span>; <span style="color: #0033ff; font-weight: bold;">break</span>;
    <span style="color: #0033ff; font-weight: bold;">case</span> selectBlue<span style="color: #000000; font-weight: bold;">:</span> <span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;you chose a blue Papa Smurf&quot;</span><span style="color: #000000;">&#41;</span>; <span style="color: #0033ff; font-weight: bold;">break</span>;
  <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Here, we do use the <code>MouseEvent</code>-object, but we cast the target property to the type we expect it to have and then we need to check, if the cast went well. Because, technically we could have used the same function as a listener for something else somewhere else (even though we know we didn't) and thus <code>target</code> could have been something entirely different.</p>
<h3 id="toc-personal-experiences">Personal experiences</h3>
<p>I've just checked a recent, larger project with 185 (home-made) classes. In general I try to minimize my event usage, but a lot of things I have to use events for event though I don't really need them, so I ran a simple script counting how many times I had a function that took an event as an argument, and how many of these actually used the event object. The result was 121 functions accepting an event as argument (10 of those had default null values), and in only 4 of those I actually used the event argument (one of them a <code>KeyboardEvent</code>, the others were all the same home-made <code>PageEvent</code>). 83 of the events accepted were <code>MouseEvent</code>s (which is no surprise), and never was the <code>me:MouseEvent</code> variable used in the function body.</p>
<p>Then, I tested an even earlier project from before I started minimizing event usage (almost maximized it back then). It consisted of 50 (home-made) classes. It had 113 functions (a lot more per class than the above) accepting event arguments (16 of those defaulting to null) and 74 of those were <code>MouseEvent</code>s. And this time around, I used the event argument 25 times, but 18 of these usages were accessing <code>event.target</code> or <code>event.data</code> and casting it to the right class. Thus, yes I did use the event argument in some cases (22% of the time I accepted an argument), but in most of them I still had to do manual casting of the <code>event.target</code> (or <code>event.data</code>) attribute to get the type I knew I was accessing. This leaves only 7 "true" usages or about 6%. Please see the background section about why using the event object for casting only just moves the problem around and makes the code even more verbose.</p>
<h3 id="toc-dream-scenario">Dream scenario</h3>
<p>So, what would I like instead? Something intelligent, that allows me to accept the arguments I need <em>when</em> I need them. For instance, take this snippet here:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">close</span><span style="color: #000000; font-weight: bold;">:</span>CloseButton;
<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">init</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
  <span style="color: #004993;">close</span>.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">MouseEvent</span>.<span style="color: #004993;">CLICK</span>, closeDialog<span style="color: #000000;">&#41;</span>;
<span style="color: #000000;">&#125;</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> closeDialog<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
  someDialog.fadeToOblivion<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>It is simple, I do not need any argument, so I do not expect one.</p>
<p>A often used situation is when you have several instances of the same type and attach the same listener to all of these, then you use the event argument's target attribute for switching on which instance was invoked and handling the result correspondingly:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> downloadLowRes<span style="color: #000000; font-weight: bold;">:</span>DownloadButton;
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> downloadMediumRes<span style="color: #000000; font-weight: bold;">:</span>DownloadButton;
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> downloadHighRes<span style="color: #000000; font-weight: bold;">:</span>DownloadButton;
<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">init</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
  downloadLowRes.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">MouseEvent</span>.<span style="color: #004993;">CLICK</span>, <span style="color: #004993;">download</span><span style="color: #000000;">&#41;</span>;
  downloadMediumRes.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">MouseEvent</span>.<span style="color: #004993;">CLICK</span>, <span style="color: #004993;">download</span><span style="color: #000000;">&#41;</span>;
  downloadHighRes.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">MouseEvent</span>.<span style="color: #004993;">CLICK</span>, <span style="color: #004993;">download</span><span style="color: #000000;">&#41;</span>;
<span style="color: #000000;">&#125;</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">download</span><span style="color: #000000;">&#40;</span>db<span style="color: #000000; font-weight: bold;">:</span>DownloadButton<span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
  <span style="color: #0033ff; font-weight: bold;">switch</span> <span style="color: #000000;">&#40;</span>db<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
    <span style="color: #0033ff; font-weight: bold;">case</span> downloadLowRes<span style="color: #000000; font-weight: bold;">:</span> <span style="color: #004993;">open</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;file_360p.avi&quot;</span><span style="color: #000000;">&#41;</span>; <span style="color: #0033ff; font-weight: bold;">break</span>;
    <span style="color: #0033ff; font-weight: bold;">case</span> downloadMediumRes<span style="color: #000000; font-weight: bold;">:</span> <span style="color: #004993;">open</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;file_720p.avi&quot;</span><span style="color: #000000;">&#41;</span>; <span style="color: #0033ff; font-weight: bold;">break</span>;
    <span style="color: #0033ff; font-weight: bold;">case</span> downloadHighRes<span style="color: #000000; font-weight: bold;">:</span> <span style="color: #004993;">open</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;file_1080p.avi&quot;</span><span style="color: #000000;">&#41;</span>; <span style="color: #0033ff; font-weight: bold;">break</span>;
  <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>The function expects a reference to the button clicked - not to an event, who references the button clicked, because only the actual button reference is necessary.</p>
<p>Finally, a more elaborate example of different other component listeners expecting just what they need and nothing else:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">init</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
  <span style="color: #009900;">// listen for selections in a dropdown</span>
  countryDropdown.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Event</span>.<span style="color: #004993;">SELECT</span>, selectCountry<span style="color: #000000;">&#41;</span>;
&nbsp;
  <span style="color: #009900;">// listen for checkbox changes</span>
  acceptTermsCheckbox.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Event</span>.<span style="color: #004993;">CHANGE</span>, acceptTerms<span style="color: #000000;">&#41;</span>;
&nbsp;
  <span style="color: #009900;">// listen for focus changes between password input fields</span>
  passwordInput.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">FocusEvent</span>.<span style="color: #004993;">FOCUS_OUT</span>, checkPasswords<span style="color: #000000;">&#41;</span>;
  passwordConfirmInput.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">FocusEvent</span>.<span style="color: #004993;">FOCUS_OUT</span>, checkPasswords<span style="color: #000000;">&#41;</span>;
&nbsp;
  <span style="color: #009900;">// listen for three different radio buttons changing</span>
  languageDanish.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Event</span>.<span style="color: #004993;">SELECT</span>, selectLanguage<span style="color: #000000;">&#41;</span>;
  languageSwedish.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Event</span>.<span style="color: #004993;">SELECT</span>, selectLanguage<span style="color: #000000;">&#41;</span>;
  languageNorwegian.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Event</span>.<span style="color: #004993;">SELECT</span>, selectLanguage<span style="color: #000000;">&#41;</span>;
&nbsp;
  <span style="color: #009900;">// listen for submit button presses</span>
  submitButton.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">MouseEvent</span>.<span style="color: #004993;">CLICK</span>, submit<span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span>
<span style="color: #000000;">&#125;</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> selectCountry<span style="color: #000000;">&#40;</span>country<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
  selectedCountry = country;
<span style="color: #000000;">&#125;</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> acceptTerms<span style="color: #000000;">&#40;</span>accepted<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Boolean</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
  termsAccepted = accepted;
<span style="color: #000000;">&#125;</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> checkPassword<span style="color: #000000;">&#40;</span>fe<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">FocusEvent</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
  <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight: bold;">!</span><span style="color: #000000;">&#40;</span>fe.<span style="color: #004993;">relatedObject</span> <span style="color: #0033ff; font-weight: bold;">in</span> <span style="color: #000000;">&#91;</span>passwordInput, passwordConfirmInput<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
    <span style="color: #009900;">// focus moved away from either input field</span>
    <span style="color: #009900;">// show mismatch alert if texts are not the same</span>
    passwordMismatchAlert.<span style="color: #004993;">visible</span> = passwordInput.<span style="color: #004993;">text</span> <span style="color: #000000; font-weight: bold;">!</span>== passwordConfirmInput.<span style="color: #004993;">text</span>;
  <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> selectLanguage<span style="color: #000000;">&#40;</span><span style="color: #004993;">language</span><span style="color: #000000; font-weight: bold;">:</span>LanguageRadioButton<span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
  <span style="color: #0033ff; font-weight: bold;">switch</span> <span style="color: #000000;">&#40;</span><span style="color: #004993;">language</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
    <span style="color: #0033ff; font-weight: bold;">case</span> languageDanish<span style="color: #000000; font-weight: bold;">:</span> <span style="color: #004993;">load</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;texts_da.xml&quot;</span><span style="color: #000000;">&#41;</span>; <span style="color: #0033ff; font-weight: bold;">break</span>;
    <span style="color: #0033ff; font-weight: bold;">case</span> languageSwedish<span style="color: #000000; font-weight: bold;">:</span> <span style="color: #004993;">load</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;texts_se.xml&quot;</span><span style="color: #000000;">&#41;</span>; <span style="color: #0033ff; font-weight: bold;">break</span>;
    <span style="color: #0033ff; font-weight: bold;">case</span> languageNorwegian<span style="color: #000000; font-weight: bold;">:</span> <span style="color: #004993;">load</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;texts_no.xml&quot;</span><span style="color: #000000;">&#41;</span>; <span style="color: #0033ff; font-weight: bold;">break</span>;
  <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> submit<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
  sendForm<span style="color: #000000;">&#40;</span>withParameters<span style="color: #000000;">&#41;</span>;
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>One notable example among the above is, that if an event is needed, you can always have it. I only dislike events, when I don't need them but have to accept them anyway. When I actually need it, they do come quite handy - like the <code>FocusEvent.relatedObject</code> used in the above example.<br />
<h3 id="toc-announcement">Announcement</h3>
<p>Actually, I have made the above work! It is a dirty, dirty triple-hack, but it feels quite sweet to use on both ends. I need to clean it up a lot, need to come up with a good name for it and need to benchmark it to see, that it doesn't kill performance (too much).</p>
<p>So please, stay tuned. But do not fear commenting on the above ideas anyway.</p>


<p>Related posts:<ol><li><a href='http://www.barklund.org/blog/2009/11/23/link-sharing-spam-facebook/' rel='bookmark' title='Permanent Link: Link sharing spam on Facebook'>Link sharing spam on Facebook</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.barklund.org/blog/2010/05/07/events-suck-actionscript-3/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>I like Facebook</title>
		<link>http://www.barklund.org/blog/2010/05/03/i-like-facebook/</link>
		<comments>http://www.barklund.org/blog/2010/05/03/i-like-facebook/#comments</comments>
		<pubDate>Mon, 03 May 2010 08:16:03 +0000</pubDate>
		<dc:creator>Barklund</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Trends]]></category>

		<guid isPermaLink="false">http://www.barklund.org/blog/?p=770</guid>
		<description><![CDATA[Well, yes and no. Actually I do like Facebook, but this is about the new Like-button and how you can like anything. But what&#8217;s the difference between &#8220;approved&#8221; partners and the rest of us? Anyone can add the new like functionality to their website &#8211; as I have in the right column just below the [...]


Related posts:<ol><li><a href='http://www.barklund.org/blog/2009/11/23/link-sharing-spam-facebook/' rel='bookmark' title='Permanent Link: Link sharing spam on Facebook'>Link sharing spam on Facebook</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/25/facebook-notes-images-competition-january-2010-idea/' rel='bookmark' title='Permanent Link: Facebook Notes and Images for Competition Results &#8211; January 2010 Ideas'>Facebook Notes and Images for Competition Results &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/02/12/vimeo-vulnerable-csrf/' rel='bookmark' title='Permanent Link: Vimeo highly vulnerable to CSRF attacks &#8211; now fixed'>Vimeo highly vulnerable to CSRF attacks &#8211; now fixed</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Well, yes and no. Actually I do like Facebook, but this is about the new Like-button and how you can like anything. But what&#8217;s the difference between &#8220;approved&#8221; partners and the rest of us?</p>
<p><span id="more-770"></span></p>
<p>Anyone can add the new like functionality to their website &#8211; as I have in the right column just below the share options. And as you can see on <a href="/blog/" title="Home of Barklund.org">the front page</a> in the &#8220;recommendations&#8221; box, someone likes (mostly me for this purpose) different parts of my website. But what is the difference between the likes on my page and the likes of IMDb movies like <a href="http://www.imdb.com/title/tt0068646/">The Godfather</a>, which has 741 likes at current?</p>
<p>Well, one major difference is that I can &#8220;tag&#8221; The Godfather in my status, but not pages from my website (here trying to tag <a href="/blog/2010/04/23/ipad-detection/" title="iPad detection from Barklund.org"></a>.</p>
<p><img src="http://www.barklund.org/blog/wp-content/uploads/2010/05/Screen-shot-2010-05-03-at-09.41.48-300x50.png" alt="Godfather is tagged, but no suggestions for &quot;iPad&quot;" title="Facebook tagging" width="300" height="49" class="aligncenter size-medium wp-image-777" /></p>
<p>And it is not just a question of my website being very small and with few interactions, because if I create a like button for an external website such as the video <a href="http://www.thedailyshow.com/watch/thu-march-18-2010/conservative-libertarian">Conservative Libertarian</a> from <a href="http://www.thedailyshow.com/">The Daily Show</a>:</p>
<div style="border: 1px solid lightgrey; padding: 3px"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.thedailyshow.com%2Fwatch%2Fthu-march-18-2010%2Fconservative-libertarian&amp;layout=standard&amp;show_faces=false&amp;width=300&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:300px; height:30px;"></iframe></div>
<p>Because, even though 25,069 people like this video alongside me (yes, <a href="http://api.facebook.com/restserver.php?method=links.getStats&#038;urls=http://www.thedailyshow.com/watch/thu-march-18-2010/conservative-libertarian">it really has that many likes</a>!), it still cannot be tagged:</p>
<p><img src="http://www.barklund.org/blog/wp-content/uploads/2010/05/Screen-shot-2010-05-03-at-09.48.58-300x49.png" alt="Facebook tagging of high-profile non-partner website" title="Facebook tagging of high-profile non-partner website" width="300" height="49" class="aligncenter size-medium wp-image-777" /></p>
<p>Further more, Facebook just today launched, that pages are integrated much nicer on your user info tab including former and present employers, educational institutions, cities etc as well as organizing all the pages you like &#8211; internal and external. Some partner external pages you like are correctly displayed in the categories where they belong &#8211; e.g. movies and television series:</p>
<p><img src="http://www.barklund.org/blog/wp-content/uploads/2010/05/Screen-shot-2010-05-03-at-10.11.02-300x53.png" alt="The movies from my info tab - some imdb, some internal, nothing else" title="The movies from my info tab" width="300" height="53" class="aligncenter size-medium wp-image-781" /></p>
<p>But other external pages that you like are now not displayed at all (they were yesterday) &#8211; including external partner pages like youtube videos or CNN articles. It does make sense though, as both these are temporary, but what if you have a website of movie recommendations, wouldn&#8217;t it be nice, that if a user liked one these individual posts, it would show up in the user&#8217;s &#8220;movies&#8221; info section?</p>
<p>So, is there any other difference between being a partner website and just a regular website other than the inability to tag the pages and not be able to have them shown on your info tab?</p>


<p>Related posts:<ol><li><a href='http://www.barklund.org/blog/2009/11/23/link-sharing-spam-facebook/' rel='bookmark' title='Permanent Link: Link sharing spam on Facebook'>Link sharing spam on Facebook</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/25/facebook-notes-images-competition-january-2010-idea/' rel='bookmark' title='Permanent Link: Facebook Notes and Images for Competition Results &#8211; January 2010 Ideas'>Facebook Notes and Images for Competition Results &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/02/12/vimeo-vulnerable-csrf/' rel='bookmark' title='Permanent Link: Vimeo highly vulnerable to CSRF attacks &#8211; now fixed'>Vimeo highly vulnerable to CSRF attacks &#8211; now fixed</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.barklund.org/blog/2010/05/03/i-like-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPad detection the right way</title>
		<link>http://www.barklund.org/blog/2010/04/23/ipad-detection/</link>
		<comments>http://www.barklund.org/blog/2010/04/23/ipad-detection/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 09:22:34 +0000</pubDate>
		<dc:creator>Barklund</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Konstellation]]></category>
		<category><![CDATA[Regular Expressions]]></category>
		<category><![CDATA[Trends]]></category>

		<guid isPermaLink="false">http://www.barklund.org/blog/?p=760</guid>
		<description><![CDATA[Here at Konstellation, we just launched the PageGangster for mobile devices including iPad, iPhone, iPod touch and Android. I developed the clientside for this in JavaScript and we launched it with automatic user agent detection serverside. But this had some problems. I read some info about this and conclude, that some iPad user agent strings [...]


Related posts:<ol><li><a href='http://www.barklund.org/blog/2009/11/23/iphone-developer-boycott-in-the-works/' rel='bookmark' title='Permanent Link: The iPhone developer boycott in the works'>The iPhone developer boycott in the works</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/11/coordinate-proxy-january-2010-idea/' rel='bookmark' title='Permanent Link: Coordinate-Proxy &#8211; January 2010 Ideas'>Coordinate-Proxy &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/07/app-idea-store-january-2010-idea/' rel='bookmark' title='Permanent Link: App Idea Store &#8211; January 2010 Ideas'>App Idea Store &#8211; January 2010 Ideas</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="attachment_766" class="wp-caption alignright" style="width: 160px"><img src="http://www.barklund.org/blog/wp-content/uploads/2010/04/ipad-300x241.jpg" alt="iPad in action" title="iPad" width="150" height="120" class="size-medium wp-image-766" /><p class="wp-caption-text">The famous large flat thing slightly more useful than a rock</p></div>
<p>Here at <a href="http://konstellation.dk/" title="Konstellation homepage">Konstellation</a>, we just launched the <a href="http://pagegangster.com" title="PageGangster - convert your PDF to an experience">PageGangster</a> for <a href="http://www.pagegangster.com/mobile-devices/" title="Introduction about PageGangster for mobile devices">mobile devices</a> including iPad, iPhone, iPod touch and Android. I developed the clientside for this in JavaScript and we launched it with automatic user agent detection serverside. But this had some problems.</p>
<p><span id="more-760"></span></p>
<p>I read <a href="http://www.nczonline.net/blog/2010/04/06/ipad-web-development-tips/" title="iPad web development tips from nczonline.net">some info</a> about this and conclude, that some iPad user agent strings include the word &#8220;iPhone&#8221; and some users of all types of devices fake their user agent strings.</p>
<p>But then I read on the above link, that no matter what, the <code>navigator.platform</code> attribute would always be set to the right type of device. So in the regular web version of the publication viewer we have now (which uses Flash), we have added a JavaScript detecting if the serverside script did not redirect the client properly:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>navigator <span style="color: #339933;">&amp;&amp;</span> navigator.<span style="color: #660066;">platform</span> <span style="color: #339933;">&amp;&amp;</span> navigator.<span style="color: #660066;">platform</span>.<span style="color: #660066;">match</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^(iPad|iPod|iPhone)$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	location.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span>location.<span style="color: #660066;">href</span><span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;?force-mobile&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>It seems simple, but solves the problem of some users seeing the dreaded blue box instead of their publication optimized for their device.</p>
<p>On another node, this experience of developing a web application for the iPad/iPhone was very rewarding and I gained many insights, which might spawn other posts. And if you have any questions about it in any way, feel free to ask here &#8211; but please do not submit bug reports about the PageGangster for mobile &#8211; do that via <a href="mailto:info@pagegangster.com">info@pagegangster.com</a> instead.</p>


<p>Related posts:<ol><li><a href='http://www.barklund.org/blog/2009/11/23/iphone-developer-boycott-in-the-works/' rel='bookmark' title='Permanent Link: The iPhone developer boycott in the works'>The iPhone developer boycott in the works</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/11/coordinate-proxy-january-2010-idea/' rel='bookmark' title='Permanent Link: Coordinate-Proxy &#8211; January 2010 Ideas'>Coordinate-Proxy &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/07/app-idea-store-january-2010-idea/' rel='bookmark' title='Permanent Link: App Idea Store &#8211; January 2010 Ideas'>App Idea Store &#8211; January 2010 Ideas</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.barklund.org/blog/2010/04/23/ipad-detection/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Vimeo highly vulnerable to CSRF attacks &#8211; now fixed</title>
		<link>http://www.barklund.org/blog/2010/02/12/vimeo-vulnerable-csrf/</link>
		<comments>http://www.barklund.org/blog/2010/02/12/vimeo-vulnerable-csrf/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 00:33:36 +0000</pubDate>
		<dc:creator>Barklund</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Flash Platform]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.barklund.org/blog/?p=683</guid>
		<description><![CDATA[I recently found, that vimeo.com had a cross-domain policy, that allowed anyone to connect, which was an open invitation for CSRF attacks. I alerted them to the issue, and it has now been fixed. As has been said over and over, allow-all cross-domain policy files should never be used on domains, where users log on. [...]


Related posts:<ol><li><a href='http://www.barklund.org/blog/2009/07/15/sys-con-aral-balkan-stupidity-ignorance/' rel='bookmark' title='Permanent Link: Sys-Con once again attacks Aral Balkan with stupidity and ignorance'>Sys-Con once again attacks Aral Balkan with stupidity and ignorance</a></li>
<li><a href='http://www.barklund.org/blog/2009/11/23/link-sharing-spam-facebook/' rel='bookmark' title='Permanent Link: Link sharing spam on Facebook'>Link sharing spam on Facebook</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/10/re-youtube-january-2010-idea/' rel='bookmark' title='Permanent Link: Re-Youtube &#8211; January 2010 Ideas'>Re-Youtube &#8211; January 2010 Ideas</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p> I recently found, that <a href="http://vimeo.com/">vimeo.com</a> had a cross-domain policy, that allowed anyone to connect, which was an open invitation for CSRF attacks. I alerted them to the issue, and it has now been fixed.</p>
<p><span id="more-683"></span></p>
<p>As has been said <a href="http://shiflett.org/blog/2006/sep/the-dangers-of-cross-domain-ajax-with-flash">over</a> and <a href="http://shiflett.org/blog/2009/nov/facebook-myspace-and-crossdomain.xml">over</a>, allow-all cross-domain policy files should never be used on domains, where users log on. This leaves the site open for <a href="http://en.wikipedia.org/wiki/Cross-site_request_forgery">CSRF attacks</a> from flash clients on different domains, that can load pages from the target domain utilizing the user&#8217;s automated log-in and thus the flash load&#8217;s the pages, like the user himself would. This not only allows the flash file to (without the user knowing it) load all his private information from the target site, but potentially also post data to the site, which could include updating the user&#8217;s password, email, profile or in worse circumstances add/remove content or even make purchases, if the target site has any feature like that.
<p>This has been done against large sites like Facebook, MySpace, Adobe and Youtube &#8211; the latter was ironically <a href="http://www.vimeo.com/1762861">documented via a video on Vimeo</a> by Jeremiah Grossman.</p>
<p>In Vimeo&#8217;s case, you can &#8220;only&#8221; upload videos, but an attacker could actually perform any action on the user&#8217;s behalf, that the user himself could &#8211; including changing the user&#8217;s bio, add/remove videos, comment on/like other videos etc. I made a <a href="http://barklund.org/examples/fun_with_vimeo/fun_with_vimeo.html">small, seemingly innocent page</a>, that included a hidden flash element, which first loaded the user&#8217;s info from <a href="http://vimeo.com/settings/personal">vimeo.com/settings/personal</a> and then re-posted this info back to the same page adding an extra line to the bio &#8211; namely &#8220;You have been bwned&#8221;, as it can seen on <a href="http://vimeo.com/barklund">my vimeo profil</a>e.</p>
<p>Someone at vimeo has clearly seen this demo, (<a href="http://vimeo.com/julia">Julia Quinn has indeed</a>) and now <a href="http://vimeo.com/crossdomain.xml">the cross-domain policy only allows *.vimeo.com</a> (the new file is served with a Last-Modified timestamp of <code>Thu, 11 Feb 2010 23:32:05 GMT</code>, so the change is only an hour old). The strange thing is, that if you go back via <a href="http://web.archive.org/">the Wayback Machine from archive.org</a>, you can see, that they had much better security back <a href="http://web.archive.org/web/20070224144110/http://www.vimeo.com/crossdomain.xml">in 2007</a> and <a href="http://web.archive.org/web/20080610033603/http://www.vimeo.com/crossdomain.xml">2008</a> (html render fails, but view source), so I have no idea how such a relaxed policy suddenly appeared on their site. <a href="http://74.125.77.132/search?q=cache:Kssyyl60UAUJ:www.vimeo.com/crossdomain.xml">Google&#8217;s cache still show the allow-all policy</a> as it dates back to January 20th (again, view source to see contents).</p>
<p>I found this while playing around attempting to load videos from Vimeo directly in a custom FLV-player on a different host than vimeo.com and found that this was actually possible, as all videos from their site are hosted from av.vimeo.com and this has an allow-all cross-domain policy. And this makes sense, as this domain is only used for serving videos and nothing else &#8211; no cookies or authentication info shared to this domain.</p>
<p>I haven&#8217;t heard from Vimeo yet &#8211; neither stating that they are looking at the issue nor that it has been fixed. I only post this after now seeing, that it has been fixed.</p>


<p>Related posts:<ol><li><a href='http://www.barklund.org/blog/2009/07/15/sys-con-aral-balkan-stupidity-ignorance/' rel='bookmark' title='Permanent Link: Sys-Con once again attacks Aral Balkan with stupidity and ignorance'>Sys-Con once again attacks Aral Balkan with stupidity and ignorance</a></li>
<li><a href='http://www.barklund.org/blog/2009/11/23/link-sharing-spam-facebook/' rel='bookmark' title='Permanent Link: Link sharing spam on Facebook'>Link sharing spam on Facebook</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/10/re-youtube-january-2010-idea/' rel='bookmark' title='Permanent Link: Re-Youtube &#8211; January 2010 Ideas'>Re-Youtube &#8211; January 2010 Ideas</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.barklund.org/blog/2010/02/12/vimeo-vulnerable-csrf/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>NYT Article Trend Charts &#8211; January 2010 Ideas</title>
		<link>http://www.barklund.org/blog/2010/01/29/nyt-article-trend-charts-january-2010-idea/</link>
		<comments>http://www.barklund.org/blog/2010/01/29/nyt-article-trend-charts-january-2010-idea/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 08:00:47 +0000</pubDate>
		<dc:creator>Barklund</dc:creator>
				<category><![CDATA[January 2010 Ideas]]></category>
		<category><![CDATA[Mashup]]></category>
		<category><![CDATA[Trends]]></category>

		<guid isPermaLink="false">http://www.barklund.org/blog/?p=670</guid>
		<description><![CDATA[The twenty-nineth idea for my 365 social ideas is a classic mashup: CatScanner, a charting application and the New York Times Article Search. The charting application could very likely be the previously mentioned Infographic Charting Service for better results (it could actually be built into this service) or it could be build stand-alone using any [...]


Related posts:<ol><li><a href='http://www.barklund.org/blog/2010/01/09/comment-on-everything-january-2010-idea/' rel='bookmark' title='Permanent Link: Comment On Everything &#8211; January 2010 Ideas'>Comment On Everything &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/23/google-docs-application-january-2010-idea/' rel='bookmark' title='Permanent Link: Google Docs Application &#8211; January 2010 Ideas'>Google Docs Application &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/22/social-traffic-analyzer-january-2010-idea/' rel='bookmark' title='Permanent Link: Social Traffic Analyzer &#8211; January 2010 Ideas'>Social Traffic Analyzer &#8211; January 2010 Ideas</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>The twenty-nineth idea for my <a href="/blog/365ideas/" title="365 Social Ideas from Barklund.org">365 social ideas</a> is a classic mashup: CatScanner, a charting application and the New York Times Article Search. The charting application could very likely be the previously mentioned Infographic Charting Service for better results (it could actually be built into this service) or it could be build stand-alone using any classic charting API like Google Charts.</p>
<p><span id="more-670"></span></p>
<p>Creating cool charts displaying the frequency of articles about Obama vs. McCain or comparing the articles about Obama in his first year vs. previous presidents NYT coverage in their first year are common and quite easy to do. But as previously explained about Twitter Trends, you cannot find what you don&#8217;t know you&#8217;re looking for. Let&#8217;s say we want to see how many articles are posted in NYT about Democrats vs. Republicans. Well, you could search for popular names from both parties, or you could hope that the writers have tagged their articles correctly.</p>
<p>But we can do better than that, as the Wikipedia category system will give us names of most politicians from both parties. Thus we can use these lists to create large queries about all Democrats vs. all Republicans and receive these numbers correctly.</p>
<h4 id="toc-why">Why?</h4>
<p>This is a classic mashup displaying the power of combining commercial content (NYT articles) with crowd-sourced information (Wikipedia CatScanner) with generalized tools (charting API&#8217;s like Google Charts) with little effort for huge results. And this puts cretaing complicated charts back in the hands of everyone, not just the few who are good at both API&#8217;s and PhotoShop.</p>
<h4 id="toc-whats-next">What&#8217;s next?</h4>
<p>Do with this idea whatever you like &#8211; expand, implement, trash or forget. Just remember, that if you use it in anyway make sure to attribute me according to the Creative Commons Attribution 3.0 License, that all these <a href="/blog/365ideas" title="365 Social Ideas from Barklund.org">365 Social Ideas</a> are published under.</p>


<p>Related posts:<ol><li><a href='http://www.barklund.org/blog/2010/01/09/comment-on-everything-january-2010-idea/' rel='bookmark' title='Permanent Link: Comment On Everything &#8211; January 2010 Ideas'>Comment On Everything &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/23/google-docs-application-january-2010-idea/' rel='bookmark' title='Permanent Link: Google Docs Application &#8211; January 2010 Ideas'>Google Docs Application &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/22/social-traffic-analyzer-january-2010-idea/' rel='bookmark' title='Permanent Link: Social Traffic Analyzer &#8211; January 2010 Ideas'>Social Traffic Analyzer &#8211; January 2010 Ideas</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.barklund.org/blog/2010/01/29/nyt-article-trend-charts-january-2010-idea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Turn (Closed) Content Into an API &#8211; January 2010 Ideas</title>
		<link>http://www.barklund.org/blog/2010/01/28/turn-content-into-api-january-2010-idea/</link>
		<comments>http://www.barklund.org/blog/2010/01/28/turn-content-into-api-january-2010-idea/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 08:00:56 +0000</pubDate>
		<dc:creator>Barklund</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[January 2010 Ideas]]></category>
		<category><![CDATA[Online Rights]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.barklund.org/blog/?p=675</guid>
		<description><![CDATA[The twenty-eighth idea for my 365 social ideas is about the open web and about &#8220;forcing&#8221; classic websites to export their data. Imagine sites with lots of useful information, that is frequently updated, but is hidden away behind forms, in PDF&#8217;s or in hard-to-scrape tables. Then imagine a website, where you could provide this address, [...]


Related posts:<ol><li><a href='http://www.barklund.org/blog/2010/01/11/coordinate-proxy-january-2010-idea/' rel='bookmark' title='Permanent Link: Coordinate-Proxy &#8211; January 2010 Ideas'>Coordinate-Proxy &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/18/open-data-january-2010-idea/' rel='bookmark' title='Permanent Link: Open Data &#8211; January 2010 Ideas'>Open Data &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/04/social-subway-january-2010-idea/' rel='bookmark' title='Permanent Link: Social Subway &#8211; January 2010 Ideas'>Social Subway &#8211; January 2010 Ideas</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>The twenty-eighth idea for my <a href="/blog/365ideas/" title="365 Social Ideas from Barklund.org">365 social ideas</a> is about the <a href="/blog/2010/01/18/open-data-january-2010-idea/">open web</a> and about &#8220;forcing&#8221; classic websites to export their data. Imagine sites with lots of useful information, that is frequently updated, but is hidden away behind forms, in PDF&#8217;s or in hard-to-scrape tables. Then imagine a website, where you could provide this address, and give it some guidance as to how to input data in forms and how to interpret the results. And then imagine, that this website would act as a proxy with this interaction described as a simple, queryable API and then behind the scenes would fetch data from the original website.</p>
<p><span id="more-675"></span></p>
<p>There are of course a lot of legal issues, and such a service should probably obey robots.txt. And there should be a very clear opt-out possibility for websites that have been targeted in user-contributed additions &#8211; maybe even moderation before the services are publicly available. It should not be seen as an attack vector, as a proxy method for illegal purposes or anything like that, but simply as a way of &#8220;helping&#8221; free information to be used freely.</p>
<h4 id="toc-why">Why?</h4>
<p>A lot of data on the web is hidden in the so-called <a href="http://en.wikipedia.org/wiki/Deep_web">&#8220;deep web&#8221;</a> behind forms or in inaccessible parts of websites. With a service like the above-mentioned, this would suddenly not only become visible and indexable, but even queryable.</p>
<h4 id="toc-whats-next">What&#8217;s next?</h4>
<p>Do with this idea whatever you like &#8211; expand, implement, trash or forget. Just remember, that if you use it in anyway make sure to attribute me according to the Creative Commons Attribution 3.0 License, that all these <a href="/blog/365ideas" title="365 Social Ideas from Barklund.org">365 Social Ideas</a> are published under.</p>


<p>Related posts:<ol><li><a href='http://www.barklund.org/blog/2010/01/11/coordinate-proxy-january-2010-idea/' rel='bookmark' title='Permanent Link: Coordinate-Proxy &#8211; January 2010 Ideas'>Coordinate-Proxy &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/18/open-data-january-2010-idea/' rel='bookmark' title='Permanent Link: Open Data &#8211; January 2010 Ideas'>Open Data &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/04/social-subway-january-2010-idea/' rel='bookmark' title='Permanent Link: Social Subway &#8211; January 2010 Ideas'>Social Subway &#8211; January 2010 Ideas</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.barklund.org/blog/2010/01/28/turn-content-into-api-january-2010-idea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Infographic Charting Service &#8211; January 2010 Ideas</title>
		<link>http://www.barklund.org/blog/2010/01/26/infographic-charting-service-january-2010-idea/</link>
		<comments>http://www.barklund.org/blog/2010/01/26/infographic-charting-service-january-2010-idea/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 08:00:28 +0000</pubDate>
		<dc:creator>Barklund</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[January 2010 Ideas]]></category>
		<category><![CDATA[Trends]]></category>

		<guid isPermaLink="false">http://www.barklund.org/blog/?p=666</guid>
		<description><![CDATA[The twenty-sixth idea for my 365 social ideas is a new brand of charting service: A service designed for infographics, but with sharing, collaboration and synergy as an added side-effect. The idea is to create a site enabling users to create infographics of the simplest kind initially, but then expand this to even more complex [...]


Related posts:<ol><li><a href='http://www.barklund.org/blog/2010/01/07/app-idea-store-january-2010-idea/' rel='bookmark' title='Permanent Link: App Idea Store &#8211; January 2010 Ideas'>App Idea Store &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/18/open-data-january-2010-idea/' rel='bookmark' title='Permanent Link: Open Data &#8211; January 2010 Ideas'>Open Data &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/29/nyt-article-trend-charts-january-2010-idea/' rel='bookmark' title='Permanent Link: NYT Article Trend Charts &#8211; January 2010 Ideas'>NYT Article Trend Charts &#8211; January 2010 Ideas</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>The twenty-sixth idea for my <a href="/blog/365ideas/" title="365 Social Ideas from Barklund.org">365 social ideas</a> is a new brand of charting service: A service designed for infographics, but with sharing, collaboration and synergy as an added side-effect.</p>
<p><span id="more-666"></span></p>
<p>The idea is to create a site enabling users to create infographics of the simplest kind initially, but then expand this to even more complex ones. For starters, it could allow users to create tables of data defining row and column labels and then selecting icons, colors and values for cells and having this displayed as larger and smaller icons according to the values &#8211; like <a href="http://www.flickr.com/photos/25541021@N00/4100671193/sizes/o/">this chart of the &#8220;deadliest drugs&#8221;</a>. And allowing people to color-code maps of countries, cities or states according to some data would be quite simple to do as well &#8211; like <a href="http://i258.photobucket.com/albums/hh275/pizzler/Languages_of_Europe.png">this map of the origins and relationships of European languages</a>.</p>
<p>But more important than simply creating cool visualizations, each infographic has an input page. This page can only be edited by the original creator of the infographic, but it includes direct links to sources of information used. The site should use a simple url structure (<a href="http://bit.ly/pages/faq/" title="See second question">inspired by bit.ly</a>), where the short-code would give the actual image, but with a + added (like <a href="http://bit.ly/365ideas+">http://bit.ly/365ideas+</a>) it would be a link to the page describing all this background data.</p>
<p>And now comes the collaborative part: While only the creator can edit the data for the published infographic, anyone can copy the data to branch it as their own new infographic. These relationships will then also be displayed on the about page, as in &#8220;this is a spin-off of X and has Y spin-offs of its own&#8221;. Somewhat like the very nice ActionScript-programming website <a href="http://wonderfl.net">wonderfl</a>. Here you can e.g. see that <a href="http://wonderfl.net/code/d8be827191df7785f6b0b4b04c25ba9bf6f66abf">this creation of 250,000 particles</a> is a spin-off from another simulation and has itself spun off into new simulations.</p>
<p>In time, this could be extended heavily and should of course have a public API for creating infographics easily and freely. New types of infographics could be added along with more complex editors allowing you to play around with the data as you see fit. It should be free to do and should not require complex knowledge of Illustrator or Photoshop.</p>
<p>This idea about letting others built on your own ideas could actually be implemented by many sites. The new Firefox 3.6 has <a href="http://www.getpersonas.com/en-US/">&#8220;personas&#8221;</a>, which is a very light theme engine &#8211; that most importantly does not require restart! But why didn&#8217;t the developers add a very fast and quick branching mechanism? If you found a cool persona, but didn&#8217;t like the color of the top-bar &#8211; just branch it, change the top-bar color and publish as a new persona (with credit where credit is due of course linking back to the original).</p>
<h4 id="toc-why">Why?</h4>
<p>Simply: Infographics to the people! I&#8217;m not suggesting, that the creators of the coolest infographics aren&#8217;t brilliant. But they&#8217;re in the business because they both know how to find the data, how to present it and how to use the programs needed to create them. Let&#8217;s take the software knowledge part out of the equation and allow anyone with ideas and info to visualize it. And let&#8217;s do it openly and collaborate, not just publish a PNG and kill innovation.</p>
<h4 id="toc-whats-next">What&#8217;s next?</h4>
<p>Do with this idea whatever you like &#8211; expand, implement, trash or forget. Just remember, that if you use it in anyway make sure to attribute me according to the Creative Commons Attribution 3.0 License, that all these <a href="/blog/365ideas" title="365 Social Ideas from Barklund.org">365 Social Ideas</a> are published under.</p>


<p>Related posts:<ol><li><a href='http://www.barklund.org/blog/2010/01/07/app-idea-store-january-2010-idea/' rel='bookmark' title='Permanent Link: App Idea Store &#8211; January 2010 Ideas'>App Idea Store &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/18/open-data-january-2010-idea/' rel='bookmark' title='Permanent Link: Open Data &#8211; January 2010 Ideas'>Open Data &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/29/nyt-article-trend-charts-january-2010-idea/' rel='bookmark' title='Permanent Link: NYT Article Trend Charts &#8211; January 2010 Ideas'>NYT Article Trend Charts &#8211; January 2010 Ideas</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.barklund.org/blog/2010/01/26/infographic-charting-service-january-2010-idea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook Notes and Images for Competition Results &#8211; January 2010 Ideas</title>
		<link>http://www.barklund.org/blog/2010/01/25/facebook-notes-images-competition-january-2010-idea/</link>
		<comments>http://www.barklund.org/blog/2010/01/25/facebook-notes-images-competition-january-2010-idea/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 08:00:43 +0000</pubDate>
		<dc:creator>Barklund</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[January 2010 Ideas]]></category>

		<guid isPermaLink="false">http://www.barklund.org/blog/?p=660</guid>
		<description><![CDATA[The twenty-fifth idea for my 365 social ideas is a small simple idea: use Facebook notes or images combined with tags to display results of games. For instance, imagine a chess game, post the result of the game as a note on the game&#8217;s page with the final board, all moves made during the game [...]


Related posts:<ol><li><a href='http://www.barklund.org/blog/2010/01/15/twitter-gaming-mechanic-january-2010-idea/' rel='bookmark' title='Permanent Link: A Twitter Gaming Mechanic &#8211; January 2010 Ideas'>A Twitter Gaming Mechanic &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/13/game-console-api-social-connectivity-january-2010-idea/' rel='bookmark' title='Permanent Link: Game Console Progress API for Social Connectivity &#8211; January 2010 Ideas'>Game Console Progress API for Social Connectivity &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/21/game-of-life-january-2010-idea/' rel='bookmark' title='Permanent Link: Game of Life &#8211; January 2010 Ideas'>Game of Life &#8211; January 2010 Ideas</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>The twenty-fifth idea for my <a href="/blog/365ideas/" title="365 Social Ideas from Barklund.org">365 social ideas</a> is a small simple idea: use Facebook notes or images combined with tags to display results of games. For instance, imagine a chess game, post the result of the game as a note on the game&#8217;s page with the final board, all moves made during the game and both players tagged. Or simply post the final board as an image and tag both players as well.</p>
<p><span id="more-660"></span></p>
<p>It is a very simple idea, but the idea is to use profile tagging in a new way to indicate relationships to the displayed information in a way, that the users actually feel related to this. The great thing about using tagging is, that it can be done without the user has to accept it and it will be auto-posted to his friends&#8217; news feeds. But given that it can be done without asking the user, it should only be done if it is actually relevant for the user and not done just to get a viral effect and annoy users.</p>
<h4 id="toc-why">Why?</h4>
<p>It is a new way to use the Facebook platform for viral effects. It&#8217;s quite simple and does not require a lot of programming as it uses simple, existing features.</p>
<h4 id="toc-whats-next">What&#8217;s next?</h4>
<p>Do with this idea whatever you like &#8211; expand, implement, trash or forget. Just remember, that if you use it in anyway make sure to attribute me according to the Creative Commons Attribution 3.0 License, that all these <a href="/blog/365ideas" title="365 Social Ideas from Barklund.org">365 Social Ideas</a> are published under.</p>


<p>Related posts:<ol><li><a href='http://www.barklund.org/blog/2010/01/15/twitter-gaming-mechanic-january-2010-idea/' rel='bookmark' title='Permanent Link: A Twitter Gaming Mechanic &#8211; January 2010 Ideas'>A Twitter Gaming Mechanic &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/13/game-console-api-social-connectivity-january-2010-idea/' rel='bookmark' title='Permanent Link: Game Console Progress API for Social Connectivity &#8211; January 2010 Ideas'>Game Console Progress API for Social Connectivity &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/21/game-of-life-january-2010-idea/' rel='bookmark' title='Permanent Link: Game of Life &#8211; January 2010 Ideas'>Game of Life &#8211; January 2010 Ideas</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.barklund.org/blog/2010/01/25/facebook-notes-images-competition-january-2010-idea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Private Comment Sharing &#8211; January 2010 Ideas</title>
		<link>http://www.barklund.org/blog/2010/01/24/private-comment-sharing-january-2010-idea/</link>
		<comments>http://www.barklund.org/blog/2010/01/24/private-comment-sharing-january-2010-idea/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 08:00:43 +0000</pubDate>
		<dc:creator>Barklund</dc:creator>
				<category><![CDATA[January 2010 Ideas]]></category>
		<category><![CDATA[Trends]]></category>

		<guid isPermaLink="false">http://www.barklund.org/blog/?p=658</guid>
		<description><![CDATA[The twenty-fourth idea for my 365 social ideas is an idea for websites dealing in larger commodities like furniture, cars or even houses: Add private comments to the pages, that can be easily shared with friends and family, as this type of purchase is not something you do instantly, but spend time deciding. When you [...]


Related posts:<ol><li><a href='http://www.barklund.org/blog/2010/01/09/comment-on-everything-january-2010-idea/' rel='bookmark' title='Permanent Link: Comment On Everything &#8211; January 2010 Ideas'>Comment On Everything &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/27/browser-snapshort-sharing-january-2010-idea/' rel='bookmark' title='Permanent Link: Browser Snapshot Sharing &#8211; January 2010 Ideas'>Browser Snapshot Sharing &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/21/game-of-life-january-2010-idea/' rel='bookmark' title='Permanent Link: Game of Life &#8211; January 2010 Ideas'>Game of Life &#8211; January 2010 Ideas</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>The twenty-fourth idea for my <a href="/blog/365ideas/" title="365 Social Ideas from Barklund.org">365 social ideas</a> is an idea for websites dealing in larger commodities like furniture, cars or even houses: Add private comments to the pages, that can be easily shared with friends and family, as this type of purchase is not something you do instantly, but spend time deciding.</p>
<p><span id="more-658"></span></p>
<p>When you consider buying a car, you don&#8217;t make the decision instantly. You look at it on the web several times, you discuss it with friends and family etc. But imagine that the dealer website added a private comments box, that would initially be empty, but as soon as you started adding comments, you could share this version of the page, with your comments, to everyone else. A bit like the <a href="http://www.amazon.com/wishlist">wish list concept</a> from Amazon, but giving others the opportunity to weigh in on your decision if you gave them the link. Then all comments about whether or not to buy this car, pros and cons, other possibilities etc. would be in one place, and not spread around in emails discussing this potential requisition.</p>
<p>This could easily be used by e.g. <a href="http://www.amazon.com">Amazon</a>, <a href="http://www.ebay.com/">ebay</a> or similar companies. It should just be clearly visible, that this is private comments, that neither the dealer nor the seller will ever see. It is only for your own benefit to keep the discussion in one place between you and friends and family.</p>
<h4 id="toc-why">Why?</h4>
<p>If you control the discussion, it is more likely that the user returns to your site, to keep the discussion going. It is a facilitator of making educated requisitions, but it ensures that this discussion takes place on your website.</p>
<h4 id="toc-whats-next">What&#8217;s next?</h4>
<p>Do with this idea whatever you like &#8211; expand, implement, trash or forget. Just remember, that if you use it in anyway make sure to attribute me according to the Creative Commons Attribution 3.0 License, that all these <a href="/blog/365ideas" title="365 Social Ideas from Barklund.org">365 Social Ideas</a> are published under.</p>


<p>Related posts:<ol><li><a href='http://www.barklund.org/blog/2010/01/09/comment-on-everything-january-2010-idea/' rel='bookmark' title='Permanent Link: Comment On Everything &#8211; January 2010 Ideas'>Comment On Everything &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/27/browser-snapshort-sharing-january-2010-idea/' rel='bookmark' title='Permanent Link: Browser Snapshot Sharing &#8211; January 2010 Ideas'>Browser Snapshot Sharing &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/21/game-of-life-january-2010-idea/' rel='bookmark' title='Permanent Link: Game of Life &#8211; January 2010 Ideas'>Game of Life &#8211; January 2010 Ideas</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.barklund.org/blog/2010/01/24/private-comment-sharing-january-2010-idea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Docs Application &#8211; January 2010 Ideas</title>
		<link>http://www.barklund.org/blog/2010/01/23/google-docs-application-january-2010-idea/</link>
		<comments>http://www.barklund.org/blog/2010/01/23/google-docs-application-january-2010-idea/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 08:00:10 +0000</pubDate>
		<dc:creator>Barklund</dc:creator>
				<category><![CDATA[January 2010 Ideas]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Trends]]></category>

		<guid isPermaLink="false">http://www.barklund.org/blog/?p=638</guid>
		<description><![CDATA[The twenty-third idea for my 365 social ideas is a very simple one: Wrap a Safari browser in a Mac OS X application that opens on Google Docs as the first (and only) website you can see. I for one bashed Waveboard, when it came out, because it was simply Apple Safari wrapped in a [...]


Related posts:<ol><li><a href='http://www.barklund.org/blog/2010/01/09/comment-on-everything-january-2010-idea/' rel='bookmark' title='Permanent Link: Comment On Everything &#8211; January 2010 Ideas'>Comment On Everything &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/08/appcelerator-january-2010-idea/' rel='bookmark' title='Permanent Link: Appcelerator &#8211; January 2010 Ideas'>Appcelerator &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/29/nyt-article-trend-charts-january-2010-idea/' rel='bookmark' title='Permanent Link: NYT Article Trend Charts &#8211; January 2010 Ideas'>NYT Article Trend Charts &#8211; January 2010 Ideas</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>The twenty-third idea for my <a href="/blog/365ideas/" title="365 Social Ideas from Barklund.org">365 social ideas</a> is a very simple one: Wrap a Safari browser in a Mac OS X application that opens on <a href="http://docs.google.com/">Google Docs</a> as the first (and only) website you can see.</p>
<p><span id="more-638"></span></p>
<p>I for one bashed <a href="http://www.getwaveboard.com/">Waveboard</a>, when it came out, because it was simply Apple Safari wrapped in a Mac OS X application. But, recently I tried it again, as it had added <a href="http://growl.info/">Growl</a> support, which means I was easily alerted to when new info was available in any of my waves &#8211; this made it feel much more like a mail application, because it was its own program on my MacBook, that I could switch program to and be notified about even though using billions of tabs in my &#8220;regular&#8221; browsing experience.</p>
<p>So, my suggestion is simply to anyone out there (I reckon it might actually be infinitely simple): do this with Google Docs and if possible, add similar Growl integration as has been done with the Waveboard application, then Google Docs would actually start to seem like a &#8220;real&#8221; program in itself.</p>
<h4 id="toc-why">Why?</h4>
<p>Because I need it. I might be alone, but I doubt it. And I am pretty sure this is very simple, but it would be really useful.</p>
<h4 id="toc-whats-next">What&#8217;s next?</h4>
<p>Do with this idea whatever you like &#8211; expand, implement, trash or forget. Just remember, that if you use it in anyway make sure to attribute me according to the Creative Commons Attribution 3.0 License, that all these <a href="/blog/365ideas" title="365 Social Ideas from Barklund.org">365 Social Ideas</a> are published under.</p>


<p>Related posts:<ol><li><a href='http://www.barklund.org/blog/2010/01/09/comment-on-everything-january-2010-idea/' rel='bookmark' title='Permanent Link: Comment On Everything &#8211; January 2010 Ideas'>Comment On Everything &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/08/appcelerator-january-2010-idea/' rel='bookmark' title='Permanent Link: Appcelerator &#8211; January 2010 Ideas'>Appcelerator &#8211; January 2010 Ideas</a></li>
<li><a href='http://www.barklund.org/blog/2010/01/29/nyt-article-trend-charts-january-2010-idea/' rel='bookmark' title='Permanent Link: NYT Article Trend Charts &#8211; January 2010 Ideas'>NYT Article Trend Charts &#8211; January 2010 Ideas</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.barklund.org/blog/2010/01/23/google-docs-application-january-2010-idea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
