<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>monettenom 2.0 - Frickeleien</title>
    <link>http://monettenom.com/</link>
    <description>Wahnsinn ist das Resultat konsequent logischen Denkens</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.4.1 - http://www.s9y.org/</generator>
    <pubDate>Mon, 30 Aug 2010 19:30:09 GMT</pubDate>

    <image>
        <url>http://monettenom.com/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: monettenom 2.0 - Frickeleien - Wahnsinn ist das Resultat konsequent logischen Denkens</title>
        <link>http://monettenom.com/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Twitter-Messungen mit Tiffu</title>
    <link>http://monettenom.com/index.php?/archives/171-Twitter-Messungen-mit-Tiffu.html</link>
            <category>Frickeleien</category>
    
    <comments>http://monettenom.com/index.php?/archives/171-Twitter-Messungen-mit-Tiffu.html#comments</comments>
    <wfw:comment>http://monettenom.com/wfwcomment.php?cid=171</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://monettenom.com/rss.php?version=2.0&amp;type=comments&amp;cid=171</wfw:commentRss>
    

    <author>nospam@example.com (monettenom)</author>
    <content:encoded>
    Ich habe jetzt &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/tiffu.com/TwitterInfo&#039;);&quot;  href=&quot;http://tiffu.com/TwitterInfo&quot; target=_blank&gt;Tiffu&lt;/a&gt; eingesetzt, um Twitter zu überwachen. Dazu läuft ein Script, das ungefähr alle 5 Minuten durch einen Cronjob (aus Bequemlichkeit noch über &lt;a href=&quot;http://cronjob.de&quot; target=&quot;_blank&quot;&gt;http://cronjob.de&lt;/a&gt;) aufgerufen wird. Dieses Script ruft aus der public timeline von Twitter die 20 aktuellsten Tweets und wertet diese aus. Dabei ist als erstes festzustellen, dass Twitter in der public timeline nur jeden 1000sten Tweet zurückliefert. Also alle mit einer ID, die ohne Rest durch 1000 teilbar sind.&lt;br /&gt;
