Thursday, December 07, 2006

Today's Book: Groovy for Java Programmers

Groovy Programming: An Introduction for Java Developers by Kenneth Barclay and John Savage

I regard Groovy is the scriting language for Java programmers, at least for now. So, this book is for you, Java programmers, to get started with Groovy.

Monday, December 04, 2006

Today's Paper: Prototypes with Multiple Dispatch: An Expressive and Dynamic Object Model (ECOOP 2005)

Prototypes with Multiple Dispatch: An Expressive and Dynamic Object Model

Lee Salzman, Jonathan Aldrich

Two object-oriented programming language paradigms—dynamic, prototype-based languages and multi-method languages—provide orthogonal benefits to software engineers. These two paradigms appear to be in conflict, however, preventing engineers from realizing the benefits of both technologies in one system. This paper introduces a novel object model, prototypes with multiple dispatch (PMD), which seamlessly unifies these two approaches. We give formal semantics for PMD, and discuss implementation and experience with PMD in the dynamically typed programming language Slate.

ECOOP 2005

Today's Paper: Predicate Classes (ECOOP'93)

Predicate Classes

Craig Chamber


Wednesday, November 08, 2006

Today's Paper: Traits: A mechanism for fine-grained reuse

Traits: A mechanism for fine-grained reuse

Stéphane Ducasse, Oscar Nierstrasz, Nathanael Schärli, Roel Wuyts, Andrew P. Black

Inheritance is well-known and accepted as a mechanism for reuse in object-oriented languages. Unfortunately, due to the coarse granularity of inheritance, it may be difficult to decompose an application into an optimal class hierarchy that maximizes software reuse. Existing schemes based on single inheritance, multiple inheritance, or mixins, all pose numerous problems for reuse. To overcome these problems we propose traits, pure units of reuse consisting only of methods. We develop a formal model of traits that establishes how traits can be composed, either to form other traits, or to form classes. We also outline an experimental validation in which we apply traits to refactor a nontrivial application into composable units.

ACM Transactions on Programming Languages and Systems (TOPLAS)
Volume 28 , Issue 2 (March 2006)
Pages: 331 - 388
Year of Publication: 2006

Thursday, November 02, 2006

J2EE-PHP Interop

In an FTPOnline article, Andi Gutmans, et al. discuss two technologies for interoperating between WebSphere and PHP.

Achieve J2EE-PHP Interoperability by Andi Gutmans, Stew Nickolas, and Zeev Suraski, FTPOnline, Nov 1, 2006

Two most popular technologies, SOAP and PHP/Java Bridge, are coverd.

Monday, September 11, 2006

Today's Paper: Finding Probably Better System Configurations Quickly (SIGMETRICS/Performance 2006)

Finding Probably Better System Configurations Quickly

Takayuki Osogami, Toshinari Itoko:

SIGMETRICS/Performance 2006

Tuesday, September 05, 2006

Today's Paper: A Reference Architecture for Overlay Networks (P2P2005)

The Essence of P2P: A Reference Architecture for Overlay Networks

Karl Aberer, Luc Onana Alima, Ali Ghodsi, Sarunas Girdzijauskas, Seif Haridi, Manfred Hauswirth

Peer-to-Peer Computing 2005

Saturday, September 02, 2006

Today's Paper: Optimizing Memory Transactions (PLDI 2006)

Optimizing memory transactions

Tim Harris, Mark Plesko, Avraham Shinnar, David Tarditi

PLDI 2006
Proceedings of the ACM SIGPLAN 2006 Conference on Programming Language Design and Implementation, Ottawa, Ontario, Canada, June 11-14, 2006.
ACM 2006, ISBN 1-59593-320-4

Thursday, August 24, 2006

Today's Paper: Architectural thinking and modeling with the Architects' Workbench (IBM SJ)

Architectural thinking and modeling with the Architect's Workbench

S. Abrams, B. Bloom, P. Keyser, D. Kimelman, E. Nelson, W. Neuberger, T. Roth, I. Simmonds, S. Tang, J. Vlissides

IBM Systems Journal, Volume 45, Number 3, 2006

Thursday, August 10, 2006

How the Spring AOP Works for Enterprise Application Development

An article by Adrian Colyer at InfoQ explains how the Spring AOP of Spring 2.0 (and AspectJ) works:
Starting from a simple introduction of AspectJ 5 and Spring 2.0, he describes how to adopt AOP in enterprise applications step by step. It includes many sample code.

Sunday, July 02, 2006

Today's Paper: Adding Open Modules to AspectJ (AOSD 2006)

Adding open modules to AspectJ

Neil Ongkingco, Pavel Avgustinov, Julian Tibble, Laurie J. Hendren, Oege de Moor, Ganesh Sittampalam

