This web page contains links to sub-pages dealing with various Java related topics, some of which involve work at Bear Products International.
Market Trading and Finance Software
A Java intra-day trading system, quantitative finance, technical analysis and other topics.
Lattice Pricing in Java Lattice pricing of stock options, written in Java. This includes a hack for pricing a "chooser options" (also know as an "as-you-like-it" option).
Elementary Algorithms in Java
A collection of elementary algorithms in Java.
Ant Monte Carlo
Elementary algorithms are used frequently when we write software,
although usually we use libraries that implement them.
The Ant Monte
Carlo code is a synthetic problem. It does have some minor
similarity to codes that are used to price options and other financial
instruments. I encountered this problem as an interview question.
The problem statement is:
Two ants start in opposite corners of a regular chessboard. Every 10 seconds, they move from the center of the square they're on to the center of an adjacent square. How long until they both land on the same square? How long until their paths cross (Ant A moving from square K to L and Ant B moving from square L to K)? What happens if we allow the ants to move diagonally? What happens if we restrict ants from moving to their immediately previous square?If you decide to use this code, read the class comment.
According to a follow up question: the ants are random ants
Miscellaneous Java Algorithms
This web page publishes a variety of Java algorithms.
javad: a Java class file disassembler
The javad program operates much like Sun's javap class
file disassembler. That is, javad reads a class file and
outputs a pseudo-Java declaration for the class that was the source
for the class file. The javad program is published in source
form, covered by the Bear Products International published source code
copyright. The javad
program is written in Java (as Sun would say, 100% pure Java, compile
once, run anywhere - pass the Coolaid).
The javad program was written as a tool to help understand the Java
class file format. An understanding of the Java class file format is
important for any program that reads class files (e.g., Java
compilers, debuggers and Java virtual machines (JVMs). A compiler
must be able to read the class file format because, unlike C and C++,
Java does not use .h files to define external symbol information.
This information is contained in the Java class files.
XML "pull parsers" provide a natural way to parse complex XML
documents. These web pages provide examples of parsing XML that
compare parsing using the SAX parser and the an XML "pull parser".
XML is being used to represent information in a wide range of
applications. This means that processing (parsing) XML is also needed
in more and more cases. The three web pages below publish Java source
code that shows how XML can be processed using the DOMParser, the
SAXParser and the XmlPullParser.
Building and Processing XML in Java
This web page publishes Java source code that demonstrates how to
build XML Document objects. It also publishes code that shows how
to parse, validate and process XML. An XML Document object is
build from an arithmetic expression or assignment statement (e.g.,
x = 3 + 4 * 5). The resulting XML Document is then "serialized" to
a String object. The String is then read by an XML parser,
validated and converted to an XML DOM object. The DOM tree is
traversed and the expression (or statement) is evaluated). The XML
construction and evaluation objects are used to construct an
interactive expression processor.
Parsing XML with SAX
The DOMParser and the DOM object it builds are useful for
processing complex XML documents. However, DOM may impractical for
very large XML documents because of its memory use. Also, the
construction and traversal of a DOM object has a computational cost.
The SAXParser is an alternative to the DOMParser. This web page
publishes example SAXParser code that processes prototype messages
that might be used a Trade Engine, a software system that supports
computer driven trading.
Processing XML with the
XML Pull Parser
As noted on the web page Parsing XML with SAX, the way SAX
processes XML is "ass backward". The SAX parser calls code in the
application what parses the XML document. The XML Pull Parser uses
a standard parsing architecture and can be called by the parsing
application.
Building an in-memory
tree with the Xml Pull Parser
This web page publishes a remarkably small object that builds an
in-memory tree representation of an XML document using the
XmlPullParser. A tree-to-XML serializer is also included.
An HTTP Client built with
Apache Commons HttpClient classes
A simple demonstration Java Servlet (I don't use Java servlets
directly anymore. Rather I use Grails)
Wavelet Software in Java
Wavelets might be thought of as Fourier Transforms for the twentieth
and twenty-first centuries. Wavelet techniques have been applied in a
wide variety of areas including signal processing, time series
analysis and data compression. See also my web page on Wavelets and Signal
Processing.
Miscellaneous Java Topics
Web pages discussing miscellaneous Java related topics.
Essays on Java
Build It Faster in
Java: a story of software reuse
Many people have commented that writing software in Java allows
them to be much more productive than in C++. Why is this? Is
software development in Java faster because "Java changes
everything"? According to the adds Sun Microsystems once ran in
magazines like The New Yorker and Vanity Fair
(before the dot-com bubble burst), Java provides an amazing new
paradigm, used by the Uber-Programmer, which drastically cuts the
cost of software development. Is this true? To understand the
answer to these questions we must examine Java, its runtime
environment and its class library and leave the hype behind.
Is Java a good first programming language?
I gotten a few emails from people asking if Java is a good
choice for a first programming language. For most people younger
than high school age, Java is a poor choice for a first
programming language. This web page briefly discusses this issue
and suggests alternatives.
In the relatively early days of Java I started work on a Java to native compiler. The Compiling Java web pages discuss the motivation for compiling Java into native code and some notes on architecture.
This material was written before the Java Just-in-Time compiler became quite advanced and able to deliver C++ levels of performance in some cases.
I concluded that there was no market for a Java to native compiler so I did not finish it.
For some applications, Java is constrained by the fact that it is an interpreted language, which resolves symbol references at run time. This makes Java considerably slower than compiled C++ and it limits Java's ability to access system resources to the Java Native Interface. As a result, Java as it currently exists, will not be used in computationally intensive applications like VLSI design software or simulation software.
Notes on Resin and Servlets
I have not used Resin for sometime. My experience has been that Apache
Tomcat is preferable to Resin and I now use Tomcat when I need a Java
application container.
Notes on installing the Resin HTTP and Java server. Resin is an easy
to install HTTP and Java server (e.g., it can run Java servlets).
Resin is, itself, written in Java.
Java is the capital island in the Indonesian archipelago. Back in the days of the Dutch East India company it was a major source of coffee beans. In modern times the island of Java has been eclipsed as a coffee producer by South America and other countries in Asia. As it turns out, Java is also a street in Sunnyvale, California (near Caribbean Dr.). In the computer realm Java is now most famous for being a programming language, designed by Gosling, Steel and Joy at Sun Microsystems. When Java is used in this context, Java is a trademark of Sun Microsystems.
Ian Kaplan, February 12, 2000
Last revised: April 19, 2015