&lt;br /&gt;
Kann man diesen Input nun für sinnvolle Statistiken verwenden? Und wenn ja, wie?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Wieviele Tweets werden pro Sekunde bei Twitter geschrieben?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Die ID der Tweets repräsentiert die Anzahl der insgesamt geposteten Tweets, da diese offensichtlich aufsteigen nummeriert sind. Aufgrund des hohen Tweet-Aufkommens (zur Zeit ca. 1000/Sekunde) kommen in 5 Minuten also ungefähr 300.000 Tweets zusammen, was bedeutet, dass die Schrittweite von 1000 in der ID kaum ins Gewicht fällt. (Messfehler &gt; 0.33%). &lt;br /&gt;
&lt;br /&gt;
Die Anzahl der pro Sekunden geschriebenen Tweets lässt sich also ermitteln, indem man die Differenz der höchsten IDs zweier Twitter-Abfragen durch die verstrichene Zeit in Sekunden teilt. Das ist einfach.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Wieviele Accounts gibt es bei Twitter?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Interessanter wird es bei der Frage, wie viele Accounts bei Twitter existieren. Es gibt meines Wissens keine Möglichkeit, dies direkt abzufragen. &lt;br /&gt;
Hier gibt es zwei wesentliche Ansätze. Die erste einfachere ist, dass man sich aus den Stichproben (alle 5 Minuten 20 Tweets) einfach die insgesamt höchste Account-ID ermittelt und speichert und hofft, dann ungefähr auf die Million genau sagen zu können, wieviele Accounts insgesamt je existiert haben. Pro Tag werden 20x12x24=(5760) Tweets analysiert. Die Wahrscheinlichkeit, dass dabei einer der 1 Mio neuesten Accounts getroffen wird, hat eine Wahrscheinlichkeit von ca. 1:174, wenn man davon ausgeht, dass alle Accounts gleichmäßig twittern, was aber kaum der Fall sein dürfte. Wie hoch die Chance tatsächlich ist, lässt sich also schwer einschätzen. Man kann aber davon ausgehen, dass die ermittelte Anzahl im Laufe der Zeit immer genauer, aber nie ganz genau sein wird. Leider lässt sich die aktuell ermittelte Zahl von 184 Millionen kaum verifizieren.&lt;br /&gt;
&lt;br /&gt;
Die zweite Methode, die aktuelle Anzahl der Accounts zu ermitteln ist, einfach zwei möglichst aktuelle Accounts zu nehmen und die Differenz der IDs durch die Anzahl der passenden Zeiteinheit zu teilen. So erhält man zum Beispiel die Anzahl der erstellten Accounts pro Stunde in dem Zeitraum zwischen der Erzeugung dieser beiden Accounts. Mit diesem Wert kann man dann ungefähr hochrechnen, wieviele Accounts bei gleichbleibender Rate jetzt existieren könnten. &lt;br /&gt;
&lt;br /&gt;
Aktuell habe ich die erste Methode gewählt, weil es einfacher ist. Ich werde aber bei Gelegenheit zusätzlich die zweite implementieren, um überprüfen zu können, wie nahe die erste dem tatsächlichen Ergebnis kommt.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Welche Clients werden am häufigsten (zum Tweeten) verwendet?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Für diese Statistik benötige ich eine Tabelle in einer Datenbank. Zu jedem Tweet liefert Twitter die Information mit welchem Client dieser gepostet wurde. In dieser Datenbank haben sich bisher knapp 600 Einträge - also verschiedene Twitterclients angesammelt, wovon man max. 10% überhaupt als betrachtenswert einstufen kann. Insgesamt wurden bereits über 12.000 Tweets analysiert, was schon eine recht repräsentative Stichprobe darstellt. Zur Zeit führt neben den Twitter Clients (web und API) mit ca. 33%, Übertwitter mit etwas mehr als 10%, gefolgt von Tweetdeck und Twitter for BlackBerry® mit je ca. 4,5%. &lt;br /&gt;
&lt;br /&gt;
Die laufende Statistik kann unter &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/tiffu.com/TwitterInfo&#039;);&quot;  href=&quot;http://tiffu.com/TwitterInfo&quot; target=_blank&gt;Tiffu&lt;/a&gt; beobachtet werden.&lt;br /&gt;
&lt;br /&gt;
[Update 21:28] Gerade finde ich noch folgenden interessanten Artikel, nach dem herausgefunden wurde, dass die Account-IDs nicht sequentiell vergeben werden, sondern teilweise in Schrittweiten von 10: &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/twitterfacts.blogspot.com/2008/04/twitter-ids-and-number-of-twitter-users.html&#039;);&quot;  href=&quot;http://twitterfacts.blogspot.com/2008/04/twitter-ids-and-number-of-twitter-users.html&quot; title=&quot;Twitter id&#039;s and number of Twitter users&quot; target=_blank&gt;Twitter id&#039;s and number of Twitter users&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Mon, 30 Aug 2010 20:23:23 +0200</pubDate>
    <guid isPermaLink="false">http://monettenom.com/index.php?/archives/171-guid.html</guid>
    
</item>
<item>
    <title>Wie kann man mit JavaScript auf die URL-Parameter zugreifen?</title>
    <link>http://monettenom.com/index.php?/archives/169-Wie-kann-man-mit-JavaScript-auf-die-URL-Parameter-zugreifen.html</link>
            <category>Frickeleien</category>
    
    <comments>http://monettenom.com/index.php?/archives/169-Wie-kann-man-mit-JavaScript-auf-die-URL-Parameter-zugreifen.html#comments</comments>
    <wfw:comment>http://monettenom.com/wfwcomment.php?cid=169</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://monettenom.com/rss.php?version=2.0&amp;type=comments&amp;cid=169</wfw:commentRss>
    

    <author>nospam@example.com (monettenom)</author>
    <content:encoded>
    Ich habe heute ein kleines Spielchen mit JavaScript umgesetzt und kam dabei auf die Idee, die Einstellungen per Formular an das Script zu schicken. So etwas habe ich bereits mal bei jQuery gesehen, aber nicht näher drüber nachgedacht, wie das geht. So habe ich mich in den Tiefen des Netzes auf die Suche gemacht und bin auf eine völlig skurrille aber sehr praktische Methode gestoßen, auf diese Parameter zuzugreifen.&lt;br /&gt;
