<?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/"
xmlns:series="http://unfoldingneurons.com/"
> <channel><title>Technik, Gothic und Anderes &#187; Applikationen</title> <atom:link href="http://blog.oncode.info/category/applikationen/feed/" rel="self" type="application/rss+xml" /><link>http://blog.oncode.info</link> <description>Technik ist Spiel, Gothic ist ernst und Zeit hat man zuviel</description> <lastBuildDate>Wed, 01 Feb 2012 17:03:41 +0000</lastBuildDate> <language>de</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>Dynamische Mailsignaturen in Apple 10.7 (Lion)</title><link>http://blog.oncode.info/2011/10/13/dynamische-mailsignaturen-in-apple-10-7-lion/</link> <comments>http://blog.oncode.info/2011/10/13/dynamische-mailsignaturen-in-apple-10-7-lion/#comments</comments> <pubDate>Thu, 13 Oct 2011 10:45:38 +0000</pubDate> <dc:creator>skaldrom</dc:creator> <category><![CDATA[Applikationen]]></category> <category><![CDATA[Theorie und Schnipsel]]></category> <category><![CDATA[apple]]></category> <category><![CDATA[applescript]]></category> <category><![CDATA[dynamische signatur]]></category> <category><![CDATA[lion shortcut]]></category> <category><![CDATA[mac]]></category> <category><![CDATA[mai.app]]></category> <category><![CDATA[tastaturkürzel]]></category> <guid
isPermaLink="false">http://blog.oncode.info/?p=1880</guid> <description><![CDATA[Auch auf dem Mac kann man dynamische Signaturen f&#252;r Mails benutzen.]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.oncode.info/wp-content/uploads/2011/10/dynmail.png" alt="Dynamisches Mail" title="" width="172" height="136" class="lead" align="left" />Wie man in <a
href="/2008/07/28/dynamische-signatur-e-schrecking-fuer-foren-myspace/">verschiedenen</a>, <a
href="/2006/08/31/sich-andernde-mailsignaturen-mit-fortune/">schon geschriebenen Blogeintr&#228;gen</a> sehen kann, ist es mir ein Anliegen, die Welt mit etwas Dynamik zu versehen, zumindest was Mailsignaturen betrifft. Ja, auch in Mac OSX ist das m&#246;glich!</p><p>Von Haus aus bringt OSX keine M&#246;glichkeit mehr mit, dynamische Signaturen zu erstellen. Entweder, weil es so gedacht war, weil diese Funktion in die Cloud ausgelagert wurde <img
src='http://blog.oncode.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> oder wegen <a
href="https://discussions.apple.com/message/6904290?messageID=6904290#6904290">eines Bugs</a>. Ich habe so ziemlich alles durchprobiert, was <a
href="http://hints.macworld.com/article.php?story=20040503211932363">dieser Artikel &#252;ber fortunes</a> und andere Websites beschrieben haben, doch leider l&#228;uft es nicht &#8211; oder nicht mehr &#8211; so.</p><p>Erkenntnisse:</p><ul><li>AppleScripts m&#246;chten nicht einfach so mit Tastaturk&#252;rzeln versehen werden.</li><li>Das <em>AppleScript Utility</em> gibt es nicht mehr. Um AppleScripts zu aktivieren muss der <em>AppleScript-Editor</em> ge&#246;ffnet werden und das Skriptmen&#252; in den Einstellungen aktiviert werden (siehe Abbildung).</li></ul><div
id="attachment_1889" class="wp-caption alignnone" style="width: 674px"><img
src="http://blog.oncode.info/wp-content/uploads/2011/10/Bildschirmfoto-2011-10-10-um-18.08.01.png" alt="" title="Skript-Men&#252; im neuen AppleScript-Editor" width="664" height="454" class="size-full wp-image-1889" /><p
class="wp-caption-text">Skript-Men&#252; im neuen AppleScript-Editor</p></div><p>Will man doch mittels fortune dynamische Signaturen erzeugen, muss man wie Folgt vorgehen:</p><ol><li>Zuerst braucht man <em>fortune</em>. Dies kann man sich beispielsweise per <a
href="http://www.macports.org/">MacPorts</a> beschaffen. Damit MacPorts l&#228;uft, muss XCode vom AppStore installiert werden.</li><li>Dann sollte man sich eine Zitatsammlung bereit legen, wie im <a
href="/2006/08/31/sich-andernde-mailsignaturen-mit-fortune/">Blogeintrag zu dynamischen Signaturen</a> beschrieben.</li><li>Dann muss man den <em>Automator</em> starten und einen neuen Service erstellen.</li><li>Grundeinstellung: &#8220;Dienst empf&#228;ngt <b>keine Eingabe</b> in <b>Mail.app</b>&#8220;</li><li>Als Aktion <em>AppleScript ausf&#252;hren</em> suchen und einf&#252;gen.</li><li>Das AppleScript:<br
/> [cc lang="AppleScript"]<br
/> on run {input, parameters}</p><p> tell application &#8220;Mail&#8221;<br
/> activate<br
/> make new outgoing message with properties ¬<br
/> {content:do shell script &#8220;/Users/linux/Documents/sigs/psignature-mac&#8221;, visible:true}<br
/> end tell<br
/> return input<br
/> end run<br
/> [/cc]<br
/> Nat&#252;rlich muss der Pfad angepasst werden. <em>psignature-mac</em> ist ein Script mit folgendem Inhalt:<br
/> [cc lang="bash"]<br
/> #! /bin/bash<br
/> echo &#8221;  Viele Gr&#252;sse&#8221;<br
/> echo &#8221;     Skaldrom&#8221;<br
/> echo &#8220;-=-=-=-=-=-=-=-=-&#8221;<br
/> /opt/local/bin/fortune `dirname &#8220;$0&#8243;`/quotes/shorties<br
/> [/cc]<br
/> Dann alles speichern und einen Kaffee trinken oder Kekse backen gehen.</li><li>Um den Tastaturk&#252;rzel festzulegen, muss die <em>Systemeinstellungen</em> ge&#246;ffnet werden. Dort auf <em>Tastatur</em> &rarr; <em>Tastaturkurzbefehle</em> gehen. Der Dienst sollte irgendwo erscheinen und ein Klick auf den leeren Platz rechts davon erm&#246;glicht es, einen Tastaturkurzbefehl einzugeben.<br
/> <img
src="http://blog.oncode.info/wp-content/uploads/2011/10/keyboard.png" alt="" title="keyboard" width="639" height="313" class="alignnone size-full wp-image-1896" /></li><li>Mail &#246;ffnen, Tastaturkurzbefehl (ja, ich mag dieses Wort) dr&#252;cken und sich freuen.</li></ol><p>Es gibt auch eine L&#246;sung f&#252;r existierende Mails:<br
/> [cc lang="AppleScript"]<br
/> on run {input, parameters}</p><p> tell application &#8220;Mail&#8221;<br
/> activate<br
/> get do shell script &#8220;/Users/linux/Documents/sigs/psignature-mac&#8221;<br
/> copy return &#038; the result ¬<br
/> to theFortune</p><p> tell application &#8220;System Events&#8221;<br
/> tell process &#8220;Mail&#8221;<br
/> keystroke theFortune<br
/> end tell<br
/> end tell<br
/> end tell<br
/> return input<br
/> end run<br
/> [/cc]</p> ]]></content:encoded> <wfw:commentRss>http://blog.oncode.info/2011/10/13/dynamische-mailsignaturen-in-apple-10-7-lion/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Klauen ist auch nicht mehr wie fr&#252;her&#8230;</title><link>http://blog.oncode.info/2011/06/02/klauen-ist-auch-nicht-mehr-wie-fruher/</link> <comments>http://blog.oncode.info/2011/06/02/klauen-ist-auch-nicht-mehr-wie-fruher/#comments</comments> <pubDate>Thu, 02 Jun 2011 09:53:59 +0000</pubDate> <dc:creator>skaldrom</dc:creator> <category><![CDATA[Desktop]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[Android]]></category> <category><![CDATA[antitheft]]></category> <category><![CDATA[diebstahl]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[theft protection]]></category> <guid
isPermaLink="false">http://blog.oncode.info/?p=1844</guid> <description><![CDATA[Theft Protection f&#252;r Laptops und Handys, gratis und einfach.]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.oncode.info/wp-content/uploads/2011/06/theft.png" alt="" title="theft" width="158" height="126" class="lead" align="left" />Das Arsenal an Ger&#228;ten, die ein durchschnittlicher Geek heutzutage mit sich herumschleppt, hat bald den Gegenwert eines kleinen Autos. Wenn fr&#252;her ein Rucksack geklaut wurde (oder, hmm, ehrlich gesagt, zerstreut wie immer &#8220;irgendwo liegen gelassen&#8221; wurde), dann war der Rucksack selbst oftmals das teuerste Ding des ganzen Verlustes. Heutzutage &#8211; mit Laptop, Pad, Phone, &#8230; &#8211; geht ein ganzer Serverraum verloren. Meine Wenigkeit ist so was von Monotasking, dass ich oftmals mit atmen, laufen, verdauen und transpirieren schon an die Grenze komme (darum spreche ich so wenig, weil dann mein Herz aussetzen w&#252;rde!), wie soll ich dann noch an die 1001 Ger&#228;te denken, die ich irgendwie zusammen wischen und mitnehmen sollte? Da ich k&#246;rperlich auch nicht unbedingt einem Standard-Hulk entspreche, muss ich wohl gegen Diebstahl andere Massnahmen ergreifen.</p><p>Vorsorge ist besser als Heulen und Therapie im Nachhinein, darum habe ich jetzt, wo alle Ger&#228;te noch um mich herum sind, ein paar Dinge &#252;berlegt. Ich kann das nicht genug gewichten: Man sollte etwas tun, <strong>bevor</strong> die Ger&#228;te weg sind.</p><h3>Was kann man tun?</h3><p>Gewisse Dinge sind sehr einfach zu realisieren und ersparen viel M&#252;he:</p><dl><dt>Regelm&#228;ssiges Backup</dt><dd>Ok, das wird eh niemand tun, bevor nicht eine Semesterarbeit im den ewigen Datengr&#252;nden verschwindet oder stundenlang Daten wiederabgetippt werden m&#252;ssen. Sobald das aber einmal passiert ist, kann ich <a
href="http://luckybackup.sourceforge.net/">luckyBackup</a> und <a
href="http://www.cis.upenn.edu/~bcpierce/unison/">unison</a> empfehlen. Ein NAS w&#228;re mittlerweile ebenfalls erschwinglich. Wenn man viele Ger&#228;te besitzt, kann man auch Backuppen, indem man die Dateien auf allen Computern ablegt/synchronisiert. F&#252;r Serverbesitzer: Ich habe mittlerweile auch viele Dokumente und nicht nur Quellcode im svn.</dd><dt>Synchronisieren von Daten und Adressen</dt><dd>Oftmals wird der Wert von Terminen und Adressen untersch&#228;tzt. Syncen hilft, egal ob mit Google, <a
href="http://www.memotoo.com/">memotoo</a>, oder sonst was&#8230;</dd><dt>Absichern des Systems</dt><dd>Das hilft auch gegen neugierige Mitmenschen! Bootpasswort, BIOS-Passwort und das Booten von externen Ger&#228;ten unbedingt unterbinden! Wenn die Pladde nicht verschl&#252;sselt ist und ich von einem USB-Stick booten kann, hilft auch ein 42-Zeichen langes Passwort nix!</dd><dt>Installation von Anti Theft Software</dt><dd>Siehe unten.</dd></dl><h3>Anti Theft Software</h3><p>Das Prinzip ist einfach: Eine Software wird auf dem Laptop/Handy installiert, die sich regelm&#228;ssig bei einem Server meldet. Sollte das Ger&#228;t verschwinden, k&#246;nnen zum Einen Standort, Manipulationen und sogar Photos vom Dieb &#252;bertragen, zum Anderen Daten gesichert und das Ger&#228;t fernmanipuliert werden. Der absolute Br&#252;ller und Beweis, dass es klappen kann, ist <a
href="http://thisguyhasmymacbook.tumblr.com/">This Guy Has My MacBook</a>. Der Link ist wirklich hitverd&#228;chtig.</p><p><img
src="http://blog.oncode.info/wp-content/uploads/2011/06/prey-agent.png" alt="" title="prey-agent" width="64" height="64" class="lead" align="left" />F&#252;r Linux-Laptops gibt es beispielsweise <a
href="http://preyproject.com/">Prey</a> (ja, es gibt auch eine Windows- und eine <a
href="https://market.android.com/details?id=com.prey">Android</a>-Version). Diese L&#246;sung ist grunds&#228;tzlich gratis und bei Ubuntu &#252;ber den Package-Manager installierbar. In <tt>/etc/prey/config</tt> muss der api und der device-key von der Website eingetragen werden, dann sollte man noch <tt>/etc/cron.d/prey</tt> &#252;berpr&#252;fen und los gehts. Im Falle eines Diebstahl hat man alle sch&#246;nen Werkzeuge zur Verf&#252;gung.</p><p>Als Administrator kann man unter Linux mittels <tt>/usr/lib/prey/prey.sh</tt> die Ausf&#252;hrung testen, das Logfile befindet sich unter <tt>/var/log/prey.log</tt>. Windows hat in einem Unterverzeichnis <tt>check.bat</tt> das aber nur als Administrator durchl&#228;uft.</p><p>Unter Windows sollte man die Sache sowieso gut austesten, insbesondere, wenn man Standardbenutzer ohne Passwort hat. Diese haben standardm&#228;ssig die Erlaubnis, Dateien zu l&#246;schen. Abhilfe: Vererbbare Rechte f&#252;r das Verzeichnis in normale Rechte umwandeln und den &#8220;Authenticated Users&#8221; das &#8220;Change&#8221; Recht entziehen.</p><p>F&#252;r mein <a
href="/2010/11/25/archos-10-1-ein-geiles-geraet/">nicht-GPS und nicht-3G Android-Pad</a>, steht Prey im Androidmarket leider nicht zur Verf&#252;gung. Irgendeine chinesische Version erscheint zwar als Suchresultat, aber da bin ich nun doch etwas misstrauisch. Funktioniert hat <a
href="https://market.android.com/details?id=com.snuko.android">die App</a> von <a
href="http://www.snuko.com/de">Snuko</a>, wenn man eine Fake-Telefonnummer eingibt.</p><p>So, nun bin ich gespannt wie es sich im Ernstfall bew&#228;hrt. Ich bin auf jeden Fall ger&#252;stet und habe Vorgesorgt!</p><h3>Was w&#228;re sch&#246;n</h3><p>Ganz sch&#246;n w&#228;re eine einfache Bluetooth-Proximity Implementation. Sobald sich die Ger&#228;te mehr als ein paar Meter voneinander entfernen, sollten alle einen schrillen Pfeifton abgeben und eine nette Frauenstimme sollte k&#252;hl aber bestimmt sagen: &#8220;Skaldrom, du seniler Greis, hast Du nicht etwas vergessen?&#8221;. Hmm, das w&#228;re auch f&#252;r Kinder geeignet und in K&#252;rze werde ich auch f&#252;r meine Hosen ein solches Ger&#228;t brauchen&#8230;</p> ]]></content:encoded> <wfw:commentRss>http://blog.oncode.info/2011/06/02/klauen-ist-auch-nicht-mehr-wie-fruher/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Swisscom Labs mit (beta) Apps und Technik-Infos</title><link>http://blog.oncode.info/2010/12/19/swisscom-labs-mit-beta-apps-und-technik-infos/</link> <comments>http://blog.oncode.info/2010/12/19/swisscom-labs-mit-beta-apps-und-technik-infos/#comments</comments> <pubDate>Sun, 19 Dec 2010 12:59:31 +0000</pubDate> <dc:creator>skaldrom</dc:creator> <category><![CDATA[Web]]></category> <category><![CDATA[Beta]]></category> <category><![CDATA[co-creation]]></category> <category><![CDATA[Labs]]></category> <category><![CDATA[News]]></category> <category><![CDATA[Open Innovation]]></category> <category><![CDATA[Swisscom]]></category> <guid
isPermaLink="false">http://blog.oncode.info/?p=1639</guid> <description><![CDATA[Die Swisscom Labs ist eine neue Website f&#252;r Technikaffine und Early Adopters; Also wie geschaffen f&#252;r uns GeekyTechs :)... ]]></description> <content:encoded><![CDATA[<p><a
href="http://labs.swisscom.ch/" rel="nofollow"><img
src="http://blog.oncode.info/wp-content/uploads/2010/12/swisscom.png" alt="swisscom logo" title="swisscom" width="187" height="180" class="lead" align="right" /></a>[<a
href="http://www.trigami.com/?blog=http://blog.oncode.info/" rel="nofollow" target="_blank">Trigami-Review</a>]<script type="text/javascript" src="http://s.trigami.com/390235s.js"></script><br
/> Wie klingt das: &#8220;Eine Schweizer Website f&#252;r Technikaffine mit News, der M&#246;glichkeit als &#8220;Early Adopter&#8221; Services, Apps und Neues zu testen, Erfahrungen auszutauschen sowie eine Plattform f&#252;r Entwickler.&#8221;? Passt doch wie die Faust aufs Auge! Und dahinter steht niemand geringerer als die Swisscom selbst: Sie hat die <a
href="http://labs.swisscom.ch/" rel="nofollow">Swisscom Labs</a> ins Leben gerufen. Beim Schm&#246;kern merkt man, dass die Site noch neu ist, aber mit sehr viel Enthusiasmus und Aufwand gef&#246;rdert wird. Mit Wettbewerben, Aktionen wie &#8220;<a
href="http://labs.swisscom.ch/en/content/ask-ceo" rel="nofollow">Ask the CEO</a>&#8221; und verschiedenen Events wird das Community-Building vorangetrieben. Das lasse ich mir als &#8220;Zielpublikum&#8221; nat&#252;rlich gerne gefallen.</p><h3>Was gibts auf den Swisscon Labs?</h3><h4>News</h4><p>Die News, die auf der Site pr&#228;sentiert werden, sind zum Einen aus der vordersten Front (Beispielsweise &#8220;<a
href="http://labs.swisscom.ch/en/content/ein-gebogener-multi-touch-arbeitstisch" rel="nofollow">Ein gebogener Multi-Touch-Arbeitstisch</a>&#8220;), geekig (&#8220;<a
href="http://labs.swisscom.ch/de/content/antikes-mit-%C2%ABlego-technic%C2%BB-nachgebaut" rel="nofollow">Antikes mit «Lego Technic» nachgebaut</a>&#8220;) oder aus dem Hause Swisscom selbst (wie &#8220;<a
href="http://labs.swisscom.ch/de/content/swisscom-und-ictnet-pr%C3%A4mieren-beste-diplomarbeit-im-ict-bereich" rel="nofollow">Swisscom und ICTnet pr&#228;mieren beste Diplomarbeit im ICT-Bereich</a>&#8220;). Alles in Allem eine gute und interessante Mischung von Themen, die in einem angenehmen Rhythmus publiziert werden.</p><h4>Apps</h4><p>DAS k&#246;nnte spannend werden: Ein interessantes Sammelsurium aus Android, I-Phone und Web-Applikationen. Hier finden sich Apps von Swisscom und auch von anderen Anbietern. Einige der Apps sind gebrauchsfertig, andere wiederum sind eher Betas. Laut <a
href="http://labs.swisscom.ch/de/faq" rel="nofollow">FAQ</a> k&#246;nnte man hier auch eigene Entwicklungen publizieren, wenn sie gewissen Anforderungen gen&#252;gen. Diese App-Abteilung hat das Potential, ein Platz f&#252;r lokale/nationale Applikationen zu werden, die in erster Linie die Schweiz betreffen. In den Markets findet man diese sonst leider eher schlecht, weil sie in der Masse untergehen. Ich glaube nicht, dass die Swisscom einen eigenen, ausgewachsenen App-Market hochziehen m&#246;chte, aber vielleicht erh&#228;lt sie auf diese Art und Weise befruchtende Ideen oder Apps, die das Netz ausnutzen&#8230;.</p><h4>Forum</h4><p>Ein Forum zum Laufen zu kriegen &#8211; vorallem wenn die Inhalte nicht sehr kontrovers sind &#8211; ist schwer. Die Swisscom hat hier richtig gehandelt und ein einzelnes Forum (ohne Unterthemen) aufgeschaltet. Ich sch&#228;tze den freundlichen und h&#246;flichen Umgangston der in diesem Forum herrscht sehr. Ein sehr angenehmer Gegensatz zu anderen Fach-Plattformen.</p><p>Technisch ist es etwas verwunderlich, dass die Links im Forum nicht mit &#8220;<a
href="http://de.wikipedia.org/wiki/Nofollow" rel="nofollow">nofollow</a>&#8221; gekennzeichnet werden. Einige Spammer haben bereits Witterung aufgenommen. Ich bin aber fest davon &#252;berzeugt, dass die Admins das bald im Griff haben werden.</p><h3>Community-Building</h3><p>Auf der Site gibt es ein <a
href="http://labs.swisscom.ch/de/content/achievements" rel="nofollow">Ranking-System</a> (fast wie bei <a
href="http://answers.yahoo.com/" rel="nofollow">Yahoo-Answers</a> oder <a
href="http://stackoverflow.com/" rel="nofollow">StackOverflow</a>). F&#252;r bestimmte Aktionen gibt es Punkte, und mit den Punkten steigt man in der Level-Hierarchie auf. Die Leute mit den h&#246;chsten Levels werden zum &#8220;Labs Event&#8221; eingeladen und besitzen auch ganz Allgemein eine h&#246;here &#8220;Credibility&#8221;.</p><p>Eine sehr interessante Idee ist der <a
href="http://labs.swisscom.ch/#hideContent" rel="nofollow">Community-Tree</a>, der laut <a
href="http://labs.swisscom.ch/en/faq" rel="nofollow">FAQ</a> von zwei ziemlich interessanten Firmen hergestellt wurde. Er stellt Benutzer, Posts und Aktivit&#228;ten dar. Je mehr Punkte ein Posting oder ein Benutzer hat, desto gr&#246;sser seine Repr&#228;sentation im Tree. Beim Klick auf einen Benutzer passiert gar wunderliches: Es entstehen Linien, die zeigen, mit welchen Posts und Benutzern der User vor Kurzem interagiert hat. Nun, es ist nett anzusehen, aber irgendwie beginnt hier mein Privacy-Warner zu blinken: Ich m&#246;chte nicht unbedingt, dass andere Benutzer sehen k&#246;nnen mit wem ich Kontakt pflege, beziehungsweise welche Infos ich mir ansehe.</p><p><object
width="480" height="385"><param
name="movie" value="http://www.youtube.com/v/VgbccqzpUjo?fs=1&amp;hl=en_US"></param><param
name="allowFullScreen" value="true"></param><param
name="allowscriptaccess" value="always"></param><embed
src="http://www.youtube.com/v/VgbccqzpUjo?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p><h3>Fazit</h3><p>Die Site ist klar und sauber aufgebaut, es steckt viel Enthusiasmus dahinter und die anderen Benutzer sind interessiert und freundlich. Man merkt sehr deutlich, dass sie sich noch im Aufbau befindet. Dies ist aber ganz klar als positiv anzusehen, da die Macher sehr interessiert an Meinungen und Feedback sind und somit der Weg der Site mitgestaltet werden kann. Es w&#252;rde mich freuen, wenn noch mehr Geeks, Nerds, Freaks und normale Menschen der Site eine Chance geben w&#252;rden und man sich dort treffen k&#246;nnte.</p> ]]></content:encoded> <wfw:commentRss>http://blog.oncode.info/2010/12/19/swisscom-labs-mit-beta-apps-und-technik-infos/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Jetzt macht auch Google noch ein Programmierwettbewerb</title><link>http://blog.oncode.info/2010/09/06/jetzt-macht-auch-google-noch-ein-programmierwettbewerb/</link> <comments>http://blog.oncode.info/2010/09/06/jetzt-macht-auch-google-noch-ein-programmierwettbewerb/#comments</comments> <pubDate>Mon, 06 Sep 2010 17:13:19 +0000</pubDate> <dc:creator>skaldrom</dc:creator> <category><![CDATA[Applikationen]]></category> <category><![CDATA[Theorie und Schnipsel]]></category> <category><![CDATA[AI]]></category> <category><![CDATA[Contest]]></category> <category><![CDATA[Google]]></category> <category><![CDATA[Programmierspiele]]></category> <category><![CDATA[Spiel]]></category> <category><![CDATA[Wettbewerb]]></category> <guid
isPermaLink="false">http://blog.oncode.info/?p=1528</guid> <description><![CDATA[Nun macht auch Google noch ein Programmierwettbewerb, und so wie es aussieht auch noch einen Spannenden...]]></description> <content:encoded><![CDATA[<p>Ich habe mich schon gefreut: Der W&#252;rfler zum <a
href="/2010/08/10/ein-programmierwettbewerb-vom-linux-magazin/">Linux-Magazin-Wettbewerb</a> ist fertiggestellt und eigentlich bereit zum Einsenden. Etwas entt&#228;uscht habe ich festgestellt, dass das Problem akademisch gel&#246;st und der optimale Spieler bekannt ist. Nun, der Thrill der noch bleibt ist, dass bei nur 100 Spielen auf 50 Punkte der Zufall eine seeeehr grosse Rolle spielt.</p><p>Doch zu fr&#252;h gefreut, jetzt kommt das: Die Google <a
href="http://www.ai-contest.com/">AI-Challenge</a>. Man kann nicht mal was gewinnen, aber das Spiel ist unglaublich genial: Es geht darum, Planeten zu erobern:</p><p><object
width="500" height="405"><param
name="movie" value="http://www.youtube.com/v/O0uxXZY-t-s?fs=1&amp;hl=en_US&amp;rel=0&amp;border=1"></param><param
name="allowFullScreen" value="true"></param><param
name="allowscriptaccess" value="always"></param><embed
src="http://www.youtube.com/v/O0uxXZY-t-s?fs=1&amp;hl=en_US&amp;rel=0&amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="405"></embed></object></p><p>Es gibt jetzt schon <a
href="http://www.ai-contest.com/starter_packages.php">Starter-Packages f&#252;r verschiedene Sprachen</a> und das System ist ziemlich offen (f&#252;r unsere Shell-Krieger <img
src='http://blog.oncode.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ). Ab dem 10.09.2010 kann man sich dann offiziell eintragen und losranken.</p> ]]></content:encoded> <wfw:commentRss>http://blog.oncode.info/2010/09/06/jetzt-macht-auch-google-noch-ein-programmierwettbewerb/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Ein Programmierwettbewerb vom Linux Magazin</title><link>http://blog.oncode.info/2010/08/10/ein-programmierwettbewerb-vom-linux-magazin/</link> <comments>http://blog.oncode.info/2010/08/10/ein-programmierwettbewerb-vom-linux-magazin/#comments</comments> <pubDate>Tue, 10 Aug 2010 16:53:11 +0000</pubDate> <dc:creator>skaldrom</dc:creator> <category><![CDATA[Applikationen]]></category> <category><![CDATA[Theorie und Schnipsel]]></category> <category><![CDATA[Game]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[Spiel]]></category> <category><![CDATA[Wettbewerb]]></category> <guid
isPermaLink="false">http://blog.oncode.info/?p=1503</guid> <description><![CDATA[Ein PHP-Ger&#252;st f&#252;r den Linux-Magazin Programmierwettbewerb.]]></description> <content:encoded><![CDATA[<p><strong>Nachtrag vom 19.08.2010:</strong> Ich wurde Opfer von &#8220;mod_security&#8221;, damit konnte ich keine Artikel mehr editieren, weil ich immer ein &#8220;404 Not Found&#8221; pr&#228;sentiert bekommen habe. DAS ist doch ein Heuler&#8230;</p><p>Nun, ich habe eine neue Version des Clients unten hingeh&#228;ng: Stabiler, so dass er auch eine ganze Nacht &#252;ber viele Stunden und Verbindungsprobleme hinweg weiterspielt.</p><p><img
src="http://blog.oncode.info/wp-content/uploads/2010/08/dice.png" alt="Wuerfel" title="dice" width="119" height="148" class="lead" align="left" />Oh nein. Frisch erk&#228;ltet wollte ich mich auf die Arbeiten st&#252;rzen, die eigentlich schon letztes Jahr h&#228;tten erledigt sein m&#252;ssen, und nun das: Das <a
href="http://www.linux-magazin.de/">Linux-Magazin</a> veranstaltet einen Wettbewerb f&#252;r Programmierer! Die Details sind in der Ausgabe 09/10 (auch <a
href="http://www.linux-magazin.de/Heft-Abo/Ausgaben/2010/09/Reiz-des-Mitmachens">online</a>) beschrieben und es gibt eine <a
href="http://wettbewerb.linux-magazin.de/index.php/Hauptseite">Wettbewerbs-Seite</a> dazu.</p><p>Grunds&#228;tzlich geht es darum, dass zwei Programme gegeneinander w&#252;rfeln. Wer zuerst 50 Punkte oder mehr erreicht, hat gewonnen. Ist man am Zuge, so kann man entweder W&#252;rfeln oder &#8220;Save&#8221;n. Bei einem Wurf werden die Augen zu der eigenen Punktzahl hinzugez&#228;hlt, ausser man w&#252;rfelt eine 6, dann werden alle Punkte seit dem letzten Save wieder abgezogen. Bei einem Save werden die Punkte gespeichert und der Gegner ist am Zuge.</p><p>Gespielt wird richtig Harte-M&#228;nner-m&#228;ssig &#252;ber einen TCP-Port mit einem definierten, menschenlesbaren Protokoll.</p><p>Die Programmiersprache kann frei gew&#228;hlt werden, insofern sie in Ubuntu 10.04 vorhanden ist und mit einem Makefile gebuildet und gestartet werden kann. Ich hab mich mal wieder f&#252;r PHP (Kommandozeile) entschieden weil das Problem, hmm, &#252;berhaupt nicht zeitkritisch ist (nein, auch diesmal kein <a
href="http://en.wikipedia.org/wiki/Monte_Carlo_method">Monte-Carlo</a>) und auch sonst, hmm, und &#252;berhaupt nicht weil ich zu faul war ein Makefile f&#252;r Java zu schreiben oder meine C-Kenntnisse aufzufrischen <img
src='http://blog.oncode.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p><p>Als Erstes habe ich einen Simulator f&#252;r einen Benchmark implementiert. Als Messgr&#246;sse habe ich die Anzahl &#8220;Transaktionen&#8221; gew&#228;hlt, also wie oft mein Programm dran war mit W&#252;rfeln bis die 50 erreicht wurden. Dabei habe ich ein paar interessante Erkenntnisse gewonnen: So sind zum Beispiel die Resultate sehr unterschiedlich wenn zuf&#228;llig mit Wahrscheinlichkeit 1/4 oder wenn jedes 4. mal gesaved wird. Auch die optimale Wahrscheinlichkeit habe ich so nicht erwartet wie sie gemessen wurde.</p><p>Um meine Arbeit etwas zu teilen und um den Einstieg zu erleichtern, publiziere ich hier meine Spielerumgebung. Der geneigte Wettbewerbsteilnehme m&#252;sste nun nur noch:</p><ul><li>Den Spielernamen &#228;ndern (Konstante NAME),</li><li>Die Methode <tt>play</tt> mit Intelligenz f&#252;llen.</li></ul><p>Zuerst das <tt>Makefile</tt>:<br
/> [cc lang="Make"]<br
/> PHP = /usr/bin/php</p><p>build:<br
/> echo &#8220;PHP muss nit gebuildet werden <img
src='http://blog.oncode.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .&#8221;<br
/> game: wettbewerb.php<br
/> $(PHP) ./wettbewerb.php<br
/> [/cc]</p><p>Und hier der Spieler <tt>wettbewerb.php</tt>, bereit getuned zu werden:<br
/> [cc lang="php"]<br
/> <?php<br
/> /**<br
/> * Wettbewerbsgeruest von Skaldrom Y. Sarg (http://blog.oncode.info)<br
/> */</p><p>define(&#8220;NAME&#8221;,&#8221;test.spieler&#8221;); // UNBEDINGT AENDERN!!!! Kleinbuchstaben, keine Sonderzeichen<br
/> define(&#8220;LOGFILE&#8221;,&#8221;dice.log&#8221;); // Schreibt keines wenn leer (fuer den Wettbewerb)<br
/> define(&#8220;SERVER&#8221;, &#8220;wettbewerb.linux-magazin.de&#8221;);<br
/> define(&#8220;PORT&#8221;, 3333);</p><p>class wettbewerb {</p><p> /**<br
/> * Dies ist die Spielfunktion.<br
/> *<br
/> * Macht was cleveres, aber stehlt mir nicht die Preise!<br
/> *<br
/> *<br
/> * @param $numThrowsThisTransaction int Anzahl W&#252;rfe seit letzter 6 oder letztem Save<br
/> * @param $currentTransactionPoints int Punkte seit letzter 6 oder letztem Save<br
/> * @param $pointsAtLastSave         int Punkte bei letztem Save<br
/> * @param $transactions             int Anzahl gemachter Z&#252;ge<br
/> * @param $numSaves                 int Anzahl Saves<br
/> * @param $enemyPoints              int Punkte des Gegners<br
/> * @param $rollsThisTransaction     Array W&#252;rfe in diesem Durchgang<br
/> *<br
/> * @return String &#8220;roll&#8221; f&#252;r einen Wurf, &#8220;save&#8221; um zu speichern und abzugeben.<br
/> */</p><p> function play($numThrowsThisTransaction, $currentTransactionPoints, $pointsAtLastSave, $transactions, $numSaves, $enemyPoints, $rollsThisTransaction) {<br
/> $this->log(&#8220;[PLAY-RESULT]: ROLL.&#8221;);<br
/> return &#8220;roll&#8221;;<br
/> }</p><p> function log($message) {<br
/> if(LOGFILE) {<br
/> error_log(date(&#8220;r&#8221;).&#8221;: &#8220;.$message.&#8221;\n&#8221;, 3, LOGFILE);<br
/> }<br
/> }</p><p> function secureFGetS() {<br
/> $response=&#8221;";<br
/> if(!$this->socket) {<br
/> do {<br
/> $this->connect();<br
/> } while(!$this->socket);<br
/> }<br
/> $response=fgets($this->socket);<br
/> $info = stream_get_meta_data($this->socket);<br
/> if ($info['timed_out']) {<br
/> $this->log(&#8220;Got a Socket Timeout! (unread:&#8221;.$info['unread_bytes'].&#8221;)&#8221;);<br
/> fclose($this->socket);<br
/> $this->socket=0;<br
/> $response=&#8221;";<br
/> sleep(5);<br
/> }<br
/> return $response;</p><p> }</p><p> function connect() {<br
/> // Kontaktaufnahme<br
/> $this->socket=0;<br
/> while(!$this->socket) {<br
/> $this->log(&#8220;CONNECTING&#8221;);<br
/> $this->socket = @fsockopen(SERVER , PORT, $errno , $errstr , 180);<br
/> if(!$this->socket) {<br
/> $this->log(&#8220;Verbindungsversuch fehlgeschlagen: ($errno) $errstr.&#8221;);<br
/> sleep(5);<br
/> }<br
/> }<br
/> if(function_exists(&#8220;stream_set_timeout&#8221;)) {<br
/> $this->log(&#8220;Set Socket Timeout.&#8221;);<br
/> stream_set_timeout($this->socket, 120); //two Mins<br
/> }<br
/> // Antwort des Servers<br
/> $this->log(&#8220;CONNECTED&#8221;);<br
/> }</p><p> function playARound() {<br
/> $this->log(&#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; NEW GAME &#8220;.SERVER .&#8221;:&#8221;.PORT.&#8221; &#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&#8221;);</p><p> do {<br
/> $this->connect();<br
/> } while(!$this->socket);<br
/> do {<br
/> $response=$this->secureFGetS();<br
/> } while (!$response);<br
/> $resInfo=split(&#8221; &#8220;, $response);<br
/> $serverCommand=strtoupper(trim($resInfo[0]));<br
/> $this->log(&#8220;[SERVER]: &#8220;.trim($response).&#8221; (&#8220;.$serverCommand.&#8221;)&#8221;);<br
/> switch($serverCommand) {<br
/> case &#8220;HELO&#8221;: break; // Alles OK<br
/> case &#8220;DENY&#8221;: fclose($this->socket);<br
/> return;<br
/> break; // Dann halt nicht<br
/> default: fclose($this->socket);<br
/> $this->log(&#8220;[CLIENT]: Exit on Hello because we do not understand [$serverCommand].&#8221;);<br
/> exit(); // DAS verstehen wir nicht!<br
/> }</p><p> // Authentifizierung<br
/> $message=&#8221;AUTH &#8220;.strtolower(NAME);<br
/> $this->log(&#8220;[CLIENT]: &#8220;.$message);<br
/> fputs($this->socket, $message.&#8221;\n&#8221;);</p><p> // Los gehts!<br
/> $currentPlayer=1; // Wer ist am Zug? 0 == wir, 1 == der Andere<br
/> $numThrowsThisTransaction=0;<br
/> $currentTransactionPoints=0;<br
/> $pointsAtLastSave=0;<br
/> $transactions=1;<br
/> $numSaves=0;<br
/> $enemyPoints=0;<br
/> $rollsThisTransaction=array();<br
/> do {<br
/> $response=&#8221;";<br
/> $response=$this->secureFGetS();<br
/> if(!$response) {<br
/> $this->log(&#8220;INGAME TIMEOUT: Forgetting this game.&#8221;);<br
/> return;<br
/> }<br
/> $this->log(&#8220;[SERVER]: &#8220;.trim($response));<br
/> $resInfo=split(&#8221; &#8220;, $response);<br
/> $serverCommand=strtoupper(trim($resInfo[0]));<br
/> switch($serverCommand) {<br
/> case &#8220;THRW&#8221;: // Ein Wurf<br
/> if($currentPlayer==0) { // Wir sind dran<br
/> if($resInfo[1]==6) { // Ooops, eine 6 gew&#252;rfelt<br
/> $currentPlayer=1; // Der Andere ist dran<br
/> $currentTransactionPoints=0;<br
/> $numThrowsThisTransaction=0;<br
/> $transactions++;<br
/> $rollsThisTransaction=array();<br
/> } else {<br
/> $numThrowsThisTransaction++;<br
/> $currentTransactionPoints+=$resInfo[1];<br
/> $rollsThisTransaction[]=$resInfo[1];<br
/> }<br
/> }<br
/> break;<br
/> case &#8220;DENY&#8221;: break; // Dann halt nicht<br
/> case &#8220;TURN&#8221;:<br
/> $currentPlayer=0; // Wir sind dran!<br
/> $enemyPoints=$resInfo[2];<br
/> $pointsCurrentOurs=$resInfo[1];<br
/> $currentTransactionPoints=$pointsCurrentOurs-$pointsAtLastSave;<br
/> // Here we play!<br
/> $ret=$this->play($numThrowsThisTransaction, $currentTransactionPoints, $pointsAtLastSave, $transactions, $numSaves, $enemyPoints, $rollsThisTransaction);<br
/> if(strtolower($ret==&#8221;roll&#8221;)) { // Rollin&#8217; Baby<br
/> $this->log(&#8220;[CLIENT]: ROLL&#8221;);<br
/> fputs($this->socket, &#8220;ROLL\n&#8221;);<br
/> } else { // Save<br
/> $this->log(&#8220;[CLIENT]: SAVE&#8221;);<br
/> fputs($this->socket, &#8220;SAVE\n&#8221;);<br
/> $transactions++;<br
/> $rollsThisTransaction=array();<br
/> $numThrowsThisTransaction=0;<br
/> $numSaves++;<br
/> $pointsAtLastSave=$pointsCurrentOurs;<br
/> $currentTransactionPoints=0;<br
/> $currentPlayer=1;<br
/> }<br
/> break;<br
/> case &#8220;DEF&#8221;:<br
/> case &#8220;WIN&#8221;: break;<br
/> default: fclose($this->socket);<br
/> $this->log(&#8220;[CLIENT]: Exit because we do not understand [$serverCommand].&#8221;);<br
/> exit(); // DAS verstehen wir nicht!<br
/> }<br
/> } while (!in_array($serverCommand, array(&#8220;DENY&#8221;, &#8220;DEF&#8221;, &#8220;WIN&#8221;)));<br
/> // Feddich Lustig<br
/> fclose($this->socket);<br
/> }</p><p>}</p><p>$w=new wettbewerb();<br
/> for($i=0;$i<1000;$i++) {<br
/> echo &#8220;*** $i ***\n&#8221;;<br
/> $w->playARound();<br
/> }<br
/> ?><br
/> [/cc]</p> ]]></content:encoded> <wfw:commentRss>http://blog.oncode.info/2010/08/10/ein-programmierwettbewerb-vom-linux-magazin/feed/</wfw:commentRss> <slash:comments>4</slash:comments> <series:name><![CDATA[Linux-Magazin Wettbewerb]]></series:name> </item> <item><title>Automatischer Spell-Check in KMail</title><link>http://blog.oncode.info/2010/06/28/automatischer-spell-check-in-kmail/</link> <comments>http://blog.oncode.info/2010/06/28/automatischer-spell-check-in-kmail/#comments</comments> <pubDate>Mon, 28 Jun 2010 08:42:27 +0000</pubDate> <dc:creator>skaldrom</dc:creator> <category><![CDATA[Desktop]]></category> <category><![CDATA[default]]></category> <category><![CDATA[Dictionary]]></category> <category><![CDATA[kde]]></category> <category><![CDATA[kmail]]></category> <category><![CDATA[Kubuntu]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[spell]]></category> <guid
isPermaLink="false">http://blog.oncode.info/?p=1495</guid> <description><![CDATA[Automatische Rechtschreibepr&#252;fung in KMail einschalten.]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.oncode.info/wp-content/uploads/2010/06/orthogravieh.png" alt="" title="orthogravieh" width="194" height="140" class="lead" align="left"/>Als Ortogravieh-Experte bin ich sehr froh f&#252;r die roten Linien unter den falsch geschriebenen W&#246;rtern, man will ja nicht schon beim ersten Mail den Eindruck eines Dorftrottels hinterlassen <img
src='http://blog.oncode.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Leider schaltet sich diese sehr n&#252;tzliche Funktion bei KMail immer mal wieder aus.</p><p>Was bisher geholfen hat:</p><ul><li>Folgende Pakete m&#252;ssen installiert werden:<ul><li>spell</li><li>ispell</li><li>Lokale Dictionaries: ingerman, inswiss, &#8230;</li></ul></li><li>Global muss folgendes H&#228;ckchen gesetzt sein: <tt>Systemeinstellungen</tt> &rarr; <tt>Land/Region &amp; Sprache</tt> &rarr; <tt>Rechtschreibpr&#252;fung</tt> &rarr;<tt>Automatische Rechtschreibpr&#252;fung</tt> in der Voreinstellung aktiviert</li><li>Das Standardw&#246;rterbuch (Default-Dictionary) muss man in der Identit&#228;t einstellen: KMail &rarr; Einstellungen&#8230; &rarr; Identit&#228;ten &rarr; &#196;ndern &rarr; Erweitert.</li><li>Beim Schreiben einer Mail muss unten rechts <tt>Rechteschreibpr&#252;fung: ein</tt> stehen.</li><li>Das aktuelle W&#246;rterbuch kann angezeigt werden bei Ansicht &rarr; W&#246;rterbuch.</li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.oncode.info/2010/06/28/automatischer-spell-check-in-kmail/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Bookmarklets: Kleine Helferlein</title><link>http://blog.oncode.info/2009/12/15/bookmarklets-kleine-helferlein/</link> <comments>http://blog.oncode.info/2009/12/15/bookmarklets-kleine-helferlein/#comments</comments> <pubDate>Tue, 15 Dec 2009 15:04:44 +0000</pubDate> <dc:creator>skaldrom</dc:creator> <category><![CDATA[Web]]></category> <category><![CDATA[Bookmarks]]></category> <category><![CDATA[Browser]]></category> <category><![CDATA[javascript]]></category> <guid
isPermaLink="false">http://blog.oncode.info/?p=1450</guid> <description><![CDATA[Bookmarklets helfen bei kleinen Aufgaben. Sie sind nichts anderes als Links mit JavaScript, haben aber dadurch den ganzen Sprachumfang der Sprache zur Verf&#252;gung.]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.oncode.info/wp-content/uploads/2009/12/bookmark.png" alt="bookmark" title="bookmark" class="lead" align="right"/><a
href="http://de.wikipedia.org/wiki/Bookmarklet">Bookmarklets</a> sind eigentlich ganz normale Links, die aber Javascript beinhalten. Sie k&#246;nnen aus einer beliebigen Website direkt an den bevorzugten Bookmark-Ort (Toolbar, Men&#252;, Sidebar, &#8230;) gezogen und verwendet werden. Die Idee ist so einfach und genial, dass es schon <a
href="http://www.bookmarklets.com/">grosse Verzeichnisse</a> f&#252;r sie gibt. Da sie in Javascript programmiert sind, kann man auch den Quellcode direkt ansehen und f&#252;r sich anpassen.</p><p>Beispiele sind:</p><ul><li>Das auf der aktuellen Seite markierte Wort nachschlagen, &#252;bersetzen, auf der ganzen Seite markieren, &#8230;</li><li>Seitendaten (Bilder, Links, Texte) oder -metadaten (Frische, Gr&#246;sse, &#8230;) auslesen.</li><li>Seite ver&#228;ndern: (Schrift, Farbe, &#8230;)</li><li>&#8230;</li></ul><p>Hier ein Trivialbeispiel: <a
href="http://www.ddo.com">ddo.com</a> ist ein MMPORG, das den Service &#8220;<a
href="http://my.ddo.com">my.ddo.com</a>&#8221; anbietet. Dort k&#246;nnen Detaildaten &#252;ber die Charakteren der Spieler abgerufen werden indem eine spezielle URL nach dem Schema http://my.ddo.com/character/<i>welt</i>/<i>name</i>/ zusammengestellt wird. Das erste Bookmarklet nimmt vom Benutzer Welt und Name entgegen und ruft die entsprechende URL auf (Test: Senthessel auf Ghallanda):<br
/> [cc lang="javascript"]<br
/> <a
href="javascript:void(Tn=prompt('Toon name:',''));void(Sr=prompt('Server:',''));if(Tn &#038;&#038; Sr) location.href='http://my.ddo.com/character/'+escape(Sr.toLowerCase())+'/'+escape(Tn.toLowerCase())+'/'">Suche DDO-Toon</a><br
/> [/cc]</p><p>Es ist voll bookmarkf&#228;hig und sieht folgendermassen aus: <a
href="javascript:void(Tn=prompt('Toon name:',''));void(Sr=prompt('Server:',''));if(Tn &#038;&#038; Sr) location.href='http://my.ddo.com/character/'+escape(Sr.toLowerCase())+'/'+escape(Tn.toLowerCase())+'/'">Suche DDO-Toon</a>.</p><p>Ein zweites Bookmarklet sucht auf einer bestimmten Welt und nimmt als Namen entweder den auf einer Webseite markierten Text oder die Eingabe in einem Dialog:<br
/> [cc lang="javascript"]<br
/> <a
href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/ghallanda/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Ghallanda</a><br
/> [/cc]</p><p>Beispiel: <a
href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/ghallanda/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Ghallanda</a></p><p>Folgendes Bookmarklet sucht ein entsprechendes Ausbildungsmodul von I-CH (Quelltext anzeigen f&#252;r die Source <img
src='http://blog.oncode.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ): <a
href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Modul:',''))};if(Tn) location.href='http://www.i-ch.ch/modulbaukasten/servlet/WebInter?lang=de&#038;release=2&#038;aa_id=6&#038;class=COMain&#038;method=showSearch&#038;table=modul&#038;id=103&#038;lang=de&#038;mid=103&#038;search='+escape(Tn.toLowerCase())">Modulsuche auf I-CH</a></p><p>Am besten nimmt man ein bestehendes Bookmarklet und passt es auf seine Bed&#252;rfnisse an.</p><p><a
name="ddobookmarklets"></a><br
/> Hier eine Liste der kompletten DDO-Bookmarklets:</p><ul><li><a
href="javascript:void(Tn=prompt('Toon name:',''));void(Sr=prompt('Server:',''));if(Tn &#038;&#038; Sr) location.href='http://my.ddo.com/character/'+escape(Sr.toLowerCase())+'/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon</a></li><li><a
href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/argonnessen/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Argonnessen</a></li><li><a
href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/cannith/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Cannith</a></li><li><a
href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/ghallanda/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Ghallanda</a></li><li><a
href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/khyber/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Khyber</a></li><li><a
href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/lamannia/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Lamannia</a></li><li><a
href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/orien/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Orien</a></li><li><a
href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/sarlona/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Sarlona</a></li><li><a
href="javascript:Tn=document.getSelection();if(!Tn){void(Tn=prompt('Toon name:',''))};if(Tn) location.href='http://my.ddo.com/character/thelanis/'+escape(Tn.toLowerCase())+'/'">Search DDO-Toon On Thelanis</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.oncode.info/2009/12/15/bookmarklets-kleine-helferlein/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Avira Antivir Personal will nicht updaten</title><link>http://blog.oncode.info/2009/10/19/avira-antivir-personal-will-nicht-updaten/</link> <comments>http://blog.oncode.info/2009/10/19/avira-antivir-personal-will-nicht-updaten/#comments</comments> <pubDate>Mon, 19 Oct 2009 10:28:58 +0000</pubDate> <dc:creator>skaldrom</dc:creator> <category><![CDATA[Desktop]]></category> <category><![CDATA[Antivir]]></category> <category><![CDATA[Avira]]></category> <category><![CDATA[manuell]]></category> <category><![CDATA[update]]></category> <category><![CDATA[veraltet]]></category> <category><![CDATA[Virenschutz]]></category> <category><![CDATA[Windows]]></category> <guid
isPermaLink="false">http://blog.oncode.info/?p=1350</guid> <description><![CDATA[Wenn die Server von Avira Antivir &#252;berlastet sind, kann man die Virendefinitionen manuell updaten.]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.oncode.info/wp-content/uploads/2009/10/avira.png" alt="avira" title="avira" class="lead" align="left"/>Da Windows noch nicht ganz verschwunden ist, muss ich mich ab und an auch damit ein Bisschen herumschlagen. Es r&#228;cht sich f&#252;r die Vernachl&#228;ssigung , indem es jedesmal wenn es gebootet wird eine zuerst eine halbst&#252;ndige Updateorgie abzieht.</p><p>Einer der Updatewilligen ist <a
href="http://www.free-av.de/">Avira Antivir</a>. Avira ist mein bevorzugter Virenschutz, weil es sich sch&#246;n im Hintergrund h&#228;lt, seine Arbeit macht und mir nicht allzuweit ins System hineinfunkt. Leider scheinen die Server ab und zu &#252;berlastet zu sein und dann werde ich von Windows und Avira generft.</p><p>Doch Hilfe naht: In einem Beitrag in der <a
href="http://www.avira.com/en/support/kbdetails.php?id=95">Avira Knowledge Base</a> steht, wie man manuell updaten kann:</p><ol><li>Verlinkte Datei downloaden.</li><li>Avira Hauptprogramm starten.</li><li>Update &rarr; Manual Update ausw&#228;hlen.</li><li>Die Datei &#8211; wie sie ist &#8211; angeben.</li><li>Und schon sind alle gl&#252;cklich.</li></ol> ]]></content:encoded> <wfw:commentRss>http://blog.oncode.info/2009/10/19/avira-antivir-personal-will-nicht-updaten/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Kommentarspam, eine &#252;ble Schweinegrippe!</title><link>http://blog.oncode.info/2009/07/28/kommentarspam-eine-ueble-schweinegrippe/</link> <comments>http://blog.oncode.info/2009/07/28/kommentarspam-eine-ueble-schweinegrippe/#comments</comments> <pubDate>Tue, 28 Jul 2009 21:32:32 +0000</pubDate> <dc:creator>skaldrom</dc:creator> <category><![CDATA[Blogging]]></category> <category><![CDATA[Blog]]></category> <category><![CDATA[Kommentare]]></category> <category><![CDATA[Kommentarspam]]></category> <category><![CDATA[nayoki]]></category> <category><![CDATA[Spam]]></category> <guid
isPermaLink="false">http://blog.oncode.info/?p=1306</guid> <description><![CDATA[Ich mag Kommentare zu den Beitr&#228;gen sehr! Sie weisen mich auf Fehler hin, haben mir schon verpornisierte Links gemeldet und freuen mich auch ganz allgemein. Dieses Blog ist No-Nofollow, weil ich es OK finde, wenn die Kommentatoren einen Link hinterlassen. Dies hat zwar schon einiges an Google PageRank gekostet, aber ich habe aufgeh&#246;rt, mir dar&#252;ber [...]]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.oncode.info/wp-content/uploads/2009/07/spam.png" alt="spam" title="spam" class="lead" height="100px" align="left"/>Ich mag Kommentare zu den Beitr&#228;gen sehr! Sie weisen mich auf Fehler hin, haben mir schon verpornisierte Links gemeldet und freuen mich auch ganz allgemein. Dieses Blog ist <a
href="http://www.no-nofollow.net/">No-Nofollow</a>, weil ich es OK finde, wenn die Kommentatoren einen Link hinterlassen. Dies hat zwar schon einiges an Google PageRank gekostet, aber ich habe aufgeh&#246;rt, mir dar&#252;ber Sorgen zu machen. Google liebt mich nicht, aber der Schmerz dar&#252;ber hat sich in Grenzen gehalten <img
src='http://blog.oncode.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p><p>Normale Kommentare werden zuverl&#228;ssig von <a
href="http://akismet.com/">Aksimet</a> abgefangen. Nun ist aber der anscheinend handgemachte Kommentarspam auch hier angekommen.</p><h3>Fall 1: Nayoki.de</h3><p>Alle Kommentare in diesem Blog werden von Hand freigegeben, und ich wurde schon sehr misstrauisch folgende Kommentare kurz nacheinander zu zwei v&#246;llig verschiedenen Artikeln zu finden:</p><p><b>Von:</b> Fritz <b>URL:</b> nayoki.de <b>Email:</b> fritz@nayoki.de <b>IP:</b> 212.227.103.74</p><blockquote><p>Danke f&#252;r diese Infos. Die Beschreibung ist ja sehr ausf&#252;hrlich gemacht.Sehr sch&#246;ne Seite.Bin schon mal gespannt.</p></blockquote><p><b>Von:</b> Fritz <b>URL:</b> nayoki.de <b>Email:</b> fritz@nayoki.de <b>IP:</b> 212.227.103.74</p><blockquote><p>Das ist ja sehr gut.Danke f&#252;r diese Tipps.Bin schon mal gespannt.Tolle Seite.</p></blockquote><p>Hm, in den Artikeln war nichts drin, dass eine solche enorme Spannung gerechtfertigt h&#228;tte. Eine Nachfrage per per Mail bei fritz@nayoki.de ist leider wegen ung&#252;ltiger Adresse nicht angekommen.</p><p><a
href="http://nayoki.de" rel="nofollow">nayoki.de</a> ist eine interessante Firma. Anscheinend haben sie schon mal mit &#228;hnlich intelligenten Kommentaren <a
href="http://www.antioffline.de/lustiges-im-web/spam-lustiges-im-web/geiler-linkbait-und-beknackter-spamversuch/">die Blogs verseucht</a>. Auf eine dahingehende Frage &#252;ber das Kontaktformular hat sich eine sehr nette Mitarbeiterin gemeldet und best&#228;tigt, dass fritz@nayoki.de nicht dort arbeitet. Nachdem die ganze Sache &#8220;an die Suchmaschinenabteilung&#8221; eskaliert wurde, habe ich leider nichts mehr geh&#246;rt.</p><p>Sehr spannend; arbeiten doch <a
href="http://www.backtype.com/url/nayoki.de">dort auch ein Markus, ein Peter und der aktive Fritz</a> (unter falschem Namen?). Die IP f&#252;hrt zu einem Rechner, der anscheinend einen SSH-Zugang und einen SQUID-Proxy offen hat. Aufgel&#246;st ergibt sie p15202001.pureserver.info, also ein gemieteter Server von 1&#038;1 UND einer der bekannten Knoten eines anonymisierenden JAP-Proxies.</p><p>Wenn jemand unter den Lesern auch nayoki-Spam hat, w&#228;re ich froh f&#252;r eine Info, dann k&#246;nnte man vielleicht was lustiges unternehmen&#8230;</p><h3>Fall 2: Der Zahnersatz</h3><p>Zum Beitrag &#252;ber die <a
href="/2007/12/09/flughexech-finde-den-guenstigsten-flug/">Flughexe</a> kam vor Kurzem der folgende Spam:<br
/> <b>Von:</b> Dini <b>URL:</b> zahnersatz.billig-1.de <b>Email:</b> alf@tanner-inf.com <b>IP:</b> 87.122.3.161</p><blockquote><p>Gibt es den Service noch?</p></blockquote><p>Ich wollte Alf fragen, wieso er nicht einfach die URL im Artikel aufgerufen hat, aber die Mail kam auch als unzustellbar zur&#252;ck. tanner-inf.com gibt es nicht, aber wenn man bei Google danach sucht, findet man viiiiele Spam-Links. Die IP geh&#246;rt zu einem Pool eines deutschen ISP, er arbeitet also noch nicht so anonym wie die Nayoki-Jungs.</p><h3>Fazit</h3><p>Nayoki missbraucht Kommentare, um Links aufzubauen. So einfach und schlecht ist das. Ich finde das eine zwielichtige Methode, die gegen den Goodwill verst&#246;sst. Gna!</p> ]]></content:encoded> <wfw:commentRss>http://blog.oncode.info/2009/07/28/kommentarspam-eine-ueble-schweinegrippe/feed/</wfw:commentRss> <slash:comments>17</slash:comments> </item> <item><title>VIM geboostet</title><link>http://blog.oncode.info/2009/05/13/vim-geboostet/</link> <comments>http://blog.oncode.info/2009/05/13/vim-geboostet/#comments</comments> <pubDate>Wed, 13 May 2009 08:41:57 +0000</pubDate> <dc:creator>skaldrom</dc:creator> <category><![CDATA[Applikationen]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[autocomplete]]></category> <category><![CDATA[Editor]]></category> <category><![CDATA[folding]]></category> <category><![CDATA[highlightning]]></category> <category><![CDATA[syntax]]></category> <category><![CDATA[vi]]></category> <category><![CDATA[vim]]></category> <category><![CDATA[vimrc]]></category> <guid
isPermaLink="false">http://blog.oncode.info/?p=1235</guid> <description><![CDATA[VIM kann vielf&#228;ltig konfiguriert werden: Hier ein Beispiel das einige erweiterte Features einschaltet.]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.oncode.info/wp-content/uploads/2009/05/vim.png" alt="vim" title="vim" class="lead" align="right"/>Welch wunderbare M&#246;glichkeit, einen Glaubenskrieg vom Zaun zu brechen: VI vs Emacs, VIM vs VI, alle vs alle, &#8230; Da verzichte ich aber &#8211; wie ungew&#246;hnlich &#8211; mangels Energie darauf und lass andere sprechen:</p><blockquote><p> VI VI VI The editor of the beast.<br
/> &#8212; coolsig</p></blockquote><p>oder:</p><blockquote><p> irgendwie hat vi doch zwei modes,<br
/> einen, wo er den text kaputt macht,<br
/> und einen, wo er beept.<br
/> &#8212; frobnic</p></blockquote><p>VIM kann so konfiguriert werden, dass er noch mehr Spass macht. Damit meine ich Syntax-Highlightning, Autoindent, Autocomplete, Folding, &#8230; und nicht das umlegen von &lt;ESC&gt; auf &lt;Enter&gt; um die Nerds zu verwirren <img
src='http://blog.oncode.info/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .<br
/> Nat&#252;rlich ist das Geschmackssache, aber folgende Konfiguration stimmt feinstofflich und metaphysisch f&#252;r mich. Vieles davon habe ich von mkrau (Leider nicht mehr erreichbar: http://home.tu-clausthal.de/~mkrau/vimrc.txt) &#252;bernommen.</p><p><tt>~/.vimrc</tt> (<a
href='http://blog.oncode.info/wp-content/uploads/2009/05/.vimrc'>Download</a>):<br
/> [cc lang="vim"]<br
/> syntax on        &#8221; Syntaxhighlightning einschalten<br
/> set number       &#8221; Zeilennummerierung<br
/> &#8221; Suche NICHT case-senitiv, ausser ein Grossbuchstabe steht im Suchmuster<br
/> set ignorecase<br
/> set smartcase<br
/> set wrapscan     &#8221; Beim Suchen ueber Dateiende hinausgehen<br
/> set hlsearch     &#8221; Highlight Suchresultate<br
/> set incsearch    &#8221; Inkrementelle Suche<br
/> set ruler        &#8221; Koordinaten in der Statuszeile anzeigen<br
/> set nocompatible &#8221; Keine alten Bugs emulieren</p><p>set foldenable   &#8221; Folding verwenden<br
/> set foldmethod=indent &#8221; Folding beim Einruecken<br
/> set foldlevel=100     &#8221; Manuell folden</p><p>set nowrap       &#8221; Zeilen nicht umbrechen</p><p>set shiftwidth=2 &#8221; Tabs auf 2<br
/> set shiftround   &#8221; Auf n&#228;chsten Tab einr&#252;cken</p><p>&#8221; Automatisches Einruecken<br
/> set autoindent<br
/> set smartindent</p><p>set title        &#8221; Titel in Terminals<br
/> set visualbell   &#8221; Gepiepse ausschalten<br
/> set nobackup     &#8221; Keine Backupdateien</p><p>set pastetoggle=<F9> &#8221; Mit F9 vor dem Einschalten kann gepastet werden</p><p>&#8221; Autocompletion, IntelliSense, &#8230;<br
/> autocmd FileType python set omnifunc=pythoncomplete#Complete<br
/> autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS<br
/> autocmd FileType html set omnifunc=htmlcomplete#CompleteTags<br
/> autocmd FileType css set omnifunc=csscomplete#CompleteCSS<br
/> autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags<br
/> autocmd FileType php set omnifunc=phpcomplete#CompletePHP<br
/> autocmd FileType c set omnifunc=ccomplete#Complete<br
/> autocmd FileType rb,ruby,eruby set omnifunc=rubycomplete#Complete<br
/> autocmd FileType sql set omnifunc=sqlcomplete#Complete<br
/> autocmd Filetype * set omnifunc=syntaxcomplete#Complete</p><p>&#8221; Farben Tageszeitabhaengig<br
/> set background=light<br
/> let hr= strftime(&#8216;%H&#8217;)</p><p>if 0 <= hr &#038;&#038; hr <= 5<br
/> colorscheme evening<br
/> set background=dark<br
/> elseif 6 <= hr &#038;&#038; hr <= 8<br
/> colorscheme morning<br
/> elseif 9 <= hr &#038;&#038; hr <= 21<br
/> colorscheme ron<br
/> else<br
/> colorscheme evening<br
/> set background=dark<br
/> endif<br
/> [/cc]</p><h3>Und so sieht es aus</h3><p>Es wurden Screenshots gew&#252;nscht, und W&#252;nsche werden nat&#252;rlich erf&#252;llt. So sieht VIM bei mir am Morgen aus. Andere Schemes k&#246;nnen mit <tt>:colorscheme &lt;TAB&gt;</tt> ausprobiert werden.</p><div
id="attachment_1246" class="wp-caption aligncenter" style="width: 310px"><a
href="http://blog.oncode.info/wp-content/uploads/2009/05/ruby.png"><img
src="http://blog.oncode.info/wp-content/uploads/2009/05/ruby-300x169.png" alt="Ruby Syntax-Highlightning in VIM" title="Ruby Syntax-Highlightning" width="300" height="169" class="size-medium wp-image-1246" /></a><p
class="wp-caption-text">Ruby Syntax-Highlightning in VIM</p></div><div
id="attachment_1247" class="wp-caption aligncenter" style="width: 310px"><a
href="http://blog.oncode.info/wp-content/uploads/2009/05/phpomni.png"><img
src="http://blog.oncode.info/wp-content/uploads/2009/05/phpomni-300x169.png" alt="PHP Omni Completion in VIM" title="PHP Omni Completion" width="300" height="169" class="size-medium wp-image-1247" /></a><p
class="wp-caption-text">PHP Omni Completion in VIM</p></div> ]]></content:encoded> <wfw:commentRss>http://blog.oncode.info/2009/05/13/vim-geboostet/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> </channel> </rss>
