tag:blogger.com,1999:blog-129754962024-02-07T03:24:25.763+01:00CosmosGrammaticus.Rexxcosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.comBlogger43125tag:blogger.com,1999:blog-12975496.post-32297368771633182732014-09-21T21:17:00.002+02:002014-09-21T21:17:58.088+02:00Pipelines on TSOToday for the first time the open sourced Pipelines processor for NetRexx ran on TSO. After NetRexx 3.03 did not run on OMVS at all due to codepage problems, and after the integrated Pipelines suffered from a JVM bytecode mismatch problem, I have incorporated the Pipelines build into the Ant build for NetRexx and finally have bytecode for JVM 1.5 for the Pipelines classes.
So with pleasure I announce the first VM/CMS compatible version of Pipelines for NetRexx running on MVS/TSO. In a few moments I am going to run it on real iron (my employer's EC12) to get an impression of its performance. After some work on the manual it is going to be released together with NetRexx 3.04. cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com0tag:blogger.com,1999:blog-12975496.post-928220964376765832014-08-31T17:38:00.002+02:002014-08-31T17:38:58.446+02:00NetRexx PipelinesI am working on integration of Pipelines (by Ed Tomlinson and Jeff Hennick) with the NetRexx translator for release 3.04, that will be available somewhere in September 2014. Prompted by fairly unrelated thoughts about Java 8's lambda's and the pipelines on collections classes made possible by those, I remembered how closely Rexx is to Pipes on VM/CMS (as is my conclusion based on lots of stories) I was looking into a way of making the use of a pipeline as straightforward as possible.
In an earlier stage (no pun intended) I had repackaged the njpipes package into using the org.netrexx.njpipes hierarchy (where previous releases used pipes. and stages. packages) and was not entirely happy with the visual distraction the elaboration of the package names (to adhere to the package naming conventions) introduced; while an the other hand feedback from early adapters of the njpipes package indicated that using CLASSPATH and successfully installing the package was still problematic, undoubtedly because people trying the pipelines would be more proficient with Rexx than with Java.
The solution seems to be to integrate the package with the NetRexx translation archive itself, making sure there is not import needed to use a pipeline. The pipes compiler compiles a NetRexx source file which includes a pipe specification to a .class file - even if it contains no NetRexx but only a pipe - or a number of pipes.
At the moment everything works and the test cases work. I am working on the manual and try to get it into a shape that I can send to John Hartmann, who earlier on promised to write a short introduction. When it all works, it will also be the first time an open source package will provide a pipes implementation for z/OS TSO.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com0tag:blogger.com,1999:blog-12975496.post-71383564719728969862013-01-12T15:38:00.001+01:002013-01-12T20:05:15.305+01:00NetRexx, Raspberry Pi and MQTTIt is more affordable, easier and quicker than ever to acquire, install and use a system that would still have cost a lot of time and money some years ago. A $35 Raspberry Pi, a card-size computer (bring your own keyboard and screen, until ssh is enabled by default by the distributions) and a message broker running on it can do impressive things.
I am toying around with some security cameras, only, seeing the ease with which they can be compromised, I do not run them exposed to the internet, just use a Raspberry Pi for tunneling their http over ssh, and some software to control them, capture events and send them to a message broker that runs overseas, so I can have a good near-realtime view over what happens.
As an indication how quickly the developments are, I had to revise a chapter in the NetRexx Programmer's Guide, that was written after the 3.01 release, already twice for the impending 3.02 release. The version of Linux running on the Raspberry, aptly named 'Raspbian' because it is a Debian for the Raspberry, needed to be compiled with the soft-float api because the Oracle Embedded Java version required it - no longer with the preview for version 8.
This prompted me to refresh the install of one of my two Raspberries. I am happy to be able to state here that it took less time than ever to refresh an OS and my whole development environment. This is due to at least three facts:
1) The OS images are ready to run and only have to be copied to a SDHC card - I use SanDisk Ultra 16GB cards which are cheap and run well with the Raspi.
2) The instructions provided by nice people on their blogs are excellent. Oracle's VM still runs rings around the others, speed-wise, so this was an easy choice. I used this one: http://www.savagehomeautomation.com/projects/raspberry-pi-installing-oracle-java-se-8-with-javafx-develop.html which is good and to the point. You can skip the GUI instructions for writing the SD card and just use dd - but I presume you already did if you are in this stage. The JDK is installed like this:
scp it to the raspi
<code>
sudo mkdir -p -v /opt/java <br>
tar xvzf ~/jdk-8-ea-b36e-linux-arm-hflt-29_nov_2012.tar.gz (the filename changed) <br>
sudo mv -v ~/jdk1.8.0 /opt/java <br>
sudo update-alternatives --install "/usr/bin/java" "java" "/opt/java/jdk1.8.0/bin/java" 1 <br>
sudo update-alternatives --set java /opt/java/jdk1.8.0/bin/java
</code>
Actually, it runs if you only run the tar step, but the added tidiness in telling apt that you are running this is excellent.
3) I have all my stuff in Git so I can easily move it everywhere I am.
Installing mosquitto
For mosquitto, the open source mqtt broker (at http://http://mosquitto.org), there is also a debian package (only for the hard-float Raspbian, another reason to move to this, having previously run Java 7 on the soft-float Wheezy distribution).
This boils down to (on the raspi):
<code>
wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key <br>
sudo apt-key add mosquitto-repo.gpg.key <br>
cd /etc/apt/sources.list.d/ <br>
sudo wget http://repo.mosquitto.org/debian/mosquitto-repo.list <br>
sudo apt-get update <br>
sudo apt-get install mosquitto <br>
</code>
That is it - a message broker, programmable in NetRexx (on the Java Runtime) for $35, an SDcard and half an hour of work.
The new NetRexx version 3.02 has examples on how to use mqtt (and also WebSphere MQ, to which it connects, by the way).
The examples are short, so I can publish them here:
<pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"><code>import java.sql.Timestamp
import org.eclipse.paho.client.mqttv3.
class Publish implements MqttCallback
method Publish()
conOpt = MqttConnectOptions()
conOpt.setCleanSession(0)
tmpDir = System.getProperty("java.io.tmpdir")
dataStore = MqttDefaultFilePersistence(tmpDir)
clientId = MqttClient.generateClientId()
topicName = "/world"
payload = "hello".toString().getBytes()
qos = 2
do
broker = "localhost"
port = "1883"
brokerUrl = "tcp://"broker":"port
client = MqttClient(brokerUrl,clientId, dataStore)
client.setCallback(this)
catch e=mqttException
say e.getMessage()
e.printStackTrace()
end -- do
client.connect()
log("Connected to "brokerUrl" with client ID "client.getClientId())
-- Get an instance of the topic
topic = client.getTopic(topicName)
message = MqttMessage(payload)
message.setQos(qos)
-- Publish the message
time = Timestamp(System.currentTimeMillis()).toString()
log('Publishing at: 'time' to topic "'topicName'" with qos 'qos)
token = topic.publish(message)
-- Wait until the message has been delivered to the server
token.waitForCompletion()
-- Disconnect the client
client.disconnect()
log("Disconnected")
method log(line)
say line
method messageArrived(t=MqttTopic,m=MqttMessage)
log("Message Arrived: " t m)
method deliveryComplete(t=MqttDeliveryToken)
log("Delivery Complete: " t)
method connectionLost(t=Throwable)
log("Connection Lost:" t.getMessage())
method main(args=String[]) static
Publish()
</code></pre>
And the corresponding Subscriber is like this:
<pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"><code>import java.sql.Timestamp
import org.eclipse.paho.client.mqttv3.
class Subscribe implements MqttCallback
properties
client = MqttClient
conOpt = MqttConnectOptions()
tmpDir = System.getProperty("java.io.tmpdir")
clientId = MqttClient.generateClientId()
topicName = "/world"
qos = 2
method Subscribe()
do
connectAndSubscribe()
catch mqx=MqttException
log(mqx.getMessage())
end
-- Block until Enter is pressed
log("Press <Enter> to exit");
do
System.in.read()
catch IOException
end
-- Disconnect the client
client.disconnect()
log("Disconnected")
method connectAndSubscribe() signals MqttSecurityException,MqttException,MqttPersistenceException
conOpt.setCleanSession(1)
dataStore = MqttDefaultFilePersistence(tmpDir)
do
broker = "localhost"
port = "1883"
brokerUrl = "tcp://"broker":"port
client = MqttClient(brokerUrl,clientId, dataStore)
client.setCallback(this)
catch e=mqttException
say e.getMessage()
e.printStackTrace()
end -- do
this.client.connect()
log("Connected to "brokerUrl" with client ID "client.getClientId())
-- Subscribe to the topic
log('Subscribing to topic "'topicName'" qos 'qos)
this.client.subscribe(topicName, qos)
method log(line)
say line
method messageArrived(t=MqttTopic,m=MqttMessage)
log("Message Arrived: " t m)
method deliveryComplete(t=MqttDeliveryToken)
log("Delivery Complete: " t)
method connectionLost(t=Throwable)
do
connectAndSubscribe()
catch mqx=MqttException
log(mqx.getMessage())
end
method main(args=String[]) static
Subscribe()
</code></pre>
Both work with the current Paho Java client library, to be gotten at: http://www.eclipse.org/paho/
cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com0tag:blogger.com,1999:blog-12975496.post-6579668329603312302011-06-08T23:50:00.004+02:002011-07-06T12:13:45.166+02:00NetRexx Open SourceToday was a very good day for Rexx, as it is the day that NetRexx was open sourced by IBM and the Rexx Language Association. More specifically, RexxLA is taking over from IBM. This open sourcing process has not been a short one, and there is no real reason to go into specifics about where it got stuck and who pulled it out of the mud, various times. There has been some incredible work done by some people at IBM - I am not really sure if they want to remain nameless, but I have an inkling that IBM sees it that way. I will remember them anyway and suggest they be honorary members for life of RexxLA.<br /><br />It is no secret that the economic crisis and cutting cost played a part in this prolonged process. Also, the nefarious Linux lawsuit against IBM, by - I forget their name already - ah no, it was SCO, which took advantage in the vilest possible way of the OS/2 and AIX filesystem that IBM donated to Linux open source, also made IBM wary and insured that any Open Sourcing will be under close scrutiny and a watchful eye of the legal department. This is how it happened with Object Rexx, and this is how it happened with NetRexx. There is an important difference, in that NetRexx never was shipped as a product, except for a short time with z/VM, and there still under the ancient EWS licence.<br /><br />NetRexx is now released under the ICU licence, which is a very liberal one, and RexxLA will take good care of it. The people who have been mobilized over the years are going to convene as the NetRexx language board, and development and releases will follow the great example that Mike Cowlishaw has set for his family of languages, which is talk it over and document first, seek agreement and only then implement.<br /><br />The future of this great language is now safe, and there is no danger that it will languish on some corporate filesystem until it is inadvertently forgotten or erased. RexxLA will position itself to take on some more products as open source; but first we need to focus for some time on the future of NetRexx. Let us see if we can convene a language symposium to get some face-to-face time with the key players. This is only the beginning, and we will make sure that the world will hear more about NetRexx, the most pleasant computer language that yields very fast Java classes.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com1tag:blogger.com,1999:blog-12975496.post-22000916173515478762011-05-02T16:16:00.005+02:002011-05-02T16:49:01.739+02:00Rexx in MUSICNot the sort of MUSIC you can dance to, but nevertheless a small discovery, at least for me. On a trail that started from a YouTube clip on CTSS - a contemparary report by a young Fernando José "Corby" Corbato, leading to different Wikipedia articles on timesharing, I found MUSIC/SP amongst the TSS, MTS and TSO systems, a product of McGill University in Canada and once an IBM product - on of the timesharing systems for its mainframes. You can read about it at <a href="http://en.wikipedia.org/wiki/MUSIC/SP">here.</a> It is based on an earlier IBM timesharing system called RAX, of which hardly a trace is to be found on the net.<br /><br />A working system is downloadable at <a href="http://www.canpub.com/teammpg/de/mcgweb/downloads.htm">here</a> - it is runnable under a windows based simulator or under the multiplatform Hercules mainframe simulator. Being on a Mac, this is what I did. It offers a wealth in programming options and uses an interface that is quick to be grasped - including an ISPF/PDF like editor and panel system. You will need Hercules and a 3270TN Terminal Emulator. The system's console is a Telnet session, but the user terminals require the 3270 protocol. A Hercules configuration file is included, so you are good to go.<br /><br />This whole menuing system is written in Rexx. When running CPS - the venerable clauses-per-second benchmark, I noticed that the system announces itself to "parse source" as CMS. Some inquiries later it became clear that the original VM Rexx interpreter code is part of MUSIC/SP. So everyone who has an interest in checking out the VM Interpreter can do so now using a legal download - most publicly available VM releases predate the release of Rexx and are a such of less interest to the Rexx community.<br /><br />Rexx and other programming languages are runnable with a scheme that requires hardly any JCL - in fact none at all if you put the required magic incantion on the top of your script files. It is a nice environment for experimentation, and it is very laudable that these products have been preserved for posterity. A Rexx class, using the real interpreter, could be held in the cloud without any setup using IBM's (Rational now) 3270 on demand product which runs in the browser.<br /><br />If you want to set up a MUSIC/SP system for yourself and you run into any trouble, just drop me a line.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com0tag:blogger.com,1999:blog-12975496.post-25184930637498805202010-12-25T14:10:00.002+01:002010-12-25T15:05:07.516+01:002010 Rexx Symposium IIThe second day, which was the first real symposium day - depending how you want to look at it - started with some challenges. Dave Ashley was not online, so we switched to Mark Hessling in Australia. Having ambushed Mark with webex (we originally wanted to use teamviewer, but were unsure about the options for sound - with me having some recent bad Skype experiences (before the outage) of call keeping ringing throughout the group call. Mark had no sound initially, and then it was very loud - and video looked initially dark and grim, but for his second presentation he had switched to his Mac and everything was fine. This first presentation was about the new functionality in Regina, the brilliant multiplatform Classic Rexx interpreter, and an advance peek into the THE editor in the GUI version.<br /><br />Because the web conference was so new for all of us, we needed some time to fully adapt - switching off peoples mikes and seeing Kees Wiegel pop up with his video feed during various parts of the presentations. <br /><br />After the break it was time for Rony who presented the 2010 edition of BSF4Rexx, the glue between Rexx and Java, followed by Jon Wolffers who saw his CSVStream class adopted into the newly released ooRexx 4.1.0. This led to some discussion about error handling and some late night development work by Jon - so it was a very fruitful presentation with changes being committed to the code base the same week.<br /><br />Next was yours truly with my 'Building NetRexx Systems' presentation which was actually an expanded version of one not presented last year. This went sufficiently well but was hampered by the slides not refreshing very energetically over the webex. I could see this on the ipad which I used as webex monitor using a second userid and the webex ipad app. Probably my MacBook, already overtaxed by running Keynote, Lotus Notes and Sametime (work, you know) and hosting the webex conference, coupled with two high resolution screens, had to do with this. This cost us the live demo of the work done by Bill Finlason for the NetRexx plugin for Eclipse.<br /><br />Rony did a presentation on using Rexx and ooRexx from NetRexx - its sibling as the title stated. This offered an interesting view on how the strong points of both environments can be combined. After this session we had a break and we continued, with a shrunken audience (especially locally) for the NetRexx architecture board. As web conferences go, compared to a face2face meeting, the medium hampered us somewhat in a free exchange of ideas, but left a strong impression that a conservative approach to the language proper is warranted, while work in Java integration is seen as desirable. I will do a separate writeup of this NLARB session, including the valuable email feedback I received afterwards.<br /><br />The last symposium day was Tuesday, December 14, 2010. We started with Jaap Brugman, who presented on his work of coupling Rexx to cryptographic hardware for the Central Bank of the Netherlands, starting with a general introduction to cryptography and gradually delving into the intricacies of the C interface to the Rexx external functions that were used throughout his application.<br /><br />Next was Robert John Wilson, who uses NetRexx to diagnose JDBC connections in his job as database specialist for IBM, His presentation was received very well, also because he demonstrated the tools that he uses live with real connections, and went through the sourcecode to illustrate the easy way in which this has been put together in NetRexx.<br /><br />After the break Mark Hessling continued from Brisbane, with the earlier mentioned brilliant sound and video, and introduced two not yet released tools for Rexx, Rexx/CSV and Rexx/PDF. The former shows a different approach to CSV parsing that can be used from a Classic Rexx environment, and the latter nicely interfaces to a tool that produces Postscript and PDF.<br /><br />Thomas Schneider from Vienna presented (from his study in Vienna) an overview of his product line, which has been put together using NetRexx exclusively, while his conversion products all convert to NetRexx.<br /><br />Michiel van Hoorn was next, and delivered the last local (he lives in Almere) presentation of this 2010 Symposium, on his personal toolkit (aptly named 'Orde!' - which is the imperative for Order! in the Dutch language) which he employs for all his projects in his career as consultant and project manager.<br /><br />The two last presentations, both from IBM'ers and both over the phone, were by David Ashley, who did a rundown of all changes and new functionality in ooRexx 4.1.0 as a repeat performance of his presentation in Winchester last year - and boy that ooRexx team has been busy the past year, and Harris Morgenstern, who added z/OS as a point of interest during this symposium again, with his very thorough presentation on System Rexx. This product is part of the z/OS simplification effort that is going on at IBM, and aims to make Rexx the perfect language to add system (console) commands to z/OS. I had to operate the slide pack during his talk, and what seemed to be an off-by-one error during the start of his talk, deteriorated with time. I had a copy of his slideset on my second screen, and it took some quick reading and adaption to show the slide corresponding with the words- I hope I did not do too bad a job.<br /><br />Having the last presentations by one local person and for the rest remotely, enabled us to not lose half a day for travel - this might be an idea for subsequent symposia. So slightly past 18.00 hours local time we could conclude this 2010 - 21st - Rexx Language Symposium. It was interesting in the sense that it was a first for web access to the meeting, and this has led to a much larger attendance than the past few years. We also have learned a lot about how to conduct this, and this will certainly be usable for the next year. For the next time, we need sharper video, better sound systems (to feed a clip-on mike into the web conference) and a separate operator to remotely close mikes - and perhaps less quirky software, although it certainly was manageable.<br /><br />So - I declare this symposium a moderate success and will proceed to prepare for the next one, probably in May 2011 on the other side of the atlantic ocean.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com0tag:blogger.com,1999:blog-12975496.post-56673232277994781052010-12-12T16:40:00.009+01:002010-12-12T18:53:02.758+01:00Rexx Language Symposium 2010It felt bad not to have a symposium in 2010 - so we had one. We started with a dinner where Michael Dag, Rony Flatscher, Eugene Pesin and Michiel van Hoorn joined me and Venetia. It took place in the Ysbreker and was very nice; burgers and beer for most of us.<br /><br />Sunday there was a set of tutorials planned. After leaving the web conference option dangerously untested for many days, we have settled on webex which seems to work well.. Rony is in the middle of his talk, and the webex was joined, at various times, by Bruce Skelly, K.P. Kirchdoerffer, Chuck mcKinnis, Gil Barmwater, Kees Wiegel, Walter Pachl, Mark Miesfeld, Tom Maynard, Thomas Schneider, David Requena, Donna di Meo, David Ashley, Pam Taylor, Chip Davis and Mike Cowlishaw already.<br /><br />More later.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com0tag:blogger.com,1999:blog-12975496.post-32844413699913959592010-05-14T09:55:00.004+02:002010-05-14T13:14:55.501+02:00NetRexx on the iPhoneNetRexx on the iPhone works fine. This is what one should do to make it work:<br /><br />(1) Jailbreak an iPhone. This is necessary until a more sensible setup is used. I used Spirit; it synchs the phone with the hack and then Cydia is installed, an application that does package management the Debian way<br />(2) Choose the "developer profile" on Cydia when asked. This applies a filter to the packages shown (or rather it doesn't) - but you need to do it in order to see the prerequisites<br />(3) OpenTerminal will help you to do command line operations on the phone itself<br />(4) The prerequisites are a Java VM (JamVM installs a VM and ClassPath, the open Java implementation) and Jikes, the Java compiler written in C and compiled to the native instruction set of the phone, which is ARM.<br /><br />The phone can also be logged on to using ssh from your desktop. Do not forget to change the password for the 'root' user and the 'mobile' user, as instructed in the Cydia package.<br /><br />When this is done, NetRexxC.jar can be copied to the phone. I did this using 'scp NetRexxC.jar mobile@10.0.0.76:' (use the password you just set for this userid) (and because my router assigned 10.0.0.76 to the phone today). I crafted a small 'nrc' script that does a translate and then a Java compile using jikes (and I actually wrote this on the phone using an application called 'iEdit' - nano, vim and other editors are also available but I found the keyboard scheme to type in ctrl-characters a bit tedious - you type a 'ball' character and then the desired ctrl char, while shifting the virtual keyboard through different modes):<br /><br />nrc:<br />java -cp ~/NetRexxC.jar COM.ibm.netrexx.process.NetRexxC $*<br /><br />Now we can do a compile of the customary hello.nrx with './nrc -keep -nocompile hello' (notice that this is all in the home directory of the 'mobile' user, just like the jar that I just copied. The resulting hello.java.keep can then be mv'ed to hello.java and compiled with 'jikes hello.java'. This produces a class that can be run with 'java -cp NetRexxC.jar hello'<br /><br />I am sure I will streamline this a bit, just as I am sure I will do most of my builds on the Mac and just will send over the resulting class files. Some study is needed how to address the iPhones content - it seems possible to use the Sqllite data structure the phone uses, and there might be a glue layer to address the GUI - there is for Python. I will keep you posted when that happens.<br /><br />Please take note of these notes:<br />Note that jailbreaking an iPhone is against your eula (well - Apple's eula) and might be illegal in some jurisdictions. You might want to live in a country where you can actually do what you want with the equipment and software you paid for. Note that the jailbreaking process does not perform flawlessly every time and that indeed I had to restore the iPhone after the first failed attempt; the next attempt went smoothly. Note that this is a technology demonstration and that I actually use another iPhone to make my calls on and organize my life with. Note that I find the restrictions on the usage of programming languages imposed by Apple to be ridiculous, but I trust them to come to their senses quickly, like they did with introducing the SDK.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com1tag:blogger.com,1999:blog-12975496.post-62327230982603633462010-04-11T16:12:00.004+02:002010-04-11T16:40:05.844+02:00The tide against platform independenceOddly enough several mechanisms are working against platform independent development at the same time. One is the recent buying of Sun by Oracle. Now that James Gosling left Oracle, there is some doubt about the future of the Java platform - never mind that he was working on other things while still at Sun - Oracle should have had the brains to keep the figure head around; my personal approach would be to name him whatever fellowship he deserves for creating this software ecosystem. This no doubt will spell a downwards slope as it did for MySQL. Maybe it is time for IBM to offer him a job creating the next step.<br /><br />The other thing is Steve Jobs' denouncing 'intermediate layers' on the iPhone's dev licence- oddly reminding me of the discussion if we should allow high level languages on the mainframe - no code generation, not even Fortran's, could be ever producing acceptable assembler code. As everybody knows now, this is true in only a very small number of cases. For the original assembly language argument, it turned out that most programmers were using storage-to-storage instructions like MVC (move character, not the higher level abstraction), where one actually should use register based instructions. Compilers are better, if not less lazy, to figure this out.<br /><br />Both are poverty based arguments, one based on small screens and feeble batteries, and the other on the feeble state of the economy that was Sun's undoing. Java Hotspot has proven that runtime optimization wins from compile time optimization. Mankind benefits from abstractions on higher levels. Steve could not have ported PPC based code to Intel and ARM if it were not for code generation. The point of view that C is the right abstraction level has run out with Java (HotSpot VM, not the language). This is the thinking that left us with Pascal semantics in module calling conventions.<br /><br />It must be clear that languages like Rexx still are the future; the scripting level being a better abstraction layer ever since its invention in the eighties. This is amply demonstrated by the success of Python and Ruby. The model needs to be optimized for several VM's until the right one wins: this is demonstrated by JRuby, as it earlier (and friendlier and quicker) was demonstrated by NetRexx. What needs to improve is hardware and mindsets. The scripting and VM level is there on the larger home machines, it needs to arrive on the smaller pads and handsets. So it will be about handsets and mindsets.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com1tag:blogger.com,1999:blog-12975496.post-17581495532879845492009-04-03T13:58:00.003+02:002009-04-03T14:04:22.240+02:00ooRexx 4.0 updateThe good news is that the Hursley Symposium will take place as planned. The even better news is that it looks like a release of ooRexx 4.0 is going to be ready for the symposium. There is one showstopper still in the Mac version, which is in PULL from the console. This code has been rewritten in its entirety and now sends one of the cpu's sky-high without any further action. I guess it is not recognizing eol - but it is in need of serious debugging. The Symposium, which celebrates 30 years of Rexx, is announced on www.rexxla.org. You should all go!cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com0tag:blogger.com,1999:blog-12975496.post-16607651276388126532009-03-01T14:34:00.003+01:002009-03-01T14:44:05.239+01:00NetRexx and Open Object Rexx newsJust in time to announce two great developments in the world of Rexx: NetRexx is in the open source process within IBM, and Open Object Rexx 4.0.0 is scheduled to be released not long from now.<br /><br />For NetRexx this is great news, because the JVM language that was ahead of its time should be able to keep up with new developments, at least annotations, and maybe some more dynamic behaviour than the JVM allowed some 12 years ago.<br /><br />Open Object Rexx 4.0.0 will solve the long standing shared memory problem (by elimination of shared memory requirements). This is good news because it will make a proper install of ooRexx on the Mac a lot easier. There is a nagging problem with the reading of shell input that needs debugging. <br /><br />I also have a problem with the 64 bit PPC build: now the 64 bit Rexx interpreter is finally here, my G5 is no more. It fell over after I came back from the US last year, with unclear freezes probably caused by the aging water cooling. Now there is an eight core Xeon MacPro, but that is only good for an Intel 64 bit compile - unless I find how to do a cross compile.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com1tag:blogger.com,1999:blog-12975496.post-87260337388975047712007-06-12T19:05:00.000+02:002007-06-12T19:08:56.488+02:00PPC ooRexxSafari is newer and better and finally supports the Google blogger control, so now I can write in <span class="Apple-style-span" style="font-weight: bold;">bold</span> and <span class="Apple-style-span" style="font-style: italic;">italic</span> without switching to Firefox. The Intel port of ooRexx 3.1.2 is available some time already now; the PowerPC version is late due to the fact that I was not at home for more than two months now (and the PPC resides there).<div><br /></div><div>3.2 has a new problem with BSF - we will be so happy when 4.0 comes out without shared memory for IPC and maybe the new Java 1.6 scripting support built in.<br /><div><br /></div><div><br /></div></div>cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com2tag:blogger.com,1999:blog-12975496.post-74610672785188172982007-04-08T13:33:00.000+02:002008-12-09T08:08:34.823+01:00ooRexx 3.1.2<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiW4f6BHKvC2E-evZ62LHxl-qj_OypApDmfBOXQ44zpkXz7fX41LHfT1C6LAiM95LL3E3qWbCJd7pvBMbE4cg7v46eR6_UFTHvXWIi5yC9RBjFl9XhHSqGKvHQKddn4mUSnmhW/s1600-h/indextop20050412.jpg"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiW4f6BHKvC2E-evZ62LHxl-qj_OypApDmfBOXQ44zpkXz7fX41LHfT1C6LAiM95LL3E3qWbCJd7pvBMbE4cg7v46eR6_UFTHvXWIi5yC9RBjFl9XhHSqGKvHQKddn4mUSnmhW/s400/indextop20050412.jpg" alt="" id="BLOGGER_PHOTO_ID_5051023231423894114" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicxbXohQH2SXANLbAPCWD1ym6iWwaK4ABRaHQYQ3WIanLvdawrLawBJgz355JjJo1NfqMZmXitiu6RYMbqiqifle-uuOre5rrh0-GgHU6AIHUZSqAjtuktQGKheWsHyvWBAJ4F/s1600-h/rexx3_orig_size_transparent.gif"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicxbXohQH2SXANLbAPCWD1ym6iWwaK4ABRaHQYQ3WIanLvdawrLawBJgz355JjJo1NfqMZmXitiu6RYMbqiqifle-uuOre5rrh0-GgHU6AIHUZSqAjtuktQGKheWsHyvWBAJ4F/s400/rexx3_orig_size_transparent.gif" alt="" id="BLOGGER_PHOTO_ID_5051021732480307794" border="0" /></a><br />Another year, another Rexx release. Busy with the preparations for 2 (two) presentations at the annual Rexx Language Association Symposium, this year in Tampa, Florida ( <a href="http://www.rexxla.org/">http://www.rexxla.org</a> ).<br /><br />The Mac builds of Open Object Rexx 3.1.2 are going smoothly, as is the testing, and the only lingering problem is that BSF4Rexx fails in an obscure way. Yesterday I added the -e switch to startup the interpreter with a command line script, this was needed in order to integrate ooRexx with the Automator application that is standard on MacOSX Tiger.<br /><br />I also was experimenting with bridging Applescripts to ooRexx, and had some fun with the Skype API. Finally I can know who are my Friends with a simple API call.<br /><br />The Automator is a very funny program, allowing you to piece together a workflow (of things to automate) using prefab blocks of functionality with pipes and filters, passing data either through stdin or using command line arguments. Very much like a space age version of VM Pipelines. Polishing in between stages can be done using scripts (be it shell, perl, php, python or ruby - and since yesterday also ooRexx). This is not yet in the release version, but if you really cannot wait, contact me with the react button.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com0tag:blogger.com,1999:blog-12975496.post-21536985963060324982006-12-12T23:31:00.000+01:002008-12-09T08:08:34.991+01:00Why I truly, honestly dislike Hibernate<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrcTRdizDu5wWULg1gTcAa3EdBOyxeYwBoyXLGZjjR3YkHhZY8CbPsUGNtF54YkY-g-ggztI0PjMB-ZjyWMzFT8Irxbn_ogqjJEzJRYTuiOcpkXpI3nmZTwsZlzuVZVJ0lZ6mY/s1600-h/hibernate.jpg"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrcTRdizDu5wWULg1gTcAa3EdBOyxeYwBoyXLGZjjR3YkHhZY8CbPsUGNtF54YkY-g-ggztI0PjMB-ZjyWMzFT8Irxbn_ogqjJEzJRYTuiOcpkXpI3nmZTwsZlzuVZVJ0lZ6mY/s320/hibernate.jpg" alt="" id="BLOGGER_PHOTO_ID_5007791134531124034" border="0" /></a><br />It was such a promise and of course such a letdown. Model driven approach, forward engineer your Java classes, have Hibernate persist them to rdbms behind the scenes. It was the single greatest risk of the project.<br /><br />First it took ages to incorporate into the generator some of the history and many to many options. Straightforward <span style="font-style: italic;">dog house </span>style classes are easy, the rest requires serious investing in time. So we lost a quarter on that, trying to get it right - and not the smallest minds, but a combination of dbms aces and math majors.<br /><br />Then - we could not delete objects. Just. Could not delete. Some spooky discord between lazy instantiation and session handling. Some things were not committed. Some things were not really multiuser, and the system balked at having two people working at the same time on an admin screen.<br /><br />We had it investigated, some of those very highly paid highly focused nerds. It came out our session handling was 'all wrong.' Where you normally, the last 20 years I am in rdbms at least, open a session, have transactions and close it (or have it closed by the OS) when you are done, this thing refused to commit. And had a singleton session object, that forgot about your work when someone else used it. Brrr. So we had a very traumatic rewrite of session handling - ah yes, and the consultant deemed Hibernate2 so bad that we had to fall forward to Hibernate3.<br /><br />The rewrite literally yielded hundreds of bugs. Simple <span style="font-weight: bold;">select from</span> things failed, and the session.iterate calls from their own Hibernate2 manuals were deprecated - it was laughable to use them, they did a select for every row. Presented in a way like we were stupid, only, we were not, because it was all in their own samples and nobody told us about the depth of this stupidity - in their own docs.<br /><br />Now switched to a default of all lazy instantiation (and yes, the statements from a moderately deep inheritance hierarchy already ran out of DB2's JDBC statement buffer), we had to change SQL Query syntax to very unnatural <span style="font-style: italic;">select from StaffMember left join fetch HisName left join fetch HerSocialSecurityNumber</span> etc. Otherwise you get <span style="font-weight: bold;">Null Pointers.<br /></span><br />So they managed to change query semantics so that everybody that knows his SQL is a total beginner again and has to adapt to funny quirks. So enough. Out with it. It is the emperors new clothes. Let it sleep.<br /><br />Now the sad part of it is that in the years before this happened, we had written our own O/R layer, that, erm ... just worked. It was people that did not trust this beautiful small piece of technology that suggested using Hibernate for the big, important project. We thought by giving in, they would help us building the system. They did not. Darn them to Heck. Let them forever Hibernate.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com2tag:blogger.com,1999:blog-12975496.post-74875995498334071862006-12-09T14:19:00.001+01:002006-12-09T14:44:48.226+01:00The Workers Movement - Rexx usersOf course I keep my eye on other languages - Java, because its widespread use and excellent VM and Library, Prolog, because it is mighty interesting and lately Ruby, JRuby to be precise. We have seen the enormous inroads Ruby made, and it made me wonder why Object Rexx is not nearly as popular. (Not that I do not know. It is a rethorical wonder).<br /><br />It is easy to blame IBM, especially because it probably is the guilty party in this. I like some things in Ruby, because they are done in a straightforward, totally consistent way, and I don't mean the Perl-isms that linger. Rexx deserves a clean up with deprecation of old stuff - in the teaching materials at least. Falling through procedures without an exit, 'expose', stem variables. Most of it is done, and we have to take care of a very large installed base. Of which todays vocal programming youth does not know anything.<br /><br />I failed to see Ruby emerging the way it did, thinking it was a slow, slightly more OO variant of Python, which I sincerely dislike, even coming out of Amsterdam - it must be the indentation levels thing, reminding me of COBOL A-margin and B-Margin, being the last time that I struggled with whitespace, twenty years ago., before Python came around.<br /><br />Ruby has got a great community and some visible protagonists, like Martin Fowler and Bruce Tate. And Tim Bray. I am afraid the Rexx community does not have this visible array of foremen; we are stronger in the department of system programmers and administrators that were not actually allowed to write applications but did thanks to Rexx. And people of the world, most of your payments go through with some Rexx application, transformation or maintenance program to thank for. We, the Rexx community, are a force of thousands, but thousands that do their work quietly and unnoticed.<br /><br />The sad thing is that we had most of the things the community opinion leaders of Ruby like in Ruby, in Rexx, NetRexx and ooRexx, years ago.<br /><br />IBM botched a lot. Moving development, losing some five years in the gestation of Open Object Rexx, charging for it to people. Coupling its name to OS/2 which it hated itself, being bred on very misguided MS cooperative principles - and then letting it drown, ruining its reputation in the process. IBM also saved it by Open Sourcing it in 2004.<br /><br />We have to publish. Books and Articles. That do not say 'unknown, underrated.' But proud and showing off really advanced working stuff. Unlimited Numeric Precision, Correct handling of decimal numbers, Trace, Parse. Macro support for applications. Metaprogramming, meta classes, builtin Concurrency. At the same time there must be things added to keep up with the times. You would be amazed how many very important systems run on Rexx. Most of which we are not allowed to talk about. Drat.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com0tag:blogger.com,1999:blog-12975496.post-21431288431501334162006-11-24T00:54:00.000+01:002006-11-24T01:11:06.693+01:00Integrate Rexx dialects through BSF4RexxIt's no secret that I would like to see the various dialects of Rexx converge. Object Rexx has done a marvelous job of being backward compatible with Classic Rexx; NetRexx has done wonders for integrating Rexx and Java by making Java classes out of Rexx, and BSF can integrate interpreted Rexx with Java very well. All can integrate with other code by means of external function libraries or JNI.<br /><br />Unfortunately and unavoidably, there are some differences in syntax between the different dialects. No big problem, but awkward to explain to newcomers and good for the occasional 2 seconds of astonishment. So in NetRexx the method call is by dot (Datum.getDayOfWeek()), and in Object Rexx it is the famous twiddle, as in Datum~getDayOfWeek. As a consequence, NetRexx does not have Classic Rexx's stem notation, a kind of easy multidimensional and possibly associative array.<br /><br />Now if we would forego the stem, we could have the dot notation for method invocation in Open Object Rexx, like in every other modern language, but it is probably not to be. I suggested this on the last Rexx Language Association Symposium in Austin, but the points of view seem deeply entrenched.<br /><br />A recent very positive development is that on my suggestion BSF4Rexx now contains integration for calling NetRexx classes from Rexx without having to instantiate an extra NetRexx object - it will consider a NetRexx string a Rexx string and vice versa. Together with another fix for the handling of exceptions from Java in <span style="font-style: italic;">signal on syntax</span> labels, we should be so very happy that our Rexx and NetRexx can at least seamlessly interface using BSF4Rexx.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com0tag:blogger.com,1999:blog-12975496.post-1163942327047028162006-11-19T14:18:00.000+01:002006-11-19T14:21:23.146+01:00BSF4Rexx Available on the Apple MacintoshThe Bean Scripting Facility is an IBM tool, since donated to Apache, for embedding scripting into the Java VM. There is a version for Object Rexx, that now also is available under MacOSX. <br /><br />This is because it needs one native component to take care of the interfacing from Java to the (native) ooRexx interpreter - this is sharp contrast to NetRexx, that lives exclusively in the Java universe.<br /><br />There are some advantages to using Object Rexx to interact with your Java objects. Firstly, it is easier to script OS commands and get the output back into your program. In Java, you need to do a Runtime.exec(), hook the filehandles for output and spawn a tread to look into those. In Object Rexx, the command is executed by putting it into quotes and sending it into an external queue.<br /><br />Secondly, in Object Rexx it is possible and even easy to create runtime classes and add fields or methods to them using messages. For NetRexx and Java, we need to do awkward runtime bytecode modifications to accomplish the same goal, and still have class loader issues to run the newly composed classes or their instances.<br /><br />Thirdly, Object Rexx has mixin classes and metaclasses that are simply not there in Java.<br /><br />But the most important part about this, is that we now have greater freedom and flexibility to quickly implement our architectures or just run prototypes for feasibility studies. <br /><br />A quick example using jdbc to a database:<br /><br />/* ooRexx program to demo jdbc capabilities */<br />-- specify imports<br />jclass = .bsf~bsf.import("java.lang.Class")<br />driverMgr = .bsf~bsf.import("java.sql.DriverManager")<br /><br />-- instantiate jdbc driver<br />jclass~forname('org.postgresql.Driver')~newinstance<br /><br />-- make the dbms connection and open a statement<br />statement = driverMgr~getConnection('jdbc:postgresql:rvjansen','rvjansen','')~createStatement<br />signal on syntax<br /> statement~executeUpdate("DROP TABLE test") -- catch exception for first time<br />syntax:<br />-- specify query and execute to get result set<br />statement~executeUpdate("CREATE TABLE test( name char(42), place char(42))")<br /><br />statement~executeUpdate("INSERT INTO test (name, place) VALUES('Rony Flatscher', 'Vienna')")<br />statement~executeUpdate("INSERT INTO test (name, place) VALUES('Lee Peedin', 'Wallace')")<br />statement~executeUpdate("INSERT INTO test (name, place) VALUES('Rene Jansen', 'Amsterdam')")<br /><br />-- select database content<br />rs = statement~executeQuery('select name, place from test')<br />do while rs~next<br /> say rs~getString("name")~strip "from" rs~getString("place")~strip<br />end<br /><br />-- calculate total<br />rs = statement~executeQuery('select count(*) from test')<br />do while rs~next<br /> say "BSF4Rexx has at least" rs~getString(1) "fans!"<br />end<br /><br />::requires bsf.clscosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com0tag:blogger.com,1999:blog-12975496.post-1163352401207169982006-11-12T18:24:00.000+01:002006-11-12T18:27:17.626+01:00Object Rexx 3.1.1 on the Apple MacintoshAfter a few weeks of hard debugging Open Object Rexx on MacOSX is a reality. Tomorrow the CVS repository will be tagged with the release. Some very hard to track down bugs were quashed, while it also became clear that MacOSX's System V Shared Memory call, shmem, leaves something to be desired. More shared memory segments to be exact, because now, just like Postgres, Object Rexx requires you to edit etc/rc to put in some higher values.<br />While this is ok as a stopgap measure, it is not terribly elegant, and should be avoided by doing the memory management in another way. Another thing to do.<br /><br />The irony here is that in order to have the programming language I like most running on the platform I like most, I have to do low level work in the language I like least of all, C++. Time we bootstrap the thing.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com0tag:blogger.com,1999:blog-12975496.post-1146397514403801322006-04-30T13:43:00.000+02:002006-04-30T13:45:15.480+02:00Language keywords versioning approachJava 1.5 again made it necessary to review code and prefix classnames that Java appropriated, and we had for years. This is a repeating process and it is not too bad, although it can annoy the hell out of me when I was planning to do other things. The principle here should be, who was first for this particular source file. The import mechanism should account for this problem, and also the set of keywords for the language should not be fixed, so that if I chose to use something that later became a keyword, my choice is what counts. We are not talking about perl, php and vb, that just change the whole language and let the users suffer or go bankrupt through it. No, we are talking serious languages like Java, that should have more support for this than language level switches on the compiler.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com0tag:blogger.com,1999:blog-12975496.post-1142693074799417172006-03-18T15:43:00.000+01:002006-03-18T15:44:34.843+01:00JSR292There is a very interesting development in the Java language which is to put in support for dynamicly typed languages and hotswapping, the runtime addition and subtraction of fields and methods like Object Rexx, Objective C, Ruby and some other languages can do. Gilad Bracha, who blogged about it, doubts whether there can be full hotswapping support for a mandatory typechecked language like Java, but even if that is not feasible, it should be in for the dynamic language support.<br /><br />My take on this is that is mostly better to have strongly typed constructs, but for speed, shortcuts and prototyping I am sometimes tempted into using those luxurious and rather untyped Rexx strings. Sometimes they stay, and at other times I opt for replacing them with (types) classes, mostly because I find it easier to keep a good oversight when things are called what they are. Rexx strings are their own unique type, because they allow you to do (multiprecision) arithmetic on strings, which is sometimes very welcome, mostly when doing things with strings. As we move to metaprogramming, by which I mean the runtime manipulation of types and classes and simultaneous use of those, we need to go more dynamic as we might be hampered by an extra compile cycle. Of course most cases where dynamic typing seems to be necessary can be solved by generating source and calling the compiler one more time.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com0tag:blogger.com,1999:blog-12975496.post-1142337543528460272006-03-14T12:58:00.000+01:002006-03-14T12:59:03.636+01:00Make againNow what totally baffled me is that James Duncan Davidson's personal webpage states Make among the languages that he knows well. A bit further down the page he states that "I no longer, however, consider Makefiles to be evil. In fact, I’ve written several in the last few years." <br /><br />Now this is fine, and only troubling when you know that this is the man who made Ant, the build tool of choice of all Java persons. To build something using Ant, you have to write a Java program, at least if somebody else did not do that yet. Netbeans was ruined for me by Ant, and in its latest versions really deletes your sourcecode when it does not understand a cross language reference or something else in that vain. Actually, he also left Java and went to Ruby, which is a sensible choice, if you are in a position to choose. He also likes Objective-C and Cocoa, which is also sensible. Let's write off Ant to his job at Sun, then. I would like though, that we could undo some of Ant's damage, and have, for example, NetBeans working again with "make" projects.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com0tag:blogger.com,1999:blog-12975496.post-1142119295327874742006-03-12T00:20:00.000+01:002006-11-24T01:13:42.152+01:00Scott's Pragmatics has scripting chapter nowThe good news is that the latest version of Micael Scott's "Programming Languages Pragmatics" has a whole new chapter dedicated to scripting languages, and mentions Rexx various times. The bad news, however, is that coverage is sketchy, no doubt because it is impossible to know every programming language intimately, but to Rexx this is particularly unfair, because although its age is mentioned and it gets a honorary mention as forerunner of this whole field, lots of the good parts of Rexx are largely neglected.<br /><br />Rexx is even not mentioned in the chapter that has a short description of every language that is mentioned in the book. Rexx's great assets, like unlimited precision arithmetic out of the box. the unique 'parse' and 'trace' statements, incredible string handling, object orientation including metaclasses, runtime addition of methods and properties, reflection and concurrency, are not mentioned at all. It might be that it is an old language and some languages have caught up with it more or less, but that does not mean that we need not mention the genesis of thing in the right historical order. The problem was, I think, that Rexx has been closed-source IBM proprietary for a long time of its existence; if it had been opened up earlier there would have been no reason for Python and Ruby. Larry Wall, who did Perl, visited one of the first Rexx Language symposia to explain what he thought that Perl had to offer, and indeed the similarity between Object Rexx and Ruby is enormous.<br /><br />I think it is our duty to be at the same time thankfull to Scott for mentioning the root of scripting and mentioning Rexx in his book, but also to correct him in his fairly superficial treatment of our favourite language.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com0tag:blogger.com,1999:blog-12975496.post-1141477391723665992006-03-04T14:02:00.000+01:002006-03-12T00:26:00.966+01:00Shoddy Typing needs more typingWhat Bruce's book did make me realize was that although I agree on having some typing eliminated, his arguments against strong typechecking are not that sound. Actually, we get the impression that he sees it as a nuisance causing clerical work; that is not a very good argument against it. If you look at what Rexx does, it gives you a type that can be String and numeric and treats it the same way; now if you go and do impossible things, you'll be flagged at runtime. NetRexx also has almost the same approach, but it also blends in with Java's type system, so there is actually a wide choice for the programmer to choose from. I have the distinct impression that strong typing is an asset and not a liability; *when your model is sound* strong typing (and we even type our yes/no binary schemes to a more specific type than boolean) only helps you to avoid errors. When dealing with metadata in your application, like model- and meta model data, it is essential in avoiding layering errors that are too easy to commit without strong typing. Where he does hit the hammer more or less on the nail is in the difficulty of having generic algorithms when strongly typing, but this also can hint to a too procedural approach, in which parts of the algorithm are not well hidden in the objects. This is called polymorphic; I am sure that Bruce knows.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com0tag:blogger.com,1999:blog-12975496.post-1140871607971417262006-02-25T13:44:00.000+01:002006-03-12T00:23:58.910+01:00Beyond JavaBruce Tate has written "Beyond Java" and I am mostly in agreement with it, although it is repetitive, hastily written, and another example of something written out of negativity that had very well could have been written in a positive way. But of course, if "Bitter Java" was one of the previous bestsellers, it would be hard to resist.<br /><br />The first question to pose is of course why it was never necessaty to write a "Beyond COBOL" or even "Beyond PL/1". It might be because it is not yet evident that there is a reason to go beyond Java and Tate knows that very well.<br /><br />Secondly, as also observed by a colleague of mine, the book freely equates languages to frameworks and sings the praise of Ruby in the form of Ruby on Rails. It is very eclectic in its choosing of alternatives, and, for example does not mention Open Object Rexx or NetRexx, much older languages in the same vein, which slowly but surely are receiving more exposure. <br />What has become very tiresome are the kayaking intros to every chapter, like "I was foolishly conquering a very dangerous waterfall when it occurred to me that multiple inheritance can be a lot of trouble". Well, it's no quote but you know what I mean.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com0tag:blogger.com,1999:blog-12975496.post-1129013333718069032005-10-11T08:46:00.000+02:002005-10-11T08:48:53.726+02:00The Friendly UserWhat is particularly dangerous for a system is users that are accepting its flaws because of lack of background in how fast things generally move in a computer. I am parking in a garage that is remotely operated, from Rotterdam to Amsterdam. Once in a while the system thinks my car is in, when actually it's outside; the consequence is that it does not let me enter the carport. Now when I call the service number, the friendly service person at the other end thinks it is normal to have a login sequence of 15 minutes and that it takes half an hour to flip the flag that indicates the in or out position of my car. Yesterday I heard from a more knowledgeable person in the garage company that a software upgrade went sour somewhere last week and the response should be much faster.<br /><br />Another example of this is when the OS/2 TCP/IP driver in its famous DOS box failed, it had to recover for about 20 minutes, and then it restarted. At the bank where I worked the users duly noted performance problems; which were checked by staff and then closed. When it worked, it worked fine. In reality, the users should have reported a defect (which it obviously was, with outages of more then 15 minutes), so a different crew would have been dispatched.cosmosgrammaticushttp://www.blogger.com/profile/06966581346435481857noreply@blogger.com0