<?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-3751916510502420168</id><updated>2011-05-21T19:07:06.285-07:00</updated><category term='interpreter'/><category term='ucblogo'/><category term='java'/><category term='computer science education'/><category term='logo'/><category term='programming'/><title type='text'>Shackapoo</title><subtitle type='html'>My coding blog.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://shackapoo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3751916510502420168/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://shackapoo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Michael Weiss</name><uri>http://www.blogger.com/profile/17191791251961711602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://img443.imageshack.us/img443/3214/1av0.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3751916510502420168.post-9180380445932047416</id><published>2011-05-21T15:55:00.000-07:00</published><updated>2011-05-21T19:07:06.296-07:00</updated><title type='text'>Developing ideas</title><content type='html'>I want to write about procrastinating, specifically about procrastinating on developing my ideas for a synesthetic game, but people have already written better essays than I ever could on the subject (my favorite being John Perry's &lt;a href="http://www.structuredprocrastination.com/index.php"&gt;Structured Procrastination&lt;/a&gt;).  So rather than let this post be hijacked by the procrastination pirates of penzance, I'll try to use this post as a tool to break through my mental block.&lt;br /&gt;&lt;br /&gt;When trying to solve a problem that at first seems overwhelming, it's usually best to break it down into smaller more manageable pieces.  My somewhat overwhelming problem is to create a musically inspired synesthetic game.  There appear to be two big pieces to this goal: &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;a game that's both very accessible and an engaging experience to users&lt;br /&gt;&lt;li&gt;an algorithm that takes as input game state, and outputs music that enhances the game's experience and possibly even feeds back into the contents of the game.  &lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Below is a diagram of what is admittedly a ridiculously vague model.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-j8U5n2H5rTs/TdhDQsSFdDI/AAAAAAAAABM/T_B1-GkhlYU/s1600/concept-overview2.png"&gt;&lt;img style="width: 320px; height: 112px;" src="http://2.bp.blogspot.com/-j8U5n2H5rTs/TdhDQsSFdDI/AAAAAAAAABM/T_B1-GkhlYU/s320/concept-overview2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5609307289933935666" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Let's first try to focus on the game aspect, and brainstorm a list of games that could fit this genre:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;A sidescrolling/third person/first person shooter where enemies, powerups, and graphics vary based on what sounds are generated from shooting enemies and gaining powerups.&lt;br /&gt;&lt;li&gt;A tactical strategy game where the board, enemy, and rules vary based on what sounds are generated from moves made and enemies attacked.&lt;br /&gt;&lt;li&gt;A platform puzzle game where the level is explored and solved based on what sounds are generated from exploring the level.&lt;br /&gt;&lt;li&gt;A card game where your deck, the rules, and play state changes based on the sounds are generated by the cards you play.&lt;br /&gt;&lt;li&gt;An adventure game where the characters you meet and the actions you can take change based on the sounds that are generated by actions you take and characters you meet.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;It's getting clear to me that the only way that I can successfully create this game is to break the hard circular dependency between the sound generation and the game itself.   I think I'll first focus on creating an app that generates sounds, and later create a game that can evolve and change based on multiple input vectors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3751916510502420168-9180380445932047416?l=shackapoo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shackapoo.blogspot.com/feeds/9180380445932047416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3751916510502420168&amp;postID=9180380445932047416' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3751916510502420168/posts/default/9180380445932047416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3751916510502420168/posts/default/9180380445932047416'/><link rel='alternate' type='text/html' href='http://shackapoo.blogspot.com/2011/05/vegetable-animal-and-mineral.html' title='Developing ideas'/><author><name>Michael Weiss</name><uri>http://www.blogger.com/profile/17191791251961711602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://img443.imageshack.us/img443/3214/1av0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-j8U5n2H5rTs/TdhDQsSFdDI/AAAAAAAAABM/T_B1-GkhlYU/s72-c/concept-overview2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3751916510502420168.post-7327621194066792309</id><published>2011-05-01T14:06:00.000-07:00</published><updated>2011-05-04T22:50:14.368-07:00</updated><title type='text'>Flexible tone matrix</title><content type='html'>Here's a link to my version of a 16 step sine wave synthesizer before I go any further:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.shackapoo.com/flex/SoundMatrix.html"&gt;http://www.shackapoo.com/flex/SoundMatrix.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've been messing with the idea of a synethesic(sp?) rpg.  Someone linked me to this tone matrix:  &lt;a href="http://lab.andre-michelle.com/tonematrix"&gt;lab.andre-michelle.com/tonematrix&lt;/a&gt;. I thought a good first step would be reproducing it.  I also wanted to expand on musical parts of the matrix, using more than just the pentatonic scale in one key.  So here is a much more flexible version of the tone matrix, where you can change the scale, key, and bpm.  This is just a fast program I whipped up to figure out how the original was made, so I apologize in advanced if it looks a little rough.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3751916510502420168-7327621194066792309?l=shackapoo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shackapoo.blogspot.com/feeds/7327621194066792309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3751916510502420168&amp;postID=7327621194066792309' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3751916510502420168/posts/default/7327621194066792309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3751916510502420168/posts/default/7327621194066792309'/><link rel='alternate' type='text/html' href='http://shackapoo.blogspot.com/2011/05/flexible-tone-matrix.html' title='Flexible tone matrix'/><author><name>Michael Weiss</name><uri>http://www.blogger.com/profile/17191791251961711602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://img443.imageshack.us/img443/3214/1av0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3751916510502420168.post-9009664987191969308</id><published>2011-04-16T12:46:00.000-07:00</published><updated>2011-04-16T13:03:24.129-07:00</updated><title type='text'>Writing a web based RPG</title><content type='html'>Looking over previous posts, I see a common trend.  I've started and stopped a lot of personal projects over the past few years.    The reasons for why I want to do one are the same as they were then.  The reasons why I probably won't finish it are also the same.&lt;br /&gt;&lt;br /&gt;That being said, I'm starting, and by gummit Imma finish creating, a tactical RPG made natively in the browser.  The reason I'm announcing it before I've made any progress is to keep me honest; if I announce publicly that I'm going to do something, there's way more pressure for me to complete it.&lt;br /&gt;&lt;br /&gt;Hopefully there will be a blog post every week with my progress.  I'll also try to use twitter/facebook as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3751916510502420168-9009664987191969308?l=shackapoo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shackapoo.blogspot.com/feeds/9009664987191969308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3751916510502420168&amp;postID=9009664987191969308' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3751916510502420168/posts/default/9009664987191969308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3751916510502420168/posts/default/9009664987191969308'/><link rel='alternate' type='text/html' href='http://shackapoo.blogspot.com/2011/04/writing-web-based-rpg.html' title='Writing a web based RPG'/><author><name>Michael Weiss</name><uri>http://www.blogger.com/profile/17191791251961711602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://img443.imageshack.us/img443/3214/1av0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3751916510502420168.post-5079922461422942118</id><published>2009-03-01T00:20:00.000-08:00</published><updated>2009-03-01T00:24:38.772-08:00</updated><title type='text'>Logo list evaluation</title><content type='html'>Here's a quick update; the problem that I'm considering right now.&lt;br /&gt;&lt;br /&gt;Consider the following code in logo:&lt;br /&gt;&lt;br /&gt;? print first [3+5]&lt;br /&gt;? print if 1=1 [3+5]&lt;br /&gt;&lt;br /&gt;For the first statement, the output is:&lt;br /&gt;3+5&lt;br /&gt;&lt;br /&gt;For the second statement, the output is:&lt;br /&gt;8&lt;br /&gt;&lt;br /&gt;Why is this significant to logo?  Well, it turns out these cases represent special cases in UCBLogo for handling input inside a list.  The list [3+5] is a list with one word, '3+5'.  If you do the command first [3+5], the word '3+5' is returned.  However, if you do an evaluation of the list [3+5] (i.e. if 1=1 [3+5]), the list is interpreted as having 3 symbols, "3", "+", and "5", and is evaluated as 8. &lt;br /&gt;&lt;br /&gt;The solution to this problem looks like it's simple enough:  If you evaluate an instruction list, and you come across a word which has the symbol(s) +, - (with the exception if it's the first symbol of the word), /, &lt;, (, ), =, or &gt; then you split up the word into separate words around these delimiters.  You then evaluate the list.&lt;br /&gt;&lt;br /&gt;Fun stuff!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3751916510502420168-5079922461422942118?l=shackapoo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shackapoo.blogspot.com/feeds/5079922461422942118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3751916510502420168&amp;postID=5079922461422942118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3751916510502420168/posts/default/5079922461422942118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3751916510502420168/posts/default/5079922461422942118'/><link rel='alternate' type='text/html' href='http://shackapoo.blogspot.com/2009/03/logo-list-evaluation.html' title='Logo list evaluation'/><author><name>Michael Weiss</name><uri>http://www.blogger.com/profile/17191791251961711602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://img443.imageshack.us/img443/3214/1av0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3751916510502420168.post-4978444715379487556</id><published>2009-02-22T19:26:00.000-08:00</published><updated>2009-02-22T19:42:24.917-08:00</updated><title type='text'></title><content type='html'>Well, I haven't been updating this blog recently.  The reasons for this are two fold:&lt;br /&gt;&lt;br /&gt;1) The updates that I have been making aren't interesting enough to make a blog post about.&lt;br /&gt;&lt;br /&gt;2) My work on this project has been slowed down due to job work and other interests.&lt;br /&gt;&lt;br /&gt;As per the law of &lt;a href="http://www.joelonsoftware.com/articles/fog0000000339.html"&gt;fire and motion&lt;/a&gt;, this project won't get done unless I keep making progress each week.  I didn't want to set concrete deadlines since I don't really know how long this is going to take and it's demotivating to fail to meet a deadline once you've set one.&lt;br /&gt;&lt;br /&gt;Instead, I'll do something I should have done formally from the beginning.  I'm going to schedule time each week for working on this project.  Here are the times:&lt;br /&gt;&lt;br /&gt;M: 9:30-11p&lt;br /&gt;T: 9:30-11p&lt;br /&gt;Sa: 10a-12p&lt;br /&gt;Su: 9-11a&lt;br /&gt;&lt;br /&gt;There you go.  7 hours total per week.  Since it takes about 15 minutes to really get started, it's 6 hours of consecutive work per week.  That should get this project rolling.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3751916510502420168-4978444715379487556?l=shackapoo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shackapoo.blogspot.com/feeds/4978444715379487556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3751916510502420168&amp;postID=4978444715379487556' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3751916510502420168/posts/default/4978444715379487556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3751916510502420168/posts/default/4978444715379487556'/><link rel='alternate' type='text/html' href='http://shackapoo.blogspot.com/2009/02/well-i-havent-been-updating-this-blog.html' title=''/><author><name>Michael Weiss</name><uri>http://www.blogger.com/profile/17191791251961711602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://img443.imageshack.us/img443/3214/1av0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3751916510502420168.post-4488681786816337214</id><published>2009-02-07T23:48:00.000-08:00</published><updated>2009-02-08T00:54:41.674-08:00</updated><title type='text'>Logo development update: Test driven development and Logo Lexer</title><content type='html'>Test driven development is relatively new to me in the sense that, while I've known about it for some years, I've never used it in any non trivial project.  This deficiency is something that I regret.  &lt;br /&gt;&lt;br /&gt;To be more accurate, not using test driven development is something I feel that I should regret, but deep down inside I do not.  Most working developers understand things need to get done under a certain deadline.  To state the obvious, certain development methods take longer than others to initially deliver a result.  If the final product is something with loose requirements or requirements that are hard to test, test driven development is probably too expensive in terms of the time it will take to push out a change.  However if you have a tightly defined spec with well defined requirements, then test driven development may work for you.&lt;br /&gt;&lt;br /&gt;  Note that while I do not think test driven development is the bees knees, I do believe well defined tests are essential. Most projects are better for having rigorous tests, but you have to think carefully about the way you place writing tests into your development process.  For some projects, it's better to write tests before you've written a line of code, for some it's better after you've written the entire thing, and then there's all that stuff in between.  Who really cares, it's all very domain specific, and it's been written about before and written better.  We're done with this topic and we're moving to part two:&lt;br /&gt;&lt;br /&gt;Logo development will be test driven.  The test driven development model appeals to this project since ucblogo is a (mostly) well defined language whose core concepts rarely change over time.  It's important to write the tests before writing the code since the tests will essentially write the spec for interpreter implementation.&lt;br /&gt;&lt;br /&gt;So far I've written several tests for the logo lexer.  Each test is separated into two files: a test file with a sample logo program, and an expected results file with the logo lists written as strings.  Each test file will be read and executed by a junit test in the lexer module and the output will be compared to the correspond expected file.&lt;br /&gt;&lt;br /&gt;Here is the sample test and expected file:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;sample.test&lt;/b&gt;&lt;br /&gt;;; a simple print statement&lt;br /&gt;print "simple&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;sample.expected&lt;/b&gt;&lt;br /&gt;[print quoted simple]&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;As per usual, let me first state why this method of testing is bad (and by association why it makes me a bad developer):&lt;br /&gt;&lt;br /&gt;This approach sucks because it separates the core part of the test from code itself and makes it more difficult for me to read my test files .  Now I have to create a separate conf file to hold path variables that java doesn't know about natively since it's not embedded in the code.  This conf file makes the build process more complicated, since I now need to include this file if I'm testing, but not include it if I'm running the app as normal since I don't want the dependencies in the final application.&lt;br /&gt;&lt;br /&gt;So why did I choose this method to develop the Lexer tests?&lt;br /&gt;&lt;br /&gt;This approach is nice because it separates the core part of the test from the code itself and allows me to switch the code base I will be using if I need to.  Since this project is in its early stage, if I decide it would be better to write the interpreter in say, actionscript or C#, I could switch without losing everything I wrote.  Java is a nice platform and all, but in reality, it's not an ideal language for this kind of development.  If I find out there's a better multi-platform (in terms of both browser and OS) language for this kind of work, then I want to be able to quickly and painlessly jump ship.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3751916510502420168-4488681786816337214?l=shackapoo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shackapoo.blogspot.com/feeds/4488681786816337214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3751916510502420168&amp;postID=4488681786816337214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3751916510502420168/posts/default/4488681786816337214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3751916510502420168/posts/default/4488681786816337214'/><link rel='alternate' type='text/html' href='http://shackapoo.blogspot.com/2009/02/test-driven-development-is-relatively.html' title='Logo development update: Test driven development and Logo Lexer'/><author><name>Michael Weiss</name><uri>http://www.blogger.com/profile/17191791251961711602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://img443.imageshack.us/img443/3214/1av0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3751916510502420168.post-8818603406685664323</id><published>2009-02-01T00:38:00.000-08:00</published><updated>2009-02-01T01:00:39.489-08:00</updated><title type='text'>make "|Step 1 of a logo interpreter| "read</title><content type='html'>An interpreter at the highest level looks like this:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;loop until done&lt;br /&gt;&amp;nbsp;&amp;nbsp;read input&lt;br /&gt;&amp;nbsp;&amp;nbsp;evaluate the input&lt;br /&gt;&amp;nbsp;&amp;nbsp;print the evaluated input to the user&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This set of steps is commonly referred to as the read-eval-print loop. &lt;br /&gt;&lt;br /&gt;At a quick glance, one might think that each step takes an equally long amount of time to implement.  That thought is very far from the truth.  If we were to relate the implementation time for each step in the read-eval-print loop to the thickness of the components of a deli sandwich, the read and print steps would be thin slices of rye, and eval would be 20 different layers of delicious meats and cheeses squished in between those two slices. &lt;br /&gt;&lt;br /&gt;I am currently working on test cases for the logo lexer, which is the core of the read step.  Although it's certainly not the meat of the interpreter (TO SELF: oh god, give up with this analogy), it is important to get right.  In coming up with a comprehensive set of test cases, I came across a few syntactical features that you don't really find in other languages. &lt;br /&gt;&lt;br /&gt;For example, in ucblogo, you can set a variable name to be any valid word value.  Since a word can be almost any sequence of text, this can lead to some interesting, if not obfuscated ways of writing code. Here are some interesting, and perfectly legal, logo code snippets (note: don't try to copy this into your logo interpreter since the browser doesn't render tabs):&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;;; test a space followed by a tab. Creates a variable named " " with value "hello"&lt;br /&gt;? make "\&amp;nbsp;     "hello&lt;br /&gt;;; test a tab followed by a space. Creates a variable named "\t" with value "goodbye"&lt;br /&gt;? make "\&amp;nbsp;     "goodbye&lt;br /&gt;;; print the value of the space variable&lt;br /&gt;? print \&amp;nbsp;&lt;br /&gt;;; print the value of the tab variable&lt;br /&gt;? print \&amp;nbsp;  &lt;/blockquote&gt; &lt;br /&gt;&lt;br /&gt;The above code prints hello, and then goodbye.  UCBLogo actually gives you several ways to do this.  You could also write the code above with vertical bars like this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;;; print the value of the space variable&lt;br /&gt;? print | |&lt;br /&gt;;; print the value of the tab variable&lt;br /&gt;? print |    |&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This is only a taste of the kind of obfuscation this syntactic feature gives you.  Imaging reading and maintaining code which combined spaces and tabs to create all sorts of weird variable names.  It's a scary thought.&lt;br /&gt;&lt;br /&gt;However, it does offer the power to come up with some more practical naming conventions that allow for white space, something most other languages don't offer.  Take for example:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;? make "|my greeting| "hello       &lt;br /&gt;? make "|my farewell| "goodbye&lt;br /&gt;? print |my greeting|&lt;br /&gt;hello&lt;br /&gt;? print |my farewell|&lt;br /&gt;goodbye&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;That's a little more understandable than camel hump notation... or it would be if those darn vertical bars weren't there.  While it doesn't look like there's an easy way around this, something I may do once I've implemented the core language is create an editor that hides the vertical bars but still makes it clear which words are part of the variable.&lt;br /&gt;&lt;br /&gt;To me, this flexibility in variable naming is a neat part of logo that really shows it was a language designed to be accessible to everyone.  Although Logo gives you the power to write messed up code with variables names dependent on spaces and carriage returns, it also allows kids to write variables in plain English.  Actually, since ucblogo has UTF8 support, kids can write programs that read well in any language. &lt;br /&gt;&lt;br /&gt;The more I delve into this language, the more interesting it gets.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3751916510502420168-8818603406685664323?l=shackapoo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shackapoo.blogspot.com/feeds/8818603406685664323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3751916510502420168&amp;postID=8818603406685664323' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3751916510502420168/posts/default/8818603406685664323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3751916510502420168/posts/default/8818603406685664323'/><link rel='alternate' type='text/html' href='http://shackapoo.blogspot.com/2009/02/make-step-1-of-logo-interpreter-read.html' title='make &quot;|Step 1 of a logo interpreter| &quot;read'/><author><name>Michael Weiss</name><uri>http://www.blogger.com/profile/17191791251961711602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://img443.imageshack.us/img443/3214/1av0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3751916510502420168.post-1715767007381737560</id><published>2009-01-24T20:06:00.000-08:00</published><updated>2009-02-01T01:05:53.013-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='logo'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science education'/><category scheme='http://www.blogger.com/atom/ns#' term='interpreter'/><category scheme='http://www.blogger.com/atom/ns#' term='ucblogo'/><title type='text'>Logo in Java: why do it at all?</title><content type='html'>The plan: implement a version of the &lt;a href="http://www.cs.berkeley.edu/~bh/logo.html"&gt;UCBLogo&lt;/a&gt; interpreter in Java.&lt;br /&gt;&lt;br /&gt;To begin, let me just say that I start and abandon a lot of projects.  It starts by me choosing a project that I have few doubts about.  However, soon after I start, there's an inner skeptic in me that says I should forget about the whole thing and do something useful.  Usually, my mentality is to ignore my skeptical thoughts and just go on with the project.  "Screw you doubts, I'm going to go and do it anyway!"  These doubts, unresolved, then fester and grow as I'm working out the project details.  As soon as I hit a tough point, the doubts take over and soon I abandon what I'm working on and start the cycle anew by searching for another doubt free project.&lt;br /&gt;&lt;br /&gt;This time, I'm going to take a different approach.  I'm going to get the doubts out of the way now, so I can push through the initial development phase and end up with something of value.&lt;br /&gt;&lt;br /&gt;So here it is, the three main reasons why this project is a giant waste of time:&lt;br /&gt;&lt;br /&gt;1) It's been done and it's been done better.&lt;br /&gt;&lt;br /&gt;There already are many logo implementations already out there. According to Wikipedia, there are 187 working implementations of Logo.  If someone wants to write a program in Logo, they can pick any one of these implementations.  Moreover, there are several rock solid implementations, like &lt;a href="http://www.cs.berkeley.edu/~bh/logo.html"&gt;UCBLogo&lt;/a&gt;, &lt;a href="http://www.fmslogo.org/index2.html"&gt;FMSLogo&lt;/a&gt;, and &lt;a href="http://www.microworlds.com/"&gt;Microworlds&lt;/a&gt;, which are better than anything I could ever come up with.  &lt;a href="http://www.cologo-lang.org/"&gt;There's even a really cool web based one being developed&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;2) Logo is old, boring, and dying&lt;br /&gt;&lt;br /&gt;Logo is over 40 years old.  Its main purpose was to be an educational programming language for kids.  In recent years, there have been other exciting developments in educational programming languages.  &lt;a href="http://www.alice.org/"&gt;Alice&lt;/a&gt; lets you create programs in your own 3D environment.  &lt;a href="http://scratch.mit.edu/"&gt;Scratch&lt;/a&gt; lets you snap together blocks and share your programs on the web.  Logo is just turtle graphics, which no kid thinks is exciting.  Logo is dead, long live Alice and Scratch.&lt;br /&gt;&lt;br /&gt;3) Java is the wrong language&lt;br /&gt;&lt;br /&gt;Let's face it, Java is not the ideal language for implementing a Logo interpreter.  The biggest problem with choosing Java as my language is the lack of built in continuations.  You see, Logo (or actually UCBLogo) requires tail call elimination.  The easiest way to implement tail call elimination is with a language that supports continuations.  In Brian Harvey's C based version of UCB Logo, this problem was solved with an evaluation procedure that used GOTO statements to avoid explicit recursion and a stack to store the execution state.  Java doesn't have GOTO, so tail call elimination will need to be implemented by either inventing continuations on top of the JVM or some other more convoluted way.  Why not implement the language in something that already has continuations so I don't have to deal with this stuff?&lt;br /&gt;&lt;br /&gt;To summarize the above: Why make a cement wheel with a hammer and chisel when you can get a better one, made of rubber, at the hardware store for less?&lt;br /&gt;&lt;br /&gt;I chose Logo because I'm interested in Computer Science education, and what better way to learn about the ideas behind CS education then by learning every detail of a language rich in those ideas.&lt;br /&gt;&lt;br /&gt;I chose Java, or explicitly the JVM, because it can run in a browser, it runs on all platforms, and because it's popular.  When I'm done, I want someone to be easily able to use it for their own purposes.  As for continuations, I'll deal with them when I get there.&lt;br /&gt;&lt;br /&gt;And for the point that it's been done and it's been done better.  Well, erhm... this point is rather embarrassing.  You see, I've never written a compiler or interpreter before that wasn't for a class, and I've certainly never written one that was any good.  &lt;a href="http://steve-yegge.blogspot.com/"&gt;Many&lt;/a&gt; &lt;a href="http://www.joelonsoftware.com"&gt;people&lt;/a&gt; &lt;a href="http://www.ericsink.com/"&gt;say&lt;/a&gt; that writing a compiler or interpreter yourself is a right of passage as a programmer.  I know it's doubtful anybody will call me a better programmer after writing this thing, but it's even more doubtful that they will if I don't write it.  This is one right of passage that I need to take.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3751916510502420168-1715767007381737560?l=shackapoo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shackapoo.blogspot.com/feeds/1715767007381737560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3751916510502420168&amp;postID=1715767007381737560' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3751916510502420168/posts/default/1715767007381737560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3751916510502420168/posts/default/1715767007381737560'/><link rel='alternate' type='text/html' href='http://shackapoo.blogspot.com/2009/01/logo-in-java-why-do-it-at-all.html' title='Logo in Java: why do it at all?'/><author><name>Michael Weiss</name><uri>http://www.blogger.com/profile/17191791251961711602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://img443.imageshack.us/img443/3214/1av0.jpg'/></author><thr:total>0</thr:total></entry></feed>