&lt;br /&gt;
Der Kern der Sache ist folgende Funktion:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
    (function()&lt;br /&gt;
    {&lt;br /&gt;
        var s = window.location.search.substring(1).split(&#039;&amp;&#039;);&lt;br /&gt;
        if(!s.length) return;&lt;br /&gt;
        var c = {};&lt;br /&gt;
        for(var i  = 0; i &lt; s.length; i++)&lt;br /&gt;
        {&lt;br /&gt;
            var parts = s[i].split(&#039;=&#039;);&lt;br /&gt;
            c[unescape(parts[0])] = unescape(parts[1]);&lt;br /&gt;
        }&lt;br /&gt;
        window.param = function(name){return name ? c[name] : c;}&lt;br /&gt;
    }());&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Dieser etwas kryptisch anmutende Codeblock ohne Namen ruft sich bei der Ausführung des Scripts selbst auf. Im Anschluss kann man dann mit param(&#039;parameter&#039;) auf die URL-Parameter zugreifen. &lt;br /&gt;
&lt;br /&gt;
Angenommen man hat folgende URL:&lt;br /&gt;
&lt;a href=&quot;http://domain.de/index.html?width=100&quot; target=&quot;_blank&quot;&gt;http://domain.de/index.html?width=100&lt;/a&gt;&lt;br /&gt;
dann liefert param(&#039;width&#039;) den Wert 100.&lt;br /&gt;
&lt;br /&gt;
Wenn man sich nicht darauf verlassen möchte, dass ein bestimmter Parameter übergeben wurde, kann man folgendes machen:&lt;br /&gt;
var width = !!param(&#039;width&#039;) ? param(&#039;width&#039;) : 50;&lt;br /&gt;
wobei 50 dann ein Default-Wert ist, der angenommen wird, wenn param(&#039;width&#039;) nicht definiert ist.&lt;br /&gt;
&lt;br /&gt;
Eine praktische Anwendung für dieses Feature kann man auf &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/xtainment.net/scripts/undercut/index.html&#039;);&quot;  href=&quot;http://xtainment.net/scripts/undercut/index.html&quot; target=_blank&quot;&gt;dieser Seite&lt;/a&gt; sehen.&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Fri, 06 Aug 2010 21:12:41 +0200</pubDate>
    <guid isPermaLink="false">http://monettenom.com/index.php?/archives/169-guid.html</guid>
    
</item>
<item>
    <title>Das erste Ergebnis meines Programmieren-für-Nüsse-Tags</title>
    <link>http://monettenom.com/index.php?/archives/168-Das-erste-Ergebnis-meines-Programmieren-fuer-Nuesse-Tags.html</link>
            <category>Frickeleien</category>
    
    <comments>http://monettenom.com/index.php?/archives/168-Das-erste-Ergebnis-meines-Programmieren-fuer-Nuesse-Tags.html#comments</comments>
    <wfw:comment>http://monettenom.com/wfwcomment.php?cid=168</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://monettenom.com/rss.php?version=2.0&amp;type=comments&amp;cid=168</wfw:commentRss>
    

    <author>nospam@example.com (monettenom)</author>
    <content:encoded>
    Ich habe nun ein Script fertig gestellt, dass nicht nur für die Auftraggeberin &lt;a href=&quot;http://www.twitter.com/BettinaKalandra&quot; target=_blank&gt;@BettinaKalandra&lt;/a&gt; nützlich ist, sondern für viele Webdesigner und Webmaster interessant ist, die ihren Kunden ermöglichen möchten, die News auf ihren Webseiten selber zu bearbeiten. Ich finde, das war eine perfekte Idee für den Programmieren-für-Nüsse-Tag. Danke nochmal für die Inspiration.&lt;br /&gt;
&lt;br /&gt;
Das &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/xtainment.net/wiki/index.php/PHPNewsScript&#039;);&quot;  href=&quot;http://xtainment.net/wiki/index.php/PHPNewsScript&quot; title=&quot;PHP News Script&quot; target=_blank&gt;PHP-News-Script&lt;/a&gt; ist völlig kostenlos und darf frei verwendet werden. Feedback ist ausdrücklich erwünscht und wer es einsetzt und mir den Link auf die Seite schickt, kommt als Beispiel auf diese Seite drauf.&lt;br /&gt;
&lt;br /&gt;
Leider hatte ich keine Zeit für alle die Blog- und Wordpress Probleme. Aber ich muss auch sagen: Von Wordpress habe ich keine Ahnung und kann da kaum weiterhelfen. Vielleicht gibt es ja einen Wordpress-Spezialisten, der mich imitiert und mal einen Wordpress-Konfiguration-für-Nüsse-Tag macht ;o)&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Fri, 06 Aug 2010 12:09:52 +0200</pubDate>
    <guid isPermaLink="false">http://monettenom.com/index.php?/archives/168-guid.html</guid>
    
</item>
<item>
    <title>Heute (5.8.) programmiere ich für Nüsse!</title>
    <link>http://monettenom.com/index.php?/archives/165-Heute-5.8.-programmiere-ich-fuer-Nuesse!.html</link>
            <category>Frickeleien</category>
    
    <comments>http://monettenom.com/index.php?/archives/165-Heute-5.8.-programmiere-ich-fuer-Nuesse!.html#comments</comments>
    <wfw:comment>http://monettenom.com/wfwcomment.php?cid=165</wfw:comment>

    <slash:comments>13</slash:comments>
    <wfw:commentRss>http://monettenom.com/rss.php?version=2.0&amp;type=comments&amp;cid=165</wfw:commentRss>
    

    <author>nospam@example.com (monettenom)</author>
    <content:encoded>
    Weil ich nach über einem Monat immer noch kein neues Projekt habe (klares Projektvermittler-Fail) werde ich heute ganz kostenlos Programmieraufträge in PHP und JavaScript entgegennehmen und kostenlos ausführen. Die Ergebnisse dürfen vom Auftraggeber frei und ohne Einschränkungen benutzt werden, wobei ich die Ergebnisse allerdings veröffentlichen werde. &lt;br /&gt;
&lt;br /&gt;
Wer ein Script braucht, schreibt seine Wünsche als Kommentar an diesen Blog-Eintrag. Ich suche mir dann was raus und setze soviel um, wie ich schaffe. Es sollten keine allzu großen und aufwändigen Sachen sein, die man in ein paar Stunden schaffen kann. &lt;br /&gt;
&lt;br /&gt;
Damit möglichst viele in den Genuss der Gratis-Programmierung kommen, werde ich die kleineren Sachen vorziehen und schauen, wieviel ich an einem Tag schaffe.&lt;br /&gt;
&lt;br /&gt;
Also ran an die Tasten, morgen früh lege ich direkt los und ich hoffe, dass es dann auch was zu tun gibt!&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Wed, 04 Aug 2010 22:16:20 +0200</pubDate>
    <guid isPermaLink="false">http://monettenom.com/index.php?/archives/165-guid.html</guid>
    
</item>
<item>
    <title>Das Antifa-PHP-Script</title>
    <link>http://monettenom.com/index.php?/archives/161-Das-Antifa-PHP-Script.html</link>
            <category>Frickeleien</category>
    
    <comments>http://monettenom.com/index.php?/archives/161-Das-Antifa-PHP-Script.html#comments</comments>
    <wfw:comment>http://monettenom.com/wfwcomment.php?cid=161</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://monettenom.com/rss.php?version=2.0&amp;type=comments&amp;cid=161</wfw:commentRss>
    

    <author>nospam@example.com (monettenom)</author>
    <content:encoded>
    Ich war gerade damit befasst, ein paar Teile von &lt;a href=&quot;http://wayati.com&quot; target=&quot;_blank&quot;&gt;http://wayati.com&lt;/a&gt; für ein neues Projekt zu kopieren, als ich auf ein PHP-Code-Snippet gestoßen bin, die eine klare Absage an Rechtsextremismus darstellt:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
$nazi = false;&lt;br /&gt;
if( stristr( $user, &quot;npd&quot; ) )&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;$nazi = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Anschließend kann man sich aufgrund dieser Variable im weiteren Code von Rechtsextremismus distanzieren.&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Thu, 01 Jul 2010 22:11:48 +0200</pubDate>
    <guid isPermaLink="false">http://monettenom.com/index.php?/archives/161-guid.html</guid>
    
</item>
<item>
    <title>PHP: Session grundlegend zerstören</title>
    <link>http://monettenom.com/index.php?/archives/114-PHP-Session-grundlegend-zerstoeren.html</link>
            <category>Frickeleien</category>
    
    <comments>http://monettenom.com/index.php?/archives/114-PHP-Session-grundlegend-zerstoeren.html#comments</comments>
    <wfw:comment>http://monettenom.com/wfwcomment.php?cid=114</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://monettenom.com/rss.php?version=2.0&amp;type=comments&amp;cid=114</wfw:commentRss>
    

    <author>nospam@example.com (monettenom)</author>
    <content:encoded>
    Ich habe mal eine Maßnahme entwickelt, die nicht nur die Session vollständig löscht, sondern auch alle Cookies:&lt;br /&gt;
&lt;font face=&quot;courier new&quot; color=black&gt;&lt;code&gt;&lt;br /&gt;
// Session starten&lt;br /&gt;
session_start();&lt;br /&gt;
// Inhalt des kompletten Arrays zerstören&lt;br /&gt;
$_SESSION = array();&lt;br /&gt;
&lt;br /&gt;
// Alle werte im $_COOKIE Array mit SetCookie löschen und das Verfallsdatum zurücksetzen&lt;br /&gt;
foreach( $_COOKIE as $key =&gt; $value )&lt;br /&gt;
&amp;#160;&amp;#160;setCookie( $key, &#039;&#039;, -3600 );&lt;br /&gt;
&lt;br /&gt;
// Session zerstören&lt;br /&gt;
session_destroy();&lt;br /&gt;
// Redirect auf eine Seite durchführen, um die Cookie-Löschung wirksam werden zu lassen&lt;br /&gt;
// &amp;lt;url&amp;gt; muss natürlich durch eine gültige URL ersetzt werden&lt;br /&gt;
header( &quot;location: &amp;lt;url&amp;gt;&quot; );&lt;br /&gt;
// Script abbrechen&lt;br /&gt;
exit();&lt;br /&gt;
&lt;/code&gt;&lt;/font&gt;&lt;br /&gt;
Dieses Vorgehen wurde bei mir notwendig, da ich die Access Tokens für Twitter-OAuth in Cookies speichere, um den Twitter-Login auch nutzen zu können, wenn die Session abgelaufen ist. Dies bewirkt, dass der User direkt an Twitter angemeldet ist, wenn er sich einmal eingeloggt hat und zum Beispiel am nächsten Tag wieder kommt. Sind die Cookies entsprechend gesetzt, werden die Session-Parameter wiederhergestellt, so dass er sie für Twitterzugriffe verwendet werden können, die eine Authentifizierung benötigen.&lt;br /&gt;
&lt;br /&gt;
Wenn sich der Benutzer mittels &quot;Logout&quot; explizit ausloggen möchte, müssen also auch die Cookies entfernt werden, um nicht beim nächsten Aufruf wieder automatisch angemeldet zu werden.&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Tue, 27 Oct 2009 23:11:39 +0100</pubDate>
    <guid isPermaLink="false">http://monettenom.com/index.php?/archives/114-guid.html</guid>
    
</item>

</channel>
</rss>