<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;A0ENQXsyeCp7ImA9WxNbEk8.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731</id><updated>2009-11-14T21:14:50.590+01:00</updated><title>The Typethinker</title><subtitle type="html">Trying to make sense</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://typethinker.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>55</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/typethinker" type="application/atom+xml" /><feedburner:emailServiceId>typethinker</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;CkYEQnw9fip7ImA9WxNWGEw.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-3589197490931149507</id><published>2009-10-17T22:00:00.002+02:00</published><updated>2009-10-17T22:08:23.266+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-17T22:08:23.266+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>Disabled for your protection</title><content type="html">&lt;p&gt;My Firefox, on Windows, just reported that it had disabled the Microsoft .NET Framework Assistant 1.1 extension and the Windows Presentation Foundation plugin. Supposedly, these were security issues. If I'd be so kind as to restart the browser for the changes to take effect.&lt;/p&gt;
&lt;p&gt;Well, whatever, go ahead. After the restart, the Extensions window pops up, showing .NET Framework Assistant as &amp;ldquo;Disabled for your protection.&amp;rdquo; Phew, thank you.&lt;/p&gt;
&lt;p&gt;But now I'm curious. What's so evil about these Microsoft plugins that Mozilla feels the need to block them automatically? Luckily, there is a &amp;ldquo;More Information&amp;rdquo; link right there in the dialogue! So I click it:&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JMO36jorXIA/StojiTuFvMI/AAAAAAAAAfI/dnzGjl7WIjE/s1600-h/firefox-security.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 359px;" src="http://3.bp.blogspot.com/_JMO36jorXIA/StojiTuFvMI/AAAAAAAAAfI/dnzGjl7WIjE/s400/firefox-security.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5393662576045702338" /&gt;&lt;/a&gt;
&lt;p&gt;It's great to see that Mozilla really cares about my security.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-3589197490931149507?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/3589197490931149507/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=3589197490931149507" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/3589197490931149507?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/3589197490931149507?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/VEZy26Kk8Eg/disabled-for-your-protection.html" title="Disabled for your protection" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_JMO36jorXIA/StojiTuFvMI/AAAAAAAAAfI/dnzGjl7WIjE/s72-c/firefox-security.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2009/10/disabled-for-your-protection.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04AQXc-cSp7ImA9WxNQGEs.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-7627462124781317776</id><published>2009-09-25T08:41:00.007+02:00</published><updated>2009-09-25T08:59:00.959+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-25T08:59:00.959+02:00</app:edited><title>Digital signatures made easy</title><content type="html">&lt;p&gt;Some time ago, a friend of mine discovered that somebody was plagiarizing the content of this blog. I'm not going to provide this guy with link juice, but you can find it through &lt;a href="http://www.google.com/search?q=&amp;quot;incorrect+application+configuration&amp;quot;"&gt;Google&lt;/a&gt; easily. The post is an exact duplicate of my &lt;a href="http://typethinker.blogspot.com/2007/12/visual-c-application-configuration.html"&gt;Visual C++/Studio: Application configuration incorrect?&lt;/a&gt;, except for the title. Even my remark at the end, which clearly suggests that the author of the post is also a developer on &lt;a href="http://taekwindow.sf.net/"&gt;Taekwindow&lt;/a&gt;, has been copied with the link intact.&lt;/p&gt;

&lt;p&gt;Now imitation is the sincerest form of flattery and all that, but stealing my content without even mentioning my name goes too far. I posted as much on this guy's blog, but have received no response. So in the end I overcame my aversion and filed a &lt;a href="http://www.google.com/support/blogger/bin/request.py?contact_type=blogger_dmca_infringment"&gt;DMCA infringement notification&lt;/a&gt; to Blogger.&lt;/p&gt;

&lt;p&gt;Have a look at that form. Scroll all the way down. What will you see?
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JMO36jorXIA/Srxn_IXhzpI/AAAAAAAAAfA/y4CVzGj_Fag/s1600-h/signature.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:left;cursor:pointer; cursor:hand;width: 396px; height: 62px;" src="http://4.bp.blogspot.com/_JMO36jorXIA/Srxn_IXhzpI/AAAAAAAAAfA/y4CVzGj_Fag/s400/signature.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5385293588703858322" /&gt;&lt;/a&gt;
Look at that! Isn't it beautiful? I'm supposed to &lt;em&gt;sign a digital form&lt;/em&gt;&amp;hellip; by typing my &amp;ldquo;signature&amp;rdquo; in a text box! Also, this is &lt;em&gt;legally binding&lt;/em&gt;!&lt;/p&gt;

&lt;p&gt;That cracked me up. It cracked me up so completely that I typed a beautiful capital X in that box and hit Submit.&lt;/p&gt;

&lt;p&gt;Today, I received an e-mail from Blogger. It said:&lt;/p&gt;

&lt;blockquote&gt;We have received your DMCA complaint regarding &lt;em&gt;no-link-juice-for-you&lt;/em&gt;.blogspot.com dated 09/20/09. Our policy requires that DMCA complaints be signed by the copyright owner or an agent of such. As your DMCA complaint was unsigned, we cordially request that you re-send us a signed copy of your notice by fax to (650) 618-2680. Once we receive your complaint, we will investigate the issue and process your request accordingly.&lt;/blockquote&gt;

&lt;p&gt;I still wonder what would have happened if I'd just typed my name into that box.&lt;/p&gt;

&lt;p&gt;Hilarious.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-7627462124781317776?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/7627462124781317776/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=7627462124781317776" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/7627462124781317776?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/7627462124781317776?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/rHuDfh0FXFI/some-time-ago-friend-of-mine-discovered.html" title="Digital signatures made easy" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_JMO36jorXIA/Srxn_IXhzpI/AAAAAAAAAfA/y4CVzGj_Fag/s72-c/signature.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2009/09/some-time-ago-friend-of-mine-discovered.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IARng7fip7ImA9WxNRGUw.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-1844485330617918879</id><published>2009-09-14T11:04:00.003+02:00</published><updated>2009-09-14T11:12:27.606+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-14T11:12:27.606+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="latex" /><title>Centering a figure on the page in LaTeX</title><content type="html">&lt;p&gt;With those wide margins of LaTeX, it sometimes happens that you have a figure or table that is too wide, and just sticks out to the right. Chances are that you want it centered, sticking out equally to the right and to the left, but tough luck: the standard &lt;code&gt;center&lt;/code&gt; environment still aligns it with the left margin, and so does the &lt;code&gt;\centering&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;I was about to write a package to provide an environment that centers its content on the &lt;em&gt;page&lt;/em&gt; instead of inside the text. This is not too difficult, but preventing the &lt;code&gt;overfull \hbox&lt;/code&gt; errors is tricky (they are so bad that even &lt;code&gt;\hbadness=10000&lt;/code&gt; has no effect). But then I stumbled into a standard LaTeX command that does exactly what I want.&lt;/p&gt;

&lt;p&gt;So here's how to center your figure whilst ignoring the text margins:&lt;br/&gt;
&lt;code&gt;\centerline{\includegraphics{...}}&lt;/code&gt;&lt;br/&gt;
It also works inside float environments such as &lt;code&gt;figure&lt;/code&gt;. That was easy!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-1844485330617918879?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/1844485330617918879/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=1844485330617918879" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/1844485330617918879?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/1844485330617918879?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/WNTcIy9lbQI/centering-figure-on-page-in-latex.html" title="Centering a figure on the page in LaTeX" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2009/09/centering-figure-on-page-in-latex.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEANQnoyfSp7ImA9WxJVFkw.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-3509106127650196632</id><published>2009-07-03T12:20:00.002+02:00</published><updated>2009-07-03T12:26:33.495+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-03T12:26:33.495+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>Speeding up Kile</title><content type="html">&lt;p&gt;Even though I'm mostly a Gnome user, my LaTeX editor of choice is &lt;a href="http://kile.sourceforge.net/"&gt;Kile&lt;/a&gt;. Unfortunately, it can become a &lt;a href="http://bugs.kde.org/show_bug.cgi?id=171099"&gt;bit sluggish&lt;/a&gt;, especially when dealing with long lines. (I hate artificial line breaks, so I just type one line per paragraph and turn on dynamic word wrapping.)&lt;/p&gt;

