<?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>Do Know Evil - A Blog by Tyler Mulligan &#187; Application Management</title>
	<atom:link href="http://www.doknowevil.net/category/application-management/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.doknowevil.net</link>
	<description>Tips and Tricks About Computers, Web Development, Linux, the Internet and the Like</description>
	<lastBuildDate>Thu, 29 Jul 2010 03:37:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>The Best Way to Tweet to Twitter, Post on Facebook from WordPress</title>
		<link>http://www.doknowevil.net/2010/07/26/the-best-way-to-tweet-to-twitter-post-on-facebook-from-wordpress/</link>
		<comments>http://www.doknowevil.net/2010/07/26/the-best-way-to-tweet-to-twitter-post-on-facebook-from-wordpress/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 02:47:47 +0000</pubDate>
		<dc:creator>Tyler Mulligan</dc:creator>
				<category><![CDATA[Application Management]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[internet marketing]]></category>
		<category><![CDATA[ping.fm]]></category>
		<category><![CDATA[publishing]]></category>
		<category><![CDATA[social networks]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.doknowevil.net/?p=762</guid>
		<description><![CDATA[I&#8217;ve been focusing some time recently to the foundation levels of Internet marketing. I&#8217;m aiming to increase visibility as strongly as possible at the core of a website giving it the power to leverage evolving trends as simply as possible. This of course means utilizing APIs from other web applications, such as social networks. The]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been focusing some time recently to the foundation levels of Internet marketing.  I&#8217;m aiming to increase visibility as strongly as possible at the core of a website giving it the power to leverage evolving trends as simply as possible.  This of course means utilizing APIs from other web applications, such as social networks.  The title of this post is true but deceptive.  I consider the following method the best way to tweet from WordPress but it&#8217;s actually a whole lot more than that. It&#8217;s a gateway to a large number of social media applications; one account to rule them all.  <a href="http://www.ping.fm">ping.fm</a> is a service that allows you to link multiple social network websites, such as <a href="http://www.facebook.com" target="_blank">facebook</a>, <a href="http://www.twitter.com" target="_blank">twitter</a>, <a href="http://www.linkedin.com" target="_blank">linkedin</a> and more.</p>
<p><a href="http://www.doknowevil.net/wp-content/uploads/2010/07/screenshot241.png" rel="shadowbox[post-762];player=img;"><img src="http://www.doknowevil.net/wp-content/uploads/2010/07/screenshot241.png" alt="" title="ping fm services (minus twitter)" width="757" height="854" class="alignnone size-full wp-image-763" /></a><br />
+ twitter</p>
<p>So the idea then, is to leverage then is to utilize the ping.fm application from your website.  If you&#8217;re using WordPress then you&#8217;re set, <a href="http://wordpress.org/extend/plugins/publish-2-pingfm">the simple no frills publish 2 ping.fm plugin</a> will allow you to interact with ping.fm from your blog/website.</p>
<p><a href="http://www.doknowevil.net/wp-content/uploads/2010/07/wordpress_ping_fm.png" rel="shadowbox[post-762];player=img;"><img src="http://www.doknowevil.net/wp-content/uploads/2010/07/wordpress_ping_fm.png" alt="" title="wordpress_ping_fm" width="815" height="818" class="alignnone size-full wp-image-764" /></a></p>
<p>I&#8217;ve tested this out with the free open-source GPL First Person Shooter, <a href="http://www.xonotic.org" target="_blank">Xonotic</a> and a new site I just started <a href="http://www.dumbtubes.com">dumbtubes.com</a>.  Both have twitter accounts that you can see publishing <a href="http://twitter.com/dumbtubes" target="_blank">twitter.com/dumbtubes</a>, <a href="http://twitter.com/xonotic" target="_blank">twitter.com/xonotic</a>.  Xonotic also publishes to many other social accounts, see the <a href="http://www.xonotic.org">Xonotic homepage</a> to find other accounts.</p>
<p>Stay tuned for more wordpress tips.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doknowevil.net/2010/07/26/the-best-way-to-tweet-to-twitter-post-on-facebook-from-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python Multi-head X (Nvidia TwinView / Dual Monitor) Development Notes</title>
		<link>http://www.doknowevil.net/2010/07/05/python-multi-head-x-nvidia-twinview-dual-monitor-development-notes/</link>
		<comments>http://www.doknowevil.net/2010/07/05/python-multi-head-x-nvidia-twinview-dual-monitor-development-notes/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 23:29:24 +0000</pubDate>
		<dc:creator>Tyler Mulligan</dc:creator>
				<category><![CDATA[Application Management]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Operating Systems]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.doknowevil.net/?p=745</guid>
		<description><![CDATA[Preface The following development notes were written after researching the underlying handling of dual monitors in the X window system on Linux. I&#8217;ve included a code snippet that I built to help demonstrate behavior and create a proof of concept to show I can determine which monitor a window is on using only python and]]></description>
			<content:encoded><![CDATA[<h2>Preface</h2>
<p>The following development notes were written after researching the underlying handling of dual monitors in the <a href="http://en.wikipedia.org/wiki/X_Window_System" target="_blank">X window system</a> on Linux. I&#8217;ve included a code snippet that I built to help demonstrate behavior and create a proof of concept to show I can determine which monitor a window is on using only python and no statically set coordinates.  </p>
<h2>Introduction</h2>
<p>I mentioned in my previous post that I&#8217;m using an nVidia video card with &#8220;<a href="http://www.nvidia.com/object/feature_twinview.html" target="_blank">TwinView</a>&#8221; software that outputs my video as if it were one screen, which it technically is, one X screen.  This means that the distinction between monitors is not mapped in the X tree, it&#8217;s handled by the window manager. Unlike <a href="http://en.wikipedia.org/wiki/Xinerama" target="_blank">Xinerama</a>, which has an x session per monitor and stitches them together.  Xinerama, however, has is being deprecated in favor of <a href="http://en.wikipedia.org/wiki/RandR" target="_blank">RandR</a> but regardless, TwinView is my choice and is not an option for me to change to.</p>
<p>With all of that said, the decision to bridge python to c that interfaces with compiz is a deadend and would be better implemented based on the new 0.9.0 C++ api.  It would be nice to be able to return a list of windows from a &#8220;monitor&#8221; object.  However, that&#8217;s beyond my current scope.  I was able to whip up some python that to show that implementing the monitor management in python using the gtk module isn&#8217;t /that/ hacky.  I emphasize because I read some posts that claimed window decorations could be an issue in accurate calculations.</p>
<h2>Some Code</h2>
<p>Read the comment on line 2.  <a href="http://www.pygtk.org/docs/pygtk/" target="_blank">Learn more about pygtk here</a></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="co1">#!/usr/bin/python</span>
<span class="co1"># Print some information about the X environment, the monitor setup, currently active window and cursor position</span>
<span class="kw1">import</span> gtk.<span class="me1">gdk</span>
&nbsp;
screen = gtk.<span class="me1">gdk</span>.<span class="me1">screen_get_default</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="kw1">print</span> <span class="st0">&quot;X default screen size: %d x %d&quot;</span> <span class="sy0">%</span> <span class="br0">&#40;</span>screen.<span class="me1">get_width</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, screen.<span class="me1">get_height</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
<span class="kw1">print</span> <span class="st0">&quot;xid of root window: %d&quot;</span> <span class="sy0">%</span> screen.<span class="me1">get_root_window</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">xid</span>
&nbsp;
monitors = <span class="kw2">int</span><span class="br0">&#40;</span>screen.<span class="me1">get_n_monitors</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
<span class="kw1">print</span> <span class="st0">&quot;== %d monitors ==&quot;</span> <span class="sy0">%</span> monitors
<span class="kw1">for</span> m <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">0</span>, monitors<span class="br0">&#41;</span>:
    <span class="kw1">print</span> <span class="st0">&quot; - geometry of monitor %d: %s&quot;</span> <span class="sy0">%</span> <span class="br0">&#40;</span>m, screen.<span class="me1">get_monitor_geometry</span><span class="br0">&#40;</span>m<span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp;
window = screen.<span class="me1">get_active_window</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
win_x, win_y, win_w, win_h, win_bit_depth = window.<span class="me1">get_geometry</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="kw1">print</span> <span class="st0">&quot;active window on monitor: %d&quot;</span> <span class="sy0">%</span> screen.<span class="me1">get_monitor_at_point</span><span class="br0">&#40;</span><span class="br0">&#40;</span>win_x+<span class="br0">&#40;</span>win_w/<span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,<span class="br0">&#40;</span>win_y+<span class="br0">&#40;</span>win_h/<span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
<span class="kw1">print</span> <span class="st0">&quot;window geometry (x,y,w,h): %d, %d, %d, %d&quot;</span> <span class="sy0">%</span> <span class="br0">&#40;</span>win_x,win_y,win_w,win_h<span class="br0">&#41;</span>
&nbsp;
display = gtk.<span class="me1">gdk</span>.<span class="me1">display_get_default</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
pointer = display.<span class="me1">get_pointer</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="kw1">print</span> <span class="st0">&quot;cursor position (x, y): %d, %d&quot;</span> <span class="sy0">%</span> <span class="br0">&#40;</span>pointer<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>, pointer<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
<span class="kw1">print</span> <span class="st0">&quot;cursor on monitor: %d&quot;</span> <span class="sy0">%</span> screen.<span class="me1">get_monitor_at_point</span><span class="br0">&#40;</span>pointer<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>,pointer<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#41;</span></pre></div></div>

<p>thanks to those in #compiz-dev and #python on freenode who helped me come around to create this snippet.  I hope it will help others looking to develop for multi-head setups in Linux.  Please let me know if I missed anything or did something incorrectly, this is new territory for me.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doknowevil.net/2010/07/05/python-multi-head-x-nvidia-twinview-dual-monitor-development-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compiz 0.9.0 Released &#8211; Completely Rewritten in C++</title>
		<link>http://www.doknowevil.net/2010/07/04/compiz-0_9_0-released-completely-rewritten-in-c-plus-plus/</link>
		<comments>http://www.doknowevil.net/2010/07/04/compiz-0_9_0-released-completely-rewritten-in-c-plus-plus/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 02:44:16 +0000</pubDate>
		<dc:creator>Tyler Mulligan</dc:creator>
				<category><![CDATA[Application Management]]></category>
		<category><![CDATA[Compiz]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Desktop Mods]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Operating Systems]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://www.doknowevil.net/?p=738</guid>
		<description><![CDATA[I was doing some in depth research / code hacking regarding the support of multi-headed output (dual monitors) on Linux. I won&#8217;t get into details but my video is being output to my monitors as &#8220;one screen&#8221; with a virtual distinctions handled by the window manager. Because of this, figuring out which of the monitors]]></description>
			<content:encoded><![CDATA[<p>I was doing some in depth research / code hacking regarding the support of multi-headed output (dual monitors) on Linux.  I won&#8217;t get into <a href="http://forum.compiz.org/viewtopic.php?f=89&#038;t=13362" title="managing windows across dual monitors in compiz?">details</a> but my video is being output to my monitors as &#8220;one screen&#8221; with a virtual distinctions handled by the window manager.  Because of this, figuring out which of the monitors you are on isn&#8217;t as straight forward as you might think.  Originally I was looking for a way to access the c functions in compiz through python but that point is now moot (likely for the better).</p>
<p>The <a href="http://lists.freedesktop.org/archives/compiz/2010-July/003429.html">first unstable release of the Compiz 0.9 series</a>, completely rewritten in C++.  As said, this &#8220;brings a whole new developer API, splits rendering into plugins, switches the buildsystem from automake to cmake and brings minor functionality improvements. This release represents the first developer and tester preview of what will eventually make the 0.10.x stable series. Please note that as such, it is not yet ready for general use as there are a number of known  ssues, regressions and incomplete functionality.&#8221;</p>
<p>Here is a <b>SLIGHTLY DATED</b> graph I got <a href="http://santiance.com/2009/10/compiz-code-comparison/">from Santiance.com</a>.</p>
<p><a href="http://www.doknowevil.net/wp-content/uploads/2010/07/compiz_comparison_chart.png" rel="shadowbox[post-738];player=img;"><img src="http://www.doknowevil.net/wp-content/uploads/2010/07/compiz_comparison_chart.png" alt="" title="compiz_comparison_chart" width="776" height="449" class="alignnone size-full wp-image-739" /></a></p>
<p>This is a really interesting turning point for the project and I&#8217;m glad I came across this while doing my research for multi-head handling in compiz. Knowing where the future lies could drastically change where I put my efforts in developing to support them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doknowevil.net/2010/07/04/compiz-0_9_0-released-completely-rewritten-in-c-plus-plus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blocking Ads Cross-browser and Save Bandwith Using Your Hosts file</title>
		<link>http://www.doknowevil.net/2010/05/26/blocking-ads-cross-browser-and-save-bandwith-using-your-hosts-file/</link>
		<comments>http://www.doknowevil.net/2010/05/26/blocking-ads-cross-browser-and-save-bandwith-using-your-hosts-file/#comments</comments>
		<pubDate>Thu, 27 May 2010 01:49:06 +0000</pubDate>
		<dc:creator>Tyler Mulligan</dc:creator>
				<category><![CDATA[Application Management]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[The Internet]]></category>
		<category><![CDATA[hosts]]></category>

		<guid isPermaLink="false">http://www.doknowevil.net/?p=638</guid>
		<description><![CDATA[Ethics of blocking ads vs. data mining aside, one of the smartest ways I found to block ads is at http://someonewhocares.org/hosts/zero/ where the author, Dan Pollock has compiled a list of urls, with the help of contributors that all redirect to 0.0.0.0 or 127.0.0.1 (localhost, your machine). By appending this list to your current hosts]]></description>
			<content:encoded><![CDATA[<p>Ethics of blocking ads vs. data mining aside, one of the smartest ways I found to block ads is at http://someonewhocares.org/hosts/zero/ where the author, Dan Pollock has compiled a list of urls, with the help of contributors that all redirect to 0.0.0.0 or 127.0.0.1 (localhost, your machine).  By appending this list to your current hosts file (or selectively adding parts), whenever your machine attempts to look up a domain name in this list, it will resolved to 0.0.0.0 or your machine.  It will never make a request on the internet to the intended server.  It will never even download the advertisement.</p>
<p>To take this a step further, you could develop a similar list for your router or DNS server (if you operate it).</p>
<p>I still use adblock plus on top for missed entries.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doknowevil.net/2010/05/26/blocking-ads-cross-browser-and-save-bandwith-using-your-hosts-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Packages for nautilus you wish were installed by default in ubuntu</title>
		<link>http://www.doknowevil.net/2010/05/04/packages-for-nautilus-you-wish-were-installed-by-default-in-ubuntu/</link>
		<comments>http://www.doknowevil.net/2010/05/04/packages-for-nautilus-you-wish-were-installed-by-default-in-ubuntu/#comments</comments>
		<pubDate>Wed, 05 May 2010 01:46:27 +0000</pubDate>
		<dc:creator>Tyler Mulligan</dc:creator>
				<category><![CDATA[Application Management]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[Operating Systems]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://www.doknowevil.net/?p=550</guid>
		<description><![CDATA[Intro Thanks to a tip I picked up at Tombuntu about nautilus, after following up on a trick to add files to mocp through nautilus scripts trackback link from Hilltop Yodler (great article), when doing a google search for GiS for nautilus-actions (apt-get install nautilus-actions). I learned about 3 kick ass additions to the nautilus]]></description>
			<content:encoded><![CDATA[<h2>Intro</h2>
<p>Thanks to <a href="http://tombuntu.com/index.php/2007/07/12/install-useful-nautilus-menu-items/" title="See code block below" target="_blank">a tip I picked up at Tombuntu about nautilus</a>, after following up on a <a href="http://www.doknowevil.net/2009/11/08/using-nautilus-scripting-abilities-to-integrate-right-click-file-enqueues-with-mocp/">trick to add files to mocp through nautilus scripts</a> <a href="http://www.hilltopyodeler.com/blog/?p=279" title="more tricks to add files to with nautilus">trackback link from Hilltop Yodler (great article)</a>, when doing a google search for <a href="http://images.google.com/imgres?imgurl=http://linux.softpedia.com/screenshots/Nautilus-actions_2.png&#038;imgrefurl=http://linux.softpedia.com/progScreenshots/Nautilus-actions-Screenshot-4311.html&#038;usg=__HIOtTlLu0P59ZnwHEDslrgllk-Y=&#038;h=478&#038;w=610&#038;sz=166&#038;hl=en&#038;start=1&#038;sig2=To1WEzfgc0FLl-hS6ZIqjQ&#038;um=1&#038;itbs=1&#038;tbnid=jucsR2NLXFKcuM:&#038;tbnh=107&#038;tbnw=136&#038;prev=/images%3Fq%3Dnautilus%2Bactions%26um%3D1%26hl%3Den%26client%3Dfirefox-a%26sa%3DN%26rls%3Dcom.ubuntu:en-US:official%26tbs%3Disch:1&#038;ei=tLrgS-bUNcL98Ab0hPmlBw" title="LOL, this url _ What's a GiS for?">GiS for</a> <a href="http://www.grumz.net/?q=node/387" title="Nautilus Actions _ nautilus-actions">nautilus-actions</a> (apt-get install nautilus-actions).  I learned about 3 kick ass additions to the nautilus menu.  I realized <a href="http://fedoraproject.org/" target="_blank">Fedora Linux</a> and <a href="http://www.linuxmint.com/" target="_blank">Linux Mint</a> had some of these in their context menus but didn&#8217;t make the connection to <a href="http://www.ubuntu.com" target="_blank">ubuntu</a> until now.</p>
<h2>On with the Show</h2>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="kw2">sudo</span> <span class="kw2">apt-get</span> <span class="kw2">install</span> nautilus-open-terminal nautilus-image-converter nautilus-gksu</pre></div></div>

<p>for some kick ass options in the context (right click) menu of nautilus (your default file manager in ubuntu). For more information, check out the tombuntu article I linked above.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;">pkill nautilus</pre></div></div>

<p>to restart nautilus and have the new packages in your context menu</p>
<h2>More</h2>
<p>If you&#8217;re interested in this, you&#8217;ll probably also like <a href="http://www.doknowevil.net/2010/05/04/adding-context-right-click-menu-options-to-nautilus-ubuntus-default-file-manager-with-nautilus-actions">my article about nautilus-actions</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doknowevil.net/2010/05/04/packages-for-nautilus-you-wish-were-installed-by-default-in-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding context (right click) menu options to nautilus (Ubuntu&#8217;s default file manager) with nautilus-actions</title>
		<link>http://www.doknowevil.net/2010/05/04/adding-context-right-click-menu-options-to-nautilus-ubuntus-default-file-manager-with-nautilus-actions/</link>
		<comments>http://www.doknowevil.net/2010/05/04/adding-context-right-click-menu-options-to-nautilus-ubuntus-default-file-manager-with-nautilus-actions/#comments</comments>
		<pubDate>Wed, 05 May 2010 01:46:22 +0000</pubDate>
		<dc:creator>Tyler Mulligan</dc:creator>
				<category><![CDATA[Application Management]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Operating Systems]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[nautilus]]></category>

		<guid isPermaLink="false">http://www.doknowevil.net/?p=562</guid>
		<description><![CDATA[Intro Previously, I had written about enqueuing files with nautilus scripts. Since then, I have learned (and forgotten about) nautilus-actions. Which is a similar way to attack the issue but it using a more intuitive and decoration approach, as well as having the ability to be on the first level of the context menu hierarchy.]]></description>
			<content:encoded><![CDATA[<h2>Intro</h2>
<p>Previously, I had <a href="http://www.doknowevil.net/2009/11/08/using-nautilus-scripting-abilities-to-integrate-right-click-file-enqueues-with-mocp">written about enqueuing files with nautilus scripts</a>.  Since then, I have learned (and forgotten about) nautilus-actions.  Which is a similar way to attack the issue but it using a more intuitive and decoration approach, as well as having the ability to be on the first level of the context menu hierarchy.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="kw2">sudo</span> <span class="kw2">apt-get</span> <span class="kw2">install</span> nautilus-actions
nautilus-actions-config</pre></div></div>

<p>The approach to getting the example of enqueuing files to mocp accomplished is a bit different using this approach as you don&#8217;t need to go through the script as you did before (though you can if you want, it&#8217;s an unnecessary step).  Here, as my screenshot shows, I directly call mocp from /usr/bin with the -a flag and use the $M variable the legend provided me with to pass a list of files and their full paths to mocp.</p>
<p><a href="http://www.doknowevil.net/wp-content/uploads/2010/05/enqueue-to-moc-with-nautilus-actions.png" rel="shadowbox[post-562];player=img;"><img src="http://www.doknowevil.net/wp-content/uploads/2010/05/enqueue-to-moc-with-nautilus-actions-1024x640.png" alt="" title="enqueue-to-moc-with-nautilus-actions" width="1024" height="640" class="alignnone size-large wp-image-570" /></a></p>
<p>You&#8217;ll also want to change the conditions on the Conditions tab.  I set it to allow multiple files from both folders and files.  The default is to allow only a single file.</p>
<p><a href="http://www.doknowevil.net/wp-content/uploads/2010/05/nautilus-actions_conditions.png" rel="shadowbox[post-562];player=img;"><img src="http://www.doknowevil.net/wp-content/uploads/2010/05/nautilus-actions_conditions.png" alt="" title="nautilus-actions_conditions" width="460" height="430" class="alignnone size-full wp-image-571" /></a></p>
<h2>More</h2>
<p>This article was inspired by <a href="http://www.hilltopyodeler.com/blog/?p=279">Making Life Easier With Scripts For Nautilus</a>. If you&#8217;re interested in this article, you&#8217;ll probably also like <a href="http://www.doknowevil.net/2010/05/04/apackages-for-nautilus-you-wish-were-installed-by-default-in-ubuntu">my article about nautilus packages you wish were installed by default in ubuntu</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doknowevil.net/2010/05/04/adding-context-right-click-menu-options-to-nautilus-ubuntus-default-file-manager-with-nautilus-actions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The &#8220;easy&#8221; way to listen to internet radio in Ubuntu</title>
		<link>http://www.doknowevil.net/2009/07/15/the-easy-way-to-listen-to-internt-radio-in-ubuntu/</link>
		<comments>http://www.doknowevil.net/2009/07/15/the-easy-way-to-listen-to-internt-radio-in-ubuntu/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 02:13:21 +0000</pubDate>
		<dc:creator>Tyler Mulligan</dc:creator>
				<category><![CDATA[Application Management]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://www.doknowevil.net/?p=450</guid>
		<description><![CDATA[I started with rhythmbox like most new Ubuntu users. It seemed nice enough but not in the area I was concerned with, internet radio. I tried out many players but was disappointed with different areas of different players. From Ubuntu 8.04 to 8.10 I was using the &#8220;good&#8221; Amarok (for KDE 3.5). Disappointed by the]]></description>
			<content:encoded><![CDATA[<p>I started with rhythmbox like most new Ubuntu users.  It seemed nice enough but not in the area I was concerned with, internet radio.  I tried out many players but was disappointed with different areas of different players.  From Ubuntu 8.04 to 8.10 I was using the &#8220;good&#8221; Amarok (for KDE 3.5).  Disappointed by the exclusion of that version in Ubuntu Jaunty 9.04 and unimpressed with workarounds like the PPA&#8217;s, I decided to play the field.  I came across Exaile, which I&#8217;ve blogged about in the past.  It&#8217;s a good enough player&#8230; most of the time.  It crashed too often for my likings and I&#8217;m getting sick of pkilling it.</p>
<p>It struck me today that I needed a simplier more streamlined solution for my simple needs.  I needed a console application.  Through  a little research, I found moc, which happens to play shoutcast streams as I&#8217;ve become accustom to.</p>
<p>I then proceeded to set myself the following way:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="kw2">sudo</span> <span class="kw2">apt-get</span> <span class="kw2">install</span> moc
<span class="kw2">mkdir</span> <span class="re5">-p</span> ~<span class="sy0">/</span>Music<span class="sy0">/</span>internet_radio <span class="sy0">&amp;&amp;</span> <span class="kw3">cd</span> ~<span class="sy0">/</span>Music<span class="sy0">/</span>internet_radio
<span class="kw2">wget</span> <span class="re5">-r</span> <span class="re5">-l2</span> <span class="re5">-nd</span> <span class="re5">-Nc</span> -A.pls http:<span class="sy0">//</span>www.di.fm<span class="sy0">/</span>index.php
<span class="kw1">for</span> <span class="kw2">file</span> <span class="kw1">in</span> <span class="sy0">*</span>.pls; <span class="kw1">do</span> mocp <span class="re5">-a</span> <span class="re1">$file</span>; <span class="kw1">done</span>
mocp</pre></div></div>

<p>1) Installed moc<br />
2) created a directory to download all the playlists from di.fm (since this is the station I listen to most often)<br />
3) wget all the playlists<br />
4) add them all to moc<br />
5) start moc and [tab] to the play list side, enter to play</p>
<p><a href="http://www.doknowevil.net/wp-content/uploads/2009/07/screenshot-detrateshobo-music-internet_radio.png" rel="shadowbox[post-450];player=img;"><img src="http://www.doknowevil.net/wp-content/uploads/2009/07/screenshot-detrateshobo-music-internet_radio-500x283.png" alt="screenshot-detrateshobo-music-internet_radio" title="screenshot-detrateshobo-music-internet_radio" width="500" height="283" class="alignnone size-thumbnail wp-image-453" /></a></p>
<pre>  enter  -- starts playing
  s      -- stops playing
  n      -- plays next item from the playlist
  b      -- plays previous item from the playlist
  space  -- pause
  p      -- pause

  S      -- plays at random
  R      -- repeats the same song in a loop,
	    Next (X button below) must be OFF
  X      -- switches to play sequentially
  o      -- plays a file from the Internet
  u      -- moves playlist item up
  j      -- moves playlist item down
  Ctrl+u -- adds the URL to the playlist
  g      -- searches marked string in file names
  /      -- searches marked string in file names

  r      -- rereads the directory
  T      -- switches to the theme selection menu
  f      -- toggles display mode of song titles
  TAB    -- switches marker bar between the playlist
	    and the file manager panels
  l      -- switches between displaying the playlist
            or the file manager panel
  P      -- switches full path in the playlist
  H      -- toggles hidden files view
  Ctrl-t -- toggles song duration time
  Ctrl-f -- toggles format file view
  m      -- moves to directory entered in config file
  G      -- moves to directory with currently played file
  i      -- moves to marked directory
  U      -- moves to upper directory
  a      -- adds a file to the playlist
  A      -- adds a directory recursively to the playlist
  C      -- clears the playlist
  V      -- saves the playlist
  d      -- removes marked item from the playlist
  Y      -- removes all empty items from the playlist

  < -- decreases volume by 1%
  ,      -- decreases volume by 5%
  >      -- increases volume by 1%
  .      -- increases volume by 5%

  x      -- toggles the mixer channel
  ?      -- shows help

  !      -- goes to a fast dir 1 (set in config file)
  @      -- goes to a fast dir 2
  #      -- goes to a fast dir 3
  $      -- goes to a fast dir 4
  %      -- goes to a fast dir 5
  ^      -- goes to a fast dir 6
  &#038;      -- goes to a fast dir 7
  *      -- goes to a fast dir 8
  (      -- goes to a fast dir 9
  )      -- goes to a fast dir 10

  F1     -- executes ExecCommand1 (set in config file)
  F2     -- executes ExecCommand2
  F3     -- executes ExecCommand3
  F4     -- executes ExecCommand4
  F5     -- executes ExecCommand5
  F6     -- executes ExecCommand6
  F7     -- executes ExecCommand7
  F8     -- executes ExecCommand8
  F9     -- executes ExecCommand9
  F10    -- executes ExecCommand10</pre>
<p>Above commands from <a href="http://polishlinux.org/apps/cli/moc-audio-player-advanced-tricks/" target="_blank">polish linux&#8217;s article on moc audo player</a>, great resource.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doknowevil.net/2009/07/15/the-easy-way-to-listen-to-internt-radio-in-ubuntu/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>whygitisbetterthanx.com &#8211; Explaining git</title>
		<link>http://www.doknowevil.net/2009/05/17/whygitisbetterthanxcom-explaining-git/</link>
		<comments>http://www.doknowevil.net/2009/05/17/whygitisbetterthanxcom-explaining-git/#comments</comments>
		<pubDate>Mon, 18 May 2009 04:23:37 +0000</pubDate>
		<dc:creator>Tyler Mulligan</dc:creator>
				<category><![CDATA[Application Management]]></category>

		<guid isPermaLink="false">http://www.doknowevil.net/?p=435</guid>
		<description><![CDATA[Trying to avoid looking like a fanboy but whygitisbetterthanx.com is a really well done website explaining the pros of Git version control.]]></description>
			<content:encoded><![CDATA[<p>Trying to avoid looking like a fanboy but <a href="http://whygitisbetterthanx.com/">whygitisbetterthanx.com</a> is a really well done website explaining the pros of <a href="http://git-scm.com/" target="_blank">Git</a> version control.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doknowevil.net/2009/05/17/whygitisbetterthanxcom-explaining-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cool XUL tricks with Firefox using Stylish</title>
		<link>http://www.doknowevil.net/2009/04/13/cool-firefox-xul-tricks-with-firefox/</link>
		<comments>http://www.doknowevil.net/2009/04/13/cool-firefox-xul-tricks-with-firefox/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 14:25:12 +0000</pubDate>
		<dc:creator>Tyler Mulligan</dc:creator>
				<category><![CDATA[Application Management]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://www.doknowevil.net/?p=303</guid>
		<description><![CDATA[Firefox is an excellent browser that runs on an open, extendable platform by Mozilla which many users have improved through the creation of extensions, themes and add-ons. As a web developer / design and code hobbyist, I&#8217;m always looking for ways to give myself more power out of my browser and communicate ideas visually in]]></description>
			<content:encoded><![CDATA[<p>Firefox is an excellent browser that runs on <a href="http://en.wikipedia.org/wiki/Mozilla_application_framework" target="_blank">an open, extendable platform by Mozilla</a> which many users have improved through the creation of extensions, themes and add-ons.  As a web developer / design and code hobbyist, I&#8217;m always looking for ways to give myself more power out of my browser and communicate ideas visually in the most efficient way.  Using <a href="https://addons.mozilla.org/en-US/firefox/addon/2108">Stylish</a> (a program that runs css on top of userStyles.css), I&#8217;ve found I can not only edit the looks of webpages with CSS but XUL, <a href="chrome://browser/content/browser.xul" target="_blank">the building language of Firefox</a>.  This allows for some nice little enhancements.</p>
<h2>Align Bookmarks to the Top Right</h2>
<p>Here&#8217;s one I brewed up myself spawning from an discussion on <a href="http://en.wikipedia.org/wiki/Internet_Relay_Chat" target="_blank">IRC</a> where someone pointed out the clutter I had going on in my bookmarks toolbar, I set out to condense my collection.</p>
<p>The plan was to align a few folders to the top right of my browser at the same level as my file menu and remove the bookmarks toolbar.  Sounds easy enough right?  Well.. perhaps it&#8217;s my ignorance in the XUL / CSS relationship that doesn&#8217;t allow me to float boxes but I actually ended up doing a strange little trick to make this successful.</p>
<p><a href="http://www.doknowevil.net/wp-content/uploads/2009/04/screenshot5.png" rel="shadowbox[post-303];player=img;"><img src="http://www.doknowevil.net/wp-content/uploads/2009/04/screenshot5-300x29.png" alt="screenshot5" title="screenshot5" width="300" height="29" class="alignnone size-medium wp-image-304" /></a></p>
<p>To figure out how to get it to align to the right, I had to first figure out some class and id names.  That I started <a href="https://developer.mozilla.org/en/CSS/-moz-box-direction" target="_blank">trying different</a> <a href="https://developer.mozilla.org/En/CSS/Direction" target="_blank">atrributes with</a>&#8230;.</p>
<p><a href="http://www.doknowevil.net/wp-content/uploads/2009/04/screenshot-mozilla-firefox-dom-inspector.png" rel="shadowbox[post-303];player=img;"><img src="http://www.doknowevil.net/wp-content/uploads/2009/04/screenshot-mozilla-firefox-dom-inspector-300x177.png" alt="screenshot-mozilla-firefox-dom-inspector" title="screenshot-mozilla-firefox-dom-inspector" width="300" height="177" class="alignnone size-medium wp-image-305" /></a></p>
<p>Until I came up with the code below.</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="coMULTI">/* Align Bookmarks to the top right of Firefox
   Tyler Mulligans www.doknowevil.net
&nbsp;
-- Right click the your file menu and click customize to drag around your bookmarks.
*/</span>
&nbsp;
<span class="co1">@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);</span>
&nbsp;
<span class="re0">#toolbar-menubar</span> <span class="br0">&#123;</span> <span class="kw1">direction</span><span class="sy0">:</span>rtl !important<span class="sy0">;</span> <span class="br0">&#125;</span>
<span class="re0">#toolbar-menubar</span> <span class="re0">#menubar-items</span><span class="sy0">,</span> <span class="re0">#toolbar-menubar</span> <span class="re1">.bookmarks-toolbar-items</span> <span class="br0">&#123;</span> <span class="kw1">direction</span><span class="sy0">:</span><span class="kw2">ltr</span> !important<span class="sy0">;</span> <span class="br0">&#125;</span></pre></div></div>

<p>Using that code in stylish, I right clicked my file menu, click customize and dragged my file menu, bookmarks and loader to their appropriate places.</p>
<p><a href="http://www.doknowevil.net/wp-content/uploads/2009/04/right_click_file_menu.png" rel="shadowbox[post-303];player=img;"><img src="http://www.doknowevil.net/wp-content/uploads/2009/04/right_click_file_menu-300x222.png" alt="right_click_file_menu" title="right_click_file_menu" width="300" height="222" class="alignnone size-medium wp-image-306" /></a></p>
<p><a href="http://www.doknowevil.net/wp-content/uploads/2009/04/drag_bookmarks.png" rel="shadowbox[post-303];player=img;"><img src="http://www.doknowevil.net/wp-content/uploads/2009/04/drag_bookmarks-300x222.png" alt="drag_bookmarks" title="drag_bookmarks" width="300" height="222" class="alignnone size-medium wp-image-307" /></a></p>
<h2>Fixing webpages that don&#8217;t explicitly define the background and foreground as white and black</h2>
<p>I changed my default background color so that I&#8217;m not blinded by white when I open a new blank tab.  Unfortunately many web developers assume that users have a white background with black text and don&#8217;t bother to explicitly define them.  I use the script below to fix 95% of these pages&#8230; some just use inheritently bad design techniques like defining their background color in the html tag (something w3c recommended you DON&#8217;T do in HTML.  While technically okay in XHTML, I think it&#8217;s better to use the first VISUAL tag on the page.  After the HTML tag you have a head&#8230; and title.. etc, which technically inherit the HTML tag settings.</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="co1">@-moz-document url-prefix(http://), url-prefix(https://) { body { background-color:#fff; color:#000; } }</span></pre></div></div>

<h2>Theme specific enhancements</h2>
<p>I use an unusual brown theme and I&#8217;ve do what I can to match and extend my applications.  I borrowed and enhanced the scripts below</p>
<h3>Tabs / Tab Bar</h3>
<p>A darker background and more prominent selected tab (pictured above)</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="co1">@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);</span>
&nbsp;
<span class="br0">&#91;</span>class<span class="sy0">=</span><span class="st0">&quot;close-button tabs-closebutton&quot;</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="re1">.tabbrowser-tabs</span> tab<span class="br0">&#91;</span>selected<span class="sy0">=</span><span class="st0">&quot;true&quot;</span><span class="br0">&#93;</span> <span class="br0">&#123;</span>
  -moz-appearance<span class="sy0">:</span> <span class="kw2">none</span> !important<span class="sy0">;</span>
  <span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#654C30</span> !important<span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
.tabbrowser-tab<span class="br0">&#91;</span>selected<span class="sy0">=</span><span class="st0">&quot;true&quot;</span><span class="br0">&#93;</span> <span class="re1">.tab-text</span> <span class="br0">&#123;</span>
  <span class="kw1">color</span><span class="sy0">:</span> <span class="kw2">white</span> !important<span class="sy0">;</span>
  -moz-opacity<span class="sy0">:</span> .85 !important<span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
.tabbrowser-tab<span class="br0">&#91;</span>selected<span class="sy0">=</span><span class="st0">&quot;true&quot;</span><span class="br0">&#93;</span><span class="re2">:hover </span><span class="br0">&#123;</span>
  -moz-opacity<span class="sy0">:</span> <span class="nu0">1</span> !important<span class="sy0">;</span>
  <span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#755533</span> !important<span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="re1">.tabbrowser-tabs</span> <span class="br0">&#123;</span>
  <span class="kw1">border-top</span><span class="sy0">:</span><span class="re3">1px</span> <span class="kw2">solid</span> <span class="re0">#5F4A2A</span><span class="sy0">;</span>
  <span class="kw1">border-bottom</span><span class="sy0">:</span><span class="re3">2px</span> <span class="kw2">solid</span> <span class="re0">#503C1E</span><span class="sy0">;</span>
  <span class="kw1">background-color</span><span class="sy0">:</span><span class="re0">#120F0B</span> !important<span class="sy0">;</span>
  <span class="kw1">padding</span><span class="sy0">:</span><span class="re3">5px</span> <span class="re3">1px</span> <span class="nu0">0</span> <span class="re3">1px</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div>

<h3>Awesome Bar</h3>
<p>Added colors to match my theme.</p>
<p><a href="http://www.doknowevil.net/wp-content/uploads/2009/04/awesome_bar.png" rel="shadowbox[post-303];player=img;"><img src="http://www.doknowevil.net/wp-content/uploads/2009/04/awesome_bar-434x400.png" alt="awesome_bar" title="awesome_bar" width="434" height="400" class="alignnone size-thumbnail wp-image-308" /></a></p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="coMULTI">/*
 _________________________________________________________________________
|                  |                                                      |
|          Title:  |  Awesome Bar Background Color Based on Type (WOW)    |
|    Description:  |  Different Colors based on Bookmark, tag, or regular |
|         Author:  |  -=Ben=-                                             |
|   Date Created:  |  July 3, 2008                                        |
|   Last Updated:  |  October 7, 2008                                     |
|        Version:  |  1.0.0.3                                             |
|__________________|______________________________________________________|
&nbsp;
*/</span>
&nbsp;
&nbsp;
<span class="co1">@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);</span>
&nbsp;
&nbsp;
.autocomplete-richlistitem<span class="br0">&#91;</span>type<span class="sy0">=</span><span class="st0">&quot;bookmark&quot;</span><span class="br0">&#93;</span> <span class="coMULTI">/*Blue*/</span>
<span class="br0">&#123;</span>
  <span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#45586A</span><span class="sy0">;</span>  <span class="coMULTI">/*#E3FCFE;*/</span>
  <span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#fff</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
.autocomplete-richlistitem<span class="br0">&#91;</span>type<span class="sy0">=</span><span class="st0">&quot;favicon&quot;</span><span class="br0">&#93;</span> <span class="coMULTI">/*Green*/</span>
<span class="br0">&#123;</span>
  <span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#556A45</span><span class="sy0">;</span>  <span class="coMULTI">/*#E3FEE5;*/</span>
  <span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#fff</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
.autocomplete-richlistitem<span class="br0">&#91;</span>type<span class="sy0">=</span><span class="st0">&quot;tag&quot;</span><span class="br0">&#93;</span> <span class="coMULTI">/*Yellow*/</span>
<span class="br0">&#123;</span>
  <span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#6A5745</span><span class="sy0">;</span>
  <span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#fff</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="re1">.autocomplete-richlistitem</span><span class="re2"><span class="sy0">:</span>focus
</span><span class="br0">&#123;</span>
  <span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#0A246A</span><span class="sy0">;</span>
  <span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#FFFFFF</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div>

<p>If you enjoy my theme, you can download a beta I&#8217;ve been working on here: http://z.nexuizninjaz.com/linux/themes/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doknowevil.net/2009/04/13/cool-firefox-xul-tricks-with-firefox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu Window Management with Multiple Monitors, Window Effects and Default File Associations</title>
		<link>http://www.doknowevil.net/2008/11/25/ubuntu-window-management-with-multiple-monitors-window-effects-and-default-file-associations/</link>
		<comments>http://www.doknowevil.net/2008/11/25/ubuntu-window-management-with-multiple-monitors-window-effects-and-default-file-associations/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 02:25:38 +0000</pubDate>
		<dc:creator>Tyler Mulligan</dc:creator>
				<category><![CDATA[Application Management]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Desktop Mods]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[dual screen]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[multiple monitors]]></category>

		<guid isPermaLink="false">http://www.doknowevil.net/2008/11/25/ubuntu-window-management-with-multiple-monitors-window-effects-and-default-file-associations/</guid>
		<description><![CDATA[Multiple Monitors Window Management in Ubuntu Moving your applications from one monitor to the next with hotkeys I&#8217;ve been using multiple monitors for a while now, Starting with a 17&#8243; CRT with a 19&#8243; CRT and moving up to two 19&#8243; LCD, then 3, then temporarily one wide screen and back to 2. Something I]]></description>
			<content:encoded><![CDATA[<h3>Multiple Monitors Window Management in Ubuntu</h3>
<h4>Moving your applications from one monitor to the next with hotkeys</h4>
<p>I&#8217;ve been using multiple monitors for a while now, Starting with a 17&#8243; CRT with a 19&#8243; CRT and moving up to two 19&#8243; LCD, then 3, then temporarily one wide screen and back to 2.  Something I always loved having as a utility in <a href="http://www.realtimesoft.com/ultramon/" title="Ultramon - multiple monitors in Windows" target="_blank">ultramon</a> that I couldn&#8217;t find in Ubuntu (Gnome) or any window manager for that matter, was the ability to move applications from monitor to monitor.  I had assumed the search futile until I was searching about some questions I had concerning <a ref="http://compiz-fusion.org/" title="Compiz-fusion - Window Effects in Linux" target="_blank">Compiz-fusion</a> with dual monitors and I came about <a href="http://ubuntuforums.org/showthread.php?t=815925" title="Multiple monitor window handling in Linux">this thread on Ubuntu forums</a> which brightened up my day. A fellow named gfixler posted a bash script that utilizes command line applications to move the windows.</p>
<p>For you multi-monitor users seeking salvation from removing your hand from the keyboard to move your application from one monitor to another, here&#8217;s the skinny on getting it setup using compiz-fusion, aka Advanced Desktop Effects, to set my keybinds.</p>
<p>1. Open a terminal and setup your prerequisites with apt-get:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="kw2">sudo</span> <span class="kw2">apt-get</span> <span class="kw2">install</span> wmctrl xprop xwininfo</pre></div></div>

<p>If you get errors about x11-utils, just ignore them, this package will handle your needs.</p>
<p>2. Next, lets put the script somewhere you can call it, say &#8220;<b>~/scripts</b>&#8221;</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="kw2">mkdir</span> ~<span class="sy0">/</span>scripts <span class="sy0">&amp;&amp;</span> <span class="kw3">cd</span> ~<span class="sy0">/</span>scripts <span class="sy0">&amp;&amp;</span> <span class="kw2">touch</span> movewin.sh <span class="sy0">&amp;&amp;</span> <span class="kw2">chmod</span> +x movewin.sh <span class="sy0">&amp;&amp;</span> gedit movewin.sh</pre></div></div>

<p>2. Paste the following code, find the first function &#8220;<b>getNumberOfMonitors</b>&#8221; and configure it to the number of monitors you have (default 2).</p>
<div style="height:300px;overflow:auto;padding:2px;">

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="co0">#!/bin/bash</span>
<span class="co0"># swap_monitor.sh (original version)</span>
<span class="co0"># Moves the active window to the other screen of a dual-screen Xinerama setup.</span>
<span class="co0">#</span>
<span class="co0"># movewin.sh (modified version)</span>
<span class="co0"># allows movement of windows left and right between multiple monitors</span>
<span class="co0">#</span>
<span class="co0"># Requires: wmctrl, xprop, xwininfo</span>
<span class="co0">#</span>
<span class="co0"># Original Author: Raphael Wimmer</span>
<span class="co0"># raphman@gmx.de</span>
<span class="co0">#</span>
<span class="co0"># Modified by: Gary Fixler</span>
<span class="co0"># gfixler+bash@gmail.com</span>
&nbsp;
<span class="kw1">function</span> getNumberOfMonitors
<span class="br0">&#123;</span>
    <span class="co0"># simply must be hardcoded</span>
    <span class="co0"># e.g. MatroxTripleHead2Go can service 3 screens,</span>
    <span class="co0"># but appears as only one monitor to the computer</span>
&nbsp;
    <span class="co0"># change to your number of monitors</span>
    <span class="kw3">echo</span> <span class="nu0">2</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">function</span> getMonitorWidth
<span class="br0">&#123;</span>
    <span class="re2">numberOfMonitors</span>=$<span class="br0">&#40;</span>getNumberOfMonitors<span class="br0">&#41;</span>
    <span class="re2">monitorLine</span>=$<span class="br0">&#40;</span>xwininfo <span class="re5">-root</span> <span class="sy0">|</span> <span class="kw2">grep</span> <span class="st0">&quot;Width&quot;</span><span class="br0">&#41;</span>
    <span class="re2">monitorWidth</span>=$<span class="br0">&#40;</span><span class="br0">&#40;</span><span class="co1">${monitorLine:8}</span><span class="sy0">/</span><span class="re1">$numberOfMonitors</span> <span class="br0">&#41;</span><span class="br0">&#41;</span>
    <span class="kw3">echo</span> <span class="re1">$monitorWidth</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">function</span> getActiveWindowID
<span class="br0">&#123;</span>
    <span class="re2">activeWinLine</span>=$<span class="br0">&#40;</span>xprop <span class="re5">-root</span> <span class="sy0">|</span> <span class="kw2">grep</span> <span class="st0">&quot;_NET_ACTIVE_WINDOW(WINDOW)&quot;</span><span class="br0">&#41;</span>
    <span class="re2">activeWinID</span>=<span class="st0">&quot;<span class="es3">${activeWinLine:40}</span>&quot;</span>
    <span class="kw3">echo</span> <span class="re1">$activeWinID</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">function</span> getActiveWindowHorizontalPosition
<span class="br0">&#123;</span>
    <span class="re2">activeWinID</span>=$<span class="br0">&#40;</span>getActiveWindowID<span class="br0">&#41;</span>
    <span class="re2">xPosLine</span>=$<span class="br0">&#40;</span>xwininfo <span class="re5">-id</span> <span class="re1">$activeWinID</span> <span class="sy0">|</span> <span class="kw2">grep</span> <span class="st0">&quot;Absolute upper-left X&quot;</span><span class="br0">&#41;</span>
    <span class="re2">xPos</span>=<span class="co1">${xPosLine:25}</span>
    <span class="kw3">echo</span> <span class="re1">$xPos</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">function</span> getActiveWindowWidth
<span class="br0">&#123;</span>
    <span class="re2">activeWinID</span>=$<span class="br0">&#40;</span>getActiveWindowID<span class="br0">&#41;</span>
    <span class="re2">xWidthLine</span>=$<span class="br0">&#40;</span>xwininfo <span class="re5">-id</span> <span class="re1">$activeWinID</span> <span class="sy0">|</span> <span class="kw2">grep</span> <span class="st0">&quot;Width&quot;</span><span class="br0">&#41;</span>
    <span class="re2">xWidth</span>=<span class="co1">${xWidthLine:8}</span>
    <span class="kw3">echo</span> <span class="re1">$xWidth</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">function</span> getActiveWindowCurrentMonitor
<span class="br0">&#123;</span>
    <span class="re2">numberOfMonitors</span>=$<span class="br0">&#40;</span>getNumberOfMonitors<span class="br0">&#41;</span>
    <span class="re2">monitorWidth</span>=$<span class="br0">&#40;</span>getMonitorWidth<span class="br0">&#41;</span>
    <span class="re2">activeWinID</span>=$<span class="br0">&#40;</span>getActiveWindowID<span class="br0">&#41;</span>
    <span class="re2">xPos</span>=$<span class="br0">&#40;</span>getActiveWindowHorizontalPosition<span class="br0">&#41;</span>
    <span class="re2">i</span>=<span class="st0">&quot;0&quot;</span>
    <span class="kw1">while</span> <span class="br0">&#91;</span> <span class="re1">$xPos</span> <span class="re5">-gt</span> <span class="re1">$monitorWidth</span> <span class="br0">&#93;</span>
    <span class="kw1">do</span>
        <span class="re2">xPos</span>=$<span class="br0">&#91;</span><span class="re1">$xPos</span>-<span class="re1">$monitorWidth</span><span class="br0">&#93;</span>
        <span class="re2">i</span>=$<span class="br0">&#91;</span><span class="re1">$i</span>+<span class="nu0">1</span><span class="br0">&#93;</span>
    <span class="kw1">done</span>
    <span class="kw3">echo</span> <span class="re1">$i</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">function</span> getActiveWindowPositionOneMonitorToTheLeft
<span class="br0">&#123;</span>
    <span class="re2">monitorWidth</span>=$<span class="br0">&#40;</span>getMonitorWidth<span class="br0">&#41;</span>
    <span class="re2">currentMonitor</span>=$<span class="br0">&#40;</span>getActiveWindowCurrentMonitor<span class="br0">&#41;</span>
    <span class="re2">activeWinID</span>=$<span class="br0">&#40;</span>getActiveWindowID<span class="br0">&#41;</span>
    <span class="re2">xPos</span>=$<span class="br0">&#40;</span>getActiveWindowHorizontalPosition<span class="br0">&#41;</span>
    <span class="re2">xPos</span>=$<span class="br0">&#91;</span><span class="re1">$xPos</span>-<span class="re1">$monitorWidth</span><span class="br0">&#93;</span>
    <span class="kw3">echo</span> <span class="re1">$xPos</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">function</span> getActiveWindowPositionOneMonitorToTheRight
<span class="br0">&#123;</span>
    <span class="re2">monitorWidth</span>=$<span class="br0">&#40;</span>getMonitorWidth<span class="br0">&#41;</span>
    <span class="re2">numberOfMonitors</span>=$<span class="br0">&#40;</span>getNumberOfMonitors<span class="br0">&#41;</span>
    <span class="re2">currentMonitor</span>=$<span class="br0">&#40;</span>getActiveWindowCurrentMonitor<span class="br0">&#41;</span>
    <span class="re2">activeWinID</span>=$<span class="br0">&#40;</span>getActiveWindowID<span class="br0">&#41;</span>
    <span class="re2">xPos</span>=$<span class="br0">&#40;</span>getActiveWindowHorizontalPosition<span class="br0">&#41;</span>
    <span class="re2">xPos</span>=$<span class="br0">&#91;</span><span class="re1">$xPos</span>+<span class="re1">$monitorWidth</span><span class="br0">&#93;</span>
    <span class="kw3">echo</span> <span class="re1">$xPos</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">function</span> changeActiveWindowMonitor
<span class="br0">&#123;</span>
    <span class="re2">activeWinID</span>=$<span class="br0">&#40;</span>getActiveWindowID<span class="br0">&#41;</span>
    <span class="kw1">if</span> <span class="br0">&#91;</span> $<span class="nu0">1</span> <span class="re5">-eq</span> <span class="st0">&quot;0&quot;</span> <span class="br0">&#93;</span>
    <span class="kw1">then</span>
        <span class="re2">newXPos</span>=$<span class="br0">&#40;</span>getActiveWindowPositionOneMonitorToTheLeft<span class="br0">&#41;</span>
        <span class="re2">newXPos</span>=$<span class="br0">&#91;</span><span class="re1">$newXPos</span>-<span class="nu0">5</span><span class="br0">&#93;</span>
    <span class="kw1">else</span>
        <span class="re2">newXPos</span>=$<span class="br0">&#40;</span>getActiveWindowPositionOneMonitorToTheRight<span class="br0">&#41;</span>
        <span class="re2">newXPos</span>=$<span class="br0">&#91;</span><span class="re1">$newXPos</span>-<span class="nu0">5</span><span class="br0">&#93;</span>
    <span class="kw1">fi</span>
&nbsp;
    <span class="re2">winState</span>=$<span class="br0">&#40;</span>xprop <span class="re5">-id</span> <span class="co1">${activeWinID}</span> <span class="sy0">|</span> <span class="kw2">grep</span> <span class="st0">&quot;_NET_WM_STATE(ATOM)&quot;</span> <span class="br0">&#41;</span>
&nbsp;
    <span class="kw1">if</span> <span class="br0">&#91;</span><span class="br0">&#91;</span> <span class="sy0">`</span><span class="kw3">echo</span> <span class="co1">${winState}</span> <span class="sy0">|</span> <span class="kw2">grep</span> <span class="st0">&quot;_NET_WM_STATE_MAXIMIZED_HORZ&quot;</span><span class="sy0">`</span> <span class="sy0">!</span>= <span class="st0">&quot;&quot;</span> <span class="br0">&#93;</span><span class="br0">&#93;</span>
        <span class="kw1">then</span>
        <span class="re2">maxH</span>=<span class="nu0">1</span>
        wmctrl <span class="re5">-i</span> <span class="re5">-r</span> <span class="co1">${activeWinID}</span> <span class="re5">-b</span> remove,maximized_horz
    <span class="kw1">fi</span>
&nbsp;
    <span class="kw1">if</span> <span class="br0">&#91;</span><span class="br0">&#91;</span> <span class="sy0">`</span><span class="kw3">echo</span> <span class="co1">${winState}</span> <span class="sy0">|</span> <span class="kw2">grep</span> <span class="st0">&quot;_NET_WM_STATE_MAXIMIZED_VERT&quot;</span><span class="sy0">`</span> <span class="sy0">!</span>= <span class="st0">&quot;&quot;</span> <span class="br0">&#93;</span><span class="br0">&#93;</span>
        <span class="kw1">then</span>
        <span class="re2">maxV</span>=<span class="nu0">1</span>
        wmctrl <span class="re5">-i</span> <span class="re5">-r</span> <span class="co1">${activeWinID}</span> <span class="re5">-b</span> remove,maximized_vert
    <span class="kw1">fi</span>
&nbsp;
    <span class="kw1">if</span> <span class="br0">&#91;</span><span class="br0">&#91;</span> <span class="sy0">`</span><span class="kw3">echo</span> <span class="co1">${winState}</span> <span class="sy0">|</span> <span class="kw2">grep</span> <span class="st0">&quot;_NET_WM_STATE_FULLSCREEN&quot;</span><span class="sy0">`</span> <span class="sy0">!</span>= <span class="st0">&quot;&quot;</span> <span class="br0">&#93;</span><span class="br0">&#93;</span>
        <span class="kw1">then</span>
        <span class="re2">fulls</span>=<span class="nu0">1</span>
        wmctrl <span class="re5">-i</span> <span class="re5">-r</span> <span class="co1">${activeWinID}</span> <span class="re5">-b</span> remove,fullscreen
    <span class="kw1">fi</span>
&nbsp;
    <span class="co0"># move window (finally)</span>
    wmctrl <span class="re5">-i</span> <span class="re5">-r</span> <span class="co1">${activeWinID}</span> <span class="re5">-e</span> <span class="nu0">0</span>,<span class="co1">${newXPos}</span>,-<span class="nu0">1</span>,-<span class="nu0">1</span>,-<span class="nu0">1</span>
&nbsp;
    <span class="co0"># restore maximization</span>
    <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="co1">${maxV}</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> wmctrl <span class="re5">-i</span> <span class="re5">-r</span> <span class="co1">${activeWinID}</span> <span class="re5">-b</span> add,maximized_vert
    <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="co1">${maxH}</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> wmctrl <span class="re5">-i</span> <span class="re5">-r</span> <span class="co1">${activeWinID}</span> <span class="re5">-b</span> add,maximized_horz
    <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="co1">${fulls}</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> wmctrl <span class="re5">-i</span> <span class="re5">-r</span> <span class="co1">${activeWinID}</span> <span class="re5">-b</span> add,fullscreen
&nbsp;
    <span class="co0"># raise window (seems to be necessary sometimes)</span>
    wmctrl <span class="re5">-i</span> <span class="re5">-a</span> <span class="co1">${activeWinID}</span>
&nbsp;
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">function</span> moveActiveWindowOneMonitorToTheLeft
<span class="br0">&#123;</span>
    changeActiveWindowMonitor <span class="nu0">0</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">function</span> moveActiveWindowOneMonitorToTheRight
<span class="br0">&#123;</span>
    changeActiveWindowMonitor <span class="nu0">1</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="st0">&quot;$1&quot;</span>
&nbsp;
<span class="kw3">exit</span> <span class="nu0">0</span></pre></div></div>

</div>
<p>3. Setup your hot keys with compiz-fusion.  Go to System >> Preferences >> Advanced Desktop Effects.  Inside &#8220;<b>General Options</b>&#8220;, click on the command tab (I apologize for my heinous blue links).</p>
<p><a href='http://www.doknowevil.net/wp-content/uploads/2008/11/2008-11-25-205445_833x464_scrot.png' rel='shadowbox[post-247];player=img;' title='Compiz-fusion Hotkeys 1'><img src='http://www.doknowevil.net/wp-content/uploads/2008/11/2008-11-25-205445_833x464_scrot.png' alt='Compiz-fusion Hotkeys 1' /></a></p>
<p><a href='http://www.doknowevil.net/wp-content/uploads/2008/11/2008-11-25-210327_900x435_scrot.png' title='2008-11-25-210327_900x435_scrot.png' rel='shadowbox[post-247];player=img;'><img src='http://www.doknowevil.net/wp-content/uploads/2008/11/2008-11-25-210327_900x435_scrot.png' alt='2008-11-25-210327_900x435_scrot.png' /></a></p>
<p>Use</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;">scripts<span class="sy0">/</span>.<span class="sy0">/</span>movewin.sh moveActiveWindowOneMonitorToTheRight</pre></div></div>

<p>and</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;">scripts<span class="sy0">/</span>.<span class="sy0">/</span>movewin.sh moveActiveWindowOneMonitorToTheLeft</pre></div></div>

<p>respectively</p>
<h3>Per Application Window Effects in Ubuntu</h3>
<h4>Bring character and tickle your soul with per application window effects</h4>
<p>Another cool feature Compiz-fusion has is window animations.  My friend <a href="http://www.realhumanmoments" title="James Lindsay" target="_blank">James Lindsay</a> recently reminded me about Window Effects&#8230; which when I first install Ubuntu on my laptop, I experimented my butt off&#8230; but being a laptop&#8230; I just used simple ones I&#8217;d turn off half the time anyway.  He asked me why I don&#8217;t use them on my desktop and I didn&#8217;t have a good reason.  Well, now I have 2 good reasons to keep using compiz.</p>
<p><a href='http://www.doknowevil.net/wp-content/uploads/2008/11/2008-11-25-210749_900x591_scrot.png' title='2008-11-25-210749_900x591_scrot.png' rel='shadowbox[post-247];player=img;'><img src='http://www.doknowevil.net/wp-content/uploads/2008/11/2008-11-25-210749_900x591_scrot.png' alt='2008-11-25-210749_900x591_scrot.png' /></a></p>
<p>I made my Thunderbird use the airplane effect so when I send emails, it flys away and for <a href="http://www.geany.org" title="Geany - My Linux Text Editor of Choice" target="_blank">Geany</a>, I used the magic lamp for open, close, maximize and minimize (different speeds).  It&#8217;s a fun little effect that breaks up the stiffness of the desktop.</p>
<h3>Default File Associations in Ubuntu</h3>
<h4>geany > gedit</h4>
<p>I was tired of gedit popping up when geany&#8217;s just as lightweight but more affective.  So found a command and altered it a bit to make my default editor geany.</p>
<p>1. Open the terminal and create\open the following file:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;">gedit ~<span class="sy0">/</span>.local<span class="sy0">/</span>share<span class="sy0">/</span>applications<span class="sy0">/</span>defaults.list</pre></div></div>

<p>If it&#8217;s blank, add &#8220;<b>[Default Applications]</b>&#8220;.  If it&#8217;s not, find &#8220;<b>[Default Applications]</b>&#8220;.</p>
<p>2. Then, back to the terminal, grep the default files associations and replace gedit with your editor of choice</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="kw2">grep</span> gedit <span class="sy0">/</span>usr<span class="sy0">/</span>share<span class="sy0">/</span>applications<span class="sy0">/</span>defaults.list <span class="sy0">|</span> <span class="kw2">sed</span> s<span class="sy0">/</span>gedit<span class="sy0">/</span>geany<span class="sy0">/</span>g</pre></div></div>

<p>Copy (ctrl+shift+c) and paste the output into gedit, below the &#8220;<b>[Default Applications]</b>&#8221; header.</p>
<p>3. Restart nautilus to load the changes (will close all your file managers that are open and blink/freeze your desktop for a second)</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;">pkill nautilus</pre></div></div>

<p>Good luck, have fun and happy coding <img src='http://www.doknowevil.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.doknowevil.net/2008/11/25/ubuntu-window-management-with-multiple-monitors-window-effects-and-default-file-associations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
