Examples/Repository: Register @ scratch.mit.edu to download lots of great samples!
You can view scratch programs online if you have Java plugin installed.

EToys

EToys is an tool to teach children a multimedia rich authoring
environment and visual programming system. If you have OLPC laptop (or emulation environment for OLPC), it comes pre-installed with EToys. Or else you can download EToys for your
platform. It is avaliable for Linux, Mac and Windows.

StarLogoTNG

Although StarLogoTNG is described as "tool to create and understand simulations
of complex systems", it can be used as a tool to teach programming.
It supports 3D and it is cross-platform a (Java) tool.

Turtle Art

Turtle Art activity
is bundled with OLPC.
If you don't have
OLPC, you can use an emulator environment. For example, you can download
VirtualBox and run OLPC inside
it following the steps here.
I run VirtualBox on Mac, Ubuntu and Windows XP.

Want to work with source code?

So far, we looked at visual programming tools. But, if you think it is better
to expose to source code ("they have to look at code at somepoint anyway, let them see syntax errors sooner"), then you may want to try these:

Greenfoot

From the site:
"Greenfoot as a combination between a framework for creating
two-dimensional grid assignments in Java and an integrated development
environment (class browser, editor, compiler, execution, etc.) suitable
for novice programmers". This is a cross-platform (Java) tool.

BotsInc

With Bots Inc we can learn how to program robots interactively. Language used
to program is Smalltalk (BotsInc is built with
Squeak). Since BotsInc is a Squeak image,
it possible to slowly graduate to full Smalltalk. It is available on
all platforms.

Tuesday Jul 14, 2009

We kept saying BTrace is a safe, dynamic tracing tool for Java. To ensure safety, BTrace does not permit many constructs of Java language and also allows calls only to BTraceUtils class.But, not everyone likes safety -- sometimes developers want "unsafe" facility ("I know what I am doing"-style). We have got comments of this nature about BTrace - for example here and here. We have added "unsafe" mode to BTrace - you can edit "btrace" script to change -Dcom.sun.btrace.unsafe=false to -Dcom.sun.btrace.unsafe=true. In "unsafe" mode BTrace permits all Java constructs and also allows calls to arbitrary code. Like every other unsafe facility in programming, you are on own your own with this facility! You may get weird errors while instrumenting target classes and/or running transformed code. But then you know what you are doing, right?

Monday Jul 13, 2009

You may have browsed JavaFX API docs generated by javafxdoc tool. javafxdoc tool is implemented as a doclet. It is possible to use javafxdoc's doclet to generate API docs for Java code.

Note: The XMLDoclet implemented as part of javafxdoc tool is an implementation detail and not part of official JavaFX/tool API and so please do not depend on this. This is more for fun/learning/personal use!)

Interactive simulation tool for physical phenomena from University of Colorado.
He kept trying to soft land "on the moon" I guess Chandrayaan I has impressed him a lot!

What is the common between Alice and PhET apart from being great education tools? It is Java! With the advent of JavaFX, we can expect that such fantastic rich GUI applications will be written in JavaFX.

Friday Aug 08, 2008

One of the issues reported with BTrace is that the trace authors have to write "verbose" code [some people say Java is "verbose"!]. In BTrace, we have to repeat the same set of imports, annotations in every btrace file and all methods have to be "public static void" and so on. Instead of inventing a new scripting language, I've added a simple C preprocessor like step in BTrace compilation. This preprocessor is based on the one in the GlueGen project. Thanks to Ken Russell for this code and for reviewing my changes specific to BTrace project. The preprocessor solution does not rule out a scripting solution in future If you have nice ideas or would like contribute in this area, you are always welcome! But, I think preprocessor solution is simple and will be useful to some.

Expanded the downloaded JSqueak.zip under a directory, say c:\\JSqueak.

cd c:\\JSqueak

javac -d . \*.java

copy mini.image.gz JSqueak

java JSqueak.Main

