Java Seminars, Tutorials, and Presentations by Elliotte Rusty Harold

This page lists some of the Java talks I've given in the past and am willing to give in the future. Talks range from an hour to all day. The duration of most of these talks can be expanded or contracted as necessary to fit your needs.

If you'd like me to speak at your conference or to your company just drop an email to me at elharo@metalab.unc.edu and we'll see what we can set up. I'm based in New York, but I do travel quite a bit. I also do a lot of speaking about XML as well. I'm constantly developing new presentations on a variety of subjects related to XML, Java, and the Web so if there's a particular topic you'd like to hear me pontificate about, feel free to ask. For example, it would be straight-forward to do a seminar on the Java Collections API or Multithreading in Java.

Power Tools for Programming

A single carpenter using power tools and a pickup truck can be many times more productive than a team of carpenters working with saws, hammers, and wheelbarrrows. No professional carpenter working today would consider doing a job without power tools. Software development may be a modern industry, but its very newness means many are programmers are still working with the software equivalent of the manual saw and the wheelbarrow. XOM is a Java library for processing XML that has been written by a single programmer working part time that competes with libraries written by large teams of full-time paid developers. When programmer time is tight and resources are limited, it becomes more important than ever to use the most effective tools and techniques available. This talk discusses the lessons learned while working on XOM with a particular emphasis on the tool chain. We'll discuss and demonstrate profilers, debuggers, refactories, code coverage tools, static analyzers, spell checkers, version control systems, build automation, and more. You'll see how the right choice of tools enables you to write faster, more robust, less buggy code much more quickly than you could with traditional manual techniques. I promise everyone will add at least one new power tool to their programmer toolbox that can enhance their productivity immediately.

Mustang, Dolphin. and Beyond (1 hour)

The toner may be starting to dry on the Java 5.0 specification, so it's time to start thinking about the next releases of Java, code named Mustang (Java 6.0) and Dolphin (Java 7.0). What's ahead or the Java language and libraries? Will Java ever get operator overloading or multiple inheritance? Perhaps more to the point, should it get these constructs? Will network programs finally be offered access to the raw IP layer so ping or traceroute can be written in Java? Will methods and classes deprecated eight years ago finally be removed? And will the Java source ever be opened up? Let's break out the crystal balls, leap right off the bleeding edge, and explore both where Java is going in the future and where it should go (which may or may not be the same place).

Refactoring Java

Over the last few years, refactoring, the process of gradually improving a code base by renaming methods and classes, extracting common functionality into new methods and classes, and generally cleaning up the mess inherent in most 1.0 systems are has gained a lot of adherents. Integrated Development Environments like Eclipse and IDEA can now automatically refactor code. But what if it's not just your code that needs refactoring? What if the language itself has inconsistencies, inefficiencies, and just plain idiocies that need to be corrected? When you get right down to it, the entirety of Java is really just like any other large code base. It has some brilliant parts, some functional parts, and some parts that make just about everyone scratch their heads and ask, "What the hell were the developers thinking?"

It's now a little more than eleven years after James Gosling began working on OAK, the language that would eventually become Java, and seven years since Sun posted the first public release of Java. The language, class library, and virtual machine collectively known as "Java" are all showing their age. There are many parts of Java that everyone agrees should be fixed, but can't be for reasons of backwards compatibility. Until now revisions of Java have attempted to maintain "upwards compatibility"; that is, all earlier code should continue to run unchanged in later versions of Java. This has limited the changes that can be made to Java, and prevented Sun from fixing many obvious problems.

This talk explores the possibilities for a new Java 3 that jettisons the baggage of the last decade, and proposes numerous changes to the core language, virtual machine, and class libraries. Among other topics, we'll look at primitive data types, threads, the collections API, arithmetic, bitwise operations, class loaders, Unicode support, Swing and the AWT, XML, I/O, and more.


Java I/O (1.5 hours)

I/O is one of the most widely misunderstood areas of the Java API, not because it's hard but because it's different. The Java I/O libraries have one of the cleanest, simplest designs of any common programming language, but that design is unfamiliar to most programmers. In this seminar you'll learn how to perform fast, efficient I/O that works with Java instead of against it. Topics covered include input and output streams, filter streams, readers and writers, and the crucial differences between text and binary I/O.

Outline:

Prerequisites:

This talk assumes attendees are familiar with basic Java and object oriented programming techniques including classes, inheritance, and polymorphism.


Common Misconceptions about Java I/O (1 hour)