AOSD 2006
Proceedings of the 5th International Conference on Aspect-Oriented Software Development, AOSD 2006, Bonn, Germany, March 20-24, 2006
ACM 2006, ISBN 1-59593-300-X

Today's Paper: The JunGL Scripting Language for Refactoring (ICSE 2006)

JunGL: a scripting language for refactoring

Mathieu Verbaere, Ran Ettinger, Oege de Moor

ICSE 2006
28th International Conference on Software Engineering (ICSE 2006), Shanghai, China, May 20-28, 2006.
ACM 2006, ISBN 1-59593-375-1JunGL: a scripting language for refactoring (ICSE 2006)

Tuesday, June 13, 2006

Model-Driven AOSD with RSA (Rational Software Architect)

In IBM developerWorks, Jim Conallen and Eoin Lane from IBM started a tutorial for model-driven aspect-oriented software development with IBM Rational Software Architect (a MDD tool). Their tutorial discusses the details involved in creating an AspectJ-based library that can be introduced into an IBM Rational Software Architect Model-Driven Development project. It describes in detail how an existing AspectJ library can be packaged, deployed and used in Rational Software Architect. It also discusses configuration options that can be used to provide additional customization at the model element level. Finally this tutorial discusses localization and categorization options as well as introduce user documentation options such as the online help and cheat sheets.

Monday, June 05, 2006

Today's Paper: A Survey of P2P Content Distribution Technologies (CSUR)

A survey of peer-to-peer content distribution technologies

Stephanos Androutsellis-Theotokis Athens University of Economics and Business, Athens, Greece
Diomidis Spinellis Athens University of Economics and Business, Athens, Greece

ACM Computing Surveys (CSUR)
Volume 36 , Issue 4 (December 2004)
Pages: 335 - 371
Year of Publication: 2004

ACM Press New York, NY, USA

Friday, June 02, 2006

Today's Paper: A Survey of Web Cache Replacement Strategies (CSUR)

A survey of Web cache replacement strategies

Stefan Podlipnig University Klagenfurt, Klagenfurt, Austria
Laszlo Böszörmenyi University Klagenfurt, Klagenfurt, Austria

ACM Computing Surveys (CSUR)
Volume 35 , Issue 4 (December 2003)
Pages: 374 - 398
Year of Publication: 2003

ACM Press New York, NY, USA

Thursday, June 01, 2006

Today's Paper: The Atomos Transactional Programming Language (PLDI 2006)

The Atomos Transactional Programming Language

Brian D. Carlstrom, Austen McDonald, Hassan Chafi, JaeWoong Chung,
Chi Cao Minh, Christos Kozyrakis, Kunle Olukotun (Stanford University)

ACM SIGPLAN 2006 Conference on Programming Language Design and Implementation (PLDI 2006)
Ottawa, Canada, June 10-16, 2006

Thursday, May 25, 2006

PHP Compiled Variables Explained

Sara Golemon, one of the most famous writers of PHP books, gave an explanation of the compiled variables in PHP.  This is an important optimization of PHP interpreters and was missing in PHP 5.0 (Zend Engine 2.0) but introduced in PHP 5.1 (Zend Engine 2.1).
It is very concise but has enough information to understand the new optimization in PHP.

Tuesday, March 28, 2006

JBoss Web Server = Tomcat Native / APR

JBoss Web Server is built on Apache Tomcat and includes Apache Portable Runtime (APR) and Tomcat native technologies (Tomcat Native) to achieve good scalability and performance. It is a new open source project that will provide enterprises with a single, high-performance deployment platform for Java Server Pages (JSP) and Java Servlet technologies, Microsoft ASP.NET, PHP and CGI.
They say that it can excess Apache HTTP Server. It is interesting how much it really does.

Saturday, March 18, 2006

PHP-Java Integration

Types of interoperation scenarios between Java and PHP are twofold.
  • SAPI (Server Application Programming Interface) like Servlet PHP, CLI, etc. - PHP on Java (to integrate PHP into a Java Servlet environment)
  • Java extension in PHP - Java in PHP (to integrate Java support into PHP)
The PHP configuration file (php.ini) is read when PHP starts up. For the server module versions of PHP, this happens only once when the web server is started. For the CGI and CLI version, it happens on every invocation.

Types of implementation are as follows:
A product available is:
Check it out!

Monday, March 13, 2006

JSR-292 invokedynamic - a New Java Bytecode Instruction for Dynamically Typed Language Support

Recent Java VM often needs to interpret scrypts written in dynamically typed languages. The common langauges used include JavaScript, whose reference implementation is available with JSR 223. Performantly executing this kind of interpretation is not so much simple. Naive interpretation is known to be 10-100 times slow.