Even if you are not going to learn Smalltalk (why?), you can have the fun of reading Smalltalk VM implemented in Java. If you are lazy and don't want to compile, you can run directly by JNLP link from http://research.sun.com/projects/JSqueak/. Inside the Squeak environment, I wrote the legendary "Hello World" This is how it looks...

Friday Jul 18, 2008

You can dyanamically attach BTrace to a Java process to inject trace code into it. BTrace client classescollect the trace output via a socket -- these client classes are used by BTrace command line client as well as VisualVM plugin for BTrace. How about attaching a JMX client to collect BTrace's trace data? Yes, it is possible to access a BTrace class's static fields as attributes of a MBean with this RFE.

There are two MBean samples in the BTrace repository. I attached both BTrace samples to a "Java2D demo" process. And then I attached VisualVM to view the Mbean registered by these BTrace samples:

ThreadCounterBean.java - this sample instruments java.lang.Thread.start() method to update a counter field. This counter field is accessible by JMX clients.

HistogramBean.java - this sample
collects histogram of java.awt.Component objects created by an application and exposes the histogram (map) as MBean attribute.

Monday Jun 16, 2008

In the last few weeks, I came to know about two cases of real world use of BTrace.

Glencross, Christian M (his blog?) wrote about attempting to write a script to track SQL statements executed by a Java application (private email). Thanks to him for permitting me to blog about his BTrace script. I've made few formatting changes to fit his code in this blog and added few explanatory comments (staring with "VERBOSE:").

Friday May 09, 2008