&lt;p&gt;This seems to have something to do with rendering. To make Kile considerably faster, start it like this:&lt;br/&gt;
&lt;code&gt;kile --graphicssystem raster&lt;/code&gt;&lt;br/&gt;
Instead of &lt;code&gt;raster&lt;/code&gt;, you can also try &lt;code&gt;opengl&lt;/code&gt;, which is &lt;a href="http://labs.trolltech.com/blogs/2008/10/22/so-long-and-thanks-for-the-blit/"&gt;supposed to be even faster&lt;/a&gt;, but not considered stable yet. YMMV.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-3509106127650196632?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/3509106127650196632/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=3509106127650196632" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/3509106127650196632?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/3509106127650196632?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/4H4TlOMnR_s/speeding-up-kile.html" title="Speeding up Kile" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2009/07/speeding-up-kile.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkINR385cCp7ImA9WxJWFE0.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-9115574886839560014</id><published>2009-06-15T15:56:00.002+02:00</published><updated>2009-06-19T11:43:16.128+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-19T11:43:16.128+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>Creating a multi-page PDF from images</title><content type="html">&lt;p&gt;It is often convenient to pour a series of JPEG (or PNG, or GIF) files into a PDF, for example for printing or for e-mailing. Given the power of the Linux command line, this is surprisingly difficult, but I found a fairly straightforward way to do it. Skip to the bottom if you just want the oneliner.&lt;/p&gt;

&lt;p&gt;Many websites will tell you the following:&lt;br/&gt;
&lt;code&gt;convert *.jpg output.pdf&lt;/code&gt;&lt;br/&gt;
Easy, no? &lt;strong&gt;Don't do this.&lt;/strong&gt; Why? Look at this:&lt;/p&gt;
&lt;pre&gt;-rw-r--r--  1 thomas thomas &lt;strong&gt;129826204&lt;/strong&gt; 2009-06-15 15:29 output.pdf
-rw-r--r--  1 thomas thomas    947022 2009-06-15 15:04 page1.jpg
-rw-r--r--  1 thomas thomas    962956 2009-06-15 15:05 page2.jpg
-rw-r--r--  1 thomas thomas    925291 2009-06-15 12:54 page3.jpg
-rw-r--r--  1 thomas thomas    952717 2009-06-15 12:54 page4.jpg
-rw-r--r--  1 thomas thomas    642471 2009-06-15 15:08 page5.jpg
&lt;/pre&gt;
&lt;p&gt;The original JPG files are less than 5 MB altogether, but the resulting PDF is a whopping 124 MB! Clearly, &lt;code&gt;convert&lt;/code&gt; (from the otherwise excellent &lt;a href="http://www.imagemagick.org/"&gt;ImageMagick&lt;/a&gt; bundle) re-encodes the images somehow, instead of embedding them straight into the PDF file.&lt;/p&gt;

&lt;p&gt;Enter the little-known utility &lt;a href="http://www.inf.bme.hu/~pts/sam2p/"&gt;&lt;code&gt;sam2p&lt;/code&gt;&lt;/a&gt;. It comes in an Ubuntu package of the same name. In its simplest form, it converts a single image file into a PDF by embedding the image file into the PDF file. For example:&lt;br/&gt;
&lt;code&gt;sam2p page1.jpg page1.pdf&lt;br/&gt;&lt;/code&gt;
One of the shortcomings of &lt;code&gt;sam2p&lt;/code&gt; is that it does not allow you to set the page size directly, so you'll end up with PDFs that exactly fit the original images.&lt;/p&gt;

&lt;p&gt;Now we can generate all the pages as separate PDFs, but &lt;code&gt;sam2p&lt;/code&gt; cannot create a PDF with multiple pages. Enter &lt;code&gt;pdfjoin&lt;/code&gt; from the &lt;a href="http://go.warwick.ac.uk/pdfjam"&gt;&lt;code&gt;pdfjam&lt;/code&gt;&lt;/a&gt; package (available in Ubuntu under that name). It is simple to use:&lt;br/&gt;
&lt;code&gt;pdfjoin page*.pdf --outfile output.pdf&lt;br/&gt;&lt;/code&gt;
This will use a consistent page size, so it is no problem that &lt;code&gt;sam2p&lt;/code&gt; spit out pages of arbitrary size. It defaults to A4 paper; specify &lt;code&gt;--paper letterpaper&lt;/code&gt; to use the Letter format.&lt;/p&gt;

&lt;p&gt;Because I'm lazy, I wrote a little &lt;code&gt;bash&lt;/code&gt; oneliner to do the trick, then let my readers improve upon it (thanks Mark, thanks Eamon!). It is now a twoliner, but who cares:&lt;br/&gt;
&lt;code&gt;find . -maxdepth 1 -iname 'page*.jpg' -exec sam2p '{}' '{}'.pdf \;&lt;br/&gt;
pdfjoin page*.pdf --outfile output.pdf&lt;br/&gt;&lt;/code&gt;
This assumes that your input images are named &lt;code&gt;page1.jpg&lt;/code&gt;, &lt;code&gt;page2.jpg&lt;/code&gt; etcetera, and that there are no files named like &lt;code&gt;page*.pdf&lt;/code&gt; in the current directory. If you have more than 9 pages, remember to prefix a zero to keep them in order. If you want to do this for PNG or other images, remember to change the extension in both places.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-9115574886839560014?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/9115574886839560014/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=9115574886839560014" title="10 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/9115574886839560014?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/9115574886839560014?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/Y1BavMXYwdU/creating-multi-page-pdf-from-images.html" title="Creating a multi-page PDF from images" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">10</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2009/06/creating-multi-page-pdf-from-images.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMCR3cyeip7ImA9WxJRF04.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-5288679235767066976</id><published>2009-05-19T14:32:00.001+02:00</published><updated>2009-05-19T14:34:26.992+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-19T14:34:26.992+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>Windows Genuine "Advantage"</title><content type="html">&lt;p&gt;My Windows is genuine. I fail to see the advantage.&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JMO36jorXIA/ShKnNWFt07I/AAAAAAAAAco/nQ1xD9-GaOU/s1600-h/genuine-advantage.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 121px;" src="http://3.bp.blogspot.com/_JMO36jorXIA/ShKnNWFt07I/AAAAAAAAAco/nQ1xD9-GaOU/s400/genuine-advantage.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5337512356097151922" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-5288679235767066976?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/5288679235767066976/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=5288679235767066976" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/5288679235767066976?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/5288679235767066976?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/3vyEmzE_OxI/windows-genuine-advantage.html" title="Windows Genuine &quot;Advantage&quot;" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_JMO36jorXIA/ShKnNWFt07I/AAAAAAAAAco/nQ1xD9-GaOU/s72-c/genuine-advantage.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2009/05/windows-genuine-advantage.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMHR3k9eSp7ImA9WxJREkk.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-5661450908708023389</id><published>2009-05-13T22:55:00.002+02:00</published><updated>2009-05-13T23:00:36.761+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-13T23:00:36.761+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="personal" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>Accepted for Google Summer of Code!</title><content type="html">&lt;p&gt;I have been accepted for Google Summer of Code 2009! The title of my project is &amp;ldquo;Extend EclipseFP functionality for Haskell.&amp;rdquo; I have just set up a blog where I can keep all posts together that are related to this project. (This blog will also allow me to test-drive Wordpress, because as we all know &lt;a href="http://typethinker.blogspot.com/2007/04/blogger-is-bad-mmkay.html"&gt;Blogger&lt;/a&gt; &lt;a href="http://typethinker.blogspot.com/2008/09/news-flash-blogger-still-sucks.html"&gt;sucks&lt;/a&gt;.) You can find more information at my new blog: &lt;a href="http://eclipsefp.wordpress.com/"&gt;EclipseFP GSoC '09&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-5661450908708023389?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/5661450908708023389/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=5661450908708023389" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/5661450908708023389?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/5661450908708023389?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/d0bWfxgBK9I/accepted-for-google-summer-of-code.html" title="Accepted for Google Summer of Code!" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2009/05/accepted-for-google-summer-of-code.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04BRXs4cCp7ImA9WxVWFU8.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-8814340289281687971</id><published>2009-02-25T01:15:00.002+01:00</published><updated>2009-02-25T01:32:34.538+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-25T01:32:34.538+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="latex" /><title>Sumatra PDF Viewer for LaTeX users on Windows</title><content type="html">&lt;p&gt;If you use LaTeX on Windows, or in particular &lt;code&gt;pdflatex&lt;/code&gt;, you must have noticed that viewing the resulting PDF file is not as easy as you would think.&lt;/p&gt;

&lt;p&gt;Sure, &lt;a href="http://get.adobe.com/reader/"&gt;Adobe Reader&lt;/a&gt; displays it fine. But apart from being bloatware and slow as hell, it also locks the PDF file it is displaying. Thus you cannot rerun &lt;code&gt;pdflatex&lt;/code&gt; until you close the file in Reader, because the output file cannot be overwritten. This is a pain in the arse.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.foxitsoftware.com/pdf/rd_intro.php"&gt;Foxit Reader&lt;/a&gt; seems like a decent alternative; it is much faster and less bloated than Adobe Reader (even though the installer tries to get you hooked on several other pieces of software that you probably don't want). Foxit does not lock the currently viewed file; however, it offers no reload option, and if you overwrite the output file, it will only display blank pages for what's not currently cached.&lt;/p&gt;

