<?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; Uncategorized</title> <atom:link href="http://blog.oncode.info/category/uncategorized/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>Mehr Gl&#252;ck als Verstand: Der Linux-Magazin Wettbewerb ist ausgefochten</title><link>http://blog.oncode.info/2010/12/14/mehr-glueck-als-verstand-der-linux-magazin-wettbewerb-ist-ausgefochten/</link> <comments>http://blog.oncode.info/2010/12/14/mehr-glueck-als-verstand-der-linux-magazin-wettbewerb-ist-ausgefochten/#comments</comments> <pubDate>Tue, 14 Dec 2010 10:48:05 +0000</pubDate> <dc:creator>skaldrom</dc:creator> <category><![CDATA[Uncategorized]]></category> <category><![CDATA[Pig Dice]]></category> <category><![CDATA[Programmieren]]></category> <category><![CDATA[Programmierspiele]]></category> <category><![CDATA[Wettbewerb]]></category> <guid
isPermaLink="false">http://blog.oncode.info/?p=1627</guid> <description><![CDATA[Der Linuxmagazin-Programmierwettbewerb ist durch. Mit einer abgewandelten, optimalen Pig-Dice Taktik habe ich es auf Platz 16 geschafft *freu*.]]></description> <content:encoded><![CDATA[<p>Viele haben nicht mehr daran geglaubt, aber der <a
href="http://wettbewerb.linux-magazin.de">Wettbewerb des Linuxmagazins</a> ist durchgef&#252;hrt worden: Im neusten Heft (01/11) sind die Gewinner abgedruckt. Siehe da, ich habs als einziger PHP-Frickler in die Top-20 geschafft:</p><p><img
src="http://blog.oncode.info/wp-content/uploads/2010/12/rangliste.png" alt="" title="rangliste" width="330" height="312" class="alignnone size-full wp-image-1628" /></p><p>Das gute an Programmierwettbewerben ist, dass man mit einer solchen Rangierung f&#252;r die Zukunft ausgesorgt hat: Reichtum, Jugend, Sch&#246;nheit, Wein, willige Weiber und einen offiziellen Schutz vor Alterskurzsichtigkeit sind das Minimum das es zu gewinnen gab. &#196;hhm, nein, sorry, ich hab da was verwechselt.</p><p>Auf jeden Fall: Heeeeeeeeeeerzliche Gratulation den Gewinnern! Gut gemacht! Die Turnierergebnisse und Bots sollen laut Heft alsbald <a
href="ftp://ftp.linux-magazin.de/pub/listings/magazin/2011/01/wettbewerb/">downgeloaded</a> werden k&#246;nnen. Ganz im Sinne der Durchf&#252;hrung ist aber bis Dato noch nichts sichtbar. Ich werde sicher analysieren, warum der <a
href="http://www.frigidor.ch/">Frigidor</a> nicht weheheit vor mir liegt. Unter uns gesagt, ist er n&#228;mlich viel der bessere Programmierer (der liebe Gott hat mir daf&#252;r eine grosse Klappe geschenkt).</p><h3>Mein Wettbewerbseintrag</h3><h4>Vorgehen</h4><p>Zu Beginn habe viel experimentiert. Mit einem selbst geschriebenen Simulator habe ich mit einfacher Parametrisierung und naiver Taktik versucht, die Anzahl Transaktionen pro Spiel zu minimieren. Sp&#228;ter habe ich verschiedene Generationen meiner Bots auf dem offiziellen Trainingsserver in den Kampf geschickt. Von sehr umfangreichen, komplexen Taktiken habe ich wieder auf sehr einfache gewechselt, nur um dann wieder zur&#252;ck ins Komplexe zu wechseln. Ganz Grunds&#228;tzlich habe ich versucht, die Theorie mit der Praxis (Messungen und Statistiken) und dem Bauchgef&#252;hl zu verbinden.</p><h4>Die Implementation</h4><p>Leider bin ich kurz vor Schluss auf die Webseite gestossen, die das Problem sowohl <a
href="http://cs.gettysburg.edu/projects/pig/piglinks.html">akademisch</a> als auch <a
href="http://cs.gettysburg.edu/~tneller/nsf/pig/">praktisch</a> f&#252;r das Spiel &#8220;Pig Dice&#8221; gel&#246;st hat. Diese L&#246;sung habe ich auf die Regeln des Wettbewerbs angepasst, in Java vorberechnet und in meinem Wettbewerbsbot implementiert.</p><p>Der <a
href="http://blog.oncode.info/wp-content/uploads/2010/12/edocno.zip">Spieler</a> verwendet die vor-berechneten Spielz&#252;ge dieses Java-Programms:<br
/> [cc lang="java"]<br
/> public class PigSolver {</p><p> int goal;<br
/> double epsilon;<br
/> double[][][] p;<br
/> boolean[][][] roll;</p><p> PigSolver(int goal, double epsilon) {<br
/> this.goal = goal;<br
/> this.epsilon = epsilon;<br
/> p = new double[goal][goal][goal];<br
/> roll = new boolean[goal][goal][goal];</p><p> valueIterate();<br
/> }</p><p> void valueIterate() {<br
/> double maxChange;<br
/> do {<br
/> maxChange = 0.0;<br
/> for (int i = 0; i < goal; i++) // for all i<br
/> {<br
/> for (int j = 0; j < goal; j++) // for all j<br
/> {<br
/> for (int k = 0; k < goal - i; k++) { // for all k<br
/> double oldProb = p[i][j][k];<br
/> double pRoll = ((1.0 &#8211; pWin(j, i, 0)) + pWin(i, j, k + 1) + pWin(i, j, k + 2) + pWin(i, j, k + 3) + pWin(i, j, k + 4) + pWin(i, j, k + 5)) / 6;<br
/> double pHold = 1.0 &#8211; pWin(j, i + k, 0);<br
/> p[i][j][k] = Math.max(pRoll, pHold);<br
/> roll[i][j][k] = pRoll > pHold;<br
/> double change = Math.abs(p[i][j][k] &#8211; oldProb);<br
/> maxChange = Math.max(maxChange, change);<br
/> }<br
/> }<br
/> }<br
/> } while (maxChange >= epsilon);<br
/> }</p><p> public double pWin(int i, int j, int k) {<br
/> if (i + k >= goal) {<br
/> return 1.0;<br
/> } else if (j >= goal) {<br
/> return 0.0;<br
/> } else {<br
/> return p[i][j][k];<br
/> }<br
/> }</p><p> public void outputHoldValues() {<br
/> for (int i = 0; i < goal; i++) {<br
/> for (int j = 0; j < goal; j++) {<br
/> int k = 0;<br
/> while (k < goal - i &#038;&#038; roll[i][j][k]) {<br
/> k++;<br
/> }<br
/> System.out.print(k + &#8221; &#8220;);<br
/> }<br
/> System.out.println();<br
/> }<br
/> }</p><p> public void summarize() {<br
/> System.out.println(&#8220;p[0][0][0] = &#8221; + p[0][0][0]);<br
/> System.out.println();<br
/> System.out.println(&#8220;i\tj\tPolicy changes at k =&#8221;);<br
/> for (int i = 0; i < goal; i++) // for all i<br
/> {<br
/> for (int j = 0; j < goal; j++) { // for all j<br
/> int k = 0;<br
/> System.out.print(i + &#8220;\t&#8221; + j + &#8220;\t&#8221; + (roll[i][j][k] ? &#8220;roll &#8221; : &#8220;save &#8220;));<br
/> for (k = 1; i + k < goal; k++) // for all valid k<br
/> {<br
/> if (roll[i][j][k] != roll[i][j][k - 1]) {<br
/> System.out.print(k + &#8221; &#8221; + (roll[i][j][k] ? &#8220;roll &#8221; : &#8220;save &#8220;));<br
/> }<br
/> }<br
/> System.out.println();<br
/> }<br
/> }<br
/> }</p><p> public void summarizePHP() {<br
/> System.out.println(&#8220;$optimalWin = array();&#8221;);<br
/> for (int i = 0; i < goal; i++) // for all i<br
/> {<br
/> for (int j = 0; j < goal; j++) { // for all j<br
/> int k = 0;<br
/> System.out.println(&#8220;$optimalWin["+i+"][" + j + "][0]=&#8217;&#8221; + (roll[i][j][k] ? &#8220;roll&#8221; : &#8220;save&#8221;) + &#8220;&#8216;;&#8221;);<br
/> for (k = 1; i + k < goal; k++) // for all valid k<br
/> {<br
/> if (roll[i][j][k] != roll[i][j][k - 1]) {<br
/> System.out.println(&#8221;  $optimalWin["+i+"][" + j + "]["+k+"]=&#8217;&#8221; + (roll[i][j][k] ? &#8220;roll&#8221; : &#8220;save&#8221;) + &#8220;&#8216;;&#8221;);<br
/> }<br
/> }<br
/> }<br
/> }<br
/> }</p><p> public static void main(String[] args) {<br
/> //new PigSolver(100, 1e-9).outputHoldValues();<br
/> //new PigSolver(50, 1e-10).summarizePHP();<br
/> new PigSolver(50, 1e-15).summarize();<br
/> }<br
/> }<br
/> [/cc]</p> ]]></content:encoded> <wfw:commentRss>http://blog.oncode.info/2010/12/14/mehr-glueck-als-verstand-der-linux-magazin-wettbewerb-ist-ausgefochten/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <series:name><![CDATA[Linux-Magazin Wettbewerb]]></series:name> </item> <item><title>Webanwendungen: Office 2007 Dateien werden als ZIP heruntergeladen</title><link>http://blog.oncode.info/2009/11/26/webanwendungen-office-2007-dateien-werden-als-zip-heruntergeladen/</link> <comments>http://blog.oncode.info/2009/11/26/webanwendungen-office-2007-dateien-werden-als-zip-heruntergeladen/#comments</comments> <pubDate>Thu, 26 Nov 2009 12:07:14 +0000</pubDate> <dc:creator>skaldrom</dc:creator> <category><![CDATA[Uncategorized]]></category> <category><![CDATA[2007]]></category> <category><![CDATA[docx]]></category> <category><![CDATA[download]]></category> <category><![CDATA[msie]]></category> <category><![CDATA[Office]]></category> <category><![CDATA[öffnen]]></category> <category><![CDATA[xlsx]]></category> <guid
isPermaLink="false">http://blog.oncode.info/?p=1437</guid> <description><![CDATA[Wenn bei einer Webanwendung Office 2007 Dateien (docx, xlsx) als Zips downgeloaded werden, fehlen die korrekten Eintr&#228;ge in de Mimetype-Konfigurationsdatei.]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.oncode.info/wp-content/uploads/2009/11/zipper.png" alt="zipper" title="zipper" width="243" height="172" class="lead" align="left" /> Ein Server von uns versuchte wiedereinmal besonders originell zu sein: Eine in WordPress hochgeladene &#8220;.docx&#8221; Datei wurde im Internet Explorer als &#8220;.zip&#8221; zum Download offeriert. So richtig b&#246;se kann man dem dem Server nicht sein, hat er doch recht: Die Office 2007 Dateien sind an sich Zips, und trotzdem m&#246;chte man sie mit Word &#246;ffnen, oder?</p><p>Nach einigem Fluchen bin ich auf den korrekten <a
href="http://www.webdeveloper.com/forum/showthread.php?t=162526">Eintrag gestossen</a> und konnte die L&#246;sung ableiten. In der Datei <tt>/etc/mime.types</tt> folgendes am Ende hinzuf&#252;gen und gut is:</p><pre>
application/vnd.ms-word.document.macroEnabled.12 .docm
application/vnd.openxmlformats-officedocument.wordprocessingml.document docx
application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx
application/vnd.ms-powerpoint.template.macroEnabled.12 potm
application/vnd.openxmlformats-officedocument.presentationml.template potx
application/vnd.ms-powerpoint.addin.macroEnabled.12 ppam
application/vnd.ms-powerpoint.slideshow.macroEnabled.12 ppsm
application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx
application/vnd.ms-powerpoint.presentation.macroEnabled.12 pptm
application/vnd.openxmlformats-officedocument.presentationml.presentation pptx
application/vnd.ms-excel.addin.macroEnabled.12 xlam
application/vnd.ms-excel.sheet.binary.macroEnabled.12 xlsb
application/vnd.ms-excel.sheet.macroEnabled.12 xlsm
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx
application/vnd.ms-excel.template.macroEnabled.12 xltm
application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx
</pre>]]></content:encoded> <wfw:commentRss>http://blog.oncode.info/2009/11/26/webanwendungen-office-2007-dateien-werden-als-zip-heruntergeladen/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Kubuntu update und GRUB Wiederherstellung</title><link>http://blog.oncode.info/2009/11/01/kubuntu-update-und-grub-wiederherstellung/</link> <comments>http://blog.oncode.info/2009/11/01/kubuntu-update-und-grub-wiederherstellung/#comments</comments> <pubDate>Sun, 01 Nov 2009 17:13:32 +0000</pubDate> <dc:creator>skaldrom</dc:creator> <category><![CDATA[Uncategorized]]></category> <category><![CDATA[Grub]]></category> <category><![CDATA[Kubuntu]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[Menu]]></category> <category><![CDATA[Ubuntu]]></category> <guid
isPermaLink="false">http://blog.oncode.info/?p=1371</guid> <description><![CDATA[Entropie in Reinkultur: Alles tendiert zum gr&#246;sstm&#246;glichen Chaos und guter Wille pflastert den Weg ins Grab. Auf meinem Lieblingsrechner wurde vor langer Zeit Kubuntu installiert. Mit dem Update auf Version 9.10 hat sich gerade eine schon lange f&#228;llige Neuinstallation von Windows gekreuzt. (Neuinstallation weil: Vista Basic Home Premium &#8211; entgegen der Meinung des MS Update-Assistant [...]]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.oncode.info/wp-content/uploads/2009/11/facepalm.png" alt="facepalm" title="facepalm" height="170" class="lead" align=left />Entropie in Reinkultur: Alles tendiert zum gr&#246;sstm&#246;glichen Chaos und guter Wille pflastert den Weg ins Grab. Auf meinem Lieblingsrechner wurde vor langer Zeit <a
href="http://www.kubuntu.org/">Kubuntu</a> installiert. Mit dem Update auf Version 9.10 hat sich gerade eine schon lange f&#228;llige Neuinstallation von Windows gekreuzt. (Neuinstallation weil: <i>Vista Basic Home Premium</i> &#8211; entgegen der Meinung des MS Update-Assistant &#8211; nicht auf <i>Windows 7 Professional</i> upgedatet werden kann. Warum? Das weiss wohl nur ein <i>Microsoft Certified Client System Upgrade Engineer</i>, der wohl ein <i>Live Upgrade</i> &#252;ber <i>Windows Vista Home Half Master Business Game Edition</i> oder so empfehlen w&#252;rde *gna*.)</p><p>Windows startet nun wunderbar, hat aber nat&#252;rlich meinen Bootloader (GRUB) &#252;berschrieben und ich kann nimmer in mein geliebtes, frisch upgedatetes Kubuntu booten. Das kennen wir von fr&#252;her und mit Hilfe einer Boot-CD hat das schon bei Lilo wunderbar geklappt. Nicht jedoch dieses mal: Fehlermeldungen von nicht gefundenen Partitionen (<tt>"Could not find device for /boot: Not found or not a block device."</tt>) lachten Hohn &#252;ber <a
href="http://wiki.ubuntuusers.de/GRUB">ganz</a> <a
href="http://ubuntuforums.org/showthread.php?t=224351">verschiedene</a> <a
href="http://www.belug.de/hilfe/howtos/bootloader-grub/">Anleitungen</a>.</p><p>Ein paar ausgerissene Haarb&#252;schel sp&#228;ter und nach einer sehr formal geordneten Analyse (*lach*) hab ich dann das Problem erfasst. Beim Update wird der alte Grub 0.97 weiterverwendet, eine Neuinstallation (und auf der 9.10 Life-CD) ist der neue Grub 1.97.</p><p>Nach ein paar weiteren Tritten gegen die Maschine war die L&#246;sung dann einfach: Eine <em>alte</em> Knoppix mit <em>altem</em> Grub rausgekramt, gebootet:</p><pre>
$> sudo grub
grub> find /boot/grub/stage1
 (hd0,5)
grub> root (hd0,5)
grub> setup (hd0)
grub> quit
</pre><p>Und alle sind wieder gl&#252;cklich, die Haare wachsen nach, die Falten werden sich wieder gl&#228;tten und die neuen Dellen im PC werden nicht weiter auffallen (is ja ein Dell *h&#246;h&#246;_und_schenkelklopf*).</p> ]]></content:encoded> <wfw:commentRss>http://blog.oncode.info/2009/11/01/kubuntu-update-und-grub-wiederherstellung/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Unicode Textverzwurbler</title><link>http://blog.oncode.info/2009/07/16/unicode-textverzwurbler/</link> <comments>http://blog.oncode.info/2009/07/16/unicode-textverzwurbler/#comments</comments> <pubDate>Thu, 16 Jul 2009 21:43:13 +0000</pubDate> <dc:creator>skaldrom</dc:creator> <category><![CDATA[Coding]]></category> <category><![CDATA[Uncategorized]]></category> <category><![CDATA[effekte]]></category> <category><![CDATA[Text]]></category> <category><![CDATA[unicode]]></category> <category><![CDATA[utf-8]]></category> <guid
isPermaLink="false">http://blog.oncode.info/?p=1299</guid> <description><![CDATA[Es sind Ferien, darum ein paar entspannte Links, die etwas W&#252;rze in Twitter und Foren (auch explizit nichtgenannte) bringen. UTF-8 und Unicode echt mal sinnvoll angewendet *evil_grin*. Als Erstes: TextFlip: ¡ɯn ʇxǝʇ uǝp ʇɥǝɹp sǝ. Ebenfalls nett: BubbleText: Ⓓⓐ ⓦⓔⓡⓓⓔⓝ Ⓑⓤⓑⓑⓛⓔⓢ ⓔⓡⓩⓔⓤⓖⓣ&#8230; F&#252;r die K&#252;rzesten Kurzurls: Tinyarro.ws: F&#252;r dieses Blog kommt dann etwas heraus wie [...]]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.oncode.info/wp-content/uploads/2009/07/hiero.png" alt="hiero" title="hiero" align="left" class="lead"/>Es sind Ferien, darum ein paar entspannte Links, die etwas W&#252;rze in <a
href="http://twitter.com/skaldrom">Twitter</a> und Foren (auch explizit nichtgenannte) bringen. UTF-8 und Unicode echt mal sinnvoll angewendet *evil_grin*.</p><p>Als Erstes: <a
href="http://www.textflip.org/">TextFlip</a>: ¡ɯn ʇxǝʇ uǝp ʇɥǝɹp sǝ.</p><p>Ebenfalls nett: <a
href="http://www.bubbletext.org/">BubbleText</a>: Ⓓⓐ ⓦⓔⓡⓓⓔⓝ Ⓑⓤⓑⓑⓛⓔⓢ ⓔⓡⓩⓔⓤⓖⓣ&#8230;</p><p>F&#252;r die K&#252;rzesten Kurzurls: <a
href="http://tinyarro.ws/">Tinyarro.ws</a>: F&#252;r dieses Blog kommt dann etwas heraus wie <a
href="http://➽.ws/">http://➽.ws/</a>. K&#252;rzer gehts nimmer <img
src='http://blog.oncode.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> &#8230;</p><p>Zum Schluss noch was f&#252;r C-64 Veteranen: <a
href="http://www.alanwood.net/unicode/block_elements.html">Die Blockgrafik lebt</a>:<br
/> ▄▄█▀▀ ▀█▀ █▀█ █▀ █▄█▄█ █▀█ █▀ ▄▄█▀▀</p><p><strong>Nachtrag 07.2009:</strong> <a
href="http://www.2keystrokes.com/">2keystrokes</a> hat ein virtuelles Unicode-Keyboard. Nette Idee!</p> ]]></content:encoded> <wfw:commentRss>http://blog.oncode.info/2009/07/16/unicode-textverzwurbler/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Sortierung eines Dropdownwidgets in Symfony &#228;ndern (Doctrine)</title><link>http://blog.oncode.info/2009/07/06/sortierung-eines-dropdownwidgets-in-symfony-aendern-doctrine/</link> <comments>http://blog.oncode.info/2009/07/06/sortierung-eines-dropdownwidgets-in-symfony-aendern-doctrine/#comments</comments> <pubDate>Mon, 06 Jul 2009 20:28:54 +0000</pubDate> <dc:creator>skaldrom</dc:creator> <category><![CDATA[Uncategorized]]></category> <category><![CDATA[Beispiel]]></category> <category><![CDATA[Doctrine. table_method]]></category> <category><![CDATA[example]]></category> <category><![CDATA[order_by]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[Symfony]]></category> <category><![CDATA[Widget]]></category> <guid
isPermaLink="false">http://blog.oncode.info/?p=1289</guid> <description><![CDATA[Dieser Beitrag beschreibt, wie die Sortierung in einem von Symfony (Doctrine) erstellten Dropdown im Formular ge&#228;ndert werden kann.]]></description> <content:encoded><![CDATA[<p>Frameworks sind toll. Man kann in vielen tausend Zeilen das tun, wozu man fr&#252;her nur ein paar Statements gebraucht hat&#8230; Oder war es umgekehrt? Hier etwas <a
href="http://www.symfony-project.org/">Symfony</a> spezifisches, das mir ein paar gef&#228;rbte Haare gekostet hat, weil ich sie mir ausreissen musste.</p><h3>Das Problem</h3><p>Es sei gegeben eine dreistufige Hierarchie: Kategorien &rarr; F&#228;cher &rarr; Kurse. Es sind ganz saubere 1:n-Beziehungen: Jedes Fach geh&#246;rt zu einer Kategorie und ein Kurs ist genau ein durchgef&#252;hrtes Fach.</p><p>Folgt man dem (wirklich guten) Symfony-Tutorial, so wird an <a
href="http://www.symfony-project.org/jobeet/1_2/Doctrine/en/03#chapter_03_see_it_in_action_in_the_browser">Tag 3 ganz unten</a> gezeigt, wie aus der Tabellendefinition automatisch ein Formular generiert wird. Clevererweise werden f&#252;r 1:n-Beziehungen Dropdowns generiert.</p><p>Wenn ein neuer Kurs generiert wird, so soll man angeben k&#246;nnen, was f&#252;r ein Fach er unterrichtet. Standardm&#228;ssig werden F&#228;cher wie folgt angezeigt:</p><ol><li>Ein Kategorienk&#252;rzel (&#8220;I&#8221; f&#252;r Informatik, &#8220;A&#8221; f&#252;r Ausdruckstanz (haha), &#8230;)</li><li>Einer &#8220;Nummer&#8221; (normalerweise &#8220;01&#8243; bis &#8220;15&#8243; oder so)</li><li>Dem Namen des Fachs</li></ol><p>Das Fach braucht f&#252;r seine Darstellung also das K&#252;rzel aus dem Kategorien-Model (bin ich der Einzige der bei Models immer grinsen muss?).</p><p>Das generierte Dropdown zeigt die Namen der F&#228;cher falsch und alles Kreuz und R&#252;ben durcheinander an. Ha, nun ist guter Rat teuer.</p><p><img
src="http://blog.oncode.info/wp-content/uploads/2009/07/dropdownstart.png" alt="dropdownstart" title="dropdownstart" width="624" height="357" class="aligncenter size-full wp-image-1293" /></p><h3>L&#246;sung</h3><h4>Namen der F&#228;cher</h4><p>Das geht noch relativ einfach: Jedes Model besitzt eine <tt>__toString()</tt> Methode, die &#252;berschrieben werden kann:</p><p>[cc lang="php"]<br
/> # File: lib/model/doctrine/modelnamefach.class.php<br
/> [...]<br
/> public function __toString() {<br
/> return sprintf(&#8216;%s %s %s&#8217;, $this->FreifachNgKategorie->getKuerzel(), $this->getNummer(), $this->getName());<br
/> }<br
/> [...]<br
/> [/cc]</p><p>Und tats&#228;chlich:</p><p><img
src="http://blog.oncode.info/wp-content/uploads/2009/07/dropdownbefore.png" alt="dropdownbefore" title="dropdownbefore" width="654" height="364" class="aligncenter size-full wp-image-1290" /></p><h4>Sortierung</h4><p>Ich h&#228;tte mir eigentlich gew&#252;nscht, f&#252;r jedes Model eine Defaultsortierung angeben zu k&#246;nnen. Aber da nicht Weihnachten ist, werden meine W&#252;nsche nicht erf&#252;llt. Da hilft nur Quellcodestudium und gl&#252;ckliches Zusammenpuzzeln der <a
href="http://www.doctrine-project.org/documentation/manual/1_1/en/introduction">Doctrine Anleitung</a>, dem <a
href="http://www.symfony-project.org/doctrine/1_2/en/06-Working-With-Data">Symfony-Doctrine Buch</a> und der <a
href="http://www.symfony-project.org/forms/1_2/en/A-Widgets#chapter_a_sub_supported_options">API-Dokumentation</a> (scrollen bis Doctrine): Beispiele gibts leider fast keine.</p><p>Nungut: Das Formular wird automatisch generiert (<tt>lib/form/doctrine/base/</tt>), darum sollte hier nur wer was &#228;ndern, der per Stunde bezahlt wird und das nach jeder Generierung wieder neu tun kann <img
src='http://blog.oncode.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . F&#252;r uns Andere m&#252;ssen wir das Choice in der Kinderklasse hacken und eine <em>table_method</em> reinbringen, die die Eintr&#228;ge nach unserem Gusto liefert:</p><p>[cc lang="php"]<br
/> # File: lib/form/doctrine/modelnamekurs.class.php<br
/> [...]<br
/> public function configure()  {<br
/> $this->setWidget(&#8216;freifach_id&#8217;, new sfWidgetFormDoctrineChoice(array(&#8216;model&#8217; => &#8216;FreifachNgFreifach&#8217;, &#8216;table_method&#8217; => &#8216;retrieveFreifachOrderedByCategory&#8217;)));<br
/> }<br
/> [...]<br
/> [/cc]</p><p>Diese <tt>table_method</tt> muss auch noch codiert werden. Und das in der Tabellenklasse der F&#228;cher (dochdoch, wenn man sich das &#252;berlegt ist es ganz logisch *irres_grinsen*).</p><p>[cc lang="php"]<br
/> # File: lib/model/freifachmodelnameTable.class.php<br
/> [...]<br
/> function retrieveFreifachOrderedByCategory() {<br
/> $q=Doctrine_Query::create()->from(&#8216;FreifachNgFreifach f&#8217;)->innerJoin(&#8216;f.FreifachNgKategorie k&#8217;)->orderby(&#8216;k.kuerzel, f.nummer, f.name&#8217;);<br
/> //echo $q->getSql();<br
/> return $q;<br
/> }<br
/> [...]<br
/> [/cc]</p><p>Toll, und dann klappts auch mit dem Dropdown:</p><p><img
src="http://blog.oncode.info/wp-content/uploads/2009/07/dropdownordered.png" alt="dropdownordered" title="dropdownordered" width="659" height="362" class="aligncenter size-full wp-image-1295" /></p> ]]></content:encoded> <wfw:commentRss>http://blog.oncode.info/2009/07/06/sortierung-eines-dropdownwidgets-in-symfony-aendern-doctrine/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Synergy: Ein Tool, das die Arbeitsweise am Computer ver&#228;ndern kann</title><link>http://blog.oncode.info/2009/06/30/synergy-ein-tool-das-die-arbeitsweise-am-computer-veraendern-kann/</link> <comments>http://blog.oncode.info/2009/06/30/synergy-ein-tool-das-die-arbeitsweise-am-computer-veraendern-kann/#comments</comments> <pubDate>Tue, 30 Jun 2009 09:29:47 +0000</pubDate> <dc:creator>skaldrom</dc:creator> <category><![CDATA[Systemtechnik]]></category> <category><![CDATA[Uncategorized]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[Multiscreen]]></category> <category><![CDATA[Synergy]]></category> <category><![CDATA[Windows]]></category> <guid
isPermaLink="false">http://blog.oncode.info/?p=1233</guid> <description><![CDATA[Synergy erm&#246;glicht es ziemlich problemlos &#252;ber das Netzwerk mehrere Computer mit einer Tastatur und einer Maus zu steuern.]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.oncode.info/wp-content/uploads/2009/06/synergy.png" alt="synergy" title="synergy" align="left" class="lead" />Die Arbeitsweise von Synergy ist einfach und bestechend: Die Tastatur und Maus eines Computers (genannt &#8220;Server&#8221;) kann benutzt werden um den Cursor und die Eingaben auf anderen Compies zu steuern. So weit so gut, aber <a
href="http://synergy2.sourceforge.net/index.html">Synergy</a> macht das &#252;ber das Netzwerk und (fast) betriebsystemunabh&#228;ngig!</p><h3>Was kann es nun?</h3><p>Folgendes Szenario: Meine Grosse ist der Server und mein Arbeitsger&#228;t. Rechts davon steht mein Laptop mit dem Mailclient und links davon mein Nettop mit Doku und Cheatsheets. Fahre ich mit der Maus links oder rechts aus dem Bildschirm der Grossen, erscheint der Cursor auf dem entsprechenden Kleincomputer. Die eine Tastatur kann benutzt werden um auf allen Compies Eingaben zu machen. Der Clou: Sogar die Zwischenablage wird synchronisiert. Ich kann also auf der Einen was kopieren und auf der Anderen wieder einf&#252;gen.</p><p>(Zwischenbemerkung: Ja, <a
href="http://www.witze-fun.de/witze/witz/6149">Computer sind weiblich</a>).</p><p>Da das Ganze betriebssystemunabh&#228;ngig (im Sinne von: L&#228;uft auf Linux, Mac und Windows) funktioniert, eignet sich das hervorragend f&#252;r Tests, Dokumentieraufgaben etc.</p><p>Bis auf die Spitze hat es Sembetu getrieben:<br
/> <object
width="445" height="364"><param
name="movie" value="http://www.youtube.com/v/Id3GHAruhAk&#038;hl=en&#038;fs=1&#038;color1=0x3a3a3a&#038;color2=0x999999&#038;border=1"></param><param
name="allowFullScreen" value="true"></param><param
name="allowscriptaccess" value="always"></param><embed
src="http://www.youtube.com/v/Id3GHAruhAk&#038;hl=en&#038;fs=1&#038;color1=0x3a3a3a&#038;color2=0x999999&#038;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="445" height="364"></embed></object></p><h3>Einrichten unter Linux</h3><h4>Mit QuickSynergy</h4><p>Unter Linux hat Synergy kein eigenes GUI, mit <a
href="http://quicksynergy.sourceforge.net/">QuickSynergy</a> hat man aber alles in klickybunti das man braucht. F&#252;r mich war das GUI etwas verwirrend: &#220;ber die Tabs wird gew&#228;hlt, ob man Server  (&#8220;Share&#8221;) oder Client (&#8220;Use&#8221;) ist. Durch <tt>Execute</tt> wird der entsprechende Programmteil gestartet und mittels <tt>Close</tt> verschwindet der Dialog in der Taskleiste.</p><p>Beim Dialog f&#252;r den Serverbetrieb kann grob eingestellt werden, wo sich die anderen Computer befinden. &#220;ber die Konfigurationsdatei lassen sich auch andere &#8211; fast beliebige &#8211; Anordnungen konfigurieren:</p><div
id="attachment_1279" class="wp-caption aligncenter" style="width: 386px"><img
src="http://blog.oncode.info/wp-content/uploads/2009/06/qsynergy-server.png" alt="Quicksynergy Servereinstellungen" title="qsynergy-server" width="376" height="390" class="size-full wp-image-1279" /><p
class="wp-caption-text">Quicksynergy Servereinstellungen</p></div><p>Beim Client muss nur der Server angegeben werden:</p><div
id="attachment_1282" class="wp-caption aligncenter" style="width: 386px"><img
src="http://blog.oncode.info/wp-content/uploads/2009/06/qsynergy-client.png" alt="QuickSynergy Clienteinstellungen" title="qsynergy-client" width="376" height="390" class="size-full wp-image-1282" /><p
class="wp-caption-text">QuickSynergy Clienteinstellungen</p></div><h4>Mit der Konfigurationsdatei, ohne QuickSynergy</h4><p>Eine genaue Anleitung f&#252;r den Aufbau einer Konfigurationsdatei gibt es auf der <a
href="http://synergy2.sourceforge.net/configuration.html">Synergy Website</a>.</p><h4>Autostart unter Linux</h4><p>Es gibt verschiedene M&#246;glichkeiten um Synergy als Server oder als Client <a
href="http://synergy2.sourceforge.net/autostart.html">automatisch zu starten</a>: Entweder schon vor dem Einloggen oder einfacher noch nachher. Wenn es reicht, dass der Client/Server nach der Anmeldung l&#228;uft, ist die Sache durch den Autostart-Ordner in KDE schnell erledigt. Die Konfigurationsdatei, die QuickSynergy erzeugt kann dabei verwendet werden und befindet sich unter <tt>~/.quicksynergy/synergy.conf</tt>.</p><h4>Weitere Anleitungen</h4><p>F&#252;r Ubuntu gibt es ein eigenes <a
href="https://help.ubuntu.com/community/SynergyHowto">HowTo</a>.</p><p>F&#252;r Leute die lieber schauen statt lesen:<br
/> <object
width="445" height="364"><param
name="movie" value="http://www.youtube.com/v/UdP1Rei2muw&#038;hl=en&#038;fs=1&#038;color1=0x3a3a3a&#038;color2=0x999999&#038;border=1"></param><param
name="allowFullScreen" value="true"></param><param
name="allowscriptaccess" value="always"></param><embed
src="http://www.youtube.com/v/UdP1Rei2muw&#038;hl=en&#038;fs=1&#038;color1=0x3a3a3a&#038;color2=0x999999&#038;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="445" height="364"></embed></object></p><h3>Fazit</h3><p>Eine Untersuchung hat gezeigt, dass <a
href="http://www.computerzeitung.de/articles/fraunhofer-studie_multi-monitor-arbeitsplaetze_steigern_die_produktivitaet_deutlich:/2009011/31862381_ha_CZ.html">Produktivit&#228;t durchaus von der Bildschirmgr&#246;sse abh&#228;ngt</a>. Synergy vereinfacht vieles und bringt Ruhe in den Mehrcomputeralltag.</p><p>Ausserdem ist es Geil und erzeugt &#8220;Huis&#8221; bei Zuschauern <img
src='http://blog.oncode.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> &#8230;</p><p>Vielen Dank an <a
href="http://frigidor.ch">Frigidor</a> f&#252;r den Tip!</p> ]]></content:encoded> <wfw:commentRss>http://blog.oncode.info/2009/06/30/synergy-ein-tool-das-die-arbeitsweise-am-computer-veraendern-kann/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Firefox-Extension f&#252;r das Bee5 affiliate System</title><link>http://blog.oncode.info/2009/04/29/firefox-extension-fuer-das-bee5-affiliate-system/</link> <comments>http://blog.oncode.info/2009/04/29/firefox-extension-fuer-das-bee5-affiliate-system/#comments</comments> <pubDate>Wed, 29 Apr 2009 19:27:37 +0000</pubDate> <dc:creator>skaldrom</dc:creator> <category><![CDATA[Uncategorized]]></category> <category><![CDATA[Bee5]]></category> <category><![CDATA[Firefox]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[Toolbar]]></category> <category><![CDATA[XUL]]></category> <guid
isPermaLink="false">http://blog.oncode.info/?p=1126</guid> <description><![CDATA[Bee5 startet eine Tools-Offensive. Diese habe ich genutzt, um eine Toolbar zu coden...]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.oncode.info/wp-content/uploads/2009/03/flying-bee5.png" alt="flying-bee5" title="flying-bee5"  class="lead" align="left"/>&#220;ber <a
href="http://bee5.de/beeoNu53a88" rel="nofollow">Bee5</a> habe ich ja <a
href="/2009/01/03/stressfreies-affiliate-marketing-geld-verdienen-mit-bee5/">fr&#252;her schon geschrieben</a>. Sie haben jetzt eine Tools-Offensive gestartet: alle <a
href="http://bee5.de/my/tools.html" rel="nofollow">Tools</a>, die ihr <a
href="http://api.bee5.de/" rel="nofollow">API</a> verwenden, werden an den Verk&#228;ufen die mit dem Tool get&#228;tigt werden beteiligt. Aus meiner Sicht eine gute Offerte und eine Win-Win-Situation: Anwender k&#246;nnen das System einfacher nutzen, die Programmierer werden f&#252;r die Arbeit entsch&#228;digt, Bee5 wird bekannter und alle sind gl&#252;cklich.</p><p>Das war eine ideale Gelegenheit zu lernen, wie eine Firefox-Extension geschrieben wird. Bemerkenswerterweise ist sie sogar fertig geworden. Sie befindet sich im <a
rel="nofollow" href="http://bee5.de/my/tools-detail.html?h=5xmk2gPtA0">Tools-Verzeichnis auf der Bee5 Seite</a> (<a
href="http://bee5.de/beeoNu53a88" rel="nofollow">Login wird ben&#246;tigt</a>. Klar, sonst macht die ganze Toolbar keinen Sinn!).</p><h4>Das Bee5 Affiliate-System</h4><p>Kurzrepetition: <a
href="http://bee5.de/beeoNu53a88" rel="nofollow">Bee5</a> handelt mit Shops und anderen Sites Vertr&#228;ge aus, um f&#252;r die Beschaffung von Kunden und Verk&#228;ufen entl&#246;hnt zu werden (Provisionen). Der Grossteil dieser Betr&#228;ge wird an jene weitergegeben, die die Kunden beschaffen (Links weitergeben, selber in den Partnershps einkaufen, &#8230;). Damit identifiziert werden kann, wer was eingekauft hat, hat Bee5 einen Kurzurl-Dienst ins Leben gerufen. Wird ein Partner-Shop &#252;ber eine solche URL angesurft, weiss Bee5 wem der Provisionsanteil zusteht. Dieser Kurzurldienst kann aber auch f&#252;r beliebige URLs benutzt werden, nicht nur f&#252;r die &#8220;Partner&#8221;.<br
/> Einfach gesagt l&#228;uft es folgendermassen ab:</p><ol><li>Man Surft zu einem Partnershop.</li><li>Aus der URL wird &#252;ber die Bee5-Seite eine Kurzurl gemacht.</li><li>Man klickt auf diesen Link oder gibt ihn weiter.</li><li>Es wird eingekauft.</li><li>Der Provisionsanteil wird ausbezahlt.</li></ol><p>Die Firefox Extension sollte folgende Features haben, um den Prozess zu erleichtern:</p><ul><li>Anzeigen, wenn man sich auf einer Partnerseite von Bee5 befindet.</li><li>Per Knopfdruck diese Seite &#252;ber einen Bee5 Link aufsuchen.</li><li>Die aktuelle Seite im Browser in einen Bee5 Link umwandeln.</li><li>Beliebige Links in Bee5 Links umwandeln.</li><li>&#220;ber das Guthaben bei Bee5 informieren.</li></ul><p>Herausgekommen ist eine Extension, die sich haupts&#228;chlich als Toolbar zeigt:</p><div
id="attachment_1082" class="wp-caption aligncenter" style="width: 310px"><a
href="http://blog.oncode.info/wp-content/uploads/2009/03/bee5-extension.png"><img
src="http://blog.oncode.info/wp-content/uploads/2009/03/bee5-extension-300x211.png" alt="Die Bee5 Extension in Aktion" title="bee5-extension" width="300" height="211" class="size-medium wp-image-1082" /></a><p
class="wp-caption-text">Die Bee5 Extension in Aktion</p></div><h3>Anatomie einer Firefox Extension</h3><p>Das ganze Prinzip, das hinter einer Firefox Extension steht ist ziemlich interessant. Grunds&#228;tzlich werden die GUI-Elemente in XML, genauer in <a
href="https://developer.mozilla.org/de/XUL">XUL</a> definiert. F&#252;r den Browser wird ein <em>Overlay</em> kreiert, in dem man seine Dinge in die Toolbar, das Men&#252; und/oder in die Statusbar einh&#228;ngt. Alle Ereignisse werden mittels Javascript implementiert. Ein Ausschnitt aus dem Overlay:</p><p>[cc lang="xml"]<br
/> <overlay
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="Bee5TB-Overlay"><br
/> <stringbundleset
id="stringbundleset"><br
/> <stringbundle
id="Bee5TB-stringBundle" src="chrome://bee5bar/locale/bee5bar.properties"/><br
/> </stringbundleset><br
/> <script
type="application/x-javascript" src="chrome://bee5bar/content/bee5bar.js" /><br
/> <toolbox
id="navigator-toolbox"><br
/> <toolbar
id="Bee5TB-Toolbar" toolbarname="&#038;bee5bar.toolbarname;" accesskey="&#038;bee5bar.toolbarname.key;" class="chromeclass-toolbar" context="toolbar-context-menu" hidden="false" persist="hidden"><br
/> <toolbaritem
flex="0" id="Bee5TB-MainMenuTBItem"><br
/> <toolbarbutton
id="Bee5TB-MainMenu" type="menu" tooltiptext="&#038;bee5bar.menu.tooltiptext;" label="&#038;bee5bar.menu;" accesskey="&#038;bee5bar.menu.key;"></p> <menupopup> <menuitem
label="&#038;bee5bar.menu.website;" accesskey="&#038;bee5bar.menu.website.key;" tooltiptext="&#038;bee5bar.menu.website.tooltiptext;" oncommand="Bee5Bar.loadURL('http://bee5.de/beeoNu53a88')"/> <menuitem
label="&#038;bee5bar.menu.mybee5;" accesskey="&#038;bee5bar.menu.mybee5.key;" tooltiptext="&#038;bee5bar.menu.mybee5.tooltiptext;" oncommand="Bee5Bar.loadURL('http://bee5.de/my/')"/> <menuitem
label="&#038;bee5bar.menu.statistics;" accesskey="&#038;bee5bar.menu.statistics.key;" tooltiptext="&#038;bee5bar.menu.statistics.tooltiptext;" oncommand="Bee5Bar.loadURL('http://bee5.de/my/statistic-abstract.html')"/> [/cc]</p><h3>Probleme und Tipps</h3><h4>Das unglaubliche Prefwindow</h4><p>Eines der gr&#246;ssten Probleme war das sogenannte Prefwindow: Lasst Euch nicht in den Wahnsinn treiben. Es reagiert n&#228;mlich auf allen Systemen anders. Unter Linux werden &#196;nderungen sofort in die Config geschrieben, unter Windows erst nach Dr&#252;cken von ok!</p><h4>Reagieren auf Seitenwechsel</h4><p>Bei jeder Seite sollte gepr&#252;ft werden, ob es sich um einen Partnershop handelt. Es gibt verschiedene Philosophien, wie das gehandhabt werden soll, und die wenigsten funktionieren auch f&#252;r Tabwechsel. Grunds&#228;tzlich kommt man wohl nicht darum herum "pageshow" und "focus" zu &#252;berschreiben:<br
/> [cc lang="javascript"]<br
/> newPage: function(event) {<br
/> if(event.target.location) {<br
/> var url = event.target.location.toString();<br
/> Bee5Bar.doPageWork(url);<br
/> }<br
/> }<br
/> //...<br
/> window.addEventListener("pageshow", Bee5Bar.newPage, false);<br
/> window.addEventListener("focus", Bee5Bar.newPage, true );<br
/> [/cc]</p><h4>Beim ersten Aufruf eine Webseite anzeigen</h4><p>Will man bei einem Upgrade oder dem ersten Start einer Extension eine Seite anzeigen oder Initialisierungen durchf&#252;hren, sollte man sich streng an die <a
href="https://developer.mozilla.org/En/Code_snippets/On_page_load">Vorgaben der XUL-Seite</a> halten.</p><h4>Autiomatisch ein Toolboxitem einf&#252;gen</h4><p>Das funzt, hab nichts Anderes gefunden:<br
/> [cc lang="javascript"]<br
/> // Automatically adds toolbar button on first run<br
/> addToolbarButton: function() {<br
/> Bee5Bar.debugMsg("addToolbarButton","Function started",1);<br
/> // Get preferences<br
/> if(!Bee5Bar.prefsManager.getBoolPref("toolbarinstalled")) {<br
/> Bee5Bar.debugMsg("addToolbarButton","Installing Toolbar",1);<br
/> Bee5Bar.prefsManager.setBoolPref("toolbarinstalled",true);<br
/> try {<br
/> var firefoxnav = document.getElementById("nav-bar");<br
/> var curSet = firefoxnav.currentSet;<br
/> if (curSet.indexOf("Bee5TB-toolbarButton") == -1) {<br
/> var set;<br
/> // Place the button before the urlbar<br
/> if (curSet.indexOf("urlbar-container") != -1)<br
/> set = curSet.replace(/urlbar-container/, "Bee5TB-toolbarButton,urlbar-container");<br
/> else  // at the end<br
/> set = curSet + ",Bee5TB-toolbarButton";<br
/> firefoxnav.setAttribute("currentset", set);<br
/> firefoxnav.currentSet = set;<br
/> document.persist("nav-bar", "currentset");<br
/> // If you don't do the following call, funny things happen<br
/> try {<br
/> BrowserToolboxCustomizeDone(true);<br
/> } catch (e) { }<br
/> }<br
/> } catch(e) { }<br
/> }<br
/> },<br
/> [/cc]</p><h3>Einstieg in die Programmierung einer Toolbar</h3><h4>Von den Profis lernen</h4><p>Von jedem Addon kann der Quelltext angesehen werden! Sollte er sich in einem JAR befinden, einfach entzippen.</p><h4>Quellen/Tutorials</h4><p>Der allerbeste Einstieg d&#252;rfte <a
href="http://www.borngeek.com/firefox/toolbar-tutorial/chapter-1/">Born Geek's Tutorial</a> sein. Es ist etwas veraltet, bietet aber eine gute Basis. Etwas moderner, aber knapper sind das <a
href="http://blog.mozilla.com/addons/2009/01/28/how-to-develop-a-firefox-extension/">Mozilla Blog</a> und <a
href="http://www.linuxbox.co.uk/firefox_extension_tutorial.php">Linux Box</a>.</p><h4>Entwicklungsumgebung</h4><p><a
href="http://www.devilsworkshop.org/setting-up-firefox-as-ide-for-firefox-extension-development-firefox-developers/">Devilsworkshop</a> beschreibt ein paar M&#246;glichkeiten, wie Firefox als Entwicklungsumgebung aufgesetzt werden kann. Unverzichtbare AddOns waren f&#252;r mich die <a
href="http://ted.mielczarek.org/code/mozilla/extensiondev/">Extension Developers Extension</a>, <a
href="https://addons.mozilla.org/en-US/firefox/addon/1815">Console2</a> und <a
href="https://addons.mozilla.org/en-US/firefox/addon/4453">ChromeList</a>.</p><h4>Fazit</h4><p>Coden macht Spass!!! Startet die Editoren..!</p> ]]></content:encoded> <wfw:commentRss>http://blog.oncode.info/2009/04/29/firefox-extension-fuer-das-bee5-affiliate-system/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Flickr: Private Photos posten</title><link>http://blog.oncode.info/2009/04/04/flickr-private-photos-posten/</link> <comments>http://blog.oncode.info/2009/04/04/flickr-private-photos-posten/#comments</comments> <pubDate>Sat, 04 Apr 2009 21:17:56 +0000</pubDate> <dc:creator>skaldrom</dc:creator> <category><![CDATA[Uncategorized]]></category> <category><![CDATA[flickr]]></category> <category><![CDATA[Forum]]></category> <category><![CDATA[Photos]]></category> <category><![CDATA[posten]]></category> <category><![CDATA[private]]></category> <guid
isPermaLink="false">http://blog.oncode.info/?p=1127</guid> <description><![CDATA[Dieser Beitrag zeigt einen Weg, wie kann man gezielt einzelne Photos von FLICKR aus in Foren und auf Webseiten posten kann, ohne dass ALLE darauf Zugriff haben und die Fotos selbst &#252;ber die Suchfunktion findbar sind.]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.oncode.info/wp-content/uploads/2009/04/flickr.png" alt="flickr" title="flickr" class="lead" align="left"/><a
href="http://www.flickr.com/">Flickr</a> macht Spass! Mittels <a
href="http://www.digikam.org/">digikam</a> und <a
href="http://code.google.com/p/dfo/">dfo</a> hat man ihn auch unter Linux ganz gut im Griff.  So ein Onlinealbum erfreut Familie und Freunde und dient zus&#228;tzlich als Backup.</p><p>Hier ein kleiner Trick, wie man (eigene!) private Photos publizieren kann. Zuerst: Warum sollte man das wollen? Ganz einfach: Man hat Photos, die man nicht allen zug&#228;nglich machen will. Was interessiert die Familie die Fastnacktfotos des letzten Betriebsfestes oder das lustige Chaos zu Hause? Wenn man die Sichtbarkeit auf &#8220;&#246;ffentlich&#8221; stellt, dann werden sie auf der Benutzerseite angezeigt und sind auch &#252;ber die Suche findbar. Vielleicht m&#246;chte man aber genau diese Fotos einem eingeschr&#228;nkten Benutzerkreis (im Firmenintranet beispielsweise) trotzdem zeigen.</p><p>Mit folgendem Vorgehen ist dies m&#246;glich:</p><ol><li>Die gew&#252;nschten Fotos auf &#8220;Nur Sie (privat)&#8221; stellen.</li><li>Auf das Foto klicken, um die Detailansicht zu sehen.</li><li>&#220;ber dem Foto auf die Lupe (&#8220;Alle Gr&#246;ssen&#8221;) klicken.</li><li>Den Link &#8220;Diese Gr&#246;sse herunterladen&#8221; kopieren. Er ist so in der Form http://farm2.static.flickr.com/3170/3414365629_d1ed214a27_b_d.jpg</li><li>Den Link pasten, wohin man auch immer will.</li></ol><p>Ist das eine Sicherheitsl&#252;cke? Vielleicht. Ein Feature? Ganz sicher <img
src='http://blog.oncode.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> &#8230;</p> ]]></content:encoded> <wfw:commentRss>http://blog.oncode.info/2009/04/04/flickr-private-photos-posten/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> </channel> </rss>
