<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
> <channel><title>Autarchy of the Private CaveLinks &#187;</title> <atom:link href="http://bogdan.org.ua/categories/links/feed" rel="self" type="application/rss+xml" /><link>http://bogdan.org.ua</link> <description>Tiny bits of bioinformatics, [web-]programming etc</description> <lastBuildDate>Fri, 03 Feb 2012 22:51:18 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>Megahack of Stratfor</title><link>http://bogdan.org.ua/2012/01/09/megahack-of-stratfor.html</link> <comments>http://bogdan.org.ua/2012/01/09/megahack-of-stratfor.html#comments</comments> <pubDate>Mon, 09 Jan 2012 02:25:41 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[Links]]></category> <category><![CDATA[Misc]]></category> <category><![CDATA[Security]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[anonymous]]></category> <category><![CDATA[antisec]]></category> <category><![CDATA[drupal]]></category> <category><![CDATA[fourkitchens]]></category> <category><![CDATA[lulzsec]]></category> <category><![CDATA[stratfor]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1801</guid> <description><![CDATA[If you haven&#8217;t heard yet &#8211; stratfor.com was hacked in December 2011, leaking full information about 75k credit cards (including owner&#8217;s addresses and CVV codes) and 860k (right, almost a million) user accounts. All Stratfor email archives were also reportedly stolen (around 160-200 GB of data), but those were not made publicly available on the [...]]]></description> <content:encoded><![CDATA[<p>If you haven&#8217;t heard yet &#8211; stratfor.com was hacked in December 2011, leaking full information about 75k credit cards (including owner&#8217;s addresses and CVV codes) and 860k (right, almost a million) user accounts. All Stratfor email archives were also reportedly stolen (around 160-200 GB of data), but those were not made publicly available on the internet &#8211; unlike the credit cards and user accounts information, which is still relatively easy to find and download.</p><p>I do not really recollect anything that large. Well, not counting dropbox&#8217;s 4-hour window of &#8220;any password fits all accounts&#8221;, but that was different.</p><p>Here are some of the news items about this seriously large hacking incident:</p><ul><li><a
href="http://www.nytimes.com/2011/12/26/technology/hackers-breach-the-web-site-of-stratfor-global-intelligence.html?_r=1" rel="nofollow" >NYTimes (Dec. 25, 2011)</a></li><li><a
href="http://online.wsj.com/article/APf0a1519595c04b17ad9a84120d03cf1d.html" rel="nofollow" >WSJ (Dec. 25, 2011)</a></li><li><a
href="http://edition.cnn.com/2011/12/26/tech/web/anonymous-hack-stratfor/" rel="nofollow" >CNN (Dec. 25, 2011)</a></li><li>relatively above-average write-up from <a
href="http://www.wired.com/threatlevel/2011/12/antisec-hits-private-intel-firm-million-of-docs-allegedly-lifted/" rel="nofollow" >Wired (Dec. 26, 2011)</a></li><li><a
href="http://abcnews.go.com/US/hacking-group-anonymous-vows-hit/story?id=15234349" rel="nofollow" >ABCNews (Dec. 26, 2011)</a></li><li><a
href="http://www.theregister.co.uk/2012/01/03/stratfor_mega_hack/" rel="nofollow" >The Register (Jan. 3, 2012)</a></li></ul><p>Here come more technical reports:</p><ul><li>short <a
href="http://pastebin.com/f7jYf5Wd" rel="nofollow" >pastebin document</a>, supposedly by the hackers</li><li><a
href="http://cryptome.org/0005/stratfor-hack.htm" rel="nofollow" >cryptome</a> keeps track of the data being removed from the internet</li><li>a 1MB <a
href="http://bolt.thexfil.es/84e9h!t" rel="nofollow" >report by the hackers</a></li><li>TheTechGerald has <a
href="http://www.thetechherald.com/articles/Report-Analysis-of-the-Stratfor-Password-List" rel="nofollow" >some analysis of the leaked stratfor passwords</a> (Jan. 2, 2012)</li></ul><p>TheTechGerald&#8217;s analysis linked to above got my attention. Unfortunately, a while ago I&#8217;ve subscribed to stratfor&#8217;s &#8220;free intelligence mailing list&#8221;, and was wondering if my account information is now publicly available. I was the most worried about the password I&#8217;ve used to subscribe, because of the risk of using the same password somewhere else.</p><p>Unlike TheTechGerald, I haven&#8217;t used any dictionaries &#8211; just the default configuration of a well-known tool for finding weak passwords. Within a single hour, ~100k passwords were decrypted (~12% of all). Till the end of the day, ~50k more passwords were decrypted (totalling 17.4% of 860k). At this point my password was still safe, and I&#8217;ve found a way to verify that it is not used anywhere else, so I&#8217;ve aborted further decryption.</p><p>There are a few simple conclusions:</p><ul><li><strong>anybody who had a stratfor account must verify that he/she isn&#8217;t using that password anywhere else</strong>, because if 1 PC can get 17% of all the passwords in less than a day, it is only a matter of short time until all the leaked passwords will be decrypted and made publicly available in various &#8220;md5 decryption databases&#8221;</li><li>system owners should run periodic screenings for weak passwords (and implement policies to prevent creating obviously weak passwords from the very beginning)</li><li>md5 is very fast to decrypt/bruteforce &#8211; a much slower hashing function wouldn&#8217;t hurt; also, using a more complex hashing approach, maybe even with a closed-source shared library, could help</li><li>single-factor authentication (password-based) is likely to get replaced with 2-factor authentication in the nearest future</li><li>one may enjoy increased personal data safety by using throw-away passwords in conjunction with antispam mailboxes like spam.la and mailinator.com (at least 1600 users &#8211; 0.186% &#8211; did use these services).</li></ul><p><span
id="more-1801"></span><br
/> Fortunately, the top 10 passwords (by their counts) were exclusively &#8220;throw-away&#8221;, and added up to ~10% of the decrypted passwords. (I&#8217;m not showing any, as that would unnecessarily simplify further decryption &#8211; maybe thetechgerald should have also been more vague about actual passwords.)</p><p>Sooner or later this significant-size corpus of real-life passwords will find its way (after decryption by those who would actually use leaked passwords to gain unauthorized access) into various wordlists and wordlist mutation rules, making it even easier to decrypt any future leaks. This is where 2-factor authentication will, hopefully, come in handy to protect against similar leaks.</p><p>I wonder if I should put up a page &#8220;Check if my password was among those 860k&#8221;, to help people easily identify if they should change theirs &#8211; not even necessarily being a Stratfor subscriber. Unless similar pages/services had already been put up by others.</p><p>It is also unclear what will the future of Stratfor be, taking into account that their website is still dysfunctional.</p><p>It is sad to see Drupal (stratfor.com&#8217;s CMS) involved here. However, I have no idea if their installation was up to date, and if their website was the point of entry. The hacklog suggests that attackers somehow obtained the password of one of the system administrators, and then used it for SSH access, which would save Drupal&#8217;s face (Drupal&#8217;s security record to date was pretty reassuring).</p> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2012/01/09/megahack-of-stratfor.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Good advice: /bin/false is not security</title><link>http://bogdan.org.ua/2011/10/01/good-advice-bin-false-is-not-security.html</link> <comments>http://bogdan.org.ua/2011/10/01/good-advice-bin-false-is-not-security.html#comments</comments> <pubDate>Sat, 01 Oct 2011 21:38:30 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[*nix]]></category> <category><![CDATA[Links]]></category> <category><![CDATA[Security]]></category> <category><![CDATA[false]]></category> <category><![CDATA[nologin]]></category> <category><![CDATA[port forwarding]]></category> <category><![CDATA[ssh]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1706</guid> <description><![CDATA[SSH Security and You &#8211; /bin/false is *not* security.]]></description> <content:encoded><![CDATA[<p><a
href="http://www.semicomplete.com/articles/ssh-security/" rel="nofollow" >SSH Security and You &#8211; /bin/false is *not* security</a>.</p> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2011/10/01/good-advice-bin-false-is-not-security.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Phusion Passenger Apache users guide</title><link>http://bogdan.org.ua/2011/08/14/phusion-passenger-apache-users-guide.html</link> <comments>http://bogdan.org.ua/2011/08/14/phusion-passenger-apache-users-guide.html#comments</comments> <pubDate>Sun, 14 Aug 2011 21:07:40 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[Links]]></category> <category><![CDATA[Notepad]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Apache]]></category> <category><![CDATA[passenger]]></category> <category><![CDATA[phusion]]></category> <category><![CDATA[rails]]></category> <category><![CDATA[ruby]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1669</guid> <description><![CDATA[Phusion Passenger Apache users guide Also as a PDF.]]></description> <content:encoded><![CDATA[<p><a
href="http://www.modrails.com/documentation/Users%20guide%20Apache.html" rel="nofollow" >Phusion Passenger Apache users guide</a></p><p>Also as a <a
href='http://bogdan.org.ua/wp-content/uploads/2011/08/passenger_apache_guide.pdf'>PDF</a>.</p> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2011/08/14/phusion-passenger-apache-users-guide.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>HandBrake profile for Nokia E71 default player</title><link>http://bogdan.org.ua/2011/08/13/handbrake-profile-for-nokia-e71-default-player.html</link> <comments>http://bogdan.org.ua/2011/08/13/handbrake-profile-for-nokia-e71-default-player.html#comments</comments> <pubDate>Sat, 13 Aug 2011 14:41:24 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[Links]]></category> <category><![CDATA[Misc]]></category> <category><![CDATA[Movies]]></category> <category><![CDATA[Notepad]]></category> <category><![CDATA[E71]]></category> <category><![CDATA[handbrake]]></category> <category><![CDATA[nokia]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1661</guid> <description><![CDATA[Inspired by video encoding with handbrake. HandBrake is a very high-quality piece of software &#8211; next time you need recoding something into H.264/MPEG-4 (using MKV or MP4 containers) &#8211; try HandBrake. It easily saturated all my CPU cores &#8211; which I failed to achieve with ffmpeg, which even with threads=8 was only saturating 2 cores. [...]]]></description> <content:encoded><![CDATA[<p>Inspired by <a
href="http://nokia-e71-phone.blogspot.com/2009/03/video-encoding-aach264.html" rel="nofollow" >video encoding with handbrake</a>.</p><p><a
href="http://handbrake.fr/" rel="nofollow" >HandBrake</a> is a very high-quality piece of software &#8211; next time you need recoding something into H.264/MPEG-4 (using MKV or MP4 containers) &#8211; try HandBrake. It easily saturated all my CPU cores &#8211; which I failed to achieve with ffmpeg, which even with threads=8 was only saturating 2 cores.</p><p>Attached to this post are 2 profiles for recoding movies for Nokia E71. The &#8220;_best&#8221; profile has exhaustive motion detection, otherwise is identical to the base profile.<br
/> <a
href='http://bogdan.org.ua/wp-content/uploads/2011/08/E71.plist_.zip'>E71.plist</a><br
/> <a
href='http://bogdan.org.ua/wp-content/uploads/2011/08/E71_best.plist_.zip'>E71_best.plist</a></p><p>Related:</p><ul><li><a
href="https://sites.google.com/site/linuxencoding/x264-ffmpeg-mapping" rel="nofollow" >x264 ffmpeg mapping and options guide</a></li><li><a
href="http://rodrigopolo.com/ffmpeg/cheats.html" rel="nofollow" >ffmpeg audio/video encoding cheat sheet</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2011/08/13/handbrake-profile-for-nokia-e71-default-player.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Using Python in a Java project</title><link>http://bogdan.org.ua/2011/05/17/using-python-in-a-java-project.html</link> <comments>http://bogdan.org.ua/2011/05/17/using-python-in-a-java-project.html#comments</comments> <pubDate>Tue, 17 May 2011 11:33:52 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[Links]]></category> <category><![CDATA[Movies]]></category> <category><![CDATA[Programming]]></category> <category><![CDATA[Python]]></category> <category><![CDATA[Groovy]]></category> <category><![CDATA[java]]></category> <category><![CDATA[Jython]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1589</guid> <description><![CDATA[If you are a Python zealot, and Java doesn&#8217;t feel right, but the project you are working on is a Java project &#8211; try Jython &#8211; Python for the Java platform, compile your python scripts into Java bytecode Groovy &#8211; not Python, but still a scripting language which compiles to jars]]></description> <content:encoded><![CDATA[<p>If you are a Python zealot, and Java <em>doesn&#8217;t feel right</em>, but the project you are working on is a Java project &#8211; try</p><ul><li><a
href="http://www.jython.org/" rel="nofollow" >Jython</a> &#8211; Python for the Java platform, compile your python scripts into Java bytecode</li><li><a
href="http://groovy.codehaus.org/" rel="nofollow" >Groovy</a> &#8211; not Python, but still a scripting language which compiles to jars</li></ul> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2011/05/17/using-python-in-a-java-project.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Academia or life?</title><link>http://bogdan.org.ua/2011/04/16/academia-or-life.html</link> <comments>http://bogdan.org.ua/2011/04/16/academia-or-life.html#comments</comments> <pubDate>Sat, 16 Apr 2011 10:56:42 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[Links]]></category> <category><![CDATA[Science]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1582</guid> <description><![CDATA[Worth reading: Goodbye academia, I get a life.]]></description> <content:encoded><![CDATA[<p>Worth reading: <a
href="http://blog.devicerandom.org/2011/02/18/getting-a-life/" rel="nofollow" >Goodbye academia, I get a life</a>.</p> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2011/04/16/academia-or-life.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Fonts for programming</title><link>http://bogdan.org.ua/2011/04/13/fonts-for-programming.html</link> <comments>http://bogdan.org.ua/2011/04/13/fonts-for-programming.html#comments</comments> <pubDate>Wed, 13 Apr 2011 21:44:29 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[Links]]></category> <category><![CDATA[DejaVu]]></category> <category><![CDATA[fonts]]></category> <category><![CDATA[mono]]></category> <category><![CDATA[Programming]]></category> <category><![CDATA[sans]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1575</guid> <description><![CDATA[My personal favourite for the last 2-3 years had been DejaVu Sans Mono. Check this list of 10 programming fonts &#8211; you may find your love there.]]></description> <content:encoded><![CDATA[<p>My personal favourite for the last 2-3 years had been DejaVu Sans Mono.</p><p>Check this <a
href="http://hivelogic.com/articles/top-10-programming-fonts/" rel="nofollow" >list of 10 programming fonts</a> &#8211; you may find your love there.</p> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2011/04/13/fonts-for-programming.html/feed</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Generate .mood moodbar files for your whole music collection</title><link>http://bogdan.org.ua/2011/04/10/generate-mood-moodbar-files-for-your-whole-music-collection.html</link> <comments>http://bogdan.org.ua/2011/04/10/generate-mood-moodbar-files-for-your-whole-music-collection.html#comments</comments> <pubDate>Sun, 10 Apr 2011 20:21:46 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[*nix]]></category> <category><![CDATA[Links]]></category> <category><![CDATA[Notepad]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[amarok]]></category> <category><![CDATA[moodbar]]></category> <category><![CDATA[music]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1561</guid> <description><![CDATA[Amarok moodbar wiki page has 2 nice scripts to generate .mood files for your whole music collection (to be displayed by amarok when playing). Both scripts should be started from the directory where you keep your music. The .mood files will be generated next to the source music files (in the same directories). You can [...]]]></description> <content:encoded><![CDATA[<p><a
href="http://amarok.kde.org/wiki/Moodbar" rel="nofollow" >Amarok moodbar wiki</a> page has 2 nice scripts to generate .mood files for your whole music collection (to be displayed by amarok when playing).</p><p><span
id="more-1561"></span></p><p>Both scripts should be started from the directory where you keep your music. The .mood files will be generated next to the source music files (in the same directories). You can modify the scripts to have the moods stored to $HOME/.kde/share/apps/amarok/moods/, so as not to clutter your music directories.</p><p>Script for multicore CPUs (will not overwrite existing mood files):</p><div
class="igBar"><span
id="lcode-4"><a
href="#" rel="nofollow"  onclick="javascript:showPlainTxt('code-4'); return false;">PLAIN TEXT</a></span></div><div
class="syntax_hilite"><span
class="langName">CODE:</span><div
id="code-4"><div
class="code"><ol><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">#!/bin/bash</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">NUMCPU=<span
style="color:#CC0000;">"$(grep ^processor /proc/cpuinfo | wc -l)"</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">find . -type f -regextype posix-awk -iregex <span
style="color:#CC0000;">'.*<span
style="color:#000099; font-weight:bold;">\.</span>(mp3|ogg|flac|wma)'</span> | while read i ; do</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp;while <span
style="color:#006600; font-weight:bold;">&#91;</span> `jobs -p | wc -l` -ge $NUMCPU <span
style="color:#006600; font-weight:bold;">&#93;</span> ; do</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sleep <span
style="color:#800000;color:#800000;">0</span>.<span
style="color:#800000;color:#800000;">1</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp;done</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp;TEMP=<span
style="color:#CC0000;">"${i%.*}.mood"</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp;OUTF=`echo <span
style="color:#CC0000;">"$TEMP"</span> | sed <span
style="color:#CC0000;">'s#<span
style="color:#000099; font-weight:bold;">\(</span>.*<span
style="color:#000099; font-weight:bold;">\)</span>/<span
style="color:#000099; font-weight:bold;">\(</span>[^,]*<span
style="color:#000099; font-weight:bold;">\)</span>#<span
style="color:#000099; font-weight:bold;">\1</span>/.<span
style="color:#000099; font-weight:bold;">\2</span>#'</span>`</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp;if <span
style="color:#006600; font-weight:bold;">&#91;</span> ! -e <span
style="color:#CC0000;">"$OUTF"</span> <span
style="color:#006600; font-weight:bold;">&#93;</span> ; then</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;moodbar -o <span
style="color:#CC0000;">"$OUTF"</span> <span
style="color:#CC0000;">"$i"</span> &amp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp;fi</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">done</div></li></ol></div></div></div><p></p><p>Script for single-threaded moods generation (will only overwrite the last-generated mood file from a previous run):</p><div
class="igBar"><span
id="lcode-5"><a
href="#" rel="nofollow"  onclick="javascript:showPlainTxt('code-5'); return false;">PLAIN TEXT</a></span></div><div
class="syntax_hilite"><span
class="langName">CODE:</span><div
id="code-5"><div
class="code"><ol><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">#!/bin/bash</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">DIR=$<span
style="color:#006600; font-weight:bold;">&#123;</span><span
style="color:#800000;color:#800000;">1</span>:-.<span
style="color:#006600; font-weight:bold;">&#125;</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">LAST=.<span
style="">moodbar</span>-lastreadsong</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">C_RET=<span
style="color:#800000;color:#800000;">0</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">control_c<span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#006600; font-weight:bold;">&#41;</span>&nbsp; &nbsp; &nbsp; &nbsp; # run if user hits control-c</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#006600; font-weight:bold;">&#123;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; echo <span
style="color:#CC0000;">"$1"</span>&gt; <span
style="color:#CC0000;">"$LAST"</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; echo <span
style="color:#CC0000;">"Exiting..."</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; exit</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#006600; font-weight:bold;">&#125;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">if <span
style="color:#006600; font-weight:bold;">&#91;</span> -e <span
style="color:#CC0000;">"$LAST"</span> <span
style="color:#006600; font-weight:bold;">&#93;</span>; then</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; read filetodelete &lt;<span
style="color:#CC0000;">"$LAST"</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; rm <span
style="color:#CC0000;">"$filetodelete"</span> <span
style="color:#CC0000;">"$LAST"</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">fi</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">exec <span
style="color:#800000;color:#800000;">9</span>&lt;&lt;<span
style="color:#006600; font-weight:bold;">&#40;</span>find <span
style="color:#CC0000;">"$DIR"</span> -type f -regextype posix-awk -iregex <span
style="color:#CC0000;">'.*<span
style="color:#000099; font-weight:bold;">\.</span>(mp3|ogg|flac|wma)'</span><span
style="color:#006600; font-weight:bold;">&#41;</span> # you may need to add m4a and mp4</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">while read i</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">do</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; TEMP=<span
style="color:#CC0000;">"${i%.*}.mood"</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; OUTF=`echo <span
style="color:#CC0000;">"$TEMP"</span> | sed <span
style="color:#CC0000;">'s#<span
style="color:#000099; font-weight:bold;">\(</span>.*<span
style="color:#000099; font-weight:bold;">\)</span>/<span
style="color:#000099; font-weight:bold;">\(</span>[^,]*<span
style="color:#000099; font-weight:bold;">\)</span>#<span
style="color:#000099; font-weight:bold;">\1</span>/.<span
style="color:#000099; font-weight:bold;">\2</span>#'</span>`</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; trap <span
style="color:#CC0000;">'control_c &quot;$OUTF&quot;'</span> INT</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; if <span
style="color:#006600; font-weight:bold;">&#91;</span> ! -e <span
style="color:#CC0000;">"$OUTF"</span> <span
style="color:#006600; font-weight:bold;">&#93;</span> || <span
style="color:#006600; font-weight:bold;">&#91;</span> <span
style="color:#CC0000;">"$i"</span> -nt <span
style="color:#CC0000;">"$OUTF"</span> <span
style="color:#006600; font-weight:bold;">&#93;</span>; then</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; moodbar -o <span
style="color:#CC0000;">"$OUTF"</span> <span
style="color:#CC0000;">"$i"</span> || <span
style="color:#006600; font-weight:bold;">&#123;</span> C_RET=<span
style="color:#800000;color:#800000;">1</span>; echo <span
style="color:#CC0000;">"An error occurred!"</span>&gt;&amp;<span
style="color:#800000;color:#800000;">2</span>; <span
style="color:#006600; font-weight:bold;">&#125;</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; fi</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">done &lt;&amp;<span
style="color:#800000;color:#800000;">9</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">exec <span
style="color:#800000;color:#800000;">9</span>&lt;&amp;-</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">exit $C_RET</div></li></ol></div></div></div><p></p><p>That same page has a link to an older, somewhat more polished <a
href="http://forum.kde.org/viewtopic.php?f=119&#038;t=84811" rel="nofollow" >ruby script</a> for the same task. It requires a running instance of Amarok, and uses it's media collection to find music files and create mood files for them. This script can potentially (after a little editing) store .mood files either with the music or to the $HOME/.kde/... path mentioned above. It is for an older version of Amarok, and thus is not likely to work with e.g. Amarok 2.4</p><div
class="igBar"><span
id="lruby-6"><a
href="#" rel="nofollow"  onclick="javascript:showPlainTxt('ruby-6'); return false;">PLAIN TEXT</a></span></div><div
class="syntax_hilite"><span
class="langName">RUBY:</span><div
id="ruby-6"><div
class="ruby"><ol><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#008000; font-style:italic;">#!/usr/bin/ruby</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#008000; font-style:italic;"># Simple moodbar file management utility by Joe Rabinoff</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#008000; font-style:italic;"># This is also my first ever ruby script so bear with me</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">$moodbar_folder = <span
style="color:#996600;">"#{ENV['HOME']}/.kde/share/apps/amarok/moods/"</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#9966CC; font-weight:bold;">def</span> usage<span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span
style="color:#CC0066; font-weight:bold;">print</span> <span
style="color:#996600;">"This is the moodbar file management utility<span
style="color:#000099;">\n</span>"</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span
style="color:#CC0066; font-weight:bold;">print</span> <span
style="color:#996600;">"<span
style="color:#000099;">\n</span>"</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span
style="color:#CC0066; font-weight:bold;">print</span> <span
style="color:#996600;">"Usage is:<span
style="color:#000099;">\n</span>"</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span
style="color:#CC0066; font-weight:bold;">print</span> <span
style="color:#996600;">"&nbsp; &nbsp;moodbar_util.rb -rename&nbsp; &nbsp; Rename mood files"</span> \</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+ <span
style="color:#996600;">" from any old naming scheme to the current one<span
style="color:#000099;">\n</span>"</span> \</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; + <span
style="color:#996600;">"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (not applicable when mood"</span> \</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+ <span
style="color:#996600;">" files are stored with music)<span
style="color:#000099;">\n</span>"</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span
style="color:#CC0066; font-weight:bold;">print</span> <span
style="color:#996600;">"&nbsp; &nbsp;moodbar_util.rb -calcall&nbsp; &nbsp;Calculate all un-calculated"</span> \</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + <span
style="color:#996600;">" mood files<span
style="color:#000099;">\n</span>"</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span
style="color:#CC0066; font-weight:bold;">exit</span><span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#006666;color:#800000;">1</span><span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#9966CC; font-weight:bold;">end</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#9966CC; font-weight:bold;">def</span> check_amarok_running<span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; result = <span
style="color:#996600;">`dcop 'amarok*'`</span>.<span
style="color:#CC0066; font-weight:bold;">split</span><span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#996600;">"<span
style="color:#000099;">\n</span>"</span><span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span
style="color:#0000FF; font-weight:bold;">return</span> <span
style="color:#006600; font-weight:bold;">&#40;</span>result.<span
style="color:#9900CC;">length</span>&gt; <span
style="color:#006666;color:#800000;">0</span><span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#9966CC; font-weight:bold;">end</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#9966CC; font-weight:bold;">def</span> get_devices<span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; result = <span
style="color:#996600;">`dcop amarok collection query 'SELECT id, lastmountpoint FROM devices;'`</span>.<span
style="color:#CC0066; font-weight:bold;">split</span><span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#996600;">"<span
style="color:#000099;">\n</span>"</span><span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; ret = Hash.<span
style="color:#9900CC;">new</span><span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; result.<span
style="color:#9900CC;">each_index</span> <span
style="color:#9966CC; font-weight:bold;">do</span> |i|</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; ret<span
style="color:#006600; font-weight:bold;">&#91;</span>result<span
style="color:#006600; font-weight:bold;">&#91;</span>i<span
style="color:#006600; font-weight:bold;">&#93;</span>.<span
style="color:#9900CC;">to_i</span><span
style="color:#006600; font-weight:bold;">&#93;</span> = result<span
style="color:#006600; font-weight:bold;">&#91;</span>i+<span
style="color:#006666;color:#800000;">1</span><span
style="color:#006600; font-weight:bold;">&#93;</span> <span
style="color:#9966CC; font-weight:bold;">if</span> i % <span
style="color:#006666;color:#800000;">2</span> == <span
style="color:#006666;color:#800000;">0</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span
style="color:#9966CC; font-weight:bold;">end</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span
style="color:#0000FF; font-weight:bold;">return</span> ret</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#9966CC; font-weight:bold;">end</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#9966CC; font-weight:bold;">def</span> mood_name<span
style="color:#006600; font-weight:bold;">&#40;</span>url, deviceid<span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; ret = url.<span
style="color:#CC0066; font-weight:bold;">gsub</span><span
style="color:#006600; font-weight:bold;">&#40;</span>/\//, ','<span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span
style="color:#0000FF; font-weight:bold;">return</span> deviceid.<span
style="color:#9900CC;">to_s</span> + <span
style="color:#996600;">","</span> + ret</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#9966CC; font-weight:bold;">end</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#9966CC; font-weight:bold;">def</span> rename<span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#006600; font-weight:bold;">&#41;</span>&nbsp; &nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span
style="color:#CC0066; font-weight:bold;">print</span> <span
style="color:#996600;">"Renaming mood files from outdated naming schemes...<span
style="color:#000099;">\n</span>"</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span
style="color:#008000; font-style:italic;"># As far as I can tell, the best way to do this is just select all</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span
style="color:#008000; font-style:italic;"># tracks, check the old possible moodbar names, and rename them</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; tracks = <span
style="color:#996600;">`dcop amarok collection query 'SELECT url, deviceid FROM tags;'`</span>.<span
style="color:#CC0066; font-weight:bold;">split</span><span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#996600;">"<span
style="color:#000099;">\n</span>"</span><span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; devices = get_devices</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span
style="color:#006666;color:#800000;">0</span>.<span
style="color:#9900CC;">step</span><span
style="color:#006600; font-weight:bold;">&#40;</span>tracks.<span
style="color:#9900CC;">length</span>-<span
style="color:#006666;color:#800000;">1</span>, <span
style="color:#006666;color:#800000;">2</span><span
style="color:#006600; font-weight:bold;">&#41;</span> <span
style="color:#9966CC; font-weight:bold;">do</span> |i|</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; url&nbsp; &nbsp; &nbsp; = tracks<span
style="color:#006600; font-weight:bold;">&#91;</span>i<span
style="color:#006600; font-weight:bold;">&#93;</span>.<span
style="color:#CC0066; font-weight:bold;">sub</span><span
style="color:#006600; font-weight:bold;">&#40;</span>/\.<span
style="color:#006600; font-weight:bold;">&#91;</span>^\.<span
style="color:#006600; font-weight:bold;">&#93;</span>*$/, '.<span
style="color:#9900CC;">mood</span>'<span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; deviceid = tracks<span
style="color:#006600; font-weight:bold;">&#91;</span>i+<span
style="color:#006666;color:#800000;">1</span><span
style="color:#006600; font-weight:bold;">&#93;</span>.<span
style="color:#9900CC;">to_i</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; path = url.<span
style="color:#CC0066; font-weight:bold;">sub</span><span
style="color:#006600; font-weight:bold;">&#40;</span>/\./, ''<span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span
style="color:#9966CC; font-weight:bold;">if</span> devices.<span
style="color:#9900CC;">has_key</span>?<span
style="color:#006600; font-weight:bold;">&#40;</span>deviceid<span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp;path = devices<span
style="color:#006600; font-weight:bold;">&#91;</span>deviceid<span
style="color:#006600; font-weight:bold;">&#93;</span> + path</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span
style="color:#9966CC; font-weight:bold;">end</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; moodfile&nbsp; = $moodbar_folder + mood_name<span
style="color:#006600; font-weight:bold;">&#40;</span>url, deviceid<span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; moodfile1 = $moodbar_folder + path.<span
style="color:#CC0066; font-weight:bold;">gsub</span><span
style="color:#006600; font-weight:bold;">&#40;</span>/\//, ','<span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span
style="color:#9966CC; font-weight:bold;">next</span> <span
style="color:#9966CC; font-weight:bold;">if</span> FileTest.<span
style="color:#9900CC;">exists</span>?<span
style="color:#006600; font-weight:bold;">&#40;</span>moodfile<span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span
style="color:#9966CC; font-weight:bold;">if</span> FileTest.<span
style="color:#9900CC;">exists</span>?<span
style="color:#006600; font-weight:bold;">&#40;</span>moodfile1<span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color:#CC0066; font-weight:bold;">system</span><span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#996600;">"mv"</span>, <span
style="color:#996600;">"-f"</span>, moodfile1, moodfile<span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color:#CC0066; font-weight:bold;">print</span> <span
style="color:#996600;">"Moved "</span>, moodfile1, <span
style="color:#996600;">" to "</span>, moodfile, <span
style="color:#996600;">"<span
style="color:#000099;">\n</span>"</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span
style="color:#9966CC; font-weight:bold;">end</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span
style="color:#9966CC; font-weight:bold;">end</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#9966CC; font-weight:bold;">end</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#9966CC; font-weight:bold;">def</span> calcall<span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span
style="color:#CC0066; font-weight:bold;">print</span> <span
style="color:#996600;">"Calculating all nonexisting moodbars...<span
style="color:#000099;">\n</span><span
style="color:#000099;">\n</span>"</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; tracks = <span
style="color:#996600;">`dcop amarok collection query 'SELECT url, deviceid FROM tags;'`</span>.<span
style="color:#CC0066; font-weight:bold;">split</span><span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#996600;">"<span
style="color:#000099;">\n</span>"</span><span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; devices = get_devices</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; withMusic = <span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#996600;">`dcop amarok script readConfig MoodsWithMusic`</span>.<span
style="color:#CC0066; font-weight:bold;">chomp</span> == <span
style="color:#996600;">"true"</span><span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span
style="color:#006666;color:#800000;">0</span>.<span
style="color:#9900CC;">step</span><span
style="color:#006600; font-weight:bold;">&#40;</span>tracks.<span
style="color:#9900CC;">length</span>-<span
style="color:#006666;color:#800000;">1</span>, <span
style="color:#006666;color:#800000;">2</span><span
style="color:#006600; font-weight:bold;">&#41;</span> <span
style="color:#9966CC; font-weight:bold;">do</span> |i|</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; url&nbsp; &nbsp; &nbsp; = tracks<span
style="color:#006600; font-weight:bold;">&#91;</span>i<span
style="color:#006600; font-weight:bold;">&#93;</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; deviceid = tracks<span
style="color:#006600; font-weight:bold;">&#91;</span>i+<span
style="color:#006666;color:#800000;">1</span><span
style="color:#006600; font-weight:bold;">&#93;</span>.<span
style="color:#9900CC;">to_i</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; moodfile = <span
style="color:#996600;">""</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; songpath = url.<span
style="color:#CC0066; font-weight:bold;">sub</span><span
style="color:#006600; font-weight:bold;">&#40;</span>/\./, ''<span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span
style="color:#9966CC; font-weight:bold;">if</span> devices.<span
style="color:#9900CC;">has_key</span>?<span
style="color:#006600; font-weight:bold;">&#40;</span>deviceid<span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; songpath = devices<span
style="color:#006600; font-weight:bold;">&#91;</span>deviceid<span
style="color:#006600; font-weight:bold;">&#93;</span> + songpath</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span
style="color:#9966CC; font-weight:bold;">end</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span
style="color:#9966CC; font-weight:bold;">if</span> withMusic</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; moodfile = songpath.<span
style="color:#CC0066; font-weight:bold;">sub</span><span
style="color:#006600; font-weight:bold;">&#40;</span>/\.<span
style="color:#006600; font-weight:bold;">&#91;</span>^\.<span
style="color:#006600; font-weight:bold;">&#93;</span>*$/, '.<span
style="color:#9900CC;">mood</span>'<span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; moodfile = File.<span
style="color:#9900CC;">dirname</span><span
style="color:#006600; font-weight:bold;">&#40;</span>moodfile<span
style="color:#006600; font-weight:bold;">&#41;</span> + <span
style="color:#996600;">"/."</span> + File.<span
style="color:#9900CC;">basename</span><span
style="color:#006600; font-weight:bold;">&#40;</span>moodfile<span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span
style="color:#9966CC; font-weight:bold;">else</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; moodfile = $moodbar_folder \</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + mood_name<span
style="color:#006600; font-weight:bold;">&#40;</span>url.<span
style="color:#CC0066; font-weight:bold;">sub</span><span
style="color:#006600; font-weight:bold;">&#40;</span>/\.<span
style="color:#006600; font-weight:bold;">&#91;</span>^\.<span
style="color:#006600; font-weight:bold;">&#93;</span>*$/, '.<span
style="color:#9900CC;">mood</span>'<span
style="color:#006600; font-weight:bold;">&#41;</span>, deviceid<span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span
style="color:#9966CC; font-weight:bold;">end</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span
style="color:#9966CC; font-weight:bold;">next</span> <span
style="color:#9966CC; font-weight:bold;">if</span> FileTest.<span
style="color:#9900CC;">exists</span>?<span
style="color:#006600; font-weight:bold;">&#40;</span>moodfile<span
style="color:#006600; font-weight:bold;">&#41;</span> &amp;&amp; FileTest.<span
style="color:#9900CC;">size</span><span
style="color:#006600; font-weight:bold;">&#40;</span>moodfile<span
style="color:#006600; font-weight:bold;">&#41;</span>&gt; <span
style="color:#006666;color:#800000;">0</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span
style="color:#9966CC; font-weight:bold;">next</span> <span
style="color:#9966CC; font-weight:bold;">unless</span> FileTest.<span
style="color:#9900CC;">exists</span>?<span
style="color:#006600; font-weight:bold;">&#40;</span>songpath<span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span
style="color:#CC0066; font-weight:bold;">print</span> <span
style="color:#996600;">"Saving moodbar for "</span>, songpath, <span
style="color:#996600;">"<span
style="color:#000099;">\n</span>"</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span
style="color:#CC0066; font-weight:bold;">print</span> <span
style="color:#996600;">"&nbsp; &nbsp;to file "</span>, moodfile, <span
style="color:#996600;">"<span
style="color:#000099;">\n</span>"</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span
style="color:#CC0066; font-weight:bold;">system</span><span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#996600;">"moodbar"</span>, <span
style="color:#996600;">"-o"</span>, moodfile, songpath<span
style="color:#006600; font-weight:bold;">&#41;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span
style="color:#CC0066; font-weight:bold;">print</span> <span
style="color:#996600;">"<span
style="color:#000099;">\n</span>"</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span
style="color:#9966CC; font-weight:bold;">end</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#9966CC; font-weight:bold;">end</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">$mode = ARGV<span
style="color:#006600; font-weight:bold;">&#91;</span><span
style="color:#006666;color:#800000;">0</span><span
style="color:#006600; font-weight:bold;">&#93;</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#9966CC; font-weight:bold;">if</span> !check_amarok_running</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span
style="color:#CC0066; font-weight:bold;">print</span> <span
style="color:#996600;">"Amarok is not running!&nbsp; Please start Amarok and re-run "</span> \</div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color:#996600;">"this script.<span
style="color:#000099;">\n</span>"</span></div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#9966CC; font-weight:bold;">end</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#9966CC; font-weight:bold;">if</span> $mode == <span
style="color:#996600;">"-rename"</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; rename</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#9966CC; font-weight:bold;">elsif</span> $mode == <span
style="color:#996600;">"-calcall"</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; calcall</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#9966CC; font-weight:bold;">else</span></div></li><li
style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; usage</div></li><li
style="font-weight: bold;color:#26536A;"><div
style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span
style="color:#9966CC; font-weight:bold;">end</span></div></li></ol></div></div></div><p></p> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2011/04/10/generate-mood-moodbar-files-for-your-whole-music-collection.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Debunking the widespread myth of 2^32=4GB being the architectural limit</title><link>http://bogdan.org.ua/2011/04/10/debunking-widespread-myth-of-2-32-4gb-architectural-limit.html</link> <comments>http://bogdan.org.ua/2011/04/10/debunking-widespread-myth-of-2-32-4gb-architectural-limit.html#comments</comments> <pubDate>Sun, 10 Apr 2011 13:10:54 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[Hardware]]></category> <category><![CDATA[Links]]></category> <category><![CDATA[Misc]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[32bit]]></category> <category><![CDATA[4GB]]></category> <category><![CDATA[myth]]></category> <category><![CDATA[PAE]]></category> <category><![CDATA[windows]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1555</guid> <description><![CDATA[Quite a number of people are aware of the PAE which can extend the addressable space from 32bit up to 36-48-52bit (depending on the implementation; as I understand, Windows PAE extends to 36 bits, or 64GB of addressable space). However, overwhelming numbers of internet pages continue insisting that a not-more-than-4GB limit for the 32bit Windows [...]]]></description> <content:encoded><![CDATA[<p>Quite a number of people are aware of the <abbr
title="Page Address Extension">PAE</abbr> which can extend the addressable space from 32bit up to 36-48-52bit (depending on the implementation; as I understand, Windows PAE extends to 36 bits, or 64GB of addressable space). However, overwhelming numbers of internet pages continue insisting that a not-more-than-4GB limit for the 32bit Windows is the consequence of <em>2^32 = 4GB architectural limit</em>.</p><p>There is an <a
href="http://www.geoffchappell.com/viewer.htm?doc=notes/windows/license/memory.htm" rel="nofollow" >excellent, in-depth, well-argumented article by Geoff Chappell</a> on the issue. Highly recommended in its entirety to those who want a complete understanding (additional side-reading and facts verification might be necessary).</p><p>A single citation to get you started:</p><blockquote><p>There is already on the Internet and elsewhere an awful lot of rubbish to read about this question. Hardly any of it would be worth citing even if I didn’t want to spare the authors the embarrassment. A surprising number of people who claim some sort of attention as expert commentators would have you believe that using more than 4GB of memory is mathematically impossible for any 32-bit operating system because 2 to the power of 32 is 4G and a 32-bit register can’t form an address above 4GB. If nothing else, these experts don’t know enough history: 2 to the 16 is only 64K and yet the wealth of Microsoft is founded on a 16-bit operating system that from its very first version was designed to use 640KB of RAM plus other memory in a physical address space of 1MB. Some remember this history and add seemingly plausible qualifications that exceeding 4GB is possible only at the price of nasty hacks that require everyone—well, all programmers—to jump through hoops. Fortunately, Intel’s processors are a lot more advanced than the 8086 from all those years ago.</p></blockquote><p>P.S. Unfortunately, patching the kernel won't help make Windows XP see more than 4GB RAM: even though the kernel itself does support more RAM (with PAE), starting with SP2 the <abbr
title="Hardware Abstraction Layer">HAL</abbr> was modified in a way prohibiting access to any RAM beyond 4GB. Patching may only be suggested to devoted geeks with Vista's and 7's.</p> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2011/04/10/debunking-widespread-myth-of-2-32-4gb-architectural-limit.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Amazonia! 6462 human microarray datasets</title><link>http://bogdan.org.ua/2011/03/06/amazonia-6462-human-microarray-datasets.html</link> <comments>http://bogdan.org.ua/2011/03/06/amazonia-6462-human-microarray-datasets.html#comments</comments> <pubDate>Sun, 06 Mar 2011 19:18:51 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[Bioinformatics]]></category> <category><![CDATA[Links]]></category> <category><![CDATA[Science]]></category> <category><![CDATA[amazonia]]></category> <category><![CDATA[data]]></category> <category><![CDATA[expression]]></category> <category><![CDATA[microarray]]></category> <category><![CDATA[stem cells]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1460</guid> <description><![CDATA[Amazonia! - explore the jungle of microarray results Paradoxically, the tremendous downpour of microarray results prevents a simple use of expression data. Therefore, we propose a thematic entry to public transcriptomes: you may for instance query a gene on a "Stem Cells page", where you will see the expression of your favorite gene across selected [...]]]></description> <content:encoded><![CDATA[<p><a
href="http://amazonia.transcriptome.eu/" rel="nofollow" ><img
src="http://bogdan.org.ua/wp-content/uploads/2011/03/AmaZoniaLogo.png" alt="Amazonia!" title="Amazonia!" width="357" height="100" class="alignleft size-full wp-image-1463" /></a><a
href="http://amazonia.transcriptome.eu/" rel="nofollow" >Amazonia! - explore the jungle of microarray results</a></p><blockquote><p>Paradoxically, the tremendous downpour of microarray results prevents a simple use of expression data. Therefore, we propose a thematic entry to public transcriptomes: you may for instance query a gene on a "Stem Cells page", where you will see the expression of your favorite gene across selected microarray experiments related to stem cell biology. This selection of samples can be customized at will among the 6462 samples currently present in the database.</p></blockquote><blockquote><p>Every transcriptome study results in the identification of lists of genes relevant to a given biological condition. In order to include this valuable information in any new query in the Amazonia! database, we indicate for each gene in which lists it is included. This is a straightforward and efficient way to synthesize hundreds of microarray publications.</p><p>A special feature of Amazonia! is the field of human stem cells, notably embryonic stem cells.</p></blockquote> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2011/03/06/amazonia-6462-human-microarray-datasets.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Introduction to Python for bioinformatics</title><link>http://bogdan.org.ua/2011/02/25/introduction-to-python-for-bioinformatics.html</link> <comments>http://bogdan.org.ua/2011/02/25/introduction-to-python-for-bioinformatics.html#comments</comments> <pubDate>Fri, 25 Feb 2011 12:03:55 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[Bioinformatics]]></category> <category><![CDATA[Links]]></category> <category><![CDATA[Python]]></category> <category><![CDATA[Software]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1451</guid> <description><![CDATA[This overview presentation is two years old, but still a highly valuable resource: modules and tools mentioned are alive and useful. I think this is the second presentation by Giovanni I'm embedding (first one being about GNU/make for bioinformatics). Introduction to python for bioinformatics]]></description> <content:encoded><![CDATA[<p>This overview presentation is two years old, but still a highly valuable resource: modules and tools mentioned are alive and useful.<br
/> I think this is the second presentation by Giovanni I'm embedding (first one being about GNU/make for bioinformatics).</p><div
style="width:425px" id="__ss_1320208"><strong
style="display:block;margin:12px 0 4px"><a
href="http://www.slideshare.net/giovanni/introduction-to-python-for-bioinformatics" rel="nofollow"  title="Introduction to python for bioinformatics">Introduction to python for bioinformatics</a></strong><object
id="__sse1320208" width="425" height="355"><param
name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=introduction-090421044444-phpapp02&#038;stripped_title=introduction-to-python-for-bioinformatics&#038;userName=giovanni" /><param
name="allowFullScreen" value="true"/><param
name="allowScriptAccess" value="always"/><embed
name="__sse1320208" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=introduction-090421044444-phpapp02&#038;stripped_title=introduction-to-python-for-bioinformatics&#038;userName=giovanni" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2011/02/25/introduction-to-python-for-bioinformatics.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>MySQL as NoSQL with HandlerSocket: 750000 qps</title><link>http://bogdan.org.ua/2011/01/25/mysql-as-nosql-with-handlersocket-750000-qps.html</link> <comments>http://bogdan.org.ua/2011/01/25/mysql-as-nosql-with-handlersocket-750000-qps.html#comments</comments> <pubDate>Tue, 25 Jan 2011 16:36:11 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[Links]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[HandlerSocket]]></category> <category><![CDATA[mysql]]></category> <category><![CDATA[NoSQL]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1348</guid> <description><![CDATA[HandlerSocket provides a direct access to InnoDB storage, bypassing SQL interpretation layer. With in-RAM data, it may raise MySQL performance to 750000 queries per second.]]></description> <content:encoded><![CDATA[<p>HandlerSocket provides a direct access to InnoDB storage, bypassing SQL interpretation layer. With in-RAM data, it may <a
href="http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-nosql-story-for.html" rel="nofollow" >raise MySQL performance to 750000 queries per second</a>.</p><p><a
href="http://bogdan.org.ua/wp-content/uploads/2011/01/mysql_handlersocket.png"><img
src="http://bogdan.org.ua/wp-content/uploads/2011/01/mysql_handlersocket-500x299.png" alt="" title="mysql_handlersocket" width="500" height="299" class="alignleft size-medium wp-image-1351" /></a></p> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2011/01/25/mysql-as-nosql-with-handlersocket-750000-qps.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>MongoDB is web-scale</title><link>http://bogdan.org.ua/2011/01/25/mongodb-is-web-scale.html</link> <comments>http://bogdan.org.ua/2011/01/25/mongodb-is-web-scale.html#comments</comments> <pubDate>Mon, 24 Jan 2011 22:58:41 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[Links]]></category> <category><![CDATA[Misc]]></category> <category><![CDATA[MongoDB]]></category> <category><![CDATA[mysql]]></category> <category><![CDATA[NoSQL]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1344</guid> <description><![CDATA[Disclaimer: don't take this video seriously.]]></description> <content:encoded><![CDATA[<p>Disclaimer: don't take this video seriously.</p><p><object
width="480" height="390"><param
name="movie" value="http://www.xtranormal.com/site_media/players/jwplayer.swf"></param><param
name="allowFullScreen" value="true"></param><param
name="allowscriptaccess" value="always"></param><param
name="flashvars"value="height=390&#038;width=480&#038;file=http://newvideos.xtranormal.com/web_final_lo/574b3910-afc9-11df-914b-003048d69c21_27_web_final_lo_web_finallo-flv.flv&#038;image=http://newvideos.xtranormal.com/web_final_lo/574b3910-afc9-11df-914b-003048d69c21_27_web_final_lo_poster.jpg&#038;link=http://www.xtranormal.com/watch/6995033&#038;searchbar=false&#038;autostart=false"/><embed
src="http://www.xtranormal.com/site_media/players/jwplayer.swf" width="480" height="390" allowscriptaccess="always" allowfullscreen="true" flashvars="height=390&#038;width=480&#038;file=http://newvideos.xtranormal.com/web_final_lo/574b3910-afc9-11df-914b-003048d69c21_27_web_final_lo_web_finallo-flv.flv&#038;image=http://newvideos.xtranormal.com/web_final_lo/574b3910-afc9-11df-914b-003048d69c21_27_web_final_lo_poster.jpg&#038;link=http://www.xtranormal.com/watch/6995033&#038;searchbar=false&#038;autostart=false"></embed></object><object
width="480" height="390"><param
name="movie" value="http://www.xtranormal.com/site_media/players/embedded-xnl-stats.swf"></param><param
name="allowFullScreen" value="true"></param><param
name="allowscriptaccess" value="always"></param><embed
src="http://www.xtranormal.com/site_media/players/embedded-xnl-stats.swf" width="1" height="1" allowscriptaccess="always"></embed></object></p> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2011/01/25/mongodb-is-web-scale.html/feed</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Light web-based collaborative project management tools</title><link>http://bogdan.org.ua/2011/01/10/light-web-based-collaborative-project-management-tools.html</link> <comments>http://bogdan.org.ua/2011/01/10/light-web-based-collaborative-project-management-tools.html#comments</comments> <pubDate>Mon, 10 Jan 2011 15:47:55 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[Links]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[basecamp]]></category> <category><![CDATA[codebase]]></category> <category><![CDATA[collaborative]]></category> <category><![CDATA[collabtive]]></category> <category><![CDATA[egroupware]]></category> <category><![CDATA[ofuz]]></category> <category><![CDATA[open atrium]]></category> <category><![CDATA[project management]]></category> <category><![CDATA[project-open]]></category> <category><![CDATA[projectfork]]></category> <category><![CDATA[projectpier]]></category> <category><![CDATA[railscollab]]></category> <category><![CDATA[redmine]]></category> <category><![CDATA[teambox]]></category> <category><![CDATA[todoist]]></category> <category><![CDATA[web-based]]></category> <category><![CDATA[wedoist]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1248</guid> <description><![CDATA[Updated on the 5th of March, 2010 (added flowdock and pivotal tracker, and also personal experience using a few of the previously described tools). Back in 2007 I wrote a brief review of web-based project management tools. After that, I started using dotProject for personal projects management. I'm still using it, but for collaborative project [...]]]></description> <content:encoded><![CDATA[<p><ins
datetime="2011-03-05T13:19:28+00:00">Updated</ins> on the 5th of March, 2010 (added flowdock and pivotal tracker, and also personal experience using a few of the previously described tools).</p><p>Back in 2007 I wrote a <a
href="http://bogdan.org.ua/2007/01/21/project-management-software.html">brief review of web-based project management tools</a>. After that, I <a
href="http://bogdan.org.ua/2007/02/02/dotproject-first-impressions.html">started using dotProject</a> for personal projects management. I'm still using it, but for collaborative project management, communication, and tasks/milestones tracking dotProject isn't perfect.</p><p>I need a tool, which is</p><ul><li>collaborative</li><li>web-based (to allow effective collaboration)</li><li>preferably free</li><li>has concise per-project activity log</li><li>minimal required functionality: tasks, milestones, files, and status updates.</li></ul><p>After trying a few things, our small team settled for now on using github + <del
datetime="2011-08-12T12:41:21+00:00">pivotaltracker</del> jira + confluence + flowdock.</p><p>Here's a full list of tools briefly reviewed. I've been already using ProjectPier, so I'll start with this software.<br
/> <span
id="more-1248"></span><br
/> <a
href="http://www.projectpier.org/" rel="nofollow" >ProjectPier</a> (used myself)</p><ul><li>dashboard: all events log</li><li>interface similar to Basecamp; themable/skinnable</li><li>all the basic features are there (milestones, tasks, task lists, messages, files)</li><li>modular (functionality is in plugins)</li><li>easy to install (requires PHP and MySQL)</li><li>is being maintained/developed (maybe slowly, but that doesn't mean much)</li></ul><p>Not much to add. Simple, functional, worked good for a 1-person "team" (that is, for personal projects management). Have no idea how it scales to more people.</p><p><a
href="http://collabtive.o-dyn.de/" rel="nofollow" >Collabtive</a></p><ul><li>desktop: just an overview, no log of events; project view has 'activities' log</li><li>[too much?] eye-candy, JS-reach default interface (themable/skinnable)</li><li>projects, tasks, milestones, messages, files</li><li>calendar, time tracking</li><li>is being maintained/developed</li></ul><p><a
href="http://openatrium.com/" rel="nofollow" >Open Atrium</a></p><ul><li>Drupal-based, thus probably the most flexible (but requires time investments to change functionality)</li><li>6 features: blog, wiki, calendar, to-do list, shoutbox, and a dashboard to manage it all</li><li>has "recent activity" log</li><li>issues tracking</li><li>I guess it is heavier than others in use patterns: requires more clicking and typing (as it has more features), and there seem to be no concepts of milestones and projects - just tasks</li></ul><p><a
href="http://projectfork.net/" rel="nofollow" >Projectfork</a></p><ul><li>possibly Joomla-based</li><li>free, with commercial add-ons, themes, and maybe support</li><li>projects, milestones, tasks with priorities, files</li><li>calendar, discussion board, time tracking</li><li>activity stream (premium add-on)</li></ul><p><a
href="http://www.egroupware.org/" rel="nofollow" >EGroupware</a></p><ul><li>hosted, commercial</li><li>free community version is available for download</li><li>projects, tasks, sub-tasks, files</li><li>address book, calendar, chat, issue tracking system, time tracking</li><li>knowledge base, wiki</li><li>news, polls</li><li>interface seems very responsive (JS-reach)</li><li>large, feature-reach: might be an overkill where basecamp would do just fine</li><li>actively developed</li></ul><p><a
href="http://www.project-open.com/" rel="nofollow" >]project-open[</a></p><ul><li>not reviewed: seems even more feature-reach (complicated) than EGroupware</li></ul><p><a
href="http://www.redmine.org/" rel="nofollow" >Redmine</a></p><ul><li>doesn't seem to use "milestone" and "task" concepts</li><li>issue tracking, gantt charts, calendar, time tracking</li><li>wiki, files, forums, roadmap (similar to trac)</li><li>repository browser (among others, git and svn are supported)</li><li>is maintained/developed</li></ul><p><a
href="http://www.codebasehq.com/" rel="nofollow" >Codebase</a></p><ul><li>non-free</li><li>issue tracker for git/mercurial/others with project management features</li><li>wiki, time tracking, milestones, files</li></ul><p><a
href="http://www.ofuz.com/opensource/" rel="nofollow" >Ofuz</a></p><ul><li>paid hosted version (free up to 5 projects), free version available for download</li><li>contacts, time tracking, invoices</li><li>projects, tasks, documents, files</li><li>tight email integration (e.g. continue discussions by email, with replies logged to Ofuz)</li></ul><p><a
href="http://rubyforge.org/projects/railscollab/" rel="nofollow" >RailsCollab</a></p><ul><li>activecollab-inspired, ProjectPier-based Ruby software</li><li>interface (and features) very similar to ProjectPier</li><li>tasks and task lists, milestones, files, messages</li><li>time-tracking</li><li>development/maintenance stalled in Feb 2010</li></ul><p><a
href="https://teambox.com/?rf=135452" rel="nofollow" >Teambox</a> (used myself)</p><ul><li>hosted service (free up to 3 projects), community edition available for download; RoR-based</li><li><em>free plan has search disabled</em></li><li>projects, tasks, task lists, files</li><li>dashboard</li><li>pages/wiki/writeboard, discussions</li><li>gantt charts, calendar, twitter-like status updates, time-tracking</li><li>light interface</li><li>clients for mobile devices</li><li>email notifications and email-to-web functionality</li></ul><p>Seems best for conversations-oriented projects. A few times posted updates took lots of time to become visible to other team members (far not immediate, so comparison to twitter does not give the right idea), and page refreshes (even forced) didn't help. Tasks system is basically an extension of conversations: once you created a task, you can only "extend" it with comments, but not edit. Personally, I found the tasks implementation too awkward to use - it might be different for writing-related projects. I liked the Pages functionality: it provides a good (easy and quick) way of organizing information accumulated by the project. Basically, we ended up using Teambox as a repository for external and internal documentation - but not for status updates, chats or planning.</p><p>As free time permits, I would love to compile a feature table, comparing all these tools, together with subjective "easy-of-use" scores (maybe collected with a poll of some kind). Any contributions towards this simple goal are welcome. If comments fail to work for you - use the <a
href="/contact" rel="nofollow" >contact</a> page.</p><p>A few more related web-tools follow.</p><p><a
href="http://pivotaltracker.com/" rel="nofollow" >Pivotal Tracker</a> (currently using)</p><ul><li>agile projects management</li><li>concepts: icebox, backlog, current, done</li><li>has: features, bugs, chores, releases; each of these can have description, comments and short tasks (all very easy to add and organize)</li><li>features can have their complexity estimated in points, which are then used to calculate weekly team velocity, and also to move tasks from the backlog panel into current panel</li></ul><p>I'm new to agile development tools, and after getting used to it - Pivotal Tracker is good. It is also useful as a place to keep the things you would like to <em>eventually</em> implement - just append these to the end of the icebox, and then start-move to backlog/current when determined to implement.</p><p><a
href="http://flowdock.com/" rel="nofollow" >Flowdock</a> (currently using)</p><ul><li>web-chat with history saved as an infinite scrollable page</li><li>has a concept of "flows" (similar to chat rooms in campfire)</li><li>tags (tab-autocomplete possible when writing messages); can be added/removed to/from existing entries</li><li>files can be inserted directly into chat stream</li><li>separate views for posted URLs and files</li><li>full-text search (a recent feature), and search by tags</li><li>mobile device support (haven't tried)</li><li>various desktop notification tools for all platforms (Linux, Mac, Windows); has minimally-configurable sound notifications</li><li>tracks online/idle/offline statuses (e.g. <em>idle for X hours</em> or <em>offline for Y hours</em>)</li><li>mails can be sent to a flow, and they can have tags</li><li>Influx: an aggregator of external events (github, twitter, RSS, mails, PivotalTracker, Confluence and others)</li></ul><p>Flowdock is just... convenient. After trying teambox, present.ly and campfire, we seem to have settled on this one for in-project communication (our team currently has only 3 people, though). The most convenient feature is probably the built-in aggregator.</p><p><a
href="http://wedoist.com/" rel="nofollow" >WeDoist</a></p><ul><li>collaborative to-do lists</li><li>tasks (maybe also sub-tasks), status updates, group chat</li><li>hosted solution</li></ul><p><a
href="http://todoist.com/" rel="nofollow" >ToDoist</a></p><ul><li>1-person projects, tasks, sub-tasks</li><li>hosted solution</li><li>opera widget at http://widgets.opera.com/widget/15372/</li></ul><p><a
href="http://slimtimer.com/" rel="nofollow" >SlimTimer</a> (using this one)</p><ul><li>simple (perfect? <img
src='http://bogdan.org.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ) tasks-based timetracker with nice reports feature</li><li>hosted solution, has free plan</li></ul><p><a
href="http://present.ly/" rel="nofollow" class="broken_link">Present.ly</a> (used myself, would use again)</p><ul><li>"corporate twitter"</li><li>hash-tags autocompletion</li><li>files can be attached</li><li>"attach text" - when 140 symbols is not enough</li><li>direct messaging and replies; replies can be viewed in threaded mode</li><li>mobile devices support (haven't tried)</li><li>configurable email alerts</li><li>concepts helping organize data: topics, feeds, tags</li><li>separate views for files and links to find them faster</li></ul><p>Overall, present.ly is very cool for within-team status updates - that is, to keep track of what anybody's doing.</p><p><a
href="http://present.ly/" rel="nofollow" class="broken_link">Campfire</a> (used myself)</p><ul><li>web-chat with "rooms" (e.g. by topic, by department etc)</li><li>each day is saved as a transcript of chats</li><li>files can be attached directly within the chat flow</li><li>full-text searchable</li><li>free use tier implies chat-stream embedded ads (can be removed with adblock+ and element hiding helper)</li><li>can be configured to track external resources (e.g. github commits), though those do not look as good as in flowdock</li></ul><p>Overall, campfire is a nice chat. The best thing they have is the event sound - probably the best I've heard.</p><p>Finally, nice mantra (except for the very last phrase) from ToDoist - "The Zen of Todoist":</p><blockquote><p>Now is better than later.<br
/> Later is better than never.<br
/> Organized is better than messy.<br
/> Big things are composed by smaller things.<br
/> Smaller things are done by action.<br
/> Think like a person of action.<br
/> Act like a person of thought.<br
/> The beginning is half of every action.<br
/> The longest journey starts with the first step.<br
/> Everything should be made as simple as possible.<br
/> But not simpler.<br
/> Celebrate any progress.<br
/> Don't wait to get perfect.<br
/> Deadlines and stress are a part of life.</p></blockquote> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2011/01/10/light-web-based-collaborative-project-management-tools.html/feed</wfw:commentRss> <slash:comments>8</slash:comments> </item> <item><title>How to relay outgoing postfix emails via another mail server (e.g. your ISP)</title><link>http://bogdan.org.ua/2010/12/04/how-to-relay-outgoing-postfix-emails-via-another-mail-server-isp-gmail.html</link> <comments>http://bogdan.org.ua/2010/12/04/how-to-relay-outgoing-postfix-emails-via-another-mail-server-isp-gmail.html#comments</comments> <pubDate>Sat, 04 Dec 2010 18:01:37 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[*nix]]></category> <category><![CDATA[how-to]]></category> <category><![CDATA[Links]]></category> <category><![CDATA[Notepad]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Debian]]></category> <category><![CDATA[linux]]></category> <category><![CDATA[postfix]]></category> <category><![CDATA[relay]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1218</guid> <description><![CDATA[Here's a simple and clear guide for gmail, which also definitely works with other relay hosts. I've used it to configure my ISP's mail relay (they block outgoing port 25) on a Debian Squeeze laptop.]]></description> <content:encoded><![CDATA[<p>Here's a <a
href="http://ubuntu-tutorials.com/2008/11/11/relaying-postfix-smtp-via-smtpgmailcom/" rel="nofollow" >simple and clear guide for gmail</a>, which also definitely works with other relay hosts. I've used it to configure my ISP's mail relay (they block outgoing port 25) on a Debian Squeeze laptop.</p> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2010/12/04/how-to-relay-outgoing-postfix-emails-via-another-mail-server-isp-gmail.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Beautiful aurora timelapse in HD</title><link>http://bogdan.org.ua/2010/11/26/beautiful-aurora-timelapse-in-hd.html</link> <comments>http://bogdan.org.ua/2010/11/26/beautiful-aurora-timelapse-in-hd.html#comments</comments> <pubDate>Fri, 26 Nov 2010 21:36:13 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[Life]]></category> <category><![CDATA[Links]]></category> <category><![CDATA[Misc]]></category> <category><![CDATA[beauty]]></category> <category><![CDATA[nature]]></category> <category><![CDATA[philosophy]]></category> <category><![CDATA[space]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1214</guid> <description><![CDATA[Enjoy full-screen. Aurora Borealis timelapse HD - Tromsø 2010 from Tor Even Mathisen on Vimeo.]]></description> <content:encoded><![CDATA[<p>Enjoy full-screen.</p><p><iframe
src="http://player.vimeo.com/video/16917950?portrait=0" width="500" height="281" frameborder="0"></iframe><p><a
href="http://vimeo.com/16917950" rel="nofollow" >Aurora Borealis timelapse HD - Tromsø 2010</a> from <a
href="http://vimeo.com/tittentem" rel="nofollow" >Tor Even Mathisen</a> on <a
href="http://vimeo.com" rel="nofollow" >Vimeo</a>.</p> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2010/11/26/beautiful-aurora-timelapse-in-hd.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>How to record Skype calls on Linux: use free Skype Call Recorder</title><link>http://bogdan.org.ua/2010/11/11/how-to-record-skype-calls-on-linux-use-free-skype-call-recorder.html</link> <comments>http://bogdan.org.ua/2010/11/11/how-to-record-skype-calls-on-linux-use-free-skype-call-recorder.html#comments</comments> <pubDate>Thu, 11 Nov 2010 13:06:53 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[*nix]]></category> <category><![CDATA[Links]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[linux]]></category> <category><![CDATA[skype]]></category> <category><![CDATA[skype call recorder]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1205</guid> <description><![CDATA[Just came across Skype Call Recorder - an awesome in its functionality+simplicity tool to record skype calls. Highly recommended! It worked immediately for me, and default settings are good enough not to bother tweaking. Well, I know that because I did tweak a few to get more nerdiness, but normal people don't need that. SCR [...]]]></description> <content:encoded><![CDATA[<p>Just came across <a
href="http://atdot.ch/scr/" rel="nofollow" >Skype Call Recorder</a> - an awesome in its functionality+simplicity tool to record skype calls. Highly recommended!</p><p>It worked immediately for me, and default settings are good enough not to bother tweaking. Well, I know that because I did tweak a few to get more nerdiness, but normal people don't need that.</p><p><a
href="http://atdot.ch/scr/download/" rel="nofollow" >SCR download page</a> has packages for Ubuntu, Debian/i386, Xandros, RPM-based distributions, Gentoo - and as its free, you can of course just use the <del
datetime="2010-11-11T12:48:13+00:00">f</del>source<del
datetime="2010-11-11T12:48:13+00:00">, Luke</del>!</p><p>At the time of writing, a package for Debian/amd64 was not available, but it is really easy to build one.<br
/> Here's mine: <a
href="http://bogdan.org.ua/wp-content/uploads/2010/11/skype-call-recorder-debian_0.8_amd64.deb">skype-call-recorder-debian_0.8_amd64.deb</a></p> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2010/11/11/how-to-record-skype-calls-on-linux-use-free-skype-call-recorder.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Overlaying gene expression data onto pathways from databases</title><link>http://bogdan.org.ua/2010/11/05/overlaying-gene-expression-data-onto-pathways-from-databases.html</link> <comments>http://bogdan.org.ua/2010/11/05/overlaying-gene-expression-data-onto-pathways-from-databases.html#comments</comments> <pubDate>Fri, 05 Nov 2010 13:20:06 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[Bioinformatics]]></category> <category><![CDATA[Links]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[biocarta]]></category> <category><![CDATA[data]]></category> <category><![CDATA[expression]]></category> <category><![CDATA[genmapp]]></category> <category><![CDATA[KEGG]]></category> <category><![CDATA[microarray]]></category> <category><![CDATA[pathvisio]]></category> <category><![CDATA[pathway]]></category> <category><![CDATA[pathway explorer]]></category> <category><![CDATA[wikipathways]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1174</guid> <description><![CDATA[Superimposing gene expression data onto pathways from databases is a common task in the final steps of microarray data analysis - that is, biological interpretation and results discussion. I have found many tools which claim to facilitate this procedure. Some of them are reviewed below (in no specific order). Pathway Explorer by Bernhard Mlecnik was [...]]]></description> <content:encoded><![CDATA[<p>Superimposing gene expression data onto pathways from databases is a common task in the final steps of microarray data analysis - that is, biological interpretation and results discussion.</p><p>I have found many tools which claim to facilitate this procedure. Some of them are reviewed below (in no specific order).<br
/> <span
id="more-1174"></span><br
/> <a
href="https://pathwayexplorer.genome.tugraz.at/" rel="nofollow" >Pathway Explorer</a> by Bernhard Mlecnik was last updated in 2007, but is fully functional (I believe it is being maintained without changes to the last-updated date). Both online and downloadable Java applications are available. Note that for downloadable application you will need to obtain a license key - the procedure is well documented and was very fast for me.<br
/> <a
href="http://bogdan.org.ua/wp-content/uploads/2010/11/pe.png"><img
src="http://bogdan.org.ua/wp-content/uploads/2010/11/pe-500x371.png" alt="" title="Pathway Explorer" width="500" height="371" class="aligncenter size-medium wp-image-1176" /></a><br
/> Pathway Explorer supports import from 3 sources: KEGG xml files, biocarta URLs, and GenMAPP URLs. Import from KEGG does work as described in the short manual, and seems functional (I had some problems exporting/saving the resulting picture, but didn't investigate further). Biocarta import seems to work, but for some reason does not display expression levels of pathway components. I could not test the import of GenMAPP pathways, because they are not available online.</p><p>I found Pathway Explorer good, but then switched to PathVisio (reviewed next), because for some reason Зathway Explorer was recognising only a small fraction of genes from my expression data. It could be that identifiers mappings are outdated, but this is just a guess.</p><p><a
href="http://www.pathvisio.org/" rel="nofollow" >PathVisio</a> appears to be a spin-off of <a
href="http://www.genmapp.org/" rel="nofollow" >GenMAPP</a> and <a
href="http://www.wikipathways.org/" rel="nofollow" >WikiPathways</a>. It excells at importing/visualizing WikiPathways data, which even comes bundled with PathVisio Java application. It is easier to use than Pathway Explorer, and it seems to recognize more genes (although still not all the genes which are present in the data). There is KEGG pathways support, but it is not always usable - many edges (links between genes/proteins) are absent, so instead of a pathway you get a bunch of nodes relevant to a pathway, but cannot really see how they are connected. PathVisio supports an insanely long list of database identifiers, so it is highly unlikely that you will have to map your data to use a different identifier. This pathway mapper exports to several formats, including PNG and PDF.</p><p><a
href="http://bogdan.org.ua/wp-content/uploads/2010/11/pv.png"><img
src="http://bogdan.org.ua/wp-content/uploads/2010/11/pv-500x302.png" alt="" title="PathVisio" width="500" height="302" class="aligncenter size-medium wp-image-1181" /></a></p><p>I could not fully test <a
href="http://lbb.ut.ac.ir/projects/Affy2KEGG/WS/affy2keggWs.jsp" rel="nofollow" class="broken_link">AffyWEB</a>, because it doesn't list rat arrays we used. Trying their barley genome example did work, so the tool is probably functional. It overlays your expression data onto KEGG pathways.</p><p><a
href="http://bogdan.org.ua/wp-content/uploads/2010/11/map00030.png"><img
src="http://bogdan.org.ua/wp-content/uploads/2010/11/map00030-500x345.png" alt="" title="AffyWEB" width="500" height="345" class="aligncenter size-medium wp-image-1177" /></a></p><p><a
href="http://www.g-language.org/data/marray/software/map2swf.cgi " rel="nofollow" >G-language Microarray System</a> is a comparatively simple pathway visualizer. It accepts CSV files containing EntrezGene IDs column with a single column of expression values normalized to 1-100 range, fetches requested KEGG pathway, and generates a Flash (SWF) object depicting that pathway with coloured components. It does work with sample data. I was too lazy to normalize my expression data to [1;100] range, and SWF is not exactly a usable format, so I haven't tested this tool any further (you can right-click to zoom in the flash pathway below).<br
/> <object
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
id="fm_ecj00010_1270212550"
class="flashmovie"
width="500"
height="800"><param
name="movie" value="http://bogdan.org.ua/wp-content/uploads/2010/11/ecj00010.swf" /> <!--[if !IE]>--> <object
type="application/x-shockwave-flash"
data="http://bogdan.org.ua/wp-content/uploads/2010/11/ecj00010.swf"
name="fm_ecj00010_1270212550"
width="500"
height="800"> <!--<![endif]--><p><a
href="http://adobe.com/go/getflashplayer" rel="nofollow" ><img
src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p> <!--[if !IE]>--> </object> <!--<![endif]--> </object><p>If time permits (or work requires) this post may be extended with the reviews of <a
href="http://www.genmapp.org/" rel="nofollow" >GenMAPP</a>, <a
href="http://gepat.sourceforge.net/screenshots.htm" rel="nofollow" >GEPAT</a>, <a
href="https://stat.ethz.ch/pipermail/bioconductor/2008-June/023112.html" rel="nofollow" >KEGG2heatmap script</a>, <a
href="http://akt.ucsf.edu/EGAN/downloads.php" rel="nofollow" >EGAN</a>, <a
href="http://mapman.gabipd.org/web/guest/mapman" rel="nofollow" >MapMan</a>, <a
href="http://bioinformatics.oxfordjournals.org/content/20/13/2156.abstract" rel="nofollow" >Pathway Miner</a>, <a
href="http://nar.oxfordjournals.org/content/32/suppl_2/W460.full" rel="nofollow" >ArrayXPath</a>, <a
href="http://nar.oxfordjournals.org/content/35/suppl_2/W625.full" rel="nofollow" >VisANT</a>, <a
href="http://www.win.tue.nl/~mwestenb/spotxplore/" rel="nofollow" >SpotXplore</a>, and maybe others.</p><p>Please comment to share your experience using pathway expression overlaying tools or to suggest other tools.</p> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2010/11/05/overlaying-gene-expression-data-onto-pathways-from-databases.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>The world&#8217;s shortest marketing plan (4P cheat sheet)</title><link>http://bogdan.org.ua/2010/10/24/the-worlds-shortest-marketing-plan-4p-cheat-sheet.html</link> <comments>http://bogdan.org.ua/2010/10/24/the-worlds-shortest-marketing-plan-4p-cheat-sheet.html#comments</comments> <pubDate>Sun, 24 Oct 2010 14:57:35 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[Links]]></category> <category><![CDATA[Notepad]]></category> <category><![CDATA[Startups]]></category> <category><![CDATA[marketing]]></category> <category><![CDATA[startup]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1163</guid> <description><![CDATA[Source: Kelly's think tank.]]></description> <content:encoded><![CDATA[<p><a
href="http://bogdan.org.ua/wp-content/uploads/2010/10/marketing_plan.png"><img
src="http://bogdan.org.ua/wp-content/uploads/2010/10/marketing_plan-500x330.png" alt="" title="4P cheat sheet" width="500" height="330" class="aligncenter size-medium wp-image-1164" /></a></p><p>Source: <a
href="http://kellyodell.blogspot.com/2006/04/worlds-shortest-marketing-plan.html" rel="nofollow" >Kelly's think tank</a>.</p> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2010/10/24/the-worlds-shortest-marketing-plan-4p-cheat-sheet.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>ask.debian.net: stackoverflow for Debian with Shapado</title><link>http://bogdan.org.ua/2010/10/19/ask-debian-net-stackoverflow-for-debian-with-shapado.html</link> <comments>http://bogdan.org.ua/2010/10/19/ask-debian-net-stackoverflow-for-debian-with-shapado.html#comments</comments> <pubDate>Mon, 18 Oct 2010 22:41:13 +0000</pubDate> <dc:creator>Bogdan</dc:creator> <category><![CDATA[Links]]></category> <category><![CDATA[Misc]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[Debian]]></category> <category><![CDATA[shapado]]></category> <category><![CDATA[stackoverflow]]></category> <guid
isPermaLink="false">http://bogdan.org.ua/?p=1158</guid> <description><![CDATA[ask.debian.net is a StackOverflow-like Q&#038;A website built with OSS Shapado. That's my first encounter of Shapado, so it was interesting to read Shapado authors' justification and a related question on meta.SO.]]></description> <content:encoded><![CDATA[<p><img
src="http://bogdan.org.ua/wp-content/uploads/2010/10/4b917d9519ce95468f00000b.png" alt="" title="ask.debian.net" width="140" height="60" class="alignleft size-full wp-image-1160" /><a
href="http://ask.debian.net/" rel="nofollow" >ask.debian.net</a> is a <a
href="http://stackoverflow.com/" rel="nofollow" >StackOverflow</a>-like Q&#038;A website built with OSS <a
href="http://shapado.com/" rel="nofollow" >Shapado</a>.</p><p>That's my first encounter of Shapado, so it was interesting to read Shapado authors' <a
href="http://blog.ricodigo.com/2009/9/27/shapado-a-foss-replacement-for-stackoverflow/shapado" rel="nofollow" class="broken_link">justification</a> and a related question on <a
href="http://meta.stackoverflow.com/questions/45988/will-a-clone-force-stack-overflow-to-open-source" rel="nofollow" >meta.SO</a>.</p> ]]></content:encoded> <wfw:commentRss>http://bogdan.org.ua/2010/10/19/ask-debian-net-stackoverflow-for-debian-with-shapado.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
