<?xml version="1.0" encoding="ISO-8859-1" ?>
<rss version="2.0">
	<channel>
		<title>Io</title> 
		<link>http://www.iolanguage.com/blog/blog.cgi</link> 
		<description>Io programming language</description> 
		<language>en-us</language> 
		<copyright>Copyright Steve Dekorte, 2003</copyright> 
		<managingEditor>blog@dekorte.com</managingEditor> 
		<webMaster>blog@dekorte.com</webMaster> 

				<item>
			<title>Bug tracker now on Github</title> 
			<link><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=114]]></link> 
			<guid isPermaLink="true"><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=114]]></guid>
			<description><![CDATA[<a href=http://github.com/stevedekorte/io/issues>Link</a>]]></description> 
			<pubDate>Tue, 03 Nov 2009 03:05:57 PST</pubDate>
		</item>
		<item>
			<title>Io projects on github </title> 
			<link><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=113]]></link> 
			<guid isPermaLink="true"><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=113]]></guid>
			<description><![CDATA[<a href=http://github.com/languages/Io>Link</a>]]></description> 
			<pubDate>Sun, 25 Jan 2009 02:40:04 PST</pubDate>
		</item>
		<item>
			<title>HttpServer</title> 
			<link><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=112]]></link> 
			<guid isPermaLink="true"><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=112]]></guid>
			<description><![CDATA[Cliff Wells performance tests serving dynamic content with Io.
<p>
<a href=http://pentropy.twisty-industries.com/serving-simple-dynamic-content-with-io>Link</a>]]></description> 
			<pubDate>Sat, 11 Oct 2008 09:03:00 PDT</pubDate>
		</item>
		<item>
			<title>Io on .NET </title> 
			<link><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=111]]></link> 
			<guid isPermaLink="true"><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=111]]></guid>
			<description><![CDATA[A project at Synrc to port Io to .NET.
<p>
<a href=https://synrc.com/io-language.htm>Link</a>]]></description> 
			<pubDate>Wed, 27 Aug 2008 12:40:16 PDT</pubDate>
		</item>
		<item>
			<title>TokyoCabinet</title> 
			<link><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=110]]></link> 
			<guid isPermaLink="true"><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=110]]></guid>
			<description><![CDATA[A TokyoCabinet binding was recently added. Here are the results for the performance test run on a first generation MacBook Pro.

<pre>
287265 group transactional writes per second
166683 reads per second
118523 cursor reads per second
374672 group transactional removes per second
 13654 individual transactional writes per second 
 14484 individual transactional removes per second
</pre>
This test was in B-Tree mode and for reads and write the number of keys was 10,000, the key size is 22 bytes and the value size is 8 bytes. Order is random except for cursor reads, which are sequential.
<p>
Note: those "transactions" must be syncing to the OS buffers and not the disk.]]></description> 
			<pubDate>Mon, 31 Mar 2008 01:49:57 PDT</pubDate>
		</item>
		<item>
			<title>Screenshot</title> 
			<link><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=109]]></link> 
			<guid isPermaLink="true"><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=109]]></guid>
			<description><![CDATA[Some sample code for taking a screenshot in an OpenGL app:
<p>
First, let us add a Image method to help:
<pre>
  Image grabScreen := method(
     data := Sequence clone 
     width  := glutGet(GLUT_WINDOW_WIDTH)
     height := glutGet(GLUT_WINDOW_HEIGHT)
     glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, data)	
     self setDataWidthHeightComponentCount(data, width, height, 4)
     self flipY
  )
</pre>
Now we can use it (within a running GL application):
<pre>
Image clone grabScreen save("screenshot.jpg")
</pre>]]></description> 
			<pubDate>Wed, 27 Feb 2008 05:16:05 PST</pubDate>
		</item>
		<item>
			<title>Constants</title> 
			<link><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=108]]></link> 
			<guid isPermaLink="true"><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=108]]></guid>
			<description><![CDATA[Kevin Greer posted this to LtU recently and I though it was worth repeating due to the recent interest in dynamic features:
<p>
<pre>
Constant := Object clone do (
  with := method(msg, 
    self msg := msg
    self activate := method(call message setName(msg asString); msg)
  )
)

// Lets try it out: Make PI a regular number
PI := 3.1415926

// Make b a method that uses it
b := method(PI+PI)
writeln(b) // -> 6.283185

// Inspect bs "source" code
writeln(getSlot("b") code) // -> block(PI +(PI))

// Make PI a constant
PI := Constant with(3.1415926)
writeln(b) // -> 6.283185
writeln(getSlot("b") code) // -> block(3.141593 +(3.141593))

// Still works but when we look at the code of b we see that
// the PIs have been replaced with PIs value!!!
</pre>

]]></description> 
			<pubDate>Wed, 09 Jan 2008 22:59:25 PST</pubDate>
		</item>
		<item>
			<title>Cairo Binding</title> 
			<link><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=107]]></link> 
			<guid isPermaLink="true"><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=107]]></guid>
			<description><![CDATA[<a href=http://fancher.org/>Trevor Fancher</a>  has added binding for the <a href=http://cairographics.org/>Cairo graphics library</a> which is now available in the repo. Thanks Trevor!]]></description> 
			<pubDate>Thu, 26 Jul 2007 04:41:52 PDT</pubDate>
		</item>
		<item>
			<title>Multiple Dispatch</title> 
			<link><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=106]]></link> 
			<guid isPermaLink="true"><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=106]]></guid>
			<description><![CDATA[<i>
Multiple-dispatch or multi-methods is the feature of some object-oriented programming languages in which a function or method can be specialized on the type of more than one of its arguments.
</i>
- <a href=http://en.wikipedia.org/wiki/Multiple_dispatch>Wikipedia</a>
<p>
A typical multiple-dispatch example is a game with Asteriods, Bullets and Ships that have collision methods for each combination of interactions. In this case (and perhaps almost all cases), we only care about the first argument. And the problem is having to write switch statements like this:
<pre>
Ship collideWith := method(other,
   if(other isKindOf(Ship), ....; return)
   if(other isKindOf(Asteriod), ....; return)
   if(other isKindOf(Bullet), ....; return)
)
</pre>
<p>
Here is a simple solution provided by Rich Collins:
<pre>
Ship collideWith := method(other, other collideWithShip(self))
Ship collideWithShip := method(aShip, ....)
Ship collideWithAsteriod := method(anAsteriod, ....)
Ship collideWithBullet := method(aBullet, ....)

// with similar implementations for other objects
</pre>

which also works with inheritance, delegation and proxies without the need for any formal type system.
]]></description> 
			<pubDate>Wed, 18 Jul 2007 17:32:05 PDT</pubDate>
		</item>
		<item>
			<title>Io Style Guide</title> 
			<link><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=105]]></link> 
			<guid isPermaLink="true"><![CDATA[http://www.iolanguage.com/blog/blog.cgi?do=item&amp;id=105]]></guid>
			<description><![CDATA[<a href=http://en.wikibooks.org/wiki/Programming:Io/Io_Style_Guide>Link</a>]]></description> 
			<pubDate>Fri, 29 Jun 2007 19:07:41 PDT</pubDate>
		</item>

	</channel>
</rss>
