<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>t-square &#187; Software &amp; FOSS</title>
	<atom:link href="http://www.timteatro.net/category/software_foss/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.timteatro.net</link>
	<description>Pursuit of Inspiration, Imagination and Science.</description>
	<lastBuildDate>Mon, 01 Oct 2012 20:52:22 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>TeXLive 2012 on Ubuntu 12.04</title>
		<link>http://www.timteatro.net/2012/10/01/tex-live-2012-on-ubuntu-12-04/</link>
		<comments>http://www.timteatro.net/2012/10/01/tex-live-2012-on-ubuntu-12-04/#comments</comments>
		<pubDate>Mon, 01 Oct 2012 06:32:26 +0000</pubDate>
		<dc:creator>Tim Teatro</dc:creator>
				<category><![CDATA[Software & FOSS]]></category>
		<category><![CDATA[LaTeX]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.timteatro.net/?p=1109</guid>
		<description><![CDATA[After years of wrestling with the out-of-date TeXLive packages with Ubuntu and Fedora, I started simply using the official TeXLive packages. It is easy and highly pleasurable to have completely up to date packages and a full set of package maintenance tools.]]></description>
				<content:encoded><![CDATA[<p>
After years of wrestling with the out-of-date TeXLive packages with Ubuntu and Fedora, I started simply using the official TeXLive packages. It is easy and highly pleasurable to have completely up to date packages and a full set of package maintenance tools.
</p>
<p>
Manually installing TeX Live is pretty simple. The hardest part is tricking Ubuntu&#8217;s package manager into knowing that TeX Live is installed without it having to have the copy from the repos.
</p>
<p>
To start, just download the small gzip <a href="http://www.tug.org/texlive/acquire-netinstall.html">from here</a>. Unpack it and change directory into it in a terminal.<br />
<code>sudo apt-get install perl-tk</code><br />
which you&#8217;ll need for the installer GUI. Now, run the installer:<br />
<code>sudo ./install-tl --gui</code>
</p>
<p>
Once you&#8217;re in the installer, go through the list of options. If you don&#8217;t know what they do, you probably don&#8217;t need to bother with it. The main one to look out for are A4 vs. Letter paper. I do generate the simlinks, but if you don&#8217;t can manually edit your PATH variable later. Hit the <i>install</i> button and go make yourself a sandwich. You&#8217;ll be a while.
</p>
<p>
At the end of the install, you&#8217;ll get the following message</p>
<blockquote><p>
    Add /usr/local/texlive/2012/texmf/doc/man to MANPATH.<br />
    Add /usr/local/texlive/2012/texmf/doc/info to INFOPATH.<br />
    Most importantly, add /usr/local/texlive/2012/bin/x86-linux<br />
    to your PATH for current and future sessions.
</p></blockquote>
<p>Note, you&#8217;ll get a message which reflects your architecture. (x86_64, for example.)
</p>
<p>
So, if you didn&#8217;t opt in to have the symlinks generated for you, you&#8217;ll have to add those directories to the path variable. Edit your bashrc:<br />
<code> gedit ~/.bashrc</code><br />
and added the following lines:</p>
<pre class="brush: plain; title: ; notranslate">
export PATH=$PATH:/usr/local/texlive/2012/bin/i386-linux
export MANPATH=$MANPATH:/usr/local/texlive/2012/texmf/doc/man
export INFOPATH=$INFOPATH:/usr/local/texlive/2012/texmf/doc/info
</pre>
</p>
<p>
Now, install a few more packages:<br />
<code>sudo apt-get install tex-common texinfo lmodern perl-tk</code><br />
Be sure to restart the terminal (or <code>source ~/.bashrc</code>) before you try using anything.
</p>
<p>
Now, if you try to bring anything from the repositories that depends on TeX Live, apt is going to pull over Ubuntu&#8217;s crappy copy. To avoid this, I created a meta package which checks off all of the TeX Live packages but doesn&#8217;t install anything.
</p>
<p>
I got the following from <a href="http://blogs.ethz.ch/ubuntu/2011/03/14/tex-live-2010-installation/">schlasim&#8217;s ubuntu blog</a>. First, paste and execute the following lines one at a time:</p>
<pre class="brush: plain; title: ; notranslate">
sudo apt-get install equivs
mkdir /tmp/tl-equivs &amp;&amp; cd /tmp/tl-equivs
equivs-control texlive-local
</pre>
<p>Now, edit the file texlive-local (<code>gedit texlive-local</code>), which was just created by the equivs-control program. Paste in the following lines:</p>
<pre class="brush: plain; title: ; notranslate">
Section: misc
Priority: optional
Standards-Version: 3.6.2
 
Package: texlive-local
Version: 2012-1~1
Maintainer: you 
Provides: biblatex, biblatex-dw, cm-super, cm-super-minimal, context, dvipng,
 feynmf, fragmaster, lacheck, latex-beamer, latex-cjk-all, latex-cjk-chinese,
 latex-cjk-chinese-arphic-bkai00mp, latex-cjk-chinese-arphic-bsmi00lp,
 latex-cjk-chinese-arphic-gbsn00lp, latex-cjk-chinese-arphic-gkai00mp,
 latex-cjk-common, latex-cjk-japanese, latex-cjk-japanese-wadalab,
 latex-cjk-korean, latex-cjk-thai, latex-cjk-xcjk, latexmk, latex-sanskrit,
 latex-xcolor, lcdf-typetools, lmodern, luatex, musixlyr, musixtex, pgf,
 preview-latex-style, prosper, ps2eps, psutils, purifyeps, t1utils, tex4ht,
 tex4ht-common, tex-gyre, texlive, texlive-base, texlive-base-bin,
 texlive-base-bin-doc, texlive-bibtex-extra, texlive-binaries, texlive-common,
 texlive-doc-base, texlive-doc-bg, texlive-doc-cs+sk, texlive-doc-de,
 texlive-doc-el, texlive-doc-en, texlive-doc-es, texlive-doc-fi,
 texlive-doc-fr, texlive-doc-it, texlive-doc-ja, texlive-doc-ko,
 texlive-doc-mn, texlive-doc-nl, texlive-doc-pl, texlive-doc-pt,
 texlive-doc-ru, texlive-doc-si, texlive-doc-th, texlive-doc-tr,
 texlive-doc-uk, texlive-doc-vi, texlive-doc-zh, texlive-extra-utils,
 texlive-fonts-extra, texlive-fonts-extra-doc, texlive-fonts-recommended,
 texlive-fonts-recommended-doc, texlive-font-utils, texlive-formats-extra,
 texlive-games, texlive-generic-extra, texlive-generic-recommended,
 texlive-humanities, texlive-humanities-doc, texlive-lang-african,
 texlive-lang-all, texlive-lang-arab, texlive-lang-arabic,
 texlive-lang-armenian, texlive-lang-croatian, texlive-lang-cyrillic,
 texlive-lang-czechslovak, texlive-lang-danish, texlive-lang-dutch,
 texlive-lang-finnish, texlive-lang-french, texlive-lang-german,
 texlive-lang-greek, texlive-lang-hebrew, texlive-lang-hungarian,
 texlive-lang-indic, texlive-lang-italian, texlive-lang-latin,
 texlive-lang-latvian, texlive-lang-lithuanian, texlive-lang-manju,
 texlive-lang-mongolian, texlive-lang-norwegian, texlive-lang-other,
 texlive-lang-polish, texlive-lang-portuguese, texlive-lang-spanish,
 texlive-lang-swedish, texlive-lang-tibetan, texlive-lang-ukenglish,
 texlive-lang-vietnamese, texlive-latex3, texlive-latex-base,
 texlive-latex-base-doc, texlive-latex-extra, texlive-latex-extra-doc,
 texlive-latex-recommended, texlive-latex-recommended-doc, texlive-luatex,
 texlive-math-extra, texlive-metapost, texlive-metapost-doc, texlive-music,
 texlive-omega, texlive-pictures, texlive-pictures-doc, texlive-plain-extra,
 texlive-pstricks, texlive-pstricks-doc, texlive-publishers,
 texlive-publishers-doc, texlive-science, texlive-science-doc, texlive-xetex,
 texpower, texpower-manual, thailatex, tipa, ttf-freefont, ttf-gfs-artemisia,
 ttf-gfs-baskerville, ttf-gfs-bodoni-classic, ttf-gfs-didot,
 ttf-gfs-didot-classic, ttf-gfs-gazis, ttf-gfs-neohellenic, ttf-gfs-olga,
 ttf-gfs-porson, ttf-gfs-solomos, ttf-gfs-theokritos, ttf-sil-gentium, xindy,
 xindy-rules
Architecture: all
Description: My local installation of TeX Live 2011.
 A full &quot;vanilla&quot; TeX Live 2011

http://tug.org/texlive/debian#vanilla

</pre>
<p>Now, finish off by executing the last two lines:</p>
<pre class="brush: plain; title: ; notranslate">
equivs-build texlive-local
sudo dpkg -i texlive-local_2011-1~1_all.deb
</pre>
</p>
<p>
You should now be able to maintain your own TeX Live installation. You can update or install packages as you see fit, and you don&#8217;t have to deal with out of date packages causing you frustration.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.timteatro.net/2012/10/01/tex-live-2012-on-ubuntu-12-04/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Beginning Atmel AVR Development in Linux using AVR-Eclipse, AVR-GCC and AVRDUDE</title>
		<link>http://www.timteatro.net/2012/03/22/beginning-atmel-avr-development-in-linux-using-avr-eclipse-avr-gcc-and-avrdude/</link>
		<comments>http://www.timteatro.net/2012/03/22/beginning-atmel-avr-development-in-linux-using-avr-eclipse-avr-gcc-and-avrdude/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 15:45:51 +0000</pubDate>
		<dc:creator>Tim Teatro</dc:creator>
				<category><![CDATA[Electronics]]></category>
		<category><![CDATA[Software & FOSS]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Atmel AVR]]></category>
		<category><![CDATA[AVR-GCC]]></category>
		<category><![CDATA[AVRDUDE]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Microcontrollers]]></category>
		<category><![CDATA[Physical computing]]></category>

		<guid isPermaLink="false">http://www.timteatro.net/?p=1262</guid>
		<description><![CDATA[For a beginning AVR developer with more typical platform programming experience, introductory information can seem scattered and sparse. There are a lot of programming tutorials, but since many people develop on Windows using AVR Studio, getting started using Linux can have a steeper learning curve. This article aims to be a complete introduction to setting up the hardware and software IDE for developing for the AVR platform.]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.timteatro.net/wp-content/uploads/2012/03/beginning_AVR_Linux.png"><img src="http://www.timteatro.net/wp-content/uploads/2012/03/beginning_AVR_Linux-250x300.png" alt="" title="beginning_AVR_Linux" width="250" height="300" class="alignright size-medium wp-image-1345" /></a>For a beginning AVR developer with more typical platform programming experience, introductory information can seem scattered and sparse. There are a lot of programming tutorials, but since many people develop on Windows using AVR Studio, getting started using Linux can have a steeper learning curve. This article aims to be a complete introduction to setting up the hardware and software IDE under Linux for developing for the AVR platform.</p>
<p>I strive to use open-source and widely available software and hardware, to make everything as accessible as possible to the beginner.</p>
<h2>The Development Environment</h2>
<p>On the software side of things, I assume the reader is using either <a href="http://www.ubuntu.com/" title="Canonical's Ubuntu homepage" target="_blank">Ubuntu</a> or <a href="http://fedoraproject.org/" title="The Fedora Core site" target="_blank">Fedora Core</a>. We will be using the <a href="http://www.avrfreaks.net/wiki/index.php/Documentation:AVR_GCC" title="AVR Freaks Wiki for AVR-GCC" target="_blank">AVR-GCC compiler</a> to emit machine code and <a href="http://www.nongnu.org/avrdude/" title="AVRDUDE site" target="_blank">AVRDUDE</a> to upload the code to the Atmel microcontroller. To integrate and streamline the development process, we will use <a href="http://www.eclipse.org/" title="Eclipse website" target="_blank">Eclipse</a>.</p>
<p>To upload the software to the microcontroller, buy or build <a href="http://www.ladyada.net/make/usbtinyisp/" title="Ladyada USBtinyISP site" target="_blank">Adafruit&#8217;s USBtinyISP</a> or equivalent [<a href="http://search.digikey.com/ca/en/products/ATAVRISP2/ATAVRISP2-ND/898891" title="Atmel ISP programmer" target="_blank">Digikey</a>]. The USBtinyISP is directly supported by AVRDUDE and can be built from your own parts using <a href="http://www.ladyada.net/make/usbtinyisp/download.html" title="Schematics of USBtinyISP" target="_blank">freely available schematics</a>, or purchased as a kit. You will also need to build a target board, which is covered in a later section.</p>
<h2>Installing the Software Environment</h2>
<p>The base environment is AVR-GCC and AVRDUDE. You can download and install individually, but the easiest solution is to grab them from your distribution&#8217;s repos:<br />
In Ubuntu</p>
<pre class="brush: plain; title: ; notranslate">
apt-get install avrdude binutils-avr gcc-avr avr-libc gdb-avr
</pre>
<p>In Fedora Core</p>
<pre class="brush: plain; title: ; notranslate">
yum install uisp avr-libc avr-gcc-c++ rxtx avrdude
</pre>
<p>Alternatively, you can just yum or apt-get install the Arduino development environment. If you have not yet, Arduino may be something you want to play with later anyway for rapid prototyping.</p>
<p>The Eclipse version in the Ubuntu repos did not take AVR-Eclipse, so I work with a copy right from the <a href="http://www.eclipse.org/downloads/" title="Eclipse download site" target="_blank">Eclipse download site</a>.</p>
<h2>Add udev rule for programmer</h2>
<p>When executing AVRDUDE, it may give an error such as</p>
<pre class="brush: plain; title: ; notranslate">
avrdude: error: usbtiny_transmit: error sending control message: Operation not permitted.
</pre>
<p>As a quick fix, run AVRDUDE as root (or sudo). To permanently fix it, create the text file <code>/etc/udev/rules.d/10-usbtinyisp.rules</code>. In it, place the code</p>
<pre class="brush: plain; title: ; notranslate">
SUBSYSTEM==&quot;usb&quot;, SYSFS{idVendor}==&quot;1781&quot;, SYSFS{idProduct}==&quot;0c9f&quot;, GROUP=&quot;adm&quot;, MODE=&quot;0666&quot;
</pre>
<p>Now restart udev by executing <code>sudo restart udev</code>.</p>
<h2>Setting up AVR-Eclipse</h2>
<p>It is not uncommon to see physical computing nerds hunched over a Vim window and shuffling Makefiles. If you are not already familiar with those tools (especially make), it is not the best system to learn with.</p>
<p>AVR-Eclipse provides an integrated interface for editing code, compiling and uploading to the device. And, not to be undervalued, also has a GUI to set fuses and lock bits. It generates Makefiles, so if and when you are ready to graduate from an IDE back to bare bones then you will have something familiar to work from.</p>
<p>Open Eclipse and click <i>Help > Install New Software</i>. This will open a dialogue, at the top of which is a text box labelled <i>Work with</i>. In that text box, paste the address of the AVR-Eclipse update server <i>(http://avr-eclipse.sourceforge.net/updatesite/)</i>.<br />
<a href="http://www.timteatro.net/wp-content/uploads/2012/03/avr-eclipse_install1.png"><img src="http://www.timteatro.net/wp-content/uploads/2012/03/avr-eclipse_install1-300x241.png" alt="" title="avr-eclipse_install" width="300" height="241" class="aligncenter size-medium wp-image-1321" /></a><br />
Select the AVR-Eclipse plugin and click next. The installer will ask you a series of installation related questions that you can just rapid-click your way through. Once done, restart and now you should see an extra option, <i>AVR</i> on the top of the Eclipse window.<br />
<a href="http://www.timteatro.net/wp-content/uploads/2012/03/avr-eclipse_window.png"><img src="http://www.timteatro.net/wp-content/uploads/2012/03/avr-eclipse_window-300x168.png" alt="" title="avr-eclipse_window" width="300" height="168" class="aligncenter size-medium wp-image-1324" /></a></p>
<p>Now, click <i>Window > Preferences</i> and expand the <i>AVR</i> entry on the right.<br />
<a href="http://www.timteatro.net/wp-content/uploads/2012/03/avr-eclipse_config_avr.png"><img src="http://www.timteatro.net/wp-content/uploads/2012/03/avr-eclipse_config_avr-300x254.png" alt="" title="avr-eclipse_config_avr" width="300" height="254" class="aligncenter size-medium wp-image-1325" /></a><br />
Beside <i>Programmer Configurations</i> click <i>Add</i>. In the new window that appears, scroll to find USBtiny near the bottom of the lot.<br />
<a href="http://www.timteatro.net/wp-content/uploads/2012/03/avr-eclipse_config_usbtiny.png"><img src="http://www.timteatro.net/wp-content/uploads/2012/03/avr-eclipse_config_usbtiny-300x233.png" alt="" title="avr-eclipse_config_usbtiny" width="300" height="233" class="aligncenter size-medium wp-image-1326" /></a><br />
Click <i>Ok</i> and return to the main preferences window. You can click on the <i>Paths</i> entry under <i>AVR</i>, but it hangs the window. However, the default paths seem fine.</p>
<p>AVR-Eclipse should now be installed and configured. Not done yet however, you will need to set more configuration options for each  project. If you are ready for that, look ahead to <i><b>Creating a New AVR-Eclipse Project</b></i>. Otherwise, continue to finish the hardware setup.</p>
<h2>Building a target board</h2>
<p><div id="attachment_1280" class="wp-caption alignright" style="width: 310px"><a href="http://www.timteatro.net/wp-content/uploads/2012/03/avr_target_board.jpg"><img src="http://www.timteatro.net/wp-content/uploads/2012/03/avr_target_board-300x168.jpg" width="300" height="168" class="size-medium wp-image-1280" /></a><p class="wp-caption-text">Example target board.</p></div> In order to program your AVR chip, you will need to build a target board, or set one up on a solderless breadboard. This is a simple circuit which routes the ISP interface from your programmer to the proper pins of your AVR chip. The picture to the right shows a rough target board made from a small piece of pad-per-hole board [cheap Chinese junk], a six-pin header [<a href="http://search.digikey.com/scripts/DkSearch/dksus.dll?WT.z_header=search_go&#038;lang=en&#038;site=ca&#038;keywords=3M9459-ND&#038;x=0&#038;y=0" target="_blank">Digikey</a>], and a Zero Insertion Force (ZIF) socket [<a href="http://search.digikey.com/ca/en/cat/connectors-interconnects/sockets-for-ics-transistors/1442972?k=A302-ND" target="_blank">Digikey</a>, Ebay is great for these].</p>
<p><div id="attachment_1299" class="wp-caption alignright" style="width: 310px"><a href="http://www.timteatro.net/wp-content/uploads/2012/03/ISP_6pin_pinout1.png"><img src="http://www.timteatro.net/wp-content/uploads/2012/03/ISP_6pin_pinout1-300x136.png" alt="" title="ISP_6pin_pinout" width="300" height="136" class="size-medium wp-image-1299" /></a><p class="wp-caption-text">6-pin AVR ISP Pinout.</p></div> Most commonly, you will be using the 6-pin ISP interface: Vcc, Gnd, SCK, MISO, MOSI and Reset are the pins (See FIG, right). You will need to trace each one of these to the corresponding pins on your AVR chip. To find out which pins, you will need to consult the datasheet for your desired chip. As an example, below is the pin configuration clipped from the ATtiny25/45/85.</p>
<div id="attachment_1290" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.timteatro.net/wp-content/uploads/2012/03/ATtiny_pin_config1.png"><img src="http://www.timteatro.net/wp-content/uploads/2012/03/ATtiny_pin_config1.png" alt="" title="ATtiny_pin_config" width="450" height="116" class="size-full wp-image-1290" /></a><p class="wp-caption-text">AVR pin configuration for ATtiny25/45/85 taken from the Atmel datasheet.</p></div>
<p>Once finished, plug your programmer into the target board. Now your target chip can be placed into the ZIF socket<br />
<div id="attachment_1294" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.timteatro.net/wp-content/uploads/2012/03/usbtinyisp_targetboard.jpg"><img src="http://www.timteatro.net/wp-content/uploads/2012/03/usbtinyisp_targetboard-300x168.jpg" alt="" title="USBtinyISP and Target Board" width="300" height="168" class="size-medium wp-image-1294" /></a><p class="wp-caption-text">USBtinyISP plugged into a target board.</p></div></p>
<p>With the USB cable connecting your computer to the programmer, and the programmer attached to the target board with target chip, you are ready to write some code, and program your chip.</p>
<h2>Creating a New AVR-Eclipse Project</h2>
<p>Click <i>File > New > C Project</i><br />
<a href="http://www.timteatro.net/wp-content/uploads/2012/03/avr-eclipse_new_C.png"><img src="http://www.timteatro.net/wp-content/uploads/2012/03/avr-eclipse_new_C-283x300.png" alt="" title="avr-eclipse_new_C" width="283" height="300" class="aligncenter size-medium wp-image-1333" /></a><br />
Give your project a name and use the above settings. If you have a more advanced knowledge of Eclipse projects, feel free to set them as you like.</p>
<p>Now in the new project, click <i>Project > Properties</i> and expand the <i>AVR</i> entry. You will need to set your programmer.<br />
<a href="http://www.timteatro.net/wp-content/uploads/2012/03/AVR-Eclipse_conf_proj_avrdude.png"><img src="http://www.timteatro.net/wp-content/uploads/2012/03/AVR-Eclipse_conf_proj_avrdude-300x253.png" alt="" title="AVR-Eclipse_conf_proj_avrdude" width="300" height="253" class="aligncenter size-medium wp-image-1334" /></a><br />
Go through those tabs and set the specifics as you like, assuming you are familiar with the AVR concepts relating to those settings (such as fuses and lock bits).</p>
<p>Now, set the target hardware. With the programmer, target board and target chip attached, click <i>Load from MCU</i>.<br />
<a href="http://www.timteatro.net/wp-content/uploads/2012/03/avr-eclipse_conf_target-hardware.png"><img src="http://www.timteatro.net/wp-content/uploads/2012/03/avr-eclipse_conf_target-hardware-300x248.png" alt="" title="avr-eclipse_conf_target-hardware" width="300" height="248" class="aligncenter size-medium wp-image-1336" /></a><br />
If this fails, it generally indicates a configuration problem with AVRDUDE. Be sure that you have followed the steps in <i><b>Add udev rule for programmer</b></i>.</p>
<p>If you have successfully completed all steps, you should now be in a position to test out a simple light blinking program or alike. As such introductory programming tutorials are readily Googleable, I will leave that to the reader.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.timteatro.net/2012/03/22/beginning-atmel-avr-development-in-linux-using-avr-eclipse-avr-gcc-and-avrdude/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A Library for Using the Wii Nunchuk In Arduino Sketches</title>
		<link>http://www.timteatro.net/2012/02/10/a-library-for-using-the-wii-nunchuk-in-arduino-sketches/</link>
		<comments>http://www.timteatro.net/2012/02/10/a-library-for-using-the-wii-nunchuk-in-arduino-sketches/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 01:34:39 +0000</pubDate>
		<dc:creator>Tim Teatro</dc:creator>
				<category><![CDATA[Electronics]]></category>
		<category><![CDATA[Software & FOSS]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Nintendo Wii]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Wii Nunchuk]]></category>

		<guid isPermaLink="false">http://www.timteatro.net/?p=1185</guid>
		<description><![CDATA[There are <a href="http://arduino.cc/playground/Main/InterfacingWithHardware" target="_blank">several available libraries</a> for communicating with the Wii nunchuk. I somehow found something lacking in all of them, so I wrote <a href="http://www.timteatro.net/download/wiinunchuk.h" target="_blank">wiinunchuk.h</a> for my projects. It is inspired by <a href="https://raw.github.com/todbot/wiichuck_adapter/master/firmware/WiichuckDemo/nunchuck_funcs.h" target="_blank">Tod E. Kurt.</a> but my <a href="http://www.timteatro.net/download/wiinunchuk.h" target="_blank">wiinunchuk.h</a> boasts more powerful features and a more flexible API.]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.timteatro.net/wp-content/uploads/2012/02/P1271229.jpg"><img src="http://www.timteatro.net/wp-content/uploads/2012/02/P1271229-168x300.jpg" alt="" title="Arduino Wii Nuncuk Project" width="168" height="300" class="alignright size-medium wp-image-1249" /></a>
<p>There are <a href="http://arduino.cc/playground/Main/InterfacingWithHardware" target="_blank">several available libraries</a> for communicating with the Wii nunchuk. I somehow found something lacking in all of them, so I wrote <a href="http://www.timteatro.net/download/wiinunchuk.h" target="_blank">wiinunchuk.h</a> for my projects. It is inspired by <a href="https://raw.github.com/todbot/wiichuck_adapter/master/firmware/WiichuckDemo/nunchuck_funcs.h" target="_blank">Tod E. Kurt.</a> but my <a href="http://www.timteatro.net/download/wiinunchuk.h" target="_blank">wiinunchuk.h</a> boasts more powerful features and a more flexible API.</p>
<p>This library is free software and is licensed under the GPL v3.</p>
<p><b>Update!</b> Due to relative popularity, I have created a Git repository for wiinunchuck.h. For the latest version, get it <a href="https://github.com/timtro/wiinunchuck-h" target="_blank">here</a>.</p>
<p>The code is relatively well commented on its own. The header provides the functions</p>
<ul>
<li>void nunchuk_setpowerpins()</li>
<li>void nunchuk_init()</li>
<li>int nunchuk_get_data()</li>
<li>void nunchuk_calibrate_joy()</li>
<li>inline unsigned int nunchuk_zbutton()</li>
<li>inline unsigned int nunchuk_cbutton()</li>
<li>inline int nunchuk_joy_x()</li>
<li>inline int nunchuk_cjoy_x()</li>
<li>inline int nunchuk_cjoy_y()</li>
<li>inline uint16_t nunchuk_accelx()</li>
<li>inline uint16_t nunchuk_accely()</li>
<li>inline uint16_t nunchuk_accelz()</li>
<li>inline int nunchuk_caccelx()</li>
<li>inline int nunchuk_caccely()</li>
<li>inline int nunchuk_caccelz()</li>
<li>inline int nunchuk_joyangle()</li>
<li>inline int nunchuk_rollangle()</li>
<li>inline int nunchuk_pitchangle()</li>
<li>void nunchuk_calibrate_accelxy()</li>
<li>void nunchuk_calibrate_accelz().</li>
</ul>
<h2>Calibration</h2>
<p>Although the header provides functions to pull raw data right from the nunchuck, in most typical applications it is useful to have the data from the nunchuck normalised so that certain reference points are defined to be zero. For example, the reading from the joystick potentiometer will range from about 24 to about 230 on both x and y axes. The normal reading when the joystick is centred is about 130 (it will be slightly different in for each axis). If you subtract the centre value from the instantaneous joystick readings, then it is zeroed at the centre and readings will be relative to the centre.</p>
<p>Reasonable default centre values are #defined near the top of the document:</p>
<pre class="brush: cpp; title: ; notranslate">
#define DEFAULT_CENTRE_JOY_X 124
#define DEFAULT_CENTRE_JOY_Y 132
#define ACCEL_ZEROX 490
#define ACCEL_ZEROY 500
#define ACCEL_ZEROZ 525
</pre>
<p>These are loaded into program memory in <code>void nunchuk_init()</code>. If you need accuracy and plan to use the same nunchuk in all applications, it is worth your time to measure these for your nunchuk by spitting the rad nunchuk data to a serial terminal. For other cases, wiinunchuk.h provides functions</p>
<ul>
<li>void nunchuk_calibrate_joy()</li>
<li>void nunchuk_calibrate_accelxy()</li>
<li>void nunchuk_calibrate_accelz().</li>
</ul>
<p>The function <code>nunchuk_calibrate_joy()</code> will take the instantaneous reading of the joystick values and record them as the zero value. The end user should be warned not to manipulate the joystick during the moment it is called. Usually, this is at the beginning of the sketch before the action starts.</p>
<pre class="brush: cpp; title: ; notranslate">
void nunchuk_calibrate_joy()
	{
	joy_zerox = joy_x;
	joy_zeroy = joy_y;
	}
</pre>
<p><code>nunchuk_calibrate_accelxy()</code> and <code>nunchuk_calibrate_accelz()</code> will record zero values for the accelerometer axes. This has to be done in two steps since the force of gravity will always affect at least one of the accelerometer axes. If the nunchuk is held upright, the <i>xy</i> calibration will be clean since gravity is pulling towards negative <i>z</i>. Then, with the nunchuk on its side or face so that gravity affects only <i>x</i> or <i>y</i>, the <i>z</i> accelerometer can be read to take the zero value using <code>nunchuk_calibrate_accelz()</code>.</p>
<pre class="brush: cpp; title: ; notranslate">
void nunchuk_calibrate_accelxy()
	{
	accel_zerox = nunchuk_accelx();
	accel_zeroy = nunchuk_accely();
	}

void nunchuk_calibrate_accelz()
	{
	accel_zeroz = nunchuk_accelz();
	}
</pre>
<h2>Initialisation</h2>
<p><code>nunchuk_setpowerpins()</code> sets up the pins.</p>
<pre class="brush: cpp; title: ; notranslate">
void nunchuk_setpowerpins()
	{
	#define pwrpin PORTC3
	#define gndpin PORTC2
	DDRC |= _BV(pwrpin) | _BV(gndpin);
	PORTC &amp;= ~_BV(gndpin);
	PORTC |=  _BV(pwrpin);
	delay(100); // wait for things to stabilize
	}
</pre>
<p>The function assumes that the nuncuk is connected using a <a href="http://todbot.com/blog/2008/02/18/wiichuck-wii-nunchuck-adapter-available/" target="_blank">WiiChuk</a>, or at least that you are using the same pin configuration. That is to say A2, A3, A4 and A5 are power (-), power (+), data and clock, respectively. Even though these are analog pins, this function treats A2 and A3 as digital pins and sets them high and ground to power the nunchuk with 5V. As I write that, I recall that the nunchuk spec calls for less than 5V, but WiiChuk users don&#8217;t have much choice. If you cut the connector on your nunchuck and are plugging in directly, I would try using the Arduino&#8217;s 3.3V power instead.</p>
<p>The <code>nunchuk_init()</code> function sets up communication with the nunchuk by establishing the i2c bus and handshaking. The way this is done should work for OEM Nintendo nunchuks and for the el-cheapo knock-offs.</p>
<pre class="brush: cpp; title: ; notranslate">
void nunchuk_init()
	{
	Wire.begin();
	delay(1);
	Wire.beginTransmission(0x52);  // device address
	#if (ARDUINO &gt;= 100)
		Wire.write((uint8_t)0xF0);  // 1st initialisation register
		Wire.write((uint8_t)0x55);  // 1st initialisation value
		Wire.endTransmission();
		delay(1);
		Wire.beginTransmission(0x52);
		Wire.write((uint8_t)0xFB);  // 2nd initialisation register
		Wire.write((uint8_t)0x00);  // 2nd initialisation value
	#else
		Wire.send((uint8_t)0xF0);   // 1st initialisation register
		Wire.send((uint8_t)0x55);   // 1st initialisation value
		Wire.endTransmission();
		delay(1);
		Wire.beginTransmission(0x52);
		Wire.send((uint8_t)0xFB);   // 2nd initialisation register
		Wire.send((uint8_t)0x00);   // 2nd initialisation value
	#endif
	Wire.endTransmission();
	delay(1);
	//
	// Set default calibration centres:
	//
	joy_zerox = DEFAULT_CENTRE_JOY_X;
	joy_zeroy = DEFAULT_CENTRE_JOY_Y;
	accel_zerox = ACCEL_ZEROX;
	accel_zeroy = ACCEL_ZEROY;
	accel_zeroz = ACCEL_ZEROZ;
	}
</pre>
<p>Some other libraries do a more canonical sort of initialization that causes the data to be encrypted and is not compatible with 3rd party nunchucks. The function finishes off by loading the default zero values for the sensors into memory. They can hereon be changed directly or using the calibration functions discussed earlier.</p>
<h2>Communication</h2>
<p>We expect to get back six bytes of information:</p>
<table align="center" width=100%>
<tr>
<td><b>Byte</b></td>
<td><b>Contains</b></td>
</tr>
<tr>
<td>1</td>
<td>Joystick x</td>
</tr>
<tr>
<td>2</td>
<td>Joystick y</td>
</tr>
<tr>
<td>3</td>
<td>First 8 of 10-bit accelerometer <i>x</i> value</td>
</tr>
<tr>
<td>4</td>
<td>First 8 of 10-bit accelerometer <i>y</i> value</td>
</tr>
<tr>
<td>5</td>
<td>First 8 of 10-bit accelerometer <i>z</i> value</td>
</tr>
<tr>
<td>6</td>
<td>
<ul>
<li>Last two bits from acc <i>z</i></li>
<li>last two bits from acc <i>y</i></li>
<li>last two bits from acc <i>x</i></li>
<li>1-bit for Cbutton state</li>
<li>1-bit for Z-button state</li>
</ul>
</td>
</tr>
</table>
<p>The function <code>nunchuk_get_data()</code> requests and receives the six bytes data, reads it into a six element array <code>nunchuk_buf</code>. </p>
<pre class="brush: cpp; title: ; notranslate">
int nunchuk_get_data()
	{
	int cnt=0;
	  // Request six bytes from the chuck.
	Wire.requestFrom (0x52, 6);
	while (Wire.available ())
		{
	  // receive byte as an integer
		#if (ARDUINO &gt;= 100)
			nunchuk_buf[cnt] = Wire.read();
		#else
			nunchuk_buf[cnt] = Wire.receive();
		#endif
		cnt++;
		}
	//
	//Send read address, zero-byte.
	#if (ARDUINO &gt;= 100)
		Wire.write((uint8_t)0x00);
	#else
		Wire.send((uint8_t)0x00);
	#endif

	if (cnt &gt;= 5)
		{
		return 1;   // success
		}
	return 0; // failure
	}
</pre>
<h2>Processing and output</h2>
<p>The remaining functions deal with unpacking our six-byte data package, <code>nunchuk_buf[]</code> and presenting it in various useful forms. Since these functions are small and likely to be in a program loop, I cast them all as static inline functions to avoid emission of object code and have the code injected directly into the points of use in the Arduino sketches.</p>
<p>To start, we capture the C and Z buttons with <code>nunchuk_cbutton()</code> and <code>nunchuk_zbutton()</code>. The one-bit on/off values are stored in the last two bits of the sixth byte. We just bit shift an appropriate value and check the state of the last bit of that byte. The checking of the byte value is done using C&#8217;s inline ternary conditional operator <code>(condition)? true : false;</code>.</p>
<pre class="brush: cpp; title: ; notranslate">
static inline unsigned int nunchuk_zbutton()
	{
	return ((nunchuk_buf[5] &gt;&gt; 0) &amp; 1) ? 0 : 1;
	}

static inline unsigned int nunchuk_cbutton()
	{
	return ((nunchuk_buf[5] &gt;&gt; 1) &amp; 1) ? 0 : 1;
	}
</pre>
<p>There isn&#8217;t much to be done about the raw <i>x</i> and <i>y</i> values, so we just return them with <code>nunchuk_joy_x()</code> and <code>nunchuk_joy_x()</code>.</p>
<pre class="brush: cpp; title: ; notranslate">
static inline int nunchuk_joy_x()
	{
	return (int) nunchuk_buf[0];
	}

static inline int nunchuk_joy_y()
	{
	return (int) nunchuk_buf[1];
	}
</pre>
<p>We also want the option of having the calibrated (zeroed and centre) joystick values which are returned with functions <code>nunchuk_cjoy_x()</code> and <code>nunchuk_cjoy_x()</code></p>
<pre class="brush: cpp; title: ; notranslate">
static inline int nunchuk_cjoy_x()
	{
	return (int)nunchuk_buf[0] - joy_zerox;
	}

static inline int nunchuk_cjoy_y()
	{
	return (int)nunchuk_buf[1] - joy_zeroy;
	}
</pre>
<p>The accelerometer readings are a more difficult matter because of the 10-bit values, the least significant two bits are stored in byte six, which is a mish-mash of data. So, take for example the function <code>nunchuk_accelx()</code>.</p>
<pre class="brush: cpp; title: ; notranslate">
static inline uint16_t nunchuk_accelx()
	{
	return (  0x0000 | ( nunchuk_buf[2] &lt;&lt; 2 ) +
		( ( nunchuk_buf[5] &amp; B00001100 ) &gt;&gt; 2 )  );
	}
</pre>
<p>First, <code>0x0000 | ( nunchuk_buf[2] << 2 )</code> takes a blank 16-bits (0x0000) and does a bitwise OR (|) with the 8-bit nunchuk_buf[2] which has been bit-shifted by 2 (<<2). The bitwise OR simply takes nunchuk_buff[2] and imprints it onto 0x0000 creating a 16-bit version of nunchuk_buf[2]. The bit-shift ensures that the last two bits are blank so we can add in the last two bits which are stored in nunchuk_buf[5]. So, to this we add <code>( nunchuk_buf[5] &#038; B00001100 ) >> 2 )</code> which takes the pair of bits starting second from the left of nunchuk_buf[5] and zeros everything else. Then those two bits are shifted to the end to be added to the 16-bit copy of nunchuk_buf[2] which has the right-most two bits empty and waiting.</p>
<p>Rinse and repeat for the <i>y</i> and <i>z</i> accelerometer values.</p>
<pre class="brush: cpp; title: ; notranslate">
static inline uint16_t nunchuk_accely()
	{
	return (  0x0000 ^ ( nunchuk_buf[3] &lt;&lt; 2 ) +
		( ( nunchuk_buf[5] &amp; B00110000 ) &gt;&gt; 4 )  );
	}

static inline uint16_t nunchuk_accelz()
	{
	return (  0x0000 ^ ( nunchuk_buf[4] &lt;&lt; 2 ) +
		( ( nunchuk_buf[5] &amp; B11000000 ) &gt;&gt; 6 )  );
	}
</pre>
<p>The sketch may optionally want the calibrated accelerometer values which are offered by the following three functions.</p>
<pre class="brush: cpp; title: ; notranslate">
static inline int nunchuk_caccelx()
	{
		return (int)(nunchuk_accelx() - accel_zerox);
	}

static inline int nunchuk_caccely()
	{
		return (int)(nunchuk_accely() - accel_zeroy);
	}

static inline int nunchuk_caccelz()
	{
		return (int)(nunchuk_accelz() - accel_zeroz);
	}
</pre>
<p>The final three functions are concerned with angle. I include them because some people have a rather serious trigonometry allergy. The vector magnitudes which compliment these angles, I&#8217;ll leave to the Pythagorean wizardry of whom ever may need them.</p>
<p>You&#8217;ll note the use of the <a href="http://en.wikipedia.org/wiki/Atan2" target="_blank"><code>atan2()</code></a> function. This is exactly like vanilla <code>atan()</code>, except that it keeps track of which quadrant we are in by the signs of the opposite and adjacent lengths, and also handles vectors one the axes gracefully.</p>
<pre class="brush: cpp; title: ; notranslate">
static inline int nunchuk_joyangle()
	{
	double theta;
	theta = atan2( nunchuk_cjoy_y(), nunchuk_cjoy_x() );
	while (theta &lt; 0) theta += 2*M_PI;
	return (int)(theta * 180/M_PI);
	}
</pre>
<p>The little while-loop in here makes sure that we get a positive angle by rotating angles into their positive equivalent.</p>
<p>A little trick to get the orientation of the nunchuk from the accelerometers is to sniff out the gravity vector. If the accelerometer is properly zeroed, and all other external forces are negligible (i.e., gravity is the only significant fore on the numchuk), then the ratios of the accelerometer readings will give the roll and pitch of the nunchuk.</p>
<p>Roll (<code>nunchuk_rollangle()</code>) is the angle created by tipping an upright nunchuk to the left or right as viewed from behind. More precisely, with the z-axis pointing up from the joystick, the y-axis point out of the c-button and the x-axis pointing from the right side, roll is the angle created between the z-axis and the nunchuk when it is rotated about the y-axis.</p>
<pre class="brush: cpp; title: ; notranslate">
static inline int nunchuk_rollangle()
	{
	return (int) (  atan2( (double) nunchuk_caccelx(),
		(double) nunchuk_caccelz() ) * 180 / M_PI  );
	}
</pre>
<p>Then by the same definitions, pitch is the angle created between the nunchuk and the z-axis when the nunchuk is rotated about the x-axis and &#8216;tipped&#8217; forward or backward.</p>
<pre class="brush: cpp; title: ; notranslate">
static inline int nunchuk_pitchangle()
	{
	return (int) (  atan2( (double) nunchuk_caccely(),
		(double)nunchuk_caccelz() ) * 180 / M_PI  );
	}
</pre>
<p>If you haven&#8217;t already, <b>click here to <a href="http://www.timteatro.net/download/wiinunchuk.h" target="_blank">Download wiinunchuk.h</a>.</b></p>
<p>I hope you find this useful. Please feel free to post links to your projects or ask questions. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.timteatro.net/2012/02/10/a-library-for-using-the-wii-nunchuk-in-arduino-sketches/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Sleep timer (suspend) script for Linux</title>
		<link>http://www.timteatro.net/2011/01/16/sleep-timer-suspend-script-for-linux/</link>
		<comments>http://www.timteatro.net/2011/01/16/sleep-timer-suspend-script-for-linux/#comments</comments>
		<pubDate>Sun, 16 Jan 2011 20:23:30 +0000</pubDate>
		<dc:creator>Tim Teatro</dc:creator>
				<category><![CDATA[Software & FOSS]]></category>
		<category><![CDATA[Bash]]></category>

		<guid isPermaLink="false">http://www.timteatro.net/?p=1099</guid>
		<description><![CDATA[I usually go to sleep listening to <a href="http://gnaural.sourceforge.net/" target="_blank">gnaural</a> or watching old TV shows on the computer beside my bed (which my wife just loves). Rather than have it running all night, I'd rather have my computer sleep after a certain time.

Here's a simple (Bash) script to do just that.]]></description>
				<content:encoded><![CDATA[<p><img src="http://www.timteatro.net/wp-content/uploads/2011/01/charmaineswart_S6302417_sm.jpg" alt="" title="charmaineswart_S6302417_sm" width="200" height="240" class="alignright size-full wp-image-1104" />
<p>
I usually go to sleep listening to <a href="http://gnaural.sourceforge.net/" target="_blank">gnaural</a> or watching old TV shows on the computer beside my bed (which my wife just loves). Rather than have it running all night, I&#8217;d rather have my computer sleep after a certain time.
</p>
<p>
For some reason, the last time I tried to write a script to suspend my computer (a few years ago), it was a serious pain in the ass. Now, thanks to <a href="http://pm-utils.freedesktop.org/wiki/" target="_blank">pm-utils</a>, it&#8217;s pretty easy. The command <code>pm-suspend</code> must be run as root, but aside from that it pretty much does what it says on the tin.
</p>
<p>
To use the script, copy and paste it into a text file (preferably called <code>sleeptimer</code>). Then, change the permissions on the file to make it executable. From the command line, you can do this with <code>chmod u+x sleeptimer</code>. From the command line, <code>./sleeptimer N</code>  &#8211; will sleep the computer in N minutes, where N is some positive integer. The script will go through a count down for each fifteen minutes and gives a warning at 10, 5 and then 1 minute before it sleeps.
</p>
<p>
Please forgive the crudity. I didn&#8217;t really write it for general public usage, but I&#8217;m posting it in response to a request.
</p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/bash
#
# sleeptimer.sh
#
# Author: Timothy A.V. Teatro &lt;tim@timteatro.net&gt;
# Date  : Jan 11, 2011
#
# Description: A rather unsophisticated little script that I wrote for
#    myself. Since I usually fall asleep listening to gnaural or watching
#    a movie on my computer beside my bed, I wanted something to suspend
#    my computer rather than using shutdown.
#
# Usage : sudo ./sleeptimer &lt;integer&gt;
#    where &lt;integer&gt; is the number of minutes before the computer is suspended
#
#    This script is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#####################################################

#
# Must be run as root, so check id at the door.
#
if [ &quot;$(id -u)&quot; != &quot;0&quot; ]; then
	echo Must be run as root.
	exit 1
fi

min=$1 # Keep the first argument on the command line here
elapsed=0 

#
# Check to be sure argument is a number...
#
if [ $min -eq $min 2&gt; /dev/null ]; then
	#
	# ... and if it is, then decide what to do with it
	#
	# If it's less than 15 minutes, we want to count down to 10, 5 and
	# then 1 minute for feedback to the user.
	#	
	if [ $min -lt 15 ]; then
		echo Sleeping in $min minutes [`date`]
		while [ $elapsed -le $min ]; do
			sleep 1m
			elapsed=$((elapsed+1))
			if [ $((min-elapsed)) -eq 10 ]; then
				echo Sleeping in 10 min.
			elif [ $((min-elapsed)) -eq 5 ]; then
				echo Sleeping in 5 min.
			elif [ $((min-elapsed)) -eq 1 ]; then
				echo Sleeping in less than 1 min.
			fi
		done
	else # If it's more, we'll count down in 15 minute intervals.
		#
		# Get the remainder of $min/15 and sleep that down.
		#
		remainder=`expr $min % 15`
		sleep ${remainder}m
		elapsed=$((elapsed+remainder))
		#
		# Now that the time remaining is a factor of 15, we'll sleep
		# in 15 minute incriments until the last 15 minutes of the
		# timer.
		#
		while [ $elapsed -lt $((min-15)) ]; do
			sleep 15m
			elapsed=$((elapsed+15))
			echo Sleeping in $((min-elapsed)) minutes. [`date`]
		done
		sleep 5m
		echo Sleeping in 10 minutes
		sleep 5m
		echo Sleeping in 5 minutes
		sleep 4m
		echo Sleeping in less than a minute.
		sleep 1m
	fi
	#
	# We've done our counting, now suspend.
	#
	echo &quot;!!! NOW SUSPENDING YOUR MACHINE !!!&quot;
	pm-suspend
	exit 0
else
	echo $min is not an integer. Please specify the number of minutes before sleep.
	exit 2
fi
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.timteatro.net/2011/01/16/sleep-timer-suspend-script-for-linux/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Compiling the latest matplotlib from source</title>
		<link>http://www.timteatro.net/2010/10/25/compiling-the-latest-matplotlib-from-source/</link>
		<comments>http://www.timteatro.net/2010/10/25/compiling-the-latest-matplotlib-from-source/#comments</comments>
		<pubDate>Mon, 25 Oct 2010 18:10:08 +0000</pubDate>
		<dc:creator>Tim Teatro</dc:creator>
				<category><![CDATA[Software & FOSS]]></category>

		<guid isPermaLink="false">http://www.timteatro.net/?p=935</guid>
		<description><![CDATA[As of the date of this post, the latest Ubuntu (10.10) and Debian unstable (Sid) repositories contain an old and slightly obsolete version of matplotlib (0.99). The latest matplotlib (1.0) has several API changes... Luckily, compiling the latest matplotlib is relatively painless.]]></description>
				<content:encoded><![CDATA[<p><a href="http://matplotlib.sourceforge.net/" target="_blank" title="Matplotlib website">matplotlib</a> is best described by its website: </p>
<blockquote><p>
matplotlib is a python 2D plotting library which produces publication quality figures in a variety of hardcopy formats and interactive environments across platforms. matplotlib can be used in python scripts, the python and ipython shell (ala MATLAB® or Mathematica®), web application servers, and six graphical user interface toolkits.
</p></blockquote>
<p>As of the date of this post, the latest Ubuntu (10.10) and Debian unstable (Sid) repositories contain an old and slightly obsolete version of matplotlib (0.99). The latest matplotlib (1.0) has several API changes so that the examples found in the matplotlib <a href="http://matplotlib.sourceforge.net/examples/index.html" target="_blank" title="Examples at the matplotlib website">examples</a> and <a href="http://matplotlib.sourceforge.net/gallery.html" target="_blank" title="Gallery of plots at the matplotlib website">gallery</a> sections will not work out of the box.</p>
<p>Luckily, compiling the latest matplotlib is relatively painless. Before beginning, download the latest source from the matplotlib website (get it on <a href="http://sourceforge.net/projects/matplotlib/files/matplotlib/" target="_blank" title="matplotlib on Sourceforge">Sourceforge</a>) and be sure to have the build essentials package for your distro (On Ubuntu and Debian, <code>sudo apt-get install build-essential</code>).</p>
<h3>Getting started</h3>
<p>Untar the folder to a location of your choice (you can remove it after, so it can be a temporary directory). Using the terminal, change directory to the newly unziped, and move on to the next section.</p>
<h3>Dependencies</h3>
<p>If you just want to get the dependencies and get out, use the following apt line in your terminal, and move to the next section: <code>sudo apt-get install python-dev python-scipy libfreetype6-dev libpng12-dev zlib1g-dev libgtk2.0-dev python-gtk2-dev python-wxgtk2.8</code>. You may substitute <code>python-numpy</code> in place of <code>python-scipy</code>.</p>
<p>To see what we&#8217;re getting and why, read on.</p>
<ul>
<li><b>python-dev</b> needed pretty much any time you build pacakges for Python.</li>
<li><b>python-scipy OR python-numpy</b> matplotlib is made to interface with these. Even if you don&#8217;t use them in your programs, it is part of the matplotlib backed, since the numerics are very efficient compared to plain Python.</li>
<li><b>libfreetype6-dev</b> is a high-quality font engine.</li>
<li><b>libpng12-dev</b> for raster images</li>
<li><b>zlib1g-dev</b> for compression</li>
<li><b>libgtk2.0-dev</b> is the GUI toolkit I prefer, since I generally use Gnome. If you prefer Qt or Tk or otherwise, read the INSTALL file included with the matplotlib tarball. The compile script will try detect your preferred GUI toolkit, so just install the developer package for your preferred toolkit.</li>
<li><b>python-gtk2-dev</b> to interface GTK with Python.</li>
<li><b>python-wxgtk2.8</b> wxWidgets is a higher level library for developing GUIs. The python-wxgtk2.8 package is a Python implementation of wxWidgets using GTK for the back-end.</li>
</ul>
<h3>Building binaries and installing</h3>
<p>Assuming there are no problems, the following lines of code should complete the process and give you a working implementation of the latest matplotlib:<br />
<code><br />
	python setup.py build<br />
	python setup.py install<br />
</code></p>
<p>A big thank-you to Nicolas Dubuit who added this:</p>
<blockquote><p>
As an other option, you can also rebuild the package with the new version. It is much easier than it sounds and guarantees smooth update when the debian package is updated.</p>
<p>In short :<br />
1) Get the latest “source package” (apt-get source python-matplotlib) and unpack it (dpkg-source -x python-matplotlib) ; if not yet done install the build dependencies (sudo apt-get build-dep python-matplotlib)<br />
2) Download matplotlib-1.0.0.tar.gz, and unpack it,<br />
3) Copy debian/ form old package source tree to new package source tree, and add a new entry to debian/changelog (copy the last entry and modify it, especially change the version to 1.0.0-0.1)<br />
4) Build the package (dpkg-buildpackage -rfakeroot -b)</p>
<p>Now you have a debian package that you can install properly (sudo dpkg -i blablabla.deb) That way your system is always clean.
</p></blockquote>
<p>Voilà. Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.timteatro.net/2010/10/25/compiling-the-latest-matplotlib-from-source/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Review of Inkscape 0.48</title>
		<link>http://www.timteatro.net/2010/08/19/review-of-inkscape-0-48/</link>
		<comments>http://www.timteatro.net/2010/08/19/review-of-inkscape-0-48/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 22:23:50 +0000</pubDate>
		<dc:creator>Tim Teatro</dc:creator>
				<category><![CDATA[Graphics and Design]]></category>
		<category><![CDATA[Headline]]></category>
		<category><![CDATA[Software & FOSS]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Inkscape]]></category>
		<category><![CDATA[Review]]></category>

		<guid isPermaLink="false">http://www.timteatro.net/?p=773</guid>
		<description><![CDATA[With exciting new features and many welcomed bug-fixes, <a href="http://www.inkscape.org" target="_blank" title="Link to Inkscape website">Inkscape</a> 0.48 is packaged to please. Although the <a href="http://wiki.inkscape.org/wiki/index.php/Release_notes/0.48" target="_blank" title="Inkscape 0.48 release notes">new 0.48 instalment of Inkscape</a> is yet to be released officially, I have experimented with a pre-release copy. [...] The new Inkscape 0.48 pre-release is incrementally more sophisticated and stable than the current 0.47 is. Inkscape is currently...]]></description>
				<content:encoded><![CDATA[<p><img src="http://www.timteatro.net/wp-content/uploads/2010/08/inscape_048_review-250x300.jpg" alt="T-SQUARE review of Inkscape 0.48" title="inscape_048_review" width="250" height="300" class="alignright size-medium wp-image-790" />
<p>With exciting new features and many welcomed bug-fixes, <a href="http://www.inkscape.org" target="_blank" title="Link to Inkscape website">Inkscape</a> 0.48 is packaged to please. Although the <a href="http://wiki.inkscape.org/wiki/index.php/Release_notes/0.48" target="_blank" title="Inkscape 0.48 release notes">new 0.48 instalment of Inkscape</a> is yet to be released as of the time of this writing, I have experimented with a pre-release copy available for <a href="http://sourceforge.net/projects/inkscape/files/" target="_blank" title="Inkscape 0.48 download page on Sourceforge">download on Sourceforge</a>. Ubuntu users can install from Rico Tzschichholz&#8217;s PPA:</p>
<p><code><br />
sudo add-apt-repository ppa:ricotz/ppa<br />
sudo apt-get update<br />
sudo apt-get install inkscape<br />
</code></p>
<p>
	Notably, this release marks the return of shorter release cycles, meaning that we can expect more frequent doses of fresh Inkscape goodness. I&#8217;m sure many of us are happy about this news.
</p>
<h2>First Impressions</h2>
<p>
	Users aren&#8217;t bound to notice many differences upon initial load. Although there is a lot of refinement of the user interface (UI), there are no major design changes aside from artifacts of the new features. This is good, since the UI is very well designed already.
</p>
<p>
	Users trying the latest Inkscape will likely find, as I did, that the new features and tweaks are best discovered as you begin working. Aside from the new menu entries, the first new feature that really struck me came about while I was trying to import a raster image. After I had dragged the file into my document, a new dialogue box popped up and asked me if I wanted to embed or link the image. Now, I can&#8217;t tell you how many time&#8217;s I&#8217;ve opened old documents to painfully discover that I forgotten to embed the images! This new dialogue is definitely a new point of refinement, and set the tone for what was to come.
</p>
<h2>New Features &amp; Tweaks</h2>
<p>
	There are too many features and tweeks to cover here, so I&#8217;ll be writing mainly about my personal highlights. The interested reader can check the <a href="http://wiki.inkscape.org/wiki/index.php/Release_notes/0.48" target="_blank" title="Inkscape 0.48 release notes">release notes</a> for the full list.
</p>
<h3>Spray objects tool</h3>
<p><div id="attachment_787" class="wp-caption alignright" style="width: 160px"><a href="http://www.timteatro.net/wp-content/uploads/2010/08/inkscape_spray_tool.jpg"><img src="http://www.timteatro.net/wp-content/uploads/2010/08/inkscape_spray_tool-150x150.jpg" alt="" title="A screenshot featuring the Inkscape spray tool." width="150" height="150" class="size-thumbnail wp-image-787" /></a><p class="wp-caption-text">A screenshot featuring the Inkscape spray tool.</p></div><br />
The only new tool in this release is the <i>spray objects</i> tool. It is used to propagate clones (or just copies) of an object along a brush-stroke, allowing the randomization of parameters such a rotation, placement along the path, size and alike. Looking to the screen-shot on the right, I&#8217;ve created a circle with a yellow transparent gradient and used the spray tool to scatter copies of it to look like animated looking pollen spores. A very cool tool indeed!</p>
<h3>Overhaul of the text tool</h3>
<div id="attachment_788" class="wp-caption alignright" style="width: 160px"><a href="http://www.timteatro.net/wp-content/uploads/2010/08/inkscape_048_text_tool.jpg"><img src="http://www.timteatro.net/wp-content/uploads/2010/08/inkscape_048_text_tool-150x150.jpg" alt="A screenshot featuring Inkscape 0.48&#039;s redesigned text tool" title="A screenshot featuring Inkscape 0.48&#039;s redesigned text tool" width="150" height="150" class="size-thumbnail wp-image-788" /></a><p class="wp-caption-text">A screenshot featuring Inkscape 0.48's redesigned text tool</p></div>
<p>
	A very welcomed item in the 0.48 release is the overhauled <i>text tool</i>. If you look at the screen-shot (right), you&#8217;ll see that the text-dialogue mostly looks the same, but if you look at the menu-bar for the text tool (at the top of Inkscape window), you&#8217;ll see a barrage of new options for controlling line spacing, kerning, superscripts subscripts, etc.
</p>
<p>
	Still sorely absent from the font tool is the ability to control font-variants such as small-caps. This is a <em>huge</em> problem for most who does layout work in Inkscape. If I have a $350.00 font, I darn-well want Inkscape to be able to use the professional features. I&#8217;d like someone to let me know if Inkscape will support it if the XML file is manually edited for this. Last time I checked (about 2 years ago), it didn&#8217;t.
</p>
<h3>Cool new extensions</h3>
<p>This release boasts a number of very cool new extensions. My favourites are:</p>
<ul>
<li>
		The new JessyInk extension for creating slides for presentations that are viewable in browsers &mdash; See my <a href="http://www.timteatro.net/2010/08/12/a-tutorial-introduction-to-jessyink-presentations-in-inkscape/" target="_blank" title="Link to t-square\'s JessyInk tutorial" rel="bookmark"><i>Tutorial Introduction to JessyInk</i>.</a>
	</li>
<li>
		The new <code>Web > Slicer</code> extensions to slice web layouts into multiple images and help the HTML+CSS creation.
	</li>
<li>
		The <code>Modify Path > Pixelsnap</code> extension that aligns rectangles and paths to pixel boundaries, to create sharp web and digital graphics. &mdash; This has been a sorely needed convenience function.
	</li>
<li>
		The sphere extension which draws the globe as a collection of ellipses representing a sphere&#8217;s latitude and longitude lines.
	</li>
<li>
		The <code>Generate from Path > Voronoi Pattern</code> extension which creates a random pattern of Voronoi cells (resembling the cell pattern in dry/cracked dirt).
	</li>
<li>
		The <code>Render > Barcode - Datamatrix</code> extension which renders a DataMatrix 2D barcode, as specified in BS ISO/IEC 16022:2006.
	</li>
</ul>
<h3>LaTeX PDF export</h3>
<p>
	<i>The LaTeX PDF export function has me rather excited. Expect a tutorial soon.</i>
</p>
<p>
	I can remember making diagrams for my MSc thesis in Inkscape, and then having to use the LaTeX picture environment to manually nail down the coordinates for each an every text label that I wanted&mdash;one at a time. This is done so that the fonts in the diagram will match the fonts in the document.
</p>
<p>
	Of course these days, I use TeXtext (check out my brief article on TeXtext) to simply generate the text and symbols. The font in TeXtext can be set in the preamble file that TeXtext can take as an option. One drawback to this method however, is that the text is now fixed, and if oned desires to change their document font then all of the text must be redone.</p>
<p>
	With the new LaTeX PDF export function in Inscape 0.48, Inkscape will do the grunt work for you. It will create a .tex file along side a pdf file for inclusion in your LaTeX document. The .tex file contains all of the text and placement information so that LaTeX will display the pdf diagram, and then use the information in the accompanying .tex file to draw and overlay the diagram&#8217;s text. GNUPLOT users will find this quite similar to GNUPLOT&#8217;s <i>epslatex</i> terminal.
</p>
<h3>Upgraded swatches</h3>
<p>From the release notes:</p>
<blockquote><p>
	Custom swatches can be created and used on a per-document basis. An &#8220;Auto&#8221; color palette will track swatches in the current document and allow them to be set and used. The use is &#8220;live&#8221; with changes to the swatch being applied automatically to all objects set to it. The swatches can also be gradients and not just simple colors.
</p></blockquote>
<p>
	As it stands right now, I don&#8217;t think this is working yet. I wrestled with the swatches for some time, but I could not even manage to add a simple colour (but it did let me add a gradient for some reason). I hope this works its way into the final release of Inkscape 0.48.
</p>
<h3>Rewritten node tool</h3>
<p>
	During Google Summer of Code 2009, the node tool underwent an extensive rewrite boasting several new features. These are perhaps too numerous and detailed to describe here, but I can summarize by saying that the node tool functionality is improved and users can expect a cleaner and more productive experience. The most notable improvement is the ability to select and edit multiple paths at once.
</p>
<p>
	The interested reader is encouraged to read about the node tool rewrite on <a href="http://wiki.inkscape.org/wiki/index.php/GSoC2009_Node_Tool_Rewrite" target="_blank" title="Details about the node tool rewrite in Inkscape">Inkscape&#8217;s wiki page</a>
</p>
<h2>Final Words</h2>
<p>
	With new features that are both relevant and useful, the 0.48 release is the most powerful version of Inkscape yet. It is packed with welcomed tweaks and changes that improve the overall user experience and scratch a lot of old itches.
</p>
<p>
	I expect to strongly recommend that everyone upgrades as soon as the official release is available. I would currently recommend that users upgrade non-production machines to the current pre-release to explore some of the new features. It&#8217;s definitely stable enough to use, as is.
</p>
<p>
	The new Inkscape 0.48 pre-release is incrementally more sophisticated and stable than the current 0.47 is. Inkscape is currently one of the best examples of an open-source project, and the Inkscape community never fails to amaze me with their work. I&#8217;d like to thank all of the developers for their countless hours of effort that makes Inkscape one of my favourite pieces of software.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.timteatro.net/2010/08/19/review-of-inkscape-0-48/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symphony of Science: A Glorious Dawn</title>
		<link>http://www.timteatro.net/2010/08/13/symphony-of-science-a-glorious-dawn/</link>
		<comments>http://www.timteatro.net/2010/08/13/symphony-of-science-a-glorious-dawn/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 02:50:31 +0000</pubDate>
		<dc:creator>Tim Teatro</dc:creator>
				<category><![CDATA[On The Web]]></category>
		<category><![CDATA[Science]]></category>
		<category><![CDATA[Software & FOSS]]></category>
		<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://www.timteatro.net/?p=659</guid>
		<description><![CDATA[If you wish to make an apple pie from scratch : You must first invent the universe

Space is filled with a network of wormholes : You might emerge somewhere else in space : Some when-else in time [...]

A still more glorious dawn awaits : Not a sunrise, but a galaxy rise : A morning filled with 400 billion suns : The rising of the milky way]]></description>
				<content:encoded><![CDATA[<p>From <a href="http://www.symphonyofscience.com/" target="_blank">the Symphony of Science website</a>:</p>
<blockquote><p>The Symphony of Science is a musical project headed by John Boswell, designed to deliver scientific knowledge and philosophy in musical form&#8230;</p></blockquote>
<p>
All of the songs on <a href="http://www.symphonyofscience.com/" target="_blank">the Symphony of Science website</a> are amazing and beautiful. I think my favorite still has to be <i>A Glorious Dawn</i>, shown in the music video below. I have included the lyrics afterward. The song features the voices of Carl Sagan and Stephen Hawking. Enjoy, and please donate to the Symphony of Science.</p>
<p><object width="505" height="304"><param name="movie" value="http://www.youtube.com/v/zSgiXGELjbc&#038;color1=0xb1b1b1&#038;color2=0xd0d0d0&#038;hl=en_US&#038;feature=player_detailpage&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/zSgiXGELjbc&#038;color1=0xb1b1b1&#038;color2=0xd0d0d0&#038;hl=en_US&#038;feature=player_detailpage&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="505" height="304"></embed></object></p>
<blockquote><p>
[Carl Sagan]<br />
If you wish to make an apple pie from scratch<br />
You must first invent the universe</p>
<p>Space is filled with a network of wormholes<br />
You might emerge somewhere else in space<br />
Some when-else in time</p>
<p>The sky calls to us<br />
If we do not destroy ourselves<br />
We will one day venture to the stars</p>
<p>A still more glorious dawn awaits<br />
Not a sunrise, but a galaxy rise<br />
A morning filled with 400 billion suns<br />
The rising of the milky way</p>
<p>The Cosmos is full beyond measure of elegant truths<br />
Of exquisite interrelationships<br />
Of the awesome machinery of nature</p>
<p>I believe our future depends powerfully<br />
On how well we understand this cosmos<br />
In which we float like a mote of dust<br />
In the morning sky</p>
<p>But the brain does much more than just recollect<br />
It inter-compares, it synthesizes, it analyzes<br />
it generates abstractions</p>
<p>The simplest thought like the concept of the number one<br />
Has an elaborate logical underpinning<br />
The brain has its own language<br />
For testing the structure and consistency of the world</p>
<p>[Hawking]<br />
For thousands of years<br />
People have wondered about the universe<br />
Did it stretch out forever<br />
Or was there a limit</p>
<p>From the big bang to black holes<br />
From dark matter to a possible big crunch<br />
Our image of the universe today<br />
Is full of strange sounding ideas</p>
<p>[Sagan]<br />
How lucky we are to live in this time<br />
The first moment in human history<br />
When we are in fact visiting other worlds</p>
<p>The surface of the earth is the shore of the cosmic ocean<br />
Recently we&#8217;ve waded a little way out<br />
And the water seems inviting
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.timteatro.net/2010/08/13/symphony-of-science-a-glorious-dawn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Tutorial Introduction to JessyInk: Presentations in Inkscape.</title>
		<link>http://www.timteatro.net/2010/08/12/a-tutorial-introduction-to-jessyink-presentations-in-inkscape/</link>
		<comments>http://www.timteatro.net/2010/08/12/a-tutorial-introduction-to-jessyink-presentations-in-inkscape/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 15:46:13 +0000</pubDate>
		<dc:creator>Tim Teatro</dc:creator>
				<category><![CDATA[Headline]]></category>
		<category><![CDATA[Software & FOSS]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Inkscape]]></category>
		<category><![CDATA[JessyInk]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.timteatro.net/?p=565</guid>
		<description><![CDATA[<a href="http://code.google.com/p/jessyink/" target="_blank">JessyInk</a> adds functionality to Inkscape for creating slide-show presentations to <a href="http://www.inkscape.org/" target="_blank">Inkscape</a>... JessyInk gives users the ability to embed slide-transitions, text reveals, navigation, hot-keys, video embedding, mouse event handling and much more. It provides more than what anyone should need to create effective, clean, efficient and impressive slides.]]></description>
				<content:encoded><![CDATA[<p><img src="http://www.timteatro.net/wp-content/uploads/2010/08/jessyink_tutorial-250x300.jpg" alt="" title="JessyInk Tutorial" width="250" height="300" class="alignright size-medium wp-image-588" />
<p>Sure, presentation slides are becoming passe in the business office. (And it&#8217;s about time too.) But in technical fields which require a lot of illustration and visualization, there simply is no better way to have an ordered discussion.</p>
<p>PowerPoint and alike place far too much emphasis on text elements and distracting effects and transitions. For my presentations, I usually use the beamer class in pdfLaTeX since two things are handled very well: math and vector graphics. But as my style has honed towards minimalism with attractive and illustrative graphics, I&#8217;m spending more and more time in Inkscape. Wouldn&#8217;t it be great to just create presentations in a vector graphics editor? Hannes Hochreiner certainly thought so. While a chemistry Ph.D student at Canada&#8217;s Dalhousie University, Hannes began developing a set of Inkscape extensions called <a href="http://code.google.com/p/jessyink/" target="_blank">JessyInk</a>.</p>
<p><a href="http://code.google.com/p/jessyink/" target="_blank">JessyInk</a>, to be included in the next major release of Inkscape, adds functionality for creating slide-show presentations to <a href="http://www.inkscape.org/" target="_blank">Inkscape</a>. The <i>de facto</i> output (and internal memory) format for Inkscape is SVG, which is a human-readable XML that can be rendered by all major modern browsers except Microsoft Internet Explorer. JessyInk embeds JavaScript within the SVG files adding the dynamic functionality required for presentations.</p>
<p>JessyInk gives users the ability to embed slide-transitions, text reveals, navigation, hot-keys, video embedding, mouse event handling and much more. It provides more than what anyone should need to create effective, clean, efficient and impressive slides.</p>
<p>What remains in this article is intended as an introduction to JessyInk work-flow. I&#8217;ll demonstrate the creation of a basic slide-show with text-reveals and navigation. I&#8217;ll build upon these fundamentals in later tutorials.</p>
<p><b>Files to download before moving on:</b></p>
<ul>
<li><a href="http://www.timteatro.net/wp-content/uploads/2010/08/JessyInk_Tutorial.svg" target="_blank">Example slides for this tutorial</a></li>
<li><a href="http://jessyink.googlecode.com/files/JessyInk_1_5_2_showcase.svg" target="_blank">Official JessyInk showcase presentation</a></li>
</ul>
<p><b>Note:</b> If you don&#8217;t already have JessyInk installed, I have a <a href="http://www.timteatro.net/2010/07/31/installing-jessyink/" target="_blank">tutorial on installing JessyInk</a> for Ubuntu, Linux and Windows.</p>
<p><b>Note:</b> Of course, one may still need elegant mathematics in Inkscape. Click here for my <a href="http://www.timteatro.net/2010/08/05/textext-for-math-in-inkscape/" target="_blank">article on TeXtext for math in Inkscape</a>.</p>
<h3>A word on viewing.</h3>
<p>As you work along with this tutorial, it will be useful for you to preview your slides. Once you have saved your Inkscape SVG, open it with your browser. Each time you save your Inkscape file, refresh the browser window to view your changes.</p>
<p>When you are presenting, remember to make your browser full-screen (usually F11) so that the browser buttons don&#8217;t distract your audience.</p>
<h2>JessyInk Basics</h2>
<p>JessyInk causes your browser to render each layer in the SVG as an individual slide. This is how we can define many slides within a single SVG. To better understand the concept, <a href="http://www.timteatro.net/wp-content/uploads/2010/08/JessyInk_Tutorial.svg" target="_blank">download the example slides</a> used for this tutorial. Clicking on the link should bring the presentation into your browser. Save the file to your hard drive and open it in Inkscape to get a closer look.</p>
<p>Elements common to all slides may be placed on the master-slide, which is a special layer that is rendered across all slides. For example, it is a good idea for the master-slide to contain your presentation&#8217;s theme and auto-texts for slide numbers and slide titles. We&#8217;ll cover auto-texts later in the tutorial.</p>
<p>If you are not already familiar with JessyInk, you should first download and explore <a href="http://jessyink.googlecode.com/files/JessyInk_1_5_2_showcase.svg" target="_blank">the official JessyInk showcase slideshow</a> which gives an overview of JessyInk&#8217;s capabilities and briefly discusses many of the functions demonstrated in this tutorial.</p>
<p>Let&#8217;s get started by defining our slide geometry and background colour: start a new document and press SHFT+CTL+D or <code>File > Document Properties</code>.</p>
<div class="right-margin">
<div id="attachment_598" class="wp-caption alignleft" style="width: 261px"><a href="http://www.timteatro.net/wp-content/uploads/2010/08/jessyink_document_properties.png"><img src="http://www.timteatro.net/wp-content/uploads/2010/08/jessyink_document_properties-251x300.png" alt="" title="Inkscape Document Properties for JessyInk Slide" width="251" height="300" class="size-medium wp-image-598" /></a><p class="wp-caption-text">Fig. 1 -  Document properties window showing document dimensions and background color.</p></div>
</div>
<h3>Slide geometry</h3>
<p>Before moving on, you need to choose the geometry of your canvas. It should depend on your intended target. If you plan that most of your audience will view the slides in their browsers, then I prefer 864&#215;486, which has an aspect ratio of 16:9. Web browser rendering areas tend to be wider than tall due to the tool-bars and buttons adorning the browser window. So a wide aspect ratio will utilize more of the window. Also, 16:9 is a standard aspect supported by most projectors and many computer monitors made in recent years. However, if you know that you intend to present using a projector that has 4:3 aspect and aren&#8217;t worried as much about how it appears in a web-browser, then I suggest 640&#215;480 or 800&#215;600. Remember: vectors will scale so size isn&#8217;t important unless you will be using raster graphics in the slides.</p>
<p>Once you&#8217;ve chosen your slide geometry, enter the width and height in the appropriate text boxes in the Document Properties window. For this tutorial, I&#8217;ll use 864&#215;486 (See Fig. 1).</p>
<h3>Background colour</h3>
<p>While still at the <i>Document Properties</i> window, we may also choose the background colour. Note that background colour is not going to be the colour of your slides; it&#8217;s the colour of the area around the slides if they don&#8217;t fill the entire browser window. You&#8217;ll see what I mean, but the idea is akin to the black bars at the top and bottom of a movie when it doesn&#8217;t fit your TV screen. For my example file, I&#8217;m going to choose a nice blue, #052b59ff.</p>
<h3>The master slide</h3>
<p>Press SHFT+CTL+L to bring up the layers dialogue or go to <code>Layer > Layers</code>. It is a good idea to have the layers dialogue open while using JessyInk since we will be working with layers a lot.</p>
<div id="attachment_604" class="wp-caption alignleft" style="width: 310px"><a href="http://www.timteatro.net/wp-content/uploads/2010/08/jessyink_master_slide.png"><img src="http://www.timteatro.net/wp-content/uploads/2010/08/jessyink_master_slide-300x181.png" alt="" title="JessyInk\'s master-slide" width="300" height="181" class="size-medium wp-image-604" /></a><p class="wp-caption-text">Fig. 2 - JessyInk's master-slide dialogue box with blank canvas in background.</p></div>
<p>Right click on <em>Layer 1</em> in the layers palette and rename it to <i>Master</i> or something else meaningful. It&#8217;s going to become our master-slide. Go to <code>Extensions > JessyInk > master slide</code> and enter <i>Master</i>, or the name you just chose for your master-slide (Fig. 2). Once you apply, JessyInk will define the slide you renamed as the master-slide for the presentation. Anything on this layer will appear on <em>all slides</em> within your presentation.</p>
<p>To construct the basic backdrop for our slides, with the master-slide selected draw a rectangle and make it the same size as the canvas. Fill it as you wish and centre it on the page with align dialogue box (CTRL+SHFT+A). For my example, I&#8217;m going to use a simple white/grey gradient which is both simple and rich looking. Now as we create slides, this backdrop will appear on all slides.</p>
<h3>Auto-texts: slide titles</h3>
<p>Auto texts are text elements in the slide which are dynamically generated for each slide. For example, if we want to put the slide number or title on each slide, there is no need to manually number or title each slide. We can add a placeholder text and have JessyInk insert the proper text on each slide.</p>
<p>For our example, I&#8217;m going to put the title at the top of each slide. Since it will appear on all slides, let&#8217;s add it to the master-slide.</p>
<p>I&#8217;ll start by putting a dark rectangle across the top of the slide which will distinguish the titling text. Then, I&#8217;ll use the text tool (press <code>t</code> or select it from the tool palette) and place the simple text <i>Slide Title</i> on top of the rectangle.</p>
<div class="right-margin">
<div id="attachment_611" class="wp-caption alignleft" style="width: 310px"><a href="http://www.timteatro.net/wp-content/uploads/2010/08/jessyink_auto-texts.png"><img src="http://www.timteatro.net/wp-content/uploads/2010/08/jessyink_auto-texts-300x181.png" alt="JessyInk&#039;s auto-text dialogue box." title="JessyInk&#039;s auto-text dialogue box." width="300" height="181" class="size-medium wp-image-611" /></a><p class="wp-caption-text">Fig. 3 - JessyInk's auto-texts dialogue box inserting slide title.</p></div>
</div>
<p>We obviously don&#8217;t want the literal text, <i>Slide Title</i> to appear at the top of each page. In order to have the title automatically inserted instead, highlight the text block and click <code>Extensions > JessyInk > auto-texts</code> to bring up the auto-texts dialogue box. Select the radial indicator beside <i>slide title</i> and click apply (see Fig. 3). Now, when we add slides to our presentation, the title will appear in place of the text <i>Slide Title</i>.</p>
<p>You can be quite clever about using auto-texts for aesthetic effect. For example, in the screen-shot to the right, I have created a reflection and drop-shadow for the slide titles. <b>Note:</b> I realize that a reflection <em>and</em> a drop-shadow is stylistically overboard, but I&#8217;m making a point here. Remember: <em>less is more</em>. When presenting you always want to have maximum affect by minimal means.</p>
<div class="right-margin">
<div id="attachment_614" class="wp-caption alignleft" style="width: 310px"><a href="http://www.timteatro.net/wp-content/uploads/2010/08/jessyink_auto-texts_reflection.png"><img src="http://www.timteatro.net/wp-content/uploads/2010/08/jessyink_auto-texts_reflection-300x242.png" alt="Fancy slide title." title="jessyink_auto-texts_reflection" width="300" height="242" class="size-medium wp-image-614" /></a><p class="wp-caption-text">Fig. 4 - I've added a drop-shadow and translucent reflection to the slide title, that will appear as the actual slide title during the presentation.</p></div>
</div>
<p>To make the reflection, simply duplicate the auto-text (highlight it and press CTRL+D) and then flip it vertically (press v) and then move the reflected text below the title text. Then open the fill and stroke dialogue (CTRL+SHFT+F) and set the fill to a gradient. Set the gradient stop colours to a grey and then a fully transparent grey. Using the gradient tool (press the <i>g</i> key or select it from the tools palette) move the gradient end-points until you get something that looks like a reflection.</p>
<p>To make the shadow, duplicate the title text again and set the fill colour to black. Using the <i>pg dn</i> (page down) key, drop the black copy of the title text behind the white copy. Open the fill and stroke dialogue and add a Gaussian blur and reduce the transparency until you get something you like. </p>
<h3>Titling slide</h3>
<p><div id="attachment_618" class="wp-caption alignright" style="width: 160px"><a href="http://www.timteatro.net/wp-content/uploads/2010/08/jessyink_title_slide.png"><img src="http://www.timteatro.net/wp-content/uploads/2010/08/jessyink_title_slide-150x150.png" alt="Creating Title Slide layer." title="jessyink_title_slide" width="150" height="150" class="size-thumbnail wp-image-618" /></a><p class="wp-caption-text">Fig. 5 - Creating Title Slide layer.</p></div>
<p>Well, we&#8217;re all dressed up! Let&#8217;s go out. There&#8217;s no real trick to adding slides. Just add a new layer by clicking the <i>+</i> symbol on the layers palette (Fig. 5). The only issue is that when we are making a titling slide, we might not want the master slide showing through. No big problem here, just cover it up. To make my titling slide, I&#8217;m going to copy the background gradient from the master slide and paste it onto the title slide. Now just make it look as you wish.</p>
<p><img src="http://www.timteatro.net/wp-content/uploads/2010/08/introduction_to_jessyink.jpg" alt="Example Title Slide" title="introduction_to_jessyink" width="505" height="240" class="aligncenter size-full wp-image-624" /></p>
<div class="spacer"></div>
<h3>Revealing bullet points: build-in effect</h3>
<p>Think before you include bullet points. There are very few cases where they are actually justified. You never want your audience to read while you&#8217;re trying to talk to them.</p>
<div class="right-margin">
<div id="attachment_629" class="wp-caption alignleft" style="width: 310px"><a href="http://www.timteatro.net/wp-content/uploads/2010/08/jessyink_bullet_reveal.png"><img src="http://www.timteatro.net/wp-content/uploads/2010/08/jessyink_bullet_reveal-300x181.png" alt="JessyInk effects dialogue" title="jessyink_bullet_reveal" width="300" height="181" class="size-medium wp-image-629" /></a><p class="wp-caption-text">Fig. 6 - The effects dialogue for JessyInk applying a fade-in reveal for the second bullet point. Also note the vertical rules for aligning bullets and text.</p></div>
</div>
<p>That said, one of the most commonly seen formats for slides is the step by step reveal of bullet points. This is easily done in JessyInk. First, set up your bullet points. There&#8217;s no convenient tricks here: just use the text tool to make text and draw the bullets. I do recommend using a couple of vertical rules and a horizontal rule (see Fig. 6) to align the bullets and text. Use the align and distribute dialogue to arrange things nicely (CTRL+SHFT+A).</p>
<p>Once you have created at least two bulleted text elements, select and group (CTRL+G) each bullet with its corresponding text so that each bulleted text element is only one object. We want this so that we can apply effects to the text and bullet simultaneously instead of having to do it separately for text and bullets.</p>
<p>Now we can program the reveal for each of the elements. If you want to have an element visible when the slide first appears, leave that one alone since it will of course be visible by default. Select the first element that you want to be revealed and click <code>Extensions > JessyInk > effects</code> to invoke the effects dialogue (Fig. 6). I&#8217;ll explain the settings in the next paragraph but for now just copy the settings from the last figure. That is, order: 1, duration: 0.4, type: fade. Leave the build-out effect settings at default values. Click apply when finished.</p>
<p>The two effects available in the effects menu, build-in and build-out, reveal and hide elements respectively. The <i>order</i> will indicate 1st, 2nd, 3rd, etc to be revealed. So for the first element you want to be revealed, set the build-in effect by changing the <i>type</i> radial selector from none to one of <i>appear, fade</i> or <i>pop,</i> and set the order to 1. The next item you want revealed should have an order of 2, and so on.</p>
<h3>Slide transitions</h3>
<p>Slide transitions are also something that should be used with reservation. Transitions are applied so that as the slides progress, new slides are brought onto the screen with an animated effect.</p>
<p>Create a new layer and put some text on it. I&#8217;m simply calling the new layer <i>Slide transitions</i> and placing the text <i>This slide should fade in smoothly&#8230;</i></p>
<div class="right-margin">
<div id="attachment_632" class="wp-caption alignleft" style="width: 217px"><a href="http://www.timteatro.net/wp-content/uploads/2010/08/jessyink_slide_transitions.png"><img src="http://www.timteatro.net/wp-content/uploads/2010/08/jessyink_slide_transitions-207x300.png" alt="JessyInk transitions dialogue." title="jessyink_slide_transitions" width="207" height="300" class="size-medium wp-image-632" /></a><p class="wp-caption-text">Fig. 7 - JessyInk transitions dialogue.</p></div>
</div>
<p>To create the slide transition, go to <code>Extensions > JessyInk > transitions</code>. In Fig. 7, you will see my settings. Simply input the name of the slide which you want to apply the transition to and select the animation type (fade, pop, etc). You can program a transition-in and transition-out. The transition-out is only needed if you would like a smoother transition. For example, if I am using the fade transition, and I only set transition-in effects, then when I change slides my current slide disappears and the next slide fades-in from nothing. If I set my slides to transition-out then as I go to a new slide, the current slide fades out as the new slide fades-in, creating a nice smooth transition.</p>
<h3>Bringing it all together</h3>
<p>I think by now I have covered the basics which should suffice for most presenters needs. I&#8217;m going to create one last slide which emcompasses most of the concepts covered so far.</p>
<p>I&#8217;m calling my last slide <i>Conclusion</i>. After it&#8217;s created, I&#8217;ll start by applying a slide transition. I&#8217;m going to apply a fade-out on the second to last slide and a fade-in on <i>Conclusion</i> to get a nice smooth fade. I know I&#8217;m using a lot of fades. I want to leave it to the user to explore the other animation effects.</p>
<p>Now, I&#8217;m going to create several blocks of text. I do not want all of the blocks to appear at the same time. In fact, I only want one block at a time to appear, so this means that as one text element fades in, the previous one needs to fade out.</p>
<p>As before, pick one of the blocks of text to be present when the slide comes in. This means it will have no build-in effect. Open the effects dialogue by clicking <code>Extension > JessyInk > effects.</code> The build-in type should be set to none, but set the build-out to fade, the order to 1 and set the duration to 0.3. Now click apply.</p>
<div class="right-margin">
<div id="attachment_634" class="wp-caption alignleft" style="width: 310px"><a href="http://www.timteatro.net/wp-content/uploads/2010/08/jessyink_conclusion_slide.png"><img src="http://www.timteatro.net/wp-content/uploads/2010/08/jessyink_conclusion_slide-300x223.png" alt="Screenshot of effects configuration." title="jessyink_conclusion_slide" width="300" height="223" class="size-medium wp-image-634" /></a><p class="wp-caption-text">Fig. 8 - Screenshot of effects configuration with my overlapping text in the background.</p></div>
</div>
<p>Select the next block of text that you will want to appear. Set the build-in to fade with duration 0.3 and order 1 and set the build-out to fade duration 0.3 and order 2. Select the next block and set the same options with build-in order 2 and build-out order 3. Hopefully you can see the pattern forming. We want the order of the fade-out to be one higher than the order of the fade-in (see Fig. 8). We also want the fade-out order of the previous text to be the same as the fade-in order of the new text. The effect is quite interesting. Now use the <i>align and distrubite</i> dialogue to center all of the text on top of eachother.</p>
<h3>Conclusion</h3>
<p>Thank you for reading and following along. I hope this tutorial was useful. There will be more to come on more advanced JessyInk and Inkscape topics. If you have a request, feel free to <a href="http://www.timteatro.net/contact" title="Contact Tim Teatro" target="_blank">contact me</a>, and I&#8217;ll be happy to consider creating a tutorial for your need.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.timteatro.net/2010/08/12/a-tutorial-introduction-to-jessyink-presentations-in-inkscape/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>TeXtext for Math in Inkscape</title>
		<link>http://www.timteatro.net/2010/08/05/textext-for-math-in-inkscape/</link>
		<comments>http://www.timteatro.net/2010/08/05/textext-for-math-in-inkscape/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 16:42:27 +0000</pubDate>
		<dc:creator>Tim Teatro</dc:creator>
				<category><![CDATA[Scientific Computing]]></category>
		<category><![CDATA[Software & FOSS]]></category>
		<category><![CDATA[Inkscape]]></category>
		<category><![CDATA[LaTeX]]></category>

		<guid isPermaLink="false">http://www.timteatro.net/?p=552</guid>
		<description><![CDATA[Recent versions of Inkscape have functionality for creating math from LaTeX code, but its functionality is limited. If you want a more powerful system which creates an editable (and re-editable) latex object with support for loading custom packages and definitions, then you want  <a href="http://pav.iki.fi/software/textext/">TeXtext</a> [...]]]></description>
				<content:encoded><![CDATA[<p><img src="http://www.timteatro.net/wp-content/uploads/2010/08/textext_for_math_in_inkscape.png" alt="" title="textext_for_math_in_inkscape" width="200" height="240" class="alignleft size-full wp-image-554" />Recent versions of Inkscape have functionality for creating math from LaTeX code, but its functionality is limited. If you want a more powerful system which creates an editable (and re-editable) latex object with support for loading custom packages and definitions, then you want  <a href="http://pav.iki.fi/software/textext/">TeXtext</a>. See the screenshot below.</p>
<h3>Update:</h3>
<p>As of the new Inkscape 0.48, the LaTeX extension seems to work very well. I didn&#8217;t see anything that let me put in place a custom preamble, but you can load packages. So for most tasks, the packaged LaTeX extension that comes with Inkscape 0.48 works very well!</p>
<hr />
<br/></p>
<p>Installation is straightforward. You&#8217;ll need to have a TeX distribution installed. I usually have the full TeX Live metapackage from my distro. In the case of Ubuntu, it&#8217;s just<br />
<code><br />
sudo apt-get install texlive-full<br />
</code><br />
Now you can go through the business of installing TeXtext. Start by installing the dependencies, which are</p>
<ul>
<li>Pstoedit with its plot-svg back-end compiled in, or,</li>
<li>Pstoedit and Skconvert, or,</li>
<li>Pdf2svg (the one by David Barton &#038; Matthew Flaschen, not the one by PDFtron) and </li>
<li>lxml Python library</li>
</ul>
<p><div id="attachment_557" class="wp-caption alignright" style="width: 160px"><a href="http://www.timteatro.net/wp-content/uploads/2010/08/textext_screenshot.png"><img src="http://www.timteatro.net/wp-content/uploads/2010/08/textext_screenshot-150x150.png" alt="" title="textext_screenshot" width="150" height="150" class="size-thumbnail wp-image-557" /></a><p class="wp-caption-text">Screenshot of TeXtext in action.</p></div><br />
Again in Ubuntu, this can be done with<br />
<code><br />
sudo apt-get install pstoedit pdf2svg python-lxml<br />
</code><br />
I find that just having pstoedit doesn&#8217;t work, despite the fact that the plot-svg driver works fine. Now, <a href="http://pav.iki.fi/software/textext/">download</a> and extract the TeXtext files, and place them in <code>~/.config/inkscape/extensions/</code>.</p>
<p>To install under Windows, check out the instructions on the <a href="http://pav.iki.fi/software/textext/">TeXtext website</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.timteatro.net/2010/08/05/textext-for-math-in-inkscape/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Installing JessyInk</title>
		<link>http://www.timteatro.net/2010/07/31/installing-jessyink/</link>
		<comments>http://www.timteatro.net/2010/07/31/installing-jessyink/#comments</comments>
		<pubDate>Sat, 31 Jul 2010 04:26:37 +0000</pubDate>
		<dc:creator>Tim Teatro</dc:creator>
				<category><![CDATA[Software & FOSS]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Inkscape]]></category>
		<category><![CDATA[JessyInk]]></category>
		<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">http://www.timteatro.net/?p=497</guid>
		<description><![CDATA[Although JessyInk is to be included in the next release of Inkscpae, users who wish to try it now, or will wish to upgrade JessyInk later, may find value in this tutorial. I'll be posting tutorials for using JessyInk soon.]]></description>
				<content:encoded><![CDATA[<p><img src="http://www.timteatro.net/wp-content/uploads/2010/07/installing_JessyInk.jpg" alt="Installing JessyInk" title="installing_JessyInk" width="200" height="240" class="alignright size-full wp-image-514" />Although JessyInk is to be included in the next release of Inkscpae, users who wish to try it now, or will wish to upgrade JessyInk later, may find value in this tutorial. I&#8217;ll be posting tutorials for using JessyInk soon.</p>
<p>JessyInk installs like any Inkscape plug-in. The specifics will depend on your platform. In this article, I&#8217;ll give brief installation instructions for Ubuntu, general Linux and Windows. If any Mac users would like to send me some instructions, I&#8217;d be happy to include those too. To proceed, you will need to have already installed Inkscape. If you haven&#8217;t, then consult your distributions&#8217;s package manager or <a href="http://www.inkscape.org/download/" target="_blank">click here</a> to go to the Inkscape download page.</p>
<h2>Installing JessyInk under Linux</h2>
<p>You can install the files under your home directory or in the system&#8217;s Inscape extensions folder. Unless you want to have the plug-in generally available to multiple users, I recommend you install them in your home directory. If you&#8217;re using Ubuntu, then the PPA is probably the way you want to go.</p>
<h3>Home directory installation (Recommended)</h3>
<ol>
<li>Extract JessyInk archive.</li>
<li>Check, the archive should contain a directory called <em>inkscapeExtensions/</em> that contains many files with extensions <em>.py</em>, <em>.js</em> and <em>.inx</em>.</li>
<li>Place the entire contents of the <em>inkscapeExtensions</em> directory into <em>~/.config/inkscape/extensions</em>. Be sure to copy the contents, not the entire directory.</li>
<li> Start Inkscape to confirm that you now have a JessyInk entry under the <em>Extensions</em> menu.</li>
<li>Fin.</li>
</ol>
<h3>Ubuntu Deb/PPA (Recommended for Ubuntu users)</h3>
<p>In Ubuntu (9.10 and later) simply add the PPA be entering the following lines into a terminal prompt:</p>
<pre class="brush: plain; title: ; notranslate">
sudo add-apt-repository ppa:jessyink-team/ppa
sudo apt-get update
sudo apt-get install jessyink
</pre>
<p>or add the folowing lines to your <em>sources.list</em> file, being careful to add your Ubuntu version where specified:</p>
<pre class="brush: plain; title: ; notranslate">
deb http://ppa.launchpad.net/jessyink-team/ppa/ubuntu YOUR_UBUNTU_VERSION_HERE main 
deb-src http://ppa.launchpad.net/jessyink-team/ppa/ubuntu YOUR_UBUNTU_VERSION_HERE main
</pre>
<p>If you&#8217;re not down with PPAs, click <a href="https://launchpad.net/~jessyink-team/+archive/ppa/+packages">here to download a JessyInk Debian package (.deb) for Ubuntu</a>.</p>
<h3>System wide installation</h3>
<ol>
<li>Extract JessyInk archive.</li>
<li>Check, the archive should contain a directory called <em>inkscapeExtensions/</em> that contains many files with extensions <em>.py</em>, <em>.js</em> and <em>.inx</em>.</li>
<li>Place the entire contents of the <em>inkscapeExtensions</em> directory into <em>/usr/share/inkscape/extensions</em>. Be sure to copy the contents, not the entire directory.</li>
<li>In a terminal,
<pre class="brush: plain; title: ; notranslate">
cd /usr/share/inkscape/extensions
sudo chown root:root *
sudo chmod a+rx jessy*.py jessy*.js
sudo chmod a+r jessy*inx
</pre>
</li>
<li> Start Inkscape to confirm that you now have a JessyInk entry under the <em>Extensions</em> menu.</li>
<li>Fin.</li>
</ol>
<h2>Installing JessyInk under Windows 7 and Windows XP</h2>
<p>Under Windows, the installation is straightforward.</p>
<ol>
<li>Extract JessyInk archive.</li>
<li>Check, the archive should contain a directory called <em>inkscapeExtensions/</em> that contains many files with extensions <em>.py</em>, <em>.js</em> and <em>.inx</em>.</li>
<li>Place the entire contents of the <em>inkscapeExtensions</em> directory into <em>c:\users\USERNAME\Application Data\inkscape\extensions</em>, being careful to substitute your user name for USERNAME. Be sure to copy the contents, not the entire directory.</li>
<li> Start Inkscape to confirm that you now have a JessyInk entry under the <em>Extensions</em> menu.</li>
<li>Fin.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.timteatro.net/2010/07/31/installing-jessyink/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
