<?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>Code &#038; form &#187; Software</title>
	<atom:link href="http://workshop.evolutionzone.com/category/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://workshop.evolutionzone.com</link>
	<description>Computational aesthetics and programming for artists and designers.</description>
	<lastBuildDate>Sun, 29 Jan 2012 07:00:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Websaver &#8211; MacOS screensaver that displays web pages</title>
		<link>http://workshop.evolutionzone.com/2012/01/29/websaver-macos-screensaver-that-displays-web-pages/</link>
		<comments>http://workshop.evolutionzone.com/2012/01/29/websaver-macos-screensaver-that-displays-web-pages/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 07:00:06 +0000</pubDate>
		<dc:creator>marius watz</dc:creator>
				<category><![CDATA[AHO]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[Processing / Java]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web dev]]></category>
		<category><![CDATA[Workshops]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[processing.js]]></category>
		<category><![CDATA[screensaver]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://workshop.evolutionzone.com/?p=656</guid>
		<description><![CDATA[Got a nice tip from Jason Sundram (thanks!) as a followup to the screensaver theme: @mariuswatz websaver awe.sm/5daM6 is a great way to use a processing.js sketch as a screensaver. Here&#8217;s mine: viz.runningwithdata.com/boids/ &#8212; Jason Sundram (@jsundram) January 28, 2012 Websaver runs on MacOS and allows the user to specify a web page to load [...]]]></description>
			<content:encoded><![CDATA[<p>Got a nice tip from <a href="http://runningwithdata.com/">Jason Sundram</a> (thanks!) as a followup to the screensaver theme:</p>
<blockquote class="twitter-tweet" data-in-reply-to="158913229995782144"><p>@<a href="https://twitter.com/mariuswatz">mariuswatz</a> websaver <a href="http://t.co/f7S6ZTYo" title="http://awe.sm/5daM6">awe.sm/5daM6</a> is a great way to use a processing.js sketch as a screensaver. Here&#8217;s mine: <a href="http://t.co/HZu9ouLf" title="http://viz.runningwithdata.com/boids/">viz.runningwithdata.com/boids/</a></p>
<p>&mdash; Jason Sundram (@jsundram) <a href="https://twitter.com/jsundram/status/163354767601565696" data-datetime="2012-01-28T20:16:26+00:00">January 28, 2012</a></p></blockquote>
<p><script src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p><a href="http://code.google.com/p/websaver/">Websaver</a> runs on MacOS and allows the user to specify a web page to load when the screensaver is active. And since it uses Safari to render the HTML (I assume), you can use HTML5 and Processing.js to run computational sketches on that web page. </p>
<p>It&#8217;s a nice hack to enable easy development of screensavers based on open web standards, without having to worry about interaction with the OS etc. In fact, it&#8217;s nearly as good as my Google Chrome screensaver idea, minus an app store etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://workshop.evolutionzone.com/2012/01/29/websaver-macos-screensaver-that-displays-web-pages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Personal data logging and Information Visualization</title>
		<link>http://workshop.evolutionzone.com/2010/09/13/personal-data-logging-and-information-visualization/</link>
		<comments>http://workshop.evolutionzone.com/2010/09/13/personal-data-logging-and-information-visualization/#comments</comments>
		<pubDate>Mon, 13 Sep 2010 02:30:53 +0000</pubDate>
		<dc:creator>marius watz</dc:creator>
				<category><![CDATA[AHO]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Theory]]></category>
		<category><![CDATA[Workshops]]></category>
		<category><![CDATA[infoviz]]></category>
		<category><![CDATA[lifelogging]]></category>
		<category><![CDATA[mindmap]]></category>
		<category><![CDATA[self-ethnography]]></category>
		<category><![CDATA[statistics]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://workshop.evolutionzone.com/?p=404</guid>
		<description><![CDATA[Productivity charts generated by RescueTime.com tracker The next two weeks I am teaching a workshop in Information Visualization and Self-Ethnography for the Interaction Design course at AHO. I&#8217;ll be posting links and resources here on the blog in the next few days. Required Reading Gary Wolf: The Data-Driven Life (NYTimes.com) Shawn Allen: Introduction to Information [...]]]></description>
			<content:encoded><![CDATA[<div class="flickrImg"><img src="http://workshop.evolutionzone.com/wp-content/uploads/2010/09/20100913-Self-Ethnography.gif" alt="RescueTime graphs" title="RescueTime graphs" width="400" height="379" class="alignnone size-full wp-image-407" /></p>
<p>Productivity charts generated by <a href="http://www.rescuetime.com/">RescueTime.com tracker</a></div>
<p>The next two weeks I am teaching a workshop in Information Visualization and Self-Ethnography for the Interaction Design course at AHO. I&#8217;ll be posting links and resources here on the blog in the next few days.</p>
<p><strong>Required Reading</strong></p>
<ul>
<li><a href="http://www.nytimes.com/2010/05/02/magazine/02self-measurement-t.html?_r=1&#038;pagewanted=all">Gary Wolf: The Data-Driven Life (NYTimes.com)</a></li>
<li><a href="http://interactiondesign.sva.edu/classes/datavisualization/2010/07/08/introduction/">Shawn Allen: Introduction to Information Visualization course at SVA</a></li>
<li><a href="http://en.wikipedia.org/wiki/Lifelog">Wikipedia: Lifelog</a></li>
</ul>
<p><strong>Data collecting tools</strong></p>
<ul>
<li><a href="http://daytum.com/">Daytum</a></li>
<li><a href="http://your.flowingdata.com/">your.flowingdata</a></li>
<li><a href="http://www.rescuetime.com/">RescueTime</a></li>
<li><a href="http://foursquare.com">FourSquare</a></li>
<li><a href="http://last.fm">Last.fm</a> (music)</li>
<li><a href="http://www.moodtracker.com/">MoodTracker</a> (too medicine-specific?)</li>
<li><a href="http://www.evernote.com/">EverNote</a></li>
<li><a href="http://mindjet.com/">Mindjet MindManager (commercial)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://workshop.evolutionzone.com/2010/09/13/personal-data-logging-and-information-visualization/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nokia E71: Beautiful Connections</title>
		<link>http://workshop.evolutionzone.com/2009/02/28/nokia-e71-beautiful-connections/</link>
		<comments>http://workshop.evolutionzone.com/2009/02/28/nokia-e71-beautiful-connections/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 07:52:00 +0000</pubDate>
		<dc:creator>marius watz</dc:creator>
				<category><![CDATA[Processing / Java]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Watz work]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[e71]]></category>
		<category><![CDATA[generative]]></category>
		<category><![CDATA[j2me]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[marius-watz]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[processing.org]]></category>

		<guid isPermaLink="false">http://workshop.evolutionzone.com/?p=219</guid>
		<description><![CDATA[Beautiful Connections: Mobile artwork for Nokia E71 (see nokia.co.uk/e71) I recently had the privilege of being commissioned by Wieden + Kennedy to creating an artwork for Nokia&#8217;s new smartphone E71. It&#8217;s a new model featuring a full QWERTY keyboard, and is intended to function as a complete communication platform for people on the move. As [...]]]></description>
			<content:encoded><![CDATA[<div class="flickrImg"><img src="http://workshop.evolutionzone.com/wp-content/uploads/2009/02/20090228_nokia_e71.jpg" alt="Beautiful Connections: Mobile artwork for Nokia E71" title="Beautiful Connections: Mobile artwork for Nokia E71" width="500" height="356" class="size-full wp-image-223" /></p>
<p>Beautiful Connections: <a href="http://flickr.com/photos/watz/sets/72157614375037675/">Mobile artwork for Nokia E71</a> (see <a href="http://nokia.co.uk/e71">nokia.co.uk/e71</a>)</div>
<p>I recently had the privilege of being commissioned by Wieden + Kennedy to creating an artwork for Nokia&#8217;s new smartphone E71. It&#8217;s a new model featuring a full QWERTY keyboard, and is intended to function as a complete communication platform for people on the move. As a response to this purpose, W+K&#8217;s campaign focused on the idea of &#8220;Beautiful Connections&#8221;.</p>
<p>My contribution was a mobile app that allows the user to type in a short SMS-style message, which is then used as the basis for a generative animation that results in a visual compositions of curling forms. The final image can then be sent to other users as a MMS or saved to the phone memory for use as a wallpaper. </p>
<p><strong>Technically it was a challenge</strong> to get all the different functions to come together in a single coherent application. The project was developed as a pure J2ME app based loosely on an old version of Mobile Processing. To get a smooth rendering style I chose to use the JSR-226 API for Scalable Vector Graphics, which allowed for properly anti-aliased drawings at the cost of a lower frame rate (approx 7 FPS). Standard J2ME graphics would have given 20 FPS, but the final result would have been less attractive.</p>
<p>All interface elements (menus, text input fields and contact information menu) were built from scratch to avoid the lo-tech feel of the default J2ME UI elements. This required quite a bit of work, but it would have been silly to break the organic feel of the application by using the native phone UI. Instead, the decision was made to make the app feel like a completely upgraded experience. This goal was finally achieved through liberal use of transparent PNGs and old school pixel font trickery.</p>
<div class="flickrImgBody"><object type="application/x-shockwave-flash" width="500" height="375" data="http://www.flickr.com/apps/video/stewart.swf?v=67090" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"><param name="flashvars" value="intl_lang=en-us&amp;photo_secret=a541a7bda7&amp;photo_id=3197784422&amp;show_info_box=true"></param><param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=67090"></param><param name="bgcolor" value="#000000"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=67090" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&amp;photo_secret=a541a7bda7&amp;photo_id=3197784422&amp;flickr_show_info_box=true" height="375" width="500"></embed></object></p>
<p>Beautiful Connections: Animation demo</p></div>
<p>Visit <a href="http://nokia.co.uk/e71">nokia.co.uk/e71</a> to see the campaign and download the application (it&#8217;s free!) Make sure to also check out the four excellent videos produced by <a href="http://www.moresoon.org/">Carl Burgess</a>, <a href="http://universaleverything.com">Universal Everything</a>, <a href="http://www.field.io/">Field</a> and <a href="http://www.shft.tv/">SHFT</a>. To complete the Beautiful Connections concept the web site also features an interactive message generator built in Flash that allows you to create images using live sound and web cam input.</p>
<p>My thanks to the Wieden + Kennedy crew for inviting me to do this project, in particular to <a href="http://www.sermad.com">Sermad Buni</a> and <a href="http://lptremblay.com/">Louis-Philippe Tremblay</a> for their excellent support. My thanks also to Nokia for having the vision of wanting artworks on their phones. Now, if only Apple would create a category for art on their App Store&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://workshop.evolutionzone.com/2009/02/28/nokia-e71-beautiful-connections/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>More online storage: Dropbox</title>
		<link>http://workshop.evolutionzone.com/2008/09/13/more-online-storage-dropbox/</link>
		<comments>http://workshop.evolutionzone.com/2008/09/13/more-online-storage-dropbox/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 16:22:20 +0000</pubDate>
		<dc:creator>marius watz</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web dev]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[box.net]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[jungledisk]]></category>
		<category><![CDATA[online]]></category>
		<category><![CDATA[storage]]></category>

		<guid isPermaLink="false">http://workshop.evolutionzone.com/?p=211</guid>
		<description><![CDATA[A new online storage contender: Dropbox Digital nomads and data paranoiacs everywhere tend to be big fans of online storage, and I am no exception. I&#8217;ve been using Box.net to share large files with clients and colleagues for a long time. It&#8217;s a great service with a nice GUI, with good support for sharing files. [...]]]></description>
			<content:encoded><![CDATA[<div class="flickrImg"><a href="http://www.getdropbox.com/"><img src="http://www.getdropbox.com/static/images/tour4b.png" alt="Dropbox GUI" /></a></p>
<p>A new online storage contender: <a href="http://www.getdropbox.com/">Dropbox</a></div>
<p>Digital nomads and data paranoiacs everywhere tend to be big fans of online storage, and I am no exception. I&#8217;ve been using <a href="http://box.net/">Box.net</a> to share large files with clients and colleagues for a long time. It&#8217;s a great service with a nice GUI, with good support for sharing files. Their service record is excellent, I&#8217;ve never had any with service outages or trouble uploading. </p>
<p>However, the storage limit on the basic Box.net plan is only 5 GB for $7.95 / month. They offer an upgraded plan with 15 GB, but I&#8217;m not prepared to pay $19.95 every month for a few gigabytes. I&#8217;d be happy to pay up to $10 / month, but in return I want enough storage that I can use it without worrying about running out of space. 50 gigs or more would be sufficient for that purpose.</p>
<p><strong>Shopping around, I&#8217;ve found <a href="http://www.jungledisk.com/">JungleDisk</a></strong> to be a great solution for genuine online backup. It&#8217;s based on Amazon AWS storage, and users are charged according to actual storage used. I currently store 14 gigabytes, which last month cost me a measly $3.56 for last month including transfer fees. Compared with the one-off $20 purchase of the software, this is a very reasonable option.</p>
<p>JungleDisk uses a desktop application for its operations, so it&#8217;s well integrated in the native file system and supports automated backup tasks. I have it set up to safeguard key folders like current projects, office documents etc. I can also access files interactively through a cached network drive, which allows me to download old projects and large media files even while travelling.</p>
<p><strong><a href="http://www.getdropbox.com/">Dropbox </a>is a new storage service</strong> that has only just come out of beta, and it looks very promising so far. It combines a dynamic web interface with a desktop application, providing the best of both worlds. The software sets up a sync&#8217;ed folder on your computer, so that editing folder structures and uploading files is as easy as copying files around your file system. Files uploaded through the web interface will be downloaded and sync&#8217;ed with the local folder.</p>
<p>The web interface allows you to set up file sharing with other Dropbox members. So far a few features are missing that would make it easy to share files with non-members. There is a public folder that you can use to provide public URLs to specific files, but it still lacks the important feature of sharing public folders.</p>
<p>According to a recent <a href="http://blog.getdropbox.com/?p=13" title="blog post">blog post</a> Dropbox plans to offer 2 GB for free and 50 GB for $9.99 / month, or $99.99 / year. Sounds like just the right deal for my purposes. I&#8217;m looking forward to seeing how it develops. But even if I end up switching from Box.net I&#8217;ll probably keep JungleDisk for backing up larger projects.</p>
]]></content:encoded>
			<wfw:commentRss>http://workshop.evolutionzone.com/2008/09/13/more-online-storage-dropbox/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Twitter: Expanding the Hive Mind</title>
		<link>http://workshop.evolutionzone.com/2008/08/25/twitter-expanding-the-hive-mind/</link>
		<comments>http://workshop.evolutionzone.com/2008/08/25/twitter-expanding-the-hive-mind/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 03:21:32 +0000</pubDate>
		<dc:creator>marius watz</dc:creator>
				<category><![CDATA[AHO]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Theory]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[social software]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://workshop.evolutionzone.com/?p=206</guid>
		<description><![CDATA[Burak Arikan: <a href="http://blog.burak-arikan.com/growth-of-a-twitter-graph/" title="Twitter Networks">Twitter Networks</a> / Jeff Clark: TwitArcs In general, I&#8217;m a fan of social software, believing that it has great potential to be useful in the overlapping spheres between the personal and the professional. Nevertheless, I&#8217;m somewhat of a late comer to the Twitter revolution. Despite early enthusiasm from smart people like Tom Carden, [...]]]></description>
			<content:encoded><![CDATA[<div class="flickrImg"><img src="http://workshop.evolutionzone.com/wp-content/uploads/2008/08/20080824_twitterstuff.jpg" alt="Burak Arikan: Twitter networks / Jeff Clark: TwitArcs" title="Burak Arikan: Twitter networks / Jeff Clark: TwitArcs" width="540" height="200" /></p>
<p>Burak Arikan: <a href="http://blog.burak-arikan.com/growth-of-a-twitter-graph/" title="Twitter Networks">Twitter Networks</a> / Jeff Clark: <a href="http://www.neoformix.com/2008/TwitArcs.html">TwitArcs</a></div>
<p>In general, I&#8217;m a fan of social software, believing that it has great potential to be useful in the overlapping spheres between the personal and the professional. Nevertheless, I&#8217;m somewhat of a late comer to the Twitter revolution. Despite early enthusiasm from smart people like <a href="http://www.tom-carden.co.uk/">Tom Carden</a>, I initially saw it mostly as a pseudo-chat medium and a potential timewaster. I signed up, then never came back.</p>
<p>However, a recent conversation with <a href="http://burak-arikan.com/">Burak Arikan</a> about Twitter and collective thinking made me revisit the Twitter network. And guess what? I like it. Sure, there&#8217;s plenty of noise in the Twittersphere. But by wisely choosing whose streams to follow, Twitter becomes much like a collective conversation, providing in-progress snapshots of thoughts and ideas from some people I have come to know and admire.</p>
<p>At its best, Twitter is like a Hive Mind, echoing with ideas and spontaneous viewpoints.<br />
By using a tool like <a href="http://twhirl.org/">Twhirl</a> or <a href="http://www.naan.net/trac/wiki/TwitterFox">Twitterfox</a>, Twitter becomes an ambient information feed that you can tune in and out of at leisure. Its immediacy means that you&#8217;ll never experience the blog reader&#8217;s guilt of having 500 unread items in your feed reader. But by following the twitters of interesting people you&#8217;ll quickly find links to useful resources and learn about their creative processes. </p>
<p><strong>Twitter tools &#038; visualizations</strong></p>
<p>The following are some recent Twitter-related resources that give an idea of the bigger Twitter picture, including network visualizations and Twitter hacks a little outside the mainstream. Feel free to post comments with links to interesting Twitter tools and hacks. </p>
<ul>
<li>Burak Arikan: <a href="http://blog.burak-arikan.com/growth-of-a-twitter-graph/" title="Growth of a Twitter Graph">Growth of a Twitter Graph</a></li>
<li>Jeff Clark: <a href="http://www.neoformix.com/2008/TwitArcs.html">TwitArcs</a> / <a href="http://www.neoformix.com/2008/TwitterSpectrum.html">Twitter Spectrum</a> / <a href="http://www.neoformix.com/2008/TwitterStreamGraphs.html">Twitter StreamGraphs</a></li>
<li><a href="http://explore.twitter.com/">explore.twitter.com</a> &#8211; Index of Twitter tools, including the <a href="http://explore.twitter.com/blocks/">Twitter Blocks</a> visualization (created by a Stamen team including the aforementioned Tom Carden)</li>
<li><a href="http://twitterfeed.com/">Twitterfeed.com</a> &#8211; Tool for syndicating a RSS feed as a Twitter stream)</li>
<li><a href="http://twistori.com/">Twistori</a> &#8211; Visualization of twitters relating to emotional states</li>
<li><a href="http://twittervision.com/">Twittervision</a> &#8211; Geographical visualization of public twitters</li>
</ul>
<p>My own Twitter stream can be found at <a href="http://twitter.com/mariuswatz">http://twitter.com/mariuswatz/</a>. I try to keep my Twitters somewhat topical, but occasional digressions will occur. After all, that&#8217;s the beauty of Twitter.</p>
]]></content:encoded>
			<wfw:commentRss>http://workshop.evolutionzone.com/2008/08/25/twitter-expanding-the-hive-mind/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Code formatting trouble&#8230;</title>
		<link>http://workshop.evolutionzone.com/2008/03/11/code-formatting-trouble/</link>
		<comments>http://workshop.evolutionzone.com/2008/03/11/code-formatting-trouble/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 19:36:29 +0000</pubDate>
		<dc:creator>marius watz</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Web dev]]></category>
		<category><![CDATA[Workshops]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[formatting]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://workshop.evolutionzone.com/2008/03/11/code-formatting-trouble/</guid>
		<description><![CDATA[As you might have noticed I&#8217;ve replaced the code formatting plugin that I use on the blog. I had trouble with the Geshi-based plugin I used before, so I replaced it with Alex Gorbatchev&#8217;s <a href="http://code.google.com/p/syntaxhighlighter/" title="SyntaxHighlighter">SyntaxHighlighter</a>. This produces lovely formatting and works well &#8211; mostly. SyntaxHighlighter hiccups when encountering the < character unless there is a [...]]]></description>
			<content:encoded><![CDATA[<p>As you might have noticed I&#8217;ve replaced the code formatting plugin that I use on the blog. I had trouble with the Geshi-based plugin I used before, so I replaced it with Alex Gorbatchev&#8217;s <a href="http://code.google.com/p/syntaxhighlighter/" title="SyntaxHighlighter">SyntaxHighlighter</a>. This produces lovely formatting and works well &#8211; mostly. </p>
<p>SyntaxHighlighter hiccups when encountering the < character unless there is a blank space directly following it, most likely due to it being interpreted as the start of a HTML tag. Also, the "copy to clipboard function produces incorrect code because the text copied has < and > characters converted into the HTML entities &amp;lt; and &amp;gt;. However, I&#8217;m not sure if this is a problem with SyntaxHighlighter or with WordPress, since WordPress sometimes messes with formatting by automagically trying to provide good HTML substitutes for certain character combinations. </p>
<p>Most frustrating of all, WordPress has started replacing the &#8216;s in &#8220;it&#8217;s&#8221; with a triple ellipsis character, as well as some other strangeness. Any tips for fool-proof plugins for posting properly formatted code would be most appreciated!</p>
]]></content:encoded>
			<wfw:commentRss>http://workshop.evolutionzone.com/2008/03/11/code-formatting-trouble/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My first Rhinoscript&#8230;</title>
		<link>http://workshop.evolutionzone.com/2008/02/05/my-first-rhinoscript/</link>
		<comments>http://workshop.evolutionzone.com/2008/02/05/my-first-rhinoscript/#comments</comments>
		<pubDate>Tue, 05 Feb 2008 10:42:21 +0000</pubDate>
		<dc:creator>marius watz</dc:creator>
				<category><![CDATA[AHO]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Processing / Java]]></category>
		<category><![CDATA[Rhino]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[cad]]></category>
		<category><![CDATA[geometry]]></category>
		<category><![CDATA[rhinoscript]]></category>
		<category><![CDATA[rvb]]></category>
		<category><![CDATA[scripting]]></category>

		<guid isPermaLink="false">http://workshop.evolutionzone.com/2008/02/05/my-first-rhinoscript/</guid>
		<description><![CDATA[Rhinoscript sketch, extruding a revolution surface along random curves. Good cheesy fun. I had a chance to see a bit more of the impressive tool Rhino 4 during the Generator.x 2.0 workshop, and so I thought I&#8217;d have a go at making a simple sketch in Rhinoscript. As it turns out, the fact that Rhinoscript [...]]]></description>
			<content:encoded><![CDATA[<div class="flickrImg"><img src='http://workshop.evolutionzone.com/wp-content/uploads/2008/02/080205_rhinoscript.jpg' alt='080205_rhinoscript.jpg' /></p>
<p>Rhinoscript sketch, extruding a revolution surface along random curves. Good cheesy fun.</p></div>
<p>I had a chance to see a bit more of the impressive tool <a href="http://www.rhino3d.com/">Rhino 4</a> during the <a href="http://generatorx.no/gx20workshop">Generator.x 2.0 workshop</a>, and so I thought I&#8217;d have a go at making a simple sketch in Rhinoscript. As it turns out, the fact that Rhinoscript is based on VBScript makes coding feel horrible at first. Seriously, who would want to use syntax like that? It might be easy for beginners to pick up, but it quickly gets painful once you&#8217;re dealing with complex API calls and 100+ lines of code.</p>
<p>Nevertheless, frustration soon gives way to amazement at the built-in Rhino library and its vast array of heavy-duty functions for creating and manipulating curves, meshes and NURBS surfaces. In comparison, mesh generation in Processing is enough to give anyone a headache, and I seriously doubt anyone would even attempt to implement NURBS. Even Boolean mesh operations is a staggering task, with no good Java libraries readily available.</p>
<p>While Rhinoscript is firmly a non-realtime tool, its power for pure geometry is amazing. I would definitely use Rhino as a creative tool for digital fabrication projects, where animation is not the goal. There are some excellent RhinoScript resources online, for starters look at <a href="http://en.wiki.mcneel.com/default.aspx/McNeel/RhinoScript101">RhinoScript 101</a> and <a href="http://reconstructivism.net/">David Rutten&#8217;s tutorial</a>. I would also definitely recommend using the <a href="http://en.wiki.mcneel.com/default.aspx/McNeel/MonkeyForRhino4.html">Monkey Script editor</a> instead of the built-in editor, it&#8217;s more powerful and has a very useful documentation feature.</p>
<p>The script below gives a basic idea of the Rhino syntax, and while it is a basic sketch suffering from 3D clichées, it shows the power and versatility of Rhinoscript. I just wish it wasn&#8217;t Visual Basic.</p>
<div class="mediumtitle">Code: RandRail.rvb</div>
<p><span id="more-174"></span></p>
<pre name="code" class="vb">'RandRail.rvb
'Marius Watz, http://workshop.evolutionzone.com

Option Explicit

Sub Main
	Dim doRender : doRender=1
	Dim num : num=100
	Dim pt, curve(100)

	Call rhino.enableRedraw(False)
	Rhino.Print "--------------------------"

	' delete any existing objects
	Dim oldScene:oldScene=Rhino.AllObjects()
	If isArray(oldScene) Then
		Rhino.DeleteObjects Rhino.AllObjects()
		Rhino.DeleteObjects Rhino.LightObjects()
	End If

	' Set up scene
	Dim light
	light=Rhino.AddPointLight (Array(0,-200,0))
	light=Rhino.AddPointLight (Array(-100,-100,0))

	Rhino.RenderColor 1, RGB(50,50,50)
	Rhino.RenderResolution Array(1200,900)
	Rhino.RenderAntialias 2

	' Create random curves
	Dim cp(3),mult, i
	For i=0 To num
		mult=random(0.75,1.25)
		cp(0)=Array(0,0,0)
		If Rnd>0.5 Then
			cp(1)=Array(0,random(30,50),0)
		Else
			cp(1)=Array(0,random(-30,20),0)
		End If
		If Rnd>0.5 Then
			cp(2)=Array(random(-50,50)*mult,random(30,50),random(-50,50)*mult)
		Else
			cp(2)=Array(random(-50,50)*mult,random(-30,20),random(-50,50)*mult)
		End If
		cp(3)=Array(random(-50,50)*mult,random(-50,50),random(-50,50)*mult)
		curve(i)=Rhino.AddCurve(cp)
		'		Rhino.AddSphere cp(2), dblRadius
	Next

	' Create random rounded profile
	Dim numRot : numRot=Int(random(7,18))
	Dim j, rndCurve(10),profPt(),deg,offs
	ReDim profPt(numRot)

	For j=0 To Ubound(rndCurve)
		For i=0 To numRot
			deg=(2*Rhino.Pi/numRot)*i
			offs=random(5,7)*0.2
			If i Mod 2=0 Then
				offs=random(7,12)*0.2
			End If

			profPt(i)=Array(Cos(deg)*offs, 0 ,Sin(deg)*offs)
		Next
		rndCurve(j)=Rhino.AddCurve(profPt)
	Next

	' Create random RailRefSrf and ExtrudeCurve surfaces
	Dim railAxis(1)
	railAxis(0)=Array(0,0,0)
	railAxis(1)=Array(0,1,0)

	Dim srf,profCurve
	For i=0 To num
		profCurve=rndCurve(Int(random(0,Ubound(rndCurve))))
		srf=Rhino.AddRailRevSrf(curve(i),profCurve,railAxis)
		applyRndMaterial(srf)
		'		srf=Rhino.ExtrudeCurve(profCurve,curve(i))
		'		applyRndMaterial(srf)
	Next

	If doRender=1 Then
		renderView()
	End If

	Call rhino.enableRedraw(True)

End Sub

' Set random materials
Function applyRndMaterial(obj)
	Dim prob,col,material

	material=Rhino.AddMaterialToObject (obj)

	' Coloring: Pink, Orange
	prob=random(0,100)
	If prob<30 Then
		Rhino.MaterialColor material, RGB(255, 0, Int(random(100,150)))
	ElseIf prob<90 Then
		Rhino.MaterialColor material, RGB(255, Int(random(100,254)),0)
	Else
		Rhino.MaterialColor material, RGB(255, 255, 255)
	End If
End Function

Function random(min,max)
	random=Rnd*(max-min)+min
End Function

' Render current viewport
Function renderView()
	Dim view,filename

	view = Rhino.CurrentView
	Rhino.Command "_-Render"
	filename=getRenderFileName("RandRail")
	Dim cmd : cmd="_-SaveRenderWindowAs " &#038; Chr(34) &#038; filename &#038; Chr(34)
	Rhino.Command cmd
End Function

' Get auto-incremented filename
Function getRenderFileName(scriptName)
	Dim index,done, doc, file, temp,imgNum

	done=-1
	index=0
	Do While done=-1
		doc=Rhino.WorkingFolder &#038; "\" &#038; scriptName &#038; padStr(scriptName,index) &#038; ".png"
		file=Rhino.FindFile(doc)
		If IsNull(file)=True Then
			done=1
		Else
			index=index+1
		End If
	Loop

	getRenderFileName=doc
End Function

Function padStr(prefix,val)
	Dim l : l=Len(val)
	If l<1 Then
		padStr="000" &#038; val
	ElseIf l<2 Then
		padStr="00" &#038; val
	ElseIf l<3 Then
		padStr="0" &#038; val
	Else
		padStr="" &#038; val
	End If
End Function	

Main</pre>
]]></content:encoded>
			<wfw:commentRss>http://workshop.evolutionzone.com/2008/02/05/my-first-rhinoscript/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>JDIC: Embedding a Web browser in Java</title>
		<link>http://workshop.evolutionzone.com/2007/08/30/jdic-embedding-a-web-browser-in-java/</link>
		<comments>http://workshop.evolutionzone.com/2007/08/30/jdic-embedding-a-web-browser-in-java/#comments</comments>
		<pubDate>Thu, 30 Aug 2007 16:24:19 +0000</pubDate>
		<dc:creator>marius watz</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[Processing / Java]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web dev]]></category>
		<category><![CDATA[awt]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[embedding]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jdic]]></category>
		<category><![CDATA[pde]]></category>
		<category><![CDATA[processing.org]]></category>

		<guid isPermaLink="false">http://workshop.evolutionzone.com/2007/08/30/jdic-embedding-a-web-browser-in-java/</guid>
		<description><![CDATA[<a href="http://flickr.com/photos/watz/tags/internetexplorer/" title="Screenshot of IE">Screenshot of IE</a> running integrated with Processing and other AWT components. For a while I&#8217;ve been wondering if it couldn&#8217;t be useful to be able to render proper HTML from inside Processing. While Processing is excellent for realtime graphics, the typographic support is a little basic when faced with the task of designing a more [...]]]></description>
			<content:encoded><![CDATA[<div class="flickrImg"><img src='http://workshop.evolutionzone.com/wp-content/uploads/2007/08/070830_jdic_embedded_browse.jpg' alt='JDIC embedded browser engine' /></p>
<p><a href="http://flickr.com/photos/watz/tags/internetexplorer/" title="Screenshot of IE">Screenshot of IE</a> running integrated with Processing and other AWT components.</p></div>
<p>For a while I&#8217;ve been wondering if it couldn&#8217;t be useful to be able to render proper HTML from inside Processing. While Processing is excellent for realtime graphics, the typographic support is a little basic when faced with the task of designing a more complex layout. Rather than write a new library, why not just use a fast HTML engine?</p>
<p>While there are <a href="http://today.java.net/pub/a/today/2004/05/24/html-pt1.html" title="quite a few">quite a few</a> HTML rendering engines out there, not all are very complete or indeed very fast. This might be one of the cases where using native code makes sense. Both Internet Explorer and Mozilla offer ways of embedding their rendering engines through native bindings, and after a little googling I was able to find JDIC &#8211; the <a href="https://jdic.dev.java.net/" title="JDesktop Integration Components">JDesktop Integration Components</a> project.</p>
<p>JDIC aims to bring Java applications closer to feeling like &#8220;real&#8221; desktop apps. I&#8217;m not sure if that&#8217;s a battle I would have taken on myself, but in any case they have exactly what I needed: A simplified web browser ready for embedding, able to use either IE or Mozilla as engines. A little coding later and I had a hybrid Processing / AWT application running a web browser. It will even support Flash and Java content, provided that you&#8217;ve installed the proper plugins.</p>
<p><strong>The WebBrowser.setContent() function</strong> is perfect for loading your own machine-generated content, and events can be captured and processed appropriately. It would even be possible to have a hybrid application, with part of the interface being straight Processing and the rest AWT. I&#8217;m keen to try using this to create more complex on-screen layouts. HTML and CSS will always look much better than anything one could create using Swing.</p>
<p>See <a href="http://flickr.com/photos/watz/tags/internetexplorer/" title="Flickr">Flickr</a> for some screenshots.</p>
<div class="mediumtitle">Code &#8211; JDICsample.pde</div>
<p><span id="more-127"></span>To compile the following example, download the <a href="https://jdic.dev.java.net/" title="JDIC binary distribution">JDIC binary distribution</a> for your platform. Create a &#8220;code&#8221; subfolder in your sketch folder. Copy all the native files (jdic.jar, .dll files etc) into the code folder, and Processing should understand how to load the appropriate code. I&#8217;ve only tested it on PC, and it was fairly painless.</p>
<pre name="code" class="java">// JDICsample.pde
// Marius Watz - http://workshop.evolutionzone.com

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.net.URL;
import java.net.MalformedURLException;
import org.jdesktop.jdic.browser.*;

aBrowser browser;
long last;

// Set to true to demonstrate setContent instead of
// loading URLs.
boolean doRandomHTML=true;
String rndWords[];
int rndWordNum=0;

void setup() {
  size(200,200);
  browser=new aBrowser();
  browser.initPanel(1024,768);
  if(!doRandomHTML) browser.setURL("http://processing.org/");
  else initRandomText();
}

////////////////////////////////////////////
// Random HTML

void draw() {
  if(doRandomHTML &#038;&#038; (millis()-last>3000)) {
    String c1,c2,str;
    c1=colorToHex(random(200,255),random(150,200),0);
    c2=colorToHex(random(50,100),random(50,100),0);

    println(c1+" "+c2);
    str="<html><head></head>"+
      "<body style='background:#"+c1+"; margin:20px;'>";
    str+="
<div style='width:760px; font-size:"+random(12,72)+
      "px; color:#"+c2+";'>";
    for(int i=0; i< 30; i++) str+="

"+getRandLine()+"

";
    str+="</div>

</body></html>";

    browser.setContent(str);
    last=millis();
  }
}

String getRandLine() {
  String s="";

  int num=(int)random(30,50);
  for(int i=0; i< num; i++) s+=rndWords[(int)random(rndWordNum)]+" ";

  return s;
}

void initRandomText() {
  String lorem="Lorem ipsum dolor sit amet, pellentesque dolor"+
   "a vestibulum, hendrerit augue lectus in libero dictumst et,"+
   "condimentum gravida vestibulum litora semper. Lectus donec "+
   "neque nunc cras molestie est, vel et. Pede inventore vestibulum "+
   "justo est non nulla, lacus reiciendis rutrum phasellus nunc leo"+
   "natoque. Urna ac id justo luctus lorem, ante viverra nam nam "+
   "accusamus, aliquam metus vitae etiam sollicitudin erat ligula. "+
   "Sodales tortor amet felis, sit risus mus vel sodales, cursus "+
   "auctor, augue semper nam, diam eget. Vulputate ac viverra ante "+
   "ipsum tristique ullamcorper, lacus nostra pharetra libero provident.";

  rndWords=splitTokens(lorem);
  rndWordNum=rndWords.length;
}

public static String colorToHex(float r,float g,float b) {
  String s="";
  if(r<16) s+="0"+Integer.toHexString((int)r);
  else s+=Integer.toHexString((int)r);
  if(g<16) s+="0"+Integer.toHexString((int)g);
  else s+=Integer.toHexString((int)g);
  if(b<16) s+="0"+Integer.toHexString((int)b);
  else s+=Integer.toHexString((int)b);
  s=s.toUpperCase();
  return s;
}

////////////////////////////////////////////
// Convenience class for dealing with
// the embedded browser engine.

public class aBrowser {
  Frame frame;
  Panel panel;
  WebBrowser webBrowser;

  public aBrowser() {
    // Set engine to IE
    BrowserEngineManager mng=BrowserEngineManager.instance();
    mng.setActiveEngine(BrowserEngineManager.IE);
    webBrowser = new WebBrowser();
  }

  public void initPanel(int w,int h) {
    frame=new Frame("JIDCsample.pde");
    frame.setLocation(50,50);
    frame.setLayout(new BorderLayout());
    //frame.setUndecorated(true);

    //	 Handle window close requests
    frame.addWindowListener(new WindowAdapter( ) {
      public void windowClosing(WindowEvent e) {System.exit(0);}
    });

    panel = new Panel();
    panel.setLayout(new BorderLayout());
    panel.setPreferredSize(new Dimension(w, h));
    panel.add(webBrowser, BorderLayout.CENTER);
    frame.add(panel,BorderLayout.CENTER);

    Label status=new Label(
      "JDICsample.pde - embedded web browser.");
    status.setBackground(new Color(100,100,100));
    status.setForeground(new Color(255,255,255));
    status.setFont(new Font("Arial",Font.PLAIN,15));
    status.setSize(600, 20);

    frame.add(status,BorderLayout.SOUTH);
    frame.pack();
    frame.setVisible(true);
  }

  public void setContent(String htmlContent) {
    webBrowser.setContent(htmlContent);
  }

  public void setURL(String url) {
    try {
      webBrowser.setURL(new URL(url));
      // Print out debug messages in the command line.
      webBrowser.setDebug(false);
    }
    catch (MalformedURLException e) {
      System.out.println(e.getMessage());
      return;
    }
  }
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://workshop.evolutionzone.com/2007/08/30/jdic-embedding-a-web-browser-in-java/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Meta-Markets and deliciousChecker</title>
		<link>http://workshop.evolutionzone.com/2007/08/18/meta-markets-and-deliciouschecker/</link>
		<comments>http://workshop.evolutionzone.com/2007/08/18/meta-markets-and-deliciouschecker/#comments</comments>
		<pubDate>Sat, 18 Aug 2007 17:07:47 +0000</pubDate>
		<dc:creator>marius watz</dc:creator>
				<category><![CDATA[Processing / Java]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web dev]]></category>

		<guid isPermaLink="false">http://workshop.evolutionzone.com/2007/08/18/meta-markets-and-deliciouschecker/</guid>
		<description><![CDATA[Burak Arikan et. al: Meta-Markets I&#8217;ve recently been playing with the excellent <a href="http://meta-markets.com/" title="Meta-Markets.com">Meta-Markets.com</a> site set up by the talented <a href="http://burak-arikan.com/" title="Burak Arikan">Burak Arikan</a>. Essentially Meta-Markets is a virtual stock market for trading socially networked capital. If you have a hot blog, a popular Flickr stream or were the first poster of an essential del.icio.us bookmark you can [...]]]></description>
			<content:encoded><![CDATA[<div class="flickrImg"><a href='http://www.meta-markets.com'><img src='http://workshop.evolutionzone.com/wp-content/uploads/2007/08/070818_metamarkets.gif' alt='Meta-Markets.com' /></a></p>
<p><a href='http://www.meta-markets.com'>Burak Arikan et. al: Meta-Markets</a></div>
<p>I&#8217;ve recently been playing with the excellent <a href="http://meta-markets.com/" title="Meta-Markets.com">Meta-Markets.com</a> site set up by the talented <a href="http://burak-arikan.com/" title="Burak Arikan">Burak Arikan</a>. Essentially Meta-Markets is a virtual stock market for trading socially networked capital. If you have a hot blog, a popular Flickr stream or were the first poster of an essential del.icio.us bookmark you can offer it for trade through an IPO, just as if it were a company. </p>
<p>Each user starts out with a capital of 25 &#8220;buraks&#8221;, which can be used to buy shares in traded commodities in any of the 6 given &#8220;markets&#8221;: Flickr, Facebook, del.icio.us, Feedburner, Digg and YouTube. By offer an IPO of your own social capital you accumulate value that can be used for further trade. Ultimately the system will also include auctions and payment of dividends to stock holders.</p>
<p>You can make an IPO of any del.icio.us bookmarks of which you were the first poster. Finding out exactly which these are can be a drag, since del.icio.us does not provide an overview of this info. Even using the del.icio.us API won&#8217;t give you the needed information, the only way is to use the <a href="http://del.icio.us/url/" title="del.icio.us URL history">del.icio.us URL history</a> feature. Needless to say, this can get tedious when done manually.</p>
<p><strong>To address the issue I&#8217;ve hacked up a tool I call deliciousChecker.</strong> It downloads your bookmarks and then proceeds to check their posting history using HTTP calls to the history page. del.icio.us will block offensive applications that make repeated API calls, so deliciousChecker only downloads the bookmarks when there&#8217;s been an update. There is also a 15 second default delay between HTTP calls, it&#8217;s not recommended to go lower than this since Yahoo will think you&#8217;re a denial-of-service attack.</p>
<p>The code is written in Processing using the <a href="http://sourceforge.net/projects/delicious-java/" title="delicious-java">delicious-java</a> and <a href="http://commons.apache.org/httpclient/" title="Apache Commons HttpClient">Apache Commons HttpClient</a> libraries. The source is included, but for non-Processing users I&#8217;ve also provided precompiled applications for Mac, Windows and Linux. You must edit the &#8220;delicious.conf&#8221; config file to add your username and password. </p>
<p>The application can be exited safely by pressing the escape key. It also auto-saves the database with regular intervals. Upon exit (whether from interruption or upon completion) the application writes a HTML file with your bookmarks, indicating which ones were first posted by you as well as how many other users have saved them.</p>
<div class="mediumtitle">Downloads</div>
<ul>
<li><a href="http://workshop.evolutionzone.com/files/deliciousChecker02.zip" title="deliciousChecker02.zip">deliciousChecker02.zip</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://workshop.evolutionzone.com/2007/08/18/meta-markets-and-deliciouschecker/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>More online storage&#8230;</title>
		<link>http://workshop.evolutionzone.com/2007/07/18/more-online-storage/</link>
		<comments>http://workshop.evolutionzone.com/2007/07/18/more-online-storage/#comments</comments>
		<pubDate>Wed, 18 Jul 2007 16:24:13 +0000</pubDate>
		<dc:creator>marius watz</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Web dev]]></category>

		<guid isPermaLink="false">http://workshop.evolutionzone.com/2007/07/18/more-online-storage/</guid>
		<description><![CDATA[Following up on my post a few days ago about <a href="http://workshop.evolutionzone.com/2007/07/09/online-storage-uploading-woes/" title="online storage">online storage</a>: I just rechecked the <a href="http://www.box.net/info/pricing-plans" title="Box.net web site">Box.net web site</a> only to discover that they have increased their prices rather than drop them. 5 GB is now $7.95/month or $79.95/year. 15 GB is $19.95/month or $199.95 per year. I might be willing to pay that &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Following up on my post a few days ago about <a href="http://workshop.evolutionzone.com/2007/07/09/online-storage-uploading-woes/" title="online storage">online storage</a>: I just rechecked the <a href="http://www.box.net/info/pricing-plans" title="Box.net web site">Box.net web site</a> only to discover that they have increased their prices rather than drop them. 5 GB is now $7.95/month or $79.95/year. 15 GB is $19.95/month or $199.95 per year. I might be willing to pay that &#8211; if we were talking about 100 GB of storage.</p>
<p>I&#8217;ve looked around at other solutions, but haven&#8217;t found any that seem really appealing. I&#8217;d be happy to hear suggestions or any feedback about your own experiences.</p>
]]></content:encoded>
			<wfw:commentRss>http://workshop.evolutionzone.com/2007/07/18/more-online-storage/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