&lt;p&gt;Enter &lt;a href="http://blog.kowalczyk.info/software/sumatrapdf/index.html"&gt;Sumatra PDF&lt;/a&gt;. A very lightweight and very simple program, contained in a single executable file, written by a single developer, but it has &lt;em&gt;the&lt;/em&gt; one killer feature that LaTeX authors need. It automatically reloads the PDF file whenever it changes. And it stays on the same place in the document while it does this.&lt;/p&gt;

&lt;p&gt;There is currently a bug that causes the window to demaximize when it reloads, but you can work around that simply by not maximizing the window in the first place. This little viewer will definitely make my life easier.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-8814340289281687971?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/8814340289281687971/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=8814340289281687971" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/8814340289281687971?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/8814340289281687971?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/oVHFUEmg1xU/sumatra-pdf-viewer-for-latex-users-on.html" title="Sumatra PDF Viewer for LaTeX users on Windows" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2009/02/sumatra-pdf-viewer-for-latex-users-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMBRHwzeSp7ImA9WxVQFkw.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-4882568804203874909</id><published>2009-02-03T00:29:00.002+01:00</published><updated>2009-02-03T00:30:55.281+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-03T00:30:55.281+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>Hamlet – by whom?</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JMO36jorXIA/SYeB9ujtn5I/AAAAAAAAAbY/w-yyZkqMTU0/s1600-h/hamlet.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 145px;" src="http://1.bp.blogspot.com/_JMO36jorXIA/SYeB9ujtn5I/AAAAAAAAAbY/w-yyZkqMTU0/s400/hamlet.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5298346384094502802" /&gt;&lt;/a&gt;
&lt;p&gt;Apparently the Googlebot came by at just the wrong time.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-4882568804203874909?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/4882568804203874909/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=4882568804203874909" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/4882568804203874909?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/4882568804203874909?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/RDvmX9SOfsQ/hamlet-by-whom.html" title="Hamlet &amp;ndash; by whom?" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_JMO36jorXIA/SYeB9ujtn5I/AAAAAAAAAbY/w-yyZkqMTU0/s72-c/hamlet.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2009/02/hamlet-by-whom.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUGSH05eyp7ImA9WxVQFEg.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-4941580422537431987</id><published>2009-02-01T02:20:00.003+01:00</published><updated>2009-02-01T02:37:09.323+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-01T02:37:09.323+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><title>USB: the right direction</title><content type="html">&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 156px; height: 160px;" src="http://2.bp.blogspot.com/_JMO36jorXIA/SYT8YgdpMtI/AAAAAAAAAbQ/MfvtTIQHkCk/s400/IMG_3556.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5297636559655875282" /&gt;&lt;p&gt;USB plugs are annoying, because it's hard to see how to plug them in, and you have only a 50% chance of getting it right on the first try. But I recently noticed what seems to be a little-known feature that increases your odds. There is a little USB logo on one side of nearly all plugs. It seems that manufacturers mount their ports in such a way that &lt;strong&gt;the logo should face upwards&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I haven't figured out the case of side-facing ports yet, but maybe there is a pattern there as well. If your computer has such ports, let me know in the comments which way the logo should face on those!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-4941580422537431987?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/4941580422537431987/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=4941580422537431987" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/4941580422537431987?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/4941580422537431987?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/RgENQc2qd8Q/usb-right-direction.html" title="USB: the right direction" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_JMO36jorXIA/SYT8YgdpMtI/AAAAAAAAAbQ/MfvtTIQHkCk/s72-c/IMG_3556.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2009/02/usb-right-direction.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUMSX0_fCp7ImA9WxVQFEg.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-8584156192420011228</id><published>2009-01-22T01:52:00.008+01:00</published><updated>2009-02-01T02:38:08.344+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-01T02:38:08.344+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="latex" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>Sequential page numbering in LaTeX</title><content type="html">&lt;p&gt;Did you ever notice that the page number that your PDF reader gave you was not the same as the page number printed at the bottom of the page? By default, some LaTeX commands, such as &lt;code&gt;\tableofcontents&lt;/code&gt;, reset the page number to 1.&lt;/p&gt;

&lt;p&gt;I don't like this behaviour. I just want my cover page to be numbered 1, the next to be numbered 2, etcetera. This way, the &amp;lsquo;physical&amp;rsquo; and &amp;lsquo;virtual&amp;rsquo; page numbers line up nicely. It also prevents some problems with &lt;code&gt;hyperref&lt;/code&gt;, which will otherwise create duplicate page labels.&lt;/p&gt;

