<?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>Ilya Boyandin</title>
	<atom:link href="http://blog.boyandi.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.boyandi.net</link>
	<description>notes about ui, web development, visualization. links, tips and tricks</description>
	<lastBuildDate>Sat, 30 Jul 2011 22:04:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Resolving geographical entities with Scala</title>
		<link>http://blog.boyandi.net/2010/06/17/resolving-geographical-entities-with-scala/</link>
		<comments>http://blog.boyandi.net/2010/06/17/resolving-geographical-entities-with-scala/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 09:25:00 +0000</pubDate>
		<dc:creator>Ilya Boyandin</dc:creator>
				<category><![CDATA[geo]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://blog.boyandi.net/?p=92</guid>
		<description><![CDATA[<p>Here is a chunk of Scala code for getting lat/lon coordinates of geographical locations (cities or villages) using the wonderful <a href="http://www.geonames.org/export/geonames-search.html">geonames.org</a> webservice which allows to search for geo entities by name. The getCoords() method returns a triple of (resolved entity name, lat, lon). The countryCode parameter is optional and will limit the search within [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a chunk of Scala code for getting lat/lon coordinates of geographical locations (cities or villages) using the wonderful <a href="http://www.geonames.org/export/geonames-search.html">geonames.org</a> webservice which allows to search for geo entities by name. The getCoords() method returns a triple of (resolved entity name, lat, lon). The countryCode parameter is optional and will limit the search within the country when specified. The webservice often returns more than one result, in this case the method will return the coordinates of the first one.</p>

<div class="wp_syntax"><div class="code"><pre class="scala" style="font-family:monospace;"><span style="color: #0000ff; font-weight: bold;">import</span> scala.<span style="color: #000000;">xml</span>.<span style="color: #000080;">_</span>
<span style="color: #0000ff; font-weight: bold;">import</span> java.<span style="color: #000000;">io</span>.<span style="color: #000080;">_</span>
<span style="color: #0000ff; font-weight: bold;">import</span> java.<span style="color: #000000;">net</span>.<span style="color: #F78811;">&#123;</span>URLEncoder, URL<span style="color: #F78811;">&#125;</span>
&nbsp;
<span style="color: #0000ff; font-weight: bold;">def</span> getCoords<span style="color: #F78811;">&#40;</span>query<span style="color: #000080;">:</span>String, countryCode<span style="color: #000080;">:</span>String<span style="color: #F78811;">&#41;</span><span style="color: #000080;">:</span><span style="color: #F78811;">&#40;</span>String, Double, Double<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
  <span style="color: #0000ff; font-weight: bold;">val</span> geonames <span style="color: #000080;">=</span> XML.<span style="color: #000000;">loadString</span><span style="color: #F78811;">&#40;</span>readUrl<span style="color: #F78811;">&#40;</span>
    <span style="color: #6666FF;">&quot;http://ws.geonames.org/search?featureClass=P&amp;q=&quot;</span> + URLEncoder.<span style="color: #000000;">encode</span><span style="color: #F78811;">&#40;</span>query<span style="color: #F78811;">&#41;</span> +
            <span style="color: #F78811;">&#40;</span><span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>countryCode <span style="color: #000080;">!=</span> <span style="color: #0000ff; font-weight: bold;">null</span><span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;&amp;country=&quot;</span> + countryCode<span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#40;</span>geonames \ <span style="color: #6666FF;">&quot;geoname&quot;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">size</span>  <span style="color: #000080;">&gt;</span> <span style="color: #F78811;">0</span><span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">var</span> firstGeoname <span style="color: #000080;">=</span> <span style="color: #F78811;">&#40;</span>geonames \ <span style="color: #6666FF;">&quot;geoname&quot;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">first</span>
&nbsp;
    <span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#40;</span>firstGeoname \ <span style="color: #6666FF;">&quot;name&quot;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">first</span>.<span style="color: #000000;">text</span> + <span style="color: #6666FF;">&quot; (&quot;</span> +
          <span style="color: #F78811;">&#40;</span>firstGeoname \ <span style="color: #6666FF;">&quot;countryCode&quot;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">first</span>.<span style="color: #000000;">text</span> + <span style="color: #6666FF;">&quot;)&quot;</span>,
     <span style="color: #F78811;">&#40;</span>firstGeoname \ <span style="color: #6666FF;">&quot;lat&quot;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">first</span>.<span style="color: #000000;">text</span>.<span style="color: #000000;">toDouble</span>,
     <span style="color: #F78811;">&#40;</span>firstGeoname \ <span style="color: #6666FF;">&quot;lng&quot;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">first</span>.<span style="color: #000000;">text</span>.<span style="color: #000000;">toDouble</span><span style="color: #F78811;">&#41;</span>
  <span style="color: #F78811;">&#125;</span> <span style="color: #0000ff; font-weight: bold;">else</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">null</span>
  <span style="color: #F78811;">&#125;</span>
<span style="color: #F78811;">&#125;</span>
&nbsp;
<span style="color: #0000ff; font-weight: bold;">def</span> readUrl<span style="color: #F78811;">&#40;</span>url<span style="color: #000080;">:</span>String<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
  <span style="color: #0000ff; font-weight: bold;">val</span> in <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">new</span> BufferedReader<span style="color: #F78811;">&#40;</span><span style="color: #0000ff; font-weight: bold;">new</span> InputStreamReader<span style="color: #F78811;">&#40;</span><span style="color: #0000ff; font-weight: bold;">new</span> URL<span style="color: #F78811;">&#40;</span>url<span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">openStream</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span>, <span style="color: #6666FF;">&quot;utf-8&quot;</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span>
  <span style="color: #0000ff; font-weight: bold;">val</span> response <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">new</span> StringBuilder
  <span style="color: #0000ff; font-weight: bold;">var</span> inputLine<span style="color: #000080;">:</span>String <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">null</span>
  <span style="color: #0000ff; font-weight: bold;">do</span> <span style="color: #F78811;">&#123;</span>
    inputLine <span style="color: #000080;">=</span> in.<span style="color: #000000;">readLine</span>
    <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>inputLine <span style="color: #000080;">!=</span> <span style="color: #0000ff; font-weight: bold;">null</span><span style="color: #F78811;">&#41;</span> response.<span style="color: #000000;">append</span><span style="color: #F78811;">&#40;</span>inputLine<span style="color: #F78811;">&#41;</span>
  <span style="color: #F78811;">&#125;</span> <span style="color: #0000ff; font-weight: bold;">while</span> <span style="color: #F78811;">&#40;</span>inputLine <span style="color: #000080;">!=</span> <span style="color: #0000ff; font-weight: bold;">null</span><span style="color: #F78811;">&#41;</span>
  in.<span style="color: #000000;">close</span>
&nbsp;
  response.<span style="color: #000000;">toString</span>
<span style="color: #F78811;">&#125;</span></pre></div></div>

<p>Calling getCoords(&#8220;Neuchatel&#8221;, &#8220;CH&#8221;) returns a triple (Neuchâtel (CH),46.99179,6.931).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.boyandi.net/2010/06/17/resolving-geographical-entities-with-scala/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A List of Usability Crimes</title>
		<link>http://blog.boyandi.net/2009/12/10/10-usability-crimes-you-shouldn%e2%80%99t-commit/</link>
		<comments>http://blog.boyandi.net/2009/12/10/10-usability-crimes-you-shouldn%e2%80%99t-commit/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 10:20:41 +0000</pubDate>
		<dc:creator>Ilya Boyandin</dc:creator>
				<category><![CDATA[uncategorized]]></category>

		<guid isPermaLink="false">http://blog.boyandi.net/?p=85</guid>
		<description><![CDATA[<p><a href="http://line25.com/articles/10-usability-crimes-you-really-shouldnt-commit">&#8220;10 Usability Crimes You Really Shouldn’t Commit&#8221; by Chris Spooner</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://line25.com/articles/10-usability-crimes-you-really-shouldnt-commit">&#8220;10 Usability Crimes You Really Shouldn’t Commit&#8221; by Chris Spooner</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.boyandi.net/2009/12/10/10-usability-crimes-you-shouldn%e2%80%99t-commit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The question persists</title>
		<link>http://blog.boyandi.net/2009/07/22/77/</link>
		<comments>http://blog.boyandi.net/2009/07/22/77/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 15:35:11 +0000</pubDate>
		<dc:creator>Ilya Boyandin</dc:creator>
				<category><![CDATA[hci]]></category>

		<guid isPermaLink="false">http://blog.boyandi.net/?p=77</guid>
		<description><![CDATA[<p>The question persists and indeed grows whether the computer will make it easier or harder for human beings to know who they really are, to identify their real problems, to respond more fully to beauty, to place adequate value on life, and to make their world safer than it now is.</p> <p>Norman Cousins, &#8220;The Poet [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>The question persists and indeed grows whether the computer will make it easier or harder for human beings to know who they really are, to identify their real problems, to respond more fully to beauty, to place adequate value on life, and to make their world safer than it now is.</p></blockquote>
<p>Norman Cousins, &#8220;The Poet and the Computer&#8221;, 1966</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.boyandi.net/2009/07/22/77/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Picback</title>
		<link>http://blog.boyandi.net/2009/06/22/picback/</link>
		<comments>http://blog.boyandi.net/2009/06/22/picback/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 14:45:55 +0000</pubDate>
		<dc:creator>Ilya Boyandin</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[my projects]]></category>
		<category><![CDATA[photo]]></category>
		<category><![CDATA[swing]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://blog.boyandi.net/?p=55</guid>
		<description><![CDATA[<p>This weekend the weather was not that great so I spent it at home. Also my laptop almost run out of disk space, so I decided to do something about it. I had 50 Gb of photos in my Picasa albums (it&#8217;s because I mostly shoot RAW, I guess) which I always wanted to archive [...]]]></description>
			<content:encoded><![CDATA[<p>This weekend the weather was not that great so I spent it at home. Also my laptop almost run out of disk space, so I decided to do something about it. I had 50 Gb of photos in my Picasa albums (it&#8217;s because I mostly shoot RAW, I guess) which I always wanted to archive on an external drive keeping only the starred photos on the laptop, so that I can always have the best photos with me. But there is no easy way to do it in Picasa. Well, of course you can do it manually, but in my case it was not an option, because I had <em>so many</em> photos on my laptop.</p>
<p>Just improving the python script which I had been using for few years for backing up Picasa albums would not be an option, because this new tool would need a UI. The user needs first to have an overview over the albums and the disk space they consume, and then decide which one to archive. </p>
<p>So I decided to make a tool which would help me with it. On Saturday evening I started to code and have fun with the good old Swing, and finished it late on Sunday. And then the tool helped me to remove tens of thousands of non-starred photos which I didn&#8217;t want to have on my laptop (after backing them up) and free precious gigabytes just in few minutes.</p>
<p>Here it is: <a href="http://code.google.com/p/picback/">Picback</a>. If you are an extensive Picasa user and photographer, I hope it can be useful for you too.</p>
<p><a href="http://code.google.com/p/picback/"><img border="0" src="http://www.boyandi.net/images/works/PicBack/thumb/backup_progress.png" alt="Picback - A tool for Picasa users for making backups of photo albums and saving disk space" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.boyandi.net/2009/06/22/picback/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Switching subversion repository</title>
		<link>http://blog.boyandi.net/2009/06/19/manually-switching-to-another-subversion-repository/</link>
		<comments>http://blog.boyandi.net/2009/06/19/manually-switching-to-another-subversion-repository/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 14:45:52 +0000</pubDate>
		<dc:creator>Ilya Boyandin</dc:creator>
				<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://blog.boyandi.net/?p=29</guid>
		<description><![CDATA[<p>If you use Subclipse, switching to another repository in a local working copy can be pain in the ass, because Subclipse (and I think svn itself) only allows to change the path of the repository if it&#8217;s still in the same repository. I had to change the path from http://.. to https://.. and couldn&#8217;t do [...]]]></description>
			<content:encoded><![CDATA[<p>If you use Subclipse, switching to another repository in a local working copy can be pain in the ass, because Subclipse (and I think svn itself) only allows to change the path of the repository if it&#8217;s still in the same repository. I had to change the path from http://.. to https://.. and couldn&#8217;t do it in Eclipse. Subclipse reported an error: &#8220;<em>https://.. is not the same repository as http://.. </em>&#8220;. As a last resort I decided to manually update the repository in all of the svn&#8217;s <strong>entries</strong> files using the magic <strong>xargs</strong> command. Running this command in the project root directory did the trick (works with Cygwin on Windows as well):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">find</span> . <span style="color: #660033;">-name</span> entries <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">xargs</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-i</span> <span style="color: #ff0000;">&quot;s/http:\/\//https:\/\//g&quot;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.boyandi.net/2009/06/19/manually-switching-to-another-subversion-repository/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Processing.js</title>
		<link>http://blog.boyandi.net/2009/03/19/processingjs/</link>
		<comments>http://blog.boyandi.net/2009/03/19/processingjs/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 14:22:57 +0000</pubDate>
		<dc:creator>Ilya Boyandin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[visualization]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.boyandi.net/?p=16</guid>
		<description><![CDATA[<p>John Resig <a href="http://ejohn.org/blog/processingjs/">released</a> a port of the <a href="http://processing.org/">Processing language</a> to JavaScript. The demos are very inspiring.</p> <p><a href="http://ejohn.org/apps/processing.js/examples/custom/snake.html"></a></p>]]></description>
			<content:encoded><![CDATA[<p>John Resig <a href="http://ejohn.org/blog/processingjs/">released</a> a port of the <a href="http://processing.org/">Processing language</a> to JavaScript. The demos are very inspiring.</p>
<p><a href="http://ejohn.org/apps/processing.js/examples/custom/snake.html"><img src="http://ejohn.org/apps/processing.js/screens/Picture%2015.png" title="Snake" alt="Snake" border="0" width="320" height="240" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.boyandi.net/2009/03/19/processingjs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Problems with Hibernate</title>
		<link>http://blog.boyandi.net/2009/02/17/problems-with-hibernate/</link>
		<comments>http://blog.boyandi.net/2009/02/17/problems-with-hibernate/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 14:17:06 +0000</pubDate>
		<dc:creator>Ilya Boyandin</dc:creator>
				<category><![CDATA[db]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.boyandi.net/?p=15</guid>
		<description><![CDATA[<p>After 8 months of development of a new project with extensive use of Hibernate I can now tell about my experiences with it. In general, Hibernate is a very useful tool. It saves a lot of time, because you don&#8217;t have to write SQL queries. If you make changes, you usually don&#8217;t have to rewrite [...]]]></description>
			<content:encoded><![CDATA[<p>After 8 months of development of a new project with extensive use of Hibernate I can now tell about my experiences with it. In general, Hibernate is a very useful tool. It saves a lot of time, because you don&#8217;t have to write SQL queries. If you make changes, you usually don&#8217;t have to rewrite queries, because there are only a few of them. The configuration using annotations is simple and powerful (and I personally prefer it to writing mappings in XML). Hibernate is able to generate database tables from mapped classes automatically and even update them as you add new fields to a class. Hibernate caching facilities are very useful. Finally, Hibernate allows to develop database vendor indepentent applications.</p>
<p>But there are few problems which I experienced:</p>
<ol>
<li>The most frustrating is in fact <a href="http://www.hibernate.org/hib_docs/reference/en/html/performance.html#performance-fetching-proxies">described in the Hibernate docs</a>. An object returned by session.load() isn&#8217;t necessarily an object of the expected class:

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">Cat cat <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Cat<span style="color: #009900;">&#41;</span> session.<span style="color: #006633;">load</span><span style="color: #009900;">&#40;</span>Cat.<span style="color: #000000; font-weight: bold;">class</span>, id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">// instantiate a proxy (does not hit the db)</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>cat.<span style="color: #006633;">isDomesticCat</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>                  <span style="color: #666666; font-style: italic;">// hit the db to initialize the proxy</span>
    DomesticCat dc <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>DomesticCat<span style="color: #009900;">&#41;</span> cat<span style="color: #339933;">;</span>       <span style="color: #666666; font-style: italic;">// Error!</span>
    ....
<span style="color: #009900;">&#125;</span></pre></div></div>

</li>
<li>No inheritance mapping for value objects: here is the <a href="http://opensource.atlassian.com/projects/hibernate/browse/HHH-1152">JIRA issue</a> that never gets fixed, and a <a href="http://priyanshugoyal.wordpress.com/2007/11/15/hibernate-component-value-object-inheritance-mapping/">workaround</a>.</li>
<li>The strong <a href="http://www.hibernate.org/hib_docs/annotations/reference/en/html/entity.html#entity-mapping-association-collections">suggestion in the Hibernate documentation</a> to use a join table for every unidirectional one-to-many association (in the section 2.2.5.3.2.2. &#8220;Unidirectional&#8221;). Another suggestion <a href="http://forum.hibernate.org/viewtopic.php?t=954178&amp;highlight=unidirectional+null+foriegn+foreign+key">is discussed here</a>.</li>
<li>2nd level caching should be used with caution: after deleting an object the stale version can still stay in cache which can lead to an ObjectNotFoundException. I found no other solution except disabling the 2nd level cache for the class.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.boyandi.net/2009/02/17/problems-with-hibernate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CGVis is available under GPL</title>
		<link>http://blog.boyandi.net/2008/09/17/cgvis-is-available-under-gpl/</link>
		<comments>http://blog.boyandi.net/2008/09/17/cgvis-is-available-under-gpl/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 13:12:17 +0000</pubDate>
		<dc:creator>Ilya Boyandin</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[my projects]]></category>
		<category><![CDATA[piccolo]]></category>
		<category><![CDATA[swing]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://blog.boyandi.net/?p=14</guid>
		<description><![CDATA[<p>The <a href="http://code.google.com/p/cgvis/">CGVis project</a>, our visualization tool for multidimensional data, is finally open-sourced. Hurrrah!</p> <p><a href="http://code.google.com/p/cgvis/"></a></p>]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://code.google.com/p/cgvis/">CGVis project</a>, our visualization tool for multidimensional data, is finally open-sourced. Hurrrah!</p>
<p><a href="http://code.google.com/p/cgvis/"><img src="http://www.boyandi.net/images/works/CGVis/cgvis_onmac7_mid.png" title="CGVis: visualization tool for exploring multidimensional data" alt="CGVis: visualization tool for exploring multidimensional data" width="263" height="183" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.boyandi.net/2008/09/17/cgvis-is-available-under-gpl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Werkzeug allows debugging a web app directly on an error page</title>
		<link>http://blog.boyandi.net/2008/05/12/werkzeug/</link>
		<comments>http://blog.boyandi.net/2008/05/12/werkzeug/#comments</comments>
		<pubDate>Mon, 12 May 2008 10:37:49 +0000</pubDate>
		<dc:creator>Ilya Boyandin</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.boyandi.net/?p=13</guid>
		<description><![CDATA[<p>At the <a href="http://www.linuxtage.at/">Grazer Linuxtage</a> I liked most the <a href="http://glt08.linuxtage.at/slides/glt08-ronacher_werkzeug_en.pdf">Armin Ronacher&#8217;s talk</a> about <a href="http://werkzeug.pocoo.org/">Werkzeug</a> which is a Python library for building web applications that doesn&#8217;t limit you in the way you build your web app (like many of the existing frameworks do). Werkzeug is rather a handy set of tools and utilities for [...]]]></description>
			<content:encoded><![CDATA[<p>At the <a href="http://www.linuxtage.at/">Grazer Linuxtage</a> I liked most the <a href="http://glt08.linuxtage.at/slides/glt08-ronacher_werkzeug_en.pdf">Armin Ronacher&#8217;s talk</a> about <a href="http://werkzeug.pocoo.org/">Werkzeug</a> which is a Python library for building web applications that doesn&#8217;t limit you in the way you build your web app (like many of the existing frameworks do). Werkzeug is rather a handy set of tools and utilities for making web apps than a framework.</p>
<p>The most impressive part of the talk was when Armin demonstrated the &#8220;online&#8221; debugging feature on a standard error page generated by Werkzeug. Upon each error the context in which it happens is stored on the server (only if the app is in the debug mode). Thus on the error page itself you can directly interact with the Python interpreter which is &#8220;frozen&#8221; in the very state in which the error happened. So you can use the full power of the interactive Python interpreter directly on the standard error page. That&#8217;s awesome.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.boyandi.net/2008/05/12/werkzeug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Directory links on Windows</title>
		<link>http://blog.boyandi.net/2008/04/21/directory-links-on-windows/</link>
		<comments>http://blog.boyandi.net/2008/04/21/directory-links-on-windows/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 13:05:26 +0000</pubDate>
		<dc:creator>Ilya Boyandin</dc:creator>
				<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://blog.boyandi.net/?p=12</guid>
		<description><![CDATA[<p>I didn&#8217;t know that it&#8217;s so simple to make directory aliases on Windows 2000+. There is an undocumented utility for it: linkd.exe (part of  <a href="http://www.microsoft.com/downloads/details.aspx?familyid=9d467a69-57ff-4ae7-96ee-b18c4790cffd&#38;displaylang=en">Windows Server Resource Kit</a>), which is roughly equivalent to ln -d in UNIX. So you can write:</p> LINKD Docs C:\Documents and Settings\Ilya\My Documents <p>And voila! You have now C:\Docs which [...]]]></description>
			<content:encoded><![CDATA[<p>I didn&#8217;t know that it&#8217;s so simple to make directory aliases on Windows 2000+. There is an undocumented utility for it: linkd.exe (part of  <a href="http://www.microsoft.com/downloads/details.aspx?familyid=9d467a69-57ff-4ae7-96ee-b18c4790cffd&amp;displaylang=en">Windows Server Resource Kit</a>), which is roughly equivalent to ln -d in UNIX. So you can write:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">LINKD Docs C:\Documents and Settings\Ilya\My Documents</pre></div></div>

<p>And voila! You have now C:\Docs which links to My Documents.</p>
<p><a href="http://www.pyeung.com/pages/win2k/hardlinks.html">More here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.boyandi.net/2008/04/21/directory-links-on-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

