<?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>blog &#124; wdeu &#187; Snippets</title>
	<atom:link href="http://writedown.eu/tag/snippets/feed/" rel="self" type="application/rss+xml" />
	<link>http://writedown.eu</link>
	<description>words &#039; n &#039; code</description>
	<lastBuildDate>Thu, 24 Nov 2011 14:59:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Node.js &#8211; IP Lookup HttpServer</title>
		<link>http://writedown.eu/2011/11/node-js-ip-lookup-httpserver/</link>
		<comments>http://writedown.eu/2011/11/node-js-ip-lookup-httpserver/#comments</comments>
		<pubDate>Sat, 12 Nov 2011 17:11:39 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Node JS]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[lookup]]></category>
		<category><![CDATA[node]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[Snippets]]></category>

		<guid isPermaLink="false">http://writedown.eu/?p=337</guid>
		<description><![CDATA[Meine erste Node.js &#8211; Anwendung ist nun fertig. Nach ein paar kniffen und viel kämpfen mit den Scopes habe ich eine Anwendung fertig gestellt, welche die IP einer Website sucht und findet. Die Eingabe im Browser erfolgt so: http://localhost:3000/domain Beispiele: &#8230; <a href="http://writedown.eu/2011/11/node-js-ip-lookup-httpserver/">continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Meine erste <a href="http://nodejs.org/">Node.js</a> &#8211; Anwendung ist nun fertig. Nach ein paar kniffen und viel kämpfen mit den Scopes habe ich eine <a href="https://gist.github.com/1360795">Anwendung</a> fertig gestellt, welche die IP einer Website sucht und findet.</p>
<p>Die Eingabe im Browser erfolgt so: http://localhost:3000/domain</p>
<p>Beispiele:<br />
<a href="http://localhost:3000/https://gist.github.com/1360795">http://localhost:3000/https://gist.github.com/1360795</a><a href="http://localhost:3000/google.de"></p>
<p>http://localhost:3000/google.de</p>
<p></a><a href="http://localhost:3000/writedown.eu">http://localhost:3000/writedown.eu<br />
</a><a href="http://localhost:3000/de-de.facebook.com">http://localhost:3000/de-de.facebook.com<br />
</a><a href="http://localhost:3000/www.inf.h-brs.de">http://localhost:3000/www.inf.h-brs.de</a></p>
<p><span id="more-337"></span></p>
<p>Ausgabe:</p>
<pre>Die IP von 'nodejs.org' ist 8.12.44.238

Weiter IP Adressen:

localhost: 127.0.0.1
google.de: 209.85.148.106
writedown.eu: 80.67.17.127
de-de.facebook.com: 66.220.158.53
www.inf.h-brs.de: 194.95.64.18</pre>
<p>&nbsp;</p>
<p>Dazu muss einfach nur der Node.js &#8211; Server laufen mit folgendem Code:</p>
<pre class="brush:js">var http = require("http");
var dns = require("dns");
var u = require("util");

var urls = { length: 0 }

http.createServer(function(req,res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    var url = req.url.replace(/^\/(https?:\/\/)?/i,"");
    url = url.split("/")[0];

    var writeIp = function(wurl, wip) {
        res.write(String(wurl) + ": " + String(wip) + "\n");
    };

    var finished = function() {
        if(urls[url] == "undefined") {
            res.write("Die IP von '" + url + "' konnte nicht gefunden werden.\n");
        } else {
            res.write("Die IP von '" + url + "' ist " + String(urls[url]) + "\n");
        }
        if(url != "favicon.ico")
            console.log("Die IP von '" + url + "' wurde nachgeschaut. Die IP ist " + urls[url]);
        if(urls.length &gt; 1 || ( urls.length &gt; 0 &amp;&amp; urls[url] == "undefined" )  ) {
            res.write("\n\n\nWeiter IP Adressen:\n\n");
        };

        for( var key in urls ) {
            if( key != "undefined" &amp;&amp; key != url &amp;&amp; key != "length" &amp;&amp; urls[key] != "undefined") {
                writeIp(key, urls[key]);
            };
        };
        res.end("");
    };

    var cb = function(err, adress, family) {
        if(url != "favicon.ico") {
            if( urls[url] == undefined &amp;&amp; String(adress) != "undefined") {
                urls.length += 1;
            };
            urls[url] = String(adress);
        };
        finished();
    };

    dns.lookup(url, cb);

}).listen(3000);</pre>
]]></content:encoded>
			<wfw:commentRss>http://writedown.eu/2011/11/node-js-ip-lookup-httpserver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>genChoices.rb</title>
		<link>http://writedown.eu/2011/10/genchoices-rb/</link>
		<comments>http://writedown.eu/2011/10/genchoices-rb/#comments</comments>
		<pubDate>Sun, 23 Oct 2011 21:49:00 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[snippets]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[Snippets]]></category>

		<guid isPermaLink="false">http://writedown.eu/?p=331</guid>
		<description><![CDATA[# # genChoices &#124; Gibt alle Kombinationsmöglichkeiten der Argumentenliste zurück. @ writedown.eu # def genChoices(*args) choices = [] return args if args.length &#60;= 1 (0...args.length).each { &#124;pos&#124; if pos &#62; 0 temp = choices.dup temp.each { &#124;e&#124; restOfArgs = e[(pos+1)...args.length].dup &#8230; <a href="http://writedown.eu/2011/10/genchoices-rb/">continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><span id="more-331"></span></p>
<pre class="brush:ruby"></pre>
<pre class="brush:ruby">    #
    # genChoices | Gibt alle Kombinationsmöglichkeiten der Argumentenliste zurück. @ writedown.eu
    #
    def genChoices(*args)
        choices = []
        return args if args.length &lt;= 1
        (0...args.length).each { |pos|
            if pos &gt; 0
                temp = choices.dup
                temp.each { |e|
                    restOfArgs = e[(pos+1)...args.length].dup
                    toRework = e[0...pos]
                    pointsTo = [e[pos]].dup
                    # puts "-"*10
                    # puts "#{ toRework.inspect } | #{ pointsTo.inspect } | #{ restOfArgs.inspect }"
                    (0...pos).reverse_each { |pointer|
                        # generieren der bereiche
                        leftToPointer = toRework[0...pointer].dup
                        rightToPointer = toRework[pointer..pos].dup
                        #
                        choices &lt;&lt; (leftToPointer + pointsTo + rightToPointer + restOfArgs).dup
                    }
                }
            elsif pos == 0
                choices &lt;&lt; args.dup
            end
        }
        return choices
    end

    puts "genChoices(:a,:b,:c) =&gt; " + genChoices(:a,:b,:c).inspect
    # =&gt; "genChoices(:a,:b,:c) =&gt; [[:a, :b, :c], [:b, :a, :c], [:a, :c, :b], [:c, :a, :b], [:b, :c, :a], [:c, :b, :a]]"
    #
    print "genChoices( *( (0...10).to_a ) ) Time: #{ Time.now }"
    elementCount = genChoices( *( (0...10).to_a ) ).length
    puts " - #{ Time.now } Elements: #{ elementCount }"
    # =&gt; "genChoices( *( (0...10).to_a ) ) Time: 2011-10-23 23:29:16 +0200 - 2011-10-23 23:30:09 +0200 Elements: 3628800"
    #
    puts "fak(10) = #{ (1..10).inject { |x,y| x*y } }"
    # =&gt; "fak(10) = 3628800"
    #</pre>
]]></content:encoded>
			<wfw:commentRss>http://writedown.eu/2011/10/genchoices-rb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Der Code des Blogbanners hat einen Bug</title>
		<link>http://writedown.eu/2011/10/der-code-des-blogbanners-hat-einen-bug/</link>
		<comments>http://writedown.eu/2011/10/der-code-des-blogbanners-hat-einen-bug/#comments</comments>
		<pubDate>Sat, 22 Oct 2011 19:01:23 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[snippets]]></category>
		<category><![CDATA[Zwischendurch]]></category>
		<category><![CDATA[banner]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[Snippets]]></category>

		<guid isPermaLink="false">http://writedown.eu/?p=325</guid>
		<description><![CDATA[# encoding: UTF-8 class Blog def initialize(name="the nameless blog") @name = name @articles = {} end def add_article(title=:default, story="", tag="uncategorized") @articles[title] = { text: story, tags: tag.split, posted: Time.now } end def show_blog puts "\n"*15 puts "___#{ @name.upcase }___\n\n\n\n" @articles.keys.reverse[0...10&#124;&#124;@articles.keys.length].each &#8230; <a href="http://writedown.eu/2011/10/der-code-des-blogbanners-hat-einen-bug/">continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><span id="more-325"></span></p>
<pre class="brush:ruby"># encoding: UTF-8

    class Blog
        def initialize(name="the nameless blog")
            @name = name
            @articles = {}
        end
        def add_article(title=:default, story="", tag="uncategorized")
            @articles[title] = { text: story, tags: tag.split, posted: Time.now }
        end
        def show_blog
            puts "\n"*15
            puts "___#{ @name.upcase }___\n\n\n\n"
            @articles.keys.reverse[0...10||@articles.keys.length].each { |title|
                puts "+++ #{ title } +++ #{ @articles[title][:posted] }\n"
                puts "#{ @articles[title][:text] }\n"
                puts "(#{ @articles[title][:tags].sort.join(", ") })"
                puts "\n"*2
            }
        end
    end

myblog = Blog.new "addis world | addisaden"
myblog.add_article "Say hello to the world!",
"Das ist ein wundervoller Blog und so simples Design \
das ich mich doch gleich darin verlieben könnte ...",
"first say hello world"

myblog.add_article "Ein zweiter Test", "..,) fertig ist das mondgesicht", "trash"

myblog.show_blog
Dies ist die korrekte (ein wenig modifizierte) Fassung. Der Fehler liegt darin, dass man nur mit sehr aktiven Bloggern zutun hat die mehr als 10 Artikel veröffentlicht haben. Ansonsten kommt es zur Fehlermeldung:

test.rb:12:in `show_blog': undefined method `each' for nil:NilClass (NoMethodError)
	from test.rb:28:in `&lt;main&gt;'

Shell beendet 1
Korrektur:

# out
@articles.keys[-10..-1].each

# in
@articles.keys.reverse[0...10||@articles.keys.length].each
Das Ergebnis läuft:

___ADDIS WORLD | ADDISADEN___

+++ Ein zweiter Test +++ 2011-10-22 20:47:18 +0200
..,) fertig ist das mondgesicht
(trash)

+++ Say hello to the world! +++ 2011-10-22 20:47:18 +0200
Das ist ein wundervoller Blog und so simples Design das ich mich doch gleich darin verlieben könnte ...
(first, hello, say, world)</pre>
]]></content:encoded>
			<wfw:commentRss>http://writedown.eu/2011/10/der-code-des-blogbanners-hat-einen-bug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby: &#8220;example&#8221;.tag(:p) =&gt; &#8220;&lt;p&gt;example&lt;/p&gt;&#8221;</title>
		<link>http://writedown.eu/2011/06/ruby-example-tagp-pexamplep/</link>
		<comments>http://writedown.eu/2011/06/ruby-example-tagp-pexamplep/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 16:33:15 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[snippets]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://writedown.eu/?p=286</guid>
		<description><![CDATA[class String def tag(t = :p, p = {}) props = "" p.each { &#124;key,val&#124; props += " " + key.to_s + '="' + val.to_s + '"' } return "&#60;" + t.to_s + props + "&#62;" + self + "&#60;/" &#8230; <a href="http://writedown.eu/2011/06/ruby-example-tagp-pexamplep/">continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<pre class="brush:ruby">class String
  def tag(t = :p, p = {})
    props = ""
    p.each { |key,val|
      props += " " + key.to_s + '="' + val.to_s + '"'
    }
    return "&lt;" + t.to_s + props + "&gt;" + self + "&lt;/" + t.to_s + "&gt;"
  end
end</pre>
<p>Des öfteren hat mich der Codeschnipsel, bei der Generierung von Html weiter gebracht.</p>
<p>Ein paar Beispiele:</p>
<p>Links:</p>
<pre class="brush:applescript">"Google".tag(:a, { :href =&gt; "http://www.google.de/" })

=&gt; &lt;a href="http://www.google.de/"&gt;Google&lt;/a&gt;

"Absatz".tag(:p)

=&gt; &lt;p&gt;Absatz&lt;/p&gt;

...</pre>
]]></content:encoded>
			<wfw:commentRss>http://writedown.eu/2011/06/ruby-example-tagp-pexamplep/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Experimental FMSynth in PD</title>
		<link>http://writedown.eu/2010/07/experimental-fmsynth-in-pd/</link>
		<comments>http://writedown.eu/2010/07/experimental-fmsynth-in-pd/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 14:46:22 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[mp3]]></category>
		<category><![CDATA[musik]]></category>
		<category><![CDATA[PureData]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[pd]]></category>
		<category><![CDATA[sound]]></category>

		<guid isPermaLink="false">http://writedown.eu/?p=236</guid>
		<description><![CDATA[addis&#124;aden fmOsc nice Jamaround 2 :: addis&#124;aden fmOsc nice Jamaround :: addis&#124;aden FmSynth :: addis&#124;aden FmSynth JamAround :: addis&#124;aden FmSynth first Take Download :: addisaden_fmsynth.pd]]></description>
			<content:encoded><![CDATA[<p><a class="wpaudio" href="http://mp3.adrianenns.de/playaround-jam2.mp3">addis|aden fmOsc nice Jamaround 2</a> :: <a class="wpaudio" href="http://mp3.adrianenns.de/playaround-jam.mp3">addis|aden fmOsc nice Jamaround</a> :: <a class="wpaudio" href="http://writedown.eu/wp-content/uploads/2010/07/addisaden_fmsynth2.mp3">addis|aden FmSynth</a> :: <a class="wpaudio" href="http://writedown.eu/wp-content/uploads/2010/07/jam_addisaden_fmsynth.mp3">addis|aden FmSynth JamAround</a> :: <a class="wpaudio" href="http://writedown.eu/wp-content/uploads/2010/07/addisaden_fmsynth.mp3">addis|aden FmSynth first Take</a></p>
<p><a href="http://writedown.eu/wp-content/uploads/2010/07/addisaden_fmsynth.jpg"><img class="aligncenter size-large wp-image-238" title="addisaden_fmsynth" src="http://writedown.eu/wp-content/uploads/2010/07/addisaden_fmsynth-1024x602.jpg" alt="" width="640" height="376" /></a></p>
<p><a href="http://writedown.eu/wp-content/uploads/2010/07/addisaden_fmsynth.pd_.txt" target="_self">Download :: addisaden_fmsynth.pd</a></p>
]]></content:encoded>
			<wfw:commentRss>http://writedown.eu/2010/07/experimental-fmsynth-in-pd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://writedown.eu/wp-content/uploads/2010/07/addisaden_fmsynth2.mp3" length="3340456" type="audio/mpeg" />
<enclosure url="http://writedown.eu/wp-content/uploads/2010/07/jam_addisaden_fmsynth.mp3" length="6705446" type="audio/mpeg" />
<enclosure url="http://writedown.eu/wp-content/uploads/2010/07/addisaden_fmsynth.mp3" length="4535820" type="audio/mpeg" />
<enclosure url="http://mp3.adrianenns.de/playaround-jam.mp3" length="0" type="audio/mpeg" />
<enclosure url="http://mp3.adrianenns.de/playaround-jam2.mp3" length="0" type="audio/mpeg" />
		</item>
		<item>
		<title>Curse in Python</title>
		<link>http://writedown.eu/2010/02/curse-in-python/</link>
		<comments>http://writedown.eu/2010/02/curse-in-python/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 10:59:53 +0000</pubDate>
		<dc:creator>Adrian</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Bildschirmausgabe]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Curse]]></category>
		<category><![CDATA[Klasse]]></category>
		<category><![CDATA[Snippets]]></category>

		<guid isPermaLink="false">http://blog.adrianenns.de/?p=166</guid>
		<description><![CDATA[Nachdem ich mich einige Zeit mit Python auseinander gesetzt habe, bin ich auf Curse in Python gestoßen und habe eine nützliche Klasse zur Bildschirmausgabe geschrieben. Diese erkennt die Größe des Terminals und ermöglicht ein einfaches schreiben auf dem Bildschirm, auslesen &#8230; <a href="http://writedown.eu/2010/02/curse-in-python/">continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.adrianenns.de/wp-content/uploads/2010/02/curstest.png"><img class="aligncenter size-medium wp-image-167" title="curstest" src="http://blog.adrianenns.de/wp-content/uploads/2010/02/curstest-300x58.png" alt="" width="300" height="58" /></a>Nachdem ich mich einige Zeit mit Python auseinander gesetzt habe, bin ich auf Curse in Python gestoßen und habe eine nützliche Klasse zur Bildschirmausgabe geschrieben. Diese erkennt die Größe des Terminals und ermöglicht ein einfaches schreiben auf dem Bildschirm, auslesen der gedrückten Taste und dem einlesen eines Befehls (Rückgabe als String).</p>
<p>Ein kleines Beispielprogramm lässt ein AsciiBild über den Bildschirm wandern. <a href="http://blog.adrianenns.de/wp-content/uploads/2010/02/curstest.zip">[.ZIP]</a></p>
<p>Ein weiteres Beispielprogramm zeigt andere Aspekte der Klasse und zeigt auch die Steuerung über die Pfeiltasten. <a href="http://blog.adrianenns.de/wp-content/uploads/2010/02/curstest2.zip">[.ZIP]</a></p>
]]></content:encoded>
			<wfw:commentRss>http://writedown.eu/2010/02/curse-in-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