&lt;p&gt;You can get sequential page numbering by putting the following short commands in your document preamble:&lt;br/&gt;
&lt;code&gt;\let\oldsetcounter=\setcounter&lt;br/&gt;
\renewcommand\setcounter[2]{%&lt;br/&gt;
&amp;nbsp;&amp;nbsp;\ifx\not{#1}{page}\oldsetcounter{#1}{#2}\fi}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This simply overrides &lt;code&gt;\setcounter&lt;/code&gt;, such that it ignores any attempt to set the &lt;code&gt;page&lt;/code&gt; counter, which holds the current page number. Ugly, but it works.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-8584156192420011228?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/8584156192420011228/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=8584156192420011228" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/8584156192420011228?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/8584156192420011228?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/Ufa-PDlqm-M/sequential-page-numbering-in-latex.html" title="Sequential page numbering in LaTeX" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2009/01/sequential-page-numbering-in-latex.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cASHw7eSp7ImA9WxVSGUQ.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-6714252529719524115</id><published>2009-01-15T05:52:00.002+01:00</published><updated>2009-01-15T06:57:29.201+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-15T06:57:29.201+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="thoughts" /><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><title>Verified by Visa – verily?</title><content type="html">&lt;p&gt;Today I ran into an excellent example of false security &amp;ndash; with horrible usability to boot. I was helping my landlady to purchase a laptop online using a Visa card. At the checkout step, a screen appeared that we did not understand. It came from Visa itself and asked for the password associated with the credit card.&lt;/p&gt;

&lt;p&gt;The password form was in an IFRAME, so the address bar did not light up green. I did not bother to check the security certificate by hand, or else I &lt;a href="http://en.wikipedia.org/wiki/3-D_Secure#Criticism"&gt;might not have dared to continue at all&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But we did read the FAQ that was linked to. As it turned out, this &lt;a href="http://it.slashdot.org/article.pl?sid=08/08/08/1623221"&gt;&amp;ldquo;optional&amp;rdquo;&lt;/a&gt; &amp;lsquo;Verified by Visa&amp;rsquo; system makes online purchases more secure. It did not seem at all optional. Well, only more secure then. Right?&lt;/p&gt;

&lt;p&gt;Wrong. How exactly does one get a Verified by Visa password? Let's click the &amp;ldquo;forgot your password&amp;rdquo; button and find out. To reset the password, you need to specify:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the 3-digit card validation code&lt;/li&gt;
&lt;li&gt;your name, as written on the card&lt;/li&gt;
&lt;li&gt;the card expiry date&lt;/li&gt;
&lt;li&gt;the year and month of your birth&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first three of these four pieces of information are written on your credit card, and also submitted in any web form that involves a credit card purchase. By assumption, an attacker already has this information, or else the extra password protection wouldn't serve any purpose. So the &lt;em&gt;only&lt;/em&gt; extra piece of information that is asked for is your birth year and month. Not exactly information that is hard to find, or even to brute-force if you put your mind to it. They might as well have skipped the password and asked for your birth date instead.&lt;/p&gt;

&lt;p&gt;But well, it doesn't make you any &lt;em&gt;less&lt;/em&gt; secure, so we continued to set up a password. First attempt failed: &amp;ldquo;use letters and numbers only&amp;rdquo;. Because, you know, secure passwords do not involve special characters at all. Second attempt: &amp;ldquo;please use both letters and numbers&amp;rdquo;. If you're going to use stupid limitations, at least tell me beforehand. Third attempt: &amp;ldquo;please use between 8 and 12 characters&amp;rdquo;. By now it seemed more like a CAPTCHA to me.&lt;/p&gt;

&lt;p&gt;Then, finally, the password was accepted and we could proceed&amp;hellip; to the next error message. Turns out that NoScript blocked the transaction, even with Javascript turned on. If NoScript does that to you, it probably means that you're doing something very, very wrong. But finally, after convincing NoScript that it was okay, the payment got through.&lt;/p&gt;

&lt;p&gt;Stupidity can, in rare cases, be forgiven. But not if you're the largest credit card issuer in the world.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-6714252529719524115?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/6714252529719524115/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=6714252529719524115" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/6714252529719524115?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/6714252529719524115?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/8H4tQTlqF4E/verified-by-visa-verily.html" title="Verified by Visa – verily?" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2009/01/verified-by-visa-verily.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YDRHY7fyp7ImA9WxVQEEo.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-6176411728470552742</id><published>2008-12-14T23:40:00.003+01:00</published><updated>2009-01-27T18:59:35.807+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-27T18:59:35.807+01:00</app:edited><title>XMonad with Ubuntu, dvorak, Pidgin and Skype</title><content type="html">&lt;p&gt;The last two days I have been playing around with &lt;a href="http://xmonad.org/"&gt;XMonad&lt;/a&gt;, a tiling window manager for X, written in my favourite language Haskell. I now have a setup that is to my liking. It is intended for Ubuntu, using the dvorak keyboard layout, with key bindings that are a mixture of Gnome and XMonad default bindings.&lt;/p&gt;

&lt;p&gt;The thing that I'm most proud of, however, is that I made a customized version of &lt;a href="http://hackage.haskell.org/packages/archive/xmonad-contrib/0.8/doc/html/XMonad-Layout-IM.html"&gt;&lt;code&gt;XMonad.Layout.IM&lt;/code&gt;&lt;/a&gt; that allows for multiple buddy lists. The buddy lists from Skype and Pidgin are placed on the right side of the F10 workspace, while chat windows are automatically placed in the remaining area.&lt;/p&gt;

&lt;p&gt;I realize that the target audience (Ubuntu users, typing on dvorak, interested in alternative window managers, and using Pidgin and Skype) may be quite small, but in case my configuration file, or parts of it, are useful to somebody, I put it &lt;a href="http://haskell.org/haskellwiki/Xmonad/Config_archive/Thomas_ten_Cate%27s_xmonad.hs"&gt;on the Haskell wiki&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This requires XMonad 0.8 or above. This version is in Ubuntu Intrepid. Ubuntu Hardy ships with an old version, so there you will need to &lt;a href="http://xmonad.org/intro.html"&gt;install XMonad by hand&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-6176411728470552742?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/6176411728470552742/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=6176411728470552742" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/6176411728470552742?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/6176411728470552742?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/wlnxH_7Pz-M/xmonad-with-ubuntu-dvorak-pidgin-and.html" title="XMonad with Ubuntu, dvorak, Pidgin and Skype" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">8</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2008/12/xmonad-with-ubuntu-dvorak-pidgin-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcARX8_eSp7ImA9WxRUFEw.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-1340254056630868990</id><published>2008-11-23T01:38:00.008+01:00</published><updated>2008-11-23T05:54:04.141+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-23T05:54:04.141+01:00</app:edited><title>Full screen forms in .NET</title><content type="html">&lt;p&gt;Today I tried to make a form take up the whole screen (including the taskbar) in C# on the .NET platform. .NET WinForms does not offer functionality to do this, so I nosed around the web. All results that I found used platform-dependent P/Invoke calls to accomplish this goal. However, I wanted to keep my code platform-independent, so I created a pure, managed .NET solution.&lt;/p&gt;

&lt;p&gt;First, we need some member variables to remember the window state, so we can come back out of full screen mode:&lt;/p&gt;
&lt;pre&gt;private FormWindowState m_previousWindowState;
private Bounds m_previousBounds;
private FormBorderStyle = m_previousBorderStyle;&lt;/pre&gt;

&lt;p&gt;The code to switch into full screen mode then becomes:&lt;/p&gt;
&lt;pre&gt;m_previousBorderStyle = FormBorderStyle;
m_previousWindowState = WindowState;
m_previousBounds = Bounds;
// Stay on top of everything else.
TopMost = true;
// Remove the window border.
FormBorderStyle = FormBorderStyle.None;
// We cannot change the Bounds of a maximized form.
WindowState = FormWindowState.Normal;
// Set the size of the form to the size of its screen.
Bounds = Screen.FromControl(this).Bounds;&lt;/pre&gt;

&lt;p&gt;The code to switch back simply restores all this:&lt;/p&gt;
&lt;pre&gt;TopMost = false;
FormBorderStyle = m_previousBorderStyle;
WindowState = m_previousWindowState;
Bounds = m_previousBounds;&lt;/pre&gt;

&lt;p&gt;It's really quite simple, and I don't know why people make it more complex than it should be.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-1340254056630868990?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/1340254056630868990/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=1340254056630868990" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/1340254056630868990?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/1340254056630868990?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/RXEcASTelz0/full-screen-forms-in-net.html" title="Full screen forms in .NET" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2008/11/full-screen-forms-in-net.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4CQnw4fyp7ImA9WxRUEk8.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-3469751050969229854</id><published>2008-11-18T19:45:00.007+01:00</published><updated>2008-11-21T00:16:03.237+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-21T00:16:03.237+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>gluLookAt documentation is wrong</title><content type="html">&lt;p&gt;Today I noticed a strange omission in &lt;a href="http://pyopengl.sourceforge.net/documentation/manual/gluLookAt.3G.html"&gt;the documentation for the GLU function &lt;code&gt;gluLookAt&lt;/code&gt;&lt;/a&gt;. As the &lt;a href="http://www.opengl.org/documentation/specs/glu/glu1_3.pdf"&gt;specification&lt;/a&gt; says, the function is designed to place the camera at a certain point in the scene, point it at a certain other point, and roll it such that a certain given vector points upward in the view.&lt;/p&gt;

&lt;p&gt;First, the function computes a front vector, &lt;i&gt;F&lt;/i&gt;, by subtracting the eye point from the centre point. This normalized version of this front vector is called &lt;i&gt;f&lt;/i&gt; and is the vector that should be mapped to the &amp;minus;&lt;i&gt;z&lt;/i&gt; axis. To find the side vector, the one that maps to the &lt;i&gt;x&lt;/i&gt; axis, the cross product between the normalized front vector and the normalized up vector &lt;i&gt;UP'&lt;/i&gt; is computed. Both vectors have unit length, but the user may have specified an up vector that is not perpendicular to the front vector, so the result &lt;i&gt;s&lt;/i&gt; might not have unit length. If we used it like this, then the resulting matrix would include a scale component in the &lt;i&gt;x&lt;/i&gt; direction, resulting in a scaled scene. Hence, the side vector &lt;i&gt;s&lt;/i&gt; has to be normalized as well, which is exactly what &lt;a href="http://www.google.com/codesearch?q=show:1_RKderJ2ao:ahWk5JuB1co:rLxixP44rao"&gt;the Mesa source code for &lt;code&gt;gluLookAt&lt;/code&gt;&lt;/a&gt; does in line 134:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/* Side = forward x up */&lt;br/&gt;
cross(forward, up, side);&lt;br/&gt;
normalize(side);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;However, the &lt;code&gt;gluLookAt&lt;/code&gt; documentation &lt;em&gt;does not mention this&lt;/em&gt;! It says &amp;ldquo;&lt;i&gt;s&lt;/i&gt; = &lt;i&gt;f&lt;/i&gt; &amp;times; &lt;i&gt;UP'&lt;/i&gt;&amp;rdquo;, and follows by plugging this &lt;i&gt;s&lt;/i&gt; straight into the resulting matrix &lt;i&gt;M&lt;/i&gt;. If you implement the algorithm precisely as stated in that manual page, like I did, you will end up with an incorrect matrix.&lt;/p&gt;

&lt;p&gt;Note that, after computing the side vector, the &amp;lsquo;official&amp;rsquo; up vector is recomputed as the cross product between the side vector and the front vector. If you did it correctly and not follow the documentation literally, both have unit length. Since these are guaranteed to be perpendicular you should end up with a unit-length up vector that does not have to be normalized afterwards; and indeed the Mesa code does not do this. But if you did follow the documentation, then your up vector will also be wrong, resulting in a scene that is scaled in the &lt;i&gt;y&lt;/i&gt; direction as well.&lt;/p&gt;

&lt;p&gt;I am trying to get in touch with the OpenGL people about the problem in the documentation. I'm curious to see what will come of it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-3469751050969229854?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/3469751050969229854/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=3469751050969229854" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/3469751050969229854?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/3469751050969229854?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/iGarwuEKtxM/glulookat-documentation-is-wrong.html" title="gluLookAt documentation is wrong" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2008/11/glulookat-documentation-is-wrong.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AFRXw8fip7ImA9WxRTFko.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-4755423416237579361</id><published>2008-09-06T06:18:00.002+02:00</published><updated>2008-09-06T06:35:14.276+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-06T06:35:14.276+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>Blogger clients for Linux</title><content type="html">Since &lt;a href="http://typethinker.blogspot.com/2007/04/blogger-is-bad-mmkay.html"&gt;Blogger is&lt;/a&gt; &lt;a href="http://typethinker.blogspot.com/2008/09/news-flash-blogger-still-sucks.html"&gt;so annoying&lt;/a&gt;, I gave a couple of dedicated blogging clients a try. Here is a short summary of my findings.

An important requirement for me is that the client runs on Linux (Windows is optional, but not required). WYSIWIG editing is not important to me, as long as there's some kind of preview feature. And there must be a way to post images.

&lt;dl&gt;
&lt;dt&gt;&lt;a href="http://blogtk.sourceforge.net/"&gt;BloGTK&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;A GTK program, written in Python. Last updated in 2005. Couldn't get it to work, obviously.&lt;/dd&gt;
&lt;dt&gt;&lt;a href="http://www.dropline.net/drivel/"&gt;Drivel&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Another Gnome program. It is not in the Ubuntu repositories and the most recent Ubuntu package is for Dapper, which is ancient and fails to work. Then I noticed that image upload is not supported, so I didn't bother trying to build from source.&lt;/dd&gt;
&lt;dt&gt;&lt;a href="http://www.larryborsato.com/bleezer/"&gt;Bleezer&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;A Java program, runnable from the web via Java Web Start. The password that you type into the program is shown in plain text on the screen so at that point I gave up. I do not want to use a program with such disregard for basic security and user interface conventions.&lt;/dd&gt;
&lt;dt&gt;&lt;a href="http://www.gnome.org/~seth/gnome-blog/"&gt;Gnome Blog&lt;/a&gt;&lt;dd&gt;Sits in the way in your system tray. Not what I was looking for.&lt;/dd&gt;
&lt;dt&gt;&lt;a href="http://www.scribefire.com/"&gt;ScribeFire&lt;/a&gt;&lt;dd&gt;A Firefox plugin. Ironically much better than all the standalone applications. &lt;strong&gt;For now this is my program of choice.&lt;/strong&gt; The image upload does not work for me, however, so I filed a bug about that. ScribeFire seems to be pretty well maintained so I expect that they'll get back to me soon.&lt;/dd&gt;
&lt;/dl&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-4755423416237579361?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/4755423416237579361/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=4755423416237579361" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/4755423416237579361?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/4755423416237579361?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/m4h6HaTJ0TU/blogger-clients-for-linux.html" title="Blogger clients for Linux" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2008/09/blogger-clients-for-linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEGSHk-eSp7ImA9WxRTFko.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-4449866937509511971</id><published>2008-09-06T06:02:00.003+02:00</published><updated>2008-09-06T06:17:09.751+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-06T06:17:09.751+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>News flash: Blogger still sucks</title><content type="html">Just need to rant &lt;a href="http://typethinker.blogspot.com/2007/04/blogger-is-bad-mmkay.html"&gt;again&lt;/a&gt;. Sorry.

Some more things that are wrong with Blogger and have been around for ages:
&lt;ul&gt;
&lt;li&gt;When inserting an image, the &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; code is inserted at the top of the post, not in the place where the cursor is. You need to scroll all the way back up, cut the code, then find the place where you were typing in the annoyingly small box, and paste it there.&lt;/li&gt;
&lt;li&gt;The following crap is Blogger's idea of good image code:
&lt;code&gt;&amp;lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://&amp;hellip;"&amp;gt;&amp;lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://&amp;hellip;" border="0" alt=""id="&amp;hellip;" /&amp;gt;&amp;lt;/a&amp;gt;
&lt;/code&gt;
The part where the cursor is specified and then immediately overridden is my favourite. I haven't looked at the &amp;ldquo;deselect gracefully&amp;rdquo; bit but I suspect it is equally awful. And don't these guys know that you can specify CSS in a separate file instead of repeating it on each and every element?&lt;/li&gt;
&lt;li&gt;The preview does not use the actual CSS from the blog, so the formatting will come out all different from the preview.&lt;/li&gt;
&lt;li&gt;When toggling to preview mode and back, you are thrown back to the beginning of the post, and you'll have to scroll back to the place where you were typing. Did I mention that that box is annoyingly small?&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-4449866937509511971?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/4449866937509511971/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=4449866937509511971" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/4449866937509511971?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/4449866937509511971?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/9NsPfs44L4A/news-flash-blogger-still-sucks.html" title="News flash: Blogger still sucks" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2008/09/news-flash-blogger-still-sucks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EAQnoyfyp7ImA9WxJaF0k.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-6932743157366260372</id><published>2008-08-05T15:11:00.004+02:00</published><updated>2009-08-08T17:34:03.497+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-08T17:34:03.497+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="latex" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>A picture on the title page in LaTeX</title><content type="html">&lt;p&gt;In LaTeX, there is by default no way to put a picture on the title page or cover page that is produced by &lt;code&gt;\maketitle&lt;/code&gt;. Surprisingly, no package seemed to exist for this either. Until now, because I wrote it.&lt;/p&gt;

&lt;p&gt;The package &lt;tt&gt;titlepic.sty&lt;/tt&gt;, which can be downloaded &lt;a href="http://www.ctan.org/tex-archive/help/Catalogue/entries/titlepic.html"&gt;from CTAN&lt;/a&gt;, is very simple and easy to use. Install it by putting it in your &lt;tt&gt;texmf&lt;/tt&gt; tree and rehashing, or simply drop &lt;tt&gt;titlepic.sty&lt;/tt&gt; in the same directory as your &lt;tt&gt;.tex&lt;/tt&gt; source document. It works with the default document classes &lt;code&gt;article&lt;/code&gt;, &lt;code&gt;report&lt;/code&gt; and &lt;code&gt;book&lt;/code&gt;.&lt;p&gt;

&lt;p&gt;Include it as normal, with &lt;code&gt;\usepackage{titlepic}&lt;/code&gt;. Then, along with the usual &lt;code&gt;\title&lt;/code&gt;, &lt;code&gt;\author&lt;/code&gt; and &lt;code&gt;\date&lt;/code&gt;, put a command like the following:&lt;br/&gt;
&lt;code&gt;\titlepic{\includegraphics[width=\textwidth]{cover.jpg}}&lt;br/&gt;&lt;/code&gt;
The argument to &lt;code&gt;\titlepic&lt;/code&gt; will usually be an &lt;code&gt;\includegraphics&lt;/code&gt; command, but it can actually be pretty much anything. The output produced by this argument will be typeset centered on the title page when you invoke &lt;code&gt;\maketitle&lt;/code&gt;. (When you use the &lt;tt&gt;article&lt;/tt&gt; document class, be sure to pass it the &lt;code&gt;titlepage&lt;/code&gt; option, because articles do not have a title page by default.)&lt;/p&gt;

&lt;p&gt;There are three optional arguments that control the vertical layout of the title page:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;code&gt;tt&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Put both the title (and author, and date) and the picture at the top of the page, separated by a fixed amount of space.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;tc&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Put the title at the top of the page as with &lt;code&gt;tt&lt;/code&gt;, but center the picture vertically on the page.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;cc&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Separate the title and the picture by a fixed amount of space, and center both together vertically on the page.&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;A &lt;a href="http://www.ctan.org/tex-archive/macros/latex/contrib/titlepic/titlepic-manual.pdf"&gt;full manual&lt;/a&gt; is also available. I hope this is of some use to someone. Enjoy!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-6932743157366260372?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/6932743157366260372/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=6932743157366260372" title="32 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/6932743157366260372?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/6932743157366260372?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/f_MFfNlxWBI/picture-on-title-page-in-latex.html" title="A picture on the title page in LaTeX" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">32</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2008/08/picture-on-title-page-in-latex.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUMSX0_fip7ImA9WxVQFEg.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-3168679696556210941</id><published>2008-06-29T14:51:00.005+02:00</published><updated>2009-02-01T02:38:08.346+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-01T02:38:08.346+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="latex" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>LaTeX clever references</title><content type="html">&lt;p&gt;When you're referencing a section in LaTeX, you'd usually write something like&lt;br/&gt;
&lt;code&gt;&amp;hellip; as we saw in section \ref{sec:cake}.&lt;/code&gt;&lt;br/&gt;
But this is somewhat inconvenient. LaTeX &lt;em&gt;knows&lt;/em&gt; that it's a section, right? So why the need to specify this? Worse, if you ever change it into a subsection, your reference will be wrong.&lt;/p&gt;

&lt;p&gt;Luckily there's the command &lt;code&gt;\autoref&lt;/code&gt; from the &lt;code&gt;hyperref&lt;/code&gt; package. However, this too has some drawbacks, mainly that it does not provide a capitalised version. A better alternative is to use the package &lt;a href="ftp://ftp.das.ufsc.br/pub/ctan/help/Catalogue/entries/cleveref.html"&gt;cleveref&lt;/a&gt;. It is not in the Ubuntu repositories, but you can simply download and extract the archive, then run &lt;code&gt;latex cleveref.ins&lt;/code&gt; to obtain &lt;code&gt;cleveref.sty&lt;/code&gt; and dump it in the directory along with your document.&lt;/p&gt;

&lt;p&gt;Load the package with&lt;br/&gt;
&lt;code&gt;\usepackage{cleveref}&lt;/code&gt;&lt;br/&gt;
and make sure it's the &lt;em&gt;last&lt;/em&gt; package to load; that is, even laster that &lt;a href="http://www.ctan.org/tex-archive/help/Catalogue/entries/hyperref.html"&gt;&lt;code&gt;hyperref&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Using &lt;code&gt;\cref&lt;/code&gt; the previous example becomes:&lt;br/&gt;
&lt;code&gt;&amp;hellip; as we saw in \cref{sec:cake}.&lt;/code&gt;&lt;br/&gt;
This will produce the text &amp;ldquo;&amp;hellip; as we saw in section 3.&amp;rdquo;. At the start of a sentence you'd use the capitalised version &lt;code&gt;\Cref&lt;/code&gt;:&lt;br/&gt;
&lt;code&gt;\Cref{sec:cake} gives the recipe &amp;hellip;&lt;/code&gt;&lt;br/&gt;
You can even write:&lt;br/&gt;
&lt;code&gt;See also \cref{sec:cake,sec:lie,eq:recipe,thm:delicious}.&lt;/code&gt;&lt;br/&gt;
This produces &amp;ldquo;See also sections 2 and 3, eq. 5 and theorem 1.&amp;rdquo; Although I doubt that anyone would use this very often, it's still pretty cool.&lt;/p&gt;

&lt;p&gt;You can customize the word that is printed before the number. For example, some people like them to be always capitalised. (I don't, but my supervisor does, and who am I to argue?)&lt;br/&gt;
&lt;code&gt;\crefname{chapter}{Chapter}{Chapters}&lt;br/&gt;
\crefname{section}{Section}{Sections}&lt;br/&gt;
\crefname{subsection}{Section}{Sections}&lt;br/&gt;
\crefname{subsubsection}{Section}{Sections}&lt;br/&gt;
\crefname{figure}{Figure}{Figures}&lt;br/&gt;
\crefname{table}{Table}{Tables}&lt;/code&gt;&lt;br/&gt;
Etcetera. Note that subsections and subsubsections are usually all referenced to as sections.&lt;/p&gt;

&lt;p&gt;Finally, as a bonus, here's how you make it work with references to &lt;code&gt;\subfloat&lt;/code&gt;s from the &lt;a href="http://texcatalogue.sarovar.org/entries/subfig.html"&gt;&lt;code&gt;subfig&lt;/code&gt;&lt;/a&gt; package:&lt;br/&gt;
&lt;code&gt;\crefname{subfigure}{Figure}{Figures}&lt;/code&gt;&lt;br/&gt;
(Capitalise according to taste, or even write &amp;ldquo;subfigure&amp;rdquo; if you like.)&lt;/p&gt;

&lt;p&gt;For more options, see the &lt;a href="ftp://ftp.das.ufsc.br/pub/ctan/macros/latex/contrib/cleveref/cleveref.pdf"&gt;cleveref documentation&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-3168679696556210941?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/3168679696556210941/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=3168679696556210941" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/3168679696556210941?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/3168679696556210941?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/WJC6vOlRexE/latex-clever-references.html" title="LaTeX clever references" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2008/06/latex-clever-references.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYGQ3s9eyp7ImA9WxdQE0o.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-4589922486752945084</id><published>2008-06-12T20:32:00.005+02:00</published><updated>2008-06-13T18:05:22.563+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-13T18:05:22.563+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>mplayer tricks</title><content type="html">&lt;p&gt;&lt;a href="http://www.mplayerhq.hu/"&gt;mplayer&lt;/a&gt; is my favourite movie player for Linux by far, but the thousands-of-lines long &lt;a href="http://www.mplayerhq.hu/DOCS/man/en/mplayer.1.html"&gt;manual page&lt;/a&gt; can be a little daunting. Here I've compiled a list of some options that you may or may not know, that I find useful in day-to-day movie playing.&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;&lt;code&gt;-cache 8192&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Sets the cache (buffer) size to 8192 kilobytes. Useful when playing over a network connection that occasionally hiccups, like mine.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;-fs&lt;/code&gt;&lt;dd&gt;Start fullscreen playback right away. Especially useful when playing multiple movies in a single command, to prevent dropping back to windowed mode at each new movie.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;-monitoraspect 16:10&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;If your monitor has non-sqare pixels (e.g. 1280 by 1024 on a 4:3 monitor), you can specify the physical aspect ratio of your monitor in this way.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;-ao alsa&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Use ALSA for sound playback. Should be the default in any decent distro, but in case it doesn't work, try this (or, heaven forbid, &lt;code&gt;-ao oss&lt;/code&gt;).&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;-nolirc&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Disable LIRC support. Gets rid of the annoying &amp;ldquo;Failed to open LIRC support.&amp;rdquo; message.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;-subfont-text-scale 3&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;The default subtitle size is &lt;code&gt;5&lt;/code&gt;, but I prefer mine to be a little smaller.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;-aspect 4:3&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Overrides the aspect ratio of the movie. Some useful values are &lt;code&gt;4:3&lt;/code&gt;, &lt;code&gt;16:9&lt;/code&gt; and &lt;code&gt;2.35&lt;/code&gt;.
&lt;dt&gt;&lt;code&gt;-vf cropdetect&lt;/code&gt;&lt;dd&gt;For movies with black bars around them. This detects the black bars in the image and prints out the correct argument to crop them off, such as&lt;code&gt;-vf crop=656:288:0:0&lt;/code&gt;. One of mplayer's coolest features.&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;Options can also be put into a file &lt;tt&gt;~/.mplayer/config&lt;/tt&gt; if you leave out the initial &lt;code&gt;-&lt;/code&gt; and replace spaces by &lt;code&gt;=&lt;/code&gt; characters (e.g. &lt;code&gt;monitoraspect=16:9&lt;/code&gt;). Saves a lot of typing!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-4589922486752945084?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/4589922486752945084/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=4589922486752945084" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/4589922486752945084?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/4589922486752945084?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/Ey6xnQu4-3s/mplayer-tricks.html" title="mplayer tricks" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2008/06/mplayer-tricks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUMSX0_fyp7ImA9WxVQFEg.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-7261348416749164764</id><published>2008-06-11T14:50:00.011+02:00</published><updated>2009-02-01T02:38:08.347+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-01T02:38:08.347+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="latex" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>Integrating Inkscape graphics in LaTeX</title><content type="html">&lt;p&gt;Getting good-looking diagrams and figures into a LaTeX document can be tricky. My favourite software (and I think it ought to be anyone's favourite) for drawing such figures is Inkscape. This post explains how to get text in the proper font into Inkscape, how to put equations into Inkscape drawings, and how to get those drawings out of Inkscape and into your LaTeX document.&lt;/p&gt;

&lt;p&gt;It is a good idea to use the latest version of Inkscape, because the program is rapidly being improved all the time.&lt;/p&gt;

&lt;h4&gt;LaTeX font in Inkscape&lt;/h4&gt;

&lt;p&gt;To make your figure look good in its environment, you can use the same font family that the surrounding body text uses. In LaTeX's case: Computer Modern.

&lt;h5&gt;Installing fonts&lt;/h5&gt;

&lt;p&gt;As Computer Modern is written in the METAFONT format, it cannot be directly used in Inkscape. For that, we need the font in OpenType (OTF) format, preferred for Linux (and MacOS?) systems, or in TrueType (TTF) on Windows. (Side note: here's an &lt;a href="http://blogs.adobe.com/typblography/TT%20PS%20OpenType.pdf"&gt;interesting article&lt;/a&gt; on the differences between all the font formats.)&lt;/p&gt;

&lt;p&gt;The BaKoMa font bundle provides the Computer Modern font in these and some more formats. &lt;a href="http://www.ctan.org/tex-archive/fonts/cm/ps-type1/bakoma/"&gt;Download it here&lt;/a&gt;, then extract to a temporary directory. Installation is as follows:&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;Windows&lt;/dt&gt;&lt;dd&gt;Open up Fonts in the Control Panel and drag-and-drop all files from the &lt;tt&gt;ttf&lt;/tt&gt; directory into here.&lt;/dd&gt;
&lt;dt&gt;Ubuntu Linux&lt;/dt&gt;&lt;dd&gt;Open a file browser (Nautilus) and navigate to &lt;tt&gt;fonts://&lt;/tt&gt;, then drop the fonts from the &lt;tt&gt;otf&lt;/tt&gt; directory here. You may need to run Nautilus as root using the command &lt;code&gt;gksudo nautilus&lt;/code&gt;.&lt;/dd&gt;
&lt;dt&gt;Non-Ubuntu Linux (and Ubuntu Hardy,  because &lt;a href="https://bugs.launchpad.net/ubuntu/+source/nautilus/+bug/197794"&gt;they broke it&lt;/a&gt;)&lt;/dt&gt;&lt;dd&gt;Copy the files (as root) from the &lt;tt&gt;otf&lt;/tt&gt; directory to anywhere you like inside &lt;tt&gt;/usr/share/fonts&lt;/tt&gt;, then run &lt;code&gt;sudo fc-cache -fv&lt;/code&gt;. (For a single-user installation, &lt;tt&gt;~/.fonts&lt;/tt&gt; might work, but no guarantees!)&lt;/dd&gt;
&lt;/dl&gt;

&lt;h5&gt;Creating the figure&lt;/h5&gt;

&lt;p&gt;If you start Inkscape, new fonts with names like &lt;tt&gt;BKM-cmr10&lt;/tt&gt; should be available. Here, &lt;tt&gt;cm&lt;/tt&gt; stands for Computer Modern, &lt;tt&gt;r&lt;/tt&gt; means roman (normal body-text font) and &lt;tt&gt;10&lt;/tt&gt; is the point size. Simply use this font for all the text in your illustrations to make them integrate seamlessly with the text in LaTeX.&lt;/p&gt;

&lt;p&gt;Or, almost seamlessly. It seems that Inkscape (version 0.46) does something strange with the font size, or the BaKoMa fonts are too small to begin with. In any case, I find that using &lt;tt&gt;BKM-cmr10&lt;/tt&gt; at 12 points in Inkscape provides the best match to the default 10-point LaTeX body font. I personally prefer &lt;tt&gt;BKM-cmss10&lt;/tt&gt;, the sans-serif version of Computer Modern, because it integrates nicely with abstract line drawings &lt;em&gt;and&lt;/em&gt; with the surrounding serif body text, but if you use mathematics in you figures this is probably not an option.&lt;/p&gt;

&lt;h4&gt;LaTeX equations into Inkscape&lt;/h4&gt;

&lt;p&gt;Yes, it is possible to add mathematical symbols and equations to your Inkscape drawing! You can also use this for normal text, but it is more cumbersome than the font approach detailed above.&lt;/p&gt;

&lt;h5&gt;Installing textext&lt;/h5&gt;

&lt;p&gt;First, you need &lt;a href="http://www.iki.fi/pav/software/textext/index.html"&gt;textext&lt;/a&gt;. Simply extract the two files from the archive into &lt;tt&gt;/usr/share/inkscape/extensions&lt;/tt&gt; for a systemwide installation, and fix the permissions:&lt;br/&gt;
&lt;code&gt;sudo chmod 644 textext.inx&lt;br/&gt;
sudo chmod 755 textext.py&lt;/code&gt;&lt;br/&gt;
(For a single-user installation, &lt;tt&gt;~/.inkscape/extensions&lt;/tt&gt; should work.)&lt;/p&gt;

&lt;p&gt;You'll need some extra packages for the script to work. On Ubuntu:&lt;br/&gt;
&lt;code&gt;sudo apt-get install python-lxml&lt;br/&gt;
sudo apt-get install pstoedit&lt;/code&gt;&lt;br/&gt;
On non-Debian based Linux distributions, install pstoedit and the Python lxml package in some other way. On Windows, see the &lt;a href="http://www.iki.fi/pav/software/textext/index.html"&gt;textext web page&lt;/a&gt; for details.&lt;/p&gt;

&lt;h5&gt;Using textext&lt;/h5&gt;

&lt;p&gt;Now (re)start Inkscape, click Effects, Tex Text and type your LaTeX code! You can even load a preamble from a file to include additional packages such as amsmath. (Unfortunately the file must contain only the preamble, not an entire document.) The same problem occurs as with the previous approach: you need to set a scale factor of 1.25 to (approximately) match the font size of the LaTeX document. Close the dialog with the OK button or with Ctrl+Enter.&lt;/p&gt;

&lt;p&gt;The equation (or other LaTeX text) is then placed as a group of shapes into Inkscape. To edit it (yes, that is possible!), select it and click Effects, Tex Text again. This feature is a little feeble, however: do not ungroup the text object, or else it will become uneditable.&lt;/p&gt;

&lt;h4&gt;From Inkscape to LaTeX&lt;/h4&gt;

&lt;h5&gt;Exporting from Inkscape&lt;/h5&gt;

&lt;p&gt;When the figure is done, deselect all objects, then go to Document Properties and click Fit page to selection. This will adjust the page boundaries to fit exactly around all objects. Then save the figure to Inkscape SVG format (for later editing), but also save a copy as &amp;ldquo;PDF via Cairo&amp;rdquo;. Check the box to Convert text to paths, because otherwise the kerning seems to be messed up in the export.&lt;/p&gt;

&lt;h5&gt;Including in LaTeX&lt;/h5&gt;

&lt;p&gt;This is a simple matter of&lt;br/&gt;
&lt;code&gt;\usepackage{graphicx}&lt;/code&gt;&lt;br/&gt;
in the preamble, and then placing the figure using&lt;br/&gt;
&lt;code&gt;\includegraphics{diagram.pdf}&lt;/code&gt;&lt;br/&gt;
as usual. Do not use any of the scaling options of &lt;code&gt;\includegraphics&lt;/code&gt;, since they will cause the text in the figure to scale as well, and it will no longer match the size of the surrounding body text.&lt;/p&gt;

&lt;p&gt;Compile your LaTeX document using &lt;code&gt;pdflatex&lt;/code&gt; (not normal &lt;code&gt;latex&lt;/code&gt;, since that only handles inclusion of EPS files), and there you go!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-7261348416749164764?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/7261348416749164764/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=7261348416749164764" title="13 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/7261348416749164764?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/7261348416749164764?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/eYhfoW3gTZ4/integrating-inkscape-graphics-in-latex.html" title="Integrating Inkscape graphics in LaTeX" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">13</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2008/06/integrating-inkscape-graphics-in-latex.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYMQnk4fCp7ImA9WxdREEQ.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-3913262403385685319</id><published>2008-05-29T21:52:00.004+02:00</published><updated>2008-05-29T22:16:23.734+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-29T22:16:23.734+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>How to choose secure passwords</title><content type="html">&lt;p&gt;In response to the &lt;a href="http://www.debian.org/security/2008/dsa-1576"&gt;Debian ssh fiasco&lt;/a&gt;, I've decided to take a closer look at all my passwords and keys. There are six machines on which I regularly log in, probably about a dozen accounts on these in total, and of course around fifty web services that I have at some point registered with. All this has become quite a mess, and I'll try to clear it up as well as I can. This post may be the first in a series of hands-on security-related posts; but it may not.&lt;/p&gt;

&lt;p&gt;Here's a recommendation on passwords that you hear often: &amp;ldquo;take a sentence that you remember easily, like a song lyric, then take the first letter of each word, and there's your password.&amp;rdquo; Works pretty well, as long as your sentence is long enough and you mix in some digits (like &amp;lsquo;4&amp;rsquo; instead of &amp;lsquo;for&amp;rsquo;). However, if someone happens to know your taste in music (from, for example, &lt;a href="http://last.fm/"&gt;Last.fm&lt;/a&gt;), a little patience and some brute force can still recover your password.&lt;/p&gt;

&lt;p&gt;I think I can do better. I, too, start with a sentence, sometimes even a song lyric. But instead of replacing each word with its first letter, I replace it with something that, &lt;em&gt;in my mind&lt;/em&gt;, is connected to that word, &lt;em&gt;and is the first thing that comes to mind&lt;/em&gt;. If nothing comes to mind, I just take the first letter of the word.&lt;/p&gt;

&lt;p&gt;For example, let's say my sentence is &amp;lsquo;Shall I compare thee to a summer's day&amp;rsquo;. &amp;lsquo;Shall&amp;rsquo; reminds me of &amp;lsquo;shallow&amp;rsquo; and therefore becomes &amp;lsquo;_&amp;rsquo;. &amp;lsquo;I&amp;rsquo; remains &amp;lsquo;I&amp;rsquo;. &amp;lsquo;Compare&amp;rsquo; reminds me of &lt;a href="http://en.wikipedia.org/wiki/Spaceship_operator"&gt;Perl's spaceship operator&lt;/a&gt; and thus becomes &amp;lsquo;&amp;lt;=&amp;gt;&amp;rsquo;. &amp;lsquo;Thee&amp;rsquo; is the Dutch word for tea (although pronounced differently) and becomes &amp;lsquo;cU&amp;rsquo; since that looks somewhat like a cup of tea. &amp;lsquo;to&amp;rsquo; becomes &amp;lsquo;2&amp;rsquo;. &amp;lsquo;a&amp;rsquo; remains &amp;lsquo;a&amp;rsquo;. &amp;lsquo;Summer's&amp;rsquo; could be &amp;lsquo;^o's&amp;rsquo; because in summer the sun (&amp;lsquo;o&amp;rsquo;) is high (&amp;lsquo;^&amp;rsquo;) in the sky. At &amp;lsquo;day&amp;rsquo; I ran out of inspiration, so this becomes &amp;lsquo;d&amp;rsquo;, and I add a trailing &amp;lsquo;,&amp;rsquo; for good measure. Hence a secure password, that I could remember (and, if necessary, reconstruct): &amp;lsquo;_I&lt;=&gt;cU2a^o'sd,&amp;rsquo;.&lt;/p&gt;

&lt;p&gt;The reason why this is (hopefully) a little bit more secure than the na&amp;iuml;ve version is that it uses information that is only in my strange, illogical, twisted brain, and nowhere else. That, combined with a broad taste in music, should make brute force over song lyrics a lot tougher.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-3913262403385685319?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/3913262403385685319/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=3913262403385685319" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/3913262403385685319?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/3913262403385685319?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/fyCmUL-hhc4/how-to-choose-secure-passwords.html" title="How to choose secure passwords" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2008/05/how-to-choose-secure-passwords.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAMRHY5cSp7ImA9WxdSEkw.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-7973939620073393985</id><published>2008-04-06T13:40:00.003+02:00</published><updated>2008-05-19T18:33:05.829+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-19T18:33:05.829+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>Getting images out of Word</title><content type="html">&lt;p&gt;If you've ever tried to extract a picture from a Word document, you'll know what I mean. Copying and pasting into an image editor does not work: images come out scaled, depending on their size on the page in the Word document, and the colours are horribly mutilated.&lt;/p&gt;

&lt;p&gt;But since Word is able to scale and display the picture properly, the data must be there. And it &lt;em&gt;is&lt;/em&gt; possible to extract it. How? The following steps work in Word 2003, and allegedly in Word 2000 as well.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click File, Save as Web Page&amp;hellip;.&lt;/li&gt;
&lt;li&gt;Choose Web Page for the Save as type.&lt;/li&gt;
&lt;li&gt;Save it anywhere you like.&lt;/li&gt;
&lt;li&gt;Look in the folder DocumentName_files, and voila! Next to the JPGs that are actually used in the HTML, you'll find the original images (PNG, JPG or whatever), at the original resolution!
&lt;/ol&gt;

&lt;p&gt;Credits go to the people in &lt;a href="http://www.aota.net/forums/archive/index.php/t-12762.html"&gt;this forum thread&lt;/a&gt; that I found through Google. If you can't get it to work as stated above, the thread mentions some more things you can try.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-7973939620073393985?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/7973939620073393985/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=7973939620073393985" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/7973939620073393985?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/7973939620073393985?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/JQOetcef_iQ/getting-images-out-of-word.html" title="Getting images out of Word" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2008/04/getting-images-out-of-word.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08DRXs5cCp7ImA9WxZUEEk.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-1096106490921356579</id><published>2008-04-01T12:32:00.001+02:00</published><updated>2008-04-01T12:31:14.528+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-01T12:31:14.528+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>New accessibility feature added to Windows</title><content type="html">&lt;p&gt;In response alternative operating systems like OS X and Linux becoming increasingly user-friendly, Microsoft has announced a patch for Windows to greatly improve the usability of Windows. Yesterday, a screenshot was published that shows some small but significant changes to the Windows login screen:&lt;/p&gt;

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JMO36jorXIA/RjWdTQioEXI/AAAAAAAAABM/F9aIir-G_3M/s1600-h/login-spell-check.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_JMO36jorXIA/RjWdTQioEXI/AAAAAAAAABM/F9aIir-G_3M/s400/login-spell-check.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5059122710603895154" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The new Windows feature, available as a patch for Windows 2000, XP and Vista, was developed in cooperation with the Microsoft Office team. A stripped-down version of the Office spell checker is included, so Office itself is not required to install or use the patch.&lt;/p&gt;

&lt;p&gt;By default, the spell checker's dictionary only contains the password of the specified user account, but the list can be expanded to include others' passwords as well as dictionary words of your local Windows language. An optional feature (enabled by default) is to correct automatically for incorrect capitalization, thereby avoiding the annoying &amp;ldquo;Caps Lock is on&amp;rdquo; message. Some more features can be configured through the Group Policy editor, most notably password auto-completion.&lt;/p&gt;

&lt;p&gt;&amp;ldquo;This feature is a great step forward in the accessibility of Microsoft Windows,&amp;rdquo; a Microsoft spokesman said. &amp;ldquo;Imagine users with a physical handicap trying to type in their well-chosen seventeen-character passwords, containing eight special characters, two of which are in the Supplementary Multilingual Plane of Unicode. This new feature will get them started with Microsoft Windows faster than ever before!&amp;rdquo;&lt;/p&gt;

&lt;p&gt;To a voicing of security concerns, Microsoft responded: &amp;ldquo;The new feature actually makes Windows &lt;em&gt;more&lt;/em&gt; secure. In the past, people used to write down their passwords on Post-it notes stuck to their monitor, where anyone could read them. Now they can just rely on the spell checker to get their passwords right.&amp;rdquo; Passwords are never shown on the screen, and the dictionary is stored in a file only readable by Administrator users.&lt;/p&gt;

&lt;p&gt;All Windows 2000, XP and Vista machines with Windows Update enabled will receive the patch automatically this Tuesday.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-1096106490921356579?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/1096106490921356579/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=1096106490921356579" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/1096106490921356579?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/1096106490921356579?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/w6HGzGeFLdY/new-accessibility-feature-added-to.html" title="New accessibility feature added to Windows" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_JMO36jorXIA/RjWdTQioEXI/AAAAAAAAABM/F9aIir-G_3M/s72-c/login-spell-check.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2008/04/new-accessibility-feature-added-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUADSHkzcCp7ImA9WxZXEEk.&quot;"><id>tag:blogger.com,1999:blog-3365890222783870731.post-2560475249724356746</id><published>2008-02-26T17:46:00.004+01:00</published><updated>2008-02-26T18:42:59.788+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-26T18:42:59.788+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Visual Studio/C++: Requested the Runtime to terminate?</title><content type="html">&lt;p&gt;The &lt;a href="http://typethinker.blogspot.com/2007/12/visual-c-application-configuration.html"&gt;Visual Studio/Visual C++ woes&lt;/a&gt; continue. This time, my C++ application gave the message &amp;ldquo;This application has requested the Runtime to terminate it in an unusual way.&amp;rdquo; and my application died. This didn't happen on my development machine, but on a different machine on which I ran a Release build.&lt;/p&gt;

&lt;p&gt;Googling gave me &lt;a href="http://support.microsoft.com/kb/884538"&gt;scary stuff&lt;/a&gt;, and that I'd need a hotfix that was not publicly available&amp;mdash;you need to contact Microsoft to get it, so I did, and received the hotfix within the hour, but didn't need to install it anymore.&lt;/p&gt;

&lt;p&gt;Turned out that the problem was something quite different. My application threw an exception, because a file was not found on the other machine. The error message actually meant to say: &amp;ldquo;This application threw an unhandled exception.&amp;rdquo; Thank you, Microsoft.&lt;/p&gt;

&lt;p&gt;So, if you ever receive this message, before you look any further: make sure you catch every exception you throw.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3365890222783870731-2560475249724356746?l=typethinker.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://typethinker.blogspot.com/feeds/2560475249724356746/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3365890222783870731&amp;postID=2560475249724356746" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/2560475249724356746?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3365890222783870731/posts/default/2560475249724356746?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typethinker/~3/zO26tIkW6Hs/visual-studioc-requested-runtime-to.html" title="Visual Studio/C++: Requested the Runtime to terminate?" /><author><name>Thomas ten Cate</name><uri>http://www.blogger.com/profile/02609144861191873031</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03392148564215976802" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://typethinker.blogspot.com/2008/02/visual-studioc-requested-runtime-to.html</feedburner:origLink></entry></feed>
