<?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/"
	>

<channel>
	<title>idea deployment.de</title>
	<atom:link href="http://ideadeployment.de/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://ideadeployment.de</link>
	<description></description>
	<pubDate>Wed, 04 Mar 2009 14:24:14 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Setting the RAILS_ENV for workling_client</title>
		<link>http://ideadeployment.de/?p=53</link>
		<comments>http://ideadeployment.de/?p=53#comments</comments>
		<pubDate>Wed, 04 Mar 2009 14:23:39 +0000</pubDate>
		<dc:creator>Tillmann Carlos Bielefeld</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ideadeployment.de/?p=53</guid>
		<description><![CDATA[Today I spent some hours on fixing our background emailing queue for eventize.de. We&#8217;re having a staging system running on the same server, each with a Starling MemCache interfaced queue
Workling should get the items from the queue and send them out. It ran into the problem to not finding the RAILS_ENV.
The solution was as easy [...]]]></description>
			<content:encoded><![CDATA[<p>Today I spent some hours on fixing our background emailing queue for <a href="http://eventize.de">eventize.de</a>. We&#8217;re having a staging system running on the same server, each with a <a href="http://github.com/starling/starling/tree/master">Starling</a> MemCache interfaced queue</p>
<p><a href="http://github.com/purzelrakete/workling/tree/master">Workling</a> should get the items from the queue and send them out. It ran into the problem to not finding the RAILS_ENV.</p>
<p>The solution was as easy as this:</p>
<pre class="ruby" name="code">
run "export RAILS_ENV='#{rails_env}' &amp;&amp; #{latest_release}/script/workling_client start "
</pre>
<p>If you find youself in this situation: Don&#8217;t just write in environment.rb:</p>
<pre class="ruby" name="code">
ENV['RAILS_ENV'] ||= 'production'
</pre>
<p>It will annoy you later - for sure <img src='http://ideadeployment.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://ideadeployment.de/?feed=rss2&amp;p=53</wfw:commentRss>
		</item>
		<item>
		<title>jQuery Tag input</title>
		<link>http://ideadeployment.de/?p=40</link>
		<comments>http://ideadeployment.de/?p=40#comments</comments>
		<pubDate>Sat, 24 Jan 2009 14:07:44 +0000</pubDate>
		<dc:creator>Tillmann Carlos Bielefeld</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[code]]></category>

		<category><![CDATA[jquery]]></category>

		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://ideadeployment.de/?p=40</guid>
		<description><![CDATA[While implementing the function to &#8220;connect to friends&#8221; in our social network eventize.de, I thought about improving the handling of tags a bit.
The idea was to be able to select tags that were already in use (because it&#8217;s likely to use them over and over again). So I build a small jQuery plugin that does [...]]]></description>
			<content:encoded><![CDATA[<p>While implementing the function to &#8220;connect to friends&#8221; in our social network <a title="eventize.de" href="http://www.eventize.de">eventize.de</a>, I thought about improving the handling of tags a bit.</p>
<p>The idea was to be able to select tags that were already in use (because it&#8217;s likely to use them over and over again). So I build a small jQuery plugin that does exactly this job:</p>
<p><img class="alignnone size-full wp-image-41" title="tag_input_screenshot" src="http://ideadeployment.de/wp-content/uploads/2009/01/tag_input_screenshot.png" alt="tag_input_screenshot" width="312" height="174" /></p>
<p><span>What you basically need is a text field. I post my Rails code here:</span></p>
<pre class="ruby" name="code">&lt;%= text_field_tag :tag_list, value,
  :class =&gt; 'text_input',
  :id =&gt; identifier_field,
  :onfocus =&gt; "jQuery.taginput.showTagList('##{identifier_field}', '##{identifier_popup}')",
  :onblur =&gt; "jQuery.taginput.hideTagList('##{identifier_field}', '##{identifier_popup}')",
  :oninput =&gt; "jQuery.taginput.setAlreadyUsedTags('##{identifier_field}', '##{identifier_popup}')",
  :autocomplete =&gt; 'off'
%&gt;</pre>
<p>And a bit HTML code to prebuild the popup (This could be done with jQuery, too):</p>
<pre class="ruby" name="code">
<div id="&lt;%=identifier_popup%&gt;" class="tag_popup">
<div class="popup_content">
    &lt;% if tags.size == 0 %&gt;
      &lt;%= t(:'view.relations.edit.tags.no_tags_info') %&gt;
        Put some tag suggegstions here...
       &lt;% tags << "friends"%&gt;
    &lt;% end %&gt;

    &lt;% tags.each do |tag| %&gt;
      <a class="tag" href="#">&lt;%= "onclick=\"jQuery.taginput.addTagToField('##{identifier_field}','#{tag}', '#{identifier_popup}');
         return false;\""%&gt;&gt;&lt;%= tag %&gt;</a>
       &lt;% end %&gt;

    <small>&lt;%= t(:'view.relations.edit.tags.separate_by') %&gt;</small></div>
</div>
</pre>
<p>Alright, go ahead and check it out for yourself. The code is pretty basic and there&#8217;s a lot of space for improvement. If you have any suggestions, post a comment!</p>
<p><a title="taginput 1.0 download" href="http://ideadeployment.de/wp-content/uploads/2009/01/jquerytaginput-10.js">jquerytaginput-10</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ideadeployment.de/?feed=rss2&amp;p=40</wfw:commentRss>
		</item>
		<item>
		<title>Merging Rails&#8217; i18n files</title>
		<link>http://ideadeployment.de/?p=27</link>
		<comments>http://ideadeployment.de/?p=27#comments</comments>
		<pubDate>Thu, 08 Jan 2009 13:35:35 +0000</pubDate>
		<dc:creator>Tillmann Carlos Bielefeld</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Web Applications]]></category>

		<category><![CDATA[i18n]]></category>

		<category><![CDATA[languages]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://ideadeployment.de/?p=27</guid>
		<description><![CDATA[Lately I&#8217;ve been in a hassle to translate our application Quassum into English. My collegues continously modify the german i18n file for Rails, then the old structure of the other language files are left unmodified. Doing this by hand is close to impossible.
So what I came up with was a rake task that merges a [...]]]></description>
			<content:encoded><![CDATA[<p>Lately I&#8217;ve been in a hassle to translate our application <a href="http://www.quassum.com">Quassum</a> into English. My collegues continously modify the german i18n file for Rails, then the old structure of the other language files are left unmodified. Doing this by hand is close to impossible.</p>
<p>So what I came up with was a rake task that merges a give structure (YAML source file) into an existing target structure while overwriting every key that changed and adding new keys. Old keys and values are left as they are.</p>
<p>I didn&#8217;t find anything on the internet doing this task, so I hope this task will save you the time I spent last saturday. Good luck!</p>
<pre class="ruby" name="code">$KCODE = 'UTF8'
require 'ya2yaml'

namespace :quassum do
  desc "Copy all missing lang identifiers from [src].yml to [dest].yml"
  task :fill_lang do

    if ENV['src'].blank? or ENV['dest'].blank?
      puts "Give all parameters: src and dest. " +
        "E.g.: rake quassum:fill_lang src='de' dest='en'"
      exit
    end
    src_path = File.join(RAILS_ROOT,'config','locales', "#{ENV['src']}.yml")
    dest_path = File.join(RAILS_ROOT,'config','locales', "#{ENV['dest']}.yml")

    unless File.readable?(src_path)
      puts "File #{src_path} not readable!"
      exit
    end

    unless File.exist?(dest_path)
      puts "File #{dest_path} does not exist. Creating it..."
      File.new(dest_path, "w")
    end

    # We assume that the src file is correct...
    yaml_src = YAML::load_file(src_path)
    struct_src = yaml_src[ENV['src']]

    # ...but the src not necessarily. So, in case, we create a new lang file:
    @yaml_dest = YAML::load_file(dest_path)
    @yaml_dest ||= Hash.new
    @struct_dest = @yaml_dest[ENV['dest']]
    @struct_dest ||= Hash.new

    # merge all unknown changes to the dest struct:
    merge_recursively struct_src

    @yaml_dest[ENV['dest']] = @struct_dest
    File.open(dest_path, "w") do |file|
      file.puts @yaml_dest.ya2yaml
    end

    puts File.new(dest_path).read
    puts "Everything done."
  end

  #
  # SOME HELPER FUNCTIONS
  #
  def merge_recursively(pairs, parents = [])
    pairs.each_pair do |k,v|
      # copy the parents path and add the current element key:
      current_path = Array.new(parents) &lt;&lt; k
      if v.is_a?(Hash)
        merge_recursively(v, current_path)
      else
        ensure_yaml_contains(@struct_dest, current_path, v.to_s)
      end
    end
  end

  def ensure_yaml_contains(element, path, val)
    #puts "    ensure_yaml_contains(#{element}, #{path}, #{val})"

    if path.length == 1
      if element[path.first].is_a?(Hash) and not val.blank?
        puts "Hash found instead of key. In favor of '#{val}' '#{element.to_s}' will be deleted!"
        element[path.first] = val
      end
      if element[path.first].nil?
        puts "Missing key '#{path.first}'! Pre-filled for editing with: '#{val}'. element was #{element.class}"
        element[path.first] = val + " [[TODO]]  "
      end
      # if none of these replaced anything - we're fine, the key exists!
      # <img src='http://ideadeployment.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />
    elsif path.length &gt; 1
      # walk down if possible:
      if element[path.first].is_a?(Hash) and element.has_key?(path.first)
        ensure_yaml_contains(element[path.first], path[1..-1], val)
      else
        # We don't have a hash in the dest file, so we create the hash
        # and fill in all subsequent children:
        element[path.first] = Hash.new
        ensure_yaml_contains(element[path.first], path[1..-1], val)
      end
    else
      puts "REPLACING FAILED"
      # should stop here
    end
  end

end</pre>
]]></content:encoded>
			<wfw:commentRss>http://ideadeployment.de/?feed=rss2&amp;p=27</wfw:commentRss>
		</item>
		<item>
		<title>No marketing for Snow Leopard?</title>
		<link>http://ideadeployment.de/?p=26</link>
		<comments>http://ideadeployment.de/?p=26#comments</comments>
		<pubDate>Mon, 22 Dec 2008 18:56:20 +0000</pubDate>
		<dc:creator>Tillmann Carlos Bielefeld</dc:creator>
		
		<category><![CDATA[Marketing]]></category>

		<category><![CDATA[apple]]></category>

		<guid isPermaLink="false">http://ideadeployment.de/?p=26</guid>
		<description><![CDATA[Half a year after the launch of Leopard in the last year, Apple announces the launch of the next operating system named &#8220;Snow Leopard&#8221; for early 2009. In princicple, Apple is following their usual marketing strategy. This is:

Keep the launch of products quite till the actual release day, then ship fast.
Don&#8217;t discuss about rumors, even [...]]]></description>
			<content:encoded><![CDATA[<p>Half a year after the launch of Leopard in the last year, Apple announces the launch of the <a href="http://www.apple.com/macosx/snowleopard/" target="_blank">next operating system</a> named &#8220;Snow Leopard&#8221; for early 2009. In princicple, Apple is following their usual marketing strategy. This is:</p>
<ul>
<li>Keep the launch of products quite till the actual release day, then ship fast.</li>
<li>Don&#8217;t discuss about rumors, even try to shut down <a href="http://blogs.zdnet.com/BTL/?p=7420" target="_blank">rumor distributors</a>.</li>
<li>Update products every few months but keep the actual development closed from public.</li>
</ul>
<p>Before every release event it seems that half the tech world is anxious knowing what happens, talking and speculating about their new stuff. Thus apple nearly limits their marketing expenses for the existing products while getting the hype for new releases for free.</p>
<p>Now, you could tell that the early adopters are always there after a certain base was established. Might be valid for Apple, yes. But this is not so true for the new operating system:</p>
<ul>
<li>Snow Leopard is said to be modified just &#8220;under the hood&#8221;. In fact, they moved from one software architecture to another while not changing the usage of the programs itself. Mail and other office programs are said to run a bit faster.</li>
<li>As said before, they announced Snow Leopard already this year. Since they&#8217;re already <a href="http://www.macrumors.com/2008/12/03/latest-mac-os-x-10-6-snow-leopard-builds-still-have-work-to-be-done/">beta testing</a> it they can&#8217;t keep it secret.</li>
<li>They needed an <a href="http://www.khronos.org/news/press/releases/the_khronos_group_releases_opencl_1.0_specification/" target="_blank">open specification</a> to get hardware manufacturers under one hood, to align them using that specification later on.</li>
</ul>
<p>So - what do we learn from it? Apple is using this open specification to succeed with their idea of multi-core computing. Apparently a good idea since it is dependent on the software developers using the underlying mechanics of the operating system. Moreover there aren&#8217;t any competitors being able to misuse this information.</p>
<p>And: Although Apple was announcing Snow Leopard pretty early, they&#8217;re still saving on marketing. It may well be that Snow Leopard will be a minor launch like any other new iPod generation with minor improvements. But I&#8217;m having the feeling that they&#8217;ll be getting something more out of it. The idea of using every computing unit of a computer (CPUs and graphic processors) is too tempting not to use it as a selling argument. I&#8217;m anxious to watch the process next year.</p>
]]></content:encoded>
			<wfw:commentRss>http://ideadeployment.de/?feed=rss2&amp;p=26</wfw:commentRss>
		</item>
		<item>
		<title>Solutions from outside</title>
		<link>http://ideadeployment.de/?p=25</link>
		<comments>http://ideadeployment.de/?p=25#comments</comments>
		<pubDate>Wed, 29 Oct 2008 20:14:10 +0000</pubDate>
		<dc:creator>Tillmann Carlos Bielefeld</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[external solution]]></category>

		<category><![CDATA[people]]></category>

		<category><![CDATA[problem]]></category>

		<category><![CDATA[relations]]></category>

		<guid isPermaLink="false">http://ideadeployment.de/?p=25</guid>
		<description><![CDATA[Sometimes I stumble upon situations where people try out different solutions for the problem they encounter. I give some examples:

The project management of a company is a great failure. They&#8217;re hacking from &#8220;hand to mouth&#8221;, not knowing where the aim will be tomorrow. Hiring the 1k/day consultant who&#8217;s an experienced XP project manager won&#8217;t bring [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes I stumble upon situations where people try out different solutions for the problem they encounter. I give some examples:</p>
<ul>
<li>The project management of a company is a great failure. They&#8217;re hacking from &#8220;hand to mouth&#8221;, not knowing where the aim will be tomorrow. Hiring the 1k/day consultant who&#8217;s an experienced XP project manager won&#8217;t bring the team any close to agile method if the company structure is based on strict hierarchies and envy is destroying the communication.</li>
<li>Social problems, general unhappiness with life, loneliness or poverty that some people experience can&#8217;t be solved by any external means. That&#8217;s why many people are stuck in the process of <em>longing</em> instead of <em>finding</em> a partner. That&#8217;s why the dole rather help people stay alive than make them earn their money themselves.</li>
</ul>
<p>Just like the famous saying from Gerald Weinberg:</p>
<blockquote><p><strong>&#8220;no matter what they tell you, it&#8217;s always a people problem.&#8221; (from <a href="http://www.coderenaissance.com/2008/01/it.html" target="_blank">coderenaissance.com</a>)<br />
</strong></p></blockquote>
<p>Adapted to my points, this means watching a problem always mirrors the people in that situation. It&#8217;s just not honest saying &#8220;The codebase is too complex, we can&#8217;t ship the product&#8221;, it&#8217;s rather: &#8220;We really fucked the situation up. But Why? Because we&#8217;re afraid to ship? Because our employees hate us and thus produce bad code?&#8221;.</p>
<p>So that&#8217;s the point where any solution from would come in handy. And even if those from outside look easy, cheap and fast, they never work. The stylish third-party framework, the new Middleware, the bought-in code guru or even the the handsome guy from the <a href="http://www.youtube.com/watch?v=l7nlxFhjXUA" target="_blank">online dating</a> page.</p>
<p>It&#8217;s like solving the problem directly from the top of the <a href="http://en.wikipedia.org/wiki/5_Whys" target="_blank">5 Whys</a>. Too <a href="http://blogs.reuters.com/ask/2007/03/13/too-easy-to-get-a-home-loan-in-recent-years/" target="_blank">easy</a>, too fast. Won&#8217;t work because the main reason for the state they want to escape isn&#8217;t tackled.<br />
If there are suggestions of getting help from outside, always double-check if it&#8217;s really a needed resource to being able to chance the internals or it&#8217;s rather a mean to cover something and ignore the real thing.</p>
]]></content:encoded>
			<wfw:commentRss>http://ideadeployment.de/?feed=rss2&amp;p=25</wfw:commentRss>
		</item>
		<item>
		<title>Benefits of working in parallel</title>
		<link>http://ideadeployment.de/?p=24</link>
		<comments>http://ideadeployment.de/?p=24#comments</comments>
		<pubDate>Sun, 26 Oct 2008 19:42:28 +0000</pubDate>
		<dc:creator>Tillmann Carlos Bielefeld</dc:creator>
		
		<category><![CDATA[Web Applications]]></category>

		<category><![CDATA[parallelization]]></category>

		<category><![CDATA[startups]]></category>

		<category><![CDATA[time management]]></category>

		<guid isPermaLink="false">http://ideadeployment.de/?p=24</guid>
		<description><![CDATA[There a topic that&#8217;s I&#8217;ve been observing quite a while and that&#8217;s finally worth considering in writing. Although I think that the projecting habits of every person is unique, I try to find some generic points.
Why not to
How many successful startups do we know that still have founders working as employees in other companies, do [...]]]></description>
			<content:encoded><![CDATA[<p>There a topic that&#8217;s I&#8217;ve been observing quite a while and that&#8217;s finally worth considering <a href="http://ideadeployment.de/2008/07/debug-at-the-thought-level/">in writing</a>. Although I think that the projecting habits of every person is unique, I try to find some generic points.</p>
<h3>Why not to</h3>
<p>How many successful startups do we know that still have founders working as employees in other companies, do excessive consulting jobs aside or even studying at universities? Nearly none? There may be reasons:</p>
<blockquote><p>Let me mention some things not to do.  The number one thing not to do is other things. (<a href="http://www.paulgraham.com/die.html" target="_blank">Paul Graham</a>)</p></blockquote>
<p>Another reason can be if you want to get rid of a project really quickly. Spending all your time on it can accelerate your process. But there&#8217;s still the distance issue, see below:</p>
<h3>Benefits</h3>
<p>Working on one thing makes your mind get stuck on this topic. A mathmatician friend of mine once pointed out that&#8217;s nearly impossible to rework a math class in some days of vacation because there&#8217;ll be a lack of distance. That&#8217;s why <a href="http://extremeprogramming.org/rules/pair.html" target="_blank">pair programming</a> is so popular in these years. While one developer programs the other is able to see the big picture of the task with a lot more distance.</p>
<p>Concerning everyday life, people have hardly just one thing that&#8217;s bugging them. Trying to go for the one solution often ends up in <a href="http://sethgodin.typepad.com/seths_blog/2008/10/do-you-have-16.html" target="_blank">forgetting about other factors</a>. Being able to work in parallel will not only take them a step further to their goals it also makes excuses obsolete (which is, in this case, probably the main benefit).</p>
<p>Moreover, it&#8217;s possible to plan for that parallelization. In fact, according  to a <a href="german study" target="_blank">german study</a> most of their students are able to study and have a part-time job. I consider this as a much better practice than working in advance, saving money and study eventually. Anyway, most of them will face the distance problem and stick to their full-time jobs.</p>
<h3>Distraction and scope</h3>
<p>We know that parallelizing work <a href="http://www.joelonsoftware.com/articles/fog0000000022.html" target="_blank">is hard</a>. It slows us down, we don&#8217;t have to argue on this one. But what about parallelizing projects? Projects often have the nature of having gaps in between actions. That is, for example waiting for the next lecture when working on the diploma/master. Working on other projects then requires a fair amount of scope. A factor that says, how much concentration you have for a specific task. There are <a href="http://www.amazon.com/Getting-Things-Done-Stress-Free-Productivity/dp/0142000280/ref=pd_bbs_1?ie=UTF8&amp;s=books&amp;qid=1225033756&amp;sr=8-1" target="_blank">methods</a> to help not getting <a href="http://www.contract-worker.com/whats-your-distraction-threshold/" target="_blank">distracted</a> by other things.</p>
<p><a href="http://www.43folders.com/2008/08/15/cooking-creative-beast" target="_blank">Matt Wood</a> states another important point:</p>
<blockquote><p>But the trick isn’t cutting out that distraction completely, it’s acknowledging it, admitting its power over you, then drawing lines and finding its proper role in your life.</p></blockquote>
<p>Which is probably the greatest benefit we&#8217;ll get out of working in parallel. While the uni gives me inspiration, contacts and much theory, our <a href="http://www.quassum.com/" target="_blank">startup</a> shows me what we&#8217;re learning for.</p>
]]></content:encoded>
			<wfw:commentRss>http://ideadeployment.de/?feed=rss2&amp;p=24</wfw:commentRss>
		</item>
		<item>
		<title>The Importance of Avatars</title>
		<link>http://ideadeployment.de/?p=16</link>
		<comments>http://ideadeployment.de/?p=16#comments</comments>
		<pubDate>Wed, 27 Aug 2008 12:45:51 +0000</pubDate>
		<dc:creator>Tillmann Carlos Bielefeld</dc:creator>
		
		<category><![CDATA[Web Applications]]></category>

		<category><![CDATA[avatars]]></category>

		<category><![CDATA[osx]]></category>

		<category><![CDATA[social network]]></category>

		<guid isPermaLink="false">http://ideadeployment.de/?p=16</guid>
		<description><![CDATA[The offline experience
There is a feature of Mac OSX that&#8217;s fairly underrated: the usage of avatars throughout the system. The benefits of maintaining those small images are become apparent subtly:

That&#8217;s just a small area of my two-screen setup but probably the part I work with the most. I configured Adium that it displays rather my [...]]]></description>
			<content:encoded><![CDATA[<h2>The offline experience</h2>
<p>There is a feature of Mac OSX that&#8217;s fairly underrated: the usage of avatars throughout the system. The benefits of maintaining those small images are become apparent subtly:</p>
<p><a href="http://ideadeployment.de/wp-content/uploads/2008/08/avatar_screenshot.png"><img class="alignnone size-full wp-image-19" style="border: 1px solid #CCCCCC" title="avatar_screenshot" src="http://ideadeployment.de/wp-content/uploads/2008/08/avatar_screenshot.png" alt="" width="405" height="220" /></a></p>
<p>That&#8217;s just a small area of my two-screen setup but probably the part I work with the most. I configured <a href="http://adiumx.com/screenshots/" target="_blank">Adium</a> that it displays rather my own avatars than the messenger&#8217;s ones. It got much easier to figure out who&#8217;s online without even glancing on the names.</p>
<h2>Avatars online</h2>
<p>Let&#8217;s take a look at the web&#8230; (at my <a href="http://www.blogbar.de/archiv/2006/11/20/719/" target="_blank">favorite</a> social app)</p>
<p><a href="http://ideadeployment.de/wp-content/uploads/2008/08/bild-21.png"><img class="alignnone size-full wp-image-20" title="studivz_avatars" src="http://ideadeployment.de/wp-content/uploads/2008/08/bild-21.png" alt="" width="500" height="105" /></a></p>
<p>Okay, apparently the benefit of recognizing contacts without reading the actual name. People change their profile as often as it causes the application to list their profiles higher than others.</p>
<h3><em>What&#8217;s the deal then?</em></h3>
<p>Some pages extensively use avatars (taken from <a href="http://mashable.com/" target="_blank">mashable</a>)</p>
<p><a href="http://ideadeployment.de/wp-content/uploads/2008/08/mashable_avatars.png"><img class="alignnone size-full wp-image-23" style="border: 1px solid #CCCCCC" title="mashable_avatars" src="http://ideadeployment.de/wp-content/uploads/2008/08/mashable_avatars.png" alt="" width="500" height="142" /></a></p>
<p>Do you see the benefit? It certainly isn&#8217;t the one I stated. When picking avatars randomly users just can&#8217;t match them with their contacts, especially if their &#8220;friends&#8221; change them hourly.</p>
<p>But: many avatars (and icons) can improve the impressions a basically <a href="http://bkanal.ch/channel/adrenaline/"  target="_blank">dark page</a> leaves. Or just look at photo pages like <a href="http://flickr.com/" target="_blank">flickR</a>; nothing but user generated graphical elements.</p>
<p>To a much greater degree, the merit is rather a psychological one: To the user the site shown above makes the impression of vividness, showing the presence of a boatload of users, just waiting to get in touch. If there&#8217;s the opportunity to get your user&#8217;s (or friends&#8217;) avatars, use them to create a better experience on your desktop or even your social network.</p>
]]></content:encoded>
			<wfw:commentRss>http://ideadeployment.de/?feed=rss2&amp;p=16</wfw:commentRss>
		</item>
		<item>
		<title>Deserializing lecture notes</title>
		<link>http://ideadeployment.de/?p=12</link>
		<comments>http://ideadeployment.de/?p=12#comments</comments>
		<pubDate>Mon, 18 Aug 2008 21:20:10 +0000</pubDate>
		<dc:creator>Tillmann Carlos Bielefeld</dc:creator>
		
		<category><![CDATA[Organizing]]></category>

		<category><![CDATA[lecture]]></category>

		<category><![CDATA[mind maps]]></category>

		<category><![CDATA[outline]]></category>

		<category><![CDATA[record cards]]></category>

		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://ideadeployment.de/?p=12</guid>
		<description><![CDATA[These days I&#8217;m working on my prediploma and had to refurbish two semesters of maths. I printed and copied two lecture notes and made a plan on how to get that stuff in my head.
Skimming
Going through the whole script writing dependency record cards for every corollary, lemma and theorem. Those cards are plain records cards [...]]]></description>
			<content:encoded><![CDATA[<p>These days I&#8217;m working on my prediploma and had to refurbish two semesters of maths. I printed and copied two lecture notes and made a plan on how to get that stuff in my head.</p>
<h3>Skimming</h3>
<p>Going through the whole script writing dependency record cards for every corollary, lemma and theorem. Those cards are plain records cards (title and details on the backside), additionally with dependencies to other cards on the rights border. A card now looks like this:</p>
<p><a href="http://ideadeployment.de/wp-content/uploads/2008/08/img_0228.jpg"><img class="size-medium wp-image-14" title="dependency record card" src="http://ideadeployment.de/wp-content/uploads/2008/08/img_0228-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Additionally it&#8217;s possible to set flags on cards. For example: if there is an evidence to learn, mark the upper left corner black.</p>
<p>After skimming we produce a nice pile of cards. For a script of approx. 100 pages I used 90 cards.</p>
<h3>Arranging the Tree</h3>
<p>Alright, now we got our cards. We&#8217;re sitting in front of a cleared table and throw them onto it, one by another. Since our cards have various dependencies we should be getting a graph. Just to keep it simple we assume that we got a hierarchy and draw lines by exactly one dependency for each card (except the root(s), they have obviously none). Now we have a cluttered table:</p>
<p><a href="http://ideadeployment.de/wp-content/uploads/2008/08/img_0226.jpg"><img class="size-medium wp-image-11" title="record_cards_hierarchical" src="http://ideadeployment.de/wp-content/uploads/2008/08/img_0226-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Okay, that was a nice attempt. As said, there&#8217;s no point of arranging 90 cards on an average desk (If you have less, you might be fine with that). Apart from that there&#8217;s a nother problem: we can&#8217;t see the dependency / hierarchy lines. Ok, let&#8217;s go digital:</p>
<h3>Mindmapping the lecture</h3>
<p>There are some nice apps for OSX to create a mindmap. On that occasion I moved away from <a href="http://www.mindnode.com/" target="_blank">mindnode</a> to <a href="http://freemind.sourceforge.net" target="_blank">freemind</a> (I just had to rearrange nodes). Additionally freemind is java and thus available for other platforms. Neat!</p>
<p>After typing everything in (with some shortcuts at hand it&#8217;s not that painful) we print the whole map on three sheets:</p>
<p><a href="http://ideadeployment.de/wp-content/uploads/2008/08/img_0227.jpg"><img class="size-medium wp-image-13" title="refactored to mind map" src="http://ideadeployment.de/wp-content/uploads/2008/08/img_0227-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>That process takes some time. But with this outline we&#8217;re not only able to see the outline of the whole matter, in fact we can learn specifically by browsing through the nodes in <a href="http://en.wikipedia.org/wiki/Depth-first_search" target="_blank">depth-first-search</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ideadeployment.de/?feed=rss2&amp;p=12</wfw:commentRss>
		</item>
		<item>
		<title>Debug at the thought level</title>
		<link>http://ideadeployment.de/?p=9</link>
		<comments>http://ideadeployment.de/?p=9#comments</comments>
		<pubDate>Wed, 23 Jul 2008 21:19:45 +0000</pubDate>
		<dc:creator>Tillmann Carlos Bielefeld</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[advice]]></category>

		<category><![CDATA[debug]]></category>

		<category><![CDATA[lamport]]></category>

		<category><![CDATA[sloppyness]]></category>

		<category><![CDATA[though]]></category>

		<category><![CDATA[tla+]]></category>

		<category><![CDATA[writing]]></category>

		<guid isPermaLink="false">http://ideadeployment.de/?p=9</guid>
		<description><![CDATA[Have you evener wondered why so much code gets refactored again and again? Why there are several specialists living on this topic? If refactoring is about improving code, one could assume that&#8217;s quite a good thing.
Ever wondered why there is such a thing like refactoring? People seem to like implementing quickly and refactor afterwards. Ever [...]]]></description>
			<content:encoded><![CDATA[<p>Have you evener wondered why so much code gets refactored again and again? Why there are several <a href="http://martinfowler.com/books.html" target="_blank">specialists</a> living on this topic? If refactoring is about improving code, one could assume that&#8217;s quite a <a href="http://c2.com/cgi/wiki?WhatIsRefactoring">good thing</a>.</p>
<p>Ever wondered why there is such a thing like refactoring? People seem to like implementing quickly and refactor afterwards. Ever wondered if we could do this in a single step? Or at least hack the stuff just one time?</p>
<p>The programmers I got in touch with hardly write something down before they implement. I also often feel like hacking when I first see the solution of a problem. But that&#8217;s the first step of getting yourself into <a href="http://steve-yegge.blogspot.com/2007/12/codes-worst-enemy.html" target="_blank">trouble</a>.</p>
<p>What we <em>could</em> do is write before we code. Write the solution. Not just the outline, the comfy part, write down the complex structure of the whole solution. <em></em></p>
<p><em>&#8220;</em><em>Writing things down shows you how sloppy your thinking is&#8221;</em> says <a href="http://research.microsoft.com/users/lamport/" target="_blank">Leslie Lamport</a> advertising the model-checking enabled <a href="http://citeseer.ist.psu.edu/5074.html" target="_blank">TLA+</a>, which is mainly designed for developing algorithms. I&#8217;d strongly agree but drag that idea to a more generic level:</p>
<p><strong>Debug at the thought level!</strong> For every implementation, for every two classes you inherit, for every step you want to take in you career, for everything you feel too sure about. Write it down. See the output of you brain manifest and watch yourself thinking over it one more time.<br />
If it&#8217;s not the IDE you commited your initial sloppyness to, you probably save a lot of time!</p>
]]></content:encoded>
			<wfw:commentRss>http://ideadeployment.de/?feed=rss2&amp;p=9</wfw:commentRss>
		</item>
		<item>
		<title>Accessing Community Profiles</title>
		<link>http://ideadeployment.de/?p=7</link>
		<comments>http://ideadeployment.de/?p=7#comments</comments>
		<pubDate>Thu, 26 Jun 2008 17:11:02 +0000</pubDate>
		<dc:creator>Tillmann Carlos Bielefeld</dc:creator>
		
		<category><![CDATA[Web Applications]]></category>

		<category><![CDATA[community]]></category>

		<category><![CDATA[pretty urls]]></category>

		<category><![CDATA[profile]]></category>

		<category><![CDATA[urls]]></category>

		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://ideadeployment.de/?p=7</guid>
		<description><![CDATA[When surfing, or - precisely - retrieving content from a webserver, we use URIs / URLs. The resource we want to get is located by a protocol, a hostname, sometimes a port and a path.
But as we moved from static content to dynamic pages where you can hardly distinguish the resources, we needed parameters:
http://zazazu.de/zazazu.php?sde=100&#38;per=338
Now what [...]]]></description>
			<content:encoded><![CDATA[<p>When surfing, or - precisely - retrieving content from a webserver, we use <a title="Uniform Resource Identifier" href="http://en.wikipedia.org/wiki/Uniform_Resource_Identifier" target="_blank">URIs</a> / <a title="Uniform Resource Locator" href="http://en.wikipedia.org/wiki/Uniform_Resource_Locator" target="_blank">URL</a>s. The resource we want to get is <strong>located</strong> by a protocol, a hostname, sometimes a port and a path.</p>
<p>But as we moved from static content to dynamic pages where you can hardly distinguish the resources, we needed parameters:</p>
<p>http://zazazu.de/zazazu.php?sde=100&amp;per=338</p>
<p>Now what does this tell us aside from the URL? Apart from the fact that someone used <a title="php rocks!" href="http://rebelpixel.com/archives/2006/09/01/php-rocks/" target="_blank">PHP</a> - not much but noise. Come on, we can do better. Here&#8217;s the why:</p>
<ul>
<li>If you offer your users a unique profile, these adresses are shown around. Make it most comfortable for them to do so.</li>
<li>The does better understand direction of the content. xyz.com/games/pacman is much more exact than xyz.com/games.do?gid=4711.</li>
<li>It simply looks better.</li>
</ul>
<p>There are some simple, some profound principles in declaring your page&#8217;s URLs. Basically there&#8217;s a solution for every platform:</p>
<p>Ruby on Rails&#8217; <a href="http://manuals.rubyonrails.com/read/chapter/65" target="_blank">routes</a>, django&#8217;s <a href="http://www.djangoproject.com/documentation/url_dispatch/" target="_blank">equivalent</a>, Cake&#8217;s <a href="http://docs.cakephp.nu/classes/show/Router" target="_blank">router</a>&#8230; If nothing helps, a webserver can rewrite the URLs on its own, e.g. with<strong> </strong><a href="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html" target="_blank">mod_rewrite</a>. So there are plenty possibilities. And then, the concept of your web application has to support the resolution of names instead of ids or other parameters.</p>
<p>For example, a website can link to their profiles with /profiles/id/1339 or it can dispatch them with names, like <a href="http://linkedIn.com" target="_blank">linkedIn.com</a> (<a href="http://www.breakitdownblog.com/linkedin-is-written-in-99-java/" target="_blank">using Java, Spring and JSP</a>):<br />
<a href="http://ideadeployment.de/wp-content/uploads/2008/06/bild-4.png"><img class="alignnone size-full wp-image-8" title="linkedIN url definition" src="http://ideadeployment.de/wp-content/uploads/2008/06/bild-4.png" alt="" width="500" height="182" /></a></p>
<p>And, unless there are reasons to &#8220;disclose&#8221; the world from mapping URL to profile names you should avoid this kind of profile URL: <a href="http://www.studivz.net/Profile/e094a153d4af2fc6" target="_blank">http://www.studivz.net/Profile/e094a153d4af2fc6</a> and let the users spread their profile URLs with as much eagerness business cards. Compared to the whole code in your webapp it isn&#8217;t a great change but (apart from looking more professional) your website will get a happier usage.</p>
]]></content:encoded>
			<wfw:commentRss>http://ideadeployment.de/?feed=rss2&amp;p=7</wfw:commentRss>
		</item>
	</channel>
</rss>