I/O is one of the most widely misunderstood areas of the Java API, not because it's hard but because it's different. This talk explores some of the common misconceptions about Java I/O and corrects them. Along the way you'll learn how to do some things you probably thought Java couldn't do and how to avoid some of the traps and pitfalls that lay in wait for the unwary programmer.

Prerequisites:

This talk assumes attendees are familiar with basic Java and have done some programming that involves I/O streams.


Web Client Programming with Java (2 Hours)

Java is the first major programming language designed for network applications from the start. This seminar teaches you all about client-side network programming in Java with a particular emphasis on the World Wide Web, HTML, and HTTP. You'll see how to use Java's InetAddress, URL, and URLConnection classes to download data and content from Internet servers. You'll learn how the URL and URLConnection classes are integrated with Java's content and protocol handlers. You'll also learn how you can use these classes to communicate with CGI programs on a web server. Possible applications include web spiders, link checker robots, and persistent server-side storage. Finally, we'll talk about HTML, one of the most common and yet most non-standard data formats on the Web. You'll learn how to use Swing to display HTML. Possible applications include web browsers, robots, spiders, search engines and similar tools.

Outline:

Prerequisites:

Attendees should be familiar with basic Java and object oriented programming techniques. They should also have done at least a little GUI and event driven programming in Java using the AWT or Swing.


Parsing and Displaying HTML with Java (1.5 Hours)

Java 2 contains some powerful little known classes that make building web browsers, robots, spiders, search engines and similar tools extremely simple. In fact it's possible to build a complete HTML 3.2 Web browser in about 40 lines of code! This talk explores Java 2's HTML parsing and display classes. Topics covered include:

Outline:

Prerequisites:

Attendees should be familiar with basic Java and object oriented programming techniques. They should also have done at least a little GUI and event driven programming in Java using the AWT or Swing.


Java Network Programming (3 Hours)

Java is the first major programming language designed for network applications from the start. This tutorial teaches you all about network programming in the Java environment. You'll learn how to write fast, cross-platform, multithreaded clients and servers. You'll see how to use Java's InetAddress, URL, and URLConnection classes to download data and content from Internet servers. You'll learn how the URL and URLConnection classes are integrated with Java's content and protocol handlers. You'll also learn how you can use these classes to communicate with CGI programs on a web server. Possible applications include web spiders, link checker robots, and persistent server-side storage.

You'll also learn about Java's low-level socket classes for more intimate contact with the network. You'll learn to take advantage of Java's Socket and ServerSocket classes to communicate with TCP/IP servers and clients. You'll also learn about the UDP protocol for fast, unreliable data transfer. Possible applications include both standard protocols for email, ftp, and news, and custom protocols for networked multiplayer games, interactive chat, white boards, and more.

Outline:

Prerequisites:

This talk assumes attendees are familiar with basic Java programming including input and output streams, and have a user's view of the Internet. (e.g. they can send email and browse the web.)


Java Network Programming (1 Day Tutorial)

Java is the first major programming language designed for network applications from the start. This tutorial teaches you all about network programming in the Java environment. You'll learn how to write fast, cross-platform, multithreaded clients and servers.

The course begins with a discussion of the basic I/O libraries that form the foundation for network programming in Java. You'll learn how input and output streams are meant to be used. You'll learn to use the Reader and Writer classes to handle text without assuming that everything is ASCII. And you'll learn to take advantage of filter streams to make text and data processing simpler.

Next you'll see how to use Java's InetAddress, URL, and URLConnection classes to download data and content from Internet servers. You'll learn how the URL and URLConnection classes are integrated with Java's content and protocol handlers. You'll also learn how you can use these classes to communicate with CGI programs on a web server. Possible applications include web spiders, link checker robots, and persistent server-side storage.

You'll also learn about Java's low-level socket classes for more intimate contact with the network. You'll learn to take advantage of Java's Socket and ServerSocket classes to communicate with TCP/IP servers and clients. You'll also learn about the UDP protocol for fast, unreliable data transfer. Possible applications include both standard protocols for email, ftp, and news, and custom protocols for networked multiplayer games, interactive chat, white boards, and more.

Finally, we'll talk about HTML, one of the most common and yet most non-standard data formats on the Web. You'll learn how to use Swing to both parse and display HTML. Possible applications include web browsers, robots, spiders, search engines and similar tools.

Outline:

Prerequisites:

This course assumes attendees are familiar with basic Java programming and have a user's view of the Internet. (e.g. they know how to surf the Web, publish HTML, and send email).


[ Cafe Au Lait | Mailing Lists | FAQ | Tutorial | Course Notes | User Groups ]

Copyright 2000, 2002, 2004 Elliotte Rusty Harold
elharo@metalab.unc.edu
Last Modified October 15, 2004