This talk is about pervasive computing (a.k.a ubiquitous computing) with products from Sentilla. There was an interesting demo about humidity sensor detecting changes and sending a message to a host. The "motes" run CLDC 1.1 VM (+ proprietary profile for motes). These motes have ports for sensors and actuators and some built-in sensor. There were many interesting suggestions for embedded programming for such small devices (don't allocate in inner loops and there by leading to to GC kick-in, avoid too many static fields, avoid threads whenever possible and so on).

The basic idea is to run JavaME applications (developed for different configurations/profiles/subsets of optional packages) on top of JavaSE. The extended JavaSE classes and packages not available in specific profile or optional package set [implemented by a specific phone] should not be made available to JavaME apps targeted. i.e., only the classes available to a specific phone model should be available. If the JavaME app tries to access any other class, it should receive ClassNotFoundException. The speakers explained how to achieve such "containers" by class loader based isolation. The problem is that they seem to solve only the class access. What about extended methods and fields? For example, platform core classes on JavaSE have superset of methods [more methods on the same class available on JavaME - eg. java.util.Hashtable has more methods on JavaSE). The application classes have to bytecode analyzed and instrumented to take care of field/method accces. It seems that their current product that does not address this yet.

PAN-5542 Developing Semantic Web Applications on the Java Platform.

The discussion started with some nice demos. There was a demo with AllegroGraph RDF store, Twine, a demo with using GRDDL and getting RDF triples by a proxy server. i.e., a proxy serves does the GRDDL transformations to get RDF triples from sites [which could be stored/analyzed with RDF stores subsequently] and a demo with FOAF files. Interesting take aways from the discussion include:

We don't have to wait for SEMANTIC WEB with full fledged reasoners and so on. Instead, add little semantic bits to existing web (say using RDFa, GRDDL etc.) in your current web projects/pages.

There are many Java tools. There is need to standard Java APIs for triple store access etc. Right now, we have to write for Jena, Sesame etc. It was also felt that APIs will need to wait for more usage scenarios.

There are tools to expose your existing databases as virtual RDF stores -- for example: D2RQ. Probably, most of the RDF triples could come from existing data.

Privacy, security of the information is very important. Work needs to be done in this area.

Natural language processing and getting triples out of it is very hard. You may want to refer to systems like DBpedia.

Thursday May 08, 2008

Today Bill, Chihiro, Jaya and I talked on Blu-ray. The talk was centered around the open source project @ http://hdcookbook.dev.java.net - a library and a set of tools to build Blu-ray discs. If you haven't checked out code/docs, you may want to checkout and play with the code. All you need is a laptop with blu-ray drive and a BD-RE disc. Optionally, for added fun you may want to have a hardware bluray player such as PS3 -- so that you can see the output on your TV rather than on a laptop. Other than the session, we also had a very informal BOF on blu-ray, OCAP etc. during the evening. It is good to meet experts in respective technologies in one place!

Other than the the blu-ray stuff, I did attend other talks/BOF. Just after Blu-ray session, I attended "TS-6000
Improving Application Performance with Monitoring and Profiling Tools" talk. This talk was about OS specific tools, JDK tools and third-party tools for profiling and monitoring. Gregg Sporar and Jaroslav Bachorik (NetBeans Profiler team) presented very well. There were many interesting questions/discussions as well. If you haven't done so already, you may want to download VisualVM. If you want bit more fun doing monitoring/profiling, you may want to check out the sources from http://visualvm.dev.java.net and build it yourself. You can build BTrace VisualVM plugin using the command:

c:\\visualvm\\plugins>ant build

assuming you have checked out VisualVM sources under "c:\\visualvm". If you have already checked out BTrace sources under some other directory, say "c:\\btrace", you can use

c:\\visualvm\\plugins>ant -Dbtrace.home=c:\\btrace build

To run VisualVM with all the plugins that you built, you can use the following command:

c:\\visualvm\\plugins>ant -Dbtrace.home=c:\\btrace run

Please let us know what features you'd like to see with BTrace and/or BTrace VisualVM plugin.

I attended and liked the "Class Loader Rearchitected (BOF-6180)" BOF. If you have ever written class loaders, chances are that you have faced mysterious deadlocks or ClassCastException that said "ClassCastException: Foo cannot be cast to Foo" or having to decide between overriding loadClass and findclass, you probably should have attended this talk and gave your opinions/suggestions/ideas If I understood properly, I think there was a suggestion to add class loader info. to the ClassCastException (something like class-loader-class-name@identity-HashCode style string?) so that one can quickly see it is a class loader issue. Also, there were many questions on loading classes from jar files. Looks like there will be changes to class loader API and class loading in VM for JDK 7.

Wednesday May 07, 2008

This talk is a good introduction to (J)Ruby the language and important applications of (J)Ruby. And many pointers to related (J)Ruby sessions. Nice summary!

JavaScript programming language: The Language Everybody Loves to Hate

great talk by Roberto Chinnici. Nice summary of functional and prototype-based object orientation aspects of JavaScript. You can easily impress your friends will some neat snippets of JavaScript You may want to continue the fun by reading Doug Crockford's pages, if you have not do already!

At 7.30 PM, we (I and Kannan) talked about BTrace. There were many interesting questions/discussions -- both during and after the BOF! Today (Wed May 7) will be a Blu-ray day -- it starts with TS-5449 Java Technology for Blu-ray and TV: Creating your own Blu-ray Java Discs session. It is about the open source project @ http://hdcookbook.dev.java.net. Meet you all there!

Wednesday Apr 30, 2008

In JavaOne 2008, there are many intesting sessions on "other" JVM languages covering both dynamically typed languages (JavaScript, Groovy, JRuby) and statically typed languages (JavaFX, Scala). As usual, there are many sessions covering application aspects -- like using scripting on Glassfish, Grials (Groovy), Rails (JRuby) and so on. But, my interest is mostly on the programming language aspects and JVM implementation issues. Here is a table of sessions covering those:

Tuesday Apr 29, 2008

We have a BOF on BTrace in this year's JavaOne. But, you will not find the name "BTrace" in session title -- that is because talk was submitted before BTrace was open sourced with that name The details of the BOF is as below. Please visit and let us discuss on dynamic tracing for Java.