<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-19366224</id><updated>2011-11-20T15:42:21.190+02:00</updated><category term='isometric'/><category term='mediawiki'/><category term='Scala'/><category term='Skycastle'/><category term='Rasterfun'/><category term='python'/><category term='FlowPaint'/><category term='RepRap'/><category term='howto'/><category term='hudson'/><category term='3D Printing'/><category term='procedural texture'/><category term='Landscape Generation'/><category term='geotools'/><title type='text'>Building Better Worlds</title><subtitle type='html'>Free Software Development, 3D printing, Pirate politics</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.zzorn.net/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-19366224.post-5092204057402664699</id><published>2010-06-08T15:11:00.001+03:00</published><updated>2010-06-08T15:11:59.845+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RepRap'/><category scheme='http://www.blogger.com/atom/ns#' term='3D Printing'/><title type='text'>Design for RepRap Mendel inspired wooden 3D printer</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_IOgy5HOdN2s/TA4nsBeeejI/AAAAAAAABd8/c-Re2Dr5JBE/s1600/funrap-01.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_IOgy5HOdN2s/TA4nsBeeejI/AAAAAAAABd8/c-Re2Dr5JBE/s320/funrap-01.png" /&gt;&lt;/a&gt;&lt;br /&gt;I've been working on a simple design for a &lt;a href="http://reprap.org/wiki/RepRapTwoMendel"&gt;RepRap Mendel&lt;/a&gt; inspired 3D printer, buildable from wood and metal beams (I've abandoned my &lt;a href="http://www.zzorn.net/2009/04/boxed-reprap-design-03.html"&gt;previous  boxed reprap&lt;/a&gt; design for now).&amp;nbsp; The design goals are:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Keep the design simple&lt;/li&gt;&lt;li&gt;Keep construction easy&lt;/li&gt;&lt;li&gt;Keep material costs low&lt;/li&gt;&lt;li&gt;Keep the machine functional&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I used &lt;a href="http://openscad.org/"&gt;OpenSCAD&lt;/a&gt; for the design.&amp;nbsp; It's a CAD program that creates the model from a script.&amp;nbsp; This allowed me to make the design parametrized, allowing you to specify the size of the used wooden beams, motor type, rod diameter, and target size of the machine as parameters.&amp;nbsp; My script even prints out a &lt;a href="http://pastebin.com/4ctH4nCd"&gt;part list&lt;/a&gt; with the measures of each part and the calculated print volume (unfortunately it isn't possible to calculate hole drilling positions).&lt;br /&gt;&lt;br /&gt;Not counting fasteners, bearings, or the print head, the current design has 40 parts; 16 lengths of wooden beam, 6 threaded rods, 6 smooth rods, 5 pulleys, 3 belts, 3 motors, and the print surface.&amp;nbsp; The maximum print volume for the current default configuration is 25*20*20 cm.&lt;br /&gt;&lt;br /&gt;By tilting the side support rods inwards towards the top I hope to increase the resistance against sideways shearing forces. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I haven't designed the print head yet, I'll probably take a closer look at what &lt;a href="http://hydraraptor.blogspot.com/"&gt;nophead&lt;/a&gt;, &lt;a href="http://www.thingiverse.com/thing:1794"&gt;wade&lt;/a&gt;, and the &lt;a href="http://reprap.org/wiki/Extruder/Mendel"&gt;mendel&lt;/a&gt; and &lt;a href="http://www.makerbot.com/"&gt;makerbot&lt;/a&gt; teams have achieved in that area, and maybe just go with pre-printed parts for it.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The OpenSCAD files are available on &lt;a href="http://github.com/zzorn/FunRap"&gt;github&lt;/a&gt;, feel free to play around and borrow from them.&amp;nbsp; Once I've built the design and verified that it works well, I'll upload it to &lt;a href="http://www.thingiverse.com/"&gt;Thingiverse&lt;/a&gt;.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;Additional screenshots:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_IOgy5HOdN2s/TA4nxiISDVI/AAAAAAAABeE/AfA7UhdJdbQ/s1600/funrap-02.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_IOgy5HOdN2s/TA4nxiISDVI/AAAAAAAABeE/AfA7UhdJdbQ/s320/funrap-02.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_IOgy5HOdN2s/TA4n1vb8uWI/AAAAAAAABeM/LToX3GkKqug/s1600/funrap-03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_IOgy5HOdN2s/TA4n1vb8uWI/AAAAAAAABeM/LToX3GkKqug/s320/funrap-03.png" /&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/_IOgy5HOdN2s/TA4n4S_gkqI/AAAAAAAABeU/ThAsW0msh7s/s1600/funrap-04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_IOgy5HOdN2s/TA4n4S_gkqI/AAAAAAAABeU/ThAsW0msh7s/s320/funrap-04.png" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19366224-5092204057402664699?l=www.zzorn.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.zzorn.net/feeds/5092204057402664699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19366224&amp;postID=5092204057402664699' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/5092204057402664699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/5092204057402664699'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/2010/06/design-for-reprap-mendel-inspired.html' title='Design for RepRap Mendel inspired wooden 3D printer'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_IOgy5HOdN2s/TA4nsBeeejI/AAAAAAAABd8/c-Re2Dr5JBE/s72-c/funrap-01.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19366224.post-3911739634372948147</id><published>2009-11-26T00:52:00.006+02:00</published><updated>2009-11-26T01:27:10.338+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><title type='text'>Setting up Hudson on port 80 on a Debian or Ubuntu machine</title><content type='html'>To my delight I discovered there is a debian package of &lt;a href="http://hudson-ci.org/"&gt;Hudson&lt;/a&gt; nowdays.&amp;nbsp; Installing it was pretty straightfoward, but I wanted to configure hudson to be visible on my server at myserver/hudson, instead of myserver:8080, for a &lt;a href="http://www.sgine.org/"&gt;project&lt;/a&gt; I'm in.&amp;nbsp; That turned out to be quite a bit more complicated, but I got it done in the end and documented the process here for others and my own future reference.&lt;br /&gt;&lt;br /&gt;My server is running Ubuntu 8.4 Hardy, but the instructions are relatively generic.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Installing Hudson deb package&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Hudson package is not in the default repositories, but that wouldn't be too useful anyway as it would be hard to keep up with the frequent Hudson releases.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://hudson-ci.org/debian/"&gt;Installation instructions for installing the deb package&lt;/a&gt;, or see &lt;a href="http://wiki.hudson-ci.org/display/HUDSON/Installing+Hudson+on+Ubuntu"&gt;the wiki page for more discussion&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;By default the hudson deb package will install hudson in /var/lib/hudson, which also contains a config.xml with some options.&amp;nbsp; Command line options can be found in /etc/default/hudson.&amp;nbsp; The hudson log is in /var/log/hudson/hudson.log.&amp;nbsp; You may want to run&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tail -f /var/log/hudson/hudson.log&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;while debugging the installation.&lt;br /&gt;&lt;br /&gt;You can start Hudson with:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sudo /etc/init.d/hudson start&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Hudson should now be running on &lt;a href="http://localhost:8080/"&gt;port 8080 of your machine&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Remember to register a user and set up access control if you are running the machine on the public internet. &lt;br /&gt;&lt;br /&gt;If needed, you can stop Hudson with:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sudo /etc/init.d/hudson stop &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Hudson on port 80&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To set up Hudson to run on port 80 (the normal http port) instead of 8080 you could edit /etc/default/hudson and add --httpPort=80 to HUDSON_ARGS.&amp;nbsp; However, running a service on any port below 1024 requires the service to be run as root on Linux, which is not such a good idea for a compex Java application.&amp;nbsp; If you try to start hudson with the --httpPort=80 argument in /etc/default/hudson, you'll get a "java.net.BindException: Permission denied" exception in the log.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.coderanch.com/t/109718/Linux-UNIX/Linux-Tomcat-java-net-BindException#554048"&gt;It appears&lt;/a&gt; the standard procedure is to run apache (or another webserver), and configure it to hand over processing of a certain path to Hudson.&amp;nbsp; &lt;a href="http://httpd.apache.org/docs/2.2/mod/mod_proxy.html"&gt;Mod_proxy&lt;/a&gt; &lt;a href="http://rimuhosting.com/mod_jk2_and_mod_proxy_ajp.jsp#mod_proxy"&gt;seems&lt;/a&gt; to be the way to go.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hudson Prefix&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;We want to see hudson running on servername/hudson/.&amp;nbsp; The first step is to change the prefix hudson uses, so we get from servername:8080/ to servername:8080/hudson/.&amp;nbsp; To do that, add&lt;br /&gt;&amp;nbsp;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --prefix=/hudson&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;to the HUDSON_ARGS string in  /etc/default/hudson and restart Hudson with e.g.:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sudo /etc/init.d/hudson force-reload&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Apache&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If you don't have apache installed, use&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sudo apt-get install apache2&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;to install it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;mod_proxy&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In many distributions it should be included by default with apache, but you may need to install the mod_proxy module separately:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sudo apt-get install libapache2-mod-proxy-html&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In any case you need to enable it with:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sudo a2enmod proxy&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sudo a2enmod proxy_http&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;By default it is configured to deny all proxying, so edit /etc/apache2/mods enabled/proxy.conf to allow proxying:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProxyRequests Off&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Proxy *&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; Order deny,allow&lt;proxy *=""&gt;&lt;/proxy&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; Allow from all&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Proxy&amp;gt; &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;[Note that messing up proxy configuration could leave your server as an &lt;a href="http://en.wikipedia.org/wiki/Open_proxy"&gt;open proxy&lt;/a&gt;, so proceed at your own risk.&amp;nbsp; I'm just copy pasting code from documentation without fully understanding it...] &lt;br /&gt;&lt;br /&gt;In your /etc/apache2/sites-enabled/ directory there should be some file like 000-default or similar, with settings for the site.&amp;nbsp; Add proxy configurations in it for mapping the /hudson path on the website to localhost:8080/hudson:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProxyPass /hudson http://127.0.0.1:8080/hudson&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;You can of course use some other path than /hudson too, in that case remember to also use it with the Hudson --prefix parameter above.&lt;br /&gt;&lt;br /&gt;In my case the file looks something like:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;VirtualHost *&amp;gt;&lt;virtualhost *=""&gt;&amp;nbsp;&lt;/virtualhost&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;virtualhost *=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # various stuff ....&lt;/virtualhost&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;virtualhost *=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;ProxyPass /hudson http://127.0.0.1:8080/hudson&lt;/b&gt;&lt;/virtualhost&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;You can stop and restart apache to enable the new configuration, or just use:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /etc/init.d/apache2 force-reload&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;And you can follow the apache logs for troubleshooting by running&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tail -f /var/log/apache2/error.log&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Good luck, and feel free to suggest improvements to this configuration in the comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19366224-3911739634372948147?l=www.zzorn.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.zzorn.net/feeds/3911739634372948147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19366224&amp;postID=3911739634372948147' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/3911739634372948147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/3911739634372948147'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/2009/11/setting-up-hudson-on-port-80-on-debian.html' title='Setting up Hudson on port 80 on a Debian or Ubuntu machine'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19366224.post-899170419001995954</id><published>2009-05-25T12:57:00.006+03:00</published><updated>2009-05-25T14:42:10.615+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><title type='text'>Configuring irssi with UTF-8 and spell checking</title><content type='html'>I'm switching to using IRC with &lt;a href="http://www.google.com/search?q=irssi+in+screen"&gt;irssi running in a screen instance&lt;/a&gt; on my virtual server.  The advantage over running xchat or similar on the desktop is that one can connect from anywhere and disconnect in between without loosing the backlog.&lt;br /&gt;&lt;br /&gt;With &lt;a href="http://scripts.irssi.org/"&gt;scripts for irssi&lt;/a&gt; it's possible to get most of the comforts of a GUI client, such as nick coloring (&lt;a href="http://scripts.irssi.org/scripts/nickcolor.pl"&gt;nickcolor.pl&lt;/a&gt;) and spell checking (&lt;a href="http://scripts.irssi.org/scripts/spellcheck.pl"&gt;spellcheck.pl&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;I had some problems getting nordic characters to work, but the solution was to switch everything to utf-8:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The terminal&lt;/li&gt;&lt;ul&gt;&lt;li&gt;In gnome terminal menu, &lt;span style="font-weight: bold;"&gt;Terminal-&gt;Set character encoding-&gt;UTF-8&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;The remote environment&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Add &lt;code style="font-weight: bold;"&gt;export LANG en_GB.UTF-8&lt;/code&gt; to the end of ~/.bashrc&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;The screen session when starting irssi&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;code style="font-weight: bold;"&gt;screen -SU irc irssi&lt;/code&gt;  (creates a screen instance named 'irc' using UTF-8 that runs irssi)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;In irssi&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;code style="font-weight: bold;"&gt;/set term_type utf-8&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;So not really out-of-the-box as in some GUI clients, but hopefully a bit easier to google now.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://scripts.irssi.org/html/spellcheck.pl.html"&gt;spellcheck.pl&lt;/a&gt; script didn't work with UTF-8 out of the box either, aspell needs the --encoding=UTF-8 parameter passed to it to work with non-english characters.&lt;br /&gt;&lt;br /&gt;To install spellcheck.pl for irssi with utf support:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Log in to the machine you run irssi on&lt;/li&gt;&lt;li&gt;Install aspell:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;sudo apt-get install aspell libtext-aspell-perl aspell-en&lt;/span&gt; aspell-de aspell-fi # and so on for the languages that you want spell check dictionaries installed for&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;cd ~/.irssi/scripts&lt;/span&gt;  # if the scripts directory doesn't exists, create it&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;wget http://scripts.irssi.org/scripts/spellcheck.pl&lt;/span&gt;   #downloads the original spellcheck.pl&lt;/li&gt;&lt;li&gt;Edit spellcheck.pl and find the line &lt;pre&gt;    &lt;span class="i"&gt;$speller&lt;/span&gt;{&lt;span class="i"&gt;$_&lt;/span&gt;[&lt;span class="n"&gt;0&lt;/span&gt;]}&lt;span class="i"&gt;-&gt;set_option&lt;/span&gt;&lt;span class="s"&gt;(&lt;/span&gt;&lt;span class="q"&gt;'sug-mode'&lt;/span&gt;&lt;span class="cm"&gt;,&lt;/span&gt; &lt;span class="q"&gt;'fast'&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt; &lt;span class="k"&gt;or&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;undef&lt;/span&gt;&lt;span class="sc"&gt;;&lt;span style="font-family:Georgia,serif;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="sc"&gt;&lt;span style="font-family:Georgia,serif;"&gt;Add a new line after it and save:&lt;/span&gt;&lt;/span&gt;&lt;pre&gt;    &lt;span style="font-weight: bold;" class="i"&gt;$speller&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;{&lt;/span&gt;&lt;span style="font-weight: bold;" class="i"&gt;$_&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="font-weight: bold;" class="n"&gt;0&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;]}&lt;/span&gt;&lt;span style="font-weight: bold;" class="i"&gt;-&gt;set_option&lt;/span&gt;&lt;span style="font-weight: bold;" class="s"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold;" class="q"&gt;'encoding'&lt;/span&gt;&lt;span style="font-weight: bold;" class="cm"&gt;,&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;" class="q"&gt;'utf-8'&lt;/span&gt;&lt;span style="font-weight: bold;" class="s"&gt;)&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;" class="k"&gt;or&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;" class="k"&gt;return&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;" class="k"&gt;undef&lt;/span&gt;&lt;span style="font-weight: bold;" class="sc"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="sc"&gt;In irssi, write&lt;span style="font-weight: bold;"&gt; /script load spellcheck.pl&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="sc"&gt;You can specify what language spellchecking should be used in different channels by typing &lt;span style="font-weight: bold;"&gt;/set spellcheck_languages NetworkName/#channelName/TwoLetterLanguageCode&lt;/span&gt;  in irssi.  Default seems to be english.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Update:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.nathancoad.com/aspeller.html"&gt;Aspeller&lt;/a&gt; seems to be a bit more user friendly spellchecker, as it doesn't spam the window with spelling suggestions, just highlights the misspelled words.  Unfortunately it doesn't allow specifying channel specific languages.  There's also &lt;a href="http://scripts.irssi.org/html/spell.pl.html"&gt;spell.pl&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19366224-899170419001995954?l=www.zzorn.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.zzorn.net/feeds/899170419001995954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19366224&amp;postID=899170419001995954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/899170419001995954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/899170419001995954'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/2009/05/configuring-irssi-with-utf-8-and-spell.html' title='Configuring irssi with UTF-8 and spell checking'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19366224.post-2498062115315071172</id><published>2009-04-18T14:18:00.010+03:00</published><updated>2009-04-18T15:05:32.712+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RepRap'/><category scheme='http://www.blogger.com/atom/ns#' term='3D Printing'/><title type='text'>Boxed Reprap Design 0.3</title><content type='html'>Here's screenshots of latest version of the boxed &lt;a href="http://www.reprap.org/"&gt;RepRap&lt;/a&gt; design &lt;a href="http://www.zzorn.net/2009/03/putting-reprap-in-box-with-mill.html"&gt;I've been working on&lt;/a&gt;.  It has some major differences from the last version, such as a completely mobile toolhead platform, and a fixed bed.  The electronics were also moved on top instead of underneath.&lt;br /&gt;&lt;br /&gt;First an overview shot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_IOgy5HOdN2s/Sem5iz8Mg8I/AAAAAAAAAmk/fvlisqZrAPI/s1600-h/boxrap-0.3-overview.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 345px;" src="http://3.bp.blogspot.com/_IOgy5HOdN2s/Sem5iz8Mg8I/AAAAAAAAAmk/fvlisqZrAPI/s400/boxrap-0.3-overview.png" alt="" id="BLOGGER_PHOTO_ID_5325992042051699650" border="0" /&gt;&lt;/a&gt;A 50*50 cm acrylic door covers the front.  The upper front panel hides the electronics, and can have holes added for status LEDs and the like.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_IOgy5HOdN2s/Sem5oF0UGnI/AAAAAAAAAms/owtAkJuhvYM/s1600-h/boxrap-0.3-top.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 354px;" src="http://4.bp.blogspot.com/_IOgy5HOdN2s/Sem5oF0UGnI/AAAAAAAAAms/owtAkJuhvYM/s400/boxrap-0.3-top.png" alt="" id="BLOGGER_PHOTO_ID_5325992132749826674" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The top also contains the plastic feedstock, and has room for additions (such as a small dust extraction system for milling for example).  The heat generated by the electronics and the ATX power source is fed into the box, to help keep up the ambient temperature to enable warp-free printing.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_IOgy5HOdN2s/Sem5zhgwESI/AAAAAAAAAm8/AW3MsE72bpE/s1600-h/boxrap-0.3-y.png"&gt; &lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_IOgy5HOdN2s/Sem5t-RdiNI/AAAAAAAAAm0/gCiKHnSmU8I/s1600-h/boxrap-0.3-x.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 393px; height: 400px;" src="http://4.bp.blogspot.com/_IOgy5HOdN2s/Sem5t-RdiNI/AAAAAAAAAm0/gCiKHnSmU8I/s400/boxrap-0.3-x.png" alt="" id="BLOGGER_PHOTO_ID_5325992233803811026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The above picture shows the Y assembly, sliding back and forth on skateboard bearings running along aluminum L beams.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_IOgy5HOdN2s/Sem5zhgwESI/AAAAAAAAAm8/AW3MsE72bpE/s1600-h/boxrap-0.3-y.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 386px; height: 400px;" src="http://2.bp.blogspot.com/_IOgy5HOdN2s/Sem5zhgwESI/AAAAAAAAAm8/AW3MsE72bpE/s400/boxrap-0.3-y.png" alt="" id="BLOGGER_PHOTO_ID_5325992329162527010" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The X assembly.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_IOgy5HOdN2s/Sem5t-RdiNI/AAAAAAAAAm0/gCiKHnSmU8I/s1600-h/boxrap-0.3-x.png"&gt;&lt;br /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_IOgy5HOdN2s/Sem54Jd_oYI/AAAAAAAAAnE/CcAEJHwlxb8/s1600-h/boxrap-0.3-z.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 266px; height: 400px;" src="http://3.bp.blogspot.com/_IOgy5HOdN2s/Sem54Jd_oYI/AAAAAAAAAnE/CcAEJHwlxb8/s400/boxrap-0.3-z.png" alt="" id="BLOGGER_PHOTO_ID_5325992408607859074" border="0" /&gt;&lt;/a&gt;And the Z assembly, without mounting holes for the toolhead yet.  I was thinking of some kind of automatic head switching system, but decided to just build for manual switching using wingnuts to start with.&lt;br /&gt;&lt;br /&gt;In total, the effective work area is around 30*30*15 cm, and the external dimension is around 50*60*60 cm.&lt;br /&gt;&lt;br /&gt;I've got the tools and materials (although the Plywood I got is a bit bad quality - don't use class C and D plywood for this kind of projects), so I'll start cutting up and putting together the pieces now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19366224-2498062115315071172?l=www.zzorn.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.zzorn.net/feeds/2498062115315071172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19366224&amp;postID=2498062115315071172' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/2498062115315071172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/2498062115315071172'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/2009/04/boxed-reprap-design-03.html' title='Boxed Reprap Design 0.3'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_IOgy5HOdN2s/Sem5iz8Mg8I/AAAAAAAAAmk/fvlisqZrAPI/s72-c/boxrap-0.3-overview.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19366224.post-4124141083854573458</id><published>2009-04-03T14:30:00.006+03:00</published><updated>2009-04-03T15:11:24.834+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FlowPaint'/><category scheme='http://www.blogger.com/atom/ns#' term='Rasterfun'/><category scheme='http://www.blogger.com/atom/ns#' term='Skycastle'/><title type='text'>Flowpaint 0.2 released</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_IOgy5HOdN2s/SdX1qQVY2bI/AAAAAAAAAa8/GEsPl9DNQUo/s1600-h/Brushes+in+Flowpaint+0.2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 340px;" src="http://1.bp.blogspot.com/_IOgy5HOdN2s/SdX1qQVY2bI/AAAAAAAAAa8/GEsPl9DNQUo/s400/Brushes+in+Flowpaint+0.2.png" alt="" id="BLOGGER_PHOTO_ID_5320428641096096178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Last weekend I released version 0.2 of Flowpaint, my open source paint program project.&lt;br /&gt;&lt;br /&gt;Here's the short summary:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;Flowpaint version 0.2 is now released! It adds undo, detailed parameters for brushes, a 'recent brushes' - feature, dramatical speedup by dynamically compiling code, and a new set of default brushes. In addition tablets with pressure are now supported also with the Java Webstart version. Flowpaint is still in Beta phase, use with care.&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;And here's the &lt;a href="http://www.flowpaint.org/2008/12/flowpaint-02-beta-released.html"&gt;full release announcement and download links&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I was demonstrating it live at a &lt;a href="http://2009.tamperekuplii.fi/"&gt;comics festival in Tampere&lt;/a&gt; on the weekend, in between manning the &lt;a href="http://www.piraattipuolue.fi/english"&gt;Pirate Party&lt;/a&gt; table there.  It was a nice event, with a quite good match between the target audience of Flowpaint and the people there (our table was in the room for independent and self-publishing comic artists).&lt;br /&gt;&lt;br /&gt;There's several features I'd like to add that I think could be useful for editing comics in Flowpaint.  One such is the ability to compose one picture with several frames that show other pictures that are updated when the original pictures are updated.  This concept could also be used for things like brush strokes textured with a picture.  In addition, tools like procedural brushes or images could be utilized for creating picture components once and re-rendering them with different parameters to quickly create unique detailed backgrounds (simple examples would be a forest or city composed of randomly placed tree / house outline images).&lt;br /&gt;&lt;br /&gt;First I have to get more of the basic features implemented and working though.  Layers and picture loading are being requested in the poll on the &lt;a href="http://www.flowpaint.org/"&gt;Flowpaint homepage&lt;/a&gt;  (the &lt;a href="http://code.google.com/p/flowpaint/wiki/PollResults"&gt;results from the previous poll&lt;/a&gt; are archived in the wiki).  The rendering quality is also lacking, brush strokes look a bit jagged, and there's some artifacts when a brush stroke turns.  I'm going to extract the rendering logic into a separate library, &lt;a href="http://code.google.com/p/rasterfun/"&gt;Rasterfun.&lt;/a&gt;  It will allow loading and displaying Flowpaint images also in other (Java/Scala) applications.  One other usage for it could be to render fractal / procedural landscape heightmaps for games (such as my &lt;a href="http://www.skycastle.org/"&gt;Skycastle&lt;/a&gt; project) - in this case Flowpaint could be used as a map editor.  This requires defining a good file format to represent Flowpaint images in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19366224-4124141083854573458?l=www.zzorn.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.zzorn.net/feeds/4124141083854573458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19366224&amp;postID=4124141083854573458' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/4124141083854573458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/4124141083854573458'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/2009/04/flowpaint-02-released.html' title='Flowpaint 0.2 released'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_IOgy5HOdN2s/SdX1qQVY2bI/AAAAAAAAAa8/GEsPl9DNQUo/s72-c/Brushes+in+Flowpaint+0.2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19366224.post-8724520763959666786</id><published>2009-03-11T21:52:00.014+02:00</published><updated>2009-03-17T15:02:53.832+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RepRap'/><category scheme='http://www.blogger.com/atom/ns#' term='3D Printing'/><title type='text'>Putting a RepRap in a Box with a Mill</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_IOgy5HOdN2s/SbgjPjOYIbI/AAAAAAAAAVg/muCQsJZWb9Q/s1600-h/RepRap_at_Pirateparty_booth_on_AltParty2008.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://1.bp.blogspot.com/_IOgy5HOdN2s/SbgjPjOYIbI/AAAAAAAAAVg/muCQsJZWb9Q/s400/RepRap_at_Pirateparty_booth_on_AltParty2008.jpg" alt="" id="BLOGGER_PHOTO_ID_5312034510544052658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I ordered the &lt;a href="http://bitsfrombytes.com/"&gt;BitsFromBytes&lt;/a&gt; &lt;a href="http://reprap.org"&gt;RepRap&lt;/a&gt; kit v 2.0 last summer.  I put it together just in time for the &lt;a href="http://www.altparty.org/2008/index.html"&gt;Alt Party 2008&lt;/a&gt;, and even got it to extrude a bit.  Above is a picture of it at the &lt;a href="http://www.piraattipuolue.fi/english"&gt;Pirate Party&lt;/a&gt; booth, nicely illuminated by a 12V RGB LED rail.  Thanks to the guys at the party who helped me to wire up the heater and test it!&lt;br /&gt;&lt;br /&gt;However, there were multiple problems with it, and I shelved it for half a year and went to work on &lt;a href="http://www.flowpaint.org/"&gt;other projects&lt;/a&gt; (the major problem was that I had decided to try using ball-chain with custom drive wheels instead of the standard (but expensive) drive belt)&lt;br /&gt;&lt;br /&gt;I took a look at it again recently, but decided to try building an own design from scratch instead of fixing it (yes I know, probably more work, but I'm a designer at heart :) ).  Hopefully some useful insights come from this new project.&lt;br /&gt;&lt;br /&gt;My goal is to create a simple design that can be easily constructed with a small amount of standard parts from a well sorted hardware store (plus electronics ordered over Internet from e.g. the &lt;a href="http://www.rrrf.org/"&gt;rrrf store&lt;/a&gt;). The design should be relatively modular, with possibility to easily remove the different axis assemblies and toolheads from the box for maintenance and upgrades (the laser cut RepRap designs take a lot of time to put together, and to take apart and put back together if you want to change some part..).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_IOgy5HOdN2s/Sbgh54VDBLI/AAAAAAAAAVQ/Ync4bs7eoSU/s1600-h/box-v1-outside.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 395px;" src="http://1.bp.blogspot.com/_IOgy5HOdN2s/Sbgh54VDBLI/AAAAAAAAAVQ/Ync4bs7eoSU/s400/box-v1-outside.png" alt="" id="BLOGGER_PHOTO_ID_5312033038740423858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I decided to put the 3D Printer in a box, as it seems that &lt;a href="http://blog.reprap.org/2008/12/roast-in-bag-duck.html"&gt;printing in a hot ambient temperature&lt;/a&gt; around 50-70 degrees Celsius eliminates the warping of plastics. A box also provides a sturdier frame, which could allow operating a CNC mill with the same positioning system, opening up an additional range of materials, as well as circuit board milling and drilling. The box also neatly contains the unit together with fumes and dust, making it nicer to use in a home.&lt;br /&gt;&lt;br /&gt;I made this initial design in &lt;a href="http://sketchup.google.com/"&gt;SketchUp&lt;/a&gt;, which is an excellent tool for this type of work (unfortunately I could only get version 5 to work with Wine under Ubuntu).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_IOgy5HOdN2s/Sbgi_3c51DI/AAAAAAAAAVY/9PNa-MjkpVM/s1600-h/box-v1-box.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 291px; height: 320px;" src="http://3.bp.blogspot.com/_IOgy5HOdN2s/Sbgi_3c51DI/AAAAAAAAAVY/9PNa-MjkpVM/s320/box-v1-box.png" alt="" id="BLOGGER_PHOTO_ID_5312034241095783474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The box itself can be made from MDF board or Plywood with 3 cm wide wooden beams to support it.  It's a bit small in this design, I'm planning to make it 50 cm wide and 60 cm deep and high in the next design iteration.  I placed the stepper motors outside the box, as they are rated for at most 80 degrees celsius.&lt;br /&gt;&lt;br /&gt;I use threaded rod to drive all three axes in this design, it's probably ok for milling, but maybe somewhat slow for 3D printing. On the positive side, the wooden box design makes it a bit easier to switch to a belt drive later if needed. Another alternative would be to use larger diameter threaded rod with some gears to speed it up.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_IOgy5HOdN2s/Sbgshknq-GI/AAAAAAAAAWA/sDYZr5urMtM/s1600-h/box-v1-xyz.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 360px; height: 400px;" src="http://3.bp.blogspot.com/_IOgy5HOdN2s/Sbgshknq-GI/AAAAAAAAAWA/sDYZr5urMtM/s400/box-v1-xyz.png" alt="" id="BLOGGER_PHOTO_ID_5312044715760875618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The Z motor movement is transmitted through a bevel gear that slides along a rotating square-profile aluminum extrusion. I'm not sure how well that would work, and it would also require a custom-made part, so I will probably change it in later design iterations.  This picture should illustrate it:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_IOgy5HOdN2s/Sbg6lr7plfI/AAAAAAAAAWI/wORE4B-rgGs/s1600-h/box-v1-z-closeup.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 288px;" src="http://2.bp.blogspot.com/_IOgy5HOdN2s/Sbg6lr7plfI/AAAAAAAAAWI/wORE4B-rgGs/s400/box-v1-z-closeup.png" alt="" id="BLOGGER_PHOTO_ID_5312060179605984754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The stepper motors will be attached directly to the lead screws like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_IOgy5HOdN2s/SbglXVr446I/AAAAAAAAAV4/HqbnAOZ0tC4/s1600-h/box-v1-stepper-coupling.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 262px;" src="http://4.bp.blogspot.com/_IOgy5HOdN2s/SbglXVr446I/AAAAAAAAAV4/HqbnAOZ0tC4/s320/box-v1-stepper-coupling.png" alt="" id="BLOGGER_PHOTO_ID_5312036843371946914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A possible improvement could be to &lt;a href="http://buildyourcnc.com/diycoupling.aspx"&gt;add smaller diameter aluminum tubing&lt;/a&gt; to the stepper motor end to achieve a tighter fit.&lt;br /&gt;&lt;br /&gt;It's not visible in the pictures, but I'm planning to use skateboard bearings attached to an L shaped aluminum extrusion for the linear bearings, &lt;a href="http://buildyourcnc.com/step1.aspx"&gt;as described on buildyourcnc.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_IOgy5HOdN2s/SbglQMHKzgI/AAAAAAAAAVw/xgFXPjbi1MY/s1600-h/box-v1-drawer.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 302px; height: 320px;" src="http://1.bp.blogspot.com/_IOgy5HOdN2s/SbglQMHKzgI/AAAAAAAAAVw/xgFXPjbi1MY/s320/box-v1-drawer.png" alt="" id="BLOGGER_PHOTO_ID_5312036720542928386" border="0" /&gt;&lt;/a&gt;I put the electronics in a drawer underneath the main box, so that they can be easily accessed, and so that heated air can be blown from the power unit and stepper controller cooling fins up through a vent to the main box, to create the preheating required for warp-free plastic extrusion.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm currently working on a second version of the design, which rearranges things (changing to a moving x axis and stationary bed to allow automatic tool change, and moving electronics and dust collection to the back of the machine instead of a drawer).  I will post more when I get the design finalized and start building.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Edit: Added closeup of z platform.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19366224-8724520763959666786?l=www.zzorn.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.zzorn.net/feeds/8724520763959666786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19366224&amp;postID=8724520763959666786' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/8724520763959666786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/8724520763959666786'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/2009/03/putting-reprap-in-box-with-mill.html' title='Putting a RepRap in a Box with a Mill'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_IOgy5HOdN2s/SbgjPjOYIbI/AAAAAAAAAVg/muCQsJZWb9Q/s72-c/RepRap_at_Pirateparty_booth_on_AltParty2008.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19366224.post-8751444645659632287</id><published>2009-02-21T13:57:00.003+02:00</published><updated>2009-02-21T14:32:00.566+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Skycastle'/><title type='text'>Representing real resources in a virtual world</title><content type='html'>In a virtual world with self replicating or easily constructible complex objects, there is a certain conflict of resource usage between the virtual world and the real world.  Something that is easy and cheap to construct in the simulated world can bring the real world computer system simulating it to a crawl.&lt;br /&gt;&lt;br /&gt;A way to restrict unlimited growth is to introduce environmental resistance in the virtual world.  For example, building things could require resources, and running them could require energy, both of which could be in limited supply.&lt;br /&gt;&lt;br /&gt;However, if a reasonable approximation of the real world is simulated, the resources and energy requirements will be quite hard to balance so that the simulating computer is not either overburdened or clearly underused.&lt;br /&gt;&lt;br /&gt;A solution to this could be to introduce tokens in the virtual world that correspond to real world constraints and resources.  For example, to construct a new object would require an object token, which approximately represents the amount of memory used by one object, and the amount of processor power required to simulate its interaction with the environment.  To run some scripts / AI routines in the virtual world would require a token that represents the approximate CPU time used by a script (loops and recursion would be either disabled, or done on subsequent execution callbacks, to keep the CPU usage of a single script each world update more or less constant).&lt;br /&gt;&lt;br /&gt;The tokens would be initially placed in a free pool.  To create a new object / script in the simulated world, free tokens would be needed.  Tokens could be requested from the pool and divided randomly between the requesters (or just dropped into random places in the simulated world).  Tokens could also be exchanged between objects within the simulated world (for example by destroying an object and taking its tokens, or trading tokens for virtual money, depending on the type of simulation).&lt;br /&gt;&lt;br /&gt;The object and CPU tokens could either completely replace other simulated resources (for a &lt;a href="http://en.wikipedia.org/wiki/Tierra_%28computer_simulation%29"&gt;Tierra&lt;/a&gt; style abstract simulation), or used together with, or embedded in, conventional resources in more complex simulations (e.g. require lumber, metal, and an entity-crystal to craft an item in a fantasy themed gameworld).&lt;br /&gt;&lt;br /&gt;The total amount of tokens in the simulation could be kept constant, or the amount adjusted based on memory and CPU load by adding or removing tokens from the free pool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19366224-8751444645659632287?l=www.zzorn.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.zzorn.net/feeds/8751444645659632287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19366224&amp;postID=8751444645659632287' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/8751444645659632287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/8751444645659632287'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/2009/02/representing-real-resources-in-virtual.html' title='Representing real resources in a virtual world'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19366224.post-5801871980306916400</id><published>2008-11-24T13:27:00.005+02:00</published><updated>2008-11-24T13:41:44.075+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FlowPaint'/><title type='text'>Flowpaint 0.1 Released!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_IOgy5HOdN2s/SSqSAHSD9SI/AAAAAAAAARE/3QPtRAwwhn0/s1600-h/Screenshot-FlowPaint+v.+0.1.0+-+Noise+Brushes.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 306px;" src="http://4.bp.blogspot.com/_IOgy5HOdN2s/SSqSAHSD9SI/AAAAAAAAARE/3QPtRAwwhn0/s400/Screenshot-FlowPaint+v.+0.1.0+-+Noise+Brushes.png" alt="" id="BLOGGER_PHOTO_ID_5272186844443047202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;a href="http://www.flowpaint.org/"&gt;Flowpaint&lt;/a&gt; &lt;a href="http://www.flowpaint.org/2008/11/flowpaint-01-released.html"&gt;version 0.1&lt;/a&gt; has been released!&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;It's my first open source project that I have gotten as far as a public release :-)&lt;br /&gt;&lt;br /&gt;I've been staying up until four (or even nine) the recent weeks and weekends working on it, but it's been mostly fun hacking.  I automated as much as possible of the release process also, so it should be much less work for the next release.  I'm doing cool stuff like autogenerating the changelog from the google code issue database (I'll post the python code in a later post), and injecting the release version and build number into property files baked into the application jar.&lt;br /&gt;&lt;br /&gt;For the next release (which I hope to finish in a month, just in time for xmas) I'll have to refactor the rendering system and include undo history in it (that could be somewhat challenging).  I'll also get to add input sliders for brush parameters (that should be fun).  I wrote down my ideas for the painting rendering pipeline in some &lt;a href="http://code.google.com/p/flowpaint/wiki/DesignNotes"&gt;design notes&lt;/a&gt; in the Flowpaint wiki.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19366224-5801871980306916400?l=www.zzorn.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.zzorn.net/feeds/5801871980306916400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19366224&amp;postID=5801871980306916400' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/5801871980306916400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/5801871980306916400'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/2008/11/flowpaint-01-released.html' title='Flowpaint 0.1 Released!'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_IOgy5HOdN2s/SSqSAHSD9SI/AAAAAAAAARE/3QPtRAwwhn0/s72-c/Screenshot-FlowPaint+v.+0.1.0+-+Noise+Brushes.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19366224.post-3818390941575208721</id><published>2008-11-14T01:36:00.006+02:00</published><updated>2008-11-24T13:39:54.946+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scala'/><category scheme='http://www.blogger.com/atom/ns#' term='FlowPaint'/><title type='text'>Starting the FlowPaint project</title><content type='html'>One of my long term goals is to create a good paint program.  I have several features that I'd like to see in a paint program, but that none of the current ones have.&lt;br /&gt;&lt;br /&gt;I have some code for a half started one in the scratchpad directory of &lt;a href="http://www.skycastle.org/"&gt;Skycastle&lt;/a&gt;, but now I went ahead and created a separate project for it.  As usual, the hardest thing is to come up with a name - FlowPaint is refering to the state of &lt;a href="http://en.wikipedia.org/wiki/Flow_%28psychology%29"&gt;flow&lt;/a&gt; that happens when you are immersed in painting - the application should support the workflow, instead of interrupting it.&lt;br /&gt;&lt;br /&gt;You can find the &lt;a href="http://code.google.com/p/flowpaint/"&gt;development site of FlowPaint&lt;/a&gt; on Google Code.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Among other things, I want to render brush strokes as continuous textured areas, instead of repeatedly stamping a brush outline at short intervals along the stroke path like most existing paint programs do.&lt;br /&gt;&lt;br /&gt;Here's the result of an evenings prototyping with Scala:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_IOgy5HOdN2s/SRy8K6iXhNI/AAAAAAAAAIY/bKiEmW1PQNU/s1600-h/FlowPaint_stroke_renderer_screenshot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 351px;" src="http://1.bp.blogspot.com/_IOgy5HOdN2s/SRy8K6iXhNI/AAAAAAAAAIY/bKiEmW1PQNU/s400/FlowPaint_stroke_renderer_screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5268292559814755538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The stroke segment is defined by a start and endpoint, and the brush angle at the start and end.  The renderer loops through the pixels to render, and calculates the position along the brush path, and the distance from the center of the path for each pixel, and then uses those values to query the brush implementation for a value.  In this case the test brush returns a gradient to white towards the edges of the brush, and a gradient from red to yellow along the path of the brush.  But it's also easy to write a brush implementation that instead uses a texture instead of a gradient to determine the color for each pixel.  This opens up a lot of possibilities for the artist to produce complex patterns easily.&lt;br /&gt;&lt;br /&gt;The prototype shows that the basic stroke segment rendering algorithm works, but performance is still a possible issue (the application will need to render a lot of segments fairly quickly, and re-render a part of the entire image when it is zoomed or panned significantly).  A further spike to test out more optimized ways of rendering is likely needed (I scrapped my earlier plans for using 3D rendering, as render to texture isn't supported on the Intal graphics card on my tablet PC, and it would have caused a lot of trouble anyway).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt; was very nice to work with.  The prototype uses 9 small helper classes for things like Points, Lines, Brushes, etc.  Often these are just one line in Scala.  In Java each of these would have required an own file, and a lot of broilerplate accessories and constructor parameters, probably around 50 lines per file, including blank lines and comment lines.  With Scala I can focus on thinking about the algorithm instead (the whole prototype is around 200 lines now, including blanklines and a few comments).  I'll definitely continue using Scala for FlowPaint and future projects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19366224-3818390941575208721?l=www.zzorn.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.zzorn.net/feeds/3818390941575208721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19366224&amp;postID=3818390941575208721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/3818390941575208721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/3818390941575208721'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/2008/11/starting-flowpaint-project.html' title='Starting the FlowPaint project'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_IOgy5HOdN2s/SRy8K6iXhNI/AAAAAAAAAIY/bKiEmW1PQNU/s72-c/FlowPaint_stroke_renderer_screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19366224.post-3223714189395157823</id><published>2007-09-13T01:36:00.002+03:00</published><updated>2008-11-14T02:30:04.824+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Skycastle'/><category scheme='http://www.blogger.com/atom/ns#' term='procedural texture'/><title type='text'>Curvy Component Connections</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_IOgy5HOdN2s/RuhtCbzp4-I/AAAAAAAAAB0/GhFGsV7h7gw/s1600-h/component_based_procedural_texture_definition_01.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_IOgy5HOdN2s/RuhtCbzp4-I/AAAAAAAAAB0/GhFGsV7h7gw/s400/component_based_procedural_texture_definition_01.png" alt="" id="BLOGGER_PHOTO_ID_5109453665843405794" border="0" /&gt;&lt;/a&gt;Above is a representation of the component graph used to generate the procedural texture in the &lt;a href="http://creatingworlds.blogspot.com/2007/09/on-fly-compiled-procedural-textures.html"&gt;previous blog entry&lt;/a&gt; (click image for full size version).  The components are created with the &lt;a href="http://graph.netbeans.org/"&gt;NetBeans Visual Library&lt;/a&gt;, which seems very well suited for component based graphs.&lt;br /&gt;&lt;br /&gt;I implemented a custom Bezier spline based connection path.  I feel that it is easier to read and  understand than one with straight lines, or non-overlapping connectors automatically routed in a manhattan grid (axis aligned, only right angles).  The curvature of the connection adds some extra information; it is easier to see if a connection is going backwards or forwards, or spanning a long distance or a short one.&lt;br /&gt;&lt;br /&gt;Researching splines took a surprising amount of time again, there was no simple cut-and-paste Java code available either.  I found the &lt;a href="http://www.gamedev.net/reference/programming/features/unrav_bezier/"&gt;Unraveling Beizer Splines&lt;/a&gt; article on GameDev.net informative and simple (despite some typos in the code), the &lt;a href="http://en.wikipedia.org/wiki/B%C3%A9zier_curve"&gt;Wikipedia article on Bezier curves&lt;/a&gt;  has nice animated graphs, but was a bit too theoretical to base a quick implementation on.&lt;br /&gt;&lt;br /&gt;The  resulting &lt;a href="http://skycastle.svn.sourceforge.net/viewvc/skycastle/trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/spline/Spline.java?view=markup"&gt;Java spline code&lt;/a&gt; is available, if you want to use it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19366224-3223714189395157823?l=www.zzorn.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.zzorn.net/feeds/3223714189395157823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19366224&amp;postID=3223714189395157823' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/3223714189395157823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/3223714189395157823'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/2007/09/curvy-component-connections.html' title='Curvy Component Connections'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_IOgy5HOdN2s/RuhtCbzp4-I/AAAAAAAAAB0/GhFGsV7h7gw/s72-c/component_based_procedural_texture_definition_01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19366224.post-911354729133455905</id><published>2007-09-08T20:51:00.002+03:00</published><updated>2009-10-26T18:02:41.222+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Skycastle'/><category scheme='http://www.blogger.com/atom/ns#' term='procedural texture'/><title type='text'>On The Fly Compiled Procedural Textures</title><content type='html'>&lt;a href="http://bp0.blogger.com/_IOgy5HOdN2s/RuLoLTiDi1I/AAAAAAAAABs/E2xjRlkclaA/s1600-h/proceduralTexture_02_On_the_Fly_Compiled.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5107900208310881106" src="http://bp0.blogger.com/_IOgy5HOdN2s/RuLoLTiDi1I/AAAAAAAAABs/E2xjRlkclaA/s400/proceduralTexture_02_On_the_Fly_Compiled.jpg" style="cursor: pointer; display: block; margin: 0px auto 10px; text-align: center;" /&gt;&lt;/a&gt;&lt;br /&gt;The procedural textures from the &lt;a href="http://creatingworlds.blogspot.com/2007/09/playing-with-procedural-textures-and.html"&gt;last time&lt;/a&gt; now have source code generated and stitched together for each component, and compiled on the fly using &lt;a href="http://www.janino.net/"&gt;Janino&lt;/a&gt;.   A trippy example texture can be seen above, created using four sin components, connected to inputs that change over the texture area, and outputs for producing red, green, and blue color channels.&lt;br /&gt;&lt;br /&gt;The rendering time seems to be around 1 second (compared to about 5 seconds with a non-compiled implementation).  I suspect the difference will be more marked with more complicated textures, as there is some overhead when the data is copied to a BufferedImage for rendering.&lt;br /&gt;&lt;br /&gt;I ended up having to implement a &lt;a href="http://en.wikipedia.org/wiki/Topological_sorting"&gt;Topological Sort&lt;/a&gt; algorithm for the dependency ordering, and a Cycle Detection algorithm to prevent creation of cyclical dependencies between components (I implemented that after spending about six hours trying to figure out what was wrong with the other algorithms, when there was a simple typo in the example code, causing a cyclical dependency).  This &lt;a href="http://www.cs.berkeley.edu/%7Ekamil/teaching/sp03/041403.pdf"&gt;paper on various graph algorithms&lt;/a&gt; was an useful reference.&lt;br /&gt;&lt;br /&gt;Implementing the graph algorithms wasn't that straightforward, so I was considering using some existing graph library instead, especially as the next step will be to visualize the component graphs and edit them in a UI.  However, it seems there are not many library aimed for graphs of components that can be connected to each other through input and output ports except for &lt;a href="http://www.jgraph.com/"&gt;JGraph&lt;/a&gt;, which is a bit daunting in its complexity.  A promising alternaive seems to be the &lt;a href="http://graph.netbeans.org/"&gt;NetBeans Visual Libray&lt;/a&gt;, which is aimed at graph visualization and graph oriented modeling.  It would seem to be a perfect fit, provided it doesn't depend on all of NetBenas (doesn't seem to), and has a flexible enough model, and customizable visualization.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19366224-911354729133455905?l=www.zzorn.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.zzorn.net/feeds/911354729133455905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19366224&amp;postID=911354729133455905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/911354729133455905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/911354729133455905'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/2007/09/on-fly-compiled-procedural-textures.html' title='On The Fly Compiled Procedural Textures'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_IOgy5HOdN2s/RuLoLTiDi1I/AAAAAAAAABs/E2xjRlkclaA/s72-c/proceduralTexture_02_On_the_Fly_Compiled.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19366224.post-2220599770982323417</id><published>2007-09-05T23:39:00.001+03:00</published><updated>2008-11-14T02:29:29.708+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Skycastle'/><category scheme='http://www.blogger.com/atom/ns#' term='procedural texture'/><title type='text'>Playing With Procedural Textures and Code Generation</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_IOgy5HOdN2s/Rt8XWziDi0I/AAAAAAAAABk/c5VQoC0wfwA/s1600-h/proceduralTexture_01_Four_Sins_and_some_constants.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_IOgy5HOdN2s/Rt8XWziDi0I/AAAAAAAAABk/c5VQoC0wfwA/s400/proceduralTexture_01_Four_Sins_and_some_constants.jpg" alt="" id="BLOGGER_PHOTO_ID_5106826183019039554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm working at a procedural texture system for &lt;a href="http://www.skycastle.org/"&gt;Skycastle&lt;/a&gt; at the moment.  The intent is partly to get a useful and fun texturing tool to play with, and partly to create a spike for exploring what a more generic component oriented procedural content editor should be like.&lt;br /&gt;&lt;br /&gt;Based on some initial tests that just calculated random pixel values, it soon became evident that having components calculate the values and request calculated values from other components would be quite slow, so I decided to explore on-the-fly code generation.  &lt;a href="http://www.janino.net/"&gt;Janino &lt;/a&gt;seems to be one of the established libraries in this area.   Janino has the advantage of not needing the Java compiler (which is only available in the JDK, not the JRE), instead it actually implements a large subset of a Java compiler.&lt;br /&gt;&lt;br /&gt;Currently I'm doing some prototyping on what generated code would look like (by just writing it out by hand).   An interesting looking result obtained with four sin functions and some constant parameters for them is shown in the screenshot.  It is still slow (about 5 seconds for a medium size window on my T60 laptop),  so I was thinking of including the whole pixel iteration loop in the generated code, to eliminate any method calls for each pixel.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19366224-2220599770982323417?l=www.zzorn.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.zzorn.net/feeds/2220599770982323417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19366224&amp;postID=2220599770982323417' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/2220599770982323417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/2220599770982323417'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/2007/09/playing-with-procedural-textures-and.html' title='Playing With Procedural Textures and Code Generation'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_IOgy5HOdN2s/Rt8XWziDi0I/AAAAAAAAABk/c5VQoC0wfwA/s72-c/proceduralTexture_01_Four_Sins_and_some_constants.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19366224.post-7209141008943580266</id><published>2007-07-23T22:15:00.001+03:00</published><updated>2008-11-14T02:28:54.684+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Skycastle'/><title type='text'>Skycastle on Launchpad</title><content type='html'>I came across &lt;a href="http://launchpad.net/"&gt;Launchpad&lt;/a&gt; recently.  It seems to be a kind of common bug tracking and release management tool for open source projects, initially created for the needs of &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt;, but opened up so that any project can use it.&lt;br /&gt;&lt;br /&gt;It's geared slightly towards larger projects, but it does provide a working looking bug tracking and release planning tool, so I decided to &lt;a href="https://launchpad.net/skycastle"&gt;use it for Skycastle&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19366224-7209141008943580266?l=www.zzorn.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.zzorn.net/feeds/7209141008943580266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19366224&amp;postID=7209141008943580266' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/7209141008943580266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/7209141008943580266'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/2007/07/skycastle-on-launchpad.html' title='Skycastle on Launchpad'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19366224.post-7737677044573413654</id><published>2007-07-12T02:50:00.002+03:00</published><updated>2008-11-14T02:28:40.484+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='isometric'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Vector graphics figure for isometric game</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_IOgy5HOdN2s/RpVs0avmRqI/AAAAAAAAABc/pOJyGLYctbY/s1600-h/isometric_world-02-Doll_figure.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_IOgy5HOdN2s/RpVs0avmRqI/AAAAAAAAABc/pOJyGLYctbY/s400/isometric_world-02-Doll_figure.png" alt="" id="BLOGGER_PHOTO_ID_5086091001972803234" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Here's the result of some experimentation with using vector graphics for rendering player figures.&lt;br /&gt;&lt;br /&gt;It composes the figure from 'bone' shapes that are basically a line with rounded ends, where each end may have a different thickness.  It also has a cell shading like shadow on one side, and antialiased highlight and shadow outlines (this helps to hide the otherwise quite jagged polygon outlines).  The cell shading is just going down the middle of the bone currently, it will probably look better once it is bent a bit to either side.&lt;br /&gt;&lt;br /&gt;I'm planning to divide the arms and legs still so that the figure has elbow and knee joints, and add hands and feet (I already did a test of a rotating arm with a hand earlier, and it looked nice).&lt;br /&gt;&lt;br /&gt;For the head, I was thinking of drawing eyes, eyebrows, and mouth on it with simple antialiased lines.  The hair could probably be approximated with a few polygons.&lt;br /&gt;&lt;br /&gt;On the skirt front and back a custom bitmap image will be pasted, using a skewed bitmap renderer similar to what is used for walls.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So far I'm pretty happy with the result, with a bit of tweaking it should be a passable cartoon like figure.  The next step is to figure out how to animate it..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19366224-7737677044573413654?l=www.zzorn.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.zzorn.net/feeds/7737677044573413654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19366224&amp;postID=7737677044573413654' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/7737677044573413654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/7737677044573413654'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/2007/07/vector-graphic-figures-for-isometric.html' title='Vector graphics figure for isometric game'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_IOgy5HOdN2s/RpVs0avmRqI/AAAAAAAAABc/pOJyGLYctbY/s72-c/isometric_world-02-Doll_figure.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19366224.post-3393685198530399208</id><published>2007-07-10T01:44:00.001+03:00</published><updated>2008-11-14T02:28:26.746+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='isometric'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Isometric Fun</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_IOgy5HOdN2s/RpK7OqvmRpI/AAAAAAAAABU/qd8WXZseBh8/s1600-h/isometric_engine_01.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_IOgy5HOdN2s/RpK7OqvmRpI/AAAAAAAAABU/qd8WXZseBh8/s400/isometric_engine_01.jpg" alt="" id="BLOGGER_PHOTO_ID_5085332789921203858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I started working on an isometric game engine over this weekend, this time written in Python.  I was inspired by the &lt;a href="http://www.laptop.org/"&gt;One Laptop Per Child project&lt;/a&gt;, and was thinking that some of my &lt;a href="http://wiki.worldforge.org/wiki/Game_Features"&gt;world&lt;/a&gt; &lt;a href="http://wiki.worldforge.org/wiki/Machines"&gt;editing&lt;/a&gt; &lt;a href="http://worldforge.org/games/mason/technology/physics_engine"&gt;ideas&lt;/a&gt; go well with their &lt;a href="http://en.wikipedia.org/wiki/Constructionist_learning"&gt;constructionist learning&lt;/a&gt; philosophy.&lt;br /&gt;&lt;br /&gt;The end user experience could be something akin to building and playing with Legos together with friends, although the building blocks should be larger and more functional.  No built-in game goals, but players might be able to define ones themselves.  Maybe there could be some kind of toggle to switch between Build and Play modes.&lt;br /&gt;&lt;br /&gt;The limited memory footprint of the OLPC laptop (no hard drive, only a few hundred MB of flash memory) imposes restrictions on the amount of media and map data that can be stored in a conventional way, so I'm also planning to experiment with procedurally created maps and graphics (the map above is defined with one ProbabilityMapFill, that selects between normal and flowering grass tiles, one WalledMapFill, that builds walls around a specified area, and a SolidMapFill, that fills the same area with an earth tile).&lt;br /&gt;&lt;br /&gt;The mesh-networked nature of the One Laptop Per Child machine also means that this would be a peer-to-peer game, not a conventional client-server setup.  Anyone could start or resume a game session, and invite others.  Constructs and pieces of landscape created in a session should be possible to keep for later, and to share with others.&lt;br /&gt;&lt;br /&gt;I'm not sure yet how side-tracked I'm going to allow myself to get with this project, but so far Python is relatively nice to code with, despite a few oddities and the lack of an IDE with rename and code navigation features.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19366224-3393685198530399208?l=www.zzorn.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.zzorn.net/feeds/3393685198530399208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19366224&amp;postID=3393685198530399208' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/3393685198530399208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/3393685198530399208'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/2007/07/isometric-fun.html' title='Isometric Fun'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_IOgy5HOdN2s/RpK7OqvmRpI/AAAAAAAAABU/qd8WXZseBh8/s72-c/isometric_engine_01.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19366224.post-3632067456631771237</id><published>2007-06-19T20:00:00.001+03:00</published><updated>2008-11-14T02:28:01.989+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediawiki'/><category scheme='http://www.blogger.com/atom/ns#' term='Skycastle'/><title type='text'>Setting Up Skycastle Project Infrastructure, Take Two</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Update&lt;/span&gt;: I recently moved the &lt;a href="http://www.skycastle.org/"&gt;Skycastle&lt;/a&gt; website hosting to &lt;a href="http://www.nearlyfreespeech.net/"&gt;NearlyFreeSpeech.net&lt;/a&gt;, as sourceforge was slow and a bit unpractical to use for a mediawiki.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In my first blog entry from end of 2005 I was looking for a hosting and wiki solution for the &lt;a href="https://sourceforge.net/projects/skycastle/"&gt;Skycastle project&lt;/a&gt;.  I've settled for using SourceForge for hosting, after they started to support SVN.&lt;br /&gt;&lt;br /&gt;However, I hadn't really set up any satisfactory wiki for the project.  I've been using Mediawiki a bit over at the &lt;a href="http://wiki.worldforge.org/wiki/Main_Page"&gt;WorldForge wiki&lt;/a&gt;, and really like it's advanced features.&lt;br /&gt;&lt;br /&gt;I finally spent last Sunday setting it up on Sourceforge - it is actually possible, although it requires some work (like writing a database driven mail sending script, as direct mailing from web applications on SourceForge is not allowed - I still have to do that). &lt;a href="http://skycastle.sourceforge.net/mediawiki/index.php/Main_Page"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There are various instructions on the net for how to set it up, although they are not very clear or complete in all cases (&lt;a href="http://meta.wikimedia.org/wiki/Running_MediaWiki_on_Sourceforge.net"&gt;on Mediawiki help pages&lt;/a&gt;, &lt;a href="http://laci.monda.hu/blog/2006/03/03/mediawiki-on-sourceforge-the-howto/"&gt;on László Monda's page&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;As an aside, SourceForge also seems to offer a &lt;a href="http://www.wiki.sourceforge.net/"&gt;wiki solution&lt;/a&gt; now, but it didn't look too impressive - it seems to lack categories, templates, and a lot of other useful things found in &lt;a href="http://www.mediawiki.org/wiki/MediaWiki"&gt;Mediawiki&lt;/a&gt;.  Running Mediawiki also allows me to tune its appearance so that it can be used as a respectable homepage for the project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19366224-3632067456631771237?l=www.zzorn.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.zzorn.net/feeds/3632067456631771237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19366224&amp;postID=3632067456631771237' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/3632067456631771237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/3632067456631771237'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/2007/06/setting-up-skycastle-project.html' title='Setting Up Skycastle Project Infrastructure, Take Two'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19366224.post-662516338144401979</id><published>2007-06-19T19:52:00.001+03:00</published><updated>2008-11-14T02:27:51.367+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Skycastle'/><category scheme='http://www.blogger.com/atom/ns#' term='geotools'/><title type='text'>Google Summer Of Code - 3D Rendering Pipeline for Geotools</title><content type='html'>I'm participating in the &lt;a href="http://en.wikipedia.org/wiki/Google_Summer_of_Code"&gt;Google Summer of code&lt;/a&gt; program this summer, working on a &lt;a href="http://docs.codehaus.org/display/GEOTOOLS/3D+Rendering+Pipeline+for+GeoTools"&gt;3D renderer for Geotools&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This will be a good opportunity to get familiar with the &lt;a href="http://geotools.codehaus.org/"&gt;Geotools&lt;/a&gt; library - it might be usable for storing geographical data in &lt;a href="http://sourceforge.net/projects/skycastle"&gt;Skycastle&lt;/a&gt;.  I'll also try to make the 3D rendering pipeline usable for real time low altitude rendering with relatively high detail - usable for games, as well as various interactive geographical visualization applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19366224-662516338144401979?l=www.zzorn.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.zzorn.net/feeds/662516338144401979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19366224&amp;postID=662516338144401979' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/662516338144401979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/662516338144401979'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/2007/06/google-summer-of-code-3d-rendering.html' title='Google Summer Of Code - 3D Rendering Pipeline for Geotools'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19366224.post-3911205208737264368</id><published>2007-04-16T12:49:00.001+03:00</published><updated>2008-11-14T02:26:48.269+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Skycastle'/><category scheme='http://www.blogger.com/atom/ns#' term='Landscape Generation'/><title type='text'>Real time generation and rendering of realistic landscapes</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_IOgy5HOdN2s/RiNTUnSzHsI/AAAAAAAAABE/oajddftaBmk/s1600-h/Adrianus+van+der+Koogh,+View+of+Beek+from+the+Ravenberg.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_IOgy5HOdN2s/RiNTUnSzHsI/AAAAAAAAABE/oajddftaBmk/s400/Adrianus+van+der+Koogh,+View+of+Beek+from+the+Ravenberg.jpg" alt="" id="BLOGGER_PHOTO_ID_5053974820450148034" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;A Dutch landscape painting from 1820 (by Adrianus van der Koogh).  &lt;/span&gt;&lt;span style="font-style: italic;"&gt;A challenging goal to aim for in landscape generation and rendering.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I haven't used this blog much yet, but I was thinking of starting to blog regularly now.  So to clear up the backlog, here's my &lt;a href="http://www.iki.fi/hans.haggstrom/landscapegeneration"&gt;masters thesis on landscape generation and rendering&lt;/a&gt;, finished in the autumn 2006.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_IOgy5HOdN2s/RiNQ0nSzHpI/AAAAAAAAAAs/h1BnsJkLfIk/s1600-h/ProceduralLandscape-full.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In it I review a number of algorithms for generating and rendering various aspects of landscapes, from terrain to plants, buildings, and the sky.  I also discuss a bit how to use ecotopes to distribute the landscape features naturally.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I tried to illustrate it throughly and make it easy to read, so feel free to check it out.  Apart from some of my not-so-interesting building generation experiments in the middle it's mostly a review of existing approaches with a few ideas and improvements of mine thrown in.  It can serve as a kind of pre-study for a landscape engine.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here's the abstract:&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;blockquote&gt;With the increasing size of virtual landscapes in games and other applications there is a growing need for generation algorithms that can help designers to produce large realistic landscapes. Parametrized procedural and fractal systems provide this, and also enable on-the fly data generation that minimizes required storage space.  Ecotopes provide a way to introduce natural variation in automatically generated landscapes by varying the generation parameters based on the location. Interactive performance can be achieved by using geometry with a level of detail that decreases with the distance to the observer.  In this thesis I evaluate different algorithms for generating and rendering terrain, vegetation, buildings, cities, and the sky. New algorithms are sketched out for terrain generation through successive uneven mass deposit, elevation map modifying textures, river system generation, pattern based city generation, and weather modeling.  A subdivision based house generation algorithm is also presented and partially implemented. Finally opportunities for further research in conveying emotions with landscapes are identified.&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19366224-3911205208737264368?l=www.zzorn.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.zzorn.net/feeds/3911205208737264368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19366224&amp;postID=3911205208737264368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/3911205208737264368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/3911205208737264368'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/2007/04/real-time-generation-and-rendering-of.html' title='Real time generation and rendering of realistic landscapes'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_IOgy5HOdN2s/RiNTUnSzHsI/AAAAAAAAABE/oajddftaBmk/s72-c/Adrianus+van+der+Koogh,+View+of+Beek+from+the+Ravenberg.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19366224.post-113313183023988555</id><published>2005-11-28T00:25:00.001+02:00</published><updated>2008-11-14T02:25:37.837+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Skycastle'/><title type='text'>Setting things up</title><content type='html'>Hello, and welcome to my blog!&lt;br /&gt;&lt;br /&gt;I'm planning to use this blog to publish news related to the Skycastle project, as well as general ideas about virtual world coding, design and anything tangentially relevant, such as AI, computer graphics, or software development processes.&lt;br /&gt;&lt;br /&gt;(Skycastle is an attempt to build an open source MMORPG engine in Java.  More on it in later posts and on the wiki.)&lt;br /&gt;&lt;br /&gt;I'm currently in the process of selecting wiki and source hosts for Skycastle.  I have been keeping the code on &lt;a href="http://sourceforge.net/projects/skycastle/"&gt;SourceForge&lt;/a&gt;, but as CSV requires a network connection to add or remove files it makes it impractical to edit the source on a laptop while commuting as I do currently, so I have been looking at &lt;a href="http://www.javaforge.com/proj/summary.do?proj_id=351"&gt;JavaForge&lt;/a&gt; (they provide subversion support).    (EDIT: Now that SourceForge also provides SVN, I'm staying there).&lt;br /&gt;&lt;br /&gt;The wiki at JavaForge didn't look too impressive though, so I'm considering either using &lt;a href="http://skycastle.wikispaces.com/"&gt;wikispaces&lt;/a&gt; or &lt;a href="http://skycastle.dyndns.org/wiki/"&gt;my own server machine&lt;/a&gt; (which is on a relatively slow ADSL line).  I'm leaning towards wikispaces currently.  (EDIT: I'm currently planning to run a Mediawiki on SourceForge instead)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19366224-113313183023988555?l=www.zzorn.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.zzorn.net/feeds/113313183023988555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19366224&amp;postID=113313183023988555' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/113313183023988555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19366224/posts/default/113313183023988555'/><link rel='alternate' type='text/html' href='http://www.zzorn.net/2005/11/setting-things-up.html' title='Setting things up'/><author><name>zzorn</name><uri>http://www.blogger.com/profile/09914572682476230174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
