<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Denis Laprise web log</title>
	
	<link>http://denislaprise.com</link>
	<description>i used to think i could blog; i was wrong.</description>
	<pubDate>Sun, 10 May 2009 14:08:39 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/dlaprise" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="dlaprise" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Connexion au VPN ulaval avec ubuntu 8.10 Intrepid Ibex</title>
		<link>http://denislaprise.com/2008/12/07/connexion-au-vpn-ulaval-avec-ubuntu-810-intrepid-ibex/</link>
		<comments>http://denislaprise.com/2008/12/07/connexion-au-vpn-ulaval-avec-ubuntu-810-intrepid-ibex/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 06:56:47 +0000</pubDate>
		<dc:creator>denis</dc:creator>
		
		<category><![CDATA[ubuntu]]></category>

		<category><![CDATA[ulaval]]></category>

		<category><![CDATA[vpn]]></category>

		<guid isPermaLink="false">http://denislaprise.com/2008/12/07/connexion-au-vpn-ulaval-avec-ubuntu-810-intrepid-ibex/</guid>
		<description><![CDATA[Il est tard. Vous voulez vous connecter au VPN de l&#8217;Université Laval. Évidemment les instructions officielles datent de 2006. Voici donc comment lire votre papier:
- Installer vpnc

 sudo apt-get install vpnc network-manager-vpnc
- Redémarrer (juste au cas. Essayez sans)
- Accéder à Système &#62; Préférences &#62; Configuration Réseau &#62; VPN
- Créer un réseau (ulaval) avec les options suivantes:

- [...]]]></description>
			<content:encoded><![CDATA[<p>Il est tard. Vous voulez vous connecter au VPN de l&#8217;<strong>U</strong>niversité <strong>L</strong>aval. Évidemment les <a href="https://www-iis.sit.ulaval.ca/extranet/logicielsproteges/Linux/Client_VPN/" title="retard">instructions officielles</a> datent de 2006. Voici donc comment lire votre papier:<br />
- Installer vpnc</p>
<pre language="bash">
 sudo apt-get install vpnc network-manager-vpnc</pre>
<p>- Redémarrer (juste au cas. Essayez sans)<br />
- Accéder à Système &gt; Préférences &gt; Configuration Réseau &gt; VPN<br />
- Créer un réseau (ulaval) avec les options suivantes:<br />
<img src="http://denislaprise.com/wp-content/uploads/2008/12/screenshot-editing-ulaval.png" alt="screenshot-editing-ulaval.png" style="float: none" /></p>
<p>- Pour les intéressés, le group password à été extrait du <a href="https://www-iis.sit.ulaval.ca/extranet/logicielsproteges/Linux/Client_VPN/profiles.linux/Acces_campus%2Bbases_de_donnees_bibliotheque.pcf">profile</a> et cracké avec <a href="http://www.unix-ag.uni-kl.de/~massar/bin/cisco-decode" title="1337">http://www.unix-ag.uni-kl.de/~massar/bin/cisco-decode</a></p>
]]></content:encoded>
			<wfw:commentRss>http://denislaprise.com/2008/12/07/connexion-au-vpn-ulaval-avec-ubuntu-810-intrepid-ibex/feed/</wfw:commentRss>
		</item>
		<item>
		<title>drawing images on google app engine</title>
		<link>http://denislaprise.com/2008/08/21/drawing-images-on-google-app-engine/</link>
		<comments>http://denislaprise.com/2008/08/21/drawing-images-on-google-app-engine/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 20:59:35 +0000</pubDate>
		<dc:creator>denis</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[app engine]]></category>

		<category><![CDATA[code]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://denislaprise.com/2008/08/21/drawing-images-on-google-app-engine/</guid>
		<description><![CDATA[The google app engine image api looks nice before you actually use it. Why? Because it lacks a fundamental feature: the capability to draw an image. That&#8217;s right: no trace of a classic canvas api (setpixel, getpixel, rectangle, circle, etc).
Luckily, some clever programmer wrote a PNGCanvas class that saved the day. Here&#8217;s how to use [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://code.google.com/appengine/docs/images/usingimages.html">google app engine image api</a> looks nice before you actually use it. Why? Because it lacks a fundamental feature: the capability to draw an image. That&#8217;s right: no trace of a classic canvas api (setpixel, getpixel, rectangle, circle, etc).</p>
<p>Luckily, some clever programmer wrote a <a href="http://the.taoofmac.com/space/Projects/PNGCanvas">PNGCanvas class</a> that saved the day. Here&#8217;s how to use it:</p>

<div class="wp_syntax"><div class="code"><pre class="python"><span style="color: #ff7700;font-weight:bold;">from</span> pngcanvas <span style="color: #ff7700;font-weight:bold;">import</span> PNGCanvas
<span style="color: #ff7700;font-weight:bold;">class</span> ImageTest<span style="color: black;">&#40;</span>webapp.<span style="color: black;">RequestHandler</span><span style="color: black;">&#41;</span>:
 <span style="color: #ff7700;font-weight:bold;">def</span> get<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
  img = PNGCanvas<span style="color: black;">&#40;</span><span style="color: #ff4500;">256</span>, <span style="color: #ff4500;">256</span>, <span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
  <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">256</span><span style="color: black;">&#41;</span>:
   img.<span style="color: black;">point</span><span style="color: black;">&#40;</span>i, i, <span style="color: black;">&#91;</span>0xff, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">0</span>, 0xff<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
  <span style="color: #008000;">self</span>.<span style="color: black;">response</span>.<span style="color: black;">headers</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'Content-Type'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;image/png&quot;</span>
  <span style="color: #008000;">self</span>.<span style="color: black;">response</span>.<span style="color: black;">out</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span>img.<span style="color: black;">dump</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>This example runs at <a href="http://pngcanvas.appspot.com/image">http://pngcanvas.appspot.com/image</a></p>
]]></content:encoded>
			<wfw:commentRss>http://denislaprise.com/2008/08/21/drawing-images-on-google-app-engine/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Overriding methods with … arguments in as3</title>
		<link>http://denislaprise.com/2008/07/29/overriding-methods-with-arguments-in-as3/</link>
		<comments>http://denislaprise.com/2008/07/29/overriding-methods-with-arguments-in-as3/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 21:31:21 +0000</pubDate>
		<dc:creator>denis</dc:creator>
		
		<category><![CDATA[code]]></category>

		<category><![CDATA[as3]]></category>

		<guid isPermaLink="false">http://denislaprise.com/2008/07/29/overriding-methods-with-arguments-in-as3/</guid>
		<description><![CDATA[For example, if you want to override the NetConnection::call method, you should do:

override public function call&#40;command:String, responder:Responder, ...parameters&#41;:void &#123;
 parameters.unshift&#40;command, responder&#41;;
 super.call.apply&#40;this, parameters&#41;;
&#125;

thanks to the good old prototype ..!
]]></description>
			<content:encoded><![CDATA[<p>For example, if you want to override the NetConnection::call method, you should do:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript">override <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">call</span><span style="color: #66cc66;">&#40;</span>command:<span style="color: #0066CC;">String</span>, responder:Responder, ...<span style="color: #006600;">parameters</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
 parameters.<span style="color: #0066CC;">unshift</span><span style="color: #66cc66;">&#40;</span>command, responder<span style="color: #66cc66;">&#41;</span>;
 <span style="color: #0066CC;">super</span>.<span style="color: #0066CC;">call</span>.<span style="color: #0066CC;">apply</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, parameters<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>thanks to the good old prototype ..!</p>
]]></content:encoded>
			<wfw:commentRss>http://denislaprise.com/2008/07/29/overriding-methods-with-arguments-in-as3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to automatically version a Flex application</title>
		<link>http://denislaprise.com/2008/06/23/how-to-automatically-version-a-flex-application/</link>
		<comments>http://denislaprise.com/2008/06/23/how-to-automatically-version-a-flex-application/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 20:11:03 +0000</pubDate>
		<dc:creator>denis</dc:creator>
		
		<category><![CDATA[code]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://denislaprise.com/2008/06/23/how-to-automatically-version-a-flex-application/</guid>
		<description><![CDATA[I recently added automatic versioning to my Flex projects. This is quite useful when you want to know exactly which version of your application is currently running when it&#8217;s being debugged, deployed, tested, etc. This basic example will generate a version string containing a major version number, minor version number, svn revision number and a [...]]]></description>
			<content:encoded><![CDATA[<p>I recently added automatic versioning to my Flex projects. This is quite useful when you want to know exactly which version of your application is currently running when it&#8217;s being debugged, deployed, tested, etc. This basic example will generate a version string containing a major version number, minor version number, svn revision number and a build number. The build number is incremented every time your application is built. It assumes you have python installed and use SVN as your version control system.</p>
<h3>Storing your version information</h3>
<p>We will use a simple text file to do that and we&#8217;ll call it .version. Its format will be:<br />
major_no<br />
minor_no<br />
build_no<br />
revision_no</p>
<h3>Updating the version data</h3>
<p>A small python script is used to do that. A build number is incremented each time and the revision number is retrieved from SVN. Here&#8217;s the versioner.py script (make sure it&#8217;s executable):</p>

<div class="wp_syntax"><div class="code"><pre class="python"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
v = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'.version'</span><span style="color: black;">&#41;</span>
major = <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>v.<span style="color: #dc143c;">readline</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">or</span> <span style="color: #483d8b;">'2'</span><span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># can change 2 for any major version number you'd like</span>
minor = <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>v.<span style="color: #dc143c;">readline</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">or</span> <span style="color: #483d8b;">'5'</span><span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># idem</span>
build = <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>v.<span style="color: #dc143c;">readline</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">or</span> <span style="color: #483d8b;">'0'</span><span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># idem</span>
build += <span style="color: #ff4500;">1</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>, <span style="color: #dc143c;">re</span>
ri, ro = <span style="color: #dc143c;">os</span>.<span style="color: #dc143c;">popen2</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;svn info&quot;</span>, <span style="color: #483d8b;">'r'</span><span style="color: black;">&#41;</span>
rev = ro.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
ri.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
ro.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
revre = <span style="color: #dc143c;">re</span>.<span style="color: #008000;">compile</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Revision: ([<span style="color: #000099; font-weight: bold;">\d</span>]+)'</span><span style="color: black;">&#41;</span>
revision = revre.<span style="color: black;">search</span><span style="color: black;">&#40;</span>rev<span style="color: black;">&#41;</span>.<span style="color: black;">group</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
o = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'.version'</span>, <span style="color: #483d8b;">'w'</span><span style="color: black;">&#41;</span>
o.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>%d<span style="color: #000099; font-weight: bold;">\n</span>%d<span style="color: #000099; font-weight: bold;">\n</span>%s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> % <span style="color: black;">&#40;</span>major, minor, build, revision<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
o.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<h3>Running the version script</h3>
<p>If you&#8217;re using Flex Builder, this is easily done:<br />
Go to project properties.<br />
Under the Builders tab, click New<br />
Name it anything you like<br />
Select the versioner.py script in location<br />
Select the folder containing your .version file as the working directory<br />
Check &#8220;During manual builds&#8221; and &#8220;During auto builds&#8221; in the Build Options<br />
Once your builder is created, make sure it&#8217;s at the top.</p>
<h3>Using the version information</h3>
<p>You can embed it in your Flex application using the following code:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript"><span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source=<span style="color: #ff0000;">&quot;../.version&quot;</span>,mimeType=<span style="color: #ff0000;">&quot;application/octet-stream&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span>Bindable<span style="color: #66cc66;">&#93;</span>
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">version</span>:<span style="color: #000000; font-weight: bold;">Class</span>;</pre></div></div>

<p>and then you can access it at runtime using a function like this:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript"><span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">getVersion</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">String</span> <span style="color: #66cc66;">&#123;</span><span style="color: #000000; font-weight: bold;">var</span> v:<span style="color: #0066CC;">Array</span> = <span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">version</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">split</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'<span style="color: #000099; font-weight: bold;">\n</span>'</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #b1b100;">return</span> v<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span> + <span style="color: #ff0000;">'.'</span> + v<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span> + <span style="color: #ff0000;">'.'</span> + v<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#93;</span> + <span style="color: #ff0000;">' build '</span> + v<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#93;</span>;;
&nbsp;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>which will return something like &#8216;major.minor.revision build&#8217;.</p>
]]></content:encoded>
			<wfw:commentRss>http://denislaprise.com/2008/06/23/how-to-automatically-version-a-flex-application/feed/</wfw:commentRss>
		</item>
		<item>
		<title>django epydocs</title>
		<link>http://denislaprise.com/2008/04/17/django-epydocs/</link>
		<comments>http://denislaprise.com/2008/04/17/django-epydocs/#comments</comments>
		<pubDate>Thu, 17 Apr 2008 23:04:31 +0000</pubDate>
		<dc:creator>denis</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://denislaprise.com/2008/04/17/django-epydocs/</guid>
		<description><![CDATA[I couldn&#8217;t find it, so here it is: Django epydocs
]]></description>
			<content:encoded><![CDATA[<p>I couldn&#8217;t find it, so here it is: <a href="http://denislaprise.com/django_docs/">Django epydocs</a></p>
]]></content:encoded>
			<wfw:commentRss>http://denislaprise.com/2008/04/17/django-epydocs/feed/</wfw:commentRss>
		</item>
		<item>
		<title>top commands</title>
		<link>http://denislaprise.com/2008/04/11/top-commands/</link>
		<comments>http://denislaprise.com/2008/04/11/top-commands/#comments</comments>
		<pubDate>Fri, 11 Apr 2008 04:40:28 +0000</pubDate>
		<dc:creator>denis</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category />

		<category><![CDATA[meme]]></category>

		<category><![CDATA[top]]></category>

		<guid isPermaLink="false">http://denislaprise.com/2008/04/11/top-commands/</guid>
		<description><![CDATA[2ni:~ denislaprise$ history&#124;awk &#8216;{a[$2]++} END{for(i in a){printf &#8220;%5d\t%s\n&#8221;,a[i],i}}&#8217;&#124;sort -rn&#124;head
120    cd
97    ls
45    ssh
41    vi
19    svn
13    scp
13    python
12    make
11    find
10    wget
via Tom
]]></description>
			<content:encoded><![CDATA[<p>2ni:~ denislaprise$ history|awk &#8216;{a[$2]++} END{for(i in a){printf &#8220;%5d\t%s\n&#8221;,a[i],i}}&#8217;|sort -rn|head<br />
120    cd<br />
97    ls<br />
45    ssh<br />
41    vi<br />
19    svn<br />
13    scp<br />
13    python<br />
12    make<br />
11    find<br />
10    wget</p>
<p>via <a href="http://www.tomprinty.com/2008/04/10/top-commands/">Tom</a></p>
]]></content:encoded>
			<wfw:commentRss>http://denislaprise.com/2008/04/11/top-commands/feed/</wfw:commentRss>
		</item>
		<item>
		<title>downloading google maps tiles using modestmaps</title>
		<link>http://denislaprise.com/2008/04/02/downloading-google-maps-tiles-using-modestmaps/</link>
		<comments>http://denislaprise.com/2008/04/02/downloading-google-maps-tiles-using-modestmaps/#comments</comments>
		<pubDate>Wed, 02 Apr 2008 17:14:39 +0000</pubDate>
		<dc:creator>denis</dc:creator>
		
		<category><![CDATA[code]]></category>

		<category><![CDATA[google maps]]></category>

		<category><![CDATA[modestmaps]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://denislaprise.com/2008/04/02/downloading-google-maps-tiles-using-modestmaps/</guid>
		<description><![CDATA[ModestMaps is one the nicest mapping API out there: it just feels right. I especially love the python version, which I used to download some Google Maps tiles (anyone remember gMerge?). The following script gets a Google Maps permalink and downloads the tiles all the way down to the maximum zoom level. You may need [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://modestmaps.com/">ModestMaps</a> is one the nicest mapping API out there: it just feels right. I especially love the python version, which I used to download some Google Maps tiles (anyone remember <a href="http://blog.makezine.com/archive/2005/06/make_wallpaper.html">gMerge</a>?). The following script gets a Google Maps permalink and downloads the tiles all the way down to the maximum zoom level. You may need to alter the file retrieval and naming logic. The beauty here lies in the fact that ModestMaps allows you to download any layer from many APIs (Google, Virtual Earth, Yahoo Maps and OpenStreetMaps) by changing the <em>Google.AerialProvider()</em> call.</p>

<div class="wp_syntax"><div class="code"><pre class="python"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>, <span style="color: #dc143c;">urllib2</span>, <span style="color: #dc143c;">re</span>,<span style="color: #dc143c;">os</span>, Image, <span style="color: #dc143c;">httplib</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> parselink<span style="color: black;">&#40;</span>link<span style="color: black;">&#41;</span>:
 qs = link<span style="color: black;">&#91;</span>link.<span style="color: black;">index</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'?'</span><span style="color: black;">&#41;</span><span style="color: #ff4500;">+1</span>:<span style="color: black;">&#93;</span>
 vals = <span style="color: black;">&#91;</span>v.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'='</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> v <span style="color: #ff7700;font-weight:bold;">in</span> qs.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'&amp;'</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
 params = <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
 <span style="color: #ff7700;font-weight:bold;">for</span> v <span style="color: #ff7700;font-weight:bold;">in</span> vals:
  params<span style="color: black;">&#91;</span>v<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span> = v<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
 zoom = <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>params<span style="color: black;">&#91;</span><span style="color: #483d8b;">'z'</span><span style="color: black;">&#93;</span> <span style="color: #ff7700;font-weight:bold;">or</span> <span style="color: #483d8b;">'0'</span><span style="color: black;">&#41;</span>
 center = <span style="color: #008000;">map</span><span style="color: black;">&#40;</span><span style="color: #008000;">float</span>, params<span style="color: black;">&#91;</span><span style="color: #483d8b;">'ll'</span><span style="color: black;">&#93;</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">','</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
 span = <span style="color: #008000;">map</span><span style="color: black;">&#40;</span><span style="color: #008000;">float</span>, params<span style="color: black;">&#91;</span><span style="color: #483d8b;">'spn'</span><span style="color: black;">&#93;</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">','</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
 ne, sw = <span style="color: #008000;">list</span><span style="color: black;">&#40;</span>center<span style="color: black;">&#41;</span>, <span style="color: #008000;">list</span><span style="color: black;">&#40;</span>center<span style="color: black;">&#41;</span>
 ne<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> += span<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
 ne<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> += span<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
 sw<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> -= span<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
 sw<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> -= span<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
 <span style="color: #ff7700;font-weight:bold;">return</span> ne, sw, zoom
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> fetch<span style="color: black;">&#40;</span>pt<span style="color: black;">&#41;</span>:
 <span style="color: #ff7700;font-weight:bold;">if</span> pt.<span style="color: black;">zoom</span> &gt; Core.<span style="color: black;">Coordinate</span>.<span style="color: black;">MAX_ZOOM</span>:
  <span style="color: #ff7700;font-weight:bold;">return</span>
&nbsp;
 <span style="color: #ff7700;font-weight:bold;">if</span> download<span style="color: black;">&#40;</span>pt<span style="color: black;">&#41;</span>:
  z = pt.<span style="color: black;">zoomBy</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
  fetch<span style="color: black;">&#40;</span>z<span style="color: black;">&#41;</span>
  fetch<span style="color: black;">&#40;</span>z.<span style="color: black;">right</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
  fetch<span style="color: black;">&#40;</span>z.<span style="color: black;">down</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
  fetch<span style="color: black;">&#40;</span>z.<span style="color: black;">down</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">right</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> download<span style="color: black;">&#40;</span>pt<span style="color: black;">&#41;</span>:
  url = layer.<span style="color: black;">getTileUrls</span><span style="color: black;">&#40;</span>pt<span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
  <span style="color: #ff7700;font-weight:bold;">try</span>:
   <span style="color: #dc143c;">os</span>.<span style="color: black;">makedirs</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;tiles/%d/%d&quot;</span> % <span style="color: black;">&#40;</span>pt.<span style="color: black;">zoom</span>, pt.<span style="color: black;">row</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
  <span style="color: #ff7700;font-weight:bold;">except</span>: <span style="color: #ff7700;font-weight:bold;">pass</span>
  fn = <span style="color: #483d8b;">&quot;tiles/%d/%d/%d_%d.jpg&quot;</span> % <span style="color: black;">&#40;</span>pt.<span style="color: black;">zoom</span>, pt.<span style="color: black;">row</span>, pt.<span style="color: black;">row</span>, pt.<span style="color: black;">column</span><span style="color: black;">&#41;</span>
  <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">exists</span><span style="color: black;">&#40;</span>fn<span style="color: black;">&#41;</span>:
   <span style="color: #ff7700;font-weight:bold;">try</span>:
    m = Image.<span style="color: #008000;">open</span><span style="color: black;">&#40;</span>fn<span style="color: black;">&#41;</span>
    a,b,c,d = m.<span style="color: black;">getbbox</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> d &gt; <span style="color: #ff4500;">1</span>
   <span style="color: #ff7700;font-weight:bold;">except</span>:
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span>
  <span style="color: #ff7700;font-weight:bold;">print</span> url
  <span style="color: #ff7700;font-weight:bold;">try</span>:
   <span style="color: #808080; font-style: italic;"># should use urllib2 to fake user agent here</span>
   data = <span style="color: #dc143c;">urllib</span>.<span style="color: black;">urlopen</span><span style="color: black;">&#40;</span>url<span style="color: black;">&#41;</span>.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
   out = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span>fn, <span style="color: #483d8b;">'w'</span><span style="color: black;">&#41;</span>
   out.<span style="color: black;">write</span><span style="color: black;">&#40;</span>data<span style="color: black;">&#41;</span>
   out.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
   <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">True</span>
  <span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #dc143c;">urllib2</span>.<span style="color: black;">HTTPError</span>, e:
   <span style="color: #ff7700;font-weight:bold;">if</span> e.<span style="color: #dc143c;">code</span> == <span style="color: #ff4500;">404</span>:
    <span style="color: #808080; font-style: italic;">#empty tile</span>
    out = Image.<span style="color: #dc143c;">new</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'RGB'</span>, <span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    out.<span style="color: black;">save</span><span style="color: black;">&#40;</span>fn<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span>
&nbsp;
  <span style="color: #808080; font-style: italic;">#should not reach this point. add better error handling</span>
  <span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">-1</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">&quot;__main__&quot;</span>:
 <span style="color: #dc143c;">sys</span>.<span style="color: black;">path</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'trunk/py/'</span><span style="color: black;">&#41;</span>
 <span style="color: #ff7700;font-weight:bold;">from</span> ModestMaps <span style="color: #ff7700;font-weight:bold;">import</span> *
&nbsp;
 layer = Google.<span style="color: black;">AerialProvider</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
 bbox = parselink<span style="color: black;">&#40;</span><span style="color: #483d8b;">'http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=new++york,+ny&amp;amp;ie=UTF8&amp;amp;ll=40.75506,-73.969917&amp;amp;spn=0.100907,0.197926&amp;amp;t=h&amp;amp;z=13&amp;amp;iwloc=addr'</span><span style="color: black;">&#41;</span>
 ne = layer.<span style="color: black;">locationCoordinate</span><span style="color: black;">&#40;</span>Geo.<span style="color: black;">Location</span><span style="color: black;">&#40;</span>bbox<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>, bbox<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>.<span style="color: black;">zoomTo</span><span style="color: black;">&#40;</span>bbox<span style="color: black;">&#91;</span><span style="color: #ff4500;">-1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>.<span style="color: black;">container</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
 sw = layer.<span style="color: black;">locationCoordinate</span><span style="color: black;">&#40;</span>Geo.<span style="color: black;">Location</span><span style="color: black;">&#40;</span>bbox<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>, bbox<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>.<span style="color: black;">zoomTo</span><span style="color: black;">&#40;</span>bbox<span style="color: black;">&#91;</span><span style="color: #ff4500;">-1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>.<span style="color: black;">container</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
 cur = ne.<span style="color: #dc143c;">copy</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
 <span style="color: #ff7700;font-weight:bold;">while</span> cur.<span style="color: black;">row</span> &lt;= sw.<span style="color: black;">row</span>:
   <span style="color: #ff7700;font-weight:bold;">while</span> cur.<span style="color: black;">column</span> &gt;= sw.<span style="color: black;">column</span>:
    fetch<span style="color: black;">&#40;</span>cur.<span style="color: #dc143c;">copy</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    cur = cur.<span style="color: black;">left</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
   cur.<span style="color: black;">column</span> = ne.<span style="color: black;">column</span>
   cur = cur.<span style="color: black;">down</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Or get the file <a href="http://denislaprise.com/wp-content/uploads/2008/04/goog.pys">here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://denislaprise.com/2008/04/02/downloading-google-maps-tiles-using-modestmaps/feed/</wfw:commentRss>
		</item>
		<item>
		<title>survol du rôle foncier montréalais</title>
		<link>http://denislaprise.com/2008/03/26/survol-du-role-foncier-montrealais/</link>
		<comments>http://denislaprise.com/2008/03/26/survol-du-role-foncier-montrealais/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 18:39:48 +0000</pubDate>
		<dc:creator>denis</dc:creator>
		
		<category><![CDATA[economy]]></category>

		<category><![CDATA[montreal]]></category>

		<category><![CDATA[foncier]]></category>

		<category><![CDATA[mtl]]></category>

		<category><![CDATA[role]]></category>

		<guid isPermaLink="false">http://denislaprise.com/2008/03/26/survol-du-role-foncier-montrealais/</guid>
		<description><![CDATA[Voici quelques données extraites du rôle foncier de Montréal*
Valeur moyenne des bâtiments: 232,473$
Valeur moyenne des terrains: 91,696$
Année de construction moyenne: 1962
Les 10 plus gros propriétaires sont:


VILLE DE MONTREAL
2,074,874,601$


LA VILLE DE MONTREAL - SERVICE DE LA GESTION IMMOBILIERE
1,270,319,400$


COMMISSION SCOLAIRE DE MONTREAL
865,440,600$


GOUVERNEMENT FEDERAL MINS DES TRANSPORTS
766,472,200$


SOCIETE IMMOBILIERE DU QUEBEC
565,518,300$


UNIVERSITE DE MONTREAL
554,217,800$


THE ROYAL INSTITUTION FOR THE ADVANCEMENT OF [...]]]></description>
			<content:encoded><![CDATA[<p>Voici quelques données extraites du rôle foncier de Montréal*</p>
<p>Valeur moyenne des bâtiments: 232,473$<br />
Valeur moyenne des terrains: 91,696$<br />
Année de construction moyenne: 1962</p>
<p>Les 10 plus gros propriétaires sont:</p>
<table>
<tr>
<td>VILLE DE MONTREAL</td>
<td>2,074,874,601$</td>
</tr>
<tr>
<td>LA VILLE DE MONTREAL - SERVICE DE LA GESTION IMMOBILIERE</td>
<td>1,270,319,400$</td>
</tr>
<tr>
<td>COMMISSION SCOLAIRE DE MONTREAL</td>
<td>865,440,600$</td>
</tr>
<tr>
<td>GOUVERNEMENT FEDERAL MINS DES TRANSPORTS</td>
<td>766,472,200$</td>
</tr>
<tr>
<td>SOCIETE IMMOBILIERE DU QUEBEC</td>
<td>565,518,300$</td>
</tr>
<tr>
<td>UNIVERSITE DE MONTREAL</td>
<td>554,217,800$</td>
</tr>
<tr>
<td>THE ROYAL INSTITUTION FOR THE ADVANCEMENT OF LEARNING</td>
<td>531,381,400$</td>
</tr>
<tr>
<td>9145 4090 QUEBEC INC(EMPHYTEOTE)</td>
<td>515,000,000$</td>
</tr>
<tr>
<td>COMPAGNIE DES CHEMINS DE FER NATIONAUX DU CANADA</td>
<td>476,320,700$</td>
</tr>
<tr>
<td>UNIVERSITE DU QUEBEC A MONTREAL</td>
<td>463,720,200$</td>
</tr>
</table>
<p>Liste des priopriétaires possédant le plus de logements:</p>
<table>
<tr>
<td>OFFICE MUNICIPAL D&#8217;HABITATION DE MONTREAL</td>
<td>7,327</td>
</tr>
<tr>
<td>IMMOBILIERE SHQ</td>
<td>6,717</td>
</tr>
<tr>
<td>SOCIETE D&#8217;HABITATION ET DE DEVELOPPEMENTDE MONTREAL</td>
<td>3,578</td>
</tr>
<tr>
<td>F D L COMPAGNIE LTEE</td>
<td>2,709</td>
</tr>
<tr>
<td>SOCIETE D&#8217;HABITATION DU QUEBEC</td>
<td>2,083</td>
</tr>
<tr>
<td>IMMOBILIERE SHQ(EMPHYTEOTE)</td>
<td>1,659</td>
</tr>
<tr>
<td>GROUPE IMMOBILIER EDDY SAVOIE INC.</td>
<td>1,454</td>
</tr>
<tr>
<td>IMMOBILIERE SHQ(SUPERFICIAIRE)</td>
<td>1,449</td>
</tr>
<tr>
<td>3630005 CANADA INC</td>
<td>1,357</td>
</tr>
<tr>
<td>1541651 ONTARIO INC(EMPHYTEOTE)</td>
<td>1,351</td>
</tr>
</table>
<p>Nombre total de locaux commerciaux: 37,037<br />
Nombre total de logements: 904,583</p>
<p>Et maintenant, la valeur totale de la ville: 137,633,428,804$</p>
<p>* Extrait à partir de 446772 propriétés dans les arrondissements suivants:<br />
Ahuntsic/Cartierville<br />
Anjou<br />
Côte-des-Neiges/Notre-Dame-de-Grâce<br />
L&#8217;Île-Bizard/Sainte-Geneviève<br />
LaSalle<br />
Lachine<br />
Mercier/Hochelaga-Maisonneuve<br />
Montréal-Nord<br />
Outremont<br />
Pierrefonds/Roxboro<br />
Plateau Mont-Royal<br />
Rivière-des-Prairies/Pointe-aux-Trembles<br />
Rosemont/Petite-Patrie<br />
Saint-Laurent<br />
Saint-Léonard<br />
Sud-Ouest<br />
Verdun<br />
Ville-Marie<br />
Villeray/Saint-Michel/Parc-Extension</p>
]]></content:encoded>
			<wfw:commentRss>http://denislaprise.com/2008/03/26/survol-du-role-foncier-montrealais/feed/</wfw:commentRss>
		</item>
		<item>
		<title>video spam?</title>
		<link>http://denislaprise.com/2008/03/21/video-spam/</link>
		<comments>http://denislaprise.com/2008/03/21/video-spam/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 06:34:20 +0000</pubDate>
		<dc:creator>denis</dc:creator>
		
		<category><![CDATA[random]]></category>

		<category><![CDATA[video spam]]></category>

		<guid isPermaLink="false">http://denislaprise.com/2008/03/21/video-spam/</guid>
		<description><![CDATA[I just stumped upon those two links, which I believe are spam:
http://www.howcast.com/videos/1865-How-To-Get-FREE-Online-Video-Advertising-For-Small-Business
http://www.howcast.com/videos/945-How-To-Use-Golf-To-Glean-Moneymaking-Information
The first one looks like it&#8217;s good text-to-speech with an animated 3d avatar. The second one tries to looks amateur, but it&#8217;s interesting to see how much they seem &#8220;genuine&#8221;, at least compared to emails we receive each day&#8230;
]]></description>
			<content:encoded><![CDATA[<p>I just stumped upon those two links, which I believe are spam:</p>
<p>http://www.howcast.com/videos/1865-How-To-Get-FREE-Online-Video-Advertising-For-Small-Business<br />
http://www.howcast.com/videos/945-How-To-Use-Golf-To-Glean-Moneymaking-Information</p>
<p>The first one looks like it&#8217;s good text-to-speech with an animated 3d avatar. The second one tries to looks amateur, but it&#8217;s interesting to see how much they seem &#8220;genuine&#8221;, at least compared to emails we receive each day&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://denislaprise.com/2008/03/21/video-spam/feed/</wfw:commentRss>
		</item>
		<item>
		<title>power, cooling and data centers</title>
		<link>http://denislaprise.com/2008/02/22/power-cooling-and-data-centers/</link>
		<comments>http://denislaprise.com/2008/02/22/power-cooling-and-data-centers/#comments</comments>
		<pubDate>Fri, 22 Feb 2008 18:35:14 +0000</pubDate>
		<dc:creator>denis</dc:creator>
		
		<category><![CDATA[economy]]></category>

		<category><![CDATA[datacenters]]></category>

		<category><![CDATA[quebec]]></category>

		<guid isPermaLink="false">http://denislaprise.com/2008/02/22/power-cooling-and-data-centers/</guid>
		<description><![CDATA[Essential report to anyone involved in the data center business. The scary facts:
 A 1MW Data Center takes 177 Million kWH
– Worth approx $17mil over it’s 10 year life (at .10 cents per kWH)
source: APC-MGE
• By 2008, 50% of today’s Data Centers will have insufficient
power and cooling;
– By 2009, energy costs will become the 2nd [...]]]></description>
			<content:encoded><![CDATA[<p>Essential <a href="http://www.nanog.org/mtg-0802/presentations/Snowhorn-Power.pdf">report</a> to anyone involved in the data center business. The scary facts:</p>
<blockquote><p> A 1MW Data Center takes 177 Million kWH<br />
– Worth approx $17mil over it’s 10 year life (at .10 cents per kWH)<br />
source: APC-MGE<br />
• By 2008, 50% of today’s Data Centers will have insufficient<br />
power and cooling;<br />
– By 2009, energy costs will become the 2nd highest cost of a Data<br />
Center<br />
source: Gartner<br />
• By 2010, half of all (Enterprise) Data Centers will have to<br />
relocate or outsource applications to another facility.<br />
– During the next 5 years, 90% of all companies will experience some<br />
kind of power disruption. In that same period one in four companies<br />
will experience a significant business disruption<br />
source: Data Center Institute<br />
• Humans created 161 Exabytesof data in 2006.<br />
– Approximately 3 Million times the information in all the books, ever<br />
written<br />
source: IDC</p></blockquote>
<p>Power and cooling being the key issue here, I can&#8217;t understand why there is no booming data centers business in Québec, a province with huge water resources, cheap electricity and fiber availability.</p>
]]></content:encoded>
			<wfw:commentRss>http://denislaprise.com/2008/02/22/power-cooling-and-data-centers/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
