<?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-26494213</id><updated>2011-08-27T23:21:34.010-04:00</updated><title type='text'>splattercoding</title><subtitle type='html'>Random smatterings of the life of an amateur programmer.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-26494213.post-115978497382438987</id><published>2006-10-02T05:57:00.001-04:00</published><updated>2010-08-19T20:43:02.897-04:00</updated><title type='text'>message-munging curry</title><summary type='text'>Caching values in messages is really neat, I have to admit, but it is oftentimes rather verbose. To illustrate this point, I'll give you an example of a curry function without any helper functions.

curry := method(proc, left,
   IoVM getSlot("Block") clone setArgumentNames(list("right")) setMessage(
       Message clone setCachedResult(getSlot("proc")) setAttached(
           message(call) clone</summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115978497382438987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115978497382438987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115978497382438987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115978497382438987'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/10/i-hate-indian-food-but-this-curry-is.html' title='message-munging curry'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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-26494213.post-115874641613487020</id><published>2006-09-20T05:59:00.000-04:00</published><updated>2006-09-20T22:16:25.136-04:00</updated><title type='text'>a lazy getslot macro</title><summary type='text'>I haven't posted anything in a while! Oh wow. Too long.

So here's something to make up for it. It's a lazy macro: is a function that, once run, modifies the code that calls it. You get a slowdown the first time the code is run, but afterwards, it is as if you wrote the generated code straight into the function. It's an amazingly powerful technique that, coupled with message caching, can do </summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115874641613487020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115874641613487020' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115874641613487020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115874641613487020'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/09/lazy-getslot-macro.html' title='a lazy getslot macro'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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-26494213.post-115701742453659444</id><published>2006-08-31T05:22:00.000-04:00</published><updated>2006-08-31T05:43:44.536-04:00</updated><title type='text'>any? and all? in Scheme, because.</title><summary type='text'>In a belated response to netytan, I post my own any? and all? written in Scheme.

(define (any? proc ls)
    (if (null? ls)
        #f
        (if (proc (car ls))
            #t
            (any? proc (cdr ls)))))

;; (any? even? '(1 3 5 8 7)) =&gt; #t, shortcircuiting at 8
;; (any? odd?  '(2 4 6 8 10)) =&gt; #f

(define (all? proc ls)
    (if (null? ls)
        #t
        (if (proc (car ls))
</summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115701742453659444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115701742453659444' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115701742453659444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115701742453659444'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/08/any-and-all-in-scheme-because_31.html' title='any? and all? in Scheme, because.'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26494213.post-115651266465807097</id><published>2006-08-25T09:03:00.000-04:00</published><updated>2006-08-25T10:07:57.386-04:00</updated><title type='text'>io code highlighter... written in ruby</title><summary type='text'>
I've just spent a bit of time working with Syntax, a Ruby module made for doing syntax highlighting. I figured that since Io syntax was so simple, it would take little effort to make it work for me. Well, hey, I was right. Here's a little example of the results:

List docSlot("splat(*names)", "Assign one value from the list to each given symbol, starting from index 0.")
List splat := method(
</summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115651266465807097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115651266465807097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115651266465807097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115651266465807097'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/08/io-code-highlighter-written-in-ruby.html' title='io code highlighter... written in ruby'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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-26494213.post-115623675590636641</id><published>2006-08-22T04:25:00.000-04:00</published><updated>2006-08-24T00:49:42.186-04:00</updated><title type='text'>io and mixins</title><summary type='text'>
Mixins define a set of methods that can be "mixed in" to a class definition in order to provide additional functionality. Of course, this often leads to another construct, such as the Ruby Module construct. But Io isn't Ruby.


We don't need a seperate construct for classes, and we certainly don't need a seperate construct for mixins. You can define your mixins just like any other objects, like </summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115623675590636641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115623675590636641' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115623675590636641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115623675590636641'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/08/io-and-mixins.html' title='io and mixins'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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-26494213.post-115485674217518271</id><published>2006-08-06T05:23:00.000-04:00</published><updated>2006-08-06T05:32:22.196-04:00</updated><title type='text'>let it be</title><summary type='text'>
I've given a lot of thought to the use of lexical scopes and shadowing slots in Io, and I've come up with a bit of a monster that throws itself against the problem until it breaks every vertebrae. His name is LexicalScopeOperator.


LexicalScopeContainer := Object clone do(
    clone := getSlot("clone")
    init := method(.setSlot("call", call sender call))
    forward := method(call delegateTo(</summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115485674217518271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115485674217518271' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115485674217518271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115485674217518271'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/08/let-it-be.html' title='let it be'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26494213.post-115460542696904154</id><published>2006-08-03T07:40:00.000-04:00</published><updated>2006-08-03T07:43:46.980-04:00</updated><title type='text'>iotastysnake</title><summary type='text'>Over at Pinupgeek's blog you'll find something very interesting: a Python-&gt;Io bridge! I can't test it myself as it isn't Windows-compatible (nor is Io at the moment for that matter), but please, do take a look.</summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115460542696904154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115460542696904154' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115460542696904154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115460542696904154'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/08/iotastysnake.html' title='iotastysnake'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26494213.post-115460131187762859</id><published>2006-08-03T06:05:00.000-04:00</published><updated>2006-08-03T06:41:09.900-04:00</updated><title type='text'>some more list goodness</title><summary type='text'>The list method expand is a flow control construct designed to make it easier to deal with multiple return values stashed in a list without having to explicitly unpack it.

List expand := method(
    argNames := call message arguments slice(0, -1) map(name)
    body := call message arguments last
    temp := Object clone
    sender := call sender
    
    argNames foreach(i, name,
        temp </summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115460131187762859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115460131187762859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115460131187762859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115460131187762859'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/08/some-more-list-goodness.html' title='some more list goodness'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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-26494213.post-115443529546430602</id><published>2006-08-01T08:20:00.000-04:00</published><updated>2006-08-02T04:49:05.186-04:00</updated><title type='text'>fol dover</title><summary type='text'>Some important functional ... functions!

List foldl := method(
    accu := first
    args := list(nil)
    if(call message arguments size == 1,
        meth := call message argAt(0) name
        slice(1) foreach(i, accu = accu performWithArgList(meth, args atPut(0, i)))
    ,
        fn := Protos getSlot("Block") clone setArgumentNames(call message arguments slice(0, 2) map(name)) setMessage(</summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115443529546430602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115443529546430602' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115443529546430602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115443529546430602'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/08/fol-dover.html' title='fol dover'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26494213.post-115381823241253928</id><published>2006-07-25T04:56:00.000-04:00</published><updated>2006-07-25T05:03:52.426-04:00</updated><title type='text'>clerks uncensored</title><summary type='text'>
We don't have to talk about the Matrix. We could just talk about... stuff. Your favorite bands. Chicks who've broken your heart. The Matrix.

I just watched the 6-episode Clerks cartoon and I have to say I am mostly disappointed. However, I have succeeded in killing some braincells in the process, so yay for me!</summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115381823241253928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115381823241253928' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115381823241253928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115381823241253928'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/07/clerks-uncensored.html' title='clerks uncensored'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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-26494213.post-115363725300595784</id><published>2006-07-23T02:39:00.000-04:00</published><updated>2006-08-07T01:31:36.560-04:00</updated><title type='text'>namespaces in io</title><summary type='text'>Okay, so I've been putting some thought into encapsulation in Io. With a lack of namespaces, avoiding clutter and name collisions becomes fairly tough. For example, this does not work:

Math := Object clone do(
    PI := 3.14159265
    Circle := Object clone do(
        newSlot("radius")
        with := method(r,
            self clone setRadius(r)
        )
        area := method(
            PI</summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115363725300595784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115363725300595784' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115363725300595784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115363725300595784'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/07/namespaces-in-io.html' title='namespaces in io'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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-26494213.post-115355806770928698</id><published>2006-07-22T03:57:00.000-04:00</published><updated>2006-07-22T04:48:36.533-04:00</updated><title type='text'>onward, forward!</title><summary type='text'>For those of you who think that I had forgotten that I even had a blog, well, you were wrong! Ha! I hope none of you took out bets, because you're going to be pretty sore at me now.
If you've been wondering what I've been working on these past few days, well, simply: nothing at all! Truly. I can't download Visual Studio Express on my own, as it would take some 25 hours, and I don't ever have that</summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115355806770928698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115355806770928698' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115355806770928698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115355806770928698'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/07/onward-forward.html' title='onward, forward!'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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-26494213.post-115287718299494436</id><published>2006-07-14T05:52:00.000-04:00</published><updated>2006-07-14T07:39:43.043-04:00</updated><title type='text'>visual studio express</title><summary type='text'>Now downloading ... it might be a couple days ... but if I can get Io to build in Visual Studio Express, maybe there is some hope for Io on Windows without cygwin. I'll put up some new cygwin builds up later tonight.</summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115287718299494436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115287718299494436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115287718299494436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115287718299494436'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/07/visual-studio-express.html' title='visual studio express'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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-26494213.post-115286089148808437</id><published>2006-07-14T03:07:00.000-04:00</published><updated>2006-07-14T03:08:11.503-04:00</updated><title type='text'>my new watch</title><summary type='text'></summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115286089148808437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115286089148808437' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115286089148808437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115286089148808437'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/07/my-new-watch.html' title='my new watch'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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-26494213.post-115278716951541752</id><published>2006-07-13T04:51:00.000-04:00</published><updated>2006-07-13T06:39:29.530-04:00</updated><title type='text'>what is this ... more io for windows!?</title><summary type='text'>
Yeah, you heard me. I've finally made progress on building IoServer and IoDesktop (versions of the IoVM which have extra bindings to make them more useful). Now, not saying that they're perfect, but they are available. IoDesktop is also missing the Audio binding, so no audio support yet. This is a work in progress!

The latest cygwin builds of IoServer, IoDesktop, and IoVM will be packaged </summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115278716951541752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115278716951541752' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115278716951541752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115278716951541752'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/07/what-is-this-more-io-for-windows_13.html' title='what is this ... more io for windows!?'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26494213.post-115270113473951782</id><published>2006-07-12T06:41:00.000-04:00</published><updated>2006-07-12T06:45:34.740-04:00</updated><title type='text'>io and self-destructing methods</title><summary type='text'>You know how I blogged yesterday about why's little meta-programming trick in Ruby? Well, as it turns out, it is just as easy, if not easier, to do in Io.

Trial := Object clone do(
  runMe := method(
    self runMe = method(Exception raise("NO MORE."))
    writeln("Your trial period has ended.")     
  )
)

t := Trial clone
t.runMe #=&gt; Your trial period has ended.
t.runMe #=&gt; Exception: NO MORE.</summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115270113473951782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115270113473951782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115270113473951782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115270113473951782'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/07/io-and-self-destructing-methods.html' title='io and self-destructing methods'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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-26494213.post-115269977401055979</id><published>2006-07-12T04:28:00.000-04:00</published><updated>2006-07-12T06:31:13.886-04:00</updated><title type='text'>easyparser for io</title><summary type='text'>
EasyParser was my first project with Io. It was initially a port of the magnificient pyparsing library, but as the languages differ, so do the libraries.


Anyway, EasyParser.io is an alternative way to construct grammars and process text. Each element can be used as an insertion point to process tokens and produce objects within a parse tree, so that only a single pass is needed. Here's an </summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115269977401055979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115269977401055979' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115269977401055979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115269977401055979'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/07/easyparser-for-io.html' title='easyparser for io'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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-26494213.post-115264976538415320</id><published>2006-07-11T16:26:00.000-04:00</published><updated>2006-07-11T16:30:57.013-04:00</updated><title type='text'>ruby and self-destructing methods</title><summary type='text'>

Expiring a method. And let’s keep meta out of this.

 class Trial
    def run_me
       def self.run_me; raise Exception, "NO MORE." end
       puts "Your trial period has ended." 
    end
 end

 t = Trial.new
 t.run_me
 #=&gt; Your trial period has ended.
 t.run_me
 #=&gt; (trial):3:in `run_me': NO MORE. (Exception)

The run_me overwrites itself. But notice it uses def self. This overwrites the </summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115264976538415320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115264976538415320' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115264976538415320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115264976538415320'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/07/ruby-and-self-destructing-methods.html' title='ruby and self-destructing methods'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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-26494213.post-115252716025987544</id><published>2006-07-10T06:23:00.000-04:00</published><updated>2006-07-10T06:28:10.850-04:00</updated><title type='text'>ending the world a lil each day</title><summary type='text'>
The most likely way for the world to be destroyed, most experts agree, is by accident. That's where we come in; we're computer professionals. We cause accidents.
Nathaniel Borenstein


I thought this was a perfectly great way to end a day of ... compiling.
</summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115252716025987544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115252716025987544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115252716025987544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115252716025987544'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/07/ending-world-lil-each-day.html' title='ending the world a lil each day'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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-26494213.post-115252358285971014</id><published>2006-07-10T05:18:00.000-04:00</published><updated>2006-07-10T05:26:22.873-04:00</updated><title type='text'>prototype.js</title><summary type='text'>
Look what I found today!
Prototype is a JavaScript framework that aims to ease development of dynamic web applications. Featuring a unique, easy-to-use toolkit for class-driven development and the nicest Ajax library around, Prototype is quickly becoming the codebase of choice for web application developers everywhere.
What I'm most interested in is how I'll be able to use it with Opera 9 </summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115252358285971014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115252358285971014' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115252358285971014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115252358285971014'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/07/prototypejs.html' title='prototype.js'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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-26494213.post-115243978943279077</id><published>2006-07-09T06:05:00.000-04:00</published><updated>2006-07-09T06:17:58.216-04:00</updated><title type='text'>&lt;Kaworu&gt; that went right over my head</title><summary type='text'>The following is the work-in-progress "science" behind my game-in-planning On Phoenix Wings. It should fairly well explain itself, but I've been told it goes over peoples' heads.


The Divide
The universe is seperated into two distinct levels of existance: the physical and the spiritual. In a sense, they exist in the same space, but in regular circumstances do not interact. The spiritual realm is</summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115243978943279077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115243978943279077' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115243978943279077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115243978943279077'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/07/that-went-right-over-my-head.html' title='&amp;lt;Kaworu&amp;gt; that went right over my head'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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-26494213.post-115235347946676359</id><published>2006-07-08T05:47:00.000-04:00</published><updated>2006-07-08T06:11:19.476-04:00</updated><title type='text'>The little operating system that couldn't</title><summary type='text'>Ah, Windows. I know we've been together a long time, but... I really want to program, and you really make it so very hard. Please go die. I'll even give you a proper funeral.
In less depressing news, I have compiled the latest IoVM tarball. Also, I've picked up a pocket reference for C, and I'll soon start hacking at the Io source. Of course, I hate C. I'm only doing this for the good of my </summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115235347946676359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115235347946676359' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115235347946676359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115235347946676359'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/07/little-operating-system-that-couldnt.html' title='The little operating system that couldn&apos;t'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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-26494213.post-115226834462000607</id><published>2006-07-07T06:27:00.000-04:00</published><updated>2006-07-09T01:57:04.050-04:00</updated><title type='text'>and now featuring</title><summary type='text'>... content? Never! Hi. Welcome to splattercoding. To give you a quick rundown of my intentions, splattercoding is a place for me to put random smatterings of code (of dubious usefulness) and musings on programming, and the world in general. Hopefully someone will read it and inspire me to continue talking to myself.
Doubtful.
Still, I needed a place to post my thoughts so that they are not lost </summary><link rel='replies' type='application/atom+xml' href='http://splattercoding.blogspot.com/feeds/115226834462000607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26494213&amp;postID=115226834462000607' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115226834462000607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26494213/posts/default/115226834462000607'/><link rel='alternate' type='text/html' href='http://splattercoding.blogspot.com/2006/07/and-now-featuring.html' title='and now featuring'/><author><name>Scott Baldwin</name><uri>http://www.blogger.com/profile/04939399140521725787</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></feed>
