<?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>self.code()</title>
	<atom:link href="http://code.rivers.pro/feed/" rel="self" type="application/rss+xml" />
	<link>http://code.rivers.pro</link>
	<description></description>
	<lastBuildDate>Wed, 10 Feb 2010 18:10:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Disable Spotlight in OS X 10.6</title>
		<link>http://code.rivers.pro/disable-spotlight-in-os-x-10-6/</link>
		<comments>http://code.rivers.pro/disable-spotlight-in-os-x-10-6/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 18:10:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://code.rivers.pro/?p=461</guid>
		<description><![CDATA[sudo mdutil -a -i off
sudo chmod 600 /System/Library/CoreServices/Search.bundle/Contents/MacOS/Search
killall SystemUIServer
Source: http://www.macosxhints.com/article.php?story=20091030173117381
]]></description>
			<content:encoded><![CDATA[<pre class="bash">sudo mdutil -a -i off
sudo chmod 600 /System/Library/CoreServices/Search.bundle/Contents/MacOS/Search
killall SystemUIServer</pre>
<p>Source: <a href="http://www.macosxhints.com/article.php?story=20091030173117381">http://www.macosxhints.com/article.php?story=20091030173117381</a></p>
]]></content:encoded>
			<wfw:commentRss>http://code.rivers.pro/disable-spotlight-in-os-x-10-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Search for Amazon products</title>
		<link>http://code.rivers.pro/search-for-amazon-products/</link>
		<comments>http://code.rivers.pro/search-for-amazon-products/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 01:25:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://code.rivers.pro/?p=453</guid>
		<description><![CDATA[Amazon recently changed its Product API requirements and it was a little tricky to get the new signature working, so here&#8217;s an example of a product search in PHP.

function _encode_query($s) {
  $s = str_replace(',', urlencode(','), $s);
  $s = str_replace(':', urlencode(':'), $s);
  $s = str_replace(';', urlencode(';'), $s);
  return $s;
}

function _encode_signature($s) {
  [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Amazon</strong> recently changed its <strong>Product API</strong> requirements and it was a little tricky to get the new signature working, so here&#8217;s an example of a product search in PHP.</p>

<div class="wp_syntax"><div class='raw-code'>function _encode_query($s) {
  $s = str_replace(',', urlencode(','), $s);
  $s = str_replace(':', urlencode(':'), $s);
  $s = str_replace(';', urlencode(';'), $s);
  return $s;
}

function _encode_signature($s) {
  $s = str_replace('+', urlencode('+'), $s);
  $s = str_replace('=', urlencode('='), $s);
  return $s;
}

function fetch($power_query, $access_key_id, $associate_tag) {
  $url_base = 'http://webservices.amazon.com/onca/xml?';
  $url_params = array(
    'Operation' => 'ItemSearch',
    'Service' => 'AWSECommerceService',
    'AWSAccessKeyId' => $access_key_id,
    'Version' => '2009-01-06',
    'Sort' => 'salesrank',
    'ResponseGroup' => 'ItemAttributes,Images',
    'SearchIndex' => 'Books',
    'Power' => $power_query,
    'Availability' => 'Available',
    'Condition' => 'All',
    'Timestamp' => gmdate('Y-m-d\TH:i:s\Z')
  );
  $pairs = array();
  foreach($url_params as $k => $v) {
    $pairs[] = $k.'='.$this->_encode_query($v);
  }
  sort($pairs);
  $canonical = implode('&', $pairs);
  $base = 'GET'.PHP_EOL.'webservices.amazon.com'.PHP_EOL.'/onca/xml'.PHP_EOL;
  $to_sign = $base.$canonical;
  $signature = base64_encode(hash_hmac('sha256', $to_sign, $associate_tag, true));
  $signature = $this->_encode_signature($signature);
  $request = $url_base.$canonical.'&Signature='.$signature;
  $response = file_get_contents($request);
  $xml = simplexml_load_string($response);
  if (!is_object($xml)) {
    return null;
  } else {
    $products = array();
    if (sizeof($xml->Items->Item) > 0) {
      foreach($xml->Items->Item as $item) {
        $products[] = $item;
      }
    }
    return $products;
  }
}</div><p class='pop-out'>Pop out</p><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
</pre></td><td class="code"><pre class="php"><span style="color: #81BF9E;">function</span> _encode_query<span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$s</span><span style="color: #A6AB59;">&#41;</span> <span style="color: #A6AB59;">&#123;</span>
  <span style="color: #a7abc6;">$s</span> <span style="color: #A6AB59;">=</span> <span style="color: #A6AB59;">str_replace</span><span style="color: #A6AB59;">&#40;</span><span style="color: #F06D61;">','</span><span style="color: #A6AB59;">,</span> <span style="color: #A6AB59;">urlencode</span><span style="color: #A6AB59;">&#40;</span><span style="color: #F06D61;">','</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">,</span> <span style="color: #a7abc6;">$s</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
  <span style="color: #a7abc6;">$s</span> <span style="color: #A6AB59;">=</span> <span style="color: #A6AB59;">str_replace</span><span style="color: #A6AB59;">&#40;</span><span style="color: #F06D61;">':'</span><span style="color: #A6AB59;">,</span> <span style="color: #A6AB59;">urlencode</span><span style="color: #A6AB59;">&#40;</span><span style="color: #F06D61;">':'</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">,</span> <span style="color: #a7abc6;">$s</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
  <span style="color: #a7abc6;">$s</span> <span style="color: #A6AB59;">=</span> <span style="color: #A6AB59;">str_replace</span><span style="color: #A6AB59;">&#40;</span><span style="color: #F06D61;">';'</span><span style="color: #A6AB59;">,</span> <span style="color: #A6AB59;">urlencode</span><span style="color: #A6AB59;">&#40;</span><span style="color: #F06D61;">';'</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">,</span> <span style="color: #a7abc6;">$s</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
  <span style="color: #81BF9E;">return</span> <span style="color: #a7abc6;">$s</span><span style="color: #A6AB59;">;</span>
<span style="color: #A6AB59;">&#125;</span>
&nbsp;
<span style="color: #81BF9E;">function</span> _encode_signature<span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$s</span><span style="color: #A6AB59;">&#41;</span> <span style="color: #A6AB59;">&#123;</span>
  <span style="color: #a7abc6;">$s</span> <span style="color: #A6AB59;">=</span> <span style="color: #A6AB59;">str_replace</span><span style="color: #A6AB59;">&#40;</span><span style="color: #F06D61;">'+'</span><span style="color: #A6AB59;">,</span> <span style="color: #A6AB59;">urlencode</span><span style="color: #A6AB59;">&#40;</span><span style="color: #F06D61;">'+'</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">,</span> <span style="color: #a7abc6;">$s</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
  <span style="color: #a7abc6;">$s</span> <span style="color: #A6AB59;">=</span> <span style="color: #A6AB59;">str_replace</span><span style="color: #A6AB59;">&#40;</span><span style="color: #F06D61;">'='</span><span style="color: #A6AB59;">,</span> <span style="color: #A6AB59;">urlencode</span><span style="color: #A6AB59;">&#40;</span><span style="color: #F06D61;">'='</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">,</span> <span style="color: #a7abc6;">$s</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
  <span style="color: #81BF9E;">return</span> <span style="color: #a7abc6;">$s</span><span style="color: #A6AB59;">;</span>
<span style="color: #A6AB59;">&#125;</span>
&nbsp;
<span style="color: #81BF9E;">function</span> fetch<span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$power_query</span><span style="color: #A6AB59;">,</span> <span style="color: #a7abc6;">$access_key_id</span><span style="color: #A6AB59;">,</span> <span style="color: #a7abc6;">$associate_tag</span><span style="color: #A6AB59;">&#41;</span> <span style="color: #A6AB59;">&#123;</span>
  <span style="color: #a7abc6;">$url_base</span> <span style="color: #A6AB59;">=</span> <span style="color: #F06D61;">'http://webservices.amazon.com/onca/xml?'</span><span style="color: #A6AB59;">;</span>
  <span style="color: #a7abc6;">$url_params</span> <span style="color: #A6AB59;">=</span> <span style="color: #A6AB59;">array</span><span style="color: #A6AB59;">&#40;</span>
    <span style="color: #F06D61;">'Operation'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #F06D61;">'ItemSearch'</span><span style="color: #A6AB59;">,</span>
    <span style="color: #F06D61;">'Service'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #F06D61;">'AWSECommerceService'</span><span style="color: #A6AB59;">,</span>
    <span style="color: #F06D61;">'AWSAccessKeyId'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #a7abc6;">$access_key_id</span><span style="color: #A6AB59;">,</span>
    <span style="color: #F06D61;">'Version'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #F06D61;">'2009-01-06'</span><span style="color: #A6AB59;">,</span>
    <span style="color: #F06D61;">'Sort'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #F06D61;">'salesrank'</span><span style="color: #A6AB59;">,</span>
    <span style="color: #F06D61;">'ResponseGroup'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #F06D61;">'ItemAttributes,Images'</span><span style="color: #A6AB59;">,</span>
    <span style="color: #F06D61;">'SearchIndex'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #F06D61;">'Books'</span><span style="color: #A6AB59;">,</span>
    <span style="color: #F06D61;">'Power'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #a7abc6;">$power_query</span><span style="color: #A6AB59;">,</span>
    <span style="color: #F06D61;">'Availability'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #F06D61;">'Available'</span><span style="color: #A6AB59;">,</span>
    <span style="color: #F06D61;">'Condition'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #F06D61;">'All'</span><span style="color: #A6AB59;">,</span>
    <span style="color: #F06D61;">'Timestamp'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #A6AB59;">gmdate</span><span style="color: #A6AB59;">&#40;</span><span style="color: #F06D61;">'Y-m-d\TH:i:s\Z'</span><span style="color: #A6AB59;">&#41;</span>
  <span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
  <span style="color: #a7abc6;">$pairs</span> <span style="color: #A6AB59;">=</span> <span style="color: #A6AB59;">array</span><span style="color: #A6AB59;">&#40;</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
  <span style="color: #81BF9E;">foreach</span><span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$url_params</span> <span style="color: #81BF9E;">as</span> <span style="color: #a7abc6;">$k</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #a7abc6;">$v</span><span style="color: #A6AB59;">&#41;</span> <span style="color: #A6AB59;">&#123;</span>
    <span style="color: #a7abc6;">$pairs</span><span style="color: #A6AB59;">&#91;</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">=</span> <span style="color: #a7abc6;">$k</span><span style="color: #A6AB59;">.</span><span style="color: #F06D61;">'='</span><span style="color: #A6AB59;">.</span><span style="color: #a7abc6;">$this</span><span style="color: #A6AB59;">-&gt;</span>_encode_query<span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$v</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
  <span style="color: #A6AB59;">&#125;</span>
  <span style="color: #A6AB59;">sort</span><span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$pairs</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
  <span style="color: #a7abc6;">$canonical</span> <span style="color: #A6AB59;">=</span> <span style="color: #A6AB59;">implode</span><span style="color: #A6AB59;">&#40;</span><span style="color: #F06D61;">'&amp;'</span><span style="color: #A6AB59;">,</span> <span style="color: #a7abc6;">$pairs</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
  <span style="color: #a7abc6;">$base</span> <span style="color: #A6AB59;">=</span> <span style="color: #F06D61;">'GET'</span><span style="color: #A6AB59;">.</span>PHP_EOL<span style="color: #A6AB59;">.</span><span style="color: #F06D61;">'webservices.amazon.com'</span><span style="color: #A6AB59;">.</span>PHP_EOL<span style="color: #A6AB59;">.</span><span style="color: #F06D61;">'/onca/xml'</span><span style="color: #A6AB59;">.</span>PHP_EOL<span style="color: #A6AB59;">;</span>
  <span style="color: #a7abc6;">$to_sign</span> <span style="color: #A6AB59;">=</span> <span style="color: #a7abc6;">$base</span><span style="color: #A6AB59;">.</span><span style="color: #a7abc6;">$canonical</span><span style="color: #A6AB59;">;</span>
  <span style="color: #a7abc6;">$signature</span> <span style="color: #A6AB59;">=</span> <span style="color: #A6AB59;">base64_encode</span><span style="color: #A6AB59;">&#40;</span>hash_hmac<span style="color: #A6AB59;">&#40;</span><span style="color: #F06D61;">'sha256'</span><span style="color: #A6AB59;">,</span> <span style="color: #a7abc6;">$to_sign</span><span style="color: #A6AB59;">,</span> <span style="color: #a7abc6;">$associate_tag</span><span style="color: #A6AB59;">,</span> <span style="color: #81BF9E;">true</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
  <span style="color: #a7abc6;">$signature</span> <span style="color: #A6AB59;">=</span> <span style="color: #a7abc6;">$this</span><span style="color: #A6AB59;">-&gt;</span>_encode_signature<span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$signature</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
  <span style="color: #a7abc6;">$request</span> <span style="color: #A6AB59;">=</span> <span style="color: #a7abc6;">$url_base</span><span style="color: #A6AB59;">.</span><span style="color: #a7abc6;">$canonical</span><span style="color: #A6AB59;">.</span><span style="color: #F06D61;">'&amp;Signature='</span><span style="color: #A6AB59;">.</span><span style="color: #a7abc6;">$signature</span><span style="color: #A6AB59;">;</span>
  <span style="color: #a7abc6;">$response</span> <span style="color: #A6AB59;">=</span> <span style="color: #A6AB59;">file_get_contents</span><span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$request</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
  <span style="color: #a7abc6;">$xml</span> <span style="color: #A6AB59;">=</span> simplexml_load_string<span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$response</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
  <span style="color: #81BF9E;">if</span> <span style="color: #A6AB59;">&#40;</span><span style="color: #A6AB59;">!</span><span style="color: #A6AB59;">is_object</span><span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$xml</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">&#41;</span> <span style="color: #A6AB59;">&#123;</span>
    <span style="color: #81BF9E;">return</span> <span style="color: #81BF9E;">null</span><span style="color: #A6AB59;">;</span>
  <span style="color: #A6AB59;">&#125;</span> <span style="color: #81BF9E;">else</span> <span style="color: #A6AB59;">&#123;</span>
    <span style="color: #a7abc6;">$products</span> <span style="color: #A6AB59;">=</span> <span style="color: #A6AB59;">array</span><span style="color: #A6AB59;">&#40;</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
    <span style="color: #81BF9E;">if</span> <span style="color: #A6AB59;">&#40;</span><span style="color: #A6AB59;">sizeof</span><span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$xml</span><span style="color: #A6AB59;">-&gt;</span><span style="color: #A6AB59;">Items</span><span style="color: #A6AB59;">-&gt;</span><span style="color: #A6AB59;">Item</span><span style="color: #A6AB59;">&#41;</span> <span style="color: #A6AB59;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #A6AB59;">&#41;</span> <span style="color: #A6AB59;">&#123;</span>
      <span style="color: #81BF9E;">foreach</span><span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$xml</span><span style="color: #A6AB59;">-&gt;</span><span style="color: #A6AB59;">Items</span><span style="color: #A6AB59;">-&gt;</span><span style="color: #A6AB59;">Item</span> <span style="color: #81BF9E;">as</span> <span style="color: #a7abc6;">$item</span><span style="color: #A6AB59;">&#41;</span> <span style="color: #A6AB59;">&#123;</span>
        <span style="color: #a7abc6;">$products</span><span style="color: #A6AB59;">&#91;</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">=</span> <span style="color: #a7abc6;">$item</span><span style="color: #A6AB59;">;</span>
      <span style="color: #A6AB59;">&#125;</span>
    <span style="color: #A6AB59;">&#125;</span>
    <span style="color: #81BF9E;">return</span> <span style="color: #a7abc6;">$products</span><span style="color: #A6AB59;">;</span>
  <span style="color: #A6AB59;">&#125;</span>
<span style="color: #A6AB59;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://code.rivers.pro/search-for-amazon-products/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create a gradient in PHP</title>
		<link>http://code.rivers.pro/create-a-gradient-in-php/</link>
		<comments>http://code.rivers.pro/create-a-gradient-in-php/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 01:10:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://code.rivers.pro/?p=414</guid>
		<description><![CDATA[This function generates a linear gradient between two hex values. Specify the number of hex values in the returned array with $color_steps. (Haven&#8217;t used this in a long time, but if I&#8217;m not more diligent about throwing snippets up here, I&#8217;ll lose track of them forever.)

function get_gradient($hex_from, $hex_to, $color_steps) {
  $from_rgb = array(
  [...]]]></description>
			<content:encoded><![CDATA[<p>This function generates a linear gradient between two hex values. Specify the number of hex values in the returned array with <strong>$color_steps</strong>. (Haven&#8217;t used this in a long time, but if I&#8217;m not more diligent about throwing snippets up here, I&#8217;ll lose track of them forever.)</p>

<div class="wp_syntax"><div class='raw-code'>function get_gradient($hex_from, $hex_to, $color_steps) {
  $from_rgb = array(
    'r' => hexdec(substr($hex_from, 0, 2)),
    'g' => hexdec(substr($hex_from, 2, 2)),
    'b' => hexdec(substr($hex_from, 4, 2))
  );
  $to_rgb = array(
    'r' => hexdec(substr($hex_to, 0, 2)),
    'g' => hexdec(substr($hex_to, 2, 2)),
    'b' => hexdec(substr($hex_to, 4, 2))
  );
  $step_rgb = array(
    'r' => ($from_rgb['r'] - $to_rgb['r']) / ($color_steps - 1),
    'g' => ($from_rgb['g'] - $to_rgb['g']) / ($color_steps - 1),
    'b' => ($from_rgb['b'] - $to_rgb['b']) / ($color_steps - 1)
  );
  $gradient_colors = array();
  for($i = 0; $i < $color_steps; $i++) {
    $rgb = array(
      'r' => floor($from_rgb['r'] - ($step_rgb['r'] * $i)),
      'g' => floor($from_rgb['g'] - ($step_rgb['g'] * $i)),
      'b' => floor($from_rgb['b'] - ($step_rgb['b'] * $i))
    );
    $hex_rgb = array(
      'r' => sprintf('%02x', ($rgb['r'])),
      'g' => sprintf('%02x', ($rgb['g'])),
      'b' => sprintf('%02x', ($rgb['b']))
    );
    $gradient_colors[] = implode(null, $hex_rgb);
  }
  return $gradient_colors;
}</div><p class='pop-out'>Pop out</p><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
</pre></td><td class="code"><pre class="php"><span style="color: #81BF9E;">function</span> get_gradient<span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$hex_from</span><span style="color: #A6AB59;">,</span> <span style="color: #a7abc6;">$hex_to</span><span style="color: #A6AB59;">,</span> <span style="color: #a7abc6;">$color_steps</span><span style="color: #A6AB59;">&#41;</span> <span style="color: #A6AB59;">&#123;</span>
  <span style="color: #a7abc6;">$from_rgb</span> <span style="color: #A6AB59;">=</span> <span style="color: #A6AB59;">array</span><span style="color: #A6AB59;">&#40;</span>
    <span style="color: #F06D61;">'r'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #A6AB59;">hexdec</span><span style="color: #A6AB59;">&#40;</span><span style="color: #A6AB59;">substr</span><span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$hex_from</span><span style="color: #A6AB59;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #A6AB59;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">,</span>
    <span style="color: #F06D61;">'g'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #A6AB59;">hexdec</span><span style="color: #A6AB59;">&#40;</span><span style="color: #A6AB59;">substr</span><span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$hex_from</span><span style="color: #A6AB59;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #A6AB59;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">,</span>
    <span style="color: #F06D61;">'b'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #A6AB59;">hexdec</span><span style="color: #A6AB59;">&#40;</span><span style="color: #A6AB59;">substr</span><span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$hex_from</span><span style="color: #A6AB59;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #A6AB59;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">&#41;</span>
  <span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
  <span style="color: #a7abc6;">$to_rgb</span> <span style="color: #A6AB59;">=</span> <span style="color: #A6AB59;">array</span><span style="color: #A6AB59;">&#40;</span>
    <span style="color: #F06D61;">'r'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #A6AB59;">hexdec</span><span style="color: #A6AB59;">&#40;</span><span style="color: #A6AB59;">substr</span><span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$hex_to</span><span style="color: #A6AB59;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #A6AB59;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">,</span>
    <span style="color: #F06D61;">'g'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #A6AB59;">hexdec</span><span style="color: #A6AB59;">&#40;</span><span style="color: #A6AB59;">substr</span><span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$hex_to</span><span style="color: #A6AB59;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #A6AB59;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">,</span>
    <span style="color: #F06D61;">'b'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #A6AB59;">hexdec</span><span style="color: #A6AB59;">&#40;</span><span style="color: #A6AB59;">substr</span><span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$hex_to</span><span style="color: #A6AB59;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #A6AB59;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">&#41;</span>
  <span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
  <span style="color: #a7abc6;">$step_rgb</span> <span style="color: #A6AB59;">=</span> <span style="color: #A6AB59;">array</span><span style="color: #A6AB59;">&#40;</span>
    <span style="color: #F06D61;">'r'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$from_rgb</span><span style="color: #A6AB59;">&#91;</span><span style="color: #F06D61;">'r'</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">-</span> <span style="color: #a7abc6;">$to_rgb</span><span style="color: #A6AB59;">&#91;</span><span style="color: #F06D61;">'r'</span><span style="color: #A6AB59;">&#93;</span><span style="color: #A6AB59;">&#41;</span> <span style="color: #A6AB59;">/</span> <span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$color_steps</span> <span style="color: #A6AB59;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">,</span>
    <span style="color: #F06D61;">'g'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$from_rgb</span><span style="color: #A6AB59;">&#91;</span><span style="color: #F06D61;">'g'</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">-</span> <span style="color: #a7abc6;">$to_rgb</span><span style="color: #A6AB59;">&#91;</span><span style="color: #F06D61;">'g'</span><span style="color: #A6AB59;">&#93;</span><span style="color: #A6AB59;">&#41;</span> <span style="color: #A6AB59;">/</span> <span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$color_steps</span> <span style="color: #A6AB59;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">,</span>
    <span style="color: #F06D61;">'b'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$from_rgb</span><span style="color: #A6AB59;">&#91;</span><span style="color: #F06D61;">'b'</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">-</span> <span style="color: #a7abc6;">$to_rgb</span><span style="color: #A6AB59;">&#91;</span><span style="color: #F06D61;">'b'</span><span style="color: #A6AB59;">&#93;</span><span style="color: #A6AB59;">&#41;</span> <span style="color: #A6AB59;">/</span> <span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$color_steps</span> <span style="color: #A6AB59;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #A6AB59;">&#41;</span>
  <span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
  <span style="color: #a7abc6;">$gradient_colors</span> <span style="color: #A6AB59;">=</span> <span style="color: #A6AB59;">array</span><span style="color: #A6AB59;">&#40;</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
  <span style="color: #81BF9E;">for</span><span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$i</span> <span style="color: #A6AB59;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #A6AB59;">;</span> <span style="color: #a7abc6;">$i</span> <span style="color: #A6AB59;">&lt;</span> <span style="color: #a7abc6;">$color_steps</span><span style="color: #A6AB59;">;</span> <span style="color: #a7abc6;">$i</span><span style="color: #A6AB59;">++</span><span style="color: #A6AB59;">&#41;</span> <span style="color: #A6AB59;">&#123;</span>
    <span style="color: #a7abc6;">$rgb</span> <span style="color: #A6AB59;">=</span> <span style="color: #A6AB59;">array</span><span style="color: #A6AB59;">&#40;</span>
      <span style="color: #F06D61;">'r'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #A6AB59;">floor</span><span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$from_rgb</span><span style="color: #A6AB59;">&#91;</span><span style="color: #F06D61;">'r'</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">-</span> <span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$step_rgb</span><span style="color: #A6AB59;">&#91;</span><span style="color: #F06D61;">'r'</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">*</span> <span style="color: #a7abc6;">$i</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">,</span>
      <span style="color: #F06D61;">'g'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #A6AB59;">floor</span><span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$from_rgb</span><span style="color: #A6AB59;">&#91;</span><span style="color: #F06D61;">'g'</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">-</span> <span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$step_rgb</span><span style="color: #A6AB59;">&#91;</span><span style="color: #F06D61;">'g'</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">*</span> <span style="color: #a7abc6;">$i</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">,</span>
      <span style="color: #F06D61;">'b'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #A6AB59;">floor</span><span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$from_rgb</span><span style="color: #A6AB59;">&#91;</span><span style="color: #F06D61;">'b'</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">-</span> <span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$step_rgb</span><span style="color: #A6AB59;">&#91;</span><span style="color: #F06D61;">'b'</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">*</span> <span style="color: #a7abc6;">$i</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">&#41;</span>
    <span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
    <span style="color: #a7abc6;">$hex_rgb</span> <span style="color: #A6AB59;">=</span> <span style="color: #A6AB59;">array</span><span style="color: #A6AB59;">&#40;</span>
      <span style="color: #F06D61;">'r'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #A6AB59;">sprintf</span><span style="color: #A6AB59;">&#40;</span><span style="color: #F06D61;">'%02x'</span><span style="color: #A6AB59;">,</span> <span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$rgb</span><span style="color: #A6AB59;">&#91;</span><span style="color: #F06D61;">'r'</span><span style="color: #A6AB59;">&#93;</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">,</span>
      <span style="color: #F06D61;">'g'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #A6AB59;">sprintf</span><span style="color: #A6AB59;">&#40;</span><span style="color: #F06D61;">'%02x'</span><span style="color: #A6AB59;">,</span> <span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$rgb</span><span style="color: #A6AB59;">&#91;</span><span style="color: #F06D61;">'g'</span><span style="color: #A6AB59;">&#93;</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">,</span>
      <span style="color: #F06D61;">'b'</span> <span style="color: #A6AB59;">=&gt;</span> <span style="color: #A6AB59;">sprintf</span><span style="color: #A6AB59;">&#40;</span><span style="color: #F06D61;">'%02x'</span><span style="color: #A6AB59;">,</span> <span style="color: #A6AB59;">&#40;</span><span style="color: #a7abc6;">$rgb</span><span style="color: #A6AB59;">&#91;</span><span style="color: #F06D61;">'b'</span><span style="color: #A6AB59;">&#93;</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">&#41;</span>
    <span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
    <span style="color: #a7abc6;">$gradient_colors</span><span style="color: #A6AB59;">&#91;</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">=</span> <span style="color: #A6AB59;">implode</span><span style="color: #A6AB59;">&#40;</span><span style="color: #81BF9E;">null</span><span style="color: #A6AB59;">,</span> <span style="color: #a7abc6;">$hex_rgb</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
  <span style="color: #A6AB59;">&#125;</span>
  <span style="color: #81BF9E;">return</span> <span style="color: #a7abc6;">$gradient_colors</span><span style="color: #A6AB59;">;</span>
<span style="color: #A6AB59;">&#125;</span></pre></td></tr></table></div>

<p>Example:</p>

<div class="wp_syntax"><div class='raw-code'>get_gradient('#0084b4', '#a9e0f4', 10);

(
    [0] => 0084b4
    [1] => 128ebb
    [2] => 2598c2
    [3] => 38a2c9
    [4] => 4bacd0
    [5] => 5db7d7
    [6] => 70c1de
    [7] => 83cbe5
    [8] => 96d5ec
    [9] => a9e0f4
)</div><p class='pop-out'>Pop out</p><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="php">get_gradient<span style="color: #A6AB59;">&#40;</span><span style="color: #F06D61;">'#0084b4'</span><span style="color: #A6AB59;">,</span> <span style="color: #F06D61;">'#a9e0f4'</span><span style="color: #A6AB59;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">;</span>
&nbsp;
<span style="color: #A6AB59;">&#40;</span>
    <span style="color: #A6AB59;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">=&gt;</span> 0084b4
    <span style="color: #A6AB59;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">=&gt;</span> 128ebb
    <span style="color: #A6AB59;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">=&gt;</span> 2598c2
    <span style="color: #A6AB59;">&#91;</span><span style="color: #cc66cc;">3</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">=&gt;</span> 38a2c9
    <span style="color: #A6AB59;">&#91;</span><span style="color: #cc66cc;">4</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">=&gt;</span> 4bacd0
    <span style="color: #A6AB59;">&#91;</span><span style="color: #cc66cc;">5</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">=&gt;</span> 5db7d7
    <span style="color: #A6AB59;">&#91;</span><span style="color: #cc66cc;">6</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">=&gt;</span> 70c1de
    <span style="color: #A6AB59;">&#91;</span><span style="color: #cc66cc;">7</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">=&gt;</span> 83cbe5
    <span style="color: #A6AB59;">&#91;</span><span style="color: #cc66cc;">8</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">=&gt;</span> 96d5ec
    <span style="color: #A6AB59;">&#91;</span><span style="color: #cc66cc;">9</span><span style="color: #A6AB59;">&#93;</span> <span style="color: #A6AB59;">=&gt;</span> a9e0f4
<span style="color: #A6AB59;">&#41;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://code.rivers.pro/create-a-gradient-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fake a useragent</title>
		<link>http://code.rivers.pro/fake-a-useragent/</link>
		<comments>http://code.rivers.pro/fake-a-useragent/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 00:42:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://code.rivers.pro/?p=406</guid>
		<description><![CDATA[For all your pursuits on the, er, up-and-up …
Search engine bots:

Google &#8211; Googlebot/2.1 ( http://www.googlebot.com/bot.html)
Google Image &#8211; Googlebot-Image/1.0 ( http://www.googlebot.com/bot.html)
MSN Live &#8211; msnbot-Products/1.0 (+http://search.msn.com/msnbot.htm)
Yahoo &#8211; Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
ask
Browsers:

Firefox (WindowsXP) &#8211; Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
IE 7 &#8211; Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET [...]]]></description>
			<content:encoded><![CDATA[<p>For all your pursuits on the, er, up-and-up …</p>
<p><strong>Search engine bots</strong>:</p>
<ul>
<li>Google &#8211; Googlebot/2.1 ( http://www.googlebot.com/bot.html)</i>
<li>Google Image &#8211; Googlebot-Image/1.0 ( http://www.googlebot.com/bot.html)</li>
<li>MSN Live &#8211; msnbot-Products/1.0 (+http://search.msn.com/msnbot.htm)</li>
<li>Yahoo &#8211; Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)</li>
<li>ask</li>
<p><strong>Browsers</strong>:</p>
<ul>
<li>Firefox (WindowsXP) &#8211; Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6</li>
<li>IE 7 &#8211; Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)</li>
<li>IE 6 &#8211; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)<br />
Safari &#8211; Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/522.11 (KHTML, like Gecko) Safari/3.0.2</li>
<li>Opera &#8211; Opera/9.00 (Windows NT 5.1; U; en)</li>
</ul>
<p>Source: <a href="http://www.developertutorials.com/tutorials/php/scraping-links-with-php-8-01-05/page3.html">http://www.developertutorials.com/tutorials/php/scraping-links-with-php-8-01-05/page3.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://code.rivers.pro/fake-a-useragent/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recursively remove .DS_Store</title>
		<link>http://code.rivers.pro/recursively-remove-ds_store/</link>
		<comments>http://code.rivers.pro/recursively-remove-ds_store/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 16:21:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[mac os x]]></category>

		<guid isPermaLink="false">http://code.rivers.pro/?p=421</guid>
		<description><![CDATA[Add this to ~/.bash_profile, ~/.bashrc, or wherever you prefer. You can then recursively remove annoying .DS_Store files from a directory by executing the command rm_dss.

alias rm_dss='find . -name *.DS_Store -type f -exec rm {} \;'Pop out1
alias rm_dss='find . -name *.DS_Store -type f -exec rm {} \;'

Source: http://snippets.dzone.com/posts/show/4982
]]></description>
			<content:encoded><![CDATA[<p>Add this to <strong>~/.bash_profile</strong>, <strong>~/.bashrc</strong>, or wherever you prefer. You can then recursively remove annoying .DS_Store files from a directory by executing the command <strong>rm_dss</strong>.</p>

<div class="wp_syntax"><div class='raw-code'>alias rm_dss='find . -name *.DS_Store -type f -exec rm {} \;'</div><p class='pop-out'>Pop out</p><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash"><span style="color: #A6AB59;">alias</span> <span style="color: REGEX_3;">rm_dss</span>=<span style="color: #F06D61;">'find . -name *.DS_Store -type f -exec rm {} \;'</span></pre></td></tr></table></div>

<p>Source: <a href="http://snippets.dzone.com/posts/show/4982">http://snippets.dzone.com/posts/show/4982</a></p>
]]></content:encoded>
			<wfw:commentRss>http://code.rivers.pro/recursively-remove-ds_store/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Download all Google Docs with Python</title>
		<link>http://code.rivers.pro/download-all-google-docs-with-python/</link>
		<comments>http://code.rivers.pro/download-all-google-docs-with-python/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 18:05:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://code.rivers.pro/?p=368</guid>
		<description><![CDATA[How handy! Lifehacker says:
Google Docs Download, a Greasemonkey script previously featured here for creating a Google Docs bulk download feature that should already be there, is now available as a (beta-level) Python script.
]]></description>
			<content:encoded><![CDATA[<p>How handy! <a href="http://lifehacker.com/5296814/grab-all-your-google-docs-with-a-python-script">Lifehacker</a> says:</p>
<blockquote><p>Google Docs Download, a Greasemonkey script <a href="http://lifehacker.com/256812/google-doc-download-greasemonkey-script">previously featured here</a> for creating a Google Docs bulk download feature that should already be there, is <a href="http://1st-soft.net/gdd/">now available as a (beta-level) Python script</a>.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://code.rivers.pro/download-all-google-docs-with-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bash function to minify javascript using Python JSMin</title>
		<link>http://code.rivers.pro/bash-function-to-minify-javascript-using-python-jsmin/</link>
		<comments>http://code.rivers.pro/bash-function-to-minify-javascript-using-python-jsmin/#comments</comments>
		<pubDate>Sun, 31 May 2009 20:14:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://code.rivers.pro/?p=318</guid>
		<description><![CDATA[This function pipes a javascript file to a Python implementation of Douglas Crockford&#8217;s handy JSMin, a javascript minifier.

minify() {
  if [ -f $1 ]
  then
    MIN=${1%.[^.]*}.min.js
    cat $1 &#124; python ~/path/to/jsmin.py > ${1%.[^.]*}.min.js
    BEFORE=`wc -c ]]></description>
			<content:encoded><![CDATA[<p>This function pipes a <strong>javascript</strong> file to a <strong>Python</strong> implementation of Douglas Crockford&#8217;s handy <a href="http://www.crockford.com/javascript/jsmin.html">JSMin</a>, a javascript minifier.</p>

<div class="wp_syntax"><div class='raw-code'>minify() {
  if [ -f $1 ]
  then
    MIN=${1%.[^.]*}.min.js
    cat $1 | python ~/path/to/jsmin.py > ${1%.[^.]*}.min.js
    BEFORE=`wc -c <$1`
    AFTER=`wc -c <$MIN`
    echo "$BEFORE $1"
    echo "$AFTER $MIN ($(echo "scale=2; 100*$AFTER/$BEFORE" | bc)%)"
  else
    echo "$1 not found"
  fi
}</div><p class='pop-out'>Pop out</p><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="bash">minify<span style="color: #A6AB59;">&#40;</span><span style="color: #A6AB59;">&#41;</span> <span style="color: #A6AB59;">&#123;</span>
  <span style="color: #81BF9E;">if</span> <span style="color: #A6AB59;">&#91;</span> <span style="color: REGEX_5;">-f</span> $<span style="color: #A6AB59;">1</span> <span style="color: #A6AB59;">&#93;</span>
  <span style="color: #81BF9E;">then</span>
    <span style="color: REGEX_3;">MIN</span>=<span style="color: #DA825F;">${1%.[^.]*}</span>.min.js
    <span style="color: #81BF9E;">cat</span> $<span style="color: #A6AB59;">1</span> <span style="color: #A6AB59;">|</span> python ~<span style="color: #A6AB59;">/</span>path<span style="color: #A6AB59;">/</span>to<span style="color: #A6AB59;">/</span>jsmin.py <span style="color: #A6AB59;">&gt;</span> <span style="color: #DA825F;">${1%.[^.]*}</span>.min.js
    <span style="color: REGEX_3;">BEFORE</span>=<span style="color: #A6AB59;">`</span><span style="color: #81BF9E;">wc</span> <span style="color: REGEX_5;">-c</span> <span style="color: #A6AB59;">&lt;</span>$<span style="color: #A6AB59;">1</span><span style="color: #A6AB59;">`</span>
    <span style="color: REGEX_3;">AFTER</span>=<span style="color: #A6AB59;">`</span><span style="color: #81BF9E;">wc</span> <span style="color: REGEX_5;">-c</span> <span style="color: #A6AB59;">&lt;</span><span style="color: REGEX_2;">$MIN</span><span style="color: #A6AB59;">`</span>
    <span style="color: #A6AB59;">echo</span> <span style="color: #F06D61;">&quot;<span style="color: #A6AB59;">$BEFORE</span> $1&quot;</span>
    <span style="color: #A6AB59;">echo</span> <span style="color: #F06D61;">&quot;<span style="color: #A6AB59;">$AFTER</span> <span style="color: #A6AB59;">$MIN</span> (<span style="color: #A6AB59;">$(echo &quot;scale=2; 100*$AFTER/$BEFORE&quot; | bc)</span>%)&quot;</span>
  <span style="color: #81BF9E;">else</span>
    <span style="color: #A6AB59;">echo</span> <span style="color: #F06D61;">&quot;$1 not found&quot;</span>
  <span style="color: #81BF9E;">fi</span>
<span style="color: #A6AB59;">&#125;</span></pre></td></tr></table></div>

<p>It also prints the minified version&#8217;s character count as a percentage of the original&#8217;s:</p>
<pre>$ minify prototype.js 

  126127 prototype.js
   93689 prototype.min.js (74.28%)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://code.rivers.pro/bash-function-to-minify-javascript-using-python-jsmin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Functions for common file tasks in Python</title>
		<link>http://code.rivers.pro/functions-for-common-file-tasks-in-python/</link>
		<comments>http://code.rivers.pro/functions-for-common-file-tasks-in-python/#comments</comments>
		<pubDate>Thu, 14 May 2009 05:33:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://code.rivers.pro/?p=268</guid>
		<description><![CDATA[
import osPop out1
import os

List all files in a directory recursively, with relative paths:

def list_dir(dir_name):
    for r, d, f in os.walk(dir_name):
        files = [os.path.join(r, n) for n in f if not n.startswith('.')]
    return filesPop out1
2
3
4
def list_dir&#40;dir_name&#41;:
    for r, d, f [...]]]></description>
			<content:encoded><![CDATA[
<div class="wp_syntax"><div class='raw-code'>import os</div><p class='pop-out'>Pop out</p><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="python"><span style="color: #81BF9E;">import</span> <span style="color: #A6AB59;">os</span></pre></td></tr></table></div>

<p>List all files in a directory recursively, with relative paths:</p>

<div class="wp_syntax"><div class='raw-code'>def list_dir(dir_name):
    for r, d, f in os.walk(dir_name):
        files = [os.path.join(r, n) for n in f if not n.startswith('.')]
    return files</div><p class='pop-out'>Pop out</p><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="python"><span style="color: #81BF9E;">def</span> list_dir<span style="color: #A6AB59;">&#40;</span>dir_name<span style="color: #A6AB59;">&#41;</span>:
    <span style="color: #81BF9E;">for</span> r, d, f <span style="color: #81BF9E;">in</span> <span style="color: #A6AB59;">os</span>.<span style="color: #A6AB59;">walk</span><span style="color: #A6AB59;">&#40;</span>dir_name<span style="color: #A6AB59;">&#41;</span>:
        files = <span style="color: #A6AB59;">&#91;</span><span style="color: #A6AB59;">os</span>.<span style="color: #A6AB59;">path</span>.<span style="color: #A6AB59;">join</span><span style="color: #A6AB59;">&#40;</span>r, n<span style="color: #A6AB59;">&#41;</span> <span style="color: #81BF9E;">for</span> n <span style="color: #81BF9E;">in</span> f <span style="color: #81BF9E;">if</span> <span style="color: #81BF9E;">not</span> n.<span style="color: #A6AB59;">startswith</span><span style="color: #A6AB59;">&#40;</span><span style="color: #F06D61;">'.'</span><span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">&#93;</span>
    <span style="color: #81BF9E;">return</span> files</pre></td></tr></table></div>

<p>Create a directory if it doesn&#8217;t already exist:</p>

<div class="wp_syntax"><div class='raw-code'>def make_dir(dir_name):
    if not os.path.isdir(dir_name):
        os.mkdir(dir_name)</div><p class='pop-out'>Pop out</p><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="python"><span style="color: #81BF9E;">def</span> make_dir<span style="color: #A6AB59;">&#40;</span>dir_name<span style="color: #A6AB59;">&#41;</span>:
    <span style="color: #81BF9E;">if</span> <span style="color: #81BF9E;">not</span> <span style="color: #A6AB59;">os</span>.<span style="color: #A6AB59;">path</span>.<span style="color: #A6AB59;">isdir</span><span style="color: #A6AB59;">&#40;</span>dir_name<span style="color: #A6AB59;">&#41;</span>:
        <span style="color: #A6AB59;">os</span>.<span style="color: #A6AB59;">mkdir</span><span style="color: #A6AB59;">&#40;</span>dir_name<span style="color: #A6AB59;">&#41;</span></pre></td></tr></table></div>

<p>Empty an existing directory:</p>

<div class="wp_syntax"><div class='raw-code'>def empty_dir(dir_name):
    if not os.path.isdir(dir_name):
        os.mkdir(dir_name)
    else:
        [os.remove(f) for f in list_dir(dir_name)]</div><p class='pop-out'>Pop out</p><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="python"><span style="color: #81BF9E;">def</span> empty_dir<span style="color: #A6AB59;">&#40;</span>dir_name<span style="color: #A6AB59;">&#41;</span>:
    <span style="color: #81BF9E;">if</span> <span style="color: #81BF9E;">not</span> <span style="color: #A6AB59;">os</span>.<span style="color: #A6AB59;">path</span>.<span style="color: #A6AB59;">isdir</span><span style="color: #A6AB59;">&#40;</span>dir_name<span style="color: #A6AB59;">&#41;</span>:
        <span style="color: #A6AB59;">os</span>.<span style="color: #A6AB59;">mkdir</span><span style="color: #A6AB59;">&#40;</span>dir_name<span style="color: #A6AB59;">&#41;</span>
    <span style="color: #81BF9E;">else</span>:
        <span style="color: #A6AB59;">&#91;</span><span style="color: #A6AB59;">os</span>.<span style="color: #A6AB59;">remove</span><span style="color: #A6AB59;">&#40;</span>f<span style="color: #A6AB59;">&#41;</span> <span style="color: #81BF9E;">for</span> f <span style="color: #81BF9E;">in</span> list_dir<span style="color: #A6AB59;">&#40;</span>dir_name<span style="color: #A6AB59;">&#41;</span><span style="color: #A6AB59;">&#93;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://code.rivers.pro/functions-for-common-file-tasks-in-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unix screen command reference</title>
		<link>http://code.rivers.pro/unix-screen-command-reference/</link>
		<comments>http://code.rivers.pro/unix-screen-command-reference/#comments</comments>
		<pubDate>Sun, 10 May 2009 20:40:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[screen]]></category>

		<guid isPermaLink="false">http://code.rivers.pro/?p=219</guid>
		<description><![CDATA[
^a c
Create new window (shell)
^a k
Kill the current window
^a w
List all windows(the current window is marked with *)
^a 0-9
Go to a window numbered 0-9
^a n
Go to the next window
^a ^a
Toggle between the current and previous window


^a [
Start copy mode
^a ]
Paste copied text


^a ?
Help (display a list of commands)
^a ^\
Quit screen
^a D
Power detach and logout
^a d
Detach [...]]]></description>
			<content:encoded><![CDATA[<dl>
<dt>^a <strong>c</strong></dt>
<dd>Create <strong>new window</strong> (shell)</dd>
<dt>^a <strong>k</strong></dt>
<dd><strong>Kill</strong> the current window</dd>
<dt>^a <strong>w</strong></dt>
<dd><strong>List</strong> all windows<br />(the current window is marked with <strong>*</strong>)</dd>
<dt>^a <strong>0</strong>-<strong>9</strong></dt>
<dd>Go to a window numbered <strong>0</strong>-<strong>9</strong></dd>
<dt>^a <strong>n</strong></dt>
<dd>Go to the <strong>next window</strong></dd>
<dt>^a <strong>^a</strong></dt>
<dd><strong>Toggle</strong> between the current and previous window</dd>
</dl>
<dl>
<dt>^a <strong>[</strong></dt>
<dd>Start <strong>copy mode</strong></dd>
<dt>^a <strong>]</strong></dt>
<dd><strong>Paste</strong> copied text</dd>
</dl>
<dl>
<dt>^a <strong>?</strong></dt>
<dd><strong>Help</strong> (display a list of commands)</dd>
<dt>^a <strong>^\</strong></dt>
<dd><strong>Quit</strong> screen</dd>
<dt>^a <strong>D</strong></dt>
<dd>Power <strong>detach</strong> and <strong>logout</strong></dd>
<dt>^a <strong>d</strong></dt>
<dd><strong>Detach</strong> but keep shell window open</dd>
<dt><strong>space</strong> or <strong>return</strong></dt>
<dd><strong>End</strong> a command</dd>
</dl>
<p style="clear:both;">Source: <a href="http://kb.iu.edu/data/acuy.html">Indiana University UITS</a></p>
]]></content:encoded>
			<wfw:commentRss>http://code.rivers.pro/unix-screen-command-reference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Remove www from URLs with mod_rewrite</title>
		<link>http://code.rivers.pro/remove-www-from-urls-with-mod_rewrite/</link>
		<comments>http://code.rivers.pro/remove-www-from-urls-with-mod_rewrite/#comments</comments>
		<pubDate>Mon, 04 May 2009 23:45:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[mod_rewrite]]></category>

		<guid isPermaLink="false">http://codetoself.org/?p=207</guid>
		<description><![CDATA[
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]Pop out1
2
3
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]

]]></description>
			<content:encoded><![CDATA[
<div class="wp_syntax"><div class='raw-code'>RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]</div><p class='pop-out'>Pop out</p><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="apache"><span style="color: #81BF9E;">RewriteEngine</span> <span style="color: #81BF9E;">On</span>
<span style="color: #81BF9E;">RewriteCond</span> %{HTTP_HOST} ^www.domain.com$ [NC]
<span style="color: #81BF9E;">RewriteRule</span> ^(.*)$ http://domain.com/$<span style="color: #A6AB59;">1</span> [R=<span style="color: #A6AB59;">301</span>,L]</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://code.rivers.pro/remove-www-from-urls-with-mod_rewrite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
