<?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"
	>

<channel>
	<title>Arthur Koziel's Blog</title>
	<atom:link href="http://arthurkoziel.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://arthurkoziel.com</link>
	<description>A fresh supply of thoughts about Web Development &#38; Mac OS X</description>
	<pubDate>Thu, 03 Jul 2008 13:36:22 +0000</pubDate>
	
	<language>en</language>
			<item>
		<title>yml2tex presentation from UAS Dortmund</title>
		<link>http://arthurkoziel.com/2008/07/03/yml2tex-presentation-from-uas-dortmund/</link>
		<comments>http://arthurkoziel.com/2008/07/03/yml2tex-presentation-from-uas-dortmund/#comments</comments>
		<pubDate>Thu, 03 Jul 2008 13:11:46 +0000</pubDate>
		<dc:creator>Arthur Koziel</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[latex]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[yaml]]></category>

		<category><![CDATA[yml2tex]]></category>

		<guid isPermaLink="false">http://arthurkoziel.com/?p=96</guid>
		<description><![CDATA[I had the chance to give a small talk at the UAS Dortmund ...]]></description>
			<content:encoded><![CDATA[<p>I had the chance to give a small talk at the UAS Dortmund and introduce the <a href="http://arthurkoziel.com/2008/06/23/latex-beamer-presentations-from-yaml-files/">yml2tex Python script to generate LaTeX Beamer presentations out of YAML files</a>.</p>
<p>Although the presentation is in German, I think it might help to better understand the syntax by seeing a practical example.</p>
<p>The whole presentation with all the files needed to generate it can be <a href='http://arthurkoziel.com/wp-content/uploads/2008/07/27-06-08_yml2tex_uas_dortmund.zip'>downloaded in a ZIP file</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://arthurkoziel.com/2008/07/03/yml2tex-presentation-from-uas-dortmund/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PyFlakes installation and TextMate integration</title>
		<link>http://arthurkoziel.com/2008/06/28/pyflakes-installation-and-textmate-integration/</link>
		<comments>http://arthurkoziel.com/2008/06/28/pyflakes-installation-and-textmate-integration/#comments</comments>
		<pubDate>Sat, 28 Jun 2008 17:12:15 +0000</pubDate>
		<dc:creator>Arthur Koziel</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[how to]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[textmate]]></category>

		<guid isPermaLink="false">http://arthurkoziel.com/?p=94</guid>
		<description><![CDATA[PyFlakes is a tool to identify common mistakes in Python source-code. This includes:

Redefined ...]]></description>
			<content:encoded><![CDATA[<p><a href="http://divmod.org/trac/wiki/DivmodPyflakes">PyFlakes</a> is a tool to identify common mistakes in Python source-code. This includes:</p>
<ul>
<li>Redefined functions</li>
<li>Shadowed variables</li>
<li>Unused and undefined names</li>
<li>Unused or missing imports</li>
<li>Variables referenced before assignment</li>
</ul>
<h3>Installation</h3>
<p>Because of a few <a href="ttp://divmod.org/trac/log/trunk/Pyflakes">noteable fixes</a> over the latest stable release (0.2.1) from October 2005, I&#8217;m going to describe how to install the latest trunk from the Subversion repository.</p>
<p>The first thing we&#8217;re going to do is a checkout in a directory called <em>pyflakes</em>:</p>
<div class="highlight">
<pre>svn co http://divmod.org/svn/Divmod/trunk/Pyflakes pyflakes
</pre>
</div>
<p>After that, we create the symbolic links to the Python site-packages directory and a binary path (here: <em>/usr/local/bin</em>).</p>
<div class="highlight">
<pre>ln -s <span class="sb">`</span><span class="nb">pwd</span><span class="sb">`</span>/pyflakes/pyflakes SITE-PACKAGES-DIR/pyflakes
ln -s <span class="sb">`</span><span class="nb">pwd</span><span class="sb">`</span>/bin/pyflakes /usr/local/bin
</pre>
</div>
<p>The Python site-packages directory can be found by invoking the following command:</p>
<div class="highlight">
<pre>python -c <span class="s2">&quot;from distutils.sysconfig import get_python_lib; print get_python_lib()&quot;</span>
</pre>
</div>
<h3>TextMate integration</h3>
<p>The Python bundle for <a href="http://macromates.com/">TextMate</a> includes the PyCheckMate script which has support for <a href="http://pychecker.sourceforge.net/">PyChecker</a>, <a href="http://www.logilab.org/857">PyLint</a> and PyFlakes. The bundle is installed in a default TextMate installation.<br />
<img src="http://arthurkoziel.com/wp-content/uploads/2008/06/pyflakes-mate.png" alt="" title="pyflakes-mate" width="500" height="142" class="alignnone size-full wp-image-95" /></p>
<p>PyCheckMate automatically checks for and chooses one of the supported programs mentioned above. To change this, we can modify the <em>TM_PYCHECKER</em> variable in <em>~/.bash_profile</em>:</p>
<div class="highlight">
<pre><span class="nb">export </span><span class="nv">TM_PYCHECKER</span><span class="o">=</span>pylint
</pre>
</div>
<p>The supported values are:</p>
<ul>
<li>builtin (also used when no other checker is installed, only performs a syntax-check)</li>
<li>pychecker</li>
<li>pylint</li>
<li>pyflakes</li>
</ul>
<p>Setting the variable is not needed when only PyFlakes is installed.</p>
<p>To perform the check in TextMate, go to <em>Bundles</em> -> <em>Python</em> -> <em>Validate Syntax (PyCheckMate)</em> or press the shortcut <em>Ctrl-Shift-V</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://arthurkoziel.com/2008/06/28/pyflakes-installation-and-textmate-integration/feed/</wfw:commentRss>
		</item>
		<item>
		<title>LaTeX Beamer presentations from YAML files</title>
		<link>http://arthurkoziel.com/2008/06/23/latex-beamer-presentations-from-yaml-files/</link>
		<comments>http://arthurkoziel.com/2008/06/23/latex-beamer-presentations-from-yaml-files/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 19:47:02 +0000</pubDate>
		<dc:creator>Arthur Koziel</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[latex]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[yaml]]></category>

		<category><![CDATA[yml2tex]]></category>

		<guid isPermaLink="false">http://arthurkoziel.com/?p=87</guid>
		<description><![CDATA[yml2tex is a Python script which will generate a LaTeX Beamer presentation out ...]]></description>
			<content:encoded><![CDATA[<p>yml2tex is a Python script which will generate a <a href="http://latex-beamer.sourceforge.net/">LaTeX Beamer</a> presentation out of a <a href="http://yaml.org/">YAML</a> file. You can <a href="http://arthurkoziel.com/wp-content/uploads/2008/06/yml2texpy.zip">download the script here</a>.</p>
<p>The initial idea came from <a href="http://www.zedshaw.com/">Zed Shaw</a> who wrote a similar script for his RuPy 2008 presentation and published it on his blog.</p>
<h3>Why?</h3>
<p>I&#8217;ve done presentations with LaTeX Beamer in the past, but always had a hard time remembering the <a href="http://www.latex-project.org/">LaTeX</a> syntax for things like adding a table of contents, displaying the current frame number in the footer or adding an itemized list which highlights the current element.</p>
<p>The only thing I always remembered was the basic structure of LaTeX Beamer presentations (sections, subsections, frames) — and that&#8217;s where YAML, with its hierarchical structure, comes into play. You don&#8217;t have to remember the LaTeX commands for creating a presentation, just the basic structure.</p>
<h3>Features</h3>
<p>The purpose of this script is to generate a presentation which mainly includes (nested) itemized lists. It is also possible to make a frame with an image in it and a frame which includes highlighted source code (with help from <a href="http://www.zedshaw.com/projects/idiopidae/">Idiopidae</a>).</p>
<p>The YAML hierarchy is perfect for the features mentioned above, but not for most of the other commands LaTeX Beamer has to offer. For example, trying to <a href="http://happymutant.com/latex/misce/beamer.php#columns">create columns</a> in a frame would be hard to realize and only complicate the YAML syntax.</p>
<h3>Syntax</h3>
<p>In order to generate a presentation, the script requires the YAML file to have the following syntax:</p>
<div class="highlight">
<pre>- section:
  - subsection:
    - frame:
      - item
      - item
      - item</pre>
</div>
<p>(The dashes are necessary to parse an item into a List instead of a Dictionary in Python. Dictionaries have no concept of order among elements — the presentation would be completely unordered.)</p>
<p>The items in each frame can also be nested:</p>
<div class="highlight">
<pre>- section:
  - subsection:
    - frame:
      - item
      - item:
        - item
        - item
      - item</pre>
</div>
<p>Note that LaTeX Beamer limits the maximum depth of nested items to 3.</p>
<h4>Images</h4>
<p>To create a frame with an image in it, the title needs to start with the &#8220;<em>image</em>&#8221; keyword and define the image path after it. The following example will create a frame and include the &#8220;<em>foobar.png</em>&#8221; image.</p>
<div class="highlight">
<pre>- section:
  - subsection:
    - image foobar.png:
    - frame:
      - item
      - item
      - item</pre>
</div>
<p>Images are automatically shrunk to the size of the frame.</p>
<h4>Syntax Highlighting</h4>
<p><img src="http://arthurkoziel.com/wp-content/uploads/2008/06/picture-2.png" alt="" title="picture-2" width="500" height="344"><br />
yml2tex will create a placeholder/marker for <a href="http://www.zedshaw.com/projects/idiopidae/">Idiopidae</a> whenever it finds a frame which starts with the &#8220;<em>include</em>&#8221; keyword and is followed by the path of the file which should be included.</p>
<div class="highlight">
<pre>- section:
  - subsection:
    - include foobar.c:
    - frame:
      - item
      - item
      - item</pre>
</div>
<p>Remember to run your generated LaTeX file through <a href="http://www.zedshaw.com/projects/idiopidae/">Idiopidae</a> to actually include and highlight the source code:</p>
<div class="highlight">
<pre>idio out.tex &gt; out_idio.tex</pre>
</div>
<h3>Generating the presentation</h3>
<p>The first parameter needs to be the path to the YAML file. The output will be printed to stdout.</p>
<div class="highlight">
<pre>./yml2tex.py input.yml &gt; output.tex</pre>
</div>
<p>After generating the LaTeX syntax, you can build the presentation by executing the <em>pdflatex</em> command:</p>
<div class="highlight">
<pre>pdflatex output.tex</pre>
</div>
<h3>Default Style &amp; Added Elements</h3>
<p>The default style was taken from <a href="http://faq.ktug.or.kr/wiki/uploads/beamer_guide.pdf">Ki-Joo Kim&#8217;s Beamer v3.0 Guide</a>. The script will also:</p>
<ul>
<li>Set UTF-8 as the default encoding.</li>
<li>Highlight the current item in a itemized list.</li>
<li>Add a title slide.</li>
<li>Add a TOC after the title slide.</li>
<li>Add a TOC before each section with the current section highlighted.</li>
<li>Display the current and total frame count at the bottom of each slide.</li>
<li>Include the necessary packages and commands for <a href="http://pygments.org/">Pygments</a> &#8220;<em>colorful</em>&#8221; style.</li>
</ul>
<p>You can <a href="http://arthurkoziel.com/wp-content/uploads/2008/06/release_idio.pdf">download a demonstration pdf of a generated presentation</a> (and/or <a href="http://arthurkoziel.com/wp-content/uploads/2008/06/presentation.zip">download the source code</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://arthurkoziel.com/2008/06/23/latex-beamer-presentations-from-yaml-files/feed/</wfw:commentRss>
		</item>
		<item>
		<title>About the Redesign</title>
		<link>http://arthurkoziel.com/2008/06/17/about-the-redesign/</link>
		<comments>http://arthurkoziel.com/2008/06/17/about-the-redesign/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 11:43:20 +0000</pubDate>
		<dc:creator>Arthur Koziel</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[design]]></category>

		<category><![CDATA[meta]]></category>

		<guid isPermaLink="false">http://arthurkoziel.com/?p=85</guid>
		<description><![CDATA[As you might have noticed, arthurkoziel.com got a complete redesign.
One thing that has ...]]></description>
			<content:encoded><![CDATA[<p>As you might have noticed, arthurkoziel.com got a complete redesign.</p>
<p>One thing that has always bothered me with the old layout was its boring, black &amp; white only, look. I wanted a colorful but still minimal and clean layout and think that the new design does exactly that.</p>
<p>It&#8217;s the first time I&#8217;ve played around with grid-based layouts. After reading a few articles about it and looking at various CSS frameworks (like <a href="http://developer.yahoo.com/yui/grids/">YUI</a> or <a href="http://960.gs/">960</a>) I&#8217;ve settled with <a href="http://code.google.com/p/blueprintcss/">Blueprint</a> and am very impressed by it so far. Beside setting the layout grid, it also applies typographic enhancements such as a vertical baseline grid (as <a href="http://www.alistapart.com/articles/settingtypeontheweb">described by Wilson Miner on ALA</a>).</p>
<p>As for new features, the most noticeable is probably the bookmarks sidebar which pulls its content from my del.icio.us account. Finding similar content was pretty hard on the old site since it didn&#8217;t display any tags or categories. That has changed, tags are now displayed at the bottom of each post and linked to a tag-based archive.</p>
<p>Unfortunately, the website is still based on Wordpress and hosted at DreamHost. It&#8217;s okay for now, but as soon as my DreamHost account expires I&#8217;m going to switch to a Django-based solution and deploy it on a better web host.</p>
]]></content:encoded>
			<wfw:commentRss>http://arthurkoziel.com/2008/06/17/about-the-redesign/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to: GnuPG for Mail.app in Leopard</title>
		<link>http://arthurkoziel.com/2008/06/10/how-to-gnupg-for-mailapp-in-leopard/</link>
		<comments>http://arthurkoziel.com/2008/06/10/how-to-gnupg-for-mailapp-in-leopard/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 11:03:05 +0000</pubDate>
		<dc:creator>Arthur Koziel</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[gpg]]></category>

		<category><![CDATA[osx]]></category>

		<guid isPermaLink="false">http://arthurkoziel.com/?p=78</guid>
		<description><![CDATA[While recently trying to install and configure GnuPG for Mail.app under Mac OS ...]]></description>
			<content:encoded><![CDATA[<p>While recently trying to install and configure GnuPG for Mail.app under Mac OS X 10.5.3, I came across a few issues which unfortunately took a lot more time than expected.</p>
<p>I installed GnuPG through <a href="http://www.macports.org">MacPorts</a>. However, with <a href="http://macgpg.sourceforge.net">MacGPG</a> there&#8217;s a simpler but also more outdated solution available. You can also give a more recent <a href="http://www.py-soft.co.uk/~benjamin/download/mac-gpg">MacGPG test-release</a> a try.</p>
<h3>GnuPG</h3>
<p>The GnuPG installation via MacPorts is pretty straightforward:</p>
<div class="highlight">
<pre>sudo port install gnupg2</pre>
</div>
<h3>Pinentry</h3>
<p>A problem with the MacPorts bundled <a href="http://www.gnupg.org/related_software/pinentry/">pinentry</a> is causing it not to display any password dialog when encrypting an email. The solution is to use a patched version which can be downloaded <a href="http://www.py-soft.co.uk/~benjamin/download/mac-gpg/pinentry-mac.0.02-1.zip">here</a>.</p>
<p>After unzipping, the <em>pinentry-mac</em> application needs to be moved or copied to the <em>/Applications</em> directory:</p>
<div class="highlight">
<pre>mv pinentry-mac.app /Applications/</pre>
</div>
<p>The gpg-agent configuration file (<em>~/.gnupg/gpg-agent.conf</em>) must to be modified in order to use the new <em>pinentry-mac</em>:</p>
<div class="highlight">
<pre>pinentry-program /Applications/pinentry-mac.app/Contents/MacOS/pinentry-mac</pre>
</div>
<p>To reload the configuration, gpg-agent needs to be restarted:</p>
<div class="highlight">
<pre>killall gpg-agent
gpg-agent --daemon</pre>
</div>
<h3>GPGMail</h3>
<p>The latest GPGMail plugin beta for Leopard&#8217;s Mail.app can be found <a href="http://www.sente.ch/software/GPGMail/English.lproj/GPGMail.html">here</a>.</p>
<p>To make use of custom bundles in Mail.app, it needs to be enabled first:</p>
<div class="highlight">
<pre>defaults write com.apple.mail EnableBundles -bool yes
defaults write com.apple.mail BundleCompatibilityVersion -int 3</pre>
</div>
<p>A &#8220;<em>Bundles</em>&#8221; directory must be created in <em>~/Library/Mail/</em> and the <em>.mailbundle</em> file from the mounted GPGMail dmg needs to be copied there:</p>
<div class="highlight">
<pre>mkdir ~/Library/Mail/Bundles
cp -r /Volumes/GPGMail_d53_Leopard/GPGMail.mailbundle ~/Library/Mail/Bundles/</pre>
</div>
<p>Upon a restart of Mail.app, a notification should display a small warning about missing keys. The <a href="https://help.ubuntu.com/community/GnuPrivacyGuardHowto#head-ac9f3c8c534ef1d05a29738b4c201a59f649fa07">GPG Howto from the ubuntu documentation</a> describes the process of generating keys pretty well.</p>
<p><img class="aligncenter size-full wp-image-79" title="gpgmailapp" src="http://arthurkoziel.com/wp-content/uploads/2008/06/gpgmailapp.png" alt="" width="500" height="416" /></p>
<p>That&#8217;s it, i hope this guide was helpful to some people. You can find my current public key <a href="http://arthurkoziel.com/gpgkey.asc">here</a>. or download it from a keyserver like the <a href="http://pgp.mit.edu:11371/pks/lookup?search=0x83ABBBE7&amp;op=index">MIT&#8217;s Public Key Server</a> (0&#215;83ABBBE7).</p>
]]></content:encoded>
			<wfw:commentRss>http://arthurkoziel.com/2008/06/10/how-to-gnupg-for-mailapp-in-leopard/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to: LaTeX Beamer for TeX Live on OS X</title>
		<link>http://arthurkoziel.com/2008/06/02/how-to-install-latex-beamer-for-tex-live-on-mac-os-x/</link>
		<comments>http://arthurkoziel.com/2008/06/02/how-to-install-latex-beamer-for-tex-live-on-mac-os-x/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 14:25:10 +0000</pubDate>
		<dc:creator>Arthur Koziel</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[bash script]]></category>

		<category><![CDATA[latex]]></category>

		<category><![CDATA[osx]]></category>

		<guid isPermaLink="false">http://arthurkoziel.com/?p=70</guid>
		<description><![CDATA[Here you&#8217;ll find instructions to install LaTeX Beamer on a TeX Live system, ...]]></description>
			<content:encoded><![CDATA[<p>Here you&#8217;ll find instructions to install <a href="http://latex-beamer.sourceforge.net/">LaTeX Beamer</a> on a TeX Live system, which was installed via <a href="http://www.macports.org/">MacPorts</a> (but should also work on other installations if you adjust the TEXMF path).</p>
<p>If you don&#8217;t want to follow the whole instruction, be sure to check out the <a href="#bash-script">Bash script</a>, which installs LaTeX Beamer for you, at the end of this post.</p>
<h3>Installation</h3>
<p>First we need to download LaTeX Beamer and it&#8217;s required dependencies (xcolor and pgf). The files can be downloaded on the <a href="https://sourceforge.net/project/showfiles.php?group_id=92412">corresponding website at SourceForge</a> or via these direct links:</p>
<ul>
<li><a href="http://surfnet.dl.sourceforge.net/sourceforge/latex-beamer/latex-beamer-3.07.tar.gz">latex-beamer</a></li>
<li><a href="http://mesh.dl.sourceforge.net/sourceforge/latex-beamer/xcolor-2.00.tar.gz">xcolor</a></li>
<li><a href="http://switch.dl.sourceforge.net/sourceforge/latex-beamer/pgf-1.01.tar.gz">pgf</a></li>
</ul>
<p>Upon completion of the download the files need to be extracted:</p>
<div class="highlight">
<pre>tar xvzf latex-beamer-3.07.tar.gz
tar xzvf xcolor-2.00.tar.gz
tar xvzf pgf-1.01.tar.gz</pre>
</div>
<p>The <a href="http://www.tug.org/twg/tds/">TeX directory structure</a> has a specific hierarchy (the TEXMF tree) and various locations where it looks for its files. The default TEXMF tree on a MacPorts TeX Live installation is located at /opt/local/share/texmf/.</p>
<p>To make use of the packages, we need to create the appropriate directories in the TEXMF tree, and place the previously extracted files there:</p>
<div class="highlight">
<pre>sudo mkdir -p /opt/local/share/texmf/tex/latex/<span class="o">{</span>beamer,pgf,xcolor<span class="o">}</span>

sudo mv latex-beamer-3.07/* /opt/local/share/texmf/tex/latex/beamer/
sudo mv pgf-1.01/* /opt/local/share/texmf/tex/latex/pgf/
sudo mv xcolor/* /opt/local/share/texmf/tex/latex/xcolor/</pre>
</div>
<p>TeX does not recognize these new files right away since it uses a cache (the ls-R database) for efficiency reasons. The following command rebuilds the ls-R database:</p>
<div class="highlight">
<pre>sudo texhash</pre>
</div>
<p><img class="aligncenter size-full wp-image-75" title="texhash" src="http://arthurkoziel.com/wp-content/uploads/2008/06/texhash.png" alt="" width="495" height="210" /></p>
<h3>Testing</h3>
<p>We can copy&amp;paste the example from the <a href="http://latex-beamer.sourceforge.net/">LaTeX Beamer website</a> into a newly created file and compile it in order to test the installation:</p>
<div class="highlight">
<pre>pdflatex filename.tex</pre>
</div>
<p>This should, among various other file formats, create the presentation in the pdf format (filename.pdf).</p>
<h3 id="bash-script">Bash script</h3>
<p>Following a installation instruction step-by-step can be a very time-consuming task. But since I&#8217;m a huge fan of automating tasks, I wrote a small Bash script which basically performs all the steps mentioned above. (Note: You&#8217;ll need to have wget installed.)</p>
<p><a href="http://arthurkoziel.com/wp-content/uploads/2008/06/latexbeamer_texlive.sh">Download the Bash script here</a></p>
<p>Don&#8217;t forget to make the file executeable:</p>
<div class="highlight">
<pre>chmod u+x latexbeamer_texlive.sh</pre>
</div>
<p>That&#8217;s it. I hope the Bash script will be useful for some people.</p>
<p>For further information on the TeX system, I recommend reading <a href="http://www.ctan.org/installationadvice">Managing a one-person TeX system</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://arthurkoziel.com/2008/06/02/how-to-install-latex-beamer-for-tex-live-on-mac-os-x/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Book Recommendations</title>
		<link>http://arthurkoziel.com/2008/05/17/book-recommendations/</link>
		<comments>http://arthurkoziel.com/2008/05/17/book-recommendations/#comments</comments>
		<pubDate>Sat, 17 May 2008 20:20:00 +0000</pubDate>
		<dc:creator>Arthur Koziel</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[books]]></category>

		<guid isPermaLink="false">http://arthurkoziel.com/?p=69</guid>
		<description><![CDATA[
I just put the Book Recommendations section online, feel free to check it out. I&#8217;ll ...]]></description>
			<content:encoded><![CDATA[<div>
<p>I just put the <a href="http://arthurkoziel.com/book-recommendations/">Book Recommendations</a> section online, feel free to check it out. I&#8217;ll try to keep it up-do-date.</p>
<p>My current <em>to read</em> list consists of the following books:</p>
<ul>
<li><a href="http://www.amazon.com/Design-Everyday-Things-Don-Norman/dp/0465067107">The Design of Everyday Things</a></li>
<li><a href="http://www.amazon.de/Habits-Highly-Effective-People-Powerful/dp/0743269519">The 7 Habits of Highly Effective People</a></li>
<li><a href="http://www.amazon.de/Mythical-Man-Month-Software-Engineering/dp/0201835959">The Mythical Man Month: Essays on Software Engineering</a></li>
<li><a href="http://www.amazon.de/Managing-Humans-Humorous-Software-Engineering/dp/159059844X">Managing Humans: Biting and Humorous Tales of a Software Engineering Manager</a></li>
<li><a href="http://www.amazon.com/Ready-Fire-Aim-Million-Agora/dp/0470182024">Ready, Fire, Aim: Zero to $100 Million in No Time Flat</a></li>
</ul>
<p>Other book recommendations are always welcome.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://arthurkoziel.com/2008/05/17/book-recommendations/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Secure/bullet proof cookies</title>
		<link>http://arthurkoziel.com/2008/05/17/securebullet-proof-cookies/</link>
		<comments>http://arthurkoziel.com/2008/05/17/securebullet-proof-cookies/#comments</comments>
		<pubDate>Sat, 17 May 2008 14:08:17 +0000</pubDate>
		<dc:creator>Arthur Koziel</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[cookies]]></category>

		<guid isPermaLink="false">http://arthurkoziel.com/?p=52</guid>
		<description><![CDATA[There seems to be a discussion about bullet proof cookies lately and I&#8217;m ...]]></description>
			<content:encoded><![CDATA[<p>There seems to be a <a href="http://blog.fourspaces.com/2008/05/14/bullet-proof-cookies-why-bother/">discussion</a> about <a href="http://www.codeproject.com/KB/aspnet/BulletProofCookies.aspx">bullet proof cookies</a> lately and I&#8217;m quite surprised that most web developers haven&#8217;t read the excellent &#8220;<a href="http://www.cse.msu.edu/~alexliu/publications/Cookie/cookie.pdf">A Secure Cookie Protocol</a>&#8221; research paper from Alex X. Liu.</p>
<p>Here&#8217;s a short summary of what services a bullet proof cookie should provide:</p>
<ul>
<li><strong>Authentication</strong><br />
    Verify that the client has been authenticated within a certain time period.</li>
<li>
    	<strong>Confidentiality</strong></p>
<ul>
<li>
    	        <strong>Low-level</strong><br />
                Prevent any parties except the user and the server from reading the cookie data.
            </li>
<li>
    	        <strong>High-level</strong><br />
                Prevent any parties except the server from reading the cookie data.
            </li>
</ul>
</li>
<li><strong>Integrity</strong><br />
    The server should be able to detect if a cookie has been modified.</li>
<li><strong>Anti-Replay</strong><br />
    Stolen cookies should be detected as invalid.</li>
</ul>
<h3>Confidentiality</h3>
<p>In my opinion, high-level confidentiality is unnecessary. I think Marcus R. Breese describes this best <a href="http://blog.fourspaces.com/2008/05/14/bullet-proof-cookies-why-bother/">in his blog</a>:</p>
<blockquote><p>&#8220;Specifically, my rule of thumb is that if you don’t want a client to know<br />
the data, don&#8217;t send it to them.&#8221;</p></blockquote>
<p>I totally agree with him and further think that cookies should be used for<br />
authentication only, and that the data should be stored in the database.</p>
<h3>Example: Wordpress</h3>
<p>Wordpress 2.5 introduced a similar structure for its cookies as the one proposed in the research paper. In Wordpress 2.5 cookies have the following structure:</p>
<div class="highlight">
<pre>user name|expiration time|HMAC(user name|expiration time, k)
where k=HMAC(user name|expiration time, sk)
and sk=secret server key</pre>
</div>
<p>Therefore a normal Wordpress cookie looks like this:</p>
<div class="highlight">
<pre>admin|1212093864|82436be3x303xaddd6fd31db338770a6</pre>
</div>
<p>There are two points which are different from the originally proposed cookie protocol from Alex X. Liu.</p>
<p>The first one is that there&#8217;s no data attached to this cookie - it&#8217;s only used to authenticate the user. The second one is that there&#8217;s no SSL session key attached.</p>
<p>Removing the SSL session key was not a good (vulnerable to replay attacks) but necessary choice since most Wordpress installations run on non-SSL hosts.</p>
]]></content:encoded>
			<wfw:commentRss>http://arthurkoziel.com/2008/05/17/securebullet-proof-cookies/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Secure authentication cookies with Django</title>
		<link>http://arthurkoziel.com/2008/05/15/secure-authentication-cookies-with-django/</link>
		<comments>http://arthurkoziel.com/2008/05/15/secure-authentication-cookies-with-django/#comments</comments>
		<pubDate>Thu, 15 May 2008 16:03:52 +0000</pubDate>
		<dc:creator>Arthur Koziel</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[cookies]]></category>

		<category><![CDATA[django]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://arthurkoziel.com/?p=47</guid>
		<description><![CDATA[Some time ago Alex X. Liu published a research paper on secure cookie ...]]></description>
			<content:encoded><![CDATA[<p>Some time ago <a href="http://www.cse.msu.edu/~alexliu/home.html">Alex X. Liu</a> published a research paper on <a href="http://www.cse.msu.edu/~alexliu/publications/Cookie/cookie.pdf">secure cookie protocols</a>. I tried to implement the protocol in Python, but sadly had to remove some fields from the protocol. You can <a href="http://arthurkoziel.com/wp-content/uploads/2008/05/authcookie.zip">download it here</a>.</p>
<h3>Changes</h3>
<p>This is the original protocol:</p>
<div class="highlight">
<pre>user name|expiration time|(data)k|HMAC(user name|expiration time|data|session key, k)
where k=HMAC(user name|expiration time, sk)
and sk=secret server key</pre>
</div>
<p>I removed <em>(data)k</em> and <em>session key</em>, which changes the protocol to:</p>
<div class="highlight">
<pre>user name|expiration time|HMAC(user name|expiration time, k)
where k=HMAC(user name|expiration time, sk)
and sk=secret server key</pre>
</div>
<p>The data field was removed because I couldn&#8217;t find a good two way encryption library for Python, and the session key was removed due to the lack of SSL.</p>
<p>The new structure is similar to the one used for the authentication in the backend of the recently released <a href="http://trac.wordpress.org/ticket/5367">Wordpress 2.5</a>.</p>
<h3>Usage</h3>
<p>To create a cookie in Django, use the <em>set_cookie</em> method of the response object:</p>
<div class="highlight">
<pre><span class="n">cookie</span> <span class="o">=</span> <span class="n">myutils</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="s">&#8216;arthur&#8217;</span><span class="p">,</span> <span class="mf">1210708139</span><span class="p">)</span>

<span class="n">response</span> <span class="o">=</span> <span class="n">render_to_response</span><span class="p">(</span><span class="s">&#8216;index.html&#8217;</span><span class="p">)</span>
<span class="n">response</span><span class="o">.</span><span class="n">set_cookie</span><span class="p">(</span><span class="s">&#8216;mycookie&#8217;</span><span class="p">,</span> <span class="n">cookie</span><span class="p">)</span>

<span class="k">return</span> <span class="n">response</span></pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://arthurkoziel.com/2008/05/15/secure-authentication-cookies-with-django/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Download for improved sfDateValidator</title>
		<link>http://arthurkoziel.com/2008/05/07/improved-sfdatevalidator-for-symfony-10-new-download-link/</link>
		<comments>http://arthurkoziel.com/2008/05/07/improved-sfdatevalidator-for-symfony-10-new-download-link/#comments</comments>
		<pubDate>Wed, 07 May 2008 18:40:53 +0000</pubDate>
		<dc:creator>Arthur Koziel</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://arthurkoziel.com/?p=44</guid>
		<description><![CDATA[Sometime during last month, the server where my improved sfDateValidator for Symfony 1.0 ...]]></description>
			<content:encoded><![CDATA[<p>Sometime during last month, the server where my improved sfDateValidator for Symfony 1.0 was hosted went down. Although over a year passed since I wrote it, I&#8217;m quite pleased that there are still some people who are interested in it.</p>
<p>Of course there&#8217;s the <a href="http://trac.symfony-project.com/ticket/1665">ticket in Symfony&#8217;s Trac</a> with the files attached to it, but the attached php class is the wrong one. In order to use it, you had to apply the attached patch manually (which I guess caused some confusion).</p>
<p>However, I ran the unit test for the improved sfDateValidator against Symfony 1.0.14, and it still works very well. So, here&#8217;s the new download link:</p>
<p><a href="http://arthurkoziel.com/wp-content/uploads/2008/05/sfdatevalidator.zip">Download the improved sfDateValidator for Symfony 1.0</a></p>
<p>You might want to <a href="http://symfoniac.wordpress.com/2007/04/12/my-final-sfdatevalidator/">head over to the old post on Symfoniac</a> for a quick usage example.</p>
]]></content:encoded>
			<wfw:commentRss>http://arthurkoziel.com/2008/05/07/improved-sfdatevalidator-for-symfony-10-new-download-link/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Merging with git-pull</title>
		<link>http://arthurkoziel.com/2008/05/06/merging-with-git-pull/</link>
		<comments>http://arthurkoziel.com/2008/05/06/merging-with-git-pull/#comments</comments>
		<pubDate>Tue, 06 May 2008 11:40:23 +0000</pubDate>
		<dc:creator>Arthur Koziel</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://arthurkoziel.com/?p=40</guid>
		<description><![CDATA[The git-pull command is basically a shortcut for:

git-fetch &#38;&#38; git-merge origin

The fetch gets ...]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html">git-pull</a> command is basically a shortcut for:</p>
<div class="highlight">
<pre>git-fetch &amp;&amp; git-merge origin</pre>
</div>
<p>The fetch gets the changes from the remote repository, but does not merge them with your local checkout yet. You can examine these changes using <em>origin</em> as the reference, and merge them into your master branch.</p>
<p>The <a href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html">git-fetch</a> part is optional. You can pass . (current directory) to it and merge local branches.</p>
<div class="highlight">
<pre>git-pull . refactor
git-merge refactor</pre>
</div>
<p>Both commands will do the same: merge the refactor branch.</p>
]]></content:encoded>
			<wfw:commentRss>http://arthurkoziel.com/2008/05/06/merging-with-git-pull/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Git Configuration</title>
		<link>http://arthurkoziel.com/2008/05/02/git-configuration/</link>
		<comments>http://arthurkoziel.com/2008/05/02/git-configuration/#comments</comments>
		<pubDate>Fri, 02 May 2008 16:13:06 +0000</pubDate>
		<dc:creator>Arthur Koziel</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://arthurkoziel.com/?p=39</guid>
		<description><![CDATA[Here are some useful configuration options for Git. Some of them, like the ...]]></description>
			<content:encoded><![CDATA[<p>Here are some useful configuration options for <a href="http://git.or.cz/">Git</a>. Some of them, like the Bash completion, are OS X specific but should also work if you adjust the paths according to your system of choice.</p>
<p>Install with <a href="http://www.macports.org/">MacPorts</a>:</p>
<div class="highlight">
<pre>
sudo port install git-core +svn +bash_completion
</pre>
</div>
<p>Bash completion:</p>
<div class="highlight">
<pre>
cp /opt/local/etc/bash_completion.d/git ~/.git-bash-completion.sh
<span class="nb">echo</span> <span class="s2">&quot;[ -f ~/.git-bash-completion.sh ] &amp;&amp; . ~/.git-bash-completion.sh&quot;</span> >> ~/.bash_profile
. ~/.bash_profile
</pre>
</div>
<p>Global ignore file:</p>
<div class="highlight">
<pre>
<span class="nb">echo</span> <span class="s2">&quot;.DS_Store&quot;</span> >> ~/.gitignore
git config --global core.excludesfile ~/.gitignore
</pre>
</div>
<p>SVN-like shortcuts for often used commands:</p>
<div class="highlight">
<pre>
git config --global alias.st status
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.br branch
</pre>
</div>
<p>Information about the author/commiter:</p>
<div class="highlight">
<pre>
git config --global user.name <span class="s2">&quot;Your Name Comes Here&quot;</span>
git config --global user.email you@yourdomain.example.com
</pre>
</div>
<p>Colorized output:</p>
<div class="highlight">
<pre>
git config --global color.branch auto
git config --global color.diff auto
git config --global color.interactive auto
git config --global color.status auto
</pre>
</div>
<p>TextMate as the default editor:</p>
<div class="highlight">
<pre>
git config --global core.editor <span class="s2">&quot;mate -w&quot;</span>
</pre>
</div>
<p>Opendiff (FileMerge) to resolve merge conflicts:</p>
<div class="highlight">
<pre>
git config --global merge.tool opendiff
</pre>
</div>
<p>Change the font in gitk: Open <em>~/.gitk</em> and add:</p>
<div class="highlight">
<pre>
set mainfont {Monaco 12}
set textfont {Monaco 12}
set uifont {Monaco 12}
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://arthurkoziel.com/2008/05/02/git-configuration/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Install Django with Git</title>
		<link>http://arthurkoziel.com/2008/04/30/install-django-with-git/</link>
		<comments>http://arthurkoziel.com/2008/04/30/install-django-with-git/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 12:45:11 +0000</pubDate>
		<dc:creator>Arthur Koziel</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[bash script]]></category>

		<category><![CDATA[django]]></category>

		<category><![CDATA[git]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://arthurkoziel.com/?p=35</guid>
		<description><![CDATA[Although Brian Rosner did a very good Screencast on installing and using Git ...]]></description>
			<content:encoded><![CDATA[<p>Although Brian Rosner did a very good <a href="http://oebfare.com/blog/2008/jan/23/using-git-django-screencast/">Screencast on installing and using Git</a> with <a href="http://www.djangoproject.com/">Django</a>, there are sadly no Show Notes available. This makes installing Django from Git a quite time-consuming task, if you haven&#8217;t memorized the commands.</p>
<p>While writing down the commands for further use, I noticed that there&#8217;s a faster way than cloning the official SVN repository by using an unofficial Git mirror. Later on, I wrote a small Bash script to automate the Django-from-Git installation, which you can download below.</p>
<h3>Official SVN repository</h3>
<p>First, clone the repository with:</p>
<div class="highlight">
<pre>git svn clone -s http://code.djangoproject.com/svn/django django</pre>
</div>
<p>navigate to the <em>django</em> folder and run:</p>
<div class="highlight">
<pre>git gc</pre>
</div>
<p>to cleanup unnecessary files and optimize the local repository. Finally, reset the master branch to point to trunk:</p>
<div class="highlight">
<pre>git reset --hard trunk</pre>
</div>
<h3>Git mirror</h3>
<p>Instead of going thrugh the time-consuming task of cloning the official SVN repository, there&#8217;s an faster and easier way. <a href="http://spinlock.ch/blog/">Matthias Kestenholz</a> was so kind to set up a Git mirror for Django, which is updated hourly.</p>
<p>Just use the <em>git clone</em> command, as with any other Git repository:</p>
<div class="highlight">
<pre>git clone git://spinlock.ch/pub/git/django/django.git django.git</pre>
</div>
<h3>Bash script</h3>
<p>To save some time on the next &#8220;Django from Git&#8221; installation, I wrote a simple Bash script to automate this task.</p>
<p>The script will clone the unofficial Git mirror in a folder called <em>django.git</em> and create the necessary symbolic links to install Django: </p>
<ol>
<li><em>django</em> folder to the python <em>site-packages</em> directory.</li>
<li><em>django-admin.py</em> file to a directory on the system path (the script uses <em>/usr/bin</em>).</li>
</ol>
<p><a href="http://arthurkoziel.com/wp-content/uploads/2008/04/django-git-install.sh">Download django-git-install</a></p>
<p>After the download, you need to make the script executable:</p>
<div class="highlight">
<pre>chmod u+x django-git-install.sh</pre>
</div>
<p>The script expects the installation directory as the first parameter:</p>
<div class="highlight">
<pre>Usage: django-git-install.sh target-directory</pre>
</div>
<p>For example, to install Django into <em>/usr/lib/django.git</em>, execute:</p>
<div class="highlight">
<pre>sudo ./django-git-install.sh /usr/lib</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://arthurkoziel.com/2008/04/30/install-django-with-git/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Benchmark: MacBook with WD Scorpio hdd</title>
		<link>http://arthurkoziel.com/2008/04/22/benchmark-macbook-with-wd-scorpio-hdd/</link>
		<comments>http://arthurkoziel.com/2008/04/22/benchmark-macbook-with-wd-scorpio-hdd/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 06:07:27 +0000</pubDate>
		<dc:creator>Arthur Koziel</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[hardware]]></category>

		<category><![CDATA[macbook]]></category>

		<guid isPermaLink="false">http://arthurkoziel.com/?p=25</guid>
		<description><![CDATA[I recently upgraded my MacBook’s hard drive, the Seagate Momentus 5400.3 160GB (ST9160821AS), to ...]]></description>
			<content:encoded><![CDATA[<p>I recently upgraded my MacBook’s hard drive, the <a href="http://www.seagate.com/ww/v/index.jsp?locale=en-US&amp;name=momentus_5400.3_160_gb_sata_hard_drive&amp;vgnextoid=01b98fabfdd83110VgnVCM100000f5ee0a0aRCRD&amp;vgnextchannel=b450d3a0140fc010VgnVCM100000dd04090aRCRD&amp;reqPage=Model">Seagate Momentus 5400.3 160GB (ST9160821AS)</a>, to a <a href="http://www.wdc.com/en/products/products.asp?driveid=314&amp;language=en">Western Digital Scorpio 250GB (WD2500BEVS)</a> and did a quick benchmark to see how much performance would change over the old hard drive.</p>
<p>Listed below are the average scores of 6 XBench Memory Test runs.</p>
<h3>Benchmark</h3>
<p><img title="chart_seq_uw_4k" src="http://arthurkoziel.com/wp-content/uploads/2008/04/chart_seq_uw_4k.png" alt="" width="500" height="100"></p>
<p>Seagate Momentus: <strong>41.47 MB/sec</strong><br />
Western Digital Scorpio: <strong>55.51 MB/sec</strong></p>
<p><img title="chart_seq_uw_256k" src="http://arthurkoziel.com/wp-content/uploads/2008/04/chart_seq_uw_256k.png" alt="" width="500" height="100"></p>
<p>Seagate Momentus: <strong>38.66 MB/sec</strong><br />
Western Digital Scorpio: <strong>51.31 MB/sec</strong></p>
<p><img title="chart_seq_ur_4k" src="http://arthurkoziel.com/wp-content/uploads/2008/04/chart_seq_ur_4k.png" alt="" width="500" height="100"></p>
<p>Seagate Momentus: <strong>17.46 MB/sec</strong><br />
Western Digital Scorpio: <strong>13.59 MB/sec</strong></p>
<p><img title="chart_seq_ur_256k" src="http://arthurkoziel.com/wp-content/uploads/2008/04/chart_seq_ur_256k.png" alt="" width="500" height="100"></p>
<p>Seagate Momentus: <strong>38.87 MB/sec</strong><br />
Western Digital Scorpio: <strong>53.82 MB/sec</strong></p>
<p><img title="chart_r_uw_4k" src="http://arthurkoziel.com/wp-content/uploads/2008/04/chart_r_uw_4k.png" alt="" width="500" height="100"></p>
<p>Seagate Momentus: <strong>0.72 MB/sec</strong><br />
Western Digital Scorpio: <strong>1.88 MB/sec</strong></p>
<p><img title="chart_r_uw_256k" src="http://arthurkoziel.com/wp-content/uploads/2008/04/chart_r_uw_256k.png" alt="" width="500" height="100"></p>
<p>Seagate Momentus: <strong>20.81 MB/sec</strong><br />
Western Digital Scorpio: <strong>33.89 MB/sec</strong></p>
<p><img title="chart_r_ur_4k" src="http://arthurkoziel.com/wp-content/uploads/2008/04/chart_r_ur_4k.png" alt="" width="500" height="100"></p>
<p>Seagate Momentus: <strong>0.47 MB/sec</strong><br />
Western Digital Scorpio: <strong>0.50 MB/sec</strong></p>
<p><img title="chart_r_ur_256k" src="http://arthurkoziel.com/wp-content/uploads/2008/04/chart_r_ur_256k.png" alt="" width="500" height="100"></p>
<p>Seagate Momentus: <strong>16.87 MB/sec</strong><br />
Western Digital Scorpio: <strong>20.65 MB/sec</strong></p>
<h3>Temperature/Noise</h3>
<p>The temperature stayed the same, at 32°C. There was no noticeable increase in loudness with the new hard drive.</p>
<p>In the first moment I noticed that the WD Scorpio is vibrating a little more than the Seagate Momentus (the hard drive’s location is directly under the left hand). However, it became pretty normal after half-an-hour.</p>
<h3>Conclusion</h3>
<p>There was only one test (sequential uncached read with 4K blocks) where the WD Scorpio was slightly slower than the Seagate Momentus, but all the other tests show a massive improvement.</p>
<p>There were quite a few people told me that upgrading the MacBook&#8217;s default hard drive would definitely be worth it, but I never expected it to be so clear. All in all, I&#8217;m happy with the new hard drive.</p>
]]></content:encoded>
			<wfw:commentRss>http://arthurkoziel.com/2008/04/22/benchmark-macbook-with-wd-scorpio-hdd/feed/</wfw:commentRss>
		</item>
		<item>
		<title>RuPy 2008</title>
		<link>http://arthurkoziel.com/2008/04/16/rupy-2008/</link>
		<comments>http://arthurkoziel.com/2008/04/16/rupy-2008/#comments</comments>
		<pubDate>Wed, 16 Apr 2008 17:23:02 +0000</pubDate>
		<dc:creator>Arthur Koziel</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[conference]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://arthurkoziel.wordpress.com/?p=56</guid>
		<description><![CDATA[Last weekend I attended the RuPy (Ruby &#38; Python) conference in Poznan (Poland).
The program was splitted ...]]></description>
			<content:encoded><![CDATA[<p>Last weekend I attended the RuPy (<a href="http://www.ruby-lang.org/">Ruby</a> &amp; <a href="http://python.org/">Python)</a> conference in Poznan (Poland).</p>
<p>The program was splitted into simultaneously held Ruby and Python talks. For example: while the &#8220;TDD in Rails&#8221; talk in room A, a &#8220;TDD in Python&#8221; talk was held in room B. Language-independent talks, like &#8220;Business Natural Languages&#8221;, were held in one room.</p>
<h3>Talks</h3>
<p>I missed half of <a href="http://www.voidspace.org.uk/python/weblog/index.shtml">Micheal Foord&#8217;s</a> talk on &#8220;Programming the Browser with IronPython and Silverlight&#8221; due to my late arriving. However, the stuff which I saw gave me some nice insights into what <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython">IronPython</a> and <a href="http://silverlight.net/">Silverlight</a> are capable of.</p>
<p>Watching the adoption of Silverlight and development of <a href="http://www.mono-project.com/Moonlight">Moonlight</a> (Silverlight for linux) is quite interesting, especially since Microsoft made a deal to <a href="http://visitmix.com/blogs/News/477/">put Silverlight on the official Beijing Olympics website</a>. </p>
<p><a href="http://arthurkoziel.com/wp-content/uploads/2008/04/2418447486_58edeb0e00.jpg"><img title="2418447486_58edeb0e00" src="http://arthurkoziel.com/wp-content/uploads/2008/04/2418447486_58edeb0e00-155x117.jpg" alt="" width="155" height="117"></a><a href="http://arthurkoziel.com/wp-content/uploads/2008/04/2417630603_43987d4d44.jpg"><img title="2417630603_43987d4d44" src="http://arthurkoziel.com/wp-content/uploads/2008/04/2417630603_43987d4d44-155x117.jpg" alt="" width="155" height="117"></a></p>
<hr class="clear space">
(Photos taken by <a href="http://flickr.com/photos/ukasbadu">ukasbadu</a>, more photos are available on flickr under the <a href="http://flickr.com/photos/tags/rupy2008/">rupy2008 tag</a>)</p>
<p>The next talk by <a href="http://www.zedshaw.com/">Zed Shaw</a> about &#8220;Correlations and Conclusions&#8221; was really funny but also very informative<a href="http://arthurkoziel.com/wp-content/uploads/2008/04/2417630603_43987d4d44.jpg"></a>. He benchmarked <a href="http://mongrel.rubyforge.org/">Mongrel</a> against <a href="http://webpy.org/">web.py</a> and inserted the data into <a href="http://www.r-project.org/">R</a>. R seems like really nice tool for statistical data and once you get used to it&#8217;s weird syntax there are certainly a lot of things you can do with it.</p>
<p>What I didn&#8217;t know was that <a href="http://www.hpl.hp.com/research/linux/httperf/">httperf</a> is more superior to <a href="http://httpd.apache.org/docs/2.0/programs/ab.html">ab</a> and used for serious stuff, while ab is mostly okay for quick&#8217;n'dirty benchmarks.</p>
<p>The presentation itself was done using latex-beamer and generated out of a YAML file - a quite interesting concept which Zed Shaw is going to <a href="http://www.zedshaw.com/blog/index.html">describe further in his blog</a>.</p>
<p><a href="http://tartley.com/">Jonathan Hartley</a>, who works together with Micheal Foord at <a href="http://www.resolversystems.com/">Resolver Systems</a>, held a great talk about Test-driven development and shared his experiences over the past few years. A really interesting fact is the ratio of test code to product, which is 4:1 - meaning that there are four lines of test code for each line of product code.</p>
<p><a href="http://bnl.jayfields.com/">Business Natural Languages</a> (a Domain Specific Language for empowering subject matter experts) were presented by <a href="http://jayfields.com/">Jay Fields</a> from <a href="http://www.thoughtworks.com/">ThoughtWorks</a>. The whole point in a BNL is to allow the customer to change the applications behaviour without involving the developer. It&#8217;s definately worth a look for some bigger projects.</p>
<h3>Bottom line</h3>
<p>The organization was perfect and the choosen topics very interesting. The only negative thing was actually lunch, which was horrible (and not very warm).</p>
<p>However, it was a great conference which I can only highly recommend to everyone interested.</p>
]]></content:encoded>
			<wfw:commentRss>http://arthurkoziel.com/2008/04/16/rupy-2008/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.836 seconds -->
<!-- Cached page served by WP-Cache -->