Compiling or translating programs in foreign languages into the language directly supported by the platform, which is Java bytecode for Java VM in this case, is typical approaches to good performance. Instead of interpreting method calls in JavaScript, we can translate/compile them to native Java method calls and execute them directly on Java VM.

The compiling/translating approach involves, however, plenty of code generation in some cases. Too much generated code consumes too much memory and thus can result in poor performance.

Gilad Bracha, the fourth man of Java, has been pointing out this problem in his blog, and finally proposed a new Java VM instruction, specialized to address this issue on Feb 28, 2006.
It is in the JSR review ballot stage, and to be approved in Mar 13, 2006.

Friday, March 10, 2006

PHP Script Caching

PHP, a scripting language for template-based dynamic page generation, is often compiled at runtime implicitly. This is for making its execution faster, comparing to interprit it without compilation. In normal PHP engine, this compilation occurs whenever each page accessed.

The overhead of compilation can be avoided if the result of compilation in the previous execution of the same PHP page is remembered by the engine. This technique is well-known and sometimes called script caching. In a PHP engine with script caching, it caches each PHP script in a compiled state so that it can reuse the cache for another page (script) access.

Here, I listed links to major, freely-available caching plugins for the standard PHP engine.

Tuesday, February 28, 2006

Getting Started with JAXB 2.0

Kim LiChong gives a fairly simple, but still practical, articles on JAXB 2.0, the new version of the JCP standard specification of Java-XML binding. This is the standard, and will be a part of J2EE 5.0.

Sunday, February 26, 2006

Sunday, February 05, 2006

SOA Patterns

Ron Jacobs' presentation explains the anti-patterns and patterns for SOA with practical examples.
His powerpoint chart is available from:
Also, his talk can be viewed through a Webcast.

Saturday, January 28, 2006

Best Practices of Web Service Performance Testing

Sergei Baranov's article in Sys-Con WebSphere Journal gives a good overview of what's going on for Web Service performance testing in practice.
His article provides strategies for creating load test scenarios that reflect tendencies of the real world environment. To help us apply these strategies, it introduces best practices for organizing and executing load tests, and suggests how these best practices fit into a Web services application's development life-cycle.

It also demonstrates how to utilize performance monitors offered by WebSphere and the operating system, as well as how to analyze load testing results. The bulk of the discussion assumes that WSDL is used to describe the Web service's interface, and that SOAP and HTTP are used for the messaging and transport layers, respectively.

Monday, January 23, 2006

ATF - AJAX Toolkit Framework Project for Eclipse

IBM has proposed a new open-source project, ATF (AJAX Toolkit Framework) to the Eclipse Foundation that uses the AJAX style of development. ATF will provide extensible frameworks and exemplary tools for building IDEs (integrated development environments) for the many different AJAX runtime offerings, such as Dojo, Zimbra, etc. in the market, according to the project proposal.

Monday, January 09, 2006

Today's Person: Michael Rappa - Professor E-Business

Michael Rappa is the Alan T. Dickson Distinguished University Professor of Technology Management and director of the Open Courseware Laboratory in the College of Management at North Carolina State University. He is the founder and co-director of the NC State E-Commerce educational initiative, and an associate faculty member in Computer Science and the Institute for Integrated Manufacturing Systems Engineering.
Dr. Rappa has been recognized on numerous occasions for his contributions to research, teaching and service to the academic community. He is a recipient of the North Carolina State University awards for Outstanding Extension Service, Graduate Teaching Excellence, and the Gertrude Cox Award for Innovative Excellence in Teaching and Learning with Technology; the Award for Innovative Excellence and a nominee for the Ernest L. Boyer International AwardMERLOT Award for Exemplary Online Learning from the Multimedia Education Resource for Learning and Online Teaching; and a three-time winner of the IBM Faculty Award for his contributions to the study of e-business and the concept of open courseware.
His article on business models on the Web has very extensive and helpful introduction for this topic.

Saturday, January 07, 2006

Restlet - A Java Framework for REST

Jerome Louvel, a developer based in Levallois-Perret, France, has established a project known as the Restlet project to create a REST framework on top of the Java Servlet API. In his tutorial available from the official webpage, a bit of its server-side programming model is shown with a "Hello World!" example.
 // Creating a minimal handler returning "Hello World"
UniformInterface handler = new UniformInterface() {
public void handle(UniformCall call) {
call.setOutput(new StringRepresentation("Hello World!",

// Create the HTTP server and listen on port 8182
new JettyServer("My Web server", 8182, handler).start();

If you run this code and launch your server, you can open a Web browser and hit the http://localhost:8182. Actually, any URI will work, try also http://localhost:8182/test/tutorial. This handler is very primitive and only takes advantage of the pure REST part of the Restlet framework. Later in the tutorial, we can see how to take advantage of the Restlets in order to facilitate this processing.