Monday, January 30, 2006

Rur-ple 0.95 is out

RUR-PLE 0.95 has been released. The "end" is somewhat in sight. A copy of the announcement that I have posted on a few lists is appended at the end of this post.

This new version has required a lot of work, and relatively little to show for, for the casual observer. Other than writing more lessons, there are still a few things that I must implement before release 1.0. There has been a comment made on this blog about eliminating the "Success" dialog. The person who made the comment had a very good point. However, I have read a fair bit about "positive visual reinforcement" as an encouragement to programmers; even experience programmers seem to get motivated by it (think "green lights/red lights" for Java unit testers ... if you're familiar with it). So, I have been thinking about some alternative that don't require the user to actually press a button to resume.

This newest release has what I consider to be a really nifty feature; I call it the Lightning Compiler. This is a cross between a Python editor and a Python interpreter. It is a GUI based app with two main windows. Just enter a script, either by typing it in or importing from a file, in the Editor window, press "run", and you get the result in the output window. It handles input() and raw_input() through dialogs. I like it so much, that I submitted a simplified version to the online Python cookbook. It is available as a separate download (lightning.py) on sourceforge. I now use it as my lightweight basic Python testing environment. I still use SPE for serious coding though. If you haven't tried it yet, I strongly encourage you to do so.

[The lightning compiler is embedded in rur-ple in the fourth tab, and the interface is a bit different from the stand-alone version. It should be more user-friendly looking for a younger audience.]
=============================
RUR-PLE 0.95 has been released.

A link to the download page can be found at http://rur-ple.sourceforge.net

(The site is slightly out of date, and there is no plan to update it in the future as it provides an excellent idea of what RUR-PLE is about.)

This new version contains a few bug fixes and it should now work properly on MacOS. wxPython 2.6+ is strongly recommmended. There has been a few minor changes in the robot instructions, and the lessons has undergone some major changes.

RUR-PLE stands for Roberge's Used Robot: a Python Learning Environment.

This learning environment contains four main elements:

1. A simple html browser to look at the documentation and, potentially, the lessons. However, the new lessons use cascading style sheets which cannot be interpreted correctly by the browser. Usage of an external browser (Firefox :-) is strongly recommended.
2. A "robot world" with a robot that can accomplish tasks through Python programs.
3. A built-in interpreter which can be used to play with Python
4. A built-in file editor which can be used for futher Python explorations.

The interface is available in English, French and Spanish. Translations are welcome!

Version 0.95 contains 36 complete lessons (English version only). The lessons are also available as a separate download.

Version 1.0, which will aim to be a "complete" Python tutorial for people that have never programmed before, should have approximately 50 lessons.

A few "bonus" lessons have been included. In particular, it is suggested that you have a look at "A Robotic Fairy Tale".

=====
In 1981, Richard Pattis introduced "Karel the Robot" as a tool to teach computer programming.
Reeborg is a robot built on the 1981 Pattis' model... and it is starting to show its age.
It has an oil leak, which allows us to follow its trail. Its compass is broken; it only knows if it is
facing north or not, unlike Karel who could determine its orientation with respect to all four cardinal points.
Pattis' Karel the Robot was named after the author Karel Capek, who popularized the word robot in his play Rossum's Universal Robots (RUR). While RUR-PLE shares the basic RUR acronym,
in this case it stands for Roberge's Used Robot. However, through the magic of Guido van Rossum's Python, you can learn how to fix it and design a better one, worthy of the name Rossum's Universal Robot.

1 comment:

Jean-Yves RAZAFY said...

Sorry couldn't find a way to send you a patch for the bug in rur_py/translation.py

--- translation.py 2006-03-22 17:17:26.000000000 -0500
+++ newTranslation.py 2006-03-22 16:52:09.000000000 -0500
@@ -5,8 +5,9 @@
# standard 'gettext' approach and expects some standard functions to
# be defined - which they are not in my customized version.

-import os
+import os , sys
home = os.getcwd()
+OsPlatform_Win = sys.platform.startswith('win')

english = {}
french = {}
@@ -14,23 +15,34 @@

#---BUG HERE FOR UNIX-LINUX path // not \\ as in windows
def select(lang):
- global selected
- global english, french, spanish
- if lang == 'en':
- if english == {}:
- filename = os.path.join(home, "rur_locale\\en\\english.po")
- english = build_dict(filename)
- selected = english
- if lang == 'es':
- if spanish == {}:
- filename = os.path.join(home, "rur_locale\\es\\spanish.po")
- spanish = build_dict(filename)
- selected = spanish
- if lang == 'fr':
- if french == {}:
- filename = os.path.join(home, "rur_locale\\fr\\french.po")
- french = build_dict(filename)
- selected = french
+ global selected
+ global english, french, spanish
+ if lang == 'en':
+ if english == {}:
+ if OsPlatform_Win:
+ filename = os.path.join(home, "rur_localei\\en\\english.po")
+ else:
+ filename = os.path.join(home, "rur_locale/en/english.po")
+ english = build_dict(filename)
+ selected = english
+ if lang == 'es':
+ if spanish == {}:
+ if OsPlatform_Win:
+ filename = os.path.join(home, "rur_localei\\es\\spanish.po")
+ else:
+ filename = os.path.join(home, "rur_locale/es/spanish.po")
+ spanish = build_dict(filename)
+ selected = spanish
+ if lang == 'fr':
+ if french == {}:
+ if OsPlatform_Win:
+ filename = os.path.join(home, "rur_localei\\fr\\french.po")
+ else:
+ filename = os.path.join(home, "rur_locale/fr/french.po")
+ french = build_dict(filename)
+ selected = french
+
+

def _(message):
message = message.replace("\n","") # message is a key in a dict