January 1988 - THE 68030: HOW HOT IS IT

ARTICLES

386 VS. 030: THE CROWDED FAST LANE

by Tyler Sperry

Skeptical of all the conflicting benchmark data on the Motorola 68030 processor, Tyler set out to discover the truth, and learned that, as usual, the truth is far from simple.

A PROGRAMMER'S DATABASE FOR THE MACINTOSH

by A. Al-Dhelaan and T.G. Lewis

Macintosh programmers: have you ever wished you could pull down a menu, type in the name of a toolbox routine, and view its Inside Macintosh description on screen? Meet MacMan, the Macintosh manual-in-a-desk accessory.

PUTTING ROM CODE IN ITS PLACE

Rick Naro's listing continued from last month.

COLUMNS

C CHEST (not aavailable due to copyright restrictions)

by Allen Holub

This month Allen wraps up a two-part presentation of his preemptive multitasking kernel, detailing how the subroutines work.

TO THE MACS

by Stan Krute

In our new monthly column on Macintosh programming, veteran Mac hacker Stan Krute explains how to write custom CDEF resources to create several new species of buttons.

STRUCTURED PROGRAMMING

by Namir Clement Shammas

Namir examines the power and problems inherent in an object-oriented programming in Pascal, concentrating on an implementation for the Macintosh.....

ARTIFICIAL INTELLIGENCE

by Ernest R. Tello

... while Ernie looks at object-oriented programming in the PC environment in his critique of version 1.1 of Actor, the object-oriented programming language written by Chuck Duff of Neon fame.

FORUM

EDITORIAL

by Sara Ruddy

RUNNING LIGHT

by Michael Swaine

ARCHIVES

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

Products for programmers


February 1988 - DEBUGGING ON THE 386

ARTICLES

DEBUGGING WITH THE 80386


by Franklin Grossman
The protected mode of the 80389 offers extended software I/O controls which were previously only available through hardware debuggers. Frank shows you how to use the 386's registers and other features to provide advanced debugging support.

A SERIAL PROTOCOL ANALYZER PROGRAM


by Craig Lindley
Craig's SPA offers a slick way to use your PC to visually monitor data flow and handshaking between serial devices.

COLUMNS

C CHEST (not aavailable due to copyright restrictions)


by Allen Holub
Allen talks about the process of storing and reclaiming program variables using configuration files, followed by a discussion of the merits of awk as a C text query engine.

STRUCTURED PROGRAMMING


by Kent Porter
Kent offers some methods for handling DOS critical errors in Turbo Pascal.

THE FORTH COLUMN


by Martin Tracy
Martin ruminates on the year that was in the Fourth estate, and closes with a discussion of how to deal with stream I/O.

REVIEWS

EXAMINING ROOM


coordinated by Ron Copeland
Products examined from the programmer's perspective. This month's selections include: The Norton Guides, XO-Shell, MASM 5.0, Soft-scope V2.55, and Checkmate.

FORUM

EDITORIAL


by Tyler Sperry

RUNNING LIGHT


by Tyler Sperry

ARCHIVES


LETTERS


by you

SWAINE'S FLAMES


by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

Product news for the programming community


March 1988 - OBJECT ORIENTED PRESENTATIONS

ARTICLES

OBJECT-ORIENTED PROGRAMMING AND DATABASE DESIGN

by Jacob Stein
Object-Oriented programming has been gaining acceptance in the last few years. In this article, Jacob gives an introduction to object-oriented programming in general, a description of a specific object-oriented language (OPAL), and some example problems that are particularly well suited to object-oriented solutions.

WRITING CUSTOM DISPLAY FONTS

by Andrew J. Chalk
Andrew describes a TSR he's written for the EGA that automatically replaces the standard screen font with a resident custom font.

THREADED BINARY TREES

by James Mathews
Textbook discussions of threaded binary trees are almost always accompanied by source code in Pascal, aimed at the university student. In this article, Jim describes some routines he developed for traversing and managing these trees in Microsoft C.

REVIEWS

EXAMINING ROOM

coordinated by Ron Copeland
Products examined from the programmer's perspective. This month's offering includes a detailed review of Borland's Turbo Pascal 4.0, and a quick look at Microsoft's Codeview debugger.

COLUMNS

TO THE MACS

by Stan Krute
Stan winds up the CDEF project he began in the January column, and talks about several products.

STRUCTURED PROGRAMMING

by Kent Porter
Not all problems are polite enough, or trivial enough, to shoehorn into the PC's 64K segments. This month Kent shares his techniques for handling large data arrays in Turbo Pascal.

FORUM

EDITORIAL

by Tyler Sperry

RUNNING LIGHT

by Tyler Sperry

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

Product News for the programming community.


April 1988 - CREATING A NEW LANGUAGE

ARTICLES

CREATING AN ADVENTUROUS LANGUAGE

by Jonathan Amsterdam
Jonathan describes AAL, a language based on LISP that includes features from both object-oriented and declarative languages.

TOPICS IN KNOWLEDGE-BASED LANGUAGES

by Bill and Bev Thompson
The development of expert systems has often emphasized the paradigms of the subject area and their representation, often to the point of hindering rapid development and change. Bill and Bev describe flexible new structures called Topics that give knowledge-based system designers the advantages of both hypertext and declarative languages.

THEOREM PROVING USING SEMANTIC RESOLUTION

by Anthony J. Dos Reis
For those of you into propositional logic, Anthony offers working code (in C) for experimenting with "mechanical" theorem proving.

REVIEWS

EXAMINING ROOM

coordinated by Ron Copeland
Products examined from the programmer's perspective. This month: Version 2.0 of the Brief editor, Guideline's C++, and the Turbo Professional Library from Turbo Power.

COLUMNS

C CHEST (not aavailable due to copyright restrictions)

by Allen Holub
Improving on an old standard, Allen tears into printf() to add new features.

TO THE MACS

by Stan Krute
Updates on QUED/M, TMON, and HFS Navigator, as well as code for HyperCard Scouting Toolkit.

STRUCTURED PROGRAMMING

by Kent Porter
Updating Niklaus Wirth with a LineDrawing graphics module in (what else?) Modula-2.

THE FORTH COLUMN

by Martin Tracy
A report on the 9th FORML, the latest on the ANSI FORTH effort, and other news.

FORUM

EDITORIAL

by Tyler Sperry

RUNNING LIGHT

by Tyler Sperry

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST


May 1988 - DEVELOPING APPLICATIONS

ARTICLES

DEVELOPING FOR THE USER

by Robert Carr
Developing good software is more than just programming and debugging. Carr's eight axioms of successful software delivery tell you the rest of the story.

HANDLING IMAGE FILES WITH TIFF

by Anthony Meadow, Rocky Offner, and Michael Budiansky
If you are writing an application that works with bitmapped images, consider TIFF....

VIRTUAL ARRAY IN C

by Mark Tichenor
Data arrays need not be limited

by available memory. Mark uses virtual arrays with background file management to overcome this problem.

REVIEWS

EXAMINING ROOM

coordinated by Ron Copeland
Products examined from the programmer's perspective. This month's offering include PC/Forms tested in C, Soft-ICE, which provides the capabilities of an in-circuit emulator via software, and DE, a "stretched" version of the standard EMAC editor.

COLUMNS

C CHEST (not aavailable due to copyright restrictions)

by Allen Holub
Allen discusses the benefits of compiling to an intermediate language (postfix)--developing for multiple hardware platforms, merging compiler output, and eliminating redundant code.

TO THE MACS

by Stan Krute
Stan takes a field trip to the recent MacWorld Expo. He also has a wrap-up of the Scouting Toolkit.

STRUCTURED PROGRAMMING

by Kent Porter
With the help of a special model file--which Kent developed specifically for this exercise--he will demonstrate how to write a Pascal program that reads non-Pascal files.

PROGRAMMING PARADIGMS

by Michael Swaine
This is the premier of a new column: Parallel Processing, Object-Oriented Programming, and a reading list. Enjoy!

FORUM

EDITORIAL

by Jonathan Erickson

RUNNING LIGHT

by Tyler Sperry

ARCHIVES

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

brief product descriptions


June 1988 - REAL-TIME OPERATING SYSTEMS

ARTICLES

WRITING REAL-TIME PROGRAMS UNDER UNIX

by Bill Cramer
Porting a real-time process to a UNIX environment isn't always an impossible task. In this article, Bill offers some guidelines and C routines to let you either simulate a real-time OS with UNIX, or reorganize the program with a message-passing scheme.

MESSAGE-PASSING OPERATING SYSTEMS

by Dan Hildebrand
An overview of operating system design using intertask messaging, with real-world examples from QNX.

A SIMPLE DECOMPILER

by William May
Bill May returns to DDJ with a simple algorithm for recreating source code from tokens. The example source code is in C.

REVIEWS

EXAMINING ROOM

coordinated by Ron Copeland
Products examined from the programmer's perspective. This month: The Peabody online programmer's reference, the C-Index+ data file management library, and T-Debug Plus 4.0.

COLUMNS

C CHEST (not aavailable due to copyright restrictions)

by Allen Holub
Allen tackles some of the nastiest bugs around with a set of subroutines for tracking down pointers that muck with malloc( ) and free( ).

THE FORTH COLUMN

by Martin Tracy
Martin offers some thoughts on the state of real-time Forth, as well as source code for floating-point extensions.

STRUCTURED PROGRAMMING

by Kent Porter
Kent Examines the new release of Microsoft's Pascal compiler and compares it to Turbo Pascal 4.0; he also takes a short, painful look at Intel's LIM 4.0 upgrade.

PROGRAMMING PARADIGMS

by Michael Swaine
Notes on objectivity at Software Development '88, as well as Prolog, parallelism, and transputers.

FORUM

EDITORIAL

by Jonathan Erickson

RUNNING LIGHT

by Tyler Sperry

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

brief product descriptions


July 1988 - FRONTIERS OF DATABASES

ARTICLES

HYPERANIMATION

by Elon Gasper
If you thought talking heads like Max Headroom were science fiction, guess again. In this article Elon talks about the teachnology behind HyperAnimator, a Macintosh product that lets you add synchronized animated heads and sound to produce a lifelike effect.

SQL DEVELOPMENT TOOLS

by Mike Geary
Mike talks about SQL and provides an introduction to SQLWindows, an SQL development tool he wrote. Along the way he also talks about developing for the Microsoft Windows and the Macintosh environments.

PATTERN MATCHING: THE GESTALT APPROACH

by John W. Ratcliff
String comparison routines are often limited to finding exact matches. John describes an algorithm (implemented in assembly language) that gives matches as percentages.

REVIEW

EXAMINING ROOM

by Bruce Tonkin
Heated competition has led to increasingly more powerful Basic compilers. Bruce reports on "the state of Basic" with an examination of Microsoft's Basic 6.0 and Quick Basic's 3.0 and 4.0, as well as Borland's Turbo Basic 1.1.

COLUMNS

C CHEST (not aavailable due to copyright restrictions)

by Allen Holub
This month, Allen takes a look at shell redirection and offers two programs for dealing with shell archives in the Unix system and MS-DOS. He also has some thoughts on the latest book from Kernighan and Ritchie.

STRUCTURED PROGRAMMING

by Kent Porter
Back in our November 1987 issue, Kent demonstrated how to code pop-ups, pull-downs, and menu bars in Turbo C. Now he's back with an improved version for Turbo Pascal.

PROGRAMMING PARADIGMS

by Michael Swaine
Paradigms in Collision. This month, Mike considers the parallels (so to speak) between the paradigm shifts of cognitive psychology in the 1970's and the growing interest in neural networks.

FORUM

EDITORIAL

by Jonathan Erickson

RUNNING LIGHT

by Tyler Sperry

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

brief product descriptions


August 1988 - ANNUAL C ISSUE

ARTICLES

SPEED TRIALS: FIVE C'S COMPARED

by Richard Relph
Once again less is more as Rich compares this year's crop of hot C compilers by the likes of Borland, Computer Innovations, Datalight, Microsoft, and Watcom.

FIND THAT FUNCTION

by Marvin Hymowech
Marvin explains two utilities he's written in Microsoft C 5.0 to build a function finder for the MS-DOS that takes some of the grunt work out of revising your C source code.

AN AID TO DOCUMENTING C

by Stewart Nutter
If managing multiple modules makes you mad, try Stewart's C print program. This potent utility not only prints a tree diagram but also checks for unused functions and recursion and determines the module size and line count.

A TOOL FOR SECRET KEY CRYPTOGRAPHY

by John Michener
John uses a generalized rotor operator technique to construct a cryptographic secret key system that is strongly resistant to analysis.

REVIEWS

EXAMINING ROOM

coordinated by Ron Copeland
In this month's offering Ernie Tello explores how well Objective-C's object-oriented approach improves handling conventional programming chores.

COLUMNS

C PROGRAMMING

by Al Stevens
In his first appearance as a DDJ columnist, Al starts his list of C programming "crochets" and discusses confusing, but necessary, C constructs.

THE FORTH COLUMN

by Martin Tracy
Martin is our real-time connection this month as he focuses on Forth-based RISC chips and an upcoming real-time programming contest that you may want to enter.

STRUCTURED PROGRAMMING

by Kent Porter
Kent replaces DOS's inadequate DIR with a powerful new SUB command and offers some techniques for manipulating directories in Turbo Pascal 4.0.

PROGRAMMING PARADIGMS

by Michael Swaine
Once again Michael attempts to go in many directions at once with a discussion of parallel algorithms--coupled with practical examples.

FORUM

EDITORIAL

by Jonathan Erickson

RUNNING LIGHT

by Tyler Sperry

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

brief product descriptions


September 1988 - LANGUAGE-CENTERED ENVIRONMENT

ARTICLES

USING ACTION CHARTS

by Martin Stitt
in the time honored less-is-more style you've come to expect from DDJ, Martin shows you how to use keyboard macros with a word processor to create action charts from your source listings.

ADA FOR PASCAL PROGRAMMERS

by Kim King
Getting acquainted with Ada needn't be a stressful experience especially if you're already comfortable with Pascal.

OBJECT-ORIENTED DIMENSIONAL UNITS

by John A. Grosberg
Tired of a classless society? John presents an object-oriented class structure using dimensional units.

ARGUMENTS AND AUTOMATIC VARIABLES IN ASSEMBLY LANGUAGE

by Raymond Moon
One problem with assemblers is that they can't reference passed arguments and local variables. Ray presents some techniques for getting around this limitation.

XCMD AND XFCN: HYPERCARD'S SOFTWARE SLOTS

by Stan Krute
Using the software hooks which Apple has so thoughtfully provided, Stan explains how you can extend Hypertalk to include almost any function or procedure you might need.

REVIEWS

EXAMINING ROOM

coordinated by Ron Copeland
This month our senior technical editor, Kent Porter, puts a handful of Modula-2 compilers through their paces and emerges from the process as a born again Modula-2 programmer.

COLUMNS

C PROGRAMMING

by Al Stevens
Al begins a multi-issue project which develops a communications program and talks about the agony and the ecstasy of incremental implementation.

STRUCTURED PROGRAMMING

by Kent Porter
Kent's Modula-2 madness continues as he follows the development of the language as it evolved (initially) from Wirth's dissatisfaction with Pascal's limitations.

PROGRAMMING PARADIGMS

by Michael Swaine
This month Michael examines Dennis Reinhardt's Nerl Netwurkz, a tool that lets you build a neural net


by constructing, then connecting individual neurons.

FORUM

EDITORIAL

by Jonathan Erickson

RUNNING LIGHT

by Ron Copeland and Michael Swaine

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

brief product descriptions


October 1988 - EXTENSIBLE LANGUAGES

ARTICLES

ADDING EXTENSIONS TO LISP

by Jonathan Amsterdam
Using Lisp's macro capability to add functions and control structures in your compiled code not only offers "grow your own" language extensibility, but lets you customize without a performance penalty.

AN 80386 ASSEMBLER IN FORTH

by John Dilworth
John develops an assembler written in Forth that takes advantage of the extended capabilities of the 80386.

80386 PROTECTED MODE INITIALIZATION

by Neal Margulis
In addition to discussing how to get from real- to protected-mode and back, Neal shows how to define greater tan 64K segments, and provides some general comments on the ins and outs of developing 32-bit software.

A DOUBLE CROSS FOR MASM

by Steve Heller
Steve's multiple cross-reference solution will help you keep track of symbols and their uses in your assembly language programs.

REVIEWS

EXAMINING ROOM

coordinated by Ron Copeland
Ernie Tello evaluates the most recent incarnation of Borland's entry into the world of AI languages--Turbo Prolog 2.0.

COLUMNS

STRUCTURED PROGRAMMING

by Kent Porter
Earlier this year, Kent showed how to handle huge chunks of data. This month, he revisits the subject of large data arrays.

C PROGRAMMING

by Al Stevens
Al continues his multi-issue series on developing a communications program in C


by detailing a window-menu facility and date entry screen driver. Al also ponders whether programming is an art and asks the question: 'What is a C++ object anyway?"

THE FORTH COLUMN

by Martin Tracy
Martin resumes his wrap-up of some recent real-time programming conferences, including several important Forth-related announcements.

PROGRAMMING PARADIGMS

by Michael Swaine
Prior to this summer's IEEE Neural-Network conference, Michael was a bit confused about some of the aspects of neuro computing. Now, he's not sure whether he's confused or not.

FORUM

EDITORIAL

by Jonathan Erickson

RUNNING LIGHT

by Ron Copeland

LETTERS

by you

SWAINE'S FLAMES

by Jonathan Erickson

PROGRAMMER'S SERVICES

OF INTEREST

brief product descriptions


November 1988 - GRAPHICS

ARTICLES

PHOTOREALISM IN COMPUTER GRAPHICS

by Steve Upstill
Is it real or is it Pixar? Steve describes how advancements in shading and light refraction bring computer imaging even closer to the real thing.

PUTTING GRAPHICAL INTERFACES INTO PERSPECTIVE

by Kent Dahlgren
It's getting so you need a program just to know the players in what's turning into a "battle of the graphics standards."

IMAGE COMPRESSION VIA COMPILATION

by Victor Duvanenko
Manipulating the bulk of data required by graphic images eats up time and disk space--a graphics coprocessor can save you both.

DYNAMIC RUN-TIME STRUCTURES

by Todd King
Using dynamically defined data structures is one way to create flexible, yet powerful applications.

MAPPING DOS MEMORY ALLOCATIONS

by Robert J. Moore
Avoid a world of pain, understand how DOS uses memory control blocks.

INSERTING ELEMENTS INTO A BASIC INTEGER ARRAY

by Bruce Tonkin
Mixing assembly language with Basic yields some stunning performance improvements. And, as Bruce explains, it's not even that hard to do.

REVIEWS

EXAMINING ROOM

coordinated by Ron Copeland
Products examined from the programmer's perspective. This month, Gregory Lazarev takes a look a Prolog/V, a hidden gem included free with Smalltalk/V.

COLUMNS

C PROGRAMMING

by Al Stevens
Al's project continues to grow with a general purpose text editor that (somehow) leads to a discussion of maintaining comments in code.

STRUCTURED PROGRAMMING

by Kent Porter
Kent takes a look at Borland's Turbo Pascal 5.0 with the long-awaited integrated debugger.

PROGRAMMING PARADIGMS

by Michael Swaine
Michael ruminates over alternatives to conventional programming languages and wonders how (if) they'll affect our future.

FORUM

EDITORIAL

by Jonathan Erickson

RUNNING LIGHT

by Ron Copeland

ARCHIVES

LETTERS

by you

SWAINE'S FLAMES

by Jonathan Erickson

PROGRAMMER'S SERVICES

OF INTEREST

brief product descriptions


December 1988 - OPERATING SYSTEMS

ARTICLES

BUILDING SOFTWARE FOR PORTABILITY

by Greg Blackham
Greg examines three critical issues related to software portability: the operating system, the hardware, and the compiler.

UNIX VS. UNIX

by Donnalyn Frey
The confusion over UNIX system standards doesn't mean you have to put off writing software until the dust settles. Donalyn presents a strategy that prevents you from getting left behind when/if a standard eventually emerges.

WRITING OS/2 APPLICATIONS WITH I/O PRIVILEGES

by Ray Duncan
OS/2's built-in I/O drivers may not provide all the power you need. Ray shows you how to bypass OS/2 to take direct control of peripheral devices.

WRITING PROGRAMS FOR MULTIFINDER

by Chris Derossi
With Multifinder the world changed. Chris describes the new landscape and how to keep from being led astray.

SPELUNKING MS-DOS: DOCUMENTING THE UNDOCUMENTED

by Scott Robert Ladd
Undocumented DOS functions aren't exactly for the faint of heart. But, as Scott suggests, there are times when the payoff makes the risks worthwhile.

EGA AND VGA SMOOTH SCROLLING AND PANNING

by Andrew Chalk
Andrew shows you how to manipulate EGA/VGA video controller registers for moving the viewing window a pixel at a time in any direction.

FIND THAT FUNCTION -- FROM INSIDE BRIEF!

by Marvin Hymowech
Marvin is with us once again, this time with a Brief macro version of his spiffy function finder for revising C source code.

REVIEW

EXAMINING ROOM: A CLASSIFIER

coordinated by Ron Copeland
Ernie Tello looks at the latest version of C_Talk from CNS --an implementation of C in Smalltalk-like environment.

COLUMNS

C PROGRAMMING

by Al Stevens
Al discusses menu structuring, file management, and text searching along with an implementation of a context-sensitive help facility.

STRUCTURED PROGRAMMING

by Kent Porter
Kent introduces Xref, a symbolic cross-reference utility that uses some unusual data structures.

PROGRAMMING PARADIGMS

by Michael Swaine
Michael presents some general principles for classifying parallel processing algorithms.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

brief product descriptions


Special Issue 1988 - SOFTWARE ENGINEERING SOURCEBOOK

ARTICLES

SOFTWARE ENGINEERING ENVIRONMENTS

by Stowe Boyd
Stowe provides readers with a map of the meandering journey toward a coherent software engineering environment. He also presents the strengths and weaknesses of various languages and environments with respect to their suitability for large programming projects.

SOFTWARE AND THE SINGLE PROGRAMMER

by T. G. Lewis
Professor Lewis of Oregon State begins with a discussion of several programming methodologies. This leads to an examination of OSU (the Oregon Speedcode Universe), an intelligent graphic prototyping system that lets programmers construct an application WYSIWYG-style

by showing -- rather than telling -- the computer what to do.

USING AN API AS A DEVELOPMENT PLATFORM

by Jeff Parker
Jeff makes the case that an application specific programming environment may be just what you need so that you can spend your time on the content, rather than the form, of your program.

EMBEDDED SYSTEMS DESIGN--A SPECIAL CASE?

by David Kalinsky and James Ready
David and Jim discuss the difficulties of splicing CASE tools together which unfolds into a charter for the ideal integrated programming environment that would address the particular problems encountered in real-time systems development.

TACKLING LARGE-SCALE PROGRAMMING PROJECTS

by W. Courington, J. Feiber, and M. Honda
Three of Sun's technical team members explain how intelligently controlled distributed computing can bring the unused power of networked workstations to the local desktop and how this technology is only "a motion away" from you and your PC.

APPLYING WORKSTATION TECHNOLOGY TO CASE

by David Leblang
David describes how object-oriented programming and distributed computing environments like Apollo's DSEE let users take maximum advantage of the combined graphics, network, and computational power of contemporary workstations.

FORUM

OPENING EDITORIAL

by Phillip Robinson

GLOSSARY

CLOSING EDITORIAL

by Michael Swaine


Special Issue 1988 - MACINTOSH SPECIAL

THE MAC PROGRAMMING ENVIRONMENT

A MAC PROGRAMMER'S RESOURCE KIT

by Anthony Meadow
Tony presents an overview of the plentiful (albeit, occasionally difficult to locate) resources available to the Mac programmer. The guided tour includes: development systems, software, organizations, training, user groups, and publications.

THE MACINTOSH PROGRAMMER'S WORKSHOP

by Dan Allen
Dan Allen is your guide on a tour of the MacIntosh Programmer's Workshop (MPW). Dan points out that the benefits of MPW's integrated programming environment, and examines a selection of its powerful tools and resources - including integrated tools.

THE MAC II

APPLE'S A/UX: UNIX FOR THE REST OF US?

by Anthony Meadow
Tony explores the Mac II platform for developing Unix system applications. He delves into the critical issues of compatibility and functionality with an eye toward special problems/opportunities of programming on and for the MacIntosh interface. Tony also includes strategies for combined Mac OS and A/UX development, and a wish list for future releases of A/UX.

HYPERTALK

AN INTRODUCTION TO HYPERCARD PROGRAMMING

by Dan Allen
One of HyperTalk's principle programmers, Dan Allen explains how to expand the power of HyperCard through external procedures to handle such tasks as: custom device drivers, access to the Mac OS and Toolbox routines, and speeding up the execution of time-critical code. Dan includes a sample XCMD written in MPW C.

FORUM

THE REBIRTH OF THE MACINTOSH

by Randall P. Sutherland

THE DEATH OF THE MACINTOSH

by Michael Swaine


January 1989 - NEURAL NETWORKS

ARTICLES

USING NEURAL NETWORKS FOR PATTERN RECOGNITION


by Todd King
Is there order in chaos? Neural nets provide a method of finding out as Todd uses the pattern associator and classification paradigms to solve pattern recognition problems.

NEURAL NETS AND NOISE FILTERING


by Casimir C. Klimasauskas
Back-propagation is one way neural nets can be used to detect relationships between what goes in and what goes out. Here, Casey discusses a technique for filtering out noise.

UNIX STREAMS


by Michael W. Garwood and Andrew E. Schweig
Unix Streams make it possible for your to develop portable, yet efficient, networking protocols. Mike and Andy discuss how Streams do what they do and how you can use them.

COMPARING MODULA-2 AND C++


by Scott Robert Ladd
When Scott compares C++ to Modula-2, he finds that neither language loses -- and that you come out the winner.

USING EXTENDED MEMORY ON THE PC AT


by Paul Thomson
It's possible to copy memory anywhere within the 16-Mbyte address range of the 80286 if you have the right data structure.

REVIEWS

EXAMINING ROOM


This month Mike Schmit compares a trio of MS-DOS assemblers -- Microsoft's MASM 5.1, Borland's TASM 1.0, and SLR's OPTASM 1.5.

COLUMNS

C PROGRAMMING


by Al Stevens
Al's project now has a bridge to Microsoft C, but that doesn't mean he's not interested in Turbo C 2.0.

STRUCTURED PROGRAMMING


by Kent Porter
Kent puts Modula-2 to work with three snappy utilities that go deep inside DOS.

PROGRAMMING PARADIGMS


by Michael Swaine
This month Michael peeks at paradigmic underpinnings and finds that future programming environments are more likely to focus on conserving programmer resources than on rationing the resources of the compiler.

FORUM

EDITORIAL


by Jonathan Erickson

LETTERS


by you

SWAINE'S FLAMES


by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

brief product descriptions

Copyright © 1989, Dr. Dobb's Journal


February 1989 - REAL-TIME AND EMBEDDED SYSTEMS

ARTICLES

RHEALSTONE: A REAL-TIME BENCHMARKING PROPOSAL


by Rabindra P. Kar and Kent Porter In a major breakthrough, DDJ proposes a real-time benchmark and invites you to help finalize this long-needed standard.

REAL-TIME MODELING WITH MS-DOS


by David Bowling Even though MS-DOS isn't multitasking, it can still be used for some real-time applications, and David shows how.

A BENCHMARK APOLOGIA


by G. Michael Vose and David Weil Knowing benchmark pitfalls can help you decide whether benchmark results really tell you anything useful. Mike and Dave discuss those pitfalls -- and show you how to avoid them.

A C++ MULTITASKING KERNEL


by Tom Green When Tom decided to rewrite his multitasking kernel, he thought that C++ objects would be ideal -- and he was right.

A TIMED EVENT NETWORK SCHEDULER IN FORTH


by Gregory Ilg and R.J. Brown TENS, the scheduler Gregory and R.J. present here was designed for real-time process-control applications. It features its own high-level language, which is and extension of Forth.

BENCHMARKING C STATEMENTS


by David L. Fox If you need to get the most out of small chunks of C code, David's program shows you how to find the bottlenecks so you can improve performance.

DEBUGGING TSR PROGRAMS


by Costas Menico If you've ever had to reboot when a TSR hangs up your system, you'll appreciate -- and use -- Costas' techniques for debugging memory-resident programs.

RUN LENGTH ENCODING


by Robert Zigon Robert shares a data compression technique that's saved him disk space and will for you too.

REVIEW

APL PLUS SYSTEM II


by Chris Burke As Chris reports, APL*PLUS II from STSC adds support for 80386 protected mode, nested arrays, better handling of files, workspaces, and more.

COLUMNS

PROGRAMMING PARADIGMS


by Michael Swaine Michael takes object-oriented programmers off the horns of the inheritance dilemma.

C PROGRAMMING


by Al Stevens This month Al introduces TINYCOMM to connect you to the outside world via modem.

GRAPHICS PROGRAMMING


by Kent Porter New column! Come join our senior tech editor for a voyage into the magical (and sometimes maddening) world of graphics programming.

STRUCTURED PROGRAMMING


by Jeff Duntemann The newest member of the DDJ family goes on a search for Mr. Goodbar, hoping to avoid the perils of shower curtain salesmanship.

THE FORTH COLUMN


by Martin Tracy Martin goes globe-trotting to update us on the world Forth scene, as well as sharing a Mandlebrot plotting program.

FORUM

EDITORIAL


by Jonathan Erickson

LETTERS


by you

SWAINE'S FLAMES


by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST


brief product descriptions

Copyright © 1989, Dr. Dobb's Journal


March 1989 - WINDOWING SYSTEMS

FEATURES

A PRESENTATION MANAGER APPLICATION TEMPLATE


by Herbert Schildt In this month's lead article, Herb explains what Presentation Manager programs are all about. In doing so, he develops a program template that you can use as the starting point for writing you own Presentation Manager programs.

DYNAMIC LINK LIBRARIES UNDER MICROSOFT WINDOWS


by Margaret Johnson and Mark Solinski DLLs let several applications share the same code space and, as Margaret and Mark show, they allow you to write smaller, faster, and more portable applications.

WRITING PORTABLE APPLICATIONS WITH X/GEM


by Bill Fitler Writing portable applications isn't mysterious, it just requires that you have a different design philosophy and different tools than when writing for a single system.

NETWORK WINDOWING USING THE X WINDOW SYSTEM


by Jim Gettys X Windows is a widowing and graphics system designed to run across networks and Jim was part of the original X development team. Here, he describes what X is all about, paying particular attention to X protocol.

EXTENDED DIRECTORY SEARCHES USING C++


by John M. Dlugosz In this article, John presents a program that lets you make conditional searches of your directories. And he does it in C++.

COPING WITH COMPLEX PROGRAMS


by Karanjit S. Siyan Understanding in quantitative terms how a complex program works is what software metrics is all about. Karanjit discusses some of the different approaches to this topic.

THE OSF WINDOWING SYSTEM


by Ken Hinckley The Open System Foundation had to make some tough decisions when deciding which windowing system to implement in their upcoming version of Unix. Here are their criteria.

EXAMINING ROOM

THE PORTABILITY DREAM


by Margaret Johnson Margaret looks at the XVT Toolkit, a "virtual" toolkit from the Advanced Programming Institute that lets you write Macintosh or MS Windows applications in one fell swoop.

COLUMNS

PROGRAMMING PARADIGMS


by Michael Swaine This month Michael tackles one of the thornier issues of object-oriented programming -- multiple inheritance. What he finds is that one simple question can beget many conflicting answers.

C PROGRAMMING


by Al Stevens Last month's TINYCOM program brings Al to this month's SMALLCOM, and enhanced communication program that sports windows, menus, and data entry tools.

GRAPHICS PROGRAMMING


by Ken Porter The shortest distance between two points is a straight line. But, as Kent points out, that's easier said than done.

STRUCTURED PROGRAMMING


by Jeff Duntemann Jeff catches up on Comdex, paying particular attention to programming tools. He also discusses why text-oriented programs need to be video adapter "aware."

DEPARTMENTS

EDITORIAL


by Jonathan Erickson

LETTERS


by you

SWAINE'S FLAMES


by Michael Swaine

OF INTEREST


brief product descriptions

Copyright © 1989, Dr. Dobb's Journal


April 1989 - MEMORY MANAGEMENT

FEATURES

MORE MEMORY FOR DOS EXEC


by Kim Kokkonen Here's a technique for swapping a calling program into expanded memory or onto disk -- and back -- so that a child process can have more free memory. This is particularly useful when one program invokes another says Kim.

ADVANCED 80386 MEMORY MANAGEMENT


by Neal Margulis Paging is the 80386's answer to the memory management for multitasking operating systems. In this article, Neal examines how the 386 handles this complex task.

DEMAND PAGED VIRTUAL MEMORY


by Kent Dablgren Demand paging involves the dynamic partitioning of a program's linear address space into individual "pages." It comes as no surprise that different CPU's such as Intel's 80386, Motorola's 68030, and AMD's Am29000 manage pages differently.

SWAP


by Nico Mak Nico shares an application-independent method for one MS-DOS program to run another


by copying conventional memory to expanded memory or to disk.

A MEMORY ALLOCATION COMPACTION SYSTEM


by Steve Peterson Memory fragmentation has given has given DOS programmers headaches for a long time. Steve prescribes a memory compaction scheme that can spell relief


by, among other things, letting you allocate movable memory blocks.

A CLASS ACT


by Michael Floyd If you've been wondering what object-oriented programming is all about, here's the place to get started. Mike takes a tour of the object-oriented world, including some of the more popular OOP languages.

EXAMINING ROOM

In this month's Examining Room, Alex Lane looks at Edward K. Ream's Sherlock debugger, Keith Weiskamp examines the "C"erious Toolkit form TSR Systems, Bruce Tonkin looks at Crescent Software's Basic QuickPak Professional toolkit, and Jonathan Amsterdam about the book The Puzzling Adventures of Dr. Ecco.

SHERLOCK HOMES IN


by Alex Lane

...BUT CERIOUSLY FOLKS


by Keith Weiskamp

QUICK LOOK AT QUICKPAK


by Bruce Tonkin

PUZZLING ADVENTURES


by Jonathon Amsterdam

COLUMNS

PROGRAMMING PARADIGMS


by Michael Swaine This month Mike takes a second look at superlinearity and suggests/proposes/demands that computer science curricula begin with courses in -- you guessed it -- programming paradigms.

C PROGRAMMING


by Al Stevens Al discusses file transfer protocols and adds XModem to his SMALLCOM communications program. To make dialing easier, he includes a phone directory.

GRAPHICS PROGRAMMING


by Kent Porter Kent comes clean this month and tells us how he mixes and matches colors on an EGA screen.

STRUCTURED PROGRAMMING


by Jeff Duntemann Screens sometimes make Jeff scream, or so he says. To keep things in perspective, he launches his "anti-windowing" system, which makes the hardware display a window into a 66-line virtual screen.

DEPARTMENTS

EDITORIAL


by Jonathan Erickson

LETTERS


by you

SWAINE'S FLAMES


by Michael Swaine

OF INTEREST


brief product descriptions

Copyright © 1989, Dr. Dobb's Journal


May 1989 - STRUCTURED LANGUAGES

FEATURES

CREATING TSRS PROGRAMS WITH TURBO PASCAL: PART 1


by Ken L. Pottebaum In this first installment of a two-part series, Ken discusses TSR basics and presents the tools necessary to write memory-resident programs. Next month he will put this theory to work.

KERMIT MEETS MODULA-2


by Brian R. Anderson Modula-2 enabled Brian to implement each layer of the Kermit communications protocol as separate modules and in this article he shows you how he did it.

LANGUAGE-INDEPENDENT DYNAMIC PSEUDOSTRUCTURES


by Bruce W. Tonkin Whenever data must be compared in a variety of formats, data conversion sometimes pays off. Bruce discusses how you perform conversion and what kind of results you can expect.

TAWK: A SIMPLE INTERPRETER IN C++


by Bruce Eckel The data-encapsulation features of C++ let you create more sophisticated programs without adding complexity. Bruce's "tiny" AWK implementation illustrates this and more.

QUICKDRAWING WITH XCMDS


by Jay Martin Anderson Speed up your HyperCard applications


by accessing QuickDraw directly, Jay shows you how -- and how to avoid pitfalls when doing so.

RUN LENGTH ENCODING REVISITED


by Phil Daley The run-length encoding technique we presented in February generated a flurry of response, and so here's another approach to the problem.

EXAMINING ROOM

QUICK C VERSUS TURBO C


by Scott Robert Ladd At first glance, Borland's Turbo C and Microsoft C might appear to be similar feathers from the same bird but, as Scott discovers, that isn't necessarily the case. Join him as he discusses the strengths and weaknesses of these two popular C compilers.

COLUMNS

PROGRAMMING PARADIGMS


by Michael Swaine It was Robert Floyd's 1978 Turing Award lecture on programming paradigms that inspired Michael's, column in the first place. Now, more than 10 years later, Michael interviews Professor Floyd to see how he and the world of programming have changed.

C PROGRAMMING


by Al Stevens This month, Al builds the engine of a C-like interpreter, which can be added as a script interpreter to his SMALLCOM communications project. Al then follows up earlier columns


by adding his two cents about Quick 2.0, as well as the goings on of ANSI C.

GRAPHICS PROGRAMMING


by Kent Porter Viewpoints not only provide you with a window to the world, they let you define the boundaries of that world. At least that's what Kent and his dog found out.

STRUCTURED PROGRAMMING


by Jeff Duntemann Typecasting is a problem that has traditionally plagued Hollywood actors, but as Jeff points out, it can be a problem for programmers as well.

DEPARTMENTS

EDITORIAL


by Jonathan Erickson

LETTERS


by you

SWAINE'S FLAMES


by Michael Swaine

OF INTEREST


brief product description

Copyright © 1989, Dr. Dobb's Journal


June 1989 - OPERATING SYSTEMS

FEATURES

INTERPROCESS COMMUNICATIONS IN OS/2

by Ray Duncan
Before you can take advantage of OS/2's IPC facilities, you need to know which one works best when. Ray compares the semaphore and message-passing performance of various IPCs.

UNDOCUMENTED DOS

by Rahner James
Sometimes what they don't tell you is important too. Rahner discovered and shares a technique for using undocumented DOS functions to break down the 32-Mbyte disk barrier.

REAL-TIME DATA ACQUISITION

by Mike Bunnell and Mitch Bunnell
Mike and Mitch describe what's needed to reliably collect data in real-time -- and that usually means a real-time operating system.

VARIABLE-LEVEL PROGRAMMING

by Ronald Fischer
Variable-level programming languages may suit the needs of system programmers better than either high-level procedural languages or low-level assembly languages.

OPTIMIZATION TECHNOLOGY

by Keith Rowe
Optimizers are rapidly becoming standard fare on high-performance compilers. Keith explains how they work and what sort of benefits you can expect from them.

WRITING AWK-LIKE EXTENSIONS TO C

by Jim Mischel
As Jim show here, adding AWK-like extensions to standard C gives you better string searching capabilities and isn't difficult to do.

CREATING TSRS PROGRAMS WITH TURBO PASCAL: PART II

by Ken. L. Pottebaum
In this second installment of his two-part article, Ken puts to work the TSR tools he presented last month.

MAINTAINING SYSTEM SECURITY

by Dale Moir
Don't wait until Trojan horses are galloping across your Unix network before you tend to security issues. Dale discusses some of the problems with system security and some of the solutions.

EXAMINING ROOM

GENERATING PARSERS WITH PCYACC

by Alex Lane
If computer boot camp is your idea of fun, PCYACC probably isn't for you. But if you nee to parse input quickly and easily, then PCYACC may be worth signing up for.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine
Michael Swaine takes up the task of defining OOPs where Michael Floyd left off

by focusing on 16 key points and identifying which OOP languages provide which features.

C PROGRAMMING

by Al Stevens
This month Al builds a communications script processor using last month's SI interpreter engine. He also reports on SD'89 as he saw it, sharing some music criticism along the way.

GRAPHICS PROGRAMMING

by Kent Porter
Love, Justice, and graphics programming are all sometimes blind, not to mention on of Kent's old college professors. All of this leads Kent to examine pixel detection and techniques for filling closed figures.

STRUCTURED PROGRAMMING

by Jeff Duntemann
Jeff acknowledges that there's a time and a place for just about everything, including assembly language, as he applies his 20 percent rule to programming problems.

DEPARTMENTS

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

OF INTEREST


brief product description

Copyright © 1989, Dr. Dobb's Journal


July 1989 - GRAPHICS PROGRAMMING

FEATURES

LINE-OF-BEST-FIT

by William H. Murray and Chris H. Pappas
Bill and Chris describe how to use the mouse and Presentation Manager to define a group of points and draw the resulting line, all in a protected-mode environment.

AN ICON EDITOR

by Keith Weiskamp and Loren Heiny
Creating, saving, and editing icons for graphics applications is a snap with Keith and Loren's icon editor and its support tools.

MULTITASKING OS AND GRAPHICS COPROCESSORS

by Chuck McManis
"High-performance graphics applications" is often a contradiction of terms, especially on low-end systems. Chuck shows how the Amiga's multitasking OS and built-in graphics coprocessor coax 32-bit graphics performance out of a 16-bit machine.

IMAGE MATHEMATICS

by Victor Duvanenko
Photographers use chemicals to enhance and enrich images. Victor shows how programmers can achieve the same special effects by manipulating numbers.

TURBO PASCAL WITH OBJECTS

by Michael Floyd
Mike puts Turbo Pascal 5.5's new object-oriented features to work and uncovers some secrets about the Overlay Manager ad Smart Linker in the process.

FASTER STRING SEARCHES

by Costas Menico
Boyer-Moore is a hybrid algorithm that combines pattern analysis with brute force to produce faster string searches. This method speeds up Costas' programs, and he shows how it can speed up yours too.

EXAMINING ROOM

GETTING THE BUGS OUT WITH TURBO DEBUGGER

by Bill Catchings and Mark L. Van Name
Bill and Mark put Borland's Turbo Debugger through its paces and find that, although correcting programming mistakes isn't necessarily fun, it doesn't have to be all that painful either.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine
While picking up some spare change, Michael asks Hal Hardenbergh why a hardware engineer would find neural networks fun.

C PROGRAMMING

by Al Stevens
The Blackjack simulation program Al presents this month saved him some money and you can bet that it will save you some too.

GRAPHICS PROGRAMMING

by Kent Porter
It's possible to have do-it-yourself screen coordinates by simply redefining the coordinate system in any terms you like. And doing so, says Kent, opens the door to new graphics programming tricks and techniques.

STRUCTURED PROGRAMMING

by Jeff Duntemann
Turbo Pascal's object-oriented extensions launch Jeff into the swirling waters of OOP.

DEPARTMENTS

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

OF INTEREST

brief product description

Copyright © 1989, Dr. Dobb's Journal


August 1989 - ANNUAL C ISSUE

FEATURES

SMALLTALK + C: THE POWER OF TWO

by Dave Thomas and Randolph Best
Using Smalltalk to represent and manipulate high-level information and C to implement critical, low-level facilities can add power to your programs.

MAKING THE C-TO-FORTRAN CONNECTION

by Michael A. Floyd
Making the C-To-Fortran connection lets you use the wealth of C tools to take advantage of Fortran libraries.

TRANSLATING PCX FILES

by Kent Quirk
Kent shows how he outputs PCX images files to PostScript printers, using C as a conversion medium.

BUILDING YOUR OWN C INTERPRETER

by Herbert Schildt
Roll your own C interpreter using the code and techniques Herb presents here.

C MULTIDIMENSIONAL ARRAYS AT RUN TIME

by Paul Anderson
Using C functions to create two- and three-dimensional arrays at run time helps you organize the heap and write more powerful programs.

C DYNAMIC MEMORY USE

by Randall Merilatt
Randy shares some proven techniques to help you detect, identify, and cope with C dynamic memory problems.

C PROCEDURE TABLES

by Tim Berens
Procedure tables let you store functions and subroutines in a table for tighter program control.

GOING FROM K&R TO ANSI C

by Scott Robert Ladd
ANSI C picked up where K&R left off, and knowing where the differences are can affect your programming practices.

A GENERIC HEAPSORT ALGORITHM IN C

by Stephen Russell
The non-recursive Heapsort algorithm may be just the sorting tool you need, no matter what language you're programming in.

EXAMINING ROOM

Coordinated by Michael A. Floyd
In this month's Examining Room Scott Ladd sums up his Turbo C and QuickC face-off, Tom Castle looks at Genus' C Tools and PCX Programmer's Toolkit, and Professor T.A. Elkins examines VEdit Plus from CompuView.

BENCHMARKING TURBO C AND QUICK C

by Scott Robert Ladd

VEDIT PLUS

by Professor T.A. Elkins

C WINDOWS TOOLKIT

by Tom Castle

PCX PROGRAMMER'S TOOLKIT

by Tom Castle

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine
Michael asks the question, "Why neural nets?" and gets into some background on backpropagation.

C PROGRAMMING

by Al Stevens
It had to happen sooner or later: Al takes a serious look at C++ after reexamining how he's abused typedef.

GRAPHICS PROGRAMMING

by Kent Porter
A drive along the twisty roads of Big Sur gets Kent to thinking about curves -- and ways programmers can handle them.

STRUCTURED PROGRAMMING

by Jeff Duntemann
Jeff looks into the Legend of Smalltalk and finds out that it's really an ordinary language -- within a remarkable framework.

DEPARTMENTS

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

OF INTEREST

compiled by Janna Custer

Copyright © 1989, Dr. Dobb's Journal


September 1989 - SIMULATION AND MODELING

FEATURES

AUTOROUTING WITH THE A* ALGORITHM

by Randy Nevin
Finding the best of all possible solutions can be made easier with AI-based search algorithms. Randy looks at the A* algorithm -- and discusses how it can be used to simulate a printed circuit board layout.

SIMULATED ANNEALING

by Michael P. McLaughlin
Simulated annealing is most often used by VLSI chip designers to determine the optimum arrangement of thousands of circuits. But, as Michael shows here, it has other applications as well.

FORCE-BASED SIMULATIONS

by Todd King
The argument can be made that object-oriented language provide the most efficient way of modeling the real world. Todd states his case, as he uses C++ to build a simulation system that mimics the force of one planet on another.

SETTING PRECEDENCE

by Mark C. Peterson
Using precedence trees makes it possible to create ordered, binary trees that have a single configuration for a given set of numbers. What all this leads to, says Mark, is more efficient programs.

ROLL YOUR OWN MINILANGUAGES WITH MINI-INTERPRETERS

by Michael Abrash and Dan Illowsky
Mini-interpreters can do lots of work within a small space, even letting you create your own customized minilanguage. Michael and Dan discuss the pros and cons of mini-interpreters, then give you the tools to roll your own.

80386 PROTECTED MODE AND MULTITASKING

by Tom Green
In this article, Tom presents a set of tools that let you take advantage of the 80386's built-in memory protection and hardware-supported multitasking capabilities.

EXAMINING ROOM

WATCOM C7.0

by John M. Dlugosz
Watcom got good reviews when DDJ looked at it last year. In this issue, John examines how its latest incarnation measures up.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine
Nobody knows the trouble Michael knows as he continues his discussion of neural nets and his talks with Hal Hardenbergh.

C PROGRAMMING

by Al Stevens
Al is still intrigued

by C++ and its potentials. To test his new-found knowledge and skills, Al uses C++ to build pop-up windows and menus.

STRUCTURED PROGRAMMING

by Jeff Duntemann
The rapid acceptance of objects in the world of Pascal convinces Jeff that Pascal programming may never be the same again. He then strays off into the world of REXX programming, with a look at Personal REXX.

DEPARTMENTS

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

OF INTEREST

compiled by Janna Custer

Copyright © 1989, Dr. Dobb's Journal


October 1989 - DATA COMMUNICATIONS

FEATURES

IMPLEMENTING MULTIPLE COMPUTER COMMUNICATION LINKS

by Mark Servello
If you've been asking yourself what to do with that dust-covered microcomputer in the back room, Mark offers a productive suggestion, and shows you how to do it.

LZW DATA COMPRESSION

by Mark R. Nelson
We all know that less is better, especially when it comes to data transfer and storage. Mark shows how more can be less, and that's what data compression is all about.

HIGH-SPEED FILE TRANSFERS WITH NETBIOS

by Costas Menico
Costas shows you how to take advantage of the high-speed data transfer facilities LAN's provide, without having to bite the LAN bullet.

FINITE STATE MACHINES FOR XMODEM

by Donald W. Smith
If the chaos of communications is getting you down, a finite state machine may be what you need. Don describes how to implement one for the XModem protocol.

HAMMING-CODE DECODING

by Ben White
Reliability and efficiency are the cornerstones if data communications. Ben examines the Hamming-code method of ensuring these qualities and shows you how to implement this approach.

EXECUTABLE SPECIFICATIONS WITH PROLOG

by Gregory L. Lazarev
Gregory discusses how executable specifications can be generated from a data flow diagram using Prolog's declarative and procedural capabilities.

A GLOBAL VARIABLE DEVICE DRIVER FOR MS-DOS

by Jim Mischel
If you need a way to maintain true system-wide global variables for your DOS applications. Jim's GLOVAR program should fill the bill.

EXAMINING ROOM

FIRST LOOK AT COMMONVIEW

by Noel J. Bergman
This month in 'Examining Room,' Noel examines CommonView, an object-oriented library for mapping graphical-user interfaces onto a set of object classes, to find out if it really does make it easier to write Windows and Presentation Manager applications.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine
Delving deeper into neural nets, Michael arrives at Dave Parker's doorstep to find out what this NN pioneer is up to now; and Parker shares a back propagation demonstration program from way back when.

C PROGRAMMING

by Al Stevens
Al's collection of C++ tools continues to grow, as he provides object-oriented versions of standard menus he developed last year with regular C. He also brings you up to date on ANSI C.

STRUCTURED PROGRAMMING

by Jeff Duntemann
Object-oriented programming has introduced more new terms than we'd care to shake a stick at. This month, Jeff sorts out and clears up some of those terms, at least as they apply to Smalltalk, Actor, QuickPascal, and Turbo Pascal.

DEPARTMENTS

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

OF INTEREST

compiled by Janna Custer

Copyright © 1989, Dr. Dobb's Journal


November 1989 - PARALLEL PROCESSING

FEATURES

DATA-FLOW MULTITASKING

by Rabindra P. Kar
The beauty of data-flow architectures, as Robin explains here, is that they let you harness the power of multiple processors to process a stream of data in a sequential algorithm.

A PARALLEL MAKE WITH DESQVIEW

by Mark Streich
Mark uses the DESQview API to develop dvmake, a parallel make that can easily run four tasks at once, and that you can use it to write a real-time tty controller.

CONCURRENT C FOR REAL-TIME PROGRAMMING

by N. H. Gehani and W. D. Roome
Concurrent C is designed to extend C for parallel programming. Here, the designers of the language use it to write a real-time tty controller.

LINKING WHILE THE PROGRAM IS RUNNING

by Andrew Schulman
Andrew explains the hows and whys of run-time dynamic linking under OS/2, and writes a mini C interpreter in the process.

CONTAINER OBJECT TYPES IN TURBO PASCAL

by Anders Hjelsberg
When packaged in library modules, container objects can extend the underlying programming language by adding stacks, queues, trees, dynamic arrays, hash tables, and other such data structures.

EXTENSIBLE HASHING

by Steve Heller
With KRAM--Steve's "keyed random access method" program--you can retrieve any record in a multimegabyte file with a single disk access and any record in any size file with a maximum of two accesses.

EXAMINING ROOM

OPTIMIZING IN A PARALLEL ENVIRONMENT

by Barr E. Bauer
In this month's "Examining Room," Barr explores the parallelization scheme implemented by Silicon Graphics, using a Fortran test program to get to the bottom line of high-performance computing.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine
Mike looks at two early neural net implementations, MINOS II and ADAM I, both of which used analog devices to implement parallel algorithms in largely discrete systems.

C PROGRAMMING

by Al Stevens
Al develops a linked list class for C++ and takes a quick look at what's available in the way of C++ compilers and preprocessors. When it comes to ANSI C, Al finds that some things have changed, while other things never do.

STRUCTURED PROGRAMMING

by Jeff Duntemann
Jeff and his cast of characters examine the subject of polymorphism and how object-oriented Pascal programmers can use it to their advantage.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

compiled by Janna Custer

Copyright © 1989, Dr. Dobb's Journal


December 1989 - OBJECT ORIENTED LANGUAGES

FEATURES

NETWORK GRAPHS IN OBJECT PASCAL

by Steven Kienle
Steve discusses Object Pascal, focusing on how the language implements objects and methods. In the process, he implements a network graph, using objects that can be reused for other applications.

WRITING FILTERS IN AN OBJECT-ORIENTED LANGUAGE

by Marty Franz
Filters come in all shapes and sizes, and writing them is easier with an object-oriented language. Marty shows you how, using Actor as his environment of choice.

A HOME-BREW C++ PARSER

by John M. Dlugosz
The first step to designing your own C++ compiler is to build a good parser. Here's a table-driven parser generator John created, it may be the foundation for a system of your own.

WRITING CORRECT SOFTWARE WITH EIFFEL

by Bertrand Meyer
Eiffel's been described as the only pure object-oriented language currently around. Bertrand developed Eiffel and he discusses how you can use the language to write better software.

THE QUICKPASCAL IN QUICKPASCAL

by Joseph Mouhanna and Michael Vose
Microsoft used QuickPascal itself to write the QuickPascal user interface. Joseph and Mike show you how they did it, and how you can take advantage of some of the same techniques.

AN OBJECT-ORIENTED LOGIC SIMULATOR

by Kenneth E. Ayers
Ken's LogicLab, a simulated bench environment, includes everything from ICs to a logic analyzer--and they're all written in Smalltalk.

ARE THE EMPEROR'S NEW CLOTHES OBJECT ORIENTED?

by Scott Guthery
Scott plays the devil's advocate, asking some tough questions about object-oriented programming while attempting to separate the technological wheat from the marketing chaff.

FUNCTIONAL PROGRAMMING AND FPCA '89

by Ronald Fischer
Proponents of the functional programming paradigm get together every couple of years to examine advances in their craft. They met this year in London, and Ronald was there to report on what happened at the conference, paying particular attention to the Haskell programming language.

EXAMINING ROOM

PDQ: LESS BAGGAGE, FASTER CODE

by Bruce Tonkin
It's no secret that smaller code runs faster and, as Bruce found out, Crescent Software's PDQ really does help QuickBasic code run "pretty darn quick."

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine
OOPSLA '89 was one of this year's most exciting--and importantconferences. Here is Mike's wrap-up.

C PROGRAMMING

by Al Stevens
Al embarks on a new multi-issue project with the development of TEXTSRCH, a document retrieval system, while continuing his review off C++ books and his ANSI update.

STRUCTURED PROGRAMMING

by Jeff Duntemann
GUI development leads Jeff to Microsoft Windows, which in turn steers him to Actor and Smalltalk/V for PM and all of the object-oriented baggage that's associated with these languages.

FORUM

EDITORIAL

by Michael Floyd

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

compiled by Janna Custer

Copyright © 1989, Dr. Dobb's Journal


Special Issue 1989 - 2ND ANNUAL MAC ISSUE

ARTICLES

GUEST EDITORIAL

by Jef Raskin
Jef adds to the history of the Macintosh as we enter what he calls the "megamicro age."

PROGRAMMING WITH COLOR QUICKDRAW

by Chris Derossi
The addition of features -- such as Color QuickDraw -- changed some of the ways Macintosh programmers program. Chris discusses some of these differences, and how new software can continue to coexist with older programs.

AVOIDING INIT COLLISIONS AT BOOT TIME

by John Rosford
John shares an INIT that lets you load a complex set of device drivers without bumping into INITs that are already there.

MEMORY MANAGEMENT WITH MACAPP

by Curt Bianchi
Primarily known for its object-oriented tools, MacApp provides many procedural language services as well. Among those services are the kind of reliable memory management schemes required by powerful Macintosh applications.

VISUAL OBJECT-ORIENTED PROGRAMMING

by Rob Dye
With object-oriented programming environments such as LabView, it's possible to graphically "wire" functions together to create executable programs. Rob discusses how LabView implements OOP mechanisms, how messages are passed, how inheritance is achieved, and how objects are represented.

WRITING MACINTOSH DEVICE DRIVERS

by Bryan Waters
Bryan discusses the Mac's Device Manager then uses Think C 4.0's object-oriented extensions to build a device driver template.

PERSISTENT OBJECTS

by Charles A. Rovira
With "persistent" objects you can write sophisticated database management systems using Smalltalk. Charles shows you what persistent objects are and how to use them.

WIZARDCOPY FOR FAST BACKUPS

by Don Gaspar
If making backups has been slowing you down. Don's WizardCopy sector copying utility will get you back up to speed, copying, 400K, 800K, and 1.44-Mbyte disks in 17 to 45 seconds.

OBJECT C AND THE MACINTOSH CONTROL PANEL

by Bryan Waters
As Bryan shows here, object-oriented tools take the pain out of developing Macintosh resources, particularly control panel devices ("cdevs").

ON BEING OR BECOMING A MACINTOSH DEVELOPER

by Janna Custer
Once you've taken the step to become a Macintosh software developer, Apple is there with a helping hand. Janna outlines the resources Apple provides, and shows you where to find them.

Copyright © 1989, Dr. Dobb's Journal


Special Issue 1989 - C SOURCEBOOK FOR THE 1990'S

ARTICLES

GUEST EDITORIAL

by Scott Robert Ladd

FROM C TO C++: INTERVIEWS WITH DENNIS RITCHIE AND BJARNE STROUSTRUP

by Al Stevens
In these exclusive interviews, AL Stevens talks with language pioneers Dennis Ritchie and Bjarne Stroupstrup about where C and C++ came from and more importantly, where they might be going.

C++ STRING CLASSES

by Scott Robert Ladd
Dynamically allocated string classes can be used to manipulate all kinds of text data. Scott presents a class he's developed and has used with everything from data bases to text editors.

DISCRETE EVENT SIMULATION IN CONCURRENT C

by William Roome and Narain Gehani
The researchers who developed Concurrent C present a program theat models a multistage, multiserver queuing network, in which events in the simulated system happen at discrete times.

C PROGRAMMER'S GUIDE TO C++

by Al Stevens
Al shares with you why he believes the object-oriented paradigm in general and C++ entensions in particular will make life easier for C programmers.

AUTOMATIC MODULE CONTROL REVISITED

by Ron Winters
Back in 1988, DDJ published Stewart Nutter's article on a technique for automatically documenting C programs. In this article, Ron updates Stewart's program in order to maintain more than 117,000 lines of C source code. Not to be outdone, Kevin Poole updates Ron's program for use with VAX VMS and UNIX.

C LIST MANAGER

by Robert Starr
List management gives you a convenient way of creating randomly accessible linked lists with low-staorage overhead. Bob presents a general list management system that will compile and run under operating systems such as MS-DOS and UNIX system V.

DEBUGGING C PROGRAMS

by Bob Edgar
To make the job of program testing and debugging less frustrating, Bob shows how you can extend the "assert()" macro so that it becomes a practical debugging tool.

C CUSTOMIZED MEMORY ALLOCATORS

by Paul Anderson
C's run-time management routines don't always do the job, particularly when it comes to error checking. Paul discusses how customized memory allocators can be used to overcome this problem.

VIEWPOINT: WHAT'S RIGHT WITH C

by David Carew
In the mid-1980's, David wasn't particularly pleased with C, as expressed in a DDJ Viewpoint column entitles "What's Wrong With C." After all these years, we asked David if he'd changed his mind and here's what he had to say.

Copyright © 1989, Dr. Dobb's Journal


January 1990 - REAL TIME AND EMBEDDED SYSTEMS PROGRAMMING

FEATURES

REAL-TIME ANIMATION


by Rahner James Smooth, non-flickering, real-time, EGA animation is a reality with Sprite's driver. Rahner covers animation algorithm design, animation structures, and EGA innards.

REAL-TIME DATA ACQUISITION USING DMA


by Tom Nolan Build your own real-time data acquisition system with the hardware and software tools Tom presents here.

ZEN FOR EMBEDDED SYSTEMS


by Martin Tracy DDJ's Forth expert presents ZEN, a tiny Forth system written entirely in Forth. Programs written in ZEN are ideal for embedded applications and, says Martin, inherently ROM-able.

ERROR MESSAGE MANAGEMENT


by Rohan T. Douglas Automate your error message documentation using the tools that Rohan provides here. Or, for that matter, adapt his technique for on-screen menus, prompts, and dialog boxes.

S-CODER FOR DATA ENCRYPTION


by Robert B. Stout S-CODER is the core of a data encryption engine that can be implemented with virtually any high-level language and can serve as the building block for enhanced security systems.

PARAMETRIC CIRCLES


by Robert Zigon Robert returns to DDJ, this time with an algorithm for efficiently generating circles.

LOCATION IS EVERYTHING!


by Mark R. Nelson A general-purpose "locator" program that matches code and data with target hardware.

ARCHIVES

EXAMINING ROOM

EXAMINING ZORTECH C++ 2.0


by Scott Robert Ladd Scott put Zortech's C++ 2.0 to the challenge of fractal geometry--and liked what he saw.

PROGRAMMER'S WORKBENCH

STALKING GENERAL PROTECTION FAULTS: PART I


by Andrew Schulman In the first installment of this two-part article, contributing editor Andrew Schulman inaugurates a new section in DDJ


by stalking the elusive general protection fault using a variety of developer's tools.

COLUMNS

PROGRAMMING PARADIGMS


by Michael Swaine If your programming palate has been hungry for a taste of Lisp, Mike's monthly menu should fill the bill.

C PROGRAMMING


by Al Stevens Al continues with his text data base indexing and retrieval project, this month adding the expression interpreter. He then reflects upon OOPSLA '89, how teachers teach C, and recommends a recent book for C programmers.

STRUCTURED PROGRAMMING


by Jeff Duntemann Jeff bounces around some myths put out


by object-oriented hypesters, pointing out that what you read isn't necessarily what you get, before returning to his discussion of polymorphism with Turbo Pascal and QuickPascal.

FORUM

EDITORIAL


by Jonathan Erickson

LETTERS


by you

SWAINE'S FLAMES


by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST


compiled by Janna Custer


February 1990 - WINDOWING SYSTEMS

FEATURES

MANAGING MULTIPLE DATA SEGMENTS UNDER MICROSOFT WINDOWS: PART I


by Tim Peterson and Steve Flenniken In the first installment of this two-part article, Tim and Steve present a segment table technique that helps you cope with MS Windows' "memory movement" phenomenon.

THREE-DIMENSIONAL GRAPHICS USING THE X WINDOW SYSTEM


by Michael Stroyan 3-D graphics are possible with X Window systems even though most toolkits don't provide much support for creating them. Michael shares his experiences with porting 3-D graphics to X, and provides you with solutions to some thorny problems.

PICK-A-NUMBER INTERFACES


by Bob Canup Sometimes trailing-edge technology provides the right tool for the right job. Bob states his case for when you might "pick-a-number" interfaces rather than cutting-edge windowing interfaces.

SELF-ADJUSTING DATA STRUCTURES


by Andrew M. Liao Self-adjusting heuristic algorithms are ideal for lists, binary search trees, and heaps. Andrew explains what they are, and how you can use them.

MULTIPLEXING ERROR CODES


by William J. McMahon It's possible to detect unexpected errors


by using function communication techniques such as the one Bill presents here.

PROGRAMMING RISC ENGINES


by Neal Margulis Neal uses Intel's i860 to illustrate how programmers can take advantage of pipelined execution, while Hal Hardenbergh adds his thoughts on RISC vs. CISC.

EXAMINING ROOM

C_TALK/VIEWS


by Noel Bergman In this month's "Examining Room," Noel checks up on C_talk/Views from CNS, focusing on the Browser, Streamliner, Interface Generator, and MVC.

PROGRAMMER'S WORKBENCH

STALKING GENERAL PROTECTION FAULTS: PART II


by Andrew Schulman Andrew continues his hunt for GP faults, this month using 32-bit C compilers and Phar Lap's 386 DOS Extender. He then returns to 16-bit land to see how GP faults can be caught under OS/2.

COLUMNS

PROGRAMMING PARADIGMS


by Michael Swaine This month Mike resumes his examination of Lisp, taking a look at Lisp's representation scheme and the wide range of data structures supported


by the Common Lisp standard.

C PROGRAMMING


by Al Stevens Al continues TEXTSRCH, his text retrieval systems that provides a concordance-like index into a text data base that uses two general-purpose functions--parsing the command line and binary trees--you might find useful in other projects.

STRUCTURED PROGRAMMING


by Jeff Duntemann Jeff takes time to reflect on The Quake of '89 before moving on to Arizona and Modula-2.

DEPARTMENTS

EDITORIAL


by Jonathan Erickson

LETTERS


by you

SWAINE'S FLAMES


by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST


compiled by Janna Custer


March 1990 - ASSEMBLY LANGUAGE PROGRAMMING

FEATURES

ASSEMBLY LANGUAGE LIVES!


by Michael Abrash Assembly language isn't the be-all and end-all of PC programming, but as Michael states, it's sometimes the only game in town when performance or program size are important.

ASSEMBLY LANGUAGE TRICKS OF THE TRADE


by Tim Paterson Every programmer collects a personal bag of programming tricks. Tim's has been 13 years in the making, and he shares some of his favorites with you.

68040 PROGRAMMING


by Stephen Satchell The newest member of the 680x0 family provides some challenges for programmers at all levels, particularly when it comes to caching.

HOMEGROWN DEBUGGING--386 STYLE


by Al Williams Use the 80386's hardware to debug your programs


by including Al's assembly language code to establish breakpoints.

MANAGING MULTIPLE DATA SEGMENTS UNDER MICROSOFT WINDOWS: PART II


by Tim Paterson and Steve Flenniken Last month, Tim and Steve presented a method for managing multiple data segments under MS WIndows using the segment table. This month, they provide a sample Windows program that puts the segment library to work.

OBJECT-ORIENTED PROGRAMMING WITH ASSEMBLY LANGUAGE


by Randall Hyde Randy makes a case that the object-oriented paradigm isn't completely the domain of high-level programming languages. He believes that OOP techniques can be applied, and are worth considering for ASM projects too.

EXAMINING ROOM

INSIDE WATCOM C 7.0/386


by Andrew Schulman Andrew suspects that Watcom's C 7.0/386 has launched the opening salvos in a 32-bit 386 development tool war. He also looks at how Novell has implemented the compiler for its C Network Compiler/386.

PROGRAMMER'S WORKBENCH

MIXED-LANGUAGE PROGRAMMING WITH ASM


by Karl Wright and Rick Schell As Karl and Rick point out, it's not only practical but often advisable to mix languages and memory models in order to achieve the best results. Assembly language is a vital part of this mix.

COLUMNS

PROGRAMMING PARADIGMS


by Michael Swaine Lisp has been codified, gentrified, and now objectified. Michael looks at how the Common Lisp data-type system underlies the object system, and how Lisp functions have been extended to the object world.

C PROGRAMMING


by Al Stevens TEXTSRCH, Al's text retrieval project, continues to grow. Now you can select and view one of the files from within the TEXTSRCH program itself. He then uses this feature to explore the CURSES function library.

STRUCTURED PROGRAMMING


by Jeff Duntemann There really were some neat ideas at last fall's Comdex, you just had to search them out. Jeff describes the jewels he discovered, then delves into sets in Modula-2.

DEPARTMENTS

EDITORIAL


by Jonathan Erickson

LETTERS


by you

SWAINE'S FLAMES


by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST


compiled by Janna Custer


April 1990 - NEURAL NETS NOW!

FEATURES

BIDIRECTIONAL ASSOCIATIVE MEMORY SYSTEMS IN C++


by Adam Blum Bidirectional associative memory is a neural net model that may solve the content-addressability problem. Adam implements BAM systems using C++, discovering that object-oriented languages go hand-in-glove with neural net development.

A NEURAL NETWORK INSTANTIATION ENVIRONMENT


by Andrew J. Czuchy Jr. Developing useful and efficient network architectures requires a simple, yet flexible environment. Andy presents an environment that dynamically creates neural networks.

UNTANGLING NEURAL NETS


by Jeanette "Jet" Lawrence With more than 40 functioning neural net models to choose from, it is important to understand their similarities and differences.

IMPLEMENTING THE RHEALSTONE REAL-TIME BENCHMARK


by Rabindra P. Kar It's been over a year since DDJ first introduced the Rhealstone, a set of benchmarking operations for real-time multitasking systems. Robin presents the "refined" definition, along with a suite of C programs to implement the benchmark.

BOUNDING BOX DATA COMPRESSION


by Glenn Searfoss The "bounding box" method of data compression is fast and efficient for bit mapped data. Glenn describes this technique and compares it to the better-known RLE.

VESA VGA BIOS EXTENSIONS


by Bo Ericcson The VESA VGA BIOS extensions make it possible to write generic graphics software that tap into the powerful capabilities of Super VGA.

EXAMINING ROOM

CRUISING WITH TOPSPEED


by Alex Lane TopSpeed C launches JPI into the C arena. Alex puts the package under the Doctor's microscope, paying special attention to the C Techkit, and has some fun in the process.

PROGRAMMER'S WORKBENCH

NEURAL NETWORKS AND IMAGE PROCESSING


by Casimir C. "Casey" Klimasaukas Casey explores different approaches to edge enhancement systems, first using C, then using an off-the-shelf, two-dimensional array engine called Lotus 1-2-3.

COLUMNS

PROGRAMMING PARADIGMS


by Michael Swaine SD '90 brought a little of everything, from serious talk about new paradigms to hype about new products. Here's Mike's report on the year's most important programming conference.

C PROGRAMMING


by Al Stevens Al starts to sort things out with CSORT, a sorting facility that you can use from within your programs or from the command line.

STRUCTURED PROGRAMMING


by Jeff Duntemann The time has come for a time-and-date stamp object. Jeff develops one using Turbo Pascal, after mulling over Xerox's suit against Apple.

DEPARTMENTS

EDITORIAL


by Jonathan Erickson

LETTERS


by you

SWAINE'S FLAMES


by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST


compiled by Janna Custer


May 1990 - MEMORY MANAGEMENT

FEATURES

GENERATION SCAVENGING


by Frank Jackson The generation scavenging algorithm is an efficient portable garbage collector that does not require special support.

DYNAMIC LINK LIBRARIES FOR DOS


by Gary Syck DLLs provide an easy way to run large programs in small memory spaces and Gary shows how you can add DLL facilities to DOS programs.

GETTING A HANDLE ON VIRTUAL MEMORY


by Walter Bright "Handle pointers" let you extend available memory space


by dynamically allocating data. Walter discusses handles and how you can take advantage of them.

OBJECT SWAPPING


by Jan Bottorff and Jim Bolland For object-oriented environments, "object-swapping" picks up where virtual memory systems leave off.

A MEMORY CONTROLLER


by Robert A. Moeser Rob presents a set of memory management routines that can be used as extensions to your library's malloc and free routines.

DEMYSTIFYING 16-BIT VGA


by Michael Abrash Michael clears up misconceptions about 16-bit VGA and explains why programmers need not treat 8- and 16-bit VGAs differently.

EXAMINING ROOM

MULTIPROCESSING WITH SMALLTALK/V


by Kenneth E. Ayers Find out what's in store for Ken as he adds multiprocessing capabilities to Smalltalk/V, using the CX Multiprocessing Kit to build a simulated supermarket.

ENCAPSULATING C++ BOOKS


by Andrew Schulman Books on C++ are cropping up all over the place and Andrew has read a lot of them. Here are a few of his favorites.

PROGRAMMER'S WORKBENCH

ACCESSING HARDWARE FROM 80386 PROTECTED MODE: PART I


by Stephen Fried Stephen kicks off a two-part discussion of the 80386


by examining topics such as tiling, the huge model, and the use of far pointers to address up to 64 terabytes of memory.

COLUMNS

PROGRAMMING PARADIGMS


by Michael Swaine Michael copes with the chaos of complex systems.

C PROGRAMMING


by Al Stevens While many programmers are wondering about moving from C to C++, Al takes the curious step of moving from C++ to C.

STRUCTURED PROGRAMMING


by Jeff Duntemann Jeff poses some sharp questions about cutting edges, explores object hierarchies, and examines the Object Professional Library from Turbo Power Software.

DEPARTMENTS

EDITORIAL


by Jonathan Erickson

LETTERS


by you

SWAINE'S FLAMES


by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST


compiled by Janna Custer


June 1990 - HYPERTEXT

FEATURES

THE DDJ HYPERTEXT PROJECT


by Scott Johnson A behind-the-scenes look at the DDJ hypertext project


by the programmer who put it together.

BUILDING A HYPERTEXT SYSTEM


by Rick Gessner Rick uses Turbo Pascal to build a page-oriented, text-only hypertext system that has embedded "hot-links." His system includes both a screen editor and a hypertext engine.

A SELF-REFERENTIAL HYPERTEXT ENGINE


by Todd King Here's another approach to hypertext systems. This one, written in C, is ideal for context-sensitive help or source-code documentation projects.

BUILDING AN EFFICIENT HELP SYSTEM


by Leo Notenboom and Michael Vose Knowing how help files and a hypertext engine interact is central to effective on-screen documentation.

C++ FILE OBJECTS


by Kevin Weeks The key to efficient programming using object-oriented languages is having a good base class.

A PIXEL ORDERING ALGORITHM


by Norton T. Allen Recognizing the general character of an image early in the display process lets you begin fine-tuning much sooner.

LZW REVISITED


by Shawn M. Regan Shawn enhances this popular data compression algorithm.

EXAMINING ROOM

EXAMINING INSTANT-C


by Andrew Schulman An interactive environment such as Rational Systems' Instant-C takes a lot of the pain out of 80386 protected-mode programming.

PROGRAMMER'S WORKBENCH

ACCESSING HARDWARE FROM 80386 PROTECTED MODE: PART II


by Stephen Fried Steve argues that only use of FAR pointers in 80386 code is in operating system kernels. To make his point, he examines ports and interrupts.

COLUMNS

PROGRAMMING PARADIGMS


by Michael Swaine Michael shares different techniques for adding text links to HyperCard.

C PROGRAMMING


by Al Stevens Al develops an indexing technique that is a loose adaptation of B-tree.

STRUCTURED PROGRAMMING


by Jeff Duntemann Heap Fragmentation, and how to manage it in Pascal and Modula-2, are Jeff's topics this month.

DEPARTMENTS

EDITORIAL


by Jonathan Erickson

LETTERS


by you

SWAINE'S FLAMES


by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST


compiled by Janna Custer


July 1990 - GRAPHICS PROGRAMMING

FEATURES

SUPER VGA PROGRAMMING


by Christopher A. Howard Chris presents a VGA chip-set detection method, including functions for addressing video memory and displaying pixels at specified locations.

CIRCLES AND THE DIGITAL DIFFERENTIAL ANALYZER


by Tim Paterson The digital differential analyzer, which uses unscaled integers for drawing straight lines and circles, belongs in every graphics library.

IMPROVING LINE SEGMENT CLIPPING


by Victor J. Duvanenko, W. E. Robbins, and Ronald S. Gyurcsik Today's windowing systems demand high-performance line-clipping techniques. Our authors show how to squeeze more performance from the classic Cohen-Sutherland line-clipping algorithm.

DRAWING CHARACTER SHAPES WITH BEZIER CURVES


by Todd King Todd examines and implements Bezier curves


by using the literal rendering technique and the deCastejau method.

INFORMATION MODELS, VIEWS, AND CONTROLLERS


by Adele Goldberg Smalltalk's Model-View-Controller architecture was built with user interface design in mind.

PROGRAMMER'S WORKBENCH

DOS + 386 = 4 GIGABYTES!


by Al Williams It really is possible to access the entire 80386 address space in real mode when you use the techniques Al presents here.

EXAMINING ROOM

THE POWER IN POWERBASIC


by Bruce Tonkin Can a leopard change its spots? Bruce finds out


by examining Spectra's PowerBasic, previously known as Borland's TurboBasic.

COLUMNS

PROGRAMMING PARADIGMS


by Michael Swaine Michael reports on MacWorld Expo, raises questions about Glasnost programming, and ruminates on recent issues in chaos theory, fractals, and neural networks.

C PROGRAMMING


by Al Stevens Al takes an early look at Turbo C++, a second look at ANSI C token pasting, and an in-depth look at hotkeys.

STRUCTURED PROGRAMMING


by Jeff Duntemann It's one darn thing after another as Jeff tackles object design and multiple inheritance.

DEPARTMENTS

EDITORIAL


by Jonathan Erickson

LETTERS


by you

SWAINE'S FLAMES


by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST


compiled by Janna Custer


August 1990 - C PROGRAMMING

FEATURES

PORTING C PROGRAMS TO 80386 PROTECTED MODE


by William F. Dudley Jr. Bill shares his experiences and suggestions for porting large C programs to 80386 protected mode.

ENCAPSULATING C MEMORY ALLOCATION


by Jim Schimandle Encapsulating memory routines gives you control over memory allocation. Jim presents a memory shell that does this.

AWK AS A C CODE GENERATOR


by Wahhab Baldwin When you need to perform tasks such as converting data from one format to another--and generate C code in the process--AWK may be the tool for you.

IMPLEMENTING BICUBIC SPLINES


by Raymond G. Lauzzana and Denise E. M. Penrose Raymond and Denise mix and match C and Lisp to generate a spline function that uses the Macintosh Toolbox to draw a smooth curve.

EXTENDING PRINTF( )


by Jim Mischel Here's an easy-to-use variation on printf( ) that utilizes variable arguments so you can output formatted numbers.

PARALLEL EXTENSIONS TO C


by Graham K. Ellis Ken discusses concurrency functions for parallel C compilers and describes how to build transputer-based parallel systems.

DEBUGGING MEMORY ALLOCATION ERRORS


by Lawrence D. Spencer Larry tackles C memory allocation using functions that serve as a bookkeeping layer between programs.

HANDLING OS/2 ERROR CODES


by Nico Mark Here's how to squeeze more information out of OS/2's cryptic error messages.

EXAMINING ROOM

OPTIMIZING WITH MICROSOFT C 6.0


by Scott Robert Ladd Scott examines the most recent version of Microsoft's C compiler, focusing on global optimization, while Bruce Schatzman provides additional comments on based pointers.

PROGRAMMER'S WORKBENCH

COLLECTIONS IN TURBO C++


by Bruce Eckel Collections are classes that hold a number of object types. Bruce uses Borland's Turbo C++ to create this class and analyzes the C++ 2.0 specification.

COLUMNS

PROGRAMMING PARADIGMS


by Michael Swaine What do Windows 3.0, Hypercard 2.0, and Norman Mailer 1.0 have in common? Michael ponders this and other questions.

C PROGRAMMING


by Al Stevens Al mulls over C's past and future before exploring the NetWare programming environment.

STRUCTURED PROGRAMMING


by Jeff Duntemann Jeff creates a Turbo Pascal object to solve a recent data-entry problem.

DEPARTMENTS

EDITORIAL


by Jonathan Erickson

LETTERS


by you

SWAINE'S FLAMES


by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST


compiled by Janna Custer


September 1990 - STRUCTURED LANGUAGES

FEATURES

MAKING THE MOVE TO MODULA-2


by J. V. Auping and J. C. Johnston Modula-2's modular structure is ideal for team programming projects and for creating efficient, reusable code.

PORTING FORTRAN PROGRAMS FROM MINIS TO PCS


by John L. Bradberry Moving large-scale software projects from minicomputers to powerful PCs requires you to think about compilers, programming techniques, and ANSI standards.

PERSISTENT OBJECTS IN TURBO PASCAL


by Scott Robert Ladd Persistent objects are useful for restoring the state of objects within a program from one run to the next; Scott shows how to implement them in Turbo Pascal.

FAST SEARCH


by Leon Campise Leon's FASTSRCH program lets you access data files quickly without resorting to sophisticated linked lists or database engines.

A GENERIC ONE-PASS ASSEMBLER


by William E. Ives Roll your own assembler using the symbol-management techniques Bill presents here.

RAY TRACING


by Daniel Lyke Dan opens the door to the world of realistic, computer-rendered 3-D images, implementing his algorithms in C and C++.

EXAMINING ROOM

INSIDE OBJECT PROFESSIONAL


by Gary Entsminger Gary takes a look at Turbo Power's Object Professional, an object-oriented library for Turbo Pascal.

PROGRAMMER'S WORKBENCH

KERMIT FOR OS/2: PART I


by Brian R. Anderson In last year's "Structured Languages" issue, Brian presented an implementation of the Kermit communications protocol for DOS. In this two- part article, he moves the protocol from DOS to OS/2 and from Logitech to Stony Brook Modula-2.

COLUMNS

PROGRAMMING PARADIGMS


by Michael Swaine Looking for a new product niche? Is gardening your favorite pastime (outside of programming, of course)? If "yes, yes" is your answer, Michael may have the idea you've been waiting for.

C PROGRAMMING


by Al Stevens Al comes in from the cold to discuss hacks, spooks, and data encryption techniques.

STRUCTURED PROGRAMMING


by Jeff Duntemann Jeff discovers that multi-language development can be done in bits and pieces.

PROGRAMMER'S BOOKSHELF


by Andrew Schulman In launching this new column, Andrew takes a look at Microprocessors: A Programmer's View from a programmer's perspective.

DEPARTMENTS

EDITORIAL


by Jonathan Erickson

LETTERS


by you

SWAINE'S FLAMES


by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST


compiled by Janna Custer


October 1990 - OPERATING SYSTEMS

FEATURES

ROLL YOUR OWN DOS EXTENDER: PART I


by Al Williams In his first installment of a two-part article, Al shares a DOS extender called PROT and takes a look at protected-mode programming.

OPENING OS/2'S BACKDOOR


by Andrew Schulman The good news is that protected-mode OS/2 prevents task clashes


by taking control of memory. The bad news is this makes it hard to perform memory-mapped I/O and write diagnostic tools. Andrew's generic device driver helps solve these problems.

CLOSING DOS'S BACKDOOR


by John Switzer Accessing DOS without going through the INT21 function handler can have serious repercussions. John shows how to close the vulnerable backdoors.

RAM DISK DRIVER FOR UNIX


by Jeff Reagen Jeff's RAM disk lets you more efficiently manage /tmp files, reduce overhead associated with file loading, and increase performance


by using RAM as a primary swap device.

OPTIMAL DETERMINATION OF OBJECT EXTENTS


by Victor J. Duvanenko, Ronald S. Gyurcsik, and W. E. Robbins Here's an algorithm for efficiently determining the minimum and maximum reaches of 2-D and 3-D graphical objects.

IMPLEMENTING CORDIC ALGORITHMS


by Pitts Jarvis CORDIC (COordinate, Rotation, DIgital Computer) algorithms let you use one core routine to compute sines, cosines, exponentials, logarithms, and other transcendentals.

EXAMINING ROOM

UNRAVELING OPTIMIZATION IN MICROSOFT C 6.0


by Bruce D. Schatzman Bruce investigates the practical and theoretical aspects of code optimization, using Microsoft C 6.0 as his example platform.

PROGRAMMER'S WORKBENCH

KERMIT FOR OS/2: PART II


by Brian R. Anderson While wrapping up his Kermit port, Brian examines the communications capabilities of OS/2, along with low-level screen and video I/O.

COLUMNS

PROGRAMMING PARADIGMS


by Michael Swaine Michael reports on the recent MacWorld conference, focusing on System 7 developers and developments.

C PROGRAMMING


by Al Stevens Al catches up on his correspondence and follows up on his token-pasting.

STRUCTURED PROGRAMMING


by Jeff Duntemann Jeff returns to Zeller's Congruence before peering through the open window of Windows 3.0.

PROGRAMMER'S BOOKSHELF


by Ray Duncan Do software aficionados need to know about computer architectures? "Yes." says Ray, and the recently published Computer Architecture is a good place to start.

DEPARTMENTS

EDITORIAL


by Jonathan Erickson

LETTERS


by you

SWAINE'S FLAMES


by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST


compiled by Janna Custer


November 1990 - OBJECT ORIENTED LANGUAGE

FEATURES

ROLL YOUR OWN OBJECT-ORIENTED LANGUAGE


by Michael Floyd Mike defines, designs, and implements an object-oriented language that you can wrap around your code.

AN EXISTENTIAL DICTIONARY


by Edwin T. Floyd You can avoid the overhead of conventional search techniques


by recording the existence of a key--without storing the key itself.

OBJECT-ORIENTED DEBUGGING


by Simon Tooke Simon examines strategies and tools for object-oriented debugging, using C++ as an example.

CTRACE: A MESSAGE LOGGING CLASS


by William D. Cramer Augment your Macintosh development environment with this general-purpose message logging window that provides basic printf( ) capabilities.

SOFTWARE PATENTS


by the League for Programming Freedom Will software patents kill innovation in the software development field? Here's one view.

ROLL YOUR OWN DOS EXTENDER: PART II


by Al Williams Al covers debugging and 80386 exceptions and takes you under his DOS extender's hood.

THE MVC PARADIGM IN SMALLTALK/V


by Kenneth E. Ayers In Smalltalk/V, MVC is spelled OPD. Ken examines both the Model-View-Controller and the Object-Pane-Dispatcher.

EXAMINING ROOM

PROGRAMMER TOOLS FOR ACTOR 3.0


by Marty Franz The Windows 3.0 surge spurred Marty to take a look at Actor 3.0 and two of its support tools--WinTrieve and the Whitewater Resource Toolkit.

PROGRAMMER'S WORKBENCH

WINDOWS 3.0 APPLICATION DEVELOPMENT


by Walter Knowles Developing sophisticated Windows 3.0 applications requires a variety of tools. Walt uses Toolbook, db_VISTA, and a C compiler to build a checkbook accounting application.

COLUMNS

PROGRAMMING PARADIGMS


by Michael Swaine Michael the New Connectionism, an emerging movement in cognitive and computer science that involves both neural nets and parallel distributed processing.

C PROGRAMMING


by Al Stevens Al returns to the data encryption algorithms and the DES discussion began in September.

STRUCTURED PROGRAMMING


by Jeff Duntemann Is it Turbo Pascal's modulus operator that's been giving Jeff's day-of-the-week function fits? What would Zeller have to say about that!

PROGRAMMER'S BOOKSHELF


by Andrew Schulman Andrew looks at two books


by object-oriented pioneers-- Object-Oriented Design with Applications by Grady Booch and the Object-Oriented Software Construction by Bertrand Meyer.

DEPARTMENTS

EDITORIAL


by Jonathan Erickson

LETTERS


by you

SWAINE'S FLAMES


by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST


compiled by Janna Custer


December 1990 - COMMUNICATIONS AND CONNECTIVITY

FEATURES

CONTROLLING BACKGROUND PROCESSES UNDER UNIX


by Barr E. Bauer This system, chiefly written in Bourne shell script, "user-izes" the management of background processes that run locally and across a network.

DESIGNING AN OSI TEST BED


by Kenneth L. Crocker and Michael T. Thompson Ken and Michael discuss the synchronous communications device drivers that play a key part in the Open Systems Interconnection (OSI) test bed they helped design and implement.

THE MACINTOSH COMMUNICATIONS TOOLBOX


by Don Gaspar Apple's Communications Toolbox includes connection, terminal, and file transfer managers for constructing dynamic communications applications.

ALGEBRAIC CODES FOR ERROR DETECTION AND CORRECTION


by Hsi-Chiu Liu One of the most efficient methods of error detection and correction is algebraic coding, which requires only a minimal amount of bit redundancy in forming code words.

SUPERCHARGING SEQUENTIAL SEARCHES


by Walter Williams Here's a simple algorithm that can speed up a sequential search


by a factor of two or more.

EXAMINING ROOM

EXAMINING THE ZINC INTERFACE LIBRARY


by Gary Entsminger The Zinc Interface Library is a C++ class library for constructing graphics- and text-application interfaces.

PROGRAMMER'S WORKBENCH

A DATABASE SYSTEM FOR AUTOMATING E-MAIL


by Chris Olsen Chris presents a message storage and retrieval system for electronic mail built around Borland's Paradox database engine.

COLUMNS

PROGRAMMING PARADIGMS


by Michael Swaine Michael wraps up loose ends that have come unraveled over the past year.

C PROGRAMMING


by Al Stevens Al examines, updates, and balances a B-tree he first presented last spring.

STRUCTURED PROGRAMMING


by Jeff Duntemann Who knows what evil lurks behind those traditional menu-tree applications? Event-driven architectures may mean you don't even have to ask the question.

PROGRAMMER'S BOOKSHELF


by Ray Duncan If you're starting up or restructuring your business, Ray recommends a small, but important, book called Peopleware.

DEPARTMENTS

EDITORIAL


by Jonathan Erickson

LETTERS


by you

SWAINE'S FLAMES


by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST


compiled by Janna Custer


January 1991 - BLUEPRINTS FOR SOFTWARE DESIGN

FEATURES

PORTING UNIX TO THE 386: A PRACTICAL APPROACH
by William Frederick Jolitz and Lynne Greer Jolitz

In this first installment of a multipart series, Bill and Lynne define the design specification for 386BSD -- Berkeley UNIX for the 80386.

DESIGNING PLAN 9
by Rob Pike, Dave Presotto, Ken Thompson, and Howard Trickey

Contrary to what you might expect, tomorrow's distributed computer systems may look a lot like Plan 9.

A SOFTWARE DESIGN MANIFESTO
by Mitchell Kapor

Mitch states his case for getting serious about software design.

DESIGNING A PORTABLE GUI TOOLKIT
by Robert T. Nicholson

Developing a user-interface toolkit for multiple platforms poses unique challenges.

DESIGNING A WRITE-ONCE FILE SYSTEM
by Simson Garfinkel

Here's one approach to designing a write-once storage system for optical storage technology.

GRAPH DECOMPOSITION
by Edward Allburn

This algorithm provides an efficient method of determining vertex connections.

WINTHERE
by Ben Myers

Making programs Windows 3 aware.

ANNIVERSARY SPECIAL

WE, THE PEOPLE, IN THE INFORMATION AGE
by Jim Warren

DDJ's founding editor reflects on the early days of the computer industry before turning his eye to the future.

FIRE IN THE VALLEY REVISITED
by Michael Swaine

Michael picks up where he left off in Fire in the Valley, his landmark history of the personal computer industry.

THE CHANGING LANDSCAPE OF SOFTWARE DEVELOPMENT
by Ray Valdes, Michael Floyd, and Jonathon Erickson

DDJ's editors look at emerging trends that may affect the way programmers approach their craft in the future.

EXAMINING ROOM

EXAMINING THE HAMILTON C SHELL
by Scott Richman

Doug Hamilton's C Shell helps you create more powerful OS/2 programs.

PROGRAMMER'S WORKBENCH

MAKING A CASE FOR SOFTWARE DESIGN
by Michael Hagerty

The software design process is often made easier with CASE tools.

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

Michael boldly crosses the electronic frontier.

C PROGRAMMING
by Al Stevens

Al looks back on 15 years of C coverage in DDJ.

STRUCTURED PROGRAMMING
by Jeff Duntemann

Among other topics, Jeff explores access rights in Turbo Pascal 6.0.

PROGRAMMER'S BOOKSHELF
by Andrew Schulman

Andrew examines the connections among three network programming books.

DEPARTMENTS

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Janna Custer

Copyright © 1991, Dr. Dobb's Journal


February 1991 - POWERFUL DATA COMPRESSION ENGINES

FEATURES

ARITHMETIC CODING AND STATISTICAL MODELING
by Mark R. Nelson

You can achieve impressive compression ratios by combining arithmetic coding with powerful modeling techniques.

ENTROPY
by Kas Thomas

Understanding entropy is key to understanding data compression.

DIFFERENTIAL IMAGE COMPRESSION
by John Bridges

DFF keeps track of the differences between images rather than the images themselves.

THE DDJ DATA COMPRESSION CONTEST

Here's your chance to prove that your favorite compression technique is better than that of your fellow programmers.

PORTING UNIX TO THE 386:THREE INITIAL PC UTILITIES
by William Frederick Jolitz and Lynne Greer Jolitz

Utilities to let you execute GCC-compiled programs in protected mode from MS-DOS, and copy files to a shared portion of disk so MS-DOS and Unix can exchange information.

SCREEN CAPTURING FOR WINDOWS
3.0 by Jim Conger

This utility helps you get your foot in the Window 3.0 programming door.

EMBEDDED SYSTEMS SPECIAL

REMOTE CONNECTIVITY FOR PORTABLE TERMINALS: PART I
by Dan Troy

Dan takes you through the steps his team experienced when they designed an 8051-based touchscreen terminal.

LOOKING INTO THE FUTURE OF MICROPROCESSORS
by Ray Duncan

The most recent Microprocessors Forum gives Ray - and you - a look into what's around the corner in terms of microprocessors and microcontollers.

OPTIMIZING INTEGER DIVISION BY A CONSTANT DIVISOR
by Robert D. Grappel

Speed up slow processors by decomposing a division by a constant divisor into a simple sequences of additions, subtractions and shifts.

EXAMINING ROOM

YACC FOR EXPERT SYSTEMS
by Todd King

Todd uses MKS YACC to build a portable expert system.

PROGRAMMER'S WORKBENCH

INTRINSICS OF THE X TOOLKIT
by Todd Lainhart

Programmers can configure the Intrinsics toolkit so that X Window users can personalize computing environments.

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

Reading and thinking about van Gasteren's On the Shape of Mathematical Arguments is a task every programmer should shoulder.

C PROGRAMMING
by Al Stevens

After catching up on recent events, Al examines the Huffman data compression algorithm.

STRUCTURED PROGRAMMING
by Jeff Duntemann

Jeff ponders the imponderable, starting with software design.

GRAPHICS PROGRAMMING
by Michael Abrash

Our newest columnist launches his column by developing routines to draw filled polygons.

PROGRAMMER'S BOOKSHELF
by Ray Duncan

The use and abuse of fonts and typography leads Ray to Digital Typography.

DEPARTMENTS

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Janna Custer

Copyright © 1991, Dr. Dobb's Journal


March 1991 - ASSEMBLY LANGUAGE PROGRAMMING

FEATURES

80X86 OPTIMIZATION
by Michael Abrash

Optimizations that work with one member of the 80x86 family sometimes aren't efficient with one another. Michael shares his optimization rules for achieving maximum performance--no matter which 80x86 CPU you're programming.

ASSEMBLY LANGUAGE MACROS
by Ken Skier

Assembly language macros make code more readable without sacrificing the traditional assembly language benefits of small code size and top performance.

PORTING UNIX TO THE 386: THE STANDALONE SYSTEM
by William Frederick Jolitz and Lynne Greer Jolitz

Using their protected mode program loader, Bill and Lynne create a minimal 80386 protected mode standalone C programming environment for operating systems kernel development.

SPEEDY BUFFERING
by Bruce Tonkin

Here's a technique for speeding up disk access for many applications without buying faster, more expensive hardware.

REMOTE CONNECTIVITY FOR PORTABLE TERMINALS: PART II
by Dan Troy

Dan discusses the development of an application that emulates a VT100 terminal using just about every feature of a touch-sensitive display.

EXAMINING ROOM

THE MEWEL WINDOW SYSTEM
by Al Stevens

Mewel is a text-based library that supports SAA/CUA compliant windows, menus, and data entry templates. And its nearly source compatible with the Windows 3.0 API.

PROGRAMMER'S WORKBENCH

NETWORKING WITH WINDOWS 3.0
by Mike Klein

Mike develops a network message sending utility using Microsoft C 6.0, the Windows 3.0 SDK , and Novell's NetWare C Interface.

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

Michael interviews computer pioneer Bill Duvall who is back in the Valley again, directing future HyperCard development.

C PROGRAMMING
by Al Stevens

Al explores event-driven programming, developing along the way drivers for the mouse, keyboard, and screen.

STRUCTURED PROGRAMMING
by Jeff Duntemann

Jeff wonders what came first--the rubber chicken or the UART?

GRAPHICS PROGRAMMING
by Michael Abrash

Last month's code for filling convex polygons is optimized using--you guessed it--assembly language.

PROGRAMMER'S BOOKSHELF
by Andrew Schulman

Three assembly language-related books--Zen of Assembly Language, Structured Computer Organization, and 80x86 Architecture and Programming--are the focus of this month's column.

DEPARTMENTS

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Janna Custer

Copyright © 1991, Dr. Dobb's Journal


April 1991 - FRONTIERS OF BIOCOMPUTING

FEATURES

NEURAL NETS TELL WHY
by Casimir C. "Casey" Klimasauskas

Sensitivity analysis helps explain a neural network's "thinking" process.

GENETIC ALGORITHMS
by Mike Morrow

To solve problems, genetic algorithms analyze feedback from repeated attempts at a solution.

PORTING UNIX TO THE 386: LANGUAGE TOOLS CROSS SUPPORT
by William Frederick Jolitz and Lynne Greer Jolitz

Bill and Lynne describe "cross" mode operations as they work towards bootstrapping 386BSD.

WHAT IS BIOCOMPUTING?
by Ray Valdes

BioComputing may be one way to push the envelope of program complexity.

EMBEDDED SYSTEMS

UNDERSTANDING THE GPIB
by Don Morgan

The IEEE 488 bus is ideal for embedded and engineering/scientific applications.

COOPERATIVE MULTITASKING AND C++
by Marc Tarpenning

Get the benefits of multitasking operating systems without the complexities.

EXAMINING ROOM

EXAMINING THE MICROSOFT MAIL SDK
by Bruce D. Schatzman

The APIs in Microsoft Mail for the Macintosh let you implement network applications without hassling with low-level communications programming.

PROGRAMMER'S WORKBENCH

FRACTALS IN THE REAL WORLD
by Dick Oliver

Generate fractal images using this "fractal template" drawing tool.

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

Michael interviews computer visionary Ted Nelson

C PROGRAMMING
by Al Stevens

Last month's screen grabber becomes this month's TSR.

STRUCTURED PROGRAMMING
by Jeff Duntemann

Jeff presents his prescription for portable design.

GRAPHICS PROGRAMMING
by Michael Abrash

Will Edsun's CEG/DAC be as important to PC graphics as Super VGA?

PROGRAMMER'S BOOKSHELF
by Ray Duncan

Good design principles are needed for everything from software to soapboxes.

DEPARTMENTS

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Jana Custer

Copyright © 1991, Dr. Dobb's Journal


May19:91 - PROGRAMMING WITH COPROCESSORS

FEATURES

A COPROCESSOR FOR A COPROCESSOR
by Warren Davis and Kan Yabumoto

When fast graphics aren't fast enough, the TL 34020 graphics coprocessor employs its own coprocessor--the 34082 FPU--for even higher system performance.

ADDING THE POWER OF DSP TO YOUR APPLICATIONS
by Jim Bittman

Jim implements the Fast Fourier Transform to show that when it comes to speed, digital signal processing can make a difference.

GETTING NUMERIC COPROCESSORS UP TO SPEED
by John H. Letcher

Memory-mapped math coprocessors can boost performance without sacrificing compatibility.

PORTING UNIX TO THE 386:THE INITIAL ROOT FILESYSTEM
by William Frederick Jolitz and Lynne Greer Jolitz

Bill and Lynne describe the 386BSD root filesystem, a key component of kernel development.

IMPLEMENTING THE GPIB
by Don Morgan

Don implements IEEE 488.1 functionality by building an embedded system using the TMS9914A.

A FAST PSEUDO RANDOM NUMBER GENERATOR
by W. L. Maier

The r250 algorithm uses a 250-element array to generate pseudo random numbers faster than better-known techniques.

EXAMINING ROOM

MAKING SMALLTALK WITH WIDGETS
by Kenneth E. Ayers

Widgets/V 286 extends the Smalltalk/V 286 environment by providing alternative classes to the standard Smalltalk user interface components.

PROGRAMMER'S WORKBENCH

ARRAY BOUNDS CHECKING WITH TURBO C
by Glenn Pearson

Add array bounds checking to your Turbo C applications using DOS extenders and the techniques Glenn describes here.

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

Windows and the Windows Conference are the subjects of this months ruminations.

C PROGRAMMING
by Al Stevens

Al launches D-Flat, a CUA-compliant C library.

STRUCTURED PROGRAMMING
by Jeff Duntemann

Designing good communications software requires knowing the hardware.

GRAPHICS PROGRAMMING
by Michael Abrash

Last month, Michael introduced Edsun's CEG/DAC. This month, he puts it to work.

PROGRAMMER'S BOOKSHELF
by Andrew Schulman

C++ books have come a long way, and Andrew looks at the best of the bunch.

DEPARTMENTS

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Jana Custer

Copyright © 1991, Dr. Dobb's Journal


June 1991 - A WINDOW ON STRUCTURED LANGUAGES

FEATURES

FORTRAN & GUIS
by John L. Bradberry

Fortran wasn't designed to write drivers but Fortran applications can provide direct window support.

USING THE REAL-TIME CLOCK
by Kenneth Roach

Access your system's real-time clock using homegrown Turbo Pascal time and date functions.

FAST SORTING USING LARGE STRING BUFFERS
by Dale Thorn

This Basic sort routine uses large string buffers and integer variables as pointers to buffers.

WHAT'S NEW WITH MODULA-2?
by K.N. King

All isn't quiet on the Modula-2 front. Our experts brings you up to date.

PORTING UNIX TO THE 386:RESEARCH & THE COMMERCIAL SECTOR
by William Frederick Jolitz and Lynne Greer Jolitz

Before beginning the kernel port, Bill and Lynne reflect on 386BSD's place in the world of UNIX.

EFFICIENTLY RAISING MATRICES TO AN INTEGER POWER
by Victor Duvanenko

Avoid redundancy--and improve performance--when raising polynomials to integer powers.

TIME AND EMBEDDED SYSTEMS

RECONCILING UNIX, ADA, & REAL-TIME PROCESSING
by Bill O. Gallmeister

Is POSIX.4 the key to reconciling Unix and Ada for real-time systems?

UNIX, ADA, AND REAL-TIME - A FORTH MULTITASKER
by Jack J. Woehr

This Forth multitasker falls between "medium weight" and "heavyweight" multitasking and provides preemption without additional overhead.

EXAMINING ROOM

TAKING UP RESIDENCE WITH CODERUNNER
by R. Bradley Andrews

TSRs are no longer a chore when you use tools like Coderunner.

PROGRAMMER'S WORKBENCH

CELESTIAL PROGRAMMING WITH TURBO PASCAL
by Lars Frid-Nielsen and Alex Lane

Capture planetary images using a CCD camera, a frame grabber, and Turbo Pascal.

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

Michael reports on The First Conference on Computers, Freedom, and Privacy.

C PROGRAMMING
by Al Stevens

This month's D-Flat installment manages application configuration and window classes.

STRUCTURED PROGRAMMING
by Jeff Duntemann

Jeff takes a look at Turbo Pascal for Windows before moving on to dissecting UART registers.

GRAPHICS PROGRAMMING
by Michael Abrash

Complex polygons are simpler than you probably think.

PROGRAMMER'S BOOKSHELF
by Ray Duncan

Pearls of wisdom about Jon Bentley's best programming books.

DEPARTMENTS

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Tami Zemel

Copyright © 1991, Dr. Dobb's Journal


July 1991 - GRAPHICS PROGRAMMING

FEATURES

RECURSIVE IMAGES
by Steven Janke

What do recursive drawing, iterated function systems, and fractal geometry have in common? They all play a part in producing realistic looking natural objects.

SAVING AND RESTORING VGA SCREENS
by Ben Myers

Use the VGA graphics controller and sequencer address registers for saving and restoring graphic screens.

PORTING UNIX TO THE 386: A STRIPPED-DOWN KERNEL
by William Frederick Jolitz and Lynne Greer Jolitz

386BSD's basic kernel incorporates a unique "recursive" paging feature that leverages resources and reduces complexity.

A COFF FILE LOADER FOR THE 34010
by Don Morgan

Here's a Common Object Format File loader for the 34010 that's small enough for embedded applications, yet powerful enough to download fully-linked C and assembly language programs.

EXAMINING ROOM

MASM'S CHANGING FACE
by Mike Schmit

Compared to previous versions, Microsoft's recently released Macro Assembler 6.0 embodies some ambitious changes.

PROGRAMMER'S WORKBENCH

A C++ PCX FILE VIEWER FOR WINDOWS 3
by Paul Chui

This file viewer--implemented as a C++ class--creates a Windows 3 bitmap object from a PCX file.

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

Michael embarks on a two-part interview with Bob Jarvis, author of Wizard C--the precursor to Turbo C.

C PROGRAMMING
by Al Stevens

This month's installment of D-Flat presents event and message mechanisms.

STRUCTURED PROGRAMMING
by Jeff Duntemann

Jeff continues his examination of UARTs and explains how to detect the presence of a serial port.

GRAPHICS PROGRAMMING
by Michael Abrash

VGA's undocumented Mode X supports page flipping, makes off-screen memory available, has square pixels, and increases performance by as much as four times.

PROGRAMMER'S BOOKSHELF
by Andrew Schulman

Andrew weighs his options when examining Windows 3 programming books.

DEPARTMENTS

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Tami Zemel

Copyright © 1991, Dr. Dobb's Journal


August 1991 - C PROGRAMMING

FEATURES

STANDARD C: A STATUS REPORT
by Rex Jaeschke

A noted expert examines how standard C got where it is and where it might be going.

A SOURCE CODE GENERATOR FOR C
by Karl Vogel

Karl shares his "programmer's assistant"--an extensible, language-independent code generator that writes the outline of a program before dropping you into the editor of your choice.

A LISP-STYLE LIBRARY FOR C
by Daniel N. Ozick

Here's an approach to representing and manipulating variable-length, heterogeneous lists, self-identified data objects, and symbolic data in C.

GENERIC CONTAINERS IN C++
by Andrew Davidson

This article presents a method for creating C++ container classes--generic lists of objects.

PORTING UNIX TO THE 386: THE BASIC KERNEL
by William Frederick Jolitz and Lynne Greer Jolitz

The 386BSD kernel services and data structures are initialized in this month's installment.

EMBEDDED SYSTEMS

C PROGRAMMING FOR THE 68HC05 MICROCONTROLLER
by Truman T. Van Sickle

There are advantages to using a high-level language compiler for programming microcontrollers.

DECIMAL FRACTIONAL CONVERSION
by Don Morgan

The technique presented here strikes a balance between speed and storage requirements.

EXAMINING ROOM

TESTING C COMPILER PERFORMANCE
by David Betz

David compares how a variety of C compilers measure up when compiling XScheme, his implementation of the Scheme language.

PROGRAMMER'S WORKBENCH

SCALING AND PRINTING FAXES FASTER
by Greg Pickles

Speed up fax printing on laser printers using the optimizing techniques Greg presents here.

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

Michael continues his conversation with Bob Jarvis, creator of Wizard C and other languages.

C PROGRAMMING
by Al Stevens

Al marks the beginning of his fourth year as our C columnist by continuing with his D-Flat project, taking a look at Power C, and discussing the latest C++ compilers for the PC.

STRUCTURED PROGRAMMING
by Jeff Duntemann

According to Jeff, life is just a series of interruptions--one right after another.

GRAPHICS PROGRAMMING
by Michael Abrash

Michael discusses latches and VGA's undocumented Mode X.

PROGRAMMER'S BOOKSHELF
by Ray Duncan

For graphics programmers, Computer Graphics: Principles and Practice, Second Edition is a must.

FORUM

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Tami Zemel

Copyright © 1991, Dr. Dobb's Journal


September 1991 - LITTLE LANGAGUES

FEATURES

LITTLE LANGUAGES, BIG QUESTIONS by Ray Valdes

Little languages come in all shapes and sizes, Ray looks at their past, present, and future--and challenges you to exercise your language with a small but thorny programming problem.

YOUR OWN TINY OBJECT-ORIENTED LANGUAGE by David Betz

Here's a tiny C-like object-oriented language that's an ideal extension language or learning tool.

ADDING AN EXTENSION LANGUAGE TO YOUR SOFTWARE by Neville Franks

Hooking little languages to big applications can be tricky, unless you follow the rules.

PORTING UNIX TO THE 386:THE BASIC KERNEL by William Frederick Jolitz and Lynne Greer Jolitz

Multiprogramming is the focus of this month's installment.

OBJ LIBRARY MANAGEMENT by Thomas Siering

Effectively using OBJ module libraries is an essential part of software development.

SOFTWARE PARTITIONING FOR MULTITASKING COMMUNICATION by David McCracken

Partitioning communications into layers is one technique for increasing performance.

ONE-WAY HASH FUNCTIONS by Bruce Schneier

Probabilistic algorithms can be used for general-purpose pattern matching.

EXAMINING ROOM

ML AND COLORED PETRI NETS FOR MODELING AND SIMULATION by Peter D. Varhol

Peter uses ML, a Lisp-like little language, to stimulate and investigate multiprocessor architectures.

PROGRAMMER'S WORKBENCH

A BRIEF MACRO PACKAGE FOR EDITING BINARY FILE SYSTEMS by James Rodriguez

The extensibility and programmability of BRIEF lets you tailor the editor to fit your needs.

COLUMNS

PROGRAMMING PARADIGMS by Michael Swaine

Dave Winer, designer of a powerful scripting language, shares his thoughts on software development.

C PROGRAMMING by Al Stevens

D-Flat continued. This month Al covers menus, classes, and the C preprocessor.

STRUCTURED PROGRAMMING by Jeff Duntemann

As long as he's not distracted again, Jeff will continue his discussion of communication interrupts.

GRAPHICS PROGRAMMING by Michael Abrash

Michael puts the moves on animation using VGA's 256 colors.

PROGRAMMER'S BOOKSHELF by Michael Swaine

The Emperor's New Mind, examines computers, minds, and the laws of physics.

FORUM

EDITORIAL by Jonathan Erickson

LETTERS by you

SWAINE'S FLAMES by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST by Tami Zemel

Copyright © 1991, Dr. Dobb's Journal


October 1991 - OBJECT-ORIENTED PROGRAMMING

FEATURES

A MINIMAL OBJECT-ORIENTED DEBUGGER FOR C++ by William M. Miller

This portable symbolic debugger lets you trace execution, display object values, and more.

PROPOSING A C++ STRING CLASS STANDARD by Steve Teale

As C++ moves through the ANSI process, String classes like this may become the standard.

OBJECT-ORIENTED SOFTWARE CONFIGURATION MANAGEMENT by Richard Harter

The object-oriented model addresses the limitations of the difference model.

THE OBJECT D'ART by Michael Floyd

DDJ's senior technical editor reports on the recently-held TOOLS conference.

PORTING UNIX TO THE 386: THE BASIC KERNEL by William Frederick Jolitz and Lynne Greer Jolitz

Bill and Lynne continue their exploration of multiprogramming and multitasking.

XALLOC: AN EXPANDED MEMORY MANAGER by Herbert Gintis

Implementing expanded memory equivalents of TP's dynamic memory functions.

EMBEDDED SYSTEMS

C++ FOR EMBEDDED SYSTEMS by Stuart G. Phillips and Kevin J. Rowett

Our authors describe how you can customize Borland C++ to support non-PC environments.

SMALLTALK AND EMBEDDED SYSTEMS by John Duimovich and Mike Milinkovich

The Smalltalk environment can be a powerful embedded systems development platform.

FORTH: A STATUS REPORT by Jack J. Woehr

Embedded systems programmers have much at stake in the move towards a standardized Forth.

EXAMINING ROOM

ENHANCING THE ACTOR DEVELOPMENT ENVIRONMENT by Steve Hachett

Configuration inheritance adds a powerful dimension to object-oriented programming.

PROGRAMMER'S WORKBENCH

MIXED-LANGUAGE WINDOWS PROGRAMMING by John Norwood

Microsofts's Visual Basic makes it easy for Fortran programmers to access Windows 3 features.

COLUMNS

PROGRAMMING PARADIGMS by Michael Swaine

Michael reflects on the true meaning of the Apple-IBM alliance in this MacWorld Expo report.

C PROGRAMMING by Al Stevens

This D-Flat installment provides list management functions and more.

STRUCTURED PROGRAMMING by Jeff Duntemann

Jeff makes a case for vertical application development--and the tools it requires.

GRAPHICS PROGRAMMING by Michael Abrash

Anitialising and the Sierra Hicolor digital-to-analog converter is explored this month.

PROGRAMMER'S BOOKSHELF by Andrew Schulman

Andrew discusses his favorite hard-core reference books.

DEPARTMENTS

EDITORIAL by Jonathan Erickson

LETTERS by you

SWAINE'S FLAMES by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST by Tami Zemel

Copyright © 1991, Dr. Dobb's Journal


November 1991 - OPERATING SYSTEMS

FEATURES

A CONVERSATION WITH ROBERT CARR by Michael Swaine

This month's "Programming Paradigms" moves to the forefront as Michael converses with Robert Carr, chief architect of PenPoint, a 32-bit, multitasking, object-oriented operating system. Ray Valdes adds a technical overview of the DOS.

LOADING DEVICE DRIVERS FROM THE DOS COMMAND LINE by Jim Kyle

DEVLOD, the DOS program Jim presents here, lets you load character and block device drivers without rebooting your computer.

PORTING UNIX TO THE 386: THE BASIC KERNEL by William Frederick Jolitz and Lynne Greer Jolitz

It's necessary to understand UNIX device interfaces before integrating device drivers. Bill and Lynne examine BSD kernel/device driver interfaces and how BSD works the miracle of autoconfiguration.

DDJ DATA COMPRESSION CONTEST RESULTS by Mark Nelson

Mark reveals the results of our data compression contest. And the winners are...

EXAMINING ROOM

PORTING UNIX APPLICATIONS TO DOS by David N. Glass

What kind of problems can you expect when porting large programs from UNIX to DOS? For starters, the OSs treat devices and files differently. David dealt with this--and more--when his shop ported nearly 250,000 lines of C from UNIX to DOS.

PROGRAMMER'S WORKBENCH

MONITORING DISTRIBUTED PRINTERS UNDER NOVELL NETWARE by V. James Krammes

This month's project is a program that allows you to monitor multiple remote printers from a single workstation using the Novell NetWare C Interface for DOS.

COLUMNS

C PROGRAMMING by Al Stevens

Al begins a discussion of specific window classes by reviewing the classes that D-Flat provides, discussing how the class hierarchy works, and describing the NORMAL class, which is the base class from which all others derive.

STRUCTURED PROGRAMMING by Jeff Duntemann

Jeff takes on the challenge of Turbo Vision, the object-oriented toolbox that's part of the Turbo Pascal 6.0 package, starting with his four basic rules for Turbo Vision programming.

GRAPHICS PROGRAMMING by Michael Abrash

Looking good is good enough when it comes to antialiasing with 32 fully independent levels of each primary color, and resolutions up to 800x600.

PROGRAMMER'S BOOKSHELF by Ray Duncan

The Art of Human-Computer Interface Design and Disappearing Through the Skylight are examined this month, along with a look at how cyberpunk science fiction novels view human-computer interfaces.

DEPARTMENTS

EDITORIAL by Jonathan Erickson

LETTERS by you

SWAINE'S FLAMES by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST by Tami Zemel

Copyright © 1991, Dr. Dobb's Journal


December 1991 - USER INTERFACES

FEATURES

THE DESIGN AND IMPLEMENTATION OF PIE MENUS by Don Hopkins

Circular pie menus are easier to use and faster to manipulate than conventional linear menus. Don discusses their pluses and minuses, and shows you how to design and implement them.

ENHANCING THE X-WINDOW SYSTEM by Jim Rhyne, Doris Chow, and Michael Sacks

Our authors describe how they extended the X-Window system by adding a paperlike interface and handwriting recognition capabilities.

LINKING USER INTERFACE AND DATABASE OBJECTS by Eng-Kee Kwang and Christopher Rosebrugh

In the first installment of this two-part article, Eng-Kee and Chris discuss the object-oriented UI and database architecture of the notebook UI they implemented for a pen-based computer.

FS: A FILE STATUS UTILITY FOR UNIX by Jeff Reagen

The file status utility presented here lets you examine the current status of the UNIX file table in much the same way ps allows you to look at the list of active processes.

A SIMPLE HANDLE-BASED MEMORY MANAGER by David Betz

This handle-based memory manager may solve you memory fragmentation problems.

EMBEDDED SYSTEMS

STATISTICAL PERFORMANCE ANALYSIS by Fred Motteler

Understanding statistical performance analysis helps you improve time-critical application execution and avoid potential problems.

EXAMINING ROOM

VISIBLE RESULTS WITH VISUAL BASIC by Al Stevens

Al built this Windows 3 network e-mail system with just 640 lines of code in only four days using Microsoft's Visual Basic.

PROGRAMMER'S WORKBENCH

GRAPHICAL DATA VISUALIZATION by Marian G. Williams and Peter D. Varhol

The object-oriented nature of VZ Programmer makes it easy to build an interactive GUI for exploratory data analysis under Windows 3 or Presentation Manager.

COLUMNS

PROGRAMMING PARADIGMS by Michael Swaine

Michael continues his conversation with Robert Carr, this month discussing the PenPoint UI and imaging model; Roland Alden and Tony Hoeber add details about the NUI.

C PROGRAMMING by Al Stevens

The D-Flat TEXTBOX class Al discusses this month displays, scrolls, and pages through the text in textbox windows.

STRUCTURED PROGRAMMING by Jeff Duntemann

The tragedy of any Black Box, whether it be an IC or Turbo Vision, is that what goes on inside is magic--even when you know what goes in and what comes out.

GRAPHICS PROGRAMMING by Michael Abrash

In addition to catching up on his correspondence, Michael discusses graphics debugging and hi-res VGA page flipping.

PROGRAMMER'S BOOKSHELF by Andrew Schulman

C and C++ are this month's focus as Andrew examines Plauger's The Standard C Library and the second edition of Stroustrup's The C++ Programming Language.

DEPARTMENTS

EDITORIAL by Jonathan Erickson

LETTERS by you

SWAINE'S FLAMES by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST by Tami Zemel

Copyright © 1991, Dr. Dobb's Journal


Special Issue 1991 - WINDOWS 3 PROGRAMMING

FEATURES

QUICK APPROXIMATIONS OF POLYGONAL AREAS USING BITBLT
by Nancy Nicolaisen

Use graphics and Boolean raster operations to estimate areas by determining the unit area represented by a single pixel.

SUBCLASSING APPLICATIONS
by Mike Klein

Subclassing is an important--and misunderstood--method of intercepting and processing messages going to an object in Windows 3.

WINDOWS MEETS C++
by Scott Robert Ladd

If you've been wondering whether or not the object-oriented power of C++ can be used to simplify Windows programming, Scott's class library gives you an answer--even though Windows isn't necessarily object oriented in the first place.

PROGRAMMING WINDOWS USING STATE TABLES
by Michael A. Bertrand and William R. Welch

The data structure presented in this article can simplify the structure of interactive graphics programs. Here, a Windows-based program called "Draw" uses stable tables to implement interactive drawing tools in an economical, consistent fashion.

PROPVIEW: A WINDOWS FAMILY BROWSER
by Mike Klein

PropView, the Windows 3 property and structure viewer presented here, provides information on any window under the mouse, including its handle, caption, class name, class icon, properties, extra data, and style information.

EDITORIAL

EDITORIAL
by Michael Floyd

Copyright © 1991, Dr. Dobb's Journal


January 1992 - PROGRAMMING FOR ADVANCED ARCHITECTURES

FEATURES

PARALLEL DSP FOR DESIGNING ADAPTIVE FILTERS
by Daniel Chen

High-performance, computation-intensive applications can benefit from parallel DSP architectures that are much faster than their general-purpose microprocessor equivalents.

THE FIVE LEVELS OF RAID
by Mike Wiebel and Steve Johnson

Discrete-event simulation lets you predict system performance of "Redundant Arrays of Inexpensive Disks"--small disks grouped together forming the virtual image of larger disks.

WRITABLE INSTRUCTION SET COMPUTERS
by Jack J. Woehr

WISC computers borrow from the best of their RISC and CISC counterparts.

PROGRAMMING THE 29050
by David L. Moore

RISC processors present programming challenges, particularly in terms of fast floating-point events.

REEXAMINING B-TREES
by Ted Johnson and Dennis Shasha

Ted and Dennis review B-tree concepts, then summarize their investigation into a simpler, more efficient approach to managing B-trees.

EMBEDDED SYSTEMS

MULTIPLE MICROCONTROLLERS IN AN EMBEDDED SYSTEM
by Christopher Rosebrugh and Eng-Kee Kwang

One of the unique aspects of the Infolio portable pen-based computer is that it's built around microcontrollers typically used with embedded systems.

EXAMINING ROOM

YOUR OWN DISK DUPLICATION PROGRAM
by Al Williams

Al uses Intel's C CodeBuilder--and its royalty-free DOS extender--to develop a disk duplication program that stores images of floppy disks entirely in memory.

PROGRAMMER'S WORKBENCH

UNTANGLING SMARTDRIVE
by Geoff Chappell

Explore the mysteries of Microsoft's SMARTDrive--the disk cache that's included with Windows 3, MS compilers, and MS-DOS.

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

Tiny BASIC put Tom Pittman on the front lines of the PC revolution.

C PROGRAMMING
by Al Stevens

This month's D-Flat discussion is on the EDITBOX window class.

STRUCTURED PROGRAMMING
by Jeff Duntemann

Jeff explores event-driven programming, zeroing in on "focused" and broadcast events.

GRAPHICS PROGRAMMING
by Michael Abrash

Michael moves into 3-D animation, starting with basic polygon fills and page flips.

PROGRAMMER'S BOOKSHELF
by Ray Duncan

Polya's How to Solve It presents a problem-solving method invaluable to all programmers.

DEPARTMENTS

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Tami Zemel

Copyright © 1992, Dr. Dobb's Journal


February 1992 - PROTECTED-MODE PROGRAMMING

FEATURES

USING DPMI TO HOOK INTERRUPTS IN WINDOWS 3
by Walter Oney

This article shows you how a DOS application running in the enhanced 386 mode of Microsoft Window's application.

MIXING REAL-AND PROTECTED-MODE CODE
by Kerry Loynd

If you have real-mode object code, or require real-mode device drivers, you can use the intermode call buffer to mix real- and protected-mode code.

PORTING UNIX TO THE 386: DEVICE DRIVERS
by William Frederick Jolitz and Lynne Greer Jolitz

This month, our authors continue their discussion of support macros and functions of the 386BSD kernel that drivers use to work devices.

PSEUDO-RANDOM SEQUENCE GENERATOR FOR 32-BIT CPUS
by Bruce Schneier

This psuedo-random sequence generator is fast, statistically sound, machine independent, and optimized for 32-bit microprocessors.

EMBEDDED SYSTEMS

PROTECTED-MODE DEBUGGING USING IN-CIRCUIT EMULATORS
by Tovey Barron

In-circuit emulators make it easy to access protected-mode architectural features.

EXAMINING ROOM

PROGRAMMING WITH PHAR LAP'S 286 DOS-EXTENDER
by Al Williams

Al uses Microsoft C and Phar Lap's 286 DOS-Extender to develop an extensible graphics language that's loosely based on LOGO.

PROGRAMMER'S WORKBENCH

UNDOCUMENTED DOS FROM PROTECTED-MODE WINDOWS 3
by Paul Chui

Paul shows how to make undocumented DOS calls from Windows' standard and enhanced modes.

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

Multimedia is all the rage, but what is it? And what kinds of machines will we need to find out?

C PROGRAMMING
by Al Stevens

This month Al introduces a new D-Flat window class, the PICTURBOX, and provides the code that supports the clipboard and text searching for the EDITBOX class.

STRUCTURED PROGRAMMING
by Jeff Duntemann

Events are an open-and-shut case with Turbo Vision, Borland's text-based windowing manager.

GRAPHICS PROGRAMMING
by Michael Abrash

Michael uses backface removal to speed hidden surface handling of a single convex polyhedron.

PROGRAMMER'S BOOKSHELF
by Andrew Shulman

Information theory is Andrew's focus as he examines Nelson's Data Compression, Lucky Silicon Dreams, and Leff/Rex's Maxwell's Demon.

DEPARTMENTS

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Tami Zemel

Copyright © 1992, Dr. Dobb's Journal


March 1992 - TOOLS FOR ASSEMBLY LANGUAGE PROGRAMMING

FEATURES

THE UCR STANDARD ASSEMBLY LANGUAGE LIBRARY
by Randall Hyde

The University of California Riverside Standard Library for 80x86 assembly language programmers provides a slate of useful high-level assembly language routines.

AN OBJECT-ORIENTED ASSEMBLY LANGUAGE MACRO LIBRARY
by Donald J. McSwain

ASM programmers, like their high-level language counterparts, can use object-oriented programming techniques to develop reusable, maintainable code.

ASSEMBLY LANGUAGE PROGRAMMING FOR THE 80x87
by Nicholas Wilt

Contrary to popular notions, numeric coprocessor code can be optimized using assembly language in much the same way as integer-based code.

PORTING UNIX TO THE 386 DEVICE DRIVERS
by William Frederik Jolitz and Lynne Greer Jolitz

Entering, exiting, and masking various processor interrupts are covered this month.

DEVICE DRIVER MONITORING
by Rick Knoblaugh

Debugging device drivers is a snap with this monitoring program.

PRINTING FROM WINDOWS 3
by Michael J. Young

Abort procedures process Windows messages and yield control to applications on a regular basis.

EMBEDDED SYSTEMS

THE AM29000 AS AN EMBEDDED CONTROLLER
by Bob Lowell

Advanced Micro Devices' 29000 RISC coprocessor can achieve high performance without greatly impacting the hardware component cost of controller boards.

EXAMINING ROOM

THE LOTUS OPEN MESSAGE INTERFACE
by Al Stevens

The Lotus OMI defines a platform-independent method for applications to exchange e-mail.

PROGRAMMER'S WORKBENCH

PROGRAMMING WITH COMMUNICATION PROTOCOL STACKS
by Gordon Free

Blackbird, a communications library based on the ISO reference model architecture, was developed by Traveling Software for use in its file transfer software.

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

Michael looks to the future, when deciding what's relevant will be the key to success.

C PROGRAMMING
by Al Stevens

The D-Flat saga continues with LISTBOX window class, the base class for pop-down menus.

STRUCTURED PROGRAMMING
by Jeff Duntemann

Jeff scales the twin towers of analysis and design.

GRAPHICS PROGRAMMING
by Michael Abrash

Michael boosts the performance of his 3-D animation code using fixed-point arithmetic.

PROGRAMMER'S BOOKSHELF
by Ray Duncan

The "true" history of the computer industry depends on which book you read.

DEPARTMENTS

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Tami Zemel

Copyright © 1992, Dr. Dobb's Journal


April 1992 - ADVANCED ALGORITHMS

FEATURES

THE FAST WAVELET TRANSFORM
by Mac A. Cody

Fast wavelet transformations pick up where fast Fourier transforms leave off.

YOUR OWN HANDPRINTING RECOGNITION ENGINE
by Ron Avitzur

Ron discusses the design and implementation of a writer-dependent, platform-independent recognition engine for handprinted text.

RED-BLACK TREES
by Bruce Schneier

The red-black algorithm, a twist on the classic binary search tree, uses an efficient mechanism for balancing trees.

BLOCK TRUNCATION COMPRESSION
by Anton Kruger

BTC preserves image statistics, resulting in compressed images requiring 75 percent less disk space.

FINDING STRING DISTANCES
by Ray Valdes

Precise sequence comparisons are basic to molecular biology research and handwriting recognition.

PORTING UNIX TO THE 386: DEVICE DRIVERS
by William Frederick Jolitz and Lynne Greer Jolitz

Our discussion of 386 BSD device drivers continues, focusing on interrupt routines.

EMBEDDED SYSTEMS

MULTIUSER DOS FOR CONTROL SYSTEMS: PART I
by Richard Kryszak

Multiuser DOS from Digital Research is an MS-DOS compatible, multitasking operating system that's a good platform for control systems.

EXAMINING ROOM

WINDOWS PROGRAMMING WITH BASIC
by Raymond J. Schneider

Ray shows how mathematical chaos works by graphically exploring Lorenz equations.

PROGRAMMER'S WORKBENCH

THE DESIGN OF THE MATHEMATICA PROGRAMMING LANGUAGE
by Roman E. Maeder

The rule-based paradigm in Mathematica's programming language lets you write code that closely matches the formulation of the problem to be solved.

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

Michael examines the life of Ada Lovelace and ponders whether programming is an art or a science.

C PROGRAMMING
by Al Stevens

Menus are added to D-Flat in this month's installment.

STRUCTURED PROGRAMMING
by Jeff Duntemann

Jeff continues his exploration of Turbo Vision, focusing on how Turbo Pascal handles collections.

GRAPHICS PROGRAMMING
by Michael Abrash

Raw speed and hidden surfaces are Michael's topics this month.

PROGRAMMER'S BOOKSHELF
by Andrew Schulman

Andrew makes the case that the best programming books are written by and for programmers.

DEPARTMENTS

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Tami Zemel

Copyright © 1992, Dr. Dobb's Journal


May19:92 - COMMUNICATIONS AND ENCRYPTION

FEATURES

UNTANGLING PUBLIC-KEY CRYPTOGRAPHY
by Bruce Schneier

As we move into the world of electronic communication, the need for secure, private messaging becomes more and more important.

FLETCHER'S CHECKSUM
by John Kodis

When it comes to high-speed data verification, Fletcher's checksum algorithm can do the job.

THE WINDOWS COMMUNICATIONS API
by Mike Sax

Mike ports an XModem engine from DOS to Windows using Windows' Comm API facilities.

IPX: THE GREAT COMMUNICATOR
by Rahner James

This library of IPX functions can significantly improve Novell network throughput.

PORTING UNIX TO THE 386: MISSING PIECES, PART 1
by William Frederick Jolitz and Lynne Greer Jolitz

Over the next couple of months, we present the glue that lets you build an operational kernel.

FILE VERIFICATION USING CRC
by Mark R. Nelson

Mark's implementation of the CRC-32 algorithm generates a unique 32-bit number.

EMBEDDED SYSTEMS

MULTIUSER DOS FOR CONTROL SYSTEMS: PART II
by Richard Kryszak

Multiuser DOS from Digital Research is an MS-DOS compatible multitasking operating system that's a good platform for control systems.

EXAMINING ROOM

BRIDGING THE GAP WITH RESIDENT_C
by Charles Albert Mirho

Here's a TSR that bridges the gap between DOS and real- or standard-mode Windows.

PROGRAMMER'S WORKBENCH

VISUAL BASIC AND WINDOWS 3.1 EXTENSIONS
by Moshe Lichtman

Custom controls are central to Windows programming, particularly pencentric development.

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

Michael takes a look at UserTalk, Frontier's C-like scripting language.

C PROGRAMMING
by Al Stevens

The Application window class is the foundation of any D-Flat application.

STRUCTURED PROGRAMMING
by Jeff Duntemann

To Jeff, Borland's Object Vision is really a Windows-based, event-driven programming language.

GRAPHICS PROGRAMMING
by Michael Abrash

Michael opens his mail and finds alternative approaches to hidden surfaces, dual-monitor debugging techniques, bitblt "compiling," and more.

PROGRAMMER'S BOOKSHELF
by Ray Duncan

If you're a serious programmer, Andrew Tanenbaum's books should find a place in your library.

DEPARTMENTS

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Tami Zemel

Copyright © 1992, Dr. Dobb's Journal


June 1992 - SCIENTIFIC AND ENGINEERING COMPUTING

FEATURES

PERSONAL SUPERCOMPUTING
by Ian Hirschsohn

PC/RISC architectures give you the horsepower to run large-scale scientific applications.

FINDING SIGNIFICANCE IN NOISY DATA
by Roy E. Kimbrell

Adaptive filters let you identify significant deviations from expected values.

CONTOURING DATA FIELDS
by Bruce (Bear) Giles

Scientific data is often in gridded data format, and contouring is a way to view it.

SCULPTING ON SILICON: AN INTERVIEW WITH CHUCK MOORE
by Jack Woehr

Chuck Moore and others have a wide-ranging discussion about computing's changing landscape.

PORTING UNIX TO THE 386: MISSING PIECES, PART II
by William Frederick Jolitz and Lynne Greer Jolitz

A "bare-bones" execve( ) system call is implemented this month.

DESIGN FOR VISUALIZATION
by Peter D. Varhol

Peter describes how to use a design tool to develop a team project.

EMBEDDED SYSTEMS

PROGRAMMING THE 12C INTERFACE
by Mitchell Kahn

The I2C bus is a two-wire synchronous serial interface for intelligent IC devices.

EXAMINING ROOM

ACCESSING LARGE DATA ARRAYS WITH X-ARRAY
by Barr E. Bauer

Barr examines X-arRAY, a Fortran library that manages extended memory and math operations.

PROGRAMMER'S WORKBENCH

FORTEX, A FORTRAN RUNTIME EXECUTIVE
by Harold R. Justice

FORTEX is a Fortran tool with a flexible UI that can be incorporated into applications.

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

Michael argues that the way we interact with computers is in the early stages of a paradigm shift.

C PROGRAMMING
by Al Stevens

Al discusses how to implement dialog boxes, and wraps up SD '92.

STRUCTURED PROGRAMMING
by Jeff Duntemann

Jeff switches from Object Vision to Visual Basic in his look at Windows development tools.

GRAPHICS PROGRAMMING
by Michael Abrash

Wu's method of antialiasing is Michael's focus this month.

PROGRAMMER'S BOOKSHELF
by Andrew Schulman

Modern Operating Systems and The Design of OS/2 look inside today's operating systems.

DEPARTMENTS

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Tami Zemel

Copyright © 1992, Dr. Dobb's Journal


July 1992 - PROGRAMMING FOR MULTIMEDIA

FEATURES

CAPTURING DIGITAL VIDEO USING DVI
by James L. Green

Jim uses the DVI audio-video kernel to build a Windows program that captures video and audio from an analog source.

THE QUICKTIME/AVK CONNECTION
by William Fulco

Create platform-independent multimedia applications using the techniques described here.

AUDIO COMPRESSION
by John W. Ratcliff

This sound-compression algorithm yields better than 6:1 compression on human voice and 3:1 on music.

PERSONAL SUPERCOMPUTING: SEAMLESS PORTABILITY
by Ian Hirschsohn

"Seamless portability" means that you can transfer programs between different computers without relinking or recompiling the code.

PORTING UNIX TO THE 386: THE FINAL STEP
by William Frederick Jolitz and Lynne Greer Jolitz

Bill and Lynne take the final steps in their 386BSD journey.

THE DR. DOBB'S HANDWRITING RECOGNITION CONTEST
by Ray Valdes

Enter our handwriting recognition contest and win a PowerBook! Ray tells you how.

EMBEDDED SYSTEMS

THE I860 AS A GRAPHICS CONTROLLER
by Debra Cohen

Fast 3-D spatial transformations and rendering can be made even faster using a graphics processor.

EXAMINING ROOM

PROGRAMMING QUICKTIME
by Aaron E. Walsh

Apple's QuickTime is a system-wide architecture for handling sophisticated data elements, providing standard access to "time-based" data.

PROGRAMMER'S WORKBENCH

GRAPHICS IMPORT FILTERS FOR WINDOWS APPLICATIONS
by Evangelo Prodromou

Giving Windows 3 the ability to import and manipulate graphics files created in another application needn't be a chore.

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

Michael tackles the related issues of multimedia and human-interface design.

C PROGRAMMING
by Al Stevens

Al develops D-Flat control windows and begins rewriting D-Flat in C++.

STRUCTURED PROGRAMMING
by Jeff Duntemann

Streams under Turbo Vision are a prime example of what Jeff calls the Rubber Pipe fallacy.

GRAPHICS PROGRAMMING
by Michael Abrash

Michael adds 3-D shading, a general color model, and 8088/286 support to X-Sharp.

PROGRAMMER'S BOOKSHELF
by Ray Duncan

As Ray points out, "ethics" and "computing" go hand-in-glove.

DEPARTMENTS

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Tami Zemel

Copyright © 1992, Dr. Dobb's Journal


August 1992 - EXTENDING C

FEATURES

LARGE CHARACTER SETS FOR C
by P.J. Plauger

The internationalization of C is underway and it's imperative that all programmers understand the issues surrounding localized, language-specific characters, particularly when it comes to wide characters and multibyte extensions as implemented in large character sets.

NUMERICAL EXTENSIONS TO C
by Robert Jervis

Can C ever hope to compete with Fortran when it comes to numeric programming? The Numerical C Extensions Group, a subcommittee working under ANSI auspices, thinks so, and it may be laying the foundation for the next version of the C standard.

MULTIPLE-PRECISION ARITHMETIC IN C
by Burton S. Kaliski, Jr.

Adding and subtracting 8- or 16-bit numbers used to be enough. But where do you start if you want to add, subtract, multiply, or divide 64-, 128-, or 512-bit numbers--particularly when using a language like C that currently only supports 32-bits.

PERSONAL SUPERCOMPUTING: VIRTUAL MEMORY, 64-BIT
by Ian Hirschsohn

Ian concludes his three-part series by discussing how virtual memory was implemented in PORT. Virtual memory lets you run programs that are larger than available RAM and call massive programs from within one another.

INSIDE THE WINDOWS SCHEDULER
by Matt Pietrek

One of the fundamental "black boxes" in the Microsoft Windows API is the scheduler. Matt examines how its implemented and how it interacts with the rest of Windows. In doing so, he looks at Windows internal data structures such as the task database, module table, and message queue.

EMBEDDED SYSTEMS

MOVING FROM ASSEMBLY TO C
by Beth Mazur

Beth makes the case that C is increasingly becoming the language of choice for many embedded systems projects because it is more maintainable and portable--and just as efficient--as assembly language.

NETWORKED SYSTEMS

HIGH-SPEED NETWORKING
by William Frederick Jolitz

Even though network systems with data transfer rates in the gigabits-per-second range are just around the corner, today's software architectures won't necessarily scale well to higher rates. Bill examines the problems and promise of high-speed networking, focusing on header prediction and forward-error correction.

EXAMINING ROOM

COMPILER-SPECIFIC C EXTENSIONS
by Al Stevens

Borland's C++ compiler provides C extensions to support DOS systems programming, that branch of programming that includes device drivers, memory-resident programs, and other low-level activities. Al presents a TSR driver that swaps the memory of the interrupted program for the TSR's application's image, executes the TSR application, and swaps the original program back in.

PROGRAMMER'S WORKBENCH

PARALLEL C EXTENSIONS
by Barr E. Bauer

A parallelized program is a serial program with regions of parallel execution. On entering a parallel region, the serial program transforms from a single process to multiple processes, each running one of the parallel execution threads. Barr uses Silicon Graphics' IRIS Power C compiler and its parallel extensions to investigate these concepts.

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

Apple decides to get small with the announcement of its "personal digital assistant." But can this foray into the consumer-electronics market succeed? Michael weighs its chances before considering the probability of success of Apple's other spin-offs--Kaleida and Taligent.

C PROGRAMMING
by Al Stevens

Al puts aside D-Flat development for the moment as he celebrates his fourth anniversary as DDJ's "C Programming" columnist and talks about C++ issues and the possibility of a pen-based D-Flat library.

STRUCTURED PROGRAMMING
by Jeff Duntemann

Before trying to make sense of how Turbo Vision handles streams (which leads up to a revision in his mortgage calculator program), Jeff reveals that he's changed his mind about software patents, thinking that maybe they're not so bad after all.

GRAPHICS PROGRAMMING
by Michael Abrash

After adding illumination sources and shading to his X-Sharp 3-D graphics library last month, Michael provides a general-purpose color model so that you can display the gradations of color intensity necessary to render illuminated surfaces properly.

PROGRAMMER'S BOOKSHELF
by Andrew Schulman

WEB, a programming language Donald Knuth presents in Literate Programming, lets you merge the executable source for a system with its description, thereby making it possible for software "authors" to write code in a way that makes sense to readers.

DEPARTMENTS

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Tami Zemel and Kathleen O'Connor

Copyright © 1992, Dr. Dobb's Journal


September 1992 - DEBUGGING, TOOLS AND TECHNIQUES

FEATURES

POSTMORTEM DEBUGGING
by Matt Pietrek

Postmortem debugging helps you isolate program problems by taking a snapshot of the machine at the time a crash occurs. As Matt points out, if you have the tools to support the technique, postmodern debugging is particularly useful in protected-mode Windows.

AN EXCEPTION HANDLER FOR WINDOWS 3
by Brett Salter

When writing Periscope/32 for Windows 3, Brett needed to debug the debugger so he developed WINX.386. This Windows exception handler is implemented as an Enhanced Mode Windows virtual device driver that oversees what's happening with other VxDs, normal Windows applications and drivers, and the DOS box--including TSRs and DOS device drivers.

YOUR OWN PROTECTED-MODE DEBUGGER
y Rick Knoblaugh

The 80386/486 protected-mode debugger Rick presents here makes use of the 386's debug registers as well as protected and virtual-8086 modes. It also enables breakpoints to be generated on code execution (including ROM code), interrupts, data accesses, and I/O accesses and it can coexist with a real-mode debugger such as Debug or Codeview.

HIGH-RESOLUTION TIMING
by Thomas Roden

For many applications, the PC's built-in timer just isn't fast enough. Thomas untangles the PC timer, then offers up three externally referenced timer functions--along with a program that verifies them--that provide high-resolution timing.

AN IMPROVED LISP-STYLE LIBRARY FOR C
by Douglas Chubb

Douglas reexamines and updates Daniel Ozick's Lisp-style C library presented in our August 1991 issue. This improved version sports a redesigned garbage collector that makes the system more efficient, nearly automatic, and easy to use.

EMBEDDED SYSTEMS

THE UNIVERSAL DEBUGGER INTERFACE
by Daniel Mann

Dan examines the Universal Debugger Interface, a processor-independent specification that promises greater debug-tool configurability. He also discusses how to go about integrating the UDI with existing tools, using as an example the Free Software Foundation's GDB C-Language source-level debugger.

DEBUGGING REAL-TIME SYSTEMS
by Gurjol Singh, Moses Joseph, and Dave Barnett

Modular and incremental development and debugging lead to reliable real-time systems that perform the functions they're designed to. Our authors use this approach when building a simulated data-acquisition system.

NETWORKED SYSTEMS

CRASH TRACEBACKS IN UNIX
by Alan Dunham

This UNIX-based VAX/VMS-like crash traceback utility reports a list of subroutines being executed when the crash occurred, along with line numbers, parameter values, and local symbol values.

EXAMINING ROOM

WINDOWS TOOLHELP
by Mike Sax

ToolHelp is a DLL that lets you peek and poke into the internals of Windows 3.1. Mike discusses ToolHelp functions, then presents a programming utility that lets you remove DLLs and programs stuck in memory without having to restart Windows to recompile.

PROGRAMMER'S WORKBENCH

A VIDEO COMPATIBILITY INTERFACE FOR TURBO DEBUGGER
by Danny Thorpe

The Video Compatibility Interface of Borland's Turbo Debugger for Windows allows an external DLL to handle all the video-mode switching for a particular video card or chipset. Danny describes the services a custom video DLL must provide.

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

Are those visitors knocking at Michael's door using--or abusing--the "paradigm" moniker? Our editor-at-large examines some interesting programming tools and applications, before moving on to books and conferences.

C PROGRAMMING
by Al Stevens

This month, Al discusses the four parts of the D-Flat help system: a text help database; a compression/decompression algorithm: the hooks in the dialog boxes, menus, and program code that make a particular text display the current one; and the HELPBOX window class that displays the help text and allows the user to navigate it.

STRUCTURED PROGRAMMING
by Jeff Duntemann

Before putting Turbo Vision aside for awhile, Jeff uses Borland's standard file open dialogs, a undocumented "gift" that comes with the Turbo Pascal 6.0, to develop the final, streamable version of HCALC, his mortgage calculator program.

GRAPHICS PROGRAMMING
by Michael Abrash

Texture mapping is the process of mapping a bitmap image onto the surface of a polygon that's been transformed in the process of 3-D drawing. Michael describes a quick-and-dirty texture mapping technique that starts with a quick determination of what pixel value to draw for each pixel in the transformed destination polygon.

PROGRAMMER'S BOOKSHELF
by William F. Jolitz

Are the computer and telecommunications industries butting heads instead of holding hands when building tomorrow's global communication networks?

FORUM

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Tami Zemel

Copyright © 1992, Dr. Dobb's Journal


October 1992 - OBJECT-ORIENTED PROGRAMMING

FEATURES

SIZING UP APPLICATION FRAMEWORKS AND CLASS LIBRARIES
by Ray Valdes

In our examination of object-oriented application frameworks and class libraries, we asked the experts to show us the best way to use their tools--we wrote the spec, they wrote the code. Like us, you'll be surprised at some of the results.

OBJECT-ORIENTED PROGRAM CONSTRUCTION
by William G. Wong

Plugs, an object class used in conjunction with conventional classes, work like their electrical counterparts, and give you the ability to interconnect and assemble software components for program construction without resorting to the usual pointers and functions.

SUPER DISTRIBUTION AND ELECTRONIC OBJECTS
by Brad Cox

As object-oriented technologies extend our ability to encapsulate functionality within prefabricated components, superdistribution of electronic objects and pay-per-use software start to make sense.

A TASTE OF DYLAN
by David Betz

Dylan, a new object-oriented dynamic language from Apple Computer, provides automatic storage management, runtime type checking, and dynamic linking, much like Lisp and Smalltalk.

DPMI MEETS C++
by Frederick Hewett

DPMI is a programming interface that allows application-level code to run in protected mode. This article looks at DPMI from an object-oriented perspective, using C++ class library as the basis for exploration.

EMBEDDED SYSTEMS

TIMED CALLBACKS IN C++
by Christian Stapfer

The timed-callback scheme Christian presents here queues functions you want invoked after a given number of system clock ticks. This system, which Christian used as the basis for an embedded moisture controller, uses a bounded priority queue that's quite efficient.

NETWORKED SYSTEMS

IMPLEMENTING NLM-BASED CLIENT/SERVER ARCHITECTURES
by Michael Day

NetWare NLMs take full advantage of the multitasking, multithreaded architecture of the operating system. Michael presents a distributed file manager made up of two modules: ENGINE.NLM, an NLM running on a NetWare 3.x server, and CLIENT.EXE, a DOS-based front end running on the client.

EXAMINING ROOM

SAFE PROGRAMMING WITH MODULA-3
by Sam Harbison

Feature-for-feature, Modula-3 is on a par with Ada and C++, but avoids complexity by simplifying individual features like inheritance and generics. Furthermore, Modula-3 is less of a moving target because it already has features only now being added to those other languages.

PROGRAMMER'S WORKBENCH

A SOURCE CODE PROFILER
by Keith W. Boone

Identifying code that must work faster is one of the keys to writing successful software, and profilers are the right tools for the job. Keith shows you how to put profilers to their best use, and gives you the code to build your own profiler in the process.

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

"Subscription Software" is yet another software distribution scheme. Michael analyzes this approach and reports on his recent trip to the MacWorld Expo conference in Boston.

C PROGRAMMING
by Al Stevens

Al wraps up his D-Flat project by discussing the File Open and Save As dialog boxes, the application window's status bar, and text compression of the D-Flat help database. He then ponders what's right and wrong with C++.

STRUCTURED PROGRAMMING
by Jeff Duntemann

According to Jeff, the "Parts is Parts" fallacy holds that the kind of tools and libraries you use don't have any bearing on your design strategy. Jeff believed this too--until he came face-to-face with an application framework.

GRAPHICS PROGRAMMING
by Michael Abrash

Following up on last month's introduction to texture mapping, Michael discusses orientation independence and mapping textures across multiple polygons. He then shows you how to do it fast.

PROGRAMMER'S BOOKSHELF
by Andrew Schulman

If you've ever wanted to understand how your favorite compiler works, or if you ever needed to write some form of language processor, Compiler Design in C by former DDJ columnist Allen Holub is the book for you.

DEPARTMENTS

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Tami Zemel

Copyright © 1992, Dr. Dobb's Journal


November 1992 - USER INTERFACES

FEATURES

SIZING UP GUI TOOLKITS
by Ray Valdes

Last month, Ray got some expert programmers to show what object-oriented application frameworks can do with a simple graphics application. This month, he applies the same approach to GUI Toolkits.

PIE MENUS FOR WINDOWS
by Carl Rollo

Circular pie menus are faster and more accurate than the now-familiar linear menus. Carl presents five functions that enable you to implement pie menus for Windows, using the "owner draw" features in the Windows API.

DYNAMIC DIALOG BOXES AND C++
by Robert Sardis

There are many times when a dialog box's specification is only known at run time. Bob shows how C++ constructs can simplify an existing C-based approach to dynamic dialogs.

GARBAGE COLLECTION FOR C PROGRAMS
by Giuliano Carlini and Susan Redina

Garbage collection, which liberates you from needing to explicitly free memory, is used by languages like Lisp and Smalltalk. In this article, our authors show you how to implement conservative, yet efficient, collection techniques in C.

DESIGNING C++ CLASSES
by Steven Sinofsky

To maintain the consistent semantics of C++, a number of functions are required for each C++ class. This article details the four functions that C++ generates when your program does not provide definitions for them: default constructor, copy constructor (or copy initializer), destructor, and assignment operator.

DESIGNING PORTABLE USER INTERFACES
by John L. Bradberry

The UI is one of the most important design issues to consider when porting applications from one platform to another. John discusses UI design strategies and software-engineering techniques he implemented when porting a DOS application to UNIX.

CONVERTING DITHERED IMAGES BACK TO GRAY SCALE
by Allen Stenger

Information loss in dithering generally makes it possible to recover the original black-and-white image from a dithered image unless you "undither" it.

EXTENDING TURBO VISION
by Scott Nichol

Scott enhances Borland's Turbo Vision by creating a method to extend event generation, which can be used to perform periodic or background functions.

EMBEDDED SYSTEMS

DESIGNING A REAL-TIME DEBUGGER
by David Potter

Intel's iRMX for Windows makes it possible for you to write real-time, deterministic applications for single-tasking DOS or cooperative multitasking Microsoft Windows.

TIME DILATION AND RELATIVISTIC DEBUGGING
by Edward N. Adams III

Debugging some programs is made a lot easier when you use compact, graphic displays.

NETWORKED SYSTEMS

DEBUGGING MOTIF WIDGETS
by Kamran Husain

Using test drivers simplifies the process of debugging motif widgets. Kamran presents one such test driver and discusses some of the common debugging pitfalls.

EXAMINING ROOM

EXAMINING TURBO PASCAL FOR WINDOWS
by Michael Floyd

Mike develops a general-purpose expert-system shell to see how Borland's Turbo Pascal for Windows measures up as a Windows programming tool.

PROGRAMMER'S WORKBENCH

DEVELOPING A PORTABLE C++ GUI CLASS LIBRARY
by Andreas Meyer

Where would you start if you had to write a portable application for Windows, Presentation Manager, Motif, Open Look, and the Macintosh?

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

What, Michael worry? You bet, especially when it comes to user-interface rights, wrongs, and usability.

C PROGRAMMING
by Al Stevens

D-Flat++ is a class library that implements the features necessary to launch a single-user, single-document application, while supporting CUA menus, dialog boxes, and controls.

STRUCTURED PROGRAMMING
by Jeff Duntemann

Software design means different things to different kinds of applications. Jeff investigates the issues surrounding program specification, design, and implementation.

GRAPHICS PROGRAMMING
by Michael Abrash

Run-slice line drawing gains its efficiency by taking maximum advantage of available information, while minimizing redundant work. The result is high-performance graphics.

PROGRAMMER'S BOOKSHELF
by Ray Duncan

Ray has high praise for fellow columnist Andrew Schulman's Undocumented Windows.

FORUM

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Tami Zemel

Copyright © 1992, Dr. Dobb's Journal


December 1992 - NEW WORLDS OF DATA

FEATURES

SPATIAL DATA AND THE VORONOI TESSELLATION
by Hrvoje Lukatela and John Russell

Representing data in terms of spatial relationships is becoming increasingly common. Our authors use trigonometry, 3-D vector algebra, and Voronoi tessellation to build a complete geographical information system to explore spatial data types.

SOUND AS A DATA TYPE
by Aaron E. Walsh

Programming for sound has never been simple. QuickTime, Apple's system-wide architecture for handling dynamic data, is a first step towards audio ease-of-coding. Aaron presents a technique for converting traditional Macintosh sound resources to QuickTime sound data samples.

PERSISTENT OBJECTS IN C++
by Al Stevens

Al discusses persistence, then presents a method for adding persistent objects to C++ programs by deriving applications classes from a persistent base class.

PERSISTENCE IN A PROGRAMMING ENVIRONMENT
by Richard P. Gabriel

When Dick's group first started working on a programming environment for C and C++, there was no commercially available way to add persistence to objects. He describes what he was trying to do, why he needed persistence, his first attempts at adding persistence, and finally, his solution.

SPLAY TREES
by Dean Clark

Splay trees are self-adjusting data structures that rearrange themselves in response to changing program operations. They're easy to code and made maintain, have low overhead, and can improve performance.

A CURMUDGERY ON PROGRAMMING LANGUAGE TRENDS
by Scott Guthery

In the December 1989 DDJ, Scott presented his highly controversial "Are the Emperor's New Clothes Object Oriented?". Now, three years later, he takes a second look to see if anything has changed.

EMBEDDED SYSTEMS

SIMULATION AND TESTBOARD FOR EMBEDDED-SYSTEM DESIGN
by Michael Kutter

With software simulation and hardware testboards, you can debug and test code in parallel with hardware development. Michael explains how these techniques were applied to the software-development cycle of an embedded controller.

NETWORKED SYSTEMS

SIMULATING HYPERCUBES IN UNIX, PART I
by Jeffery W. Hamilton and Eileen M. Ormsby

In this two-part article, our authors describe how you can simulate the execution of a hypercube program on a standard UNIX system. This month, they focus on partitions, the basic building blocks of a hypercube system. Next month, they present the source code for the simulator and discuss how to use the system.

EXAMINING ROOM

INSIDE THE ISO-9660 FILESYSTEM FORMAT
by William Frederick Jolitz and Lynne Greer Jolitz

For delivering large amounts of data, CD-ROMs give you the biggest bang for the buck. Bill and Lynne untangle the ISO-9660 filesystem format and present utilities to decode a CD-ROM and view a file.

PROGRAMMER'S WORKBENCH

BLOBS AND OBJECT-ORIENTED DATABASE ENGINES
by Sam Felton

In today's database parlance, sound and image data are known as "binary large objects," or BLOBs for short. Sam examines one approach to constructing and storing BLOBs in an object-oriented DBMS system.

COLUMNS

PROGRAMMING PARADIGMS
by Michael Swaine

Michael recognizes a good thing when he sees it. In this month's column, he and Ronjon Nag, cofounder of a company developing cursive handwriting-recognition tools, talk about ink as a data type.

C PROGRAMMING
by Al Stevens

A D-Flat++ program starts with an application window on a desktop. Al presents the source files that contain the member functions for the desktop and its devices.

STRUCTURED PROGRAMMING
by Jeff Duntemann

Until now, Jeff never paid much attention to the notion of Turbo Vision resources--something akin to an ISAM manager for an ordinary Turbo Vision stream. He also uses Blaise's Turbo Vision Development Toolkit to explore resources.

GRAPHICS PROGRAMMING
by Michael Abrash

Michael implements a fast assembler version of his run-length slice line-drawing routine before returning to the subject of page flipping.

PROGRAMMER'S BOOKSHELF
by Andrew Schulman

One of the best discussions you'll find of demand-page virtual memory is in Harold Stone's High-Performance Computer Architecture, the book Andrew examines this month.

DEPARTMENTS

EDITORIAL
by Jonathan Erickson

LETTERS
by you

SWAINE'S FLAMES
by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST
by Tami Zemel

Copyright © 1992, Dr. Dobb's Journal


Special Issue 1992 - C++ PROGRAMMING

FEATURES

A CONVERSATION WITH BJARNE STROUSTRUP
by Al Stevens

Contributing editor Al Stevens last interviewed C++ language designer Bjarne Stroustrup in 1989. In this issue, Al and Bjarne pick up where they left off.

STANDARD C++: A STATUS REPORT
by Dan Saks

Although the ANSI C++ technical committee has been working on a formal standard for C++ for almost three years, it has yet to release a draft standard to the public. Dan explains how the C++ language definition has changed as it evolves into a standard and looks at the prospects for a standard C++ library.

A C++ BEAUTIFIER
by Tim Maher

Tim's approach to writing a C++ beautifier is based on the UNIX "filter" model. This entailed his using a preprocessor to disguise C++ as C, standard C tools to effect beautification, then a post-processor to convert the disguised C++ back to its original form.

TEMPLATES IN C++
by Nicholas Wilt

Templates open up a whole new world for C++ programmers by allowing compact and efficient implementation of container classes and other parameterized types. They also allow general, efficient implementation of algorithms with a minimum of code duplication.

TOWARD A LESS OBJECT-ORIENTED VIEW OF C++
by Harris Shiffman

Harris makes the argument that the modular nature of C++ makes it both a weak object language and a strong general-purpose language. He adds that C++ is an object-oriented language a C programmer can appreciate because it is oriented first toward execution performance, then toward flexibility.

WHY C++ WILL REPLACE FORTRAN
by Thomas Keffer

C++ has tremendous potential in numerics, something that has gone largely unnoticed because other OOP languages lack the efficiency required to do numerics. Consequently, C++ may be the first serious challenger to Fortran in the world of numerical programming.

USING MULTIPLE INHERITANCE IN C++
by Tom Cargill

Multiple inheritance, which permits a class to be derived from two or more base classes, is one of the most complex and misunderstood C++ features. Tom untangles the multiple-inheritance web and describes where it can be used most effectively.

IMPLEMENTING CURVES IN C++
by Stephen P. Johnson and Tom McReynolds

Steve and Tom implement a wide variety of free-form curves using C++ class hierarchies. Among the curves presented are Hermite curves, Bezier curves, B-spline (NUB) curves, Catmull-Rom, and NURBs.

EDITORIAL

EDITORIAL
by Ray Valdes

Copyright © 1992, Dr. Dobb's Journal


January 1993 - POWER PROGRAMMING IN 32-BITS

FEATURES

EXTENDING WINDOWS TO 32 BITS by Steven Baker

Steven discusses the ins and outs of 32-bit Windows development, focusing on 32-bit C compilers and Windows extenders. But he points out that for some applications, moving to 32-bit Windows makes sense only if the potential of 32-bit CPUs can be exploited.

PORTING FROM 16-BIT TO 32-BIT EXTENDED DOS by Joe Huffman

Among the more subtle pitfalls of converting 16-bit applications to 32-bit are those involving memory protection, integer size, and structure size and padding. Joe shows you how to avoid these problems - and what to do when you can't.

64-BIT PROGRAMMING IN A 32-BIT WORLD by Andy Nicholson

Andy presents proven guidelines for writing C code that's portable across 16-, 32-, or 64-bit processors. The rules include handling high-level and low-level structures, structure packing and word alignment, and machine addressing characteristics.

LUC PUBLIC-KEY ENCRYPTION by Peter Smith

LUC public-key encryption may be the first cryptographic scheme to seriously challenge RSA's 15 years of dominance. Unlike RSA, LUC uses calculation of Lucas functions instead of exponentiation for encoding and decoding.

DDJ HANDPRINTING RECOGNITION CONTEST WRAP-UP by Ray Valdes

Who's the fastest? How about the most accurate? And how did they do it? Ray presents the results of the first-ever handprinting-recognition contest.

EMBEDDED SYSTEMS

WINDOWS DDE FOR REAL-TIME APPLICATIONS by Kamal Shah

Window's dynamic data exchange provides a powerful mechanism for communication among applications. Kamal examines how real-time DDE-aware applications can communicate with Windows applications using iRMX for Windows DDE extensions.

NETWORKED SYSTEMS

SIMULATING HYPERCUBES IN UNIX, PART II by Jeffery W. Hamilton and Eileen M. Ormsby

In the second installment of this two-part article, our authors present the source code for a simulated hypercube system that runs under standard UNIX and describe how you can use the system.

EXAMINING ROOM

PORTING TO THE WIN32 API by Peter Handsman

Peter discusses his experiences in porting nearly 35,000 lines of C++ code from the Windows NT 32-bit API.

PROGRAMMER'S WORKBENCH

PROFILING FOR PERFORMANCE by Joseph M. Newcomer

Profiling tools were developed to help identify those parts of a program which are consuming significant computing resources so that you can optimize program performance. Still, its necessary to understand what's being measured, how accurately it's being measured, and the reliability of the resulting numbers.

COLUMNS

PROGRAMMING PARADIGMS by Michael Swaine

Mathematician Steven Wolfram, developer of Mathematica, takes time out to talk with Michael in this two-part column. This month they discuss the nature of programming languages and why they're so slow to change.

C PROGRAMMING by Al Stevens

D-Flat++ development continues, as Al takes a look at the DF++ portability layer that normalizes the code for different compilers and the definition of the base DFWindow class.

STRUCTURED PROGRAMMING by Jeff Duntemann

Jeff dives into the recently released Borland Pascal with Object 7.0, the latest incarnation of the venerable Turbo Pascal. This new version can be Windows or DOS hosted and targeted, and includes a royalty-free DOS extender.

GRAPHICS PROGRAMMING by Michael Abrash

Dirty rectangles can help you clean up the visual quality of graphics animation. With this technique, a copy of display memory is kept in offscreen memory where drawing takes place. Drawings are then copied to the screen in a burst.

PROGRAMMER'S BOOKSHELF by Al Stevens

Pamela McCorduck's Aaron's Code tells the story of Harold Cohen, his Aaron software, and the quest for realistic computer-generated art.

FORUM

EDITORIAL by Jonathan Erickson

LETTERS by you

SWAINE'S FLAMES by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST by Tami Zemel

Copyright © 1993, Dr. Dobb's Journal


February 1993 - COGNITIVE COMPUTING

FEATURES

WHAT IS COGNITIVE COMPUTING? by R. Colin Johnson

Cognitive computing is an emerging set of problem-solving methods that mimic the intelligence found in nature to solve tough problems that resist straightforward analysis. In addition to detailing what the discipline is, Colin examines how cognitive computing technologies are finding their way into the real world of application development.

GENETIC ALGORITHMS by Richard Spillman

Genetic algorithms randomly search for the best answer by modeling the way in which human genetic processes seem to operate. After explaining how genetic algorithms work, Richard implements one in Prolog.

CELLULAR AUTOMATA FOR SOLVING MAZES by Basem A. Nayfeh

Maze-solving algorithms have long been of interest because of their use in routing problems. Basem shows you how to use a cellular-automata algorithm implemented in C to run a maze.

FUZZY LOGIC IN C by Greg Viot

Fuzzy logic is a powerful problem-solving technique that's particularly useful in applications involving decision making or with problems not easily definable by practical mathematical models. Greg presents a general-purpose, fuzzy-based inference engine written in C.

EMBEDDED SYSTEMS

A NEURAL-NETWORK AUDIO SYNTHESIZER by Mark Thorson, Forrest Warthman, and Mark Holler

Our authors use intel's neural-net chip to build a powerful sound synthesizer that generates a remarkable range of audio effects, from unique space-age and science-fiction sounds to passages that sound like heart beats, drums, gongs, porpoises, birds, engines, and musical instruments such as violas and flutes.

NETWORKED SYSTEMS

UNTANGLING THE WINDOWS SOCKETS API by Mike Calbaum, Frank Porcaro, Mark Ruegsegger, and Bruce Backman

The Windows Sockets API is an open, standard programming interface for developing TCP/IP) network applications for Microsoft Windows. As a standardized programming interface, the API allows you to develop one application that will run unmodified over any TCP/IP network stack with a Windows Sockets-compliant API.

EXAMINING ROOM

INSIDE THE WINDOWS MESSAGING SYSTEM by Matt Pietrek

All Windows applications depend on the Windows messaging system, and understanding how the system works is fundamental to writing powerful Windows programs. Matt provides a detailed look at this complex, not fully documented area of Windows, and presents pseudocode for key routines.

PROGRAMMER'S WORKBENCH

NEURAL NETS FOR PREDICTING BEHAVIOR by James F. Farley and Peter D. Varhol

An off-the-shelf neural-network package is used to build a software model that takes sensor input and predicts wind speed and direction as output. Along the way, it solves problems like noisy data.

COLUMNS

PROGRAMMING PARADIGMS by Michael Swaine

Michael wraps up his two-part conversation with Stephen Wolfram, developer of Mathematica. This month, they discuss science, programming, business, and why some mathematicians don't like Stephen.

C PROGRAMMING by Al Stevens

This month AI looks at D-Flat++'s Application, Control, and textBox window classes, then compares the Source code for these modules with the Source code for the same features.

STRUCTURED PROGRAMMING by Jeff Duntemann

Jeff decides it's time to talk about intelligently managing data, noting that structured languages are particularly weak at data management. He then shares his notions of good database design.

GRAPHICS PROGRAMMING by Michael Abrash

Michael continues his foray into dirty-rectangle animation, a technique capable of producing animation of very high visual quality without help from video hardware or extra, nondisplayed video memory. This month's assembly language implementation of low-level drawing routines really boosts performance.

PROGRAMMER'S BOOKSHELF by Ray Duncan

There's a passel of recent books on navigating the Internet, and Ray examines three of them: Zen and the Art of the Internet, The Whole Internet User's Guide, and A Directory of Electronic Mail Addressing and Networks.

FORUM

EDITORIAL by Jonathan Erickson

LETTERS by you

SWAINE'S FLAMES by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST by Tami Zemel

Copyright © 1993, Dr. Dobb's Journal


March 1993 - DATA STRUCTURES AND FILE FORMATS

FEATURES

THE FLIC FILE FORMAT by Jim Kent

As their name suggests, flic files are a sequence of still frames which can be rapidly flipped through to achieve the illusion of movement - the software equivalent of movies. Among the applications and tools that support the flic file format are the Autodesk's Animator, IBM's Ultimedia Tool Series, and Microsoft's Video for Windows.

FILE CONVERSION USING C++ TEMPLATES by Timothy Butterfield

Tim shows how C++ templates can be used to build parser-based "black box" conversion class that allows you to use various data types and processes without having to rewrite the basics of the conversion engine for each new combination.

COMPOUND DOCUMENTS by Lowell Williams

Compound documents contain a mixture of different data - text, line art, raster graphics (images), tabular data, and even audio and video. Lowell makes the case that the now-familiar ASCII can no longer fulfill its role as a universal document-interchange standard and that we should begin examining compound ASCII alternatives like ODL, SGML, and CDA.

DESIGNING COMPLEX DATACENTRIC APPLICATIONS by Paul Bonneau

Paul discusses the data structures and client/server architecture of HyperChem, a molecular modeling tool that runs on PCs and Silicon Graphics workstations. Implemented in about 500,000 lines of C code, HyperChem lets you create three-dimensional atomic structures, visualize and manipulate their structural relationships, and perform classical and semi-empirical, quantum mechanical calculations.

A DOS REDIRECTOR FOR SCSI CD-ROM by Jim Harper

Getting data from CD-ROM to where your application can use it isn't straightforward under MS-DOS. Jim examines how this process works under DOS, then presents the code for an MSCDEX-like extension to MS-DOS that allows access to either High Sierra or ISO-9660 CD-ROMs. This redirector works in conjunction with a TSR-based driver for SCSI devices.

JULIAN AND GREGORIAN CALENDARS by Peter J.G. Meyer

Peter presents a C function which converts any date within an 11-million-year period in either the Gregorian calendar or the Julian calendar into a unique number in the range of approximately -2,000,000,000 through 2,000,000,000.

EMBEDDED SYSTEMS

TOOLS FOR EMBEDDED-SYSTEMS DEBUGGING by Christopher Perez

Tools such as microprocessor in-circuit emulators, microprocessor on-chip debug circuitry, an logic analyzers can make the tough job of embedded-systems designers easier. Chris focuses on the JTAG specification and techniques for getting the most of logic analyzers.

NETWORKED SYSTEMS

INSIDE BTRIEVE FILES by Douglas Reilly

Knowing something about Btrieve's undocumented features can make the difference between success and failure when it comes to recovery of damaged Btrieve-compressed records.

EXAMINING ROOM

EXAMINING PC AUDIO by John W. Ratclif

There's a lot of noise being made about the need for software support for sound. John examines the options available to PC programmers, then presents a sound driver that produces high-quality digitized sound without requiring any extra hardware.

PROGRAMMER'S WORKBENCH

PROXY: A SCHEME-BASED PROTOTYPING LANGUAGE by Burt Leavenworth

Proxy, a Scheme-based interactive language with a C-like syntax, provides all the high-level data structures - sets, maps, sequences, and objects - useful for software design and prototyping. In addition to showing you how the language can be used in a typical prototyping session, Burt gives you the Proxy interpreter.

COLUMNS

PROGRAMMING PARADIGMS by Michael Swaine

The basic idea behind visual programming is , "What you see is what you'll make." Michael examines the this paradigm, using Serius's development tools for the Macintosh.

C PROGRAMMING by Al Stevens

More D-Flat++ control classes are presented this month, in particular those that provide support for pop-down menus, dialing boxes, radio and command buttons, the check box, and the base class for buttons.

STRUCTURED PROGRAMMING by Jeff Duntemann

Jeff looks at client/server database management and examines the APIs ranging from SQL to DLLs. He then speculates on what kind of database support Pascal vendors should begin thinking about.

UNDOCUMENTED CORNER edited by Andrew Schulman

In his inaugural column, Andrew presents Joe Newcomer and Bruce Horn's analysis of the undocumented RGNOBJ structure in Microsoft Windows. The region feature, which is maintained by the Windows GDI, is an arbitrarily-bounded area that can be used for filling, outlining, and clipping.

PROGRAMMER'S BOOKSHELF by Ray Valdes

Ray examines books that focus on artificial life: Artificial Life II, Emergent Computation, and John Holland's 1992 edition of Adoption on Natural and Artificial Systems.

FORUM

EDITORIAL by Jonathan Erickson

LETTERS by you

SWAINE'S FLAMES by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST by Tami Zemel

Copyright © 1993, Dr. Dobb's Journal


April 1993 - ALGORITHMS AT WORK

FEATURES

ALGORITHMS FOR STEREOSCOPIC IMAGING by Victor J. Duvanenko and W. E. Robbins

Stereoscopic, or true 3-D, images take into account depth information that's lost when conventional 3-D images are projected onto a PC's 2-D screen. In addition to discussing hardware and software stereoscopic requirements, our authors present and implement algorithms for generating left- and right-eye views fundamental to stereoscopic viewing.

GENETIC ALGORITHMS AND DATABASE INDEXING by Joe Celko

Genetic algorithms mirror the natural selection process and just may be one solution to the thorny problem of finding near-optimal indexes for database applications. Joe describes how this works and speculates on how existing systems might use this genetic-algorithm technology.

TEXT EDITORS: ALGORITHMS AND ARCHITECTURES by Ray Valdes

From Stallman's GnuEmacs to Microsoft's Word, text editors are one of the most taken-for-granted, yet most often used, applications around. When done right, however, the choice of core algorithms and how they're implemented in the overall architecture can make the difference between a good editor and a great one.

DIFFERENTIAL COMPRESSION ALGORITHMS by James H. Sylvester

At first glance, differential image compression suggests some degree of graphics dependence. As James points out, however, a close look at source-code implementations reveals that data need not be graphics related at all.

EMBEDDED SYSTEMS

A WAVELET ANALYZER by Mac A. Cody

The wavelet analyzer is a variation of the spectrum analyzer, which uses fast wavelet transforms rather than FFTs to analyze signals. Mac implements the fast wavelet transform as a recursive routine on a DSP board, then displays the input signal and wavelet-transform coefficients as they're generated in real time.

NETWORKED SYSTEMS

ROUTING ALGORITHMS FOR INTERNETWORKING by William Stallings

When LANs and other networks are joined in an internet for distributed processing, proper routing of packets from source to destination can become a problem. Bill examines Dijkstra's algorithm and describes how routing protocols make use of it.

EXAMINING ROOM

MEASURING FRAGMENTATION by James Harrington

As a program dynamically allocates memory, available memory is subdivided and fragmented into blocks - often leading to program failure. James examines how some popular compilers and memory managers handle fragmentation, then presents a method for quantifying the degree of fragmentation.

PROGRAMMER'S WORKBENCH

PROGRAMMING FOR THE OS/2 2.0 WORKPLACE SHELL by Joel Barnum

Joel details what you'll need to do to convert OS/2 1.x programs to work with OS/2 2.0's Workplace Shell, the user-interface replacement for Presentation Manager. The datacentric Workplace Shell lets users manipulate data directly, rather than first launching an executable and opening a data file.

COLUMNS

PROGRAMMING PARADIGMS by Michael Swaine

Is virtual reality in its various forms -- sight, sound, and touch -- the psychedelic technology of the 90's? Is it useful? Is it addictive? Or is it just another white rabbit in a purple haze trying to sell more boxes? Michael dusts off his tie-dyed thinking cap to ponder these and other important questions.

C PROGRAMMING by Al Stevens

The D-Flat++ menu system is a hierarchical organization of related classes at the top of which is the Application window. After messing with MIDI, Al presents this hierarchy of objects along with a D-Flatt++ application that shows how an application program defines a menu.

STRUCTURED PROGRAMMING by Jeff Duntemann

As the shower curtain falls on Jeff's column, he reflects on the world of software development, how it has changed over the years, and where it all might be heading.

UNDOCUMENTED CORNER edited by Andrew Schulman

Andrew presents Mike Shiels's analysis of the underlying interface Microsoft uses to implement the resident LAN Manager API, named pipes, and mailslot interfaces, focusing on the "undocumented" interrupt 21h and interrupt 2Fh function calls.

PROGRAMMER'S BOOKSHELF by Ray Duncan

Ray continues his travels over, under, and through the Internet and books about it. This month he examines The Internet Companion, Exploring the Internet, and Internet: Mailing Lists.

FORUM

EDITORIAL by Jonathan Erickson

LETTERS by you

SWAINE'S FLAMES by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST by Tami Zemel

Copyright © 1993, Dr. Dobb's Journal


May19:93 - OPERATING ENVIRONMENTS

FEATURES

THE COMMONS OF INFORMATION by Lee Felsenstein

Will tomorrow's computer networks meet our commercial, social, and political interaction needs in the same way as yesteryear's village commons or today's shopping malls? One of the true personal-computer pioneers looks back at how people and computers interact, and explores what that means for the future.

MODELESS DIALOG BOXES FOR WINDOWS by Joseph M. Newcomer

Joe uses modeless dialog boxes to speed up construction of both user and developer interfaces. Using modeless dialog boxes effectively, however, requires awareness of what Windows does when you want to iconize these dialog boxes and have them display unique icons.

OS/2 2.X INITIALIZATION FILES AND PROFILE MANAGEMENT by Derrel Blain, Kurt Delimon, and Jeff English

All kinds of information is hidden inside OS/2 initialization files, but you can't get to it because of the binary form of INI files. Our authors present a file browser and editor - based on the OS/2 2.0 Profile Manager API - that lets you examine INI file contents.

DYNAMIC LINKING UNDER BERKELEY UNIX by Oliver Sharp

Dynamic linkers are invoked on pieces of code at run time, combining the new code with executing programs. Oliver discusses how this is handled under Berkeley UNIX, and presents the source to a dynamic linker he's used with SunOS (Sun 3 and SPARC), BSD 4.3 Reno, and Dynix.

A PORTABLE LIBRARY FOR EXECUTING CHILD PROCESSES by Matt Weisfeld

One of C's big advantages is the ease with which you can port code between environments. Matt presents a library that makes the creation and execution of child processes portable across different platforms including VMS, UNIX, and DOS.

A VISUAL APPROACH TO DATA ACQUISITION by James F. Farley and Peter D. Varhol

Our authors use LabView for Windows to prototype a data-acquisition system for collecting data from infrared sensors. This tool lets you build applications by manipulating icons in a window instead of writing code.

EMBEDDED SYSTEMS

FLASH FILE SYSTEMS by Drew Gislason

Flash memory packaged in solid-state, credit card-size PCMCIA cards is starting to change the face of embedded and portable systems. Drew examines Flash file systems and presents one that's FAT-like.

NETWORKED SYSTEMS

YOUR OWN NETWORK DATA SNOOPER by Rahner James

This network data snooper lets you peek into network request packets and their corresponding responses and logs the received packets to a file for later retrieval. The snooper also lets you tune in to specific node addresses and sockets.

EXAMINING ROOM

DIRECT MEMORY ACCESS FROM PC FORTRANS by Kenneth G. Hamilton

Standard Fortran has never supported direct memory access because large multiuser systems had to worry about conflicting , concurrent programs. With single-user, DOS-based PCs, however, this isn't a problem. Ken examines the issues involved in performing direct memory access using PC Fortran compilers from Microsoft, Watcom, Lahey, and SVS.

PROGRAMMER'S WORKBENCH

BUILDING A PORTABLE PROGRAMMING ENVIRONMENT by Ian E. Gorman

Ian describes the working PC development environment he's built using the MKS Toolkit, a set of UNIX-like utilities for MS-DOS. It's his contention that the environment makes him much more productive when using a DOS-based PC to write programs for platforms ranging from micros to mainframes.

COLUMNS

PROGRAMMING PARADIGMS by Michael Swaine

Michael explains the phenomena of the "open programmer" and, unsurprisingly discovers that visionaries like Richard Feynman, Donald Knuth, Raymond Kurzweil, Marvin Minsky, and Richard Stallman all share an open state of mind.

C PROGRAMMING by Al Stevens

D-Flat++ is put on the backburner this month, as Al develops a tool he's needed for quite a while. - a text-mode screen grabber for generating laser-printer printouts.

ALGORITHM ALLEY by Tom Swan

In this inaugural column, Tom sorts out sorting algorithms. For starters, he zeroes in on topological sorting, a method that relies on a data set's partial ordering and preserves existing relationships between elements.

UNDOCUMENTED CORNER edited by Andrew Schulman

Jeff Cogswell and his cohorts examine the Windows palette manger which oversees the graphics-card registers that contain the colors currently available for display. The palette manager is intended to solve the problem of a multitasking system allowing all programs to have simultaneous access to a single graphics card.

PROGRAMMER'S BOOKSHELF by Al Stevens

Billionaire Bill and his big bucks - how he got them and what he does with them - are described in Hard Drive, the focus of this month's book review.

FORUM

EDITORIAL by Jonathan Erickson

LETTERS by you

SWAINE'S FLAMES by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

Copyright © 1993, Dr. Dobb's Journal


June 1993 - ASM AND ARCHITECTURES

FEATURES

COMPUTER SCIENCE AND THE MICROPROCESSOR by Nick Tredennick

You bet it's a hardware problem, but the decisions chip designers make impact the software tools you use, programming techniques you employ, and applications you write. From the 8008 to the Pentium, Nick examines trends in the microprocessor arena.

PROGRAMMING THE PENTIUM PROCESSOR by Ramesh Subramaniam and Kiran Kundargi

Intel's recent entry into the 32-bit microprocessor race ups the performance ante. Our authors describe the Pentium's superscalar, pipelined architecture, focusing on floating-point code. John Dahms shares some of his experiences in writing a Pentium-aware compiler.

PROCESSOR DETECTION SCHEMES by Richard Leinecker

Knowing the processor--286, 386, or 486--means your program can include processor-specific code to improve application performance. Bob Moote adds Pentium-detection code, while Steve Heller discusses 80486 cache detection.

32-BIT FLOATING-POINT MATH by Al Williams

This approach to floating-point math uses 32-bit instructions. Although Al uses the 80386 as an example, these techniques can be applied to other 32-bit processors as well.

BONUS SECTION: SCIENTIFIC & ENGINEERING COMPUTING

DISTRIBUTED COMPUTING NOW: APPLICATION ENVIRONMENTS by Lowell S. Schneider and Stephen S. Murray

Our authors focus on the Astrophysics Data System and other applications that make the most of the distributed-computing paradigm.

OBJECT-ORIENTED FINITE-ELEMENT SOFTWARE by Al Vermeulen

Object-oriented languages promise that you can code at higher levels of abstraction than with traditional languages. Al examines spline-based, finite element models coded in C++, concentrating on bicycle-wheel load-deflection.

EXTENDING A VISUAL LANGUAGE FOR SIMULATION by Peter D. Varhol

Peter uses Turbo Pascal for Windows to extend VisSim, an off-the-shelf simulation package that provides a visual design environment for Microsoft Windows and UNIX/X.

NEURAL NETWORKS AND CHARACTER RECOGNITION by Ken Karnofsky

Ken tackles optical character recognition using Matlab's Neural Network Toolbox. Matlab integrates matrix computation, numerical analysis, and data analysis--and without traditional programming.

A GUI ENVIRONMENT FOR FORTRAN DEVELOPMENT by Vinod Anantharaman

VShell is an icon-based visual tool that aids Fortran development by simplifying the process of creating Fortran DLLs accessible from Visual Basic via drag-and-drop.

EMBEDDED SYSTEMS

DETECTING OUT-OF-RANGE REFERENCES by Chan Y. Lee

You've committed an out-of-range reference violation if you've attempted to access a memory location outside the permitted memory range. Chan discusses the implications of this for embedded systems designers, using AMD's 29200 RISC processor as an example.

NETWORKED SYSTEMS

HIPPI AND HIGH-PERFORMANCE LANS by Andy Nicholson

The high-performnace parallel interface (HIPPI) defines a standard for 100Mbyte/sec and 200-Mbyte/sec point-to-point links using 32- or 64-bit wide copper cabling. Andy examines HIPPI-based LANs and makes the case for peer-to-peer over client/server.

EXAMINING ROOM

EXAMINING MFC 2.0 by Michael Yam

Micrsoft claims that any application written under version 1.0 of the Microsoft Foundation Class Library (MFC) will run unmodified under MFC 2.0. He shows how he ported PT, a Windows-based periodic table originally written using MFC 1.0, to MFC 2.0.

PROGRAMMER'S WORKBENCH

A CROSS-PLATFORM PLUG-IN TOOLKIT by Ramin Firoozye

XPIN, the cross-platform plug-in toolkit Ramin presents here, helps you create portable applications that (currently) run on Windows and the Macintosh. Ramin's toolkit consists of a caller API and a plug-in skeleton.

COLUMNS

PROGRAMMING PARADIGMS by Michael Swaine

Rome wasn't built in three days--and neither BBS Michael set out to wire together using off-the-shelf objects.

C PROGRAMMING by Al Stevens

Al presents JOYKEY, a joystick-driven keyboard simulator designed to provide handicapped computer users with a simple means of interacting with PC's.

ALGORITHM ALLEY by Tom Swan

Permutation algorithms are useful for arranging a sequence in all possible ways. Tom examines how they're implemented by Niklaus Wirth and Robert Sedgewick.

UNDOCUMENTED CORNER edited by Andrew Schulman

Ron Burk uncovers undocumented features of Windows' WinHelp facility, giving you yet another powerful tool for Windows development.

PROGRAMMER'S BOOKSHELF by Jonathan Erickson

Fuzzy systems may or may not be logical. This month we examine fuzzy logic books, conference proceedings, and journals.

FORUM

EDITORIAL by Jonathan Erickson

LETTERS by you

SWAINE'S FLAMES by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

Copyright © 1993, Dr. Dobb's Journal


July 1993 - COMPUTER GRAPHICS

FEATURES

MORPHING IN 2-D AND 3-D

by Valerie Hall

From music videos to graphics software, morphing is changing the face of computer graphics. Valerie examines the major approaches to shape-changing software, covering both 2-D and 3-D techniques. We also describe George Wolberg's C implementation of his 2-D warping algorithm and Richard Goedeken's Rmorf, a DOS-based morphing program.

VGA PALETTE MAPPING USING BSP TREES

by Mark Betz

Simultaneously displaying multiple images--each of which uses a different VGA video color palette--requires a process known as "best-fit color matching." Mark presents a best-fit approach that's based on a data structure known as a "binary space-partitioning" (BSP) tree, then uses C++ to build a BSP tree to remap the colors in PCX files.

COLOR MODELS

by Bruce Schneier

RGB isn't the only game in town, at least when it comes to color models. Bruce examines alternatives to RGB, including CMY, HSV, HLS, and YIQ, and discusses how you get from one to another. Harry Smith adds insight on the HVC color model.

IMAGE PROCESSING USING QUADTREES

by Raj Kumar Dash

When it comes to raster-image processing, quadtrees provide reasonable storage savings while retaining an image's hierarchical information without loss of detail. This means you can perform image-processing operations and transfer the results when converting the quadtree back into a raster image. These characteristics are particularly useful when you're processing several images too large for storage in main memory.

EMBEDDED SYSTEMS

DEBUGGING REAL-TIME SYSTEMS

by Joseph M. Newcomer

When building complex real-time systems, there are a number of analysis and programming techniques that guarantee correct performance, among them informative breakpoints, in-core event traces, and timer dividing.

NETWORKED SYSTEMS

DISTRIBUTED COMPUTING NOW: DEVELOPMENT ENVIRONMENTS

by Lowell S. Schneider

Last month, Lowell discussed the NASA Astrophysics Data System (ADS) and the Earth Data System (EDS), applications typical of emerging distributed computing systems. This month, he looks under the hood and examines tools and techniques required to build large-scale distributed systems.

EXAMINING ROOM

EXTENDING STANDARDS FOR CD-ROM

by Lynne Greer Jolitz

Although ISO-compliant CD-ROMs are interchangeable and usable on any type of system, the minimalism that made the ISO-9660 standard successful is sometimes too minimal. Consequently, the Rock Ridge Group and others have developed extensions to give new life to CD-ROMs.

PROGRAMMER'S WORKBENCH

A MULTIMEDIA CLASS LIBRARY FOR WINDOWS

by John Musser

John enhances the Windows Media Control Interface to multimedia devices by designing and implementing a comprehensive C++ class library that provides object support for multimedia. The result is a set of objects that make programming multimedia easier and more robust, concise, and maintainable.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

You'd think they'd know better. After themselves suffering the barbs of philosophical arrows, Bayesian statisticians turned on fuzzy logic and its proponents with much the same fury that they were originally attacked.

C PROGRAMMING

by Al Stevens

Before filling in some gaps in the history of C, Al examines C++ templates--generic classes that take on meaning when they are compiled to support objects of some other concrete class.

ALGORITHM ALLEY

by Tom Swan

Despite advances in data-compression techniques, more often than not it's the combination of selected algorithms--along with knowledge of a data file's contents--that produces optimal results.

UNDOCUMENTED CORNER

edited by Andrew Schulman

Mike Maurice looks under the Windows hood to explore undocumented aspects of the Program Information File (PIF) format. PIF files contain information--flags, byte quantities, and the like--that guides the operating environment in starting and running DOS applications.

PROGRAMMER'S BOOKSHELF

by Ray Valdés

Ray examines two recently released, graphics-related books: Graphics Gems III, edited by David Kirk, and Fractal Image Compression, by Michael Barnsley and Lyman Hurd.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica Berg

Copyright © 1993, Dr. Dobb's Journal


August 1993 - C/C++ PROGRAMMING

FEATURES

THE HISTORY OF PROGRAMMING LANGUAGES

by K.N. King

It's been 15 years since the first History of Programming Languages conference brought together the inventors of Fortran, Basic, Lisp, Cobol, APL, and the like. In this special report, we cover this year's History of Programming Languages II conference which assembled the designers of C, C++, Pascal, Smalltalk, Ada, and other languages.

C/C++ STANDARDIZATION: AN UPDATE

by Rex Jaeschke

Rex, who's an active member of the Standard C, ISO C, and numerical C extensions groups, brings you up to date on C and C++ standardization processes.

STRATEGIES FOR BETTER LINKED LISTS

by Garyl Hester

Linked lists are fundamental tools used by any application that deals with variable types and data. Garyl discusses linked-list theory and presents a generic linked-list toolkit written in C.

C++ TEMPLATES

by Pete Becker

One of the benefits of C++ templates is they make it easier for you to write custom tools. From parameter types to instantiation, Pete turns templates inside-out, while Doug Reilly builds a C++ virtual-array template class to show how templates can be used.

CALLING C FUNCTIONS WITH VARIABLY DIMENSIONED ARRAYS

by John W. Ross

When it comes to passing multidimensional arrays, C could learn a few tricks from Fortran. John presents a programming technique whereby you can pass these arrays to a C function.

INDEXING IMAGE DATABASES

by Art Sulger

Document-imaging systems must store and retrieve large amounts of unstructured data. The algorithm Art presents here, implemented as a C++ class, is the basis of an indexing system that accomodates many different image-file formats.

EMBEDDED SYSTEMS

PROGRAMMING THE MOTOROLA 68332

by Jack J. Woehr

Jack examines Motorola's 68332 time-processing unit (TPU) and queued serial module (QSM), presenting Forth code for programming QSM registers.

NETWORKED SYSTEMS

NETWORK ACCESS TO CD-ROMS

by John H. McCoy and Wuhsiung Lu

To provide access to CD-ROMs across a NetBIOS-based network, John and Wuhsiung implemented this client/server architecture which supports file redirection and ancillary MSCDEX functions.

EXAMINING ROOM

INTEGRATING DESKTOP MAPPING WITH GEOGRAPHIC DATA

by Peter D. Varhol

Mapping engines give you tools for combining mapping functions with traditional database or spreadsheet data. Peter shows how TerraView, a C library for displaying and manipulating maps, teams up with the Microsoft Access database system.

PROGRAMMER'S WORKBENCH

A QUICK PORT WITH QUICKWIN

by Al Williams

Al ports Turtle, his DOS-based turtle-graphics program, to Windows 3 using QuickWin, the Visual C++ library designed for DOS-to-Windows ports.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

What the heck is going on at Apple? Between (what he refers to as) MacOpen, MacDOS, Macnix, MacRISC, and MacNeXT, our MacMichael wonders how far Apple can push the cross-platform envelope.

C PROGRAMMING

by Al Stevens

There's more to building a custom PC keyboard than parts and cables--you also have to know how the keys interact with the electronics. Al presents software that reads and displays I/O ports, gets keyboard scan codes for the selected keys, and converts push-buttons to keystrokes.

ALGORITHM ALLEY

by Tom Swan

To understand Windows bitmap compression, Tom writes a set of test programs that compress and decompress pixel values stored in plain text files. He then describes the algorithms and presents two C++ programs in the test suite.

UNDOCUMENTED CORNER

edited by Andrew Schulman

Windows .RES files, generated by the Windows resource compiler, contain the binary images of Windows menus and dialogs prior to their inclusion in executable files. Alex Fedorov and Dmitry Rogatkin unravel the .RES file format.

PROGRAMMER'S BOOKSHELF

by Ray Duncan

Ray wraps up his multipart review of Internet books and provides a comprehensive list of Internet-focused books.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

Copyright © 1993, Dr. Dobb's Journal


September 1993 - NUMERICAL PROGRAMMING

FEATURES

RECURSIVE WORLDS

by Clifford A. Pickover

Recursion is fundamental to computer science, mathematics, biology, art, and even linguistics. Cliff examines recursive lattices, classes of self-similar objects that can easily be constructed using checkerboards of different sizes.

ARBITRARY PRECISION FLOATING-POINT ARITHMETIC

by Frederick C. Motteler

Here's a general-purpose C library for extended precision and IEEE-754 compatibility. The K&R/ANSI C/C++ compatible package supports single, double, double-extended, and longer, IEEE-754-like formats and is portable across operating systems including UNIX and MS-DOS.

ALGEBRA AND THE LAMBDA CALCULUS

by Aubrey Jaffer

Aubrey describes how he implemented lambda calculus in "Jacal," a symbolic mathematics system for the simplification and manipulation of equations.

EXAMINING THE WINDOWS AARD DETECTION CODE

by Andrew Schulman

Andrew takes a close look at the Windows "AARD" code which, under certain conditions, can generate a mysterious error message.

EMBEDDED SYSTEMS

THE Z80180 AND BIG-NUMBER ARITHMETIC

by Burton S. Kaliski, Jr.

There's nothing difficult about performing big-number arithmetic on powerful 32-bit processors like the 486 or Pentium. But where do you start if you want to implement 512-bit operations on 8-bit controllers? That's the problem Burt recently faced--and here's his solution.

NETWORKED SYSTEMS

ACCESSING NETWARE SQL FILES WITHOUT NETWARE SQL

by Douglas Reilly

Doug shares techniques that let you use Btrieve, NetWare's SQL file-manager engine, to duplicate the functionality of NetWare SQL. This gives access to NetWare SQL files without requiring your users to have NetWare SQL.

EXAMINING ROOM

PORTING FROM WORKSTATIONS TO PCs

by Barr E. Bauer

Porting compute- and data-intensive Fortran applications from high-performance workstations to low-cost PCs has been a promise waiting for fulfillment. Barr describes his experiences in porting a simulated-annealing program, originally written for the VAX, to a 386SX platform.

PROGRAMMER'S WORKBENCH

MODELING SYSTEMS WITH POLYNOMIAL NETWORKS

by Peter D. Varhol

Polynomial networks, which are based on the premise that different combinations of polynomials can minimize the error between derived and expected outputs, enable you to quickly build systems for predicting behavior.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

According to Michael, AppleScript is Apple's idea of what a scripting system can and ought to be, at least on a 1993-vintage graphical user interface and operating system.

C PROGRAMMING

by Al Stevens

Al examines the next hot C++ language feature--exception handling. As he explains, exception handling allows one part of a program to detect and report exceptional conditions and another part to handle them.

ALGORITHM ALLEY

by Tom Swan

Last month, Tom introduced algorithms and test programs for compressing and decompressing Windows bitmap files. This month, he presents the remaining test programs and a C++ utility that compresses real 256-color bitmap files.

UNDOCUMENTED CORNER

edited by Andrew Schulman

In this first installment of a two-part article, Pete Davis documents the undocumented Windows .HLP file format. This month, Pete explains the basics of the "WHIFS" B-tree system, and explains a few of the internal files.

PROGRAMMER'S BOOKSHELF

by Lynne Greer Jolitz

While you can't keep network systems and data under lock and key, there are security techniques you can still employ. Lynne examines the approaches presented in UNIX System Security and UNIX Installation, Security, and Integrity.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

Copyright © 1993, Dr. Dobb's Journal


October 1993 - BEYOND C++

FEATURES

PROGRAMMING LANGUAGE GUESSING GAMES

by P.J. Plauger

Speculating on the eventual success or failure of a programming language is a popular, if not demanding, pastime where everyone's best guess is as good as anyone else's.

THE C+@ PROGRAMMING LANGUAGE

by Jim Fleming

C+@ (pronounced "cat"), an object-oriented language out of AT&T Bell Labs, has the syntax of C and the power of Smalltalk. Unlike C++, however, C+@ includes a library of more than 350 classes.

THE PARASOL PROGRAMMING LANGUAGE

by Robert Jervis

Parasol, short for "Parallel Systems Object Language," was influenced by C and Smalltalk, although the design also reflects C++, CLU, Algol, and Turbo Pascal.

THE SATHER PROGRAMMING LANGUAGE

by Stephen M. Omohundro

Sather, a language that's simple, interactive, and nonproprietary, has parameterized classes, object-oriented dispatch, statically-checked strong typing, multiple inheritance, garbage collection, and more.

THE LIANA PROGRAMMING LANGUAGE

by Ray Valdes

Liana is an object-oriented programming language specifically designed for creating Windows applications. Like C++, Liana uses classes and member functions to provide encapsulation, inheritance, and polymorphism. Unlike C++, Liana does not use pointers or support multiple inheritance.

THE BETA PROGRAMMING LANGUAGE

by Steve Mann

Since Beta was designed by the same community that developed Stimula, it's no surprise that this language resembles its object-oriented predecessor.

THE EIFFEL PROGRAMMING LANGUAGE

by Robert Howard

Eiffel is a class-based language that supports multiple and repeated inheritance, selective exporting, strong type checking, parameterized classes, dynamic binding, garbage collection, and exception handling.

DAVE'S RECYCLED OO LANGUAGE

by David Betz

David dusts off AdvSys, an object-oriented adventure-writing language, adding multiple inheritance to it. The result is "Dave's Recycled Object-Oriented Language" (or "Drool" for short).

THE ART OF PRODUCT LAUNCHES

by Diane McGary

To celebrate the 10th anniversary of the Software Entrepreneurs' Forum, Diane shares guerrilla marketing tips for successfully getting your software into user's hands.

C++ MANIPULATORS AND APPLICATORS

by Reginald B. Charney

C++ manipulators and applicators are most often used with the I/O streams package. However, you can use them with any type of class which has overloaded operators.

EMBEDDED SYSTEMS

AVOIDING MICROCONTROLLER PROCESSOR PILE-UPS

by Eric McRae

Eric describes his winning entry in the Motorola 68HC16 design contest. The problem he faced involved dealing with multiple independent periodic processes running simultaneously.

NETWORKED SYSTEMS

NETWORKING WITH PERL

by Oliver Sharp

Perl, a language designed to handle a variety of system-administration tasks, makes handling the socket protocol easier still. Oliver shows how you can write Perl scripts that communicate across networks of UNIX machines.

PROGRAMMER'S WORKBENCH

COMPARING OBJECT-ORIENTED LANGUAGES

by Michael Floyd

Comparing one language to another usually is like comparing coconuts to kumquats. To make comparisons easier, we implemented a double-ended linked-list class in C++, then in Smalltalk, Eiffel, Sather, Objective-C, Parasol, Beta, Turbo Pascal, C+@, Liana, Ada, and, yes, even Drool.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

It shouldn't come as a surprise to anyone that Michael's inclined to quest after chaos. He then gets small--real small--as he explores nanotechnology and itty-bitty machines.

C PROGRAMMING

by Al Stevens

Last month, Al examined C++ exception handling in a general sense. This month, he looks at how the new 32-bit Watcom C/C++ 9.5 compiler goes about implementing exception handling.

ALGORITHM ALLEY

by Tom Swan

Tom presents a selection-sampling algorithm--a technique useful when reducing a large collection of records to a more manageable subset.

UNDOCUMENTED CORNER

edited by Andrew Schulman

Pete Davis continues his exploration of the undocumented Windows .HLP file format.

PROGRAMMER'S BOOKSHELF

by Jonathan Erickson

If you're getting serious about speech recognition, Computational Models of American Speech is a book to pick up before going any further.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

Copyright © 1993, Dr. Dobb's Journal


November 1993 - POLISHING FOR PERFORMANCE

FEATURES

PERFORMANCE TUNING: SLUGGING IT OUT!

by Michael R. Dunlavey

When you think of performance tuning, what comes to mind? Handcoding in assembly language? Profiling? Fancy data structures? How about a process called "deslugging" for tracking down correct, but slow, code. In addition, Mike Armistead discusses profiler evolution.

HEAP CHECKING

by Steve Oualline

Heap errors are among the most frustrating programming bugs you'll run up against. Steve presents libraries for intercepting heap-related calls and generating message logs.

FINDING RUN-TIME MEMORY ERRORS

by Taed Nelson

Taed examines the problems arising from array-bounds violations--stack corruption, segmentation violations, and ultimately, programmer insanity. Although focusing on Purify 2.0, he also looks at Insight, Sentinel, MemCheck, and Bounds-Checker.

EAVESDROPPING ON INTERRUPTS

by Rick Knoblaugh

Rick's interrupt-monitoring program traps and logs interrupt activity, enabling your debugger or other program to gain control when specified interrupts occur.

EMBEDDED SYSTEMS

PERFORMANCE VERIFICATION

by Roger Crooks

Designers of high-performance embedded systems look for performance gains wherever they can be found. Roger examines why debugging RISC-based systems is complex, especially when caches are involved.

NETWORK COMPUTING

A NETWARE CHAT UTILITY

by Eduardo M. Serrat

This utility lets you chat interactively with other users across Novell networks. You can call other users, accept or reject incoming calls, and even set up a conference chat via individual-user viewports.

EXAMINING ROOM

EXAMINING OPTLINK FOR WINDOWS

by Matt Pietrek

Optlink for Windows, a high-performance replacement for Microsoft's LINK.EXE and Borland's TLINK.EXE, provides optimizations that increase execution speed while reducing application size.

PROGRAMMER'S WORKBENCH

DEBUGGING WINDOWS APPLICATIONS

by Ray Valdes

Ray discusses the tools and techniques he uses when figuring out what went wrong with his Windows apps. Ivan Gerencir adds his multi-application message trace facility for Windows.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael puts forth this examination of why the Forth language is still a good choice for many applications, and how Forth relates to cellular automata, genetic algorithms, artificial life, and the game of Life.

C PROGRAMMING

by Al Stevens

Al unchains version 2.0 of is D-Flat++ library--a CUA-compliant library for DOS text mode implemented as a C++ class library. D-Flat++ applications run from a virtual desktop that contains a screen, a keyboard, a mouse, a clock, and a speaker, represented by classes in the library.

ALGORITHM ALLEY

by Tom Swan

From the year 1661 to today, palindromes are tit-4-tat backwards and forwards. When examining Windows file structures recently, Tom discovered that palindromes are the bases of a data-encryption method.

UNDOCUMENTED CORNER

edited by Andrew Schulman

This month, Pawel Szczerbina looks at undocumented aspects of Novell's NetWare Core Protocol (NCP). When examining the so-called "F2 interface," Pawel found hundreds of NCP functions, although Novell only documents the NCP Erase Files function.

PROGRAMMER'S BOOKSHELF

by Peter D. Varhol

Fuzzy logic is something to think about, and Bart Kosko's new book Fuzzy Thinking is a good place to start mulling it over.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

NEXT MONTH

Can we talk? Interoperability means that computer systems must be able to communicate with each other safely, efficiently, and securely. In December, we'll examine these issues--and more!

Copyright © 1993, Dr. Dobb's Journal


December 1993 - INTEROPERABILITY

FEATURES

THE INFORMATION UTILITY

by Rolf Oswald

Spatial data, such as that gathered from satellite images, presents real dilemmas when shared information over heterogeneous networks and geographical-information systems. In particular, the challenge of dissimilar file formats must be overcome. Rolf examines how Manitoba's Information Utility tackles this and other thorny data-exchange problems.

CROSS-PLATFORM COMPRESSION

by Pierre J. Dion

Data compression is one means of achieving efficient data transfer. However, efficiency across disparate computer systems can be limited by the lack of cross-platform tools. Pierre presents an implementation of LZH compression for MS-DOS, UNIX, and MVS.

DATABASE INTEROPERABILITY AND APPLICATION TRANSPORTABILITY

by Edward Dowgiallo

In the database world, interoperability refers to the ability to build applications that can simultaneously access data in different databases provided by different vendors; transportability is the ability to move an application from one network/hardware combination to another while using the same database. Ed examines the strategies database vendors implement to make this possible.

REXX AND THE OS/2 WORKPLACE SHELL

by Eric Giguere

The REXX language interface provides a simple way to customize the OS/2 Workplace Shell environment. Eric also takes a peek at the upcoming object-oriented REXX being developed by IBM.

THE IDEA ENCRYPTION ALGORITHM

by Bruce Schneier

The International Data Encryption Algorithm (IDEA) may be one of most secure block algorithm available to the public today. Bruce examines its 128-bit long key (over twice the length of the familiar DES) and unravels the algorithm for both encryption and decryption.

EMBEDDED SYSTEMS

VISUALIZING DATA IN REAL TIME

by James F. Farley and Peter D. Varhol

Our authors use Vision, a graphical front end for data display, and Visual Basic to build an application that acquires and displays sensor data from an optical fire detector.

NETWORK SYSTEMS

UNDERSTANDING OSI NETWORK MANAGEMENT

by William Stallings

The OSI network-management system, which relies on an object-oriented design, provides an operator interface for monitoring and controlling network activity.

EXAMINING ROOM

EXAMINING THE STARVIEW APPLICATION FRAMEWORK

by Ramin Firoozyi

StarView is a cross-platform C++ application framework that operates across Windows, Macintosh, NT, OS/2, OpenLook, and Motif. C++ code written to this application framework can be copied from one machine to another and rebuilt, resulting in a native executable that has the speed of a C++ application and the look-and-feel of the native GUI.

PROGRAMMER'S WORKBENCH

WIRELESS DATA AND MINIMUM AIRTIME SOFTWARE

by Darrell Diem

Wireless networks, which can be implemented as LANs, MANs, or WANs, have their own unique technical challenges. Darrell examines how minimum airtime algorithms can reduce transmission errors and wireless-network airtime costs.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael examines powerful tools for manipulating HyperCard extensions.

C PROGRAMMING

by Al Stevens

Al continues with D-Flat++, this month implementing classes for tool bars and tool buttons using a text-editor named TED to illustrate how you can use these classes. TED sports a menu bar, status bar, and tool bar, and it lets you work on one text file at a time.

ALGORITHM ALLEY

by Tom Swan

Tom uses frequency distribution to explore if pseudorandom numbers really are. In particular, he examines a statistical method known as the "chi-square distribution."

UNDOCUMENTED CORNER

by Andrew Schulman

Andrew presents VXDLIST, a program that walks the Windows Enhanced mode VxD chain and displays the names of all VxDs loaded on the system. VXDLIST will be particularly useful for exploring the upcoming "Chicago" operating environment, which is based on VxDs.

PROGRAMMER'S BOOKSHELF

by Jonathan Erickson

Mobile Robots is about more than just silicon-based creatures scurrying around underfoot. It's really an application of an exciting approach to organizing intelligence systems using an architecture referred to as "subsumption."

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

Copyright © 1993, Dr. Dobb's Journal


Special Issue 1993 - TOOLS AND TECHNIQUES FOR DATABASE DEVELOPMENT

FEATURES

OBJECT-ORIENTED DATABASE MANAGEMENT SYSTEMS
by Al Stevens

Object-oriented database management systems (OODBMSs) are coming of age, even though, as Al finds out, there's no agreed upon definition of what they really are. Al explores the world of OODBMSs by examining three toolsets from the developer's perspective--Code Farms' C/C++ Libraries 3.2, Raima's Object Manager 1.1, and BKS's POET 2.0.

PROTOTYPING AND PROGRAMMING DATABASE SYSTEMS
by Miles Dempsey

It's a cold war out there, as Miles discovered when implementing a client/server application for a major steel company. Miles describes the manufacturing process he had to automate, the architecture of that system, the software tools used, the application prototyping and coding process, and the database implementation.

BUILDING A DATABASE FILE VIEWER
by Michael Floyd

DDJ's executive editor presents a data-file viewer--built with Borland's Paradox Engine 3.0 database engine and Borland Pascal 7.0 with Objects--that reads and displays just about any Paradox database table in its current state.

DATABASE TUNING: PRINCIPLES AND SURPRISES
by Dennis Shasha

Dennis presents a principled foundation for tuning database systems using techniques based not only on his own experiences, but on the expertise of tuning consultants affiliated with companies such as Oracle, IBM, Sybase, Ingres, Servio, and O2 Technology.

EXTENDING FOXPRO
by Michael Brachman

The FoxPro API lets you add functions and features that can improve performance and provide support for graphics, serial communications, encryption, compression, network, and more. Michael examines the API and shows you how to make the most of it.

HYPERCARD DATABASE TUNING
by Jeff Elliott

HyperCard's built-in database doesn't need to be slow. Jeff shows you how to speed up searches on your Macintosh using linked lists implemented in HyperCard's scripting language.

EVENT-DRIVEN DATABASE PROGRAMMING IN C++
by Dirk Bartels

Dirk argues that event-driven environments are making information storage and retrieval demands that today's relational database model can't meet. It's his premise that object-oriented database systems (OODBMSs) do meet these new demands by providing special features for concurrence control.

EDITORIAL
by Michael Floyd

Copyright © 1993, Dr. Dobb's Journal


Special Issue 1993 - WINDOWS PROGRAMMING

A Multitool Approach to Windows Development

by Al Stevens

No single Windows development tool can meet all of your needs. Al describes a multitool approach to Windows development.

Memory-mapped File I/O

by Doug Huffman

Memory-mapped file I/O (MMFIO) lets you map a file into a linear address space with a call to the operating system. Eric Bergman-Terrell uses NT's MMFIO for sorting.

Multitasking Fortran and Windows NT

by Shankar Vaidyanathan

Here are interface statements and coding guidelines that let you write Fortran programs that call the Win32 C-type API directly.

VWINL, a Virtual Window Library

by Al Williams

Al's VWinL library provides automatic window management for Windows 3.1, NT, and Win32s.

Faking DDE with Private Servers

by Joseph M. Newcomer

When Joe needed a client/server architecture within the application itself, this was his solution.

Horizontally Scrollable Listboxes

by Ted Faison

Here's a C++ listbox class which manages all of the details for scrolling horizontally within a listbox.

Writing Portable Windows Applications

by David Van Camp

Moving from Windows 3 to Windows NT needn't be a headache if you follow David's simple guidelines.

Getting to Know TrueType

by Steven Reichenthal

The Windows API GetGlyphOutline() function is at the heart of this font-viewing program.

Writing Windows Custom Controls

by Dan Brindle

Dan modifies the standard Windows radio button to create a custom VCR-style button.

A Generic SQL Class Library

by Ken North

Ken presents a C++ SQL class library for multi-DBMS programming.

Threads for Windows 3

by David Lee

Unlike NT, Windows 3 doesn't provide direct support for threads. With the techniques David illustrates here, you can implement non-preemptive threads in Windows 3.

Editorial

by Jonathan Erickson

Copyright © 1993, Dr. Dobb's Journal


January 1994 - PC SUPERCOMPUTING

FEATURES

SHARED MEMORY AND PC SUPERCOMPUTING

by Stephen Fried

Shared-memory parallel processing, a supercomputer technique used by companies like Cray, is making its way into the PC world. Steve discusses the differences and implications between the shared-memory and distributed-memory approaches to implementing algorithms from the programmer's perspective.

CPU PERFORMANCE: WHERE ARE WE HEADED?

by Hal W. Hardenbergh

Hal discusses the improvements you can expect in personal uniprocessor computer systems, and the factors that limit those improvements. Nick Tredennick examines the topic from another perspective.

OPTIMIZING PENTIUM CODE

by Mike Schmit

Chances are you've heard that the payback for optimizing code via hand-tuning for Intel's Pentium processor isn't worth the effort. That's not the case, however, as you'll see with the optimization tricks ASM-expert Mike Schmit shares here. Michael Abrash adds a few thoughts of his own.

SKIP LISTS

by Bruce Schneier

Skip-list algorithms are generally faster, simpler to implement, require less memory, and are more versatile than balanced-tree algorithms. Bruce examines skip lists and shows how you can squeeze even more performance out of them.

EMBEDDED SYSTEMS

MAXIMIZING PERFORMANCE OF REAL-TIME RISC APPLICATIONS

by Mitchell Bunnell

RISC processors were designed for fast computation, not necessarily fast real-time performance. Nevertheless, embedded-system designers can benefit from RISC technology following the application-design guidelines Mitchell presents here.

NETWORKED SYSTEMS

POLYMORPHIC PROTOCOLS

by William F. Jolitz

The Internet's fixed address space is being put to the test by dramatic growth in the number of Internet users. Polymorphic protocols may ultimately be the solution to the address-space problem and similar network limitations.

EXAMINING ROOM

EXAMINING OS/2 2.1 THREADS

John M. Kanalakis, Jr.

The OS/2 2.1 multitasking model is based on the execution of threads, making it possible for many sections of a single process to execute simultaneously. John examines OS/2's thread architecture, specifically, the scheduling process.

PROGRAMMER'S WORKBENCH

SYMMETRIC MULTIPROCESSING FOR PCs

by John Norwood and Shankar Vaidyanathan

Our authors focus on multithreaded application development for single-processor and symmetric-multiprocessor machines under Windows NT. In doing so, they present Fortran interface statements for the Win32 console API and a black-box solution for calling 32-bit DLLs from 16-bit applications under NT.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael picks up where our October "Beyond C++: Considering the Alternatives" issue left off by examining some concrete programming techniques that can be used to compare paradigms.

C PROGRAMMING

by Al Stevens

Before getting back to D-Flat++'s TED text editor, Al takes a second look at Symantec's technical support and C++ compiler.

ALGORITHM ALLEY

by Tom Swan

Tom explores three different methods of generating random numbers--middle-square, linear-congruential, and Fibonacci--and shows how you can mix two of them to create a combination generator.

UNDOCUMENTED CORNER

by Andrew Schulman

Much of the preemptive multitasking for Microsoft's Chicago operating system already exists in the form of the Windows 3.1 Virtual Machine Manager. This month, Kelly Zytaruk examines the overall structure of the virtual-memory control block. Next month, he presents a Windows VM Explorer application.

PROGRAMMER'S BOOKSHELF

by Peter D. Varhol

John Koza's Genetic Programming: On the Programming of Computers by Means of Natural Selection explains what genetic programming is all about and how it can be used to solve a wide variety of problems in system control, planning, and decision support. Thanks to Jim Enochs and Alejandro Roman for their assistance in photographing Apple Computer's Napa, California data facility, which is shown on our cover.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1994, Dr. Dobb's Journal


February 1994 - SOFTWARE DESIGN AND TESTING

FEATURES

PATTERNS AND SOFTWARE DEVELOPMENT

by Kent Beck

If we're ever to realize the promise of object-oriented programming, we first have to be able to create and package truly reusable software components--and "patterns" may be the way to do it. Kent examines one of the hottest topics in software development.

DESIGNING AN APPLICATION FRAMEWORK

by Grady Booch

An object-oriented pioneer presents his strategies for building flexible, general-purpose foundation-class libraries that enable you to make the most of code reuse.

COMPUTER-AIDED SOFTWARE TESTING

by Birger Baksaas

According to the Quality Assurance Institute, as much as 80 percent of all software is tested manually. Birger shares an automated testing system which simulates user interaction by producing events and sending them to the applications.

THE BLACK ART OF GUI TESTING

by Laurence R. Kepple

The old rules governing automated software testing don't always apply to event-driven graphical-user interfaces. Dr. Kepple examines how the shift from character-based user interfaces to GUIs affects test automation, and why the programming approach to testing is superior to conventional record/playback methods. George Symons adds notes on different approaches to record and playback.

SOFTWARE TESTING CYCLES

by N. Scott Bradley

The key to testing more and more code in less and less time is to have a clearly defined software test cycle. Scott discusses a testing cycle composed of four steps: test generation, playback, verification, and reuse.

EMBEDDED SYSTEMS

SIGNAL ANALYSIS VIA THE BOOTSTRAP

by Gary McGrath

Signal analysis requires that you minimize assumptions--and the Bootstrap is a resampling algorithm which estimates the error on quantities by resampling the data in random ways. Gary analyzes this algorithm and describes how the astrophysics community has adapted it to search for tenuous signals in multidimensional data.

NETWORKED SYSTEMS

YOUR OWN TOKEN-RING NETWORK MANAGER

by Andy Yuen

Andy presents an IEEE 802.5 MAC-layer token-ring network-management application consisting of a Windows front end and a network-management agent on the back end. This tool lets you list active token-ring adapters on the ring, associate descriptive names with token-ring adapters, identify soft errors and the fault domain, monitor the network status, and more.

EXAMINING ROOM

EXAMINING THE WINDOWS SETUP TOOLKIT

by Walter Oney

One of the best-kept secrets in the Microsoft Windows Software Development Kit is the Setup Toolkit. Walter examines the contents of the Setup Toolkit and explains how you can use it to quickly build high-quality setup programs for your Windows application.

PROGRAMMER'S WORKBENCH

NT-STYLE THREADS FOR MS-DOS

by Al Williams

Al uses Phar Lap's TNT 386|DOS-Extender to implement NT-style threads in a DOS program that removes a directory tree. Instead of recursing down the tree, the program (which works with NT and TNT) processes directories in parallel.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

If, like Michael, you consider yourself a card-carrying member of the Age of Information, then you're also likely suffering from "Information Overload."

C PROGRAMMING

by Al Stevens

Al builds an Editor class for D-Flat++, takes a look at Mark Terribile's Practical C++, and examines what all the fuss is about in the great C++ preprocess-or-not debate.

ALGORITHM ALLEY

by Tom Swan

Tom catches up on his mail and shares reader implementations of palindrome encryption and other algorithms.

UNDOCUMENTED CORNER

edited by Andrew Schulman

In Part 2 of his article on the Windows 3.1 Virtual Machine Manager, Kelly Zytaruk presents his Windows VM Explorer application.

PROGRAMMER'S BOOKSHELF

by Peter D. Varhol

Nearly 15 years ago, Seymour Papert defined our view of the relationship between computers and teaching with his seminal book, Mindstorms and the Logo Programming Language. This month, Peter examines whether Papert's views have changed in his new book, The Children's Machine: Rethinking School in the Age of the Computer.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1994, Dr. Dobb's Journal


March 1994 - CROSS PLATFORM DEVELOPMENT

FEATURES

BINARY-DATA PORTABILITY

by José Luu

The DDR compiler José presents here makes it possible for you to create truly portable tools for handling binary-data representations between different environments. This means you can create a single source-code base without having to add elaborate data-translation code.

THE WRAPI TOOLKIT

by Gregory C. Sarafin

WRAPI is a language-independent API that generates language-specific libraries. The host languages it supports include C, Clipper, FoxPro (DOS and Windows), Visual Basic (DOS and Windows), Pascal, Clarion, Fortran, and more.

MULTIPLATFORM .INI FILES

by Joseph J. Graf

Joe's multiplatform implementations of the the Windows GetPrivateProfileString(), GetPrivateProfileInt(), and WritePrivateProfileString() functions support DOS and UNIX, too.

PORTABILITY BY DESIGN

by Michael Ross

Michael lifts the hood on MetaWare's compiler technology, sharing the mapping structures and techniques that make porting the compiler from one platform to another a relatively simple task.

UNICODE AND SOFTWARE GLOBALIZATION

by David Van Camp

Writing code for international markets requires an understanding of the Unicode standard. David examines the standard and discusses how you go about implementing Unicode support.

WRITING NON-SCSI CD-ROM DEVICE DRIVERS

by Sing Li

Compatibility is one of the main reasons why environments such as the Windows NT and OS/2 2.x operating systems support SCSI-based CD-ROM hardware. However, if you want to use non-SCSI CD-ROM drives with them, you'll have to write your own device drivers. This article discusses how you code those drivers for Windows NT.

Thanks to Corinne H. Godon of Neuron Data (Palo Alto, CA) for helping with the systems and software shown on the cover and elsewhere in this issue.

THE ADVANCED SCSI PROGRAMMING INTERFACE

by Brian Sawert

The advanced SCSI programming interface, available for DOS, OS/2, Novell NetWare, and other operating systems, provides a high-level function set that's easy to use because it hides the inner workings of SCSI protocol.

EMBEDDED SYSTEMS

EMULATING NON-DOS SYSTEMS UNDER MS-DOS

by Dan Troy

Dan describes a table-mapping mechanism to handle operating-system functions and their associated parameters. This allowed him to emulate non-DOS systems while running on DOS-based PC development environments.

NETWORKED SYSTEMS

CROSS-PLATFORM DEVELOPMENT WITH VISUAL C++

by Chane Cullens

Although generally thought of as a DOS/Windows development tool, Microsoft's Visual C++ and the Microsoft Foundation Class library can be used for cross-platform development. Chane discusses how you can use them to write portable code, whether you're coding for Windows, UNIX, NT, Macintosh, or whatever.

EXAMINING ROOM

DATABASE DEVELOPMENT AND VISUAL BASIC 3.0

by Ken North

Although Microsoft calls it "Visual Basic 3.0 Professional Edition," you could just as easily refer to the package as "the Visual Basic Database Edition" because of the available database tools and functionality. Ken examines the Visual Basic 3.0 environment and database tools, presenting a multimedia database app in the process.

PROGRAMMER'S WORKBENCH

PORTING FROM DOS TO WINDOWS

by Walter Oney

WinGate's client/server API minimizes your recoding efforts when moving from DOS to Windows. Walter uses the tool to build a simple client/server database application.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Last year, Apple introduced the Newton MessagePad, along with a new user-interface model, new development platform, and new object-oriented language. Michael discusses what Newton really is (and isn't), the first Newton Platform Development Conference, and the Newton Toolkit, and speculates on the unique challenges Newton presents.

C PROGRAMMING

by Al Stevens

Al takes a break from the rigors of coding to mull over software patents, electronic books, and the mysteries of placing a long (but not too long) distance phone call in Silicon Valley.

ALGORITHM ALLEY

edited by Tom Swan

Ernie Deel shares a data-compression technique that uses pattern recognition to quickly achieve efficient compression ratios.

UNDOCUMENTED CORNER

edited by Andrew Schulman

Alex Shmidt presents a technique for dynamically loading and unloading VxDs without having to use VXDLDR or a VxD file. This is, in fact, a general technique for calling any 32-bit Ring 0 code from a normal Ring 3 Windows program.

PROGRAMMER'S BOOKSHELF

by Jonathan Erickson

Like it or not, self-help programming and legal books go hand-in-hand. This month, we examine two new legal self-help books, Software Development: A Legal Guide, and The Software Developer's and Marketer's Legal Companion.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1994, Dr. Dobb's Journal


April 1994 - ALGORITHMS

FEATURES

THE CAMBRIDGE ALGORITHMS WORKSHOP

by Bruce Schneier

Some of the best and the brightest in the world of cryptography gathered at Cambridge University to challenge each other with new algorithms designed to run quickly in software. Bruce, who presented a paper at the workshop, reports on the conference, as well as on the current state of encryption technology in general.

CRYPTOGRAPHY WITHOUT EXPONENTIATION

by Peter Smith

Peter, who presented LUC public-key encryption in DDJ over a year ago, extends the algorithm by adding three new cryptosystems: a Lucas-function El Gamal public-key encryption, a Lucas-function El Gamal digital signature, and a Lucas-function-based key-negotiation method called LUCDIF.

SHA: THE SECURE HASH ALGORITHM

by William Stallings

The Secure Hash Algorithm (SHA), based on Ron Rivest's MD4 algorithm and developed by the National Institute of Standards and Technology, can be used in any security application that requires a hash code.

THE BLOWFISH ENCRYPTION ALGORITHM

by Bruce Schneier

Blowfish, a new block-encryption algorithm for 32-bit microprocessors, is designed to be fast, compact, simple, secure, and robust. Break it, and you can be the winner of our cryptography contest!

THE WAVELET PACKET TRANSFORM

by Mac A. Cody

The discrete wavelet transform is a subset of the far more versatile wavelet packet transform, which generalizes the time-frequency analysis of the wavelet transform. Mac presents a C implementation of the discrete wavelet transform algorithm.

FUZZY LOGIC IN C: AN UPDATE

by John A.R. Tucker, Phillip E. Fraley, Lawrence P. Swanson

In this article, our authors build upon Greg Viot's "Fuzzy Logic in C" by adding initialization, parsing, and output functions to provide a complete C implementation of fuzzy logic.

EMBEDDED SYSTEMS

DIGITAL I/O WITH THE PC

by Brian Hook and Dennis Shuman

You don't always have to resort to dedicated or expensive instruments for digital data acquisition. Brian and Dennis describe an integrated hardware/software system that enables digital I/O using a PC's parallel port.

NETWORKED SYSTEMS

ECHONETS, E-MEMES, AND EXTENDED REALITIES

by Scott B. Guthery

Mobile computing requires a new way of thinking about networks. Scott discusses the concept of switchless networks, called "echonets," and presents algorithms that make them possible.

EXAMINING ROOM

HELP FOR WINDOWS HELP AUTHORS

by Al Stevens

Eventually, every Windows developer has to build a help database. Al discusses what makes a good Windows help system and examines approaches and tools for creating them.

PROGRAMMER'S WORKBENCH

ALGORITHMS FOR DIRECTED GRAPHS

by Salvatore R. Mangano

Directed graphs underlie any tool that displays tree, class-relationship, or entity-relationship diagrams. Sal uses EOS, his C++ genetic-algorithm toolkit, and Visual C++ to create a Windows-hosted system for laying out directed graphs.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael examines how the British microcomputer revolution in the early 1980s led to the object-oriented model Apple's Newton uses today.

C PROGRAMMING

by Al Stevens

Borland's recent attempt to rewrite its software-license agreements didn't make anyone happy, especially programmers who use Borland tools.

ALGORITHM ALLEY

by Tom Swan

Tom presents an information-retrieval system based on the trie-search algorithm.

UNDOCUMENTED CORNER

edited by Andrew Schulman

In this month's "Undocumented Corner," Klaus Müller shows how to access the Windows internal instance-data structures, using a virtual device driver (VxD) loaded early in the Windows boot process, right after VMM.

PROGRAMMER'S BOOKSHELF

by Tom Ochs

Tom looks at two books on algorithm design and implementation--Programming Classics: Implementing the World's Best Algorithms and Algorithms from P to NP.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1994, Dr. Dobb's Journal


May 1994 - MICROKERNELS AND OPERATING SYSTEMS

FEATURES

TRENDS IN OPERATING SYSTEM DESIGN

by Peter D. Varhol

Although there's really nothing new about them, microkernels are suddenly all the rage in operating system design. Peter examines modular OS architectures such as QNX, OS/2, and Windows NT; and Sing Li shares a recent conversation with Linus Torvalds, the creator of Linux.

A C++ MULTITASKING CLASS LIBRARY

by Ken Gibson

Multithreaded applications that concurrently execute more than one section of code aren't directly supported by languages such as C++. Ken presents a C++ multitasking class library for MS-DOS that lets you implement a program as a set of

concurrent threads.

MMURTL: YOUR OWN 32-BIT OPERATING SYSTEM

by Richard Burgess

MMURTL is a message-based, multitasking, real-time kernel with a DOS-compatible FAT-like file system. In presenting this kernel, Richard focuses on MMURTL's messaging scheme and paged-memory management.

INSIDE WINDOWS NT SERVICES

by Marshall Brain

Windows NT services are implemented as otherwise-normal executables that follow a specific protocol to allow proper interaction with the service control manager (SCM). Marshall discusses how you can build, create, and install Win32 services in Windows NT.

OPTIMIZING MATRIX MATH ON THE PENTIUM

by Harlan W. Stockman

The Pentium processor is more than just a fast 486. Its pipeline and floating-point and integer operations require that you pay more attention to the flow of data on and off the FPU. Harlan presents and measures methods for speeding up Pentium matrix-math operations.

EMBEDDED SYSTEMS

RTMK: A REAL-TIME MICROKERNEL

by J.F. Bortolotti, P. Bernard, E. Bouchet

Our authors present RTMK, a real-time microkernel that's portable across platforms ranging from PCs to DSPs. RTMK delivers total control over the interrupt state of processors such as the TMS320C30.

NETWORKED SYSTEMS

OS/2 AND UNIXWARE INTERPROCESS COMMUNICATION

by John Rodley

Interprocess communication isn't portable between IBM's OS/2 2.1 and Novell's UnixWare 1.1. But even though the implementation details differ greatly, the two systems do share ways of thinking about IPC. John looks at IPC under OS/2 and UnixWare to see what common ground exists.

EXAMINING ROOM

PORTING D-FLAT++ TO OS/2

by Jon Wright

Jon examines Borland C++ for OS/2 by porting Al Stevens's D-Flat++ class library to OS/2. In its original form, D-Flat++ allows you to build CUA '89-compliant user interfaces for DOS.

PROGRAMMER'S WORKBENCH

A MULTICOLUMN LIST-BOX CONTAINER FOR OS/2

by Brian Proffit

Brian uses GpfRexx's visual-programming environment to develop a multicolumn

list-box control in a Workplace Shell container. He then turns to Gpf to generate a C implementation of the control that you can optimize.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael wonders what in the world is going on with operating systems, particularly when it comes to the PowerPC processor.

C PROGRAMMING

by Al Stevens

This month, Al launches "Quincy," a C-language interpreter with a D-Flat-based integrated development environment.

ALGORITHM ALLEY

by Tom Swan

Tom examines the problem of exceptions, then presents an algorithm (in pseudo-Pascal and C++) which uses exceptions to report illegal input values.

UNDOCUMENTED CORNER

by Andrew Schulman

Andrew had a front-row seat at the recent Stac Electronics vs. Microsoft court proceedings. Here is his report.

PROGRAMMER'S BOOKSHELF

by Al Stevens

Bruce Schneier's recently published Applied Cryptography is a one-of-a-kind book that no programmer should be without.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1994, Dr. Dobb's Journal


June 1994 - USER INTERFACES

FEATURES

GUI DEVELOPMENT FOR DATABASE APPLICATIONS

by John Rodley

John uses Easel and Enfin to build the front ends of a database with IBM's DB2/2 on the back end.

GUI DEVELOPMENT FOR REAL-TIME APPLICATIONS

by Avram K. Tetewsky

Although they take radically different approaches, both ControlCalc and LabView are designed for building GUI-based, real-time control applications.

A DUAL-UI CONSTRAINT EQUATION SOLVER IN C++

by Larry Medwin

Larry creates a pair of constraint-equation solvers, one based on the InterViews GUI toolkit for the X Window System and the other driven by a tty interface. Both UIs are connected to a common equation-solving back end. Mark Linton adds an overview of the upcoming Fresco toolkit--the successor to InterViews.

RETHINKING MEMORY MANAGEMENT

by Arthur D. Applegate

There's more than one way to skin memory management. Arthur first examines traditional approaches to the problem, then looks at alternative cross-platform memory-management techniques for speeding up allocation and minimizing swapping.

WRITING PCMCIA SOFTWARE

by Troy A. Miles

The Cardinfo program presented here returns information about PCMCIA cards--those credit-card size solid-state devices used for everything from memory cards to hard disks that plug into your portable PC system.

EMBEDDED SYSTEMS

OPTIMIZING MC68882 CODE

by Gary McGrath

The MC68882 floating-point coprocessor adds 46 instructions to the MC68020/030 32-bit microprocessor, substantially increasing the speed of floating-point calculations. Gary examines these instructions and finds certain combinations to be faster than others.

NETWORKED SYSTEMS

EXTENDING IMAKE

by Kamran Husain

Imake generates platform-specific makefiles. Kamran examines imake templates and rule files, then extends Imakefiles beyond the X Window System.

EXAMINING ROOM

EXAMINING SYMANTEC C++

by Michael Yam

Michael revisits PT, the Windows-based periodic-table program he presented last year. In this update, he examines what's required to implement the program with Symantec C++.

PROGRAMMER'S WORKBENCH

CROSS-PLATFORM DATABASE DEVELOPMENT

by J. Randolph Brown

Even with a database system designed from the ground up for cross-platform development, there can be programming "gotchas." Randy discusses how you address FoxPro user-interface issues, focusing on screen objects and font characteristics.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael launches a new "tap app" project for the Apple Newton MessagePad--a bare-bones expert system that's ideal for field work.

C PROGRAMMING

by Al Stevens

The Quincy preprocessor presented this month implements a subset of Standard C's preprocessing operators.

ALGORITHM ALLEY

by Tom Swan

On-screen rulers are becoming standard elements in word-processing, drawing, and related software. Tom presents a function for displaying a Windows ruler that's based on recursion-removal techniques.

UNDOCUMENTED CORNER

by Andrew Schulman

Andrew goes online to find out what makes IBM's OS/2 for Windows tick. What he discovered was a veritable patch-o-rama.

PROGRAMMER'S BOOKSHELF

by Michael Floyd

Windows Programming Power with Custom Controls provides tips, tools, and techniques for the design and development of custom controls.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1994, Dr. Dobb's Journal


July 1994 - GRAPHICS PROGRAMMING

FEATURES

MORPHING 3-D OBJECTS IN C++

by Glenn M. Lewis

Glenn presents a C++ morphing program that simulates a "melting" effect (and its reverse) on 3-D objects. The program, which compiles and runs on UNIX machines, PCs, and the Amiga, generates objects analogous to key frames in animation sequences.

GENERATING REALISTIC TERRAIN

by Robert Krten

Realistic landscapes are the bread and butter of computer graphics. Robert shares a technique he calls "fault-generation" for simulating mountains and other geological features found in nature--and it's fast!

3-D TEXTURE MAPPING

by Jeremy Spiller

Texture mapping allows you to project a 2-D image, or texture map, onto a flat polygon that has been placed on a 3-D surface. Jeremy's program draws a rotating cube (the model) painted with three different texture maps.

RAY: A RAY-TRACING PROGRAM IN C++

by Alain Mangen

Alain uses C++ inheritance to create RAY, a powerful ray-tracing program that performs hidden-surface removal and simulates shadow and semishadow effects to produce images of dazzling realism.

LOTFI VISIONS, PART 1

by Jack Woehr

In the first installment of this exclusive interview with Lotfi Zadeh, the father of fuzzy logic, Zadeh discusses the philosophical underpinnings of fuzzy logic, how it relates to fractals and AI, and his youth in the USSR and Iran.

EMBEDDED SYSTEMS

A C++ CLASS FOR GENERATING BAR CODES

by Douglas Reilly

Any application that depends upon accurate entry of data with little or no user intervention is a candidate for bar codes. The PCL class Doug presents here lets you create bar-code symbols on PCL-compatible laser printers.

NETWORKED SYSTEMS

POSTMAN: A BRIDGE TO THE UNIX MAIL SYSTEM

by Zongnan H. Lu

Postman is an interface program that sits between an in-house, UNIX-based, personal-information system and the UNIX sendmail program. It provides a way to exchange mail between user-application programs and the outside world through the existing UNIX mail system.

EXAMINING ROOM

RAY TRACING AND THE POV-RAY TOOLKIT

by Craig A. Lindley

The POV-Ray ("Persistence of Vision Ray Tracer") toolkit is a powerful, multiplatform package available free of charge in source-code and executable form for PCs (running under DOS, Windows, NT, or OS/2), Macintosh, Amiga, UNIX (including the X Window System), and VMS workstations.

PROGRAMMER'S WORKBENCH

EXAMINING AUDIO DSP ALGORITHMS

by Dennis Cronin

Dennis implements DSP algorithms to create real-time audio effects--pitch change, echo, flanging, and phase shifting--for the Microsoft Windows Sound System.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael wraps up his mushroom-identification programming project for the Newton MessagePad.

C PROGRAMMING

by Al Stevens

Al continues his presentation of the Quincy preprocessor, this month focusing on the parts that resolve #define macros and evaluate #if expressions.

ALGORITHM ALLEY

by Tim Kientzle

The circle algorithm presented here is both fast and exact when plotting the closest points to the circle and drawing ellipses.

UNDOCUMENTED CORNER

edited by Andrew Schulman

Ralf Brown examines the undocumented side of the private programming interface of QEMM, Quarterdeck's 386 memory manager.

PROGRAMMER'S BOOKSHELF

by Jonathan Erickson

This month, we look at three books on graphics file formats--the Encyclopedia of Graphics File Formats, Bitmapped Graphics Programming in C++, and Programming for Graphics Files in C and C++.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1994, Dr. Dobb's Journal


August 1994 - C/C++ PROGRAMMING

FEATURES

NUMERICAL C AND DSP

by Kevin Leary

Numerical C, a new high-level language built on the Free Software Foundation's GNU C compiler (gcc), makes it easier to code mathematically intensive applications such as those used with digital-signal processing. Numerical C is a superset of ANSI C, differing in that the additional language constructs are geared towards mathematical programming paradigms.

MIGRATING C CODE TO UNICODE

by Timothy D. Nestved

To compete in the global software market, application software must accommodate any country's locale conventions, culture, and written language. Tim presents strategies and code for migrating existing C source code from ANSI to Unicode, independent of any operating system, compiler, or API.

POLYMORPHIC C

by Greg Voss

PCC, Greg's Polymorphic C interpreter, combines the benefits of incremental compilation with a mainstream language, making it particularly useful in developing and debugging C routines used in Windows applications.

C++ NAMESPACES

by Tom Pennello

Namespaces make it possible to encapsulate library names in a library namespace. Tom examines namespaces and suggests ways you can make good use of them.

LOTFI VISIONS, PART 2

by Jack Woehr

Lotfi Zadeh discusses Japan's Sendai train and verbally spars with William Kahan, who shares his two cents worth on fuzzy logic.

DATA ATTRIBUTE NOTATION AND C++

by Reginald B. Charney

Data attribute notation is an object-oriented coding style that emphasizes data abstractions.

EMBEDDED SYSTEMS

ASSOCIATIONS IN C++

by Dan Ford

A callback is a function that's registered at run time with a data structure or object. The object then calls the function when particular events occur. You can use the C++ class Dan presents here to easily and quickly add callback lists to your own classes.

NETWORKED SYSTEMS

USING THE MICROSOFT MAIL API

by Jim Conger

The combination of the mail functions in MAPI.DLL and the APPEXEC.DLL library give you the flexibility to build your own application right into the fabric of the Microsoft Mail system. Jim's program, written in Visual C++, sends and receives both standard text messages and special message types.

EXAMINING ROOM

EXTENDING C WITH PROLOG

by Dennis Merritt

Two languages can be better than one. Dennis shares a C/Prolog interface which he used to build an expert system that identifies IRQ conflicts. David Hovel adds a note on how Prolog and C are used to manage Windows NT network configuration.

PROGRAMMER'S WORKBENCH

SPEECH SYNTHESIS IN C++

by Neil G. Rowland, Jr.

Neil presents a C++ class library for speech synthesis using the Windows 3.1 Multimedia API. With this library, you can write a Windows app that generates speech on any MPC-compatible sound card.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael chats with Lee Buck about the coming changes to application-development tools that are being spurred on by reusable software and component objects.

C PROGRAMMING

by Al Stevens

Quincy, the C interpreter that Al's been developing over the past few months, operates from within an integrated development environment with an integrated editor, debugger, and translator. This month, Al focuses on the debugger. He also mulls over what Bjarne Stroustrup has to say about preprocessors.

ALGORITHM ALLEY

edited by Bruce Schneier

In this month's column, William Stallings examines how Bloom filters can be used to provide computer-generated passwords that are generally more secure than familiar, easy-to-guess passwords.

UNDOCUMENTED CORNER

edited by Andrew Schulman

Troy Folger unravels OS/2's Dos Query Process Status API, the undocumented interface that PSTAT uses to obtain low-level OS/2 2.x system information.

PROGRAMMER'S BOOKSHELF

by Al Stevens

This month, DDJ's resident C columnist looks at Stroustrup's The Design and Evolution of C++ and Duntemann and Pronk's Inside the PowerPC Revolution.

FORUM

EDITORIAL

by Jonathon Erickson

LETTERS

by You

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1994, Dr. Dobb's Journal


September 1994 - DATA STRUCTURES AND FILE FORMATS

FEATURES

THE BMP FILE FORMAT

by Marv Luse

When is a standard file format not a standard file format? When it is the well-known BMP image format. As Marv points out, the BMP format is actually a sheaf of formats bundled under the same name. In this article, he examines BMP's image format incarnations and presents techniques for encapsulating them, using C++.

K-TREE CONTAINER DATA STRUCTURES

by Rodney Bates

K-trees are container data structures that represent linear sequences of integers, pointers, and the like. Although Rodney initially developed K-trees to deal with the problem of browsing and debugging incomplete programs, they also have a more general applicability.

EXTENDING REXX WITH C++

by Art Sulger

After writing his OS/2 database routines in C++, Art wanted to use visual development tools to build the UI. Consequently, he extended his C++ classes into REXX-callable external functions.

INSIDE THE RIFF SPECIFICATION

by Hamish Hubbard

The Resource Interchange File Format (RIFF) specification is a tagged-file specification designed for the storage of various types of multimedia data. Wave Viewer, the program Hamish presents here, reads and writes RIFF files which contain waveform data.

MEDIAN-CUT COLOR QUANTIZATION

by Anton Kruger

Mapping a continuous variable to a discrete set of values is called quantization, a concept Anton applies to the problem of how you go about mapping a true-color image to 256 colors.

EMBEDDED SYSTEMS

EPROM EMULATION

by David Mockridge

David discusses the software and hardware that make up an EPROM emulator, then presents a program for downloading code to an EPROM via a PC's parallel port.

NETWORKED SYSTEMS

A PRINT FILTER FOR UNIX

by Michael A. Covington and Mark Juric

In this article, our authors present lj4m, a UNIX print filter that enhances the power of the versatile Hewlett Packard LaserJet 4M printer.

EXAMINING ROOM

EXAMINING OS/2 2.1 EXECUTABLE FILE FORMATS

by John Rodley

The updated version of SHOWEXE.C that John presents here makes it possible for you to analyze 32-bit, flat-memory-model, LX-style executables.

PROGRAMMER'S WORKBENCH

IMAGE ACQUISITION USING TWAIN

by Craig A. Lindley

The TWAIN software specification provides a uniform interface between graphics-supporting software and image-capturing hardware. Craig presents a C++ class, implemented as a Windows DLL, which can be used to add image acquisition to any Windows application.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

The PowerPCis Michael's focus this month, as he hears what Tom Pittman has to say about it, and reports on what Jeff Duntemann and Tom Thompson have written about it.

C PROGRAMMING

by Al Stevens

The ANSI/ISO X3J16 committee's standard definition for C++ includes extensions to the language. Al discusses exception handling, one of the main new features.

ALGORITHM ALLEY

by Bruce Schneier

Complexity theory provides a methodology for analyzing the computational complexity of different programming algorithms. Using complexity theory, you can compare the efficiency of different algorithms, and determine which is faster.

UNDOCUMENTED CORNER

edited by Andrew Schulman

Taku Okazaki unravels the undocumented Windows interface which the V86 MMGR uses to take over the page tables belonging to a 386 expanded-memory manager.

PROGRAMMER'S BOOKSHELF

by Walter Oney

Walter takes a close look at the recently published Writing Windows Virtual Device Drivers.

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1994, Dr. Dobb's Journal


October 1994 - INTEROPERABLE OBJECTS

FEATURES

INTEROPERABLE OBJECTS

by Mark Betz

If the next great battle in the computing wars revolves around interoperable (or component) objects, you'd better know who the combatants are and what their arsenals hold. Mark analyzes the specifications and proposals, ranging from CORBA and SOM/DSOM to COM and OpenDoc.

OBERON SYSTEM 3

by Johannes L. Marais

From certain perspectives, developing truly interoperable component objects requires viewing the programming language and operating system as a symbiotic whole. Oberon System 3 is just such an environment.

MAKING A CASE FOR ANIMATING C++ PROGRAMS

by Alan West

Alan argues that for object-oriented systems, it's better to have dynamic, object-oriented, animated views that show objects as they are created and destroyed and as they communicate than it is to animate static structural views.

ENDIAN-NEUTRAL SOFTWARE

by James R. Gillig

In the first installment of this two-part article, Jim examines what Endian means from the programmer's perspective, including Big-endian, Little-endian, and the PowerPC's Bi-endian architecture. Next month, he'll discuss how to write portable software by applying Endian-neutral design and programming principles.

EMBEDDED SYSTEMS

EXTENDED STATE DIAGRAMS AND REACTIVE SYSTEMS

by Doron Drusinsky

Doron examines how extended state diagrams (also known as "Harel diagrams") can be used in reactive systems--those systems that endlessly react to a plurality of partially correlated entities in their environment.

NETWORKED SYSTEMS

NETWORK COMMUNICATIONS USING THE NetBEUI PROTOCOL

by Marshall Brain

NetBEUI, the native network protocol for both Windows NT and the upcoming "Chicago," handles such things as disk and printer sharing over the network. Marshall describes the protocol and shows how to apply it in your own applications.

EXAMINING ROOM

EVALUATING THE SOFTWARE DEVELOPMENT PROCESS

by James O. Coplien

How efficient is your software-development process? Jim presents techniques for measuring process efficiency, then describes a real-world example of its application.

PROGRAMMER'S WORKBENCH

OLE2 AND WINDOWS .INI FILES

by Billy Cousins

Object Linking and Embedding (OLE) is an architecture that allows applications to integrate data or objects into a compound document. Billy presents functions that let you use compound files to replace and enhance the initialization file functions provided with Windows.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Can software model the human mind? If so, what kind of model should it be? Michael examines these and other topics.

C PROGRAMMING

by Al Stevens

Al discusses the symbol-table process and the lexical scan Quincy uses to build a run-time, interoperable token stream. He also ponders the Zen of Zen books.

ALGORITHM ALLEY

edited by Bruce Schneier

Ken Price examines genetic annealing, a versatile approach to global optimization that's based on a combination of genetic algorithms and simulated-annealing techniques.

UNDOCUMENTED CORNER

edited by Andrew Schulman

After going nose-to-nose over trade practices, either Microsoft or the Feds blinked. Andrew analyzes the case and its implications.

PROGRAMMER'S BOOKSHELF

by Peter D. Varhol

Peter discovers that two seemingly unrelated books--Things That Make Us Smart and The Fuzzy Systems Handbook--do have something in common.

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1994, Dr. Dobb's Journal


November 1994 - DATABASE PROGRAMMING

FEATURES

AN SQL SERVER MESSAGE-HANDLING CLASS

by Mark Betz

Before building an SQL server class for Sybase/Microsoft's SQL Server, Mark had to unravel its client/server message-handling mechanism. Here's what he found, along with the C++ class library he eventually developed.

OBJECT DATABASES

by Jonathan Wilcox

As distributed computing and interoperable objects move into the forefront of computing, the need for object-database standards will become paramount. Jonathan examines the issues surrounding object methods and distributed programming, focusing on how these issues relate to object databases.

DATABASE MANAGEMENT IN C++

by Art Sulger

Art presents a C++ class library which provides a single interface to multiple database file formats, saving you time and trouble during the development process.

ENDIAN-NEUTRAL SOFTWARE, PART 2

by James R. Gillig

In this installment of his two-part article, Jim discusses how you write portable software by applying Endian-neutral design and programming principles.

SHARING PERIPHERALS INTELLIGENTLY

by Ian Hirschsohn

The key to coping with mountains of data is to be able to transfer and share it at reasonable transfer rates. Ian describes a system for moving data at high speeds using off-the-shelf hardware.

PARTITIONS

by Joe Celko

Partitions provide a means for dividing data into meaningful groups. Joe examines algorithms and techniques for efficient partitioning.

EMBEDDED SYSTEMS

INTERFACING LABORATORY INSTRUMENTS

by Brian R. Anderson

Brian presents a simple, instrument-independent system for making individual measurements under user control, or a timed series of measurements under program control--all using the PC's RS-232 port.

NETWORKED SYSTEMS

PACKET FILTERING IN THE SNMP REMOTE MONITOR

by William Stallings

The Simple Network Management Protocol (SNMP) was designed for managing complex, multivendor internetworks. Bill examines its remote-network monitoring facilities, while Steve Witten adds details on the abstract-syntax notation, an OSI language for defining the formats of SNMP packets.

EXAMINING ROOM

CHARACTER SIMULATION WITH SCRIPTX

by Assaf Reznik

The ScriptX system from Kaleida Labs is a platform-independent, object-oriented development environment for creating multimedia apps. Assaf implements a ScriptX-based multimedia application which was created in a way that facilitates reuse of its design and code in other simulations.

PROGRAMMER'S WORKBENCH

BUILDING MULTIMEDIA DATABASES

by Michael Regelski

MediaDeveloper is a library of multimedia programming objects that let you incorporate video, sound, animation, graphics, and images into database apps. Michael uses Visual Basic, Q&E's VBX tool, and MediaDeveloper to develop a multimedia database.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

The life and death of AI, robots, and Steve Ballmer's car are Michael's topics this month.

C PROGRAMMING

by Al Stevens

This month, Al focuses on how Quincy's design separates the IDE, translator, and interpreter. He also takes a look at P.J. Plauger's new book, The Draft Standard C++ Library.

ALGORITHM ALLEY

edited by Bruce Schneier

Random numbers are essential in cryptography. This month, Colin Plumb discusses the random-number generator he helped devise for the Pretty Good Privacy (PGP) e-mail security program.

PROGRAMMER'S BOOKSHELF

by Douglas Reilly

Embedded-systems development isn't just for assembly-language programmers anymore. Doug examines two books--Programming Microcontrollers in C and Embedded Systems Programming in C and Assembler--which take embedded-systems programming to a higher language.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1994, Dr. Dobb's Journal


December 1994 - DATA COMMUNICATIONS

FEATURES

WORLD WIDE WEB AND HTML

by Douglas C. McArthur

From pizza to protein databases, the World Wide Web helps you to quickly find information on the Internet. But to prepare documents for WWW browsing, you must be familiar with the Hypertext Markup Language (HTML). Douglas examines HTML coding techniques, while Dan Connelly adds a note on future directions HTML may take.

DIGITAL SPEECH COMPRESSION

by Jutta Degener

Jutta provides an overview of GSM 06.10 compression, then presents her implementation of a 32-bit GSM 06.10 coder and decoder written in C that uses the RPE-LTP algorithm.

INTELLIGENT XYMODEM

by Tim Kientzle

Tim's "XYModem" protocol automatically determines which XModem or YModem dialect is being used by the other end.

ERROR-RECOVERY CODES

by Bart De Canne

Bose-Chaudhuri-Hocquenghem (BCH) and Reed-Solomon (RS) codes are two powerful approaches to error-control coding. Bart examines these, using them to encode data in such a way that data errors can be recovered.

SHARING PERIPHERALS INTELLIGENTLY, PART 2

by Ian Hirschsohn

In this installment of his two-part article, Ian examines how the STAR peripheral manager uses SCSI-2 as a high-speed network.

EMBEDDED SYSTEMS

REAL-TIME SCHEDULING ALGORITHMS

by Alberto Daniel Ferrari

Predictability of real-time systems is fundamental to their success or failure. Alberto examines a number of real-time scheduling algorithms which ensure this predictability.

NETWORKED SYSTEMS

WRITING SERIAL DRIVERS FOR UNIX

by Bill Wells

More often than not, things don't go right with UNIX serial ports because the serial drivers are often kludges and hacks. Bill implements a reliable serial driver for FreeBSD from the ground up.

EXAMINING ROOM

ADDING ANIMATION TO WINDOWS HELP

by Peter Kent

Spiff up your Windows help systems by adding animation. Peter discusses a pair of toolkits--the Movie Development Kit and DEMOquick--that let you create animations and link them to Windows Help buttons or hot spots.

PROGRAMMER'S WORKBENCH

BUILDING AN E-MAIL MANAGER

by Michael Floyd

Mike uses PowerBuilder Desktop and QmodemPro for Windows to build a communications engine which automatically logs onto online services such as CompuServe, MCI Mail, Internet, and DDJ Online, then exchanges e-mail between you and others.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Between attending conferences and picking up the pieces of boxes dropped off by the UPS delivery van, it's all Michael can do sometimes to keep up.

C PROGRAMMING

by Al Stevens

Al considers information-retrieval engines and looks at the CEnvi programming tool and its subset language, "Cmm," short for "C-minus-minus."

ALGORITHM ALLEY

edited by Bruce Schneier

In this month's column, Pieter Gosselink reviews the two basic approaches to dithering--error distribution and ordered dither-- then presents a technique he's developed that's fast and efficient.

PROGRAMMER'S BOOKSHELF

by Ray Duncan

Ray takes a second look at the never-ending deluge of Internet-related books, ranging from how-to books to network-administration guides.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1994, Dr. Dobb's Journal


SPECIAL ISSUE - MULTIMEDIA PROGRAMMING

FEATURES

Morphing on Your PC

by Scott Anderson

Scott examines the history and mathematics behind morphing and includes three utility programs that let you run full-screen animated morphs on your PC.

Digital Video File Formats

by Mark Florence

How can you harness the power of desktop digital video? For starters, by having a grasp of file formats such as Apple's QuickTime and Microsoft's Video for Windows.

Compressing Waveform Audio Files

by Neil G. Rowland, Jr.

Neil presents a C++ class library that uses low-level waveform services for signal processing, compressing waveform files to about half the original size.

Multimedia Audio Systems

by John Ratcliff

An audio-industry expert examines where we are and where we're going when it comes to multimedia sound systems, focusing on general-MIDI implementations.

Inside OS/2 Software Motion Video

by Les Wilson

Les analyzes how OS/2's Multimedia Presentation Manager uses multiple threads for full-motion video synchronization.

Programming the QUANTUMdsp

by Charles A. Mirho

The QUANTUMdsp board lets you download microcode from disk files, thereby redefining the QUANTUMdsp's functionality on-the-fly.

Animation with the Windows GDI

by Joe Sam Shirah

Joe Sam presents techniques for bitblts and screen repainting that let you create smoother, faster animations.

Writing a Multimedia App in Liana

by Jack Krupansky

Jack describes a large multimedia application he wrote using the Liana programming system.

The VESA BIOS Audio Interface

by Doug Cody

The VESA BIOS Extension/Audio Interface (VBE/AI) provides a standard software interface for audio, similar to the VGA BIOS for video.

DSP and Audio Compression

by Jay B. Reimer

Jay explores the various audio-compression techniques and describes how DSPs can be used for higher performance in multimedia systems.

Build Your Own RS-232 Sound System

by Dennis Cronin

Using the tricks Dennis presents here, you can use your PC's RS-232 port to produce serviceable audio from an attached speaker.

Editorial

by Michael Floyd

Copyright © 1994, Dr. Dobb's Journal


Special Issue 1994 - INFORMATION HIGHWAY

FEATURES

The Economics of the Internet

by Jeffrey K. MacKie-Mason and Hal Varian

There's more to the Internet than protocol and routers. Our authors examine proposed pricing schemes and market structures as the Internet moves from the world of research to that of commerce.

E-Mail Security

by Bruce Schneier

If you send or receive electronic mail, you should be concerned about who else has access to your private correspondence and how they gain that access.

MUD Games on the Internet

by Dennis Cronin

Multiplayer User Dungeon games, or "MUDs," are played online by people all over the world. Dennis surveys some of the more popular MUDs, and tells you where to go if you want to set up your own.

An Online Conferencing System Construction Kit

by David Betz

David turns Bob, a general-purpose, object-oriented language he created a few years ago, into a language for writing conferencing systems.

Very High-Speed Networks: HiPPI and SIGNA

by William F. Jolitz and Lynne G. Jolitz

Very high-speed networking is the key to rapidly and economically delivering large amounts of information.

sGs: A Simple Gopher Server

by Bob Kaehms and Jonny Goldman

Gopher is a menu-based system that simplifies the dissemination of information by displaying a uniform user interface to the network. Our authors present a Gopher server and discuss the basic Gopher protocol.

Building an Internet Global Phone

by Sing Li

Sing Li presents the Internet Global Phone, a Windows-hosted application which enables two-way voice communication across the Internet. Mark Clouden adds a note about his WSNETWRK library, which provides a higher-level abstraction than the Winsock paradigm.

Creating Your Own Multiplayer Game Systems

by Rahner James and Linus Sphinx

Build your own multiplayer network-game systems using the development tools provided here.

Civic Networking with Geographic Information Systems

by Richard Civille and R.E. Sieber

Geographical information systems-- ideally suited for civic networking by the general public-- are computer systems that assemble, store, manipulate, and display geographic-location data.

Editorial

by Jonathan Erickson

Copyright © 1994, Dr. Dobb's Journal


Special Issue 1994 - ALTERNATIVE PROGRAMMING LANGUAGES

FEATURES

The Parasol Programming Language

by Robert Jervis

Parasol, short for "Parallel Systems Object Language," is a development environment influenced by C and Smalltalk, although its design also reflects C++, CLU, Algol, and Turbo Pascal.

The Perl Programming Language

by Oliver Sharp

Perl, a language designed to handle a variety of network system-administration tasks, makes manipulating the socket protocol easier still. Oliver shows how to write Perl scripts that communicate across networks of UNIX machines.

The Sather Programming Language

by Stephen M. Omohundro

Sather is a language that's simple, interactive, and nonproprietary. It sports parameterized classes, object-oriented display, statically checked strong typing, multiple inheritance, garbage collection, and more.

The Modula-3 Programming Language

by Sam Harbison

Feature-for-feature, Modula-3 is on a par with Ada and C++, but avoids complexity by simplifying individual features like inheritance and generics. Furthermore, Modula-3 is less of a moving target because it already has features only now being added to those other languages.

Bob: A Tiny Object-Oriented Language

by David Betz

This tiny C-like object-oriented language, developed by the creator of XLisp, XScheme, and other well-known public-domain languages, is a powerful extension language.

The Tcl Programming Language

by John K. Ousterhout

Tcl (pronounced "tickle") is a command language John designed to be a powerful and flexible "glue" language for assembling software components.

Quincy: The Architecture of a C Interpreter

by Al Stevens

Quincy, a C interpreter with a front end based on Al's D-Flat windowing system, is fast, small, and efficient.

The Dylan Programming Language

by Tamme D. Bowen and Kelly M. Hall

Originally based on Scheme, Dylan is an object-oriented, dynamic language designed to replace existing static languages for the development of large software systems.

The Oberon Programming Language

by Josef Templ

Oberon, a general-purpose, object-oriented programming language that evolved from Pascal and Modula-2, has been implemented for DOS, Windows, Amiga, Mac, and UNIX.

Editorial

by Jonathan Erickson

Copyright © 1994, Dr. Dobb's Journal


Special Issue 1994 - THE INTEROPERABLE OBJECTS REVOLUTION

FEATURES

Introducing Interoperable Objects

by Ray Valdés

You can't tell the players without a program. DDJ's senior technical editor surveys the world of interoperable objects, from object models to compound-document architectures.

OMG's CORBA

by Mark Betz

The Object Management Group's Common Object Request Broker Architecture (CORBA) specification is foundation of distributed-computing systems such as IBM's DSOM and Sunsoft's DOE, among others.

The Component Object Model

by Sara Williams and Charlie Kindel

Microsoft's Component Object Model (COM) is a component-software architecture that allows applications and systems to be built from components supplied by different software vendors.

IBM's System Object Model

by F.R. Campagnoni

The System Object Model (SOM), the linchpin of IBM's approach to interoperable objects, will eventually underlie all of IBM's object-technology offerings, including OpenDoc, the Taligent frameworks, and the Workplace family of operating systems.

OpenDoc

by Jeff Rush

OpenDoc is an open-architecture-enabling technology designed by Apple for creating compound documents which can contain many different types of data, such as text, graphics, tables, video, sound, and animation.

The Architecture of the Taligent System

by Michael Potel and Jack Grimes

The Taligent system is a web of frameworks that includes an object-oriented application-programming model, a fully object-oriented operating environment, and a suite of framework-based developer tools that complement the programming model.

OLE Integration Technologies

by Kraig Brockschmidt

OLE 2.0, which is built upon Microsoft's COM, is a component-integration technology for interoperable objects that can be located inside applications, in-process DLLs, or out-of-process EXEs.

Novell's AppWare Distributed Bus

by Joseph Firmage

Novell's AppWare Bus provides the tools and technologies to rapidly develop client applications that leverage existing network services.

Distributed Applications and NeXT's PDO

by Dennis Gentry

The Portable Distributed Objects system and Distributed Objects, subsets of NextStep technology, make it possible to construct and maintain complex client/server apps in a heterogeneous environment.

Implementing Interoperable Objects

by Ray Valdés

The best way to see how one approach to interoperable objects differs from another is to review actual code.

Copyright © 1994, Dr. Dobb's Journal


Special Issue 1994 - WINDOWS PROGRAMMING

FEATURES

2PANE Illuminates Windows

by Dick Wilmot

2PANE, the program presented here, lets you create multiple windows and probe Windows messaging and window procedures. Dick implements 2PANE for both Windows 3.x and Windows NT.

Very Dynamic Linking in Windows

by Craig A. Lindley

Craig presents a technique he calls "dynalinking" that manages the interface between an application program and one or more DLLs, maximizing the power and flexibility of both.

A Generic About... Box Handler

by Joseph M. Newcomer

Joe's generic About... box handler is a single binary that can be used by all applications. He also incorporates it into a DLL that has some support code needed by the applications.

DOS Pipes for Windows

by Al Williams

Traditional multitasking operating systems let you use pipes to chain programs together--but not Windows. Al shows you a pipe-like way of running a DOS program that collects its output as it's created, then routes it to a cooperating Windows program.

A Program Architecture for Visual Basic Development

by Joachim Schürmann

A program architecture provides constraints and services which appear desirable for a particular project. The architecture Joachim discusses here is designed to squeeze more performance out of Visual Basic applications.

A Windows I/O Monitor

by Rick Knoblaugh

VRKIOMON is a driver that lets you eavesdrop on I/O processes, such as COM ports, that are normally trapped by existing Windows drivers. Rick's trick is to hook the VMM services for installing I/O handlers and enabling and disabling I/O trapping.

Customizing Window Behavior

by Vinod Anantharaman

Vinod examines how you can use subclassing with the Microsoft Foundation Class (MFC) library. He illustrates this technique by developing a DLL that lets you change the default look of windows running on your system.

Avoiding Windows PATH Cram

by Joseph M. Newcomer

How many times have you installed a new application, only to find that it added itself at the front of your PATH, maxing out the 127-byte PATH limit? FreePath, the program Joe presents here, handles the PATH problem by simulating the effect of PATH without actually requiring that new directories be added to the PATH.

Exception Handlers and Windows Applications

by Joseph Hlavaty

TrapMan, the Windows tool Joe presents here, is a debugging tool for analyzing exceptions in Windows applications.

Editorial

by Michael Floyd

Copyright © 1994, Dr. Dobb's Journal


Dr. Dobb's Developer Update, March 1994

Chicago Completes the OS Loop
Tech Focus - C++ Compilers: The New Generation
Op/Ed - Borland's New License
Conference Report - Hypertext '93
Of Interest - product releases
News Briefs - BCC 4.0 for Chicago,Crypto Chip Debuts

Dr. Dobb's Developer Update, April 1994

Software Patents: Into the Breach Again
Tech Focus - C Code on CD-ROMs
Op/Ed - Software Patents: You make the Choice
Conference Report - RSA Data Security Conference
Of Interest - product releases
News Briefs - Encore for Actor, Free Security

Dr. Dobb's Developer Update, May 1994

Component Object Wars Heat Up
Tech Focus - OS/2 Development Tools
Op/Ed - Winners and Losers
Conference Report - Software Development '94
Of Interest - product releases
News Briefs - Merger Mania, or the Big Get Bigger

Dr. Dobb's Developer Update, June 1994

The Multimedia Gold rush of '94
Op/Ed - Time for a Second Look
Of Interest - product releases
Book Review - Towards Very High-Speed Networking
News Briefs - Public Patents?, USL vs. UC

Dr. Dobb's Developer Update, July 1994

A Milestone on the Road to Chicago
Conference Report - Eurocrypt '94
Of Interest - product releases
News Briefs - Encryption, Internet

Dr. Dobb's Developer Update, August 1994

The Internet: Here Today
Tech Focus - Building Applications with Visual Tools
Conference Report - National Online Meeting '94
Of Interest - product releases
News Briefs - Fiber Optic Now?

Dr. Dobb's Developer Update, September 1994

What's up at Kaleida?
Tech Focus - Source-Code Escrow for Intellectual Property Protection
Conference Report - Borland International Conference
News Briefs - Making theTransition, Whence Cometh Chicago?

Dr. Dobb's Developer Update, October 1994

Artificial Intelligence: Out of Hibernation?
Tech Focus - Portability and Free Software
Conference Report - SLA: Stepping Into the Electronic Library
Of Interest - product releases
News Briefs - Intellectual-Property Changes in the Offing

Dr. Dobb's Developer Update, November 1994

Latin America: A Boom Market Waiting to Happen?
Tech Focus - NAFTA's Intellectual Property Provisions
Conference Report - PLoP '94
News Briefs - Apple Licenses OS- Sort Of; RC4 Encryption Reverse Engineered

Dr. Dobb's Developer Update, December 1994

The Next Generation of IP: Small Step or Giant Leap?
Tech Focus - Dialin' for High-Tech Dollars
Conference Report - Stanford Computer Forum
News Briefs


January 1995 - NUMERIC PROGRAMMING

FEATURES

PENTIUM OPTIMIZATION AND NUMERIC PERFORMANCE

by Stephen S. Fried

The Pentium is the first member of the Intel x86 family that requires RISC-style instruction scheduling to achieve its full potential. Steve analyzes what this means in terms of Pentium floating-point performance and how you can get full throughput from a Pentium.

UNDOCUMENTED FEATURES OF PC FORTRAN LIBRARIES

by Kenneth G. Hamilton

The common-library approach of multilingual language vendors means that your compiler may have hidden features. Ken details some of the goodies found in several PC Fortran compilers.

USING THE MULTIPLE-PRECISION LIBRARY

by John Rogers

Although the multiple-precision (MP) integer library is available for many systems, it has never been fully documented. John provides hints, tips, and sample code for using the this high-performance numeric library.

BASIC ARITHMETIC WITH INFINITE INTEGERS

by Jeffrey W. Hamilton

Jeff describes how to implement an efficient method for representing infinite integers and algorithms for doing simple arithmetic with infinite integers.

DATA ATTRIBUTE NOTATION RELATIONSHIPS

by Reginald B. Charney

Data Attribute Notation is an object-oriented coding style that emphasizes data abstraction. Reg discusses how DAN can represent relationships that occur in most problems.

THE RC5 ENCRYPTION ALGORITHM

by Ronald L. Rivest

The RC5 encryption algorithm is a fast symmetric block cipher suitable for hardware or software implementations. Unlike other approaches to encryption, RC5 makes heavy use of data-dependent rotations.

EMBEDDED SYSTEMS

TIMING FOR THE 68332

by Eric McRae

The Motorola 68332 microcontroller and Dallas Semiconductor 1202 serial timekeeping chips aren't supposed to be compatible. But Eric needed them to work together, and here's how he did it.

NETWORKED SYSTEMS

REMOTE NETWORK PRINTING

by Zongnan H. Lu

Henry implements a Windows-based print server that uses FTP to download files to a local PC and send them to a printer on the PC's network. In this way, all files on UNIX 4.3BSD-based workstations can be automatically sent to printers on a PC network system at any time.

EXAMINING ROOM

COMPLYING WITH FORTRAN 90

by Steven Baker

Compiler vendors are finally starting to crank out Fortran 90 compilers and translators. Steve examines a covey of compilers to find out just how compliant they are with the Fortran 90 standard.

PROGRAMMER'S WORKBENCH

VIRTUAL REALITY AND THE WORLDTOOLKIT FOR WINDOWS

by Ron Fosner

The WorldToolKit for Windows is a library of over 400 C routines for building real-time 3-D simulations and virtual-reality applications. Ron uses the toolkit to create a virtual-reality app that tracks down a contamination problem in a hypothetical town.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael mulls over what it means to be a programmer.

C PROGRAMMING

by Al Stevens

Al rises to the defense of geeks everywhere, then launches into the architecture of a text-search engine that he's developing.

ALGORITHM ALLEY

by Bruce Schneier

GOST, a secret-key algorithm similar to DES, is the first encryption algorithm to find its way out of the Soviet Union. Bruce analyzes the algorithm, then provides a Cimplementation.

UNDOCUMENTED CORNER

by Andrew Schulman

Andrew lifts the lid on some of Windows 95's internal structures, documented and otherwise.

PROGRAMMER'S BOOKSHELF

by Peter Gulutzan

Making programs go faster is what Michael Abrash's Zen of Code Optimization is all about.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1995, Dr. Dobb's Journal


February 1995 - DISTRIBUTED COMPUTING

FEATURES

DISTRIBUTED COMPUTING AND THE OSF/DCE

by John Bloomer

DCE from the Open Software Foundation is a specification for building distributed-computing systems. John examines the DCE system and API, then presents both single-process and client/server implementations of an image database.

DISTRIBUTED REAL-TIME OPERATING SYSTEMS

by E. Douglas Jensen

The emerging class of real-time operating systems are modular, adaptable, and scalable in functionality. And, as Doug describes here, they'll support global, distributed, and cooperative computing across and between levels in the application-control hierarchy.

THE CONDOR DISTRIBUTED PROCESSING SYSTEM

by Todd Tannenbaum and Michael Litzkow

Condor is a powerful, distributed batch-processing system that lets you use otherwise idle CPU cycles in a cluster of workstations.

EXTENDING C++ FOR DISTRIBUTED APPLICATIONS

by Patrick Suel

Developing groupware requires new programming tools and techniques. Here, Patrick uses the ILOG Server to extend C++ objects for developing dynamic servers.

READING GIF FILES

by Wilson MacGyver Liaw

The GIF file format has become one of the most popular formats for storing images. Wilson examines the format and presents a program for reading GIF files.

RTFHELP FOR WINDOWS HELP FILES

by Joseph Hlavaty

With Joe's RTFHelp filter, you aren't limited to nonintuitive commands and RTF-based word processors when generating Windows help files.

IDENTIFYING SERIAL PORT IRQs

by John Ridley

John presents a program that detects all relevant information about serial ports--how many ports are installed, where they are, and to which IRQ they are set.

EMBEDDED SYSTEMS

THE MICROSOFT FLASH FILE SYSTEM

by Peter Torelli

Peter examines flash file systems for DOS, focusing on the mechanics behind a flash file system based on the Microsoft data structures.

NETWORKED SYSTEMS

DESIGNING SERVERS WITH CPI-C

by Peter J. Schwaller and John Q. Walker II

Since the Common Programming Interface for Communications (CPI-C) provides a consistent set of calls for systems ranging from Windows, OS/2, UNIX, to AS/400, CICS, and MVS, you need deal with only one set of calls to write client/server applications for different systems.

EXAMINING ROOM

BUILDING AN OLE SERVER USING VISUAL C++ 2.0

by John LaPlante

John uses the recently released Visual C++ 2.0 for building an OLE server that lets you embed a GIF image file into an OLE 2.0-compatible document.

PROGRAMMER'S WORKBENCH

DEPLOYING DCE AS AN INFRASTRUCTURE

by Jack Danahy

When Hewlett-Packard's Chelmsford Systems Software Lab decided to implement a distributed infrastructure throughout the organization, they faced barriers ranging from system security and clock synchronization to user skepticism. Jack describes how the Lab overcame both.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Is the art and science of computer programming old enough to have a history? Michael thinks so, and he begins chronicling it.

C PROGRAMMING

by Al Stevens

Al continues his static text-search engine project by building a common word list which determines the hierarchical organization of the database.

ALGORITHM ALLEY

edited by Bruce Schneier

Iwan Dobbe presents techniques for generating faster fast Fourier transforms, then implements these approaches in both C and assembler.

PROGRAMMER'S BOOKSHELF

by Steve Gallagher

Steve examines a pair of books that tackle the subjects of object-oriented programming, OS/2, and the SOM/DSOM object models from IBM.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1995, Dr. Dobb's Journal


March 1995 - CROSS-PLATFORM DEVELOPMENT

FEATURES

Dr. Dobb's Journal EXCELLENCE IN PROGRAMMING AWARDS

by Jonathan Erickson

To honor extraordinary achievement in the field of software development, DDJ presents its first "Excellence in Programming" awards to Alexander Stepanov and Linus Torvalds.

CROSS-PLATFORM COMMUNICATION CLASSES

by Richard B. Lam

Richard summarizes common techniques for interprocess communication, presenting a library that implements semaphores in a platform-independent manner to allow signaling or controlling of shared resources between processes and threads.

A PORTABLE FONT SPECIFICATION

by Ronald G. White and John Biard

When it comes to portability, fonts present a variety of problems. Our authors share an approach to flexible cross-platform fonts that doesn't require additional coding when moving from platform to platform.

CROSS-PLATFORM DATABASE PROGRAMMING

by William Fairman and Randal Hoff

If you want to write software that's portable on platforms from supercomputers to embedded systems, you'll want to use the programming techniques presented here.

THE BMP FILE FORMAT, PART 1

by David Charlap

In the first installment of this two-part article, David examines how the "standard" BMP file format has been implemented differently on different platforms.

BUILDING A SOM OPENDOC PART

by Robert Orfali and Dan Harkey

In a popular Microsoft Systems Journal article, "Building Component Software with Visual C++ and the OLE Custom Control Developer's Kit," Eric Lang described how to create an OLE Custom Control using Visual C++, MFC, and the CDK. Here, our authors do the same thing using OpenDoc for OS/2.

EMBEDDED SYSTEMS

SIMULATION COMPILATION AND PORTABILITY

by Marc E. Hoffman

Simulation compilation is a technique that lets you compile a simulation, then run an executable representing the original code instead of simulating the code directly.

NETWORKED SYSTEMS

CONGESTION CONTROL IN FRAME-RELAY NETWORKS

by William Stallings

Frame relay is a standardized service that functions as a public wide area network backbone connecting individual local area networks. As William points out, however, the standard does not specify what you're supposed to do when it comes to flow and error control.

EXAMINING ROOM

EXAMINING THE POWERBASIC DEVELOPER KIT

by Raymond J. Schneider

Ray uses the PowerBASIC Developer Kit to write a Windows application for vocabulary-frequency analysis.

PROGRAMMER'S WORKBENCH

BUILDING DISTRIBUTED APPLICATIONS WITH GALAXY

by Stan Dolberg

Galaxy 2.0, a cross-platform toolset for building complex distributed applications, lets you write applications that can communicate with other Galaxy applications running on any platform.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Say what you want, but there's nothing ambiguous about what Michael has to say this month, as he rambles from the Industrial Revolution to Apple's Newton Toolkit.

C PROGRAMMING

by Al Stevens

Al chats with Alexander Stepanov, the creator of the Standard Template Library, which ANSI/ISO has approved as a part of Standard C++.

ALGORITHM ALLEY

edited by Bruce Schneier

Micha Hofri looks at the analysis of algorithms--specifically at techniques where you can throw extra memory at a problem in order to increase performance, or sacrifice performance in order to decrease memory requirements.

PROGRAMMER'S BOOKSHELF

by Al Stevens

Adrian King's Inside Windows 95, the first book out on Microsoft's next operating system, is notable on one level because it was published months before Windows 95 is due for release.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1995, Dr. Dobb's Journal


April 1995 - ALGORITHMS

FEATURES

IMAGE AUTHENTICATION FOR A SLIPPERY NEW AGE

by Steve Walton

Is seeing really believing anymore? Can we trust images as evidence of true events? The answer is generally "no," although image-authentication algorithms do make it possible to tell whether or not an image has been modified. Steve describes and implements a class of algorithms that makes it possible to authenticate digital images.

THE DETRIMENTAL WIRE-EXCLUSION HEURISTIC

by Paul J. Martino

Combinatorial optimization involves finding the optimal solution to problems such as computer wiring and the now-familiar traveling-salesman problem. Paul presents a heuristic that's efficient and portable.

THE BMP FILE FORMAT, PART 2

by David Charlap

In last month's installment of this two-part article, David examined how the "standard" BMP file format has been implemented differently on different platforms. This month, he explains how to use the structures to read and interpret bits.

DIRECTED ACYCLIC GRAPH UNIFICATION

by David Perelman-Hall

David describes and implements an object-oriented method of enacting a constraint system, which has been adapted from directed acyclic graph unification. Although he implements this approach for a natural-language parsing system, it can be used in applications as well.

EMBEDDED SYSTEMS

ABOVE-REAL-TIME TRAINING AND THE HYPER-TIME ALGORITHM

by Dutch Guckenberger, Liz Guckenberger, Frank Luongo, Kay Stanney and Jose Sepulveda.

The hyper-time algorithm lets you alter the flow of "simulated time" to benefit users--slower than real time can be used for novice users, while faster than real time can be used for experts or persons "time surfing" over uninteresting portions of information. Applying the algorithm to "Above-Real-Time Training" also improves human performance, increases retention and training-device effectiveness, and decreases stress.

NETWORKED SYSTEMS

A POP3 MAIL CLIENT USING WINSOCK

by Robert A. Duffy

Robert presents a C++ foundation for Internet client applications running on Windows. In doing so, he implements a mail client that understands the Post Office Protocol (POP), a powerful Internet protocol for processing e-mail.

EXAMINING ROOM

BORLAND C++ 4.5 AND OLE 2.0 PROGRAMMING

by Ted Faison

In examining the recently released Borland C++ 4.5, Ted focuses on its OLE 2.0 support, using it to create an OLE server that he then embeds into a Word for Windows 6.0 document.

PROGRAMMER'S WORKBENCH

SERIALIZATION AND MFC

by Chane Cullens

Serialization is the process of writing or reading one or more objects to or from a persistent-storage medium, such as a disk file. Chane examines MFC's serialization mechanism and what it offers cross-platform developers.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael takes a look-see at what's new with visual programming.

C PROGRAMMING

by Al Stevens

Al analyzes the C++ Standard Template Library (STL), then wraps up his text-search project by discussing the C source-code module of the interface between the Visual Basic front end and the Windows DLL that implements the search engine.

ALGORITHM ALLEY

edited by Bruce Schneier

In this month's "Algorithm Alley," Kim Larsen presents a simple yet clever approach for computing the correct day of the week.

UNDOCUMENTED CORNER

edited by Andrew Schulman

Tim unravels the floating-point-division algorithm that Intel didn't quite implement correctly with its Pentium processor.

PROGRAMMER'S BOOKSHELF

by Al Stevens

In last month's "Programmer's Bookshelf," Al examined Adrian King's Inside Windows 95. This month, he dives further into Windows 95 when he looks at Andrew Schulman's Unauthorized Windows 95.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1995, Dr. Dobb's Journal


May19:95 - OPERATING SYSTEMS

FEATURES

IMPLEMENTING LOADABLE KERNEL MODULES FOR LINUX

by Matt Welsh

The most recent release of Linux, a freely distributed UNIX-like operating system, supports dynamically loaded kernel modules. Matt describes the dynamic-kernel-module implementation, concentrating on the steps required to load a module on a running system.

SHARED MEMORY AND MESSAGE QUEUES

by Richard B. Lam

Richard presents C++ classes for cross-platform coding of named shared memory and message queues. In doing so, he supports interprocess-communication mechanisms for OS/2, AIX, and Windows NT.

A CROSS-PLATFORM BINARY DIFF

by Kris Coppieters

BinDiff is a utility that compares two versions of a binary file and creates a diff file containing the differences. Because Kris built BinDiff from a single C source file, it will compile on UNIX, OS/2, DOS, and the Macintosh.

MAPMAN: BUILDING WINDOWS SYMBOLS FILES

by Joseph Hlavaty

Joe presents MapMan, a Windows map-file manager that lets you build .SYM files for any 16-bit Windows executable, including the DLLs that make up Windows itself.

LIGHTWEIGHT TASKS IN C

by Jonathan Finger

While most modern operating systems allow multiple threads within a process, earlier-generation systems do not. Jonathan presents a multithreading package that allows for cooperatively multitasked threads within a single process for operating systems that do not explicitly support threads.

WINDOWS 95 COMMON CONTROLS

by Vinod Anantharaman

Windows 95 GUI building blocks, collectively called "common controls," give you reusable tools for everything from toolbars and tree controls to spin boxes and progress indicators.

BOB AS A MACRO PROCESSOR LIBRARY

by Brett Dutton

Macro languages are user-programmable interfaces to applications. Brett adds to David Betz's original Bob an API that turns a stand-alone Bob interpreter into a macro processor library. David Betz then presents a new version of Bob that runs as a Windows DLL.

PORTABLE SCREEN HANDLING

by Matt Weisfeld

Matt presents routines in C, Pascal, Fortran, and Basic for using ANSI escape sequences on a variety of platforms.

EMBEDDED SYSTEMS

EFFICIENT MC68HC08 PROGRAMMING

by Rand Gray and Deepak Mulchandani

Rand and Deepak examine two basic optimizations for the Motorola MC68HC08 microcontroller: common-subexpression elimination and constant-value propagation.

NETWORKED SYSTEMS

ROLE-BASED NETWORK SECURITY

by William F. Jolitz and Lynne Greer Jolitz

Role-based security is a mechanism orthogonal to the authentication, encryption, and threat-detection mechanisms implemented in most operating systems. Our authors describe how this minimal mandatory-access-control policy is implemented in the 386BSD operating system.

EXAMINING ROOM

INSIDE THE OLE 2 SDK

by Ira Rodens

Ira presents techniques for building an OLE client application using the Microsoft OLE 2 SDK. The application allows embedded objects to be placed within a container, then moved, sized, and saved.

PROGRAMMER'S WORKBENCH

PHOTON AND QNX

by Peter D. Varhol

Photon is a windowing system specifically designed for the QNX operating system. Peter uses the Application Builder, Photon's VB-like development environment, to build a graphical QNX application.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Before examining the pros and cons of visual programming, Michael mulls over the virtues of monkey wrenches.

C PROGRAMMING

by Al Stevens

Al wraps up his D-Flat project by putting a C++ wrapper called "DFWrap" around D-Flat. In doing so, he rewrites his IMail program in C++.

ALGORITHM ALLEY

edited by Bruce Schneier

Rainer Storn implements an optimization algorithm that's based on Monte Carlo methods. To use his program, you simply provide a mathematical formulation of your constraints, without worrying about devising an appropriate objective function.

PROGRAMMER'S BOOKSHELF

by Peter D. Varhol

Is there really a difference between how East and West Coast high-tech companies go about their business? This is the question Annalee Saxenian asks in her book, Regional Advantage: Culture and Competition in Silicon Valley and Route 128.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1995, Dr. Dobb's Journal


June 1995 - SOFTWARE DESIGN

FEATURES

CONSTRUCTING OPERATIONAL SPECIFICATIONS

by Mark Coats and Terry Mellon

Complementing existing methodologies, Mark and Terry propose an operational specification that can be translated into most existing system-development methodologies.

A PRACTICAL STRATEGY FOR OBJECT-ORIENTED DESIGN

by Kanchan Kumar

The methodology Kanchan presents here consists of a language-independent abstraction model and a rule-based implementation model for C++ programmers.

INTERACTIVE DESIGN METHODOLOGY

by Phil Herold and Carla Merill

Helplus is a client-server hypertext help application modeled on the Microsoft Windows help system. Here, our authors describe the help compiler, help viewer, and server program.

EVENT-DRIVEN THREADS IN C++

by Dan Ford

Dan presents a powerful, multithreaded architecture that can be used by almost any application. Implemented in C++, this class library lets you quickly create and control threads.

THREAD PROGRAMMING IN UNIXWARE 2.0

by John Rodley

With the advent of UnixWare 2.0, threads have made their way to the UNIX desktop. John describes how threads are implemented and how you can take advantage of them.

EMBEDDED SYSTEMS

VISUALLY DESIGNING EMBEDDED-SYSTEMS APPLICATIONS

by Doron Drusinsky

Doron describes how design tools that incorporate object-oriented inheritance and extended state diagrams (the visual counterpart of finite state machines) can be used to build control systems.

NETWORKED SYSTEMS

CODING WITH HTML FORMS

by Andrew Davison

HTML forms--which allow World Wide Web documents to include text-entry fields, radio boxes, selection lists, check boxes, and buttons--transform HTML from a hypertext page-description language into a tool for creating interactive documents. Andrew details the steps in writing forms-based applications.

EXAMINING ROOM

COMPARING CASE TOOLS

by Jeffrey L. Armbruster

To examine CASE tools such as Paradigm Plus 2.0, Select OMT, and Together C++, Jeffrey designs an application that collects pricing information in grocery stores.

PROGRAMMER'S WORKBENCH

FLEXIBLE TESTING SYSTEMS

by Herb Isenberg

Today's application-development environments demand testing systems that can quickly adapt to new situations. Herb presents an automated, flexible testing system built around AutoTester, an off-the-shelf automated testing and verification tool that runs on a variety of platforms.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Douglas Hofstadter's recently published Fluid Concepts and Creative Analogies may change the direction of AI research.

C PROGRAMMING

by Al Stevens

Al continues his discussion of IMail, a C++ communications program for sending and receiving electronic mail through a modem connected to an Internet site.

ALGORITHM ALLEY

edited by Bruce Schneier

Sound is surprisingly difficult to compress. It is much more subtle than video compression and less obvious than text. Kyle York examines lossy-compression techniques that have been optimized for sound.

PROGRAMMER'S BOOKSHELF

by Reginald B. Charney

Software Development with Z, by J.B. Wordsworth, uses the Z specification language to examine formal methods of software development.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1995, Dr. Dobb's Journal


July 1995 - GRAPHICS PROGRAMMING

FEATURES

SINGLE-IMAGE STEREOGRAMS

by Dennis Cronin

Three-dimensional illusions are cropping up in everything from the funny papers to magazine advertisements. Dennis examines how the illusion works, then presents and implements an algorithm that lets you generate your own images.

A RAY-CASTING ENGINE IN C++

by Mark Seminatore

Ray casting is a real-time, 3-D rendering technique that's central to many computer-graphics applications. Mark discusses the theory behind ray casting and presents a ray-casting engine he calls "Raycastr."

PNG: THE PORTABLE NETWORK GRAPHIC FORMAT

by Lee Daniel Crocker

PNG, originally designed as an alternative to GIF, is a graphics file format that's simple, portable, and available free-of-charge in source-code form for reading and writing.

IMPLEMENTING AND USING BSP TREES

by Nathan Dwyer

Binary space partitioning (BSP) trees are at the heart of the high-speed, 3-D display engines that are becoming common on PC systems. Nathan examines the BSP data structure and presents a C++ system that uses it.

JPEG-LIKE IMAGE COMPRESSION, PART

by Craig A. Lindley

In this two-part article, Craig presents an image-compression technique that uses the same algorithms as JPEG. He then encapsulates the technique in a set of C++ classes.

EMBEDDED SYSTEMS

THE FUTURE FOR PROGRAMMABLE LOGIC

by Nick Tredennick

Programmable-logic devices (PLDs) may change the way embedded systems are designed and built. Nick examines the transition from microprocessors to PLDs and speculates on what this means to designers.

NETWORKED SYSTEMS

AN ARCHITECTURE FOR NETWORK SIMULATION

by Peter D. Varhol

Peter presents one way of evaluating network traffic and routing packets without a large-scale computer network.

EXAMINING ROOM

EXAMINING THE VESA VBE 2.0 SPECIFICATION

by Brad Haakenson

The recently released VESA BIOS Extension 2.0 specification extends the common, device-independent interface for accessing high-resolution/color-depth video modes on graphics controllers.

PROGRAMMER'S WORKBENCH

PROGRAMMING WITH OPENGL

by Ron Fosner

OpenGL, a computer-industry standard based on SGI's graphics library, lets you create some amazingly complicated and realistic scenes on Windows-based PCs.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Underscoring that everyone is getting on the Net, Michael discusses the Macintosh, WWW, and Mac WWW software.

C PROGRAMMING

by Al Stevens

Al continues his presentation of IMail, an application that calls an Internet host and collects and sends e-mail. This month, he examines the two C++ classes that encapsulate the serial port and the modem.

ALGORITHM ALLEY

edited by Bruce Schneier

Dean Clark addresses the problem of "color quantization" and describes how the popularity algorithm provides one method of mapping colors to images.

PROGRAMMER'S BOOKSHELF

by Lou Grinzo and Steve Gallagher

Lou takes a look at Dave Edson's Dave's Book of Top Ten Lists for Great Windows Programming, while Steve examines C++ Class Library: Power GUI Programming with CSet++, by Kevin Leong, William Law, Robert Lowe, Hiroshi Tsuji, and Bruce Olson.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1995, Dr. Dobb's Journal


August 1995 - C/C++ PROGRAMMING

FEATURES

GENERIC PROGRAMMING AND THE C++ STL

by Dan Zigmond

To illustrate how you can use the C++ Standard Template Library, Dan presents a filter program called "Lexicon" that takes ASCII text and outputs an alphabetized list of all the unique words in that text, ignoring case and punctuation.

STANDARD C: AN UPDATE

by Rex Jaeschke

Rex, chair of the X3J11 committee on ANSI C, reports on recent developments concerning the C language.

A POOLING MEMORY MANAGER FOR C++

by Kirit Saelensminde

While building a high-performance, object-oriented raytracer, Kirit discovered that C++ memory allocation isn't all it should be. Here's his alternative.

IMPLEMENTING BIT VECTORS IN C

by James Blustein

Bit vectors provide an efficient means of implementing arrays of Boolean values. James originally implemented bit vectors to hash document signatures and analyze statistics.

ALPHA BLENDING GRAPHIC IMAGES

by Tim Wittenburg

Alpha blending (sometimes called "image compositing") lets you combine two or more images so smoothly that people can't tell that the resulting image is a composite.

JAVA AND INTERNET PROGRAMMING

by Arthur van Hoff

Java, a language designed for Internet development, is an object-oriented, multithreaded, portable, dynamic language that's similar to C, yet simpler than C++.

JPEG-LIKE IMAGE COMPRESSION, PART 2

by Craig A. Lindley

In this month's installment of his two-part article, Craig describes how the image-compression technique he calls "CAL" differs from JPEG. He then presents the C++ classes on which CAL is built.

THE C++ STANDARD LIBRARY

by Michael J. Vilot

After five years, the ANSI and ISO C++ committees have finally released their first official document. Michael examines the most commonly used components of the proposed C++ Standard Library: iostreams, strings, and some of the containers, iterators, and algorithms included in the STL.

EMBEDDED SYSTEMS

68HC05-BASED SYSTEM DESIGN

by Willard J. Dickerson

From a driver's perspective, antilock brake systems prevent car wheels from locking. From an embedded-system designer's viewpoint, they are complex control applications requiring sensors, software, and microcontrollers such as the Motorola 68HC05B6.

NETWORKED SYSTEMS

IMPLEMENTING DISTRIBUTED OBJECTS

by Ernest N. Prabhakar

Ernest uses NeXT's PDO and Objective-C to implement a simple client-server application that packages a legacy application into an interoperable object and its client.

EXAMINING ROOM

EXAMINING SYMANTEC C++ 7.0

by Ira Rodens

Among other features, this recent incarnation of Symantec C++ sports a visual programming environment, class and hierarchy editors, distributed build tools, and support for templates, exceptions, and run-time type identification. Compiler author Walter Bright adds tips and techniques for optimizing C++ code.

PROGRAMMER'S WORKBENCH

DEVELOPING C++ NLMs

by W. Dale Cave

NetWare Loadable Modules (NLMs) are 32-bit utilities that dynamically link into NetWare. Dale examines the complexity of writing NLMs in C++, then presents DSBROWSE, a utility that lets you view (or "walk") the NetWare Directory Services tree.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael walks the Cyberdog as he reflects on this year's Apple Worldwide Developer's Conference and Apple's Internet strategy.

C PROGRAMMING

by Al Stevens

GNU C++ from the Free Software Foundation is part of a set of programming tools and utilities available from many online locations and several commercial CD-ROMs. After working with the compiler, Al decides this toolset is hard to beat--if you need a C++ compiler that's freely distributable and royalty-free.

ALGORITHM ALLEY

edited by Bruce Schneier

In this month's column, Peter Pearson presents a fascinating look at how biochemical techniques can be applied to classical computer problems such as combinatorial optimization.

PROGRAMMER'S BOOKSHELF

by Lynne Greer Jolitz

When you get on the net, who can you trust? Lynne examines several new books that address this question: Network Security: Private Communications in a Public World, by Charlie Kaufman, Radia Perlman, and Michael Speciner; E-Mail Security, by Bruce Schneier; Network Security, by Steven Shaffer and Alan Simon; and Network Security: How to Plan for It and Achieve It, by Richard H. Baker.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1995, Dr. Dobb's Journal


September 1995 - USER INTERFACES

FEATURES

CLICKABLE IMAGES IN HTML

by Andrew Davison

Adding "hot spots" to WWW home-page clickable images lets you link different regions of a picture to different actions. Andrew shows you how to do this using both forms and environment variables.

INSTALLING WINDOWS 95 PROGRAMS

by Al Williams

Al presents a Windows 95 toolkit you can use to write installation programs in C, C++, and other languages. In the process, he examines tabbed-dialog property sheets.

SIMPLIFYING C++ GUI DEVELOPMENT

by Perry Scherer

Widgets are user-interface controls that can be pulled intact into apps, saving you months of coding. Perry describes how he used off-the-shelf components to build a complex, 3-D visualization program in a very short time.

VISUAL BASIC BY REMOTE CONTROL

by Robert Sardis

Bob discusses how to access Visual Basic control properties at run time, then presents a collection of access functions.

MIME AND INTERNET MAIL

by Tim Kientzle

The Multipurpose Internet Mail Extensions (MIME) automate the process of encoding binary data into a form compatible with existing 7-bit mail systems. This means that MIME provides enhanced mail facilities without rewiring the Internet.

PLUG AND PLAY RUN-TIME SERVICES

by Thomas A. Roden and Glenn E. Jystad

Run-time services (detectable only in software) are central to Windows 95 Plug and Play capabilities. Our authors present a program that finds the Plug and Play header, then calls run-time services.

EMBEDDED SYSTEMS

ZERO-COPY INTERFACING TO TCP/IP

by Dana Burd

The zero-copy interface supported by some real-time operating systems lets applications send and receive from the network stack without copying data copies. This results in significant performance benefits for real-time operations.

NETWORKED SYSTEMS

A VBX FOR NETWORK APPLICATIONS

by Frank E. Redmond III

Frank presents a Visual Basic custom control (VBX) for User Datagram Protocol (UDP), a network protocol that relies on TCP/IP sockets.

PROGRAMMER'S WORKBENCH

IMPLEMENTING FLICKER-FREE MOTION

by Paul J. Martino

To convincingly move an object across a screen, you need smooth motion without flicker. Paul uses Genus Microprogramming's graphics libraries and the Phar Lap 286|DOS-Extender under Borland C++ to implement flicker-free mouse motion that will operate efficiently in resolutions up to 800x600x24-bit color.

EXAMINING ROOM

EXAMINING C/C++ COMPILERS

by Tim Parker

Tim looks at five C/C++ compilers for the Sparcstation, including those from SunSoft, Cygnus, Edinburgh, MetaWare, and Ready to Run.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael plays the numbers game in this month's column.

C PROGRAMMING

by Al Stevens

Al builds an electronics music system for Windows 95 and NT.

ALGORITHM ALLEY

edited by Bruce Schneier

Just over a year ago, Bruce presented Blowfish, a block-cipher approach to encryption, and challenged you to break it. Here are some of the contest results.

PROGRAMMER'S BOOKSHELF

by Jonathan Erickson

Want to go back to school, but can't find courses nearby that suit your needs? Maybe you should consider a nontraditional educational program such as those described in High-Technology Degree Alternatives or Bear's Guide to Earning College Degrees Nontraditionally.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1995, Dr. Dobb's Journal


October 1995 - OBJECT ORIENTED PROGRAMMING

FEATURES

AUTOMATING ASSOCIATION IMPLEMENTATION IN C++

by David M. Papurt

David compares several unidirectional and bidirectional pointer-based methods for implementing one-to-one associations: a direct, handwritten implementation, a modular approach exploiting inheritance, and template-based implementations.

OBJECT-ORIENTED FACILITIES IN ADA

by David L. Moore

With the adoption of the ISO/ANSI Ada 95 standard, Ada supports object-oriented programming features such as class-wide objects, private types and child packages, multiple inheritance, and more.

PARTIAL REVELATION AND MODULA-3

by Steve Freeman

When compared to strongly typed languages, Modula-3 gives you greater flexibility in class reuse. Steve examines Modula-3's type system and describes how you can take advantage of its power.

OBJECT-ORIENTED PROGRAMMING IN S

by Richard Calaway

S, a high-level, object-oriented language, was originally designed for data analysis and graphics. As Richard points out, however, the S language is useful for a wide range of applications.

COBOL '97: A STATUS REPORT

by Henry Saade and Ann Wallace

The proposed Cobol '97 standard includes object-oriented features such as class definition, subclassing, data encapsulation, and polymorphism. Our authors focus on the object-oriented extensions to Cobol, and cover other proposed features.

FILE-STREAMING CLASSES IN C++

by Kirit Saelensminde

Kirit implements a C++ file-streaming system that, unlike MFC or OWL, doesn't require a common superclass. This approach leads to less overhead and greater portability.

INSIDE MFC SERIALIZATION

by Jim Beveridge

The Microsoft Foundation Class Library implements a typesafe serialization mechanism that is both fast and flexible. Jim takes an in-depth look at how this mechanism works -- and examines how you can get the most out of it.

EMBEDDED SYSTEMS

INSIDE FLASH MEMORY

by Brian L. Dipert

Direct-execute flash memory systems don't require the gigabyte hard disks and 64-Mbit DRAM arrays common in desktop systems.

NETWORKED SYSTEMS

ENVIRONMENT VARIABLES AND WINDOWS 3.1

by John (Fritz) Lowrey

Nothing can give network administrators a headache like several hundred networked computers which need to run software that demands customized run-time environments. To make the job even more difficult, using a single environment space in the Windows system area for all programs is dangerous, not to mention that environment handling under Windows 3.1 is poorly documented.

EXAMINING ROOM

EXAMINING CA-VISUAL OBJECTS

by Rod da Silva

CA-Visual Objects is an application-development environment that sports an incremental, native-code compiler, visual painters and editors, an advanced, active, repository-based storage system, and an object-oriented language that allows for optional strong typing and full object orientation.

PROGRAMMER'S WORKBENCH

POWERBUILDER NVOs

by Mark Robinson

Quite possibly, Non-Visual User Objects (NVOs) are PowerBuilder's most useful tool for creating true object-oriented applications. Mark examines the effective use of NVOs and their role in application development.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael takes a look at Sun's HotJava Web browser, as well as Java, the programming language it was written in.

C PROGRAMMING

by Al Stevens

Al wraps up "MidiFitz," a Windows-based C++ program that uses MIDI to emulate a jazz piano player's rhythm section in real time. MidiFitz examines the notes being played, deduces a musical chord, and plays a bass line through the MIDI system.

ALGORITHM ALLEY

edited by Bruce Schneier

This month, Louis Plebani examines search procedures that enable you to obtain the common fraction approximation of real numbers. In doing so, he focuses on number theories such as Farey Sequences.

PROGRAMMER'S BOOKSHELF

by Ray Valdés

A good C++ book can be hard to find. Ray looks at some of the better ones.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1995, Dr. Dobb's Journal


November 1995 - CLIENT/SERVER DEVELOPMENT

FEATURES

NETWORKING OBJECTS WITH CORBA

by Mark Betz

Mark presents a CORBA-based architecture that demonstrates the power of distributed objects. His project also sheds light on the Internet technologies over which distributed-object computing can work.

YOUR OWN ENDIAN ENGINE

by John Rogers

Big-endian, Little-endian, or anything in between--you won't have to worry about byte order with the "endian engine" presented here. In fact, John has used this engine to simulate a 36-bit machine with 9-bit bytes on a 32-bit machine with 8-bit bytes.

THE ORACLE CALL INTERFACE AND C++

by Jeremy Woo-Sam and Tony Murphy

Our authors present a C++ class library that provides database connectivity and query access to an Oracle RDBMS. In doing so, they implement C++ classes that support the concept of array fetching within the interface classes.

PROGRAMMING TI's MULTIMEDIA VIDEO PROCESSOR

by William May

The 320C80 multimedia video processor from Texas Instruments may be your key to writing software for real-time video. Bill examines the DSP's architecture and shows you how to write client/server apps for it.

INDEXED TEXT RETRIEVAL

by Robert Krten

Robert presents a text-retrieval system that's fast and flexible. His design and implementation can easily be adapted to other types of text databases and formats.

PORTING VxDs FROM WINDOWS 3.1 TO WINDOWS

by Don Matthews

Don't throw away your Windows 3.1 VxDs just because Windows 95 is available. Don presents a VxD that works with both Windows 3.1 and Windows 95, then describes the different techniques for calling its services.

EMBEDDED SYSTEMS

PORTABLE MULTITASKING IN C++

by Stig Kofoed

Stig presents a portable kernel, written in C++, that implements non-preemptive multitasking using setjmp() and longjmp(), and provides semaphores as a means of synchronizing processes.

NETWORKED SYSTEMS

USING MAPI FOR INTERAPPLICATION COMMUNICATION

by William Stamatakis

Bill shows how programs written in Visual Basic and Delphi can communicate via the MAPI interface.

EXAMINING ROOM

WRITING ODBC DRIVERS

by Dennis R. McCarthy

Developing an ODBC driver can be an expensive proposition. That's why Dennis turned to Syware's Dr. DeeBee ODBC Driver Kit to get a driver up and running in a timely fashion.

PROGRAMMER'S WORKBENCH

DATA MODELS, CASE TOOLS, AND CLIENT/SERVER DEVELOPMENT

by Tim Wittenburg

Tim presents a tool called "DBA Assistant" that's designed to smooth the transition between the project phases. DBA Assistant, which is written in Microsoft Access Basic, provides a two-way link between the System Architect CASE tool and an Access database.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael reports on this year's MacWorld Expo in Boston, which he attended, and the Second Annual Robot Wars in San Francisco (which he didn't).

C PROGRAMMING

by Al Stevens

Raycast, a ray-casting engine written entirely in C++, is the project that Al offers up this month.

ALGORITHM ALLEY

edited by Bruce Schneier

Mani Iyer proposes an algorithm for permutation generation using matrices.

PROGRAMMER'S BOOKSHELF

by Michael Swaine

Books by and about Richard Feynman are the focus of this month's "Programmer's Bookshelf."

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1995, Dr. Dobb's Journal


December 1995 - VISUAL PROGRAMMING

FEATURES

VISUAL PROGRAMMING IN 3-D

by Marc Najork

Many current development environments call themselves "visual," but true visual-programming languages are built around executable graphics. To examine this concept, Marc presents Cube, a 3-D visual-programming language that supports recursion, function mapping, and user-defined types.

VISUALLY CONSTRUCTING DELPHI COMPONENTS

by Al Williams

Although Delphi provides programmers with a first-class, visual application-development environment, it doesn't do much for component builders. CompBld, the form-based Delphi program Al presents here, takes up the slack, helping you create powerful new components.

EXTENDING VISUAL BASIC'S COMM CONTROL

by Michael Floyd

The communication control that comes with Visual Basic 4.0 works fine when streaming text, but doesn't support binary transfers. Michael extends this control by adding support for Xmodem protocol.

A C++ INTEGRATOR CLASS

by Darrel J. Conway

The C++ class presented here is designed to help you solve differential equations by enabling rapid incorporation of new integration methods. Darrel focuses on adaptive stepsize Runge-Kutta integrators.

EXAMINING THE WINDOWS 95 LAYERED FILE SYSTEM

by Mark Russinovich and Bryce Cogswell

One of the biggest differences between Windows 95 and its predecessors is the Windows 95 "layered" approach to file-system management. Our authors explore the file system, focusing on the "vendor supplied driver" (VSD) layer.

EMBEDDED SYSTEMS

TERSE: A TINY REAL-TIME OPERATING SYSTEM

by Barry Kauler

Barry presents an 8051-implementation of TERSE, a "Tiny Embedded Real-time Software Environment" that's only about 260 bytes in size.

NETWORKED SYSTEMS

AN APPLICATION-ACCESS SECURITY MODEL

by Mark Robinson

One roadblock at the beginning of any client/server development project is how to implement access security. Mark uses PowerBuilder to present an integrated, generic, reusable model of network security.

EXAMINING ROOM

VToolsD FOR VxD DEVELOPMENT

by Charles Mirho

VToolsD, a C/C++ toolkit for writing virtual device drivers (VxDs), is designed as a replacement for Microsoft's DDK. Charles shows you how to use the toolkit to visually write VxDs.

PROGRAMMER'S WORKBENCH

VISUAL PROGRAMMING WITH REUSABLE OBJECTS

by Carol Jones and Morgan Kinne

VisualAge's object-oriented development environment is based on a construction-from-parts paradigm. Our authors use VisualAge to design and implement a timer part that runs for a certain length of time, then notifies other parts when that time has expired.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Before looking at a variety of little languages available for the Macintosh, Michael examines Michael Malone's new book The Microprocessor: A Biography.

C PROGRAMMING

by Al Stevens

Last month Al introduced his Raycaster project, a DOS raycasting game engine written in C++. This month he makes some additions to the project and ports it to Windows.

ALGORITHM ALLEY

edited by Bruce Schneier

Gene Callahan discusses how to generate sequential keys in an arbitrary radix.

PROGRAMMER'S BOOKSHELF

by Ray Duncan

Stephen Talbott's The Future Does Not Compute and Clifford Stoll's Silicon Snake Oil present contrasting views of cyberspace.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg

Copyright © 1995, Dr. Dobb's Journal


Special Issue 1995 - GAMES PROGRAMMING

FEATURES

Collision Detection

by Dave Roberts

Collision detection is fundamental to fast-action arcade games. Dave examines various collision-detection techniques and presents code that enables your game programs to run as fast as possible.

Theatrix: A C++ Game Class Library

by Al Stevens

Theatrix is a C++ class library that encapsulates the operations of a typical game arcade.

Video for Windows and WinG

by Christopher Kelly

Chris develops a custom draw handler like that found in WinToon, then uses it in conjunction with WinG, Microsoft's games interface, to scroll text across a video window.

Music and Sound for Interactive Games

by John W. Ratcliff

There's more to creating exciting games than tight coding. John discusses the major components of effective sound tracks, while Rob Wallace shares his experiences with sound-related tools and techniques.

Attached Sprites

by Diana Gruber

The use of "attached" sprites is a standard game-programming technique. Diana shows how to use them to perform efficient sprite animation.

Using the VESA BIOS

by Brian Hook and Kendall Bennett

To help make high-performance graphics a reality, the Video Electronics Standards Association has released the VESA BIOS Extension 2.0.

Implementing Games for Windows

by James Finnegan

The WinG interface provides the performance you need for realistic games, and the WaveMix DLL gives you the ability to mix sound files at run time. Together, they enable you to create powerful Windows-based games.

COLUMNS

Ramblings in Real Time

by Michael Abrash

BSP trees are at the heart of games such as DOOM. Michael examines the structure of BSP trees and shows how you can use them.

DTACK Revisited

by Hal W. Hardenbergh

Do video-on-demand and similar network services available via fiber-optic cable have a future? Hal ponders this and other questions.

Patterns and Software Design

by Richard Helm and Erich Gamma

The key to creating reusable software is anticipating how people might reuse it. Extensible objects provide the flexibility for just about any contingency.

Software and the Law

by Marc E. Brown

A well-written software-development contract is essential to maintaining a good business relationship. Marc covers the most important clauses you should consider in writing your next contract.

Editorial

by Jonathan Erickson

Copyright © 1995, Dr. Dobb's Journal


Special Issue 1995 - WINDOWS PROGRAMMING

FEATURES

Windows Apps and Exception Handlers

by Joseph Hlavaty

Joe enhances his TrapMan debugging utility by adding features for displaying exception registers, dumping the exception stack, and identifying the faulting application.

Simplifying Windows Development

by Al Williams

The CoolWorx toolkit Al presents here simplifies Windows application programming. The library includes an integrated event loop, encapsulation of common message-handling code, tool and status bars that automatically manage themselves, and a text-editor software component.

A Visual Basic Form Generator

by Wei Xiao

This form-generator utility is a C program that converts a text file into a Visual Basic form file. In addition to handling text strings and form attributes such as font, margin, and color, the program generates text boxes, combo boxes, and check boxes.

Adding Auxiliary Views for Windows Apps

by Robert Rosenberg

Robert examines how MFC supports multiple views, presenting code for implementing three types of views in an application. He also tackles the topic of customizing the titles that appear in MDI frame windows.

Creating Special-Effect Bitmaps

by Saurabh Dixit

The skipping algorithms Saurabh presents here are the basis for special-effect bitmap routines for creating effects such as exploding, spiraling, sliding, curtaining, and more.

COLUMNS

Ramblings in Real Time

by Michael Abrash

Contrary to popular belief, Windows can be an excellent real-time animation platform--WinG software is all it takes to support fast, double-buffered drawing on Win 3.1, Win32s, and Win32.

DTACK Revisited

by Hal W. Hardenberg

Hal ponders the impact of industrial automatons, focusing on the work of Hans Moravec, who has spent the past 25 years working in the field of robotics.

Patterns and Software Design

by Richard Helm and Erich Gamma

The key to software reuse in object-oriented programming may well lie in the realm of patterns. In this issue, our columnists lay the groundwork for examining this increasingly important, emerging topic.

Software and the Law

by Marc E. Brown

Marc discusses the difference between software's protectable "form of expression" and its unprotectable "underlying ideas."

Editorial

by Jonathan Erickson

Copyright © 1995, Dr. Dobb's Journal


Special Issue 1995 - C++ PROGRAMMING

FEATURES

Programming with the Standard Template Library

by Thomas Keffer

Now part of the Standard C++ Library, the Standard Template Library goes against the object-oriented grain by separating data structures from algorithms. As Tom shows, this allows you to combine algorithms and data structures in novel and useful ways.

Associative Arrays in C++

by David Weber

With associative arrays, you can create a database indexed by a single, unique text key that is both fast and space efficient. David presents his templatized version, which handles objects, pointers to objects, pointers to functions, deep copying, and more.

A Portable C++ String Class

by William Hill

The string class William presents here is both lean and mean. More importantly, it provides the underpinning for creating generic, reusable code that is portable across platforms.

A C++ Framework for DCE Threads

by Michael Yam

DCE threads ("pthreads") allow you to create multitasking applications under UNIX. But with more than 50 function calls, programming with the DCE API is a nontrivial task. Michael's class library will take the pain out of your next pthread project.

A Generic Parsing Engine in C++

by Todd D. Esposito and Andrew K. Johnson

The generic parser our authors present requires no specific knowledge of the source language and is independent of the underlying application.

COLUMNS

Ramblings in Real Time

by Michael Abrash

Michael reflects on the last decade before he continues his discussion of BSP trees.

DTACK Revisited

by Hal W. Hardenbergh

Hal examines some hard data on hard disks as he considers the need for speed and size when it comes to storage requirements.

Programmer's Bookshelf

by Robin Rowe

Robin examines Design Patterns: Elements of Reusable Object-Oriented Software, by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides; Metrics and Models in Software Quality Engineering, by Steven H. Kan; Computer Related Risks, by Peter G. Neumann; Safeware, System Safety and Computers, by Nancy G. Leveson; and Four Days with Dr. Deming, by William J. Latzko and David M. Saunders.

Software and the Law

by Marc E. Brown

Leaving a job to compete with your former employer can be risky business, especially if the angry employer sues. For employers, losing employees shouldn't mean losing trade secrets, as well. Knowing your legal rights can help make the transition easier.

Editorial

by Michael Floyd

Copyright © 1995, Dr. Dobb's Journal


Special Issue 1995 - POWERPC PROGRAMMING

FEATURES

Porting to the PowerMac

by Paul Kaplan

Apple's PowerMac supports 68K applications by emulating both the 68K instruction set and the run-time model supported by the Macintosh operating system. Paul presents an application that demonstrates how you can mix code within an application using code resources.

Optimizing for the PowerPC

by Michael Ross

Michael looks at some of the differences between the PowerPC and Pentium architectures and shares his techniques to optimize code for the PowerPC.

Comparing PowerPC to DEC Alpha

by Shlomo Weiss and James E. Smith

The PowerPC processor includes a powerful instruction set coupled with flexible instruction ordering; DEC Alpha's more rigid structure relies on simple instructions and a faster clock.

High-Performance Programming for the PowerPC

by Kip McClanahan, Mike Phillip, and Mark VandenBrink

While moving Windows NT applications from an 80x86- to a PowerPC-based platform is straightforward, performance may be sluggish after the port. Our authors examine how byte alignment, inlining, and exception handling affect performance, then show you how to avoid the pitfalls.

Bit Operations with C Macros

by John Rogers

John lays the foundation for an "endian engine" that handles a variety of byte orders--from the 68K Big-endian and Intel Little-endian, to the PowerPC's Bi-endian format.

COLUMNS

Ramblings in Real-Time

by Michael Abrash

3-D transforms let you convert coordinates from one coordinate space to another. But, as Michael has discovered, your approach to 3-D transform problems depends largely on your frame of reference.

DTACK Revisited

by Hal W. Hardenbergh

From Hal's point of view, nothing much has happened in desktop-computing architectures since 1982. With that in mind, Hal compares the PowerPC 601 to Intel's upcoming P6.

Software and the Law

by Marc E. Brown

Marc discusses when software can be patented, how to patent it, and how you can deal with patent-infringement allegations.

Patterns and Software Design

by Erich Gamma and Richard Helm

While Observer patterns are commonly used to decouple data from a user interface, they can also help define and manage dependencies between objects.

Editorial

by Michael Floyd

Copyright © 1995, Dr. Dobb's Journal


Special Issue 1995 - INTERNET & WORLD WIDE WEB DEVELOPMENT

FEATURES

Programming HotJava Applets

by John Rodley

HotJava is a Web browser written in Java, a programming language that makes executable content a reality. John shows how you write HotJava applets that run locally, even though they are stored on a remote server.

Animation Using the Netscape Browser

by Andrew Davison

The Netscape 1.1 browser is one of the few that can display sequences of GIF files to produce the effect of animation. Andrew discusses the "client-pull" and "server-push" technologies that make this possible.

Programming CGI in C

by Eugene Eric Kim

cgihtml is a public-domain C library that simplifies CGI programming. Eugene presents the library and shows you how to use it.

Tracking Home Page Hits

by Ann Lynnworth

Ann presents a traffic counter that tracks and reports user access to your Web page. It's built using Borland Delphi components and runs on O'Reilly & Associates' WebSite server under Windows NT.

Client/Server Development and the World Wide Web

by Jim Lawless

Client browser programs will play an increasingly important role in Web-oriented programs. While client/server apps are relatively easy to implement in familiar programming environments, the Web introduces a new dimension.

CGI and AppleScript

by Cal Simone

Cal discusses the Macintosh as an Internet platform, then describes how you can use the AppleScript language for writing CGI applications that run on Macintosh servers.

COLUMNS

Ramblings in Real Time

by Michael Abrash

Michael uses compiled BSP trees to do real-time rendering like that used in the coming generation of high-performance graphics applications.

DTACK Revisited

by Hal W. Hardenbergh

As Hal shows here, pushing the clock can give you more bang for your Pentium buck.

Software and the Law

by Marc E. Brown

Trademark wars in cyberspace have led to legal battles in the courtroom. Marc discusses the ins and outs of trademark protection, particularly as it applies to Internet domain names.

Editorial

by Jonathan Erickson

Copyright © 1995, Dr. Dobb's Journal


Dr. Dobb's Developer Update, January 1995

Web Wars Widen
Tech Focus - A Quick Look at Borland's Delphi '95
Conference Report - Computers and Communications Security
News Briefs

Dr. Dobb's Developer Update, February 1995

Pentium Crosses the Great Divide
Tech Focus - Freenets and Free Software
Op/Ed - Inside "Intel Inside"
News Briefs - FASB Backs Down, More on Microsoft Network, Win95: Whence It Cometh?

Dr. Dobb's Developer Update, March 1995

Veteran Macintosh watcher Mike Swaine reacts to Mac World Expo
Tech Focus - Geometry management is one of Motif's distinguishing features
News Analysis - What's behind the current internet break-ins?
Conference Report - Cryptologist Bruce Schneier travels the world
News Briefs
Calendar

Dr. Dobb's Developer Update, April 1995

Intel's P6 processor is an advanced, but not unique, CPU
Tech Focus - What's the breakdown of US software patents?
Op/Ed - The demise of hardcopy has been exaggerated
News Briefs
Calendar

Dr. Dobb's Developer Update, May 1995

Here's the Internet, where's the money?
Industry Focus - The copyright ruling against Borland is overturned

Dr. Dobb's Developer Update, June 1995

App frameworks in a post-MFC world
Conference Report - The Ninth Game Developers' Conference
News Briefs
Calendar

Dr. Dobb's Developer Update, July 1995

Protocols for Internet Radio
More on Internet Protocols
Book Review - Startup: A Silicon Valley Adventure
News Briefs
Calendar

Dr. Dobb's Developer Update, August 1995

Net Gets a Java Buzz
Conference Report - Eurocrypt '95
Book Review - POSIX.4 Programming
News Briefs
Letters
Calendar

Dr. Dobb's Developer Update, September 1995

A Surfeit of Servers
Tech Focus - ATASPI and the Standards Process
Conference Report - MacHack '95
News Briefs
Calendar

Dr. Dobb's Developer Update, October 1995

Of Milestones and Men
Tech Focus - C/C++ Environments for Workstation Development
Conference Report - Borland Developer's Conference '95
News Briefs
Calendar

Dr. Dobb's Developer Update, November 1995

In Search of Best Practices
Tech Focus - Performance Comparison: Sun SPARCstation 5 versus Intel Pentium 90
News Briefs
Calendar

Dr. Dobb's Developer Update, December 1995

The Perl of Wizdom
Tech Focus - Flash Memory: FTL versus ATA
OOPSLA '95: Back in the Saddle Again
News Briefs

DDJ January 1996 - COMPRESSION AND ENCRYPTION

FEATURES

PRIORITY QUEUES AND THE STL

by Mark R. Nelson

Included in the C++ Standard Template Library is the priority_queue container adapter, a tool Mark finds perfect for creating Huffman encoding trees.

DYNAMIC MARKOV COMPRESSION

by Tong Lai Yu

Dynamic Markov Compression is a statistical compression technique that produces good results when applied to large binary files.

FASTER FRACTAL COMPRESSION

by D.R. McGregor, R.J. Fryer, P. Cockshott, and P. Murray

Our authors explain how fractal compression works, then present the Fast Fractal Transform--a family of algorithms that achieve a several-hundred-fold speed-up over the simple fractal transform.

DIFFERENTIAL AND LINEAR CRYPTANALYSIS

by Bruce Schneier

Although the venerable Data Encryption Standard has been the workhorse of cryptography for nearly two decades, two new attacks--differential and linear cryptanalysis--are putting DES to the test.

EVALUATING DATA-COMPRESSION ALGORITHMS

by G. Jason Mathews

Before incorporating data compression into data-management software, Jason had to evaluate a variety of compression algorithms. Here is his report.

COLOR QUANTIZATION USING OCTREES

by Dean Clark

Octree quantization is a color-quantization technique that's both space efficient and fast. Dean discusses the algorithm, then implements it in C.

EXTENDING MFC

by Stefan Hoenig and Scot Wingo

Function-based interfaces don't give you object-oriented benefits, even when using C++ and frameworks like MFC. Stefan and Scot show you how to extend existing MFC classes to take advantage of object-oriented principles.

RAMDOMNESS AND THE NETSCAPE BROWSER

by Ian Goldberg and David Wagner

No one was more surprised than Netscape Communications when a pair of computer-science students broke the Netscape encryption scheme. Ian and David describe how they attacked the popular Web browser and what they found out.

LINE-SEGMENT CLIPPING REVISITED

by Victor J. Duvanenko, W.E. Robbins, and R.S. Gyurcsik

In an effort to improve line-clipping performance, our authors build on the Cohen-Sutherland line-clipping algorithm, extend it to 3-D, and introduce the Sutherland-Hodgman clipping algorithm.

EMBEDDED SYSTEMS

PASSWORD FILES

by Trevor J. Pope

Many embedded systems require access control. Trevor implements the MD5 message-digest algorithm to implement one-way encryption of passwords.

NETWORKED SYSTEMS

TCP/IP AND WINDOWS 95

by Andrew Wilson and Peter D. Varhol

Andrew and Peter present a TCP/IP-based chat program that demonstrates the basics of network communication under Windows 95.

EXAMINING ROOM

MULTIPLE INHERITANCE FOR MFC 4.0

by Jean-Louis Leroy

Jean-Louis finds out what's required to add multiple inheritance to Version 4.0 of the Microsoft Foundation Classes library.

PROGRAMMER'S WORKBENCH

A TARGA VIEWER IN BORLAND DELPHI

by Gunter Born

After examining the TARGA graphics file format, Gunter builds a TARGA viewer using Borland's Delphi development environment.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Alan Cooper's ideas about goal-centered user-interface design give Michael food for thought before he returns to public-domain programming languages.

C PROGRAMMING

by Al Stevens

After attending the Software Development '95 East conference, Al decides it's time to examine the latest in the ANSI C++ standardization process.

ALGORITHM ALLEY

edited by Bruce Schneier

Burt Kaliski and Matt Robshaw examine the subject of multiple encryption, paying particular attention to repeated encryption with the same cipher.

PROGRAMMER'S BOOKSHELF

by Charles Pfefferkorn

If you need to write localized software, books such as Software Internationalization and Localization: An Introduction, Understanding Japanese Information Processing, and Developing International Software for Windows 95 and Windows NT will get you started.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg


DDJ February 1996 - DATA COMMUNICATIONS

FEATURES

PROPOSING A STANDARD WEB API

by Michael Doyle, Cheong Ang, and David Martin

At last count, there were nearly a dozen APIs vying for hearts and home pages of Web developers. Our authors propose a standard API that leverages the concept of embedded executable content for interactive application development and delivery.

IMPROVING KERMIT PERFORMANCE

by Tim Kientzle

Tim compares the error-handling strategies of a variety of popular protocols, then presents heuristics that improve the performance of Kermit's windowing strategy.

CGI AND THE WORLD WIDE WEB

by G. Dinesh Dutt

The Common Gateway Interface (CGI) makes it possible for Web servers to interact with external programs. Dinesh presents a program that reports gateway-execution errors.

USING SERVER-SIDE INCLUDES

by Matt Kruse

Server-side includes are commands embedded inside HTML documents that enable your page to do something different each time it is loaded. Matt describes the format of these commands and shows how to write programs that work with your Web pages.

JAVA COMMAND-LINE ARGUMENTS

by Greg White

Greg introduces a package of Java classes that parse the command-line parameters for HtmlXlate, an application that converts HTML to RTF. Because HtmlXlate doesn't require display graphics, Greg made it an "application" instead of an "applet."

IMPLEMENTING MULTILEVEL UNDO/REDO

by Jim Beveridge

The Undo/Redo mechanism Jim presents here is based on a history length limited only by available memory. Because it is implemented in Visual C++ and MFC, this mechanism can easily be added to your applications.

EMBEDDED SYSTEMS

NETWORKING INTELLIGENT DEVICES

by Gil Gameiro

Novell's Embedded Systems Technology (NEST) lets you incorporate network protocols and client services into embedded systems. Gil uses NEST to put an intelligent coffee maker online, then controls it with a Windows-hosted menu program.

NETWORKED SYSTEMS

FAST NETWORKING WITH WINSOCK 2.0

by Derek Brown and Martin Hall

Derek and Martin show how you can get maximum performance from WinSock 2.0 applications by taking advantage of two features new to the spec--event objects and overlapped I/O.

EXAMINING ROOM

EXAMINING ROGUEWAVE'S TOOLS.H++

by P.W. Scherer

RogueWave's Tools.h++, a C++ library consisting of more than 100 classes, has been the cornerstone of Perry's development efforts ever since he ported over 30,000 lines of C++ code to an equivalent app that was only 6000 lines long.

PROGRAMMER'S WORKBENCH

LEX AND YACC

by Ian E. Gorman

Ian describes how he used traditional compiler-development techniques and the MKS Lex & Yacc Toolkit to build a keyword-query compiler for a CD-ROM database.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Before continuing his examination of little languages for the Macintosh, Michael looks at a number of books devoted to HTML coding.

C PROGRAMMING

by Al Stevens

Al launches "Quincy 96," a C/C++ interpreter that runs under Windows 95 and is based on GNU C and C++. Among other features, Quincy 96 manages two kinds of documents--project documents and text source-code documents.

ALGORITHM ALLEY

edited by Bruce Schneier

Binary searches are algorithmic staples that can be used in just about any program. Micha Hofri sees how efficient he can make a basic binary-search algorithm.

PROGRAMMER'S BOOKSHELF

by Dean Gahlon

Dean compares Practical Algorithms for C Programmers, by Andrew Binstock and John Rex, and Practical Algorithms in C++, by Bryan Flamig.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg


DDJ March 1996 - SCRIPTING LANGUAGES

FEATURES

DR. DOBB'S JOURNAL EXCELLENCE IN PROGRAMMING AWARDS

by Jonathan Erickson

Larry Wall, author of Perl, and James Gosling, chief architect of Java, are recipients of our annual award that honors achievement in the world of software development.

DYLAN'S CREOLE INTERFACE

by Edward Cessna

The Dylan programming environment includes Creole, a foreign-function interface that allows Dylan programs to call routines written in other languages--and routines in other languages to call Dylan routines. Edward uses Creole to interface Dylan with the Sybase database library.

BUILDING PARSERS WITH LEOPURD

by Thor Mirchandani

Leopurd is a program that generates a maintainable table-free parser from an input grammar. In building legible, maintainable systems, Leopurd uses the best features from both top-down and bottom-up parser technology.

A CONVERSATION WITH MICHAEL COWLISHAW

by Jack Woehr

Over the years, IBM Fellow Michael Cowlishaw has been a staff member in virtually every IBM major research center. Still, Michael is best known for developing the Rexx programming language. Jack chats with him about Rexx and a number of other topics.

WINDOWS 95 JOURNALING AND PLAYBACK

by Mark Russinovich and Bryce Cogswell

To demonstrate the power and flexibility of the Windows 95 journaling and playback facility, Mark and Bryce present a macro recorder program that provides keyboard and mouse macros that can be used anywhere and anytime. This macro involves the use of multithreading and having virtual devices notify a Win32 program of an asynchronous event.

MOVING FROM C++ TO JAVA

by Gary Aitken

Certain aspects of Java are easier to learn than C++. As Gary points out, however, what's really important to efficient Java programming is a good understanding of object-oriented concepts.

USING OODCE

by Jonathan Roberts and Dan Zigmond

Our authors use OODCE, a C++ library originally developed by Hewlett-Packard, to develop a distributed application.

EMBEDDED SYSTEMS

A TINY PREEMPTIVE MULTITASKING FORTH

by Andy Yuen

Andy describes how you can provide support for preemptive multitasking, semaphores (for task synchronization), and Forth interrupt-service routines for the 16-bit 8086 eForth--with only 1K of additional code.

NETWORKED SYSTEMS

DISTRIBUTED OBJECTS AND THE INTERNET

by John Pompeii

In his discussion of a real-world, distributed-object, client/server application, John focuses on the DSOM-based, distributed-object and Internet-connection services.

EXAMINING ROOM

EXAMINING THE COCKTAIL TOOLBOX

by Rodney M. Bates

Cocktail is a collection of little languages (including rex, lalr, ag, puma, ell, and others) for writing compilers, translators, and the like. The suite is available for both MS-DOS and UNIX.

PROGRAMMER'S WORKBENCH

USING JAVASCRIPT TO CREATE INTERACTIVE WEB PAGES

by Tom Tessier

JavaScript is a cross-platform object scripting language designed to let you glue together HTML documents, Java applets, and Netscape plug-ins on both clients and servers. Tom uses it to build a program that presents the client browser with an interactive form, then asks users to select an answer out of three options.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Before continuing his survey of little languages (this month focusing on Perl), Michael reviews PC Roadkill: Twisted Tales from Silicon Valley and takes a trip down the computer-industry version of memory lane.

C PROGRAMMING

by Al Stevens

Al continues his development of Quincy 96, a Windows 95 IDE for GNU C/C++. This month he builds the debugger.

ALGORITHM ALLEY

edited by Bruce Schneier

John DeVos presents a compact logarithm algorithm that trades off accuracy for size and performance.

PROGRAMMER'S BOOKSHELF

by Lou Grinzo

Matt Pietrek's Windows 95 System Programming Secrets grabbed Lou's attention this month.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg


DDJ April 1996 - ALGORITHMS

FEATURES

AN INTERVIEW WITH DONALD KNUTH

by Jack Woehr

Don Knuth, one of the world's preeminent computer scientists, takes time out to chat with us about topics ranging from algorithms to the status of volume four of his The Art of Computer Programming.

HASHING REHASHED

by Andrew Binstock

Even tried and tested algorithms can be more efficient. Andrew presents one optimization, then examines the effect of high-performance hardware on hashing.

A CUBIC SPLINE EXTREMA ALGORITHM

by Mike J. Courtney

Finding the maxima and minima of a function can be tricky, especially when all you have to work with are a few points. Mike shows how cubic splines can fill in the gaps.

CALLING 16-BIT DLLs FROM WINDOWS 95

by Steve Sipe

Porting 16-bit Windows 3.x applications to 32-bit Windows 95 can be difficult, especially if the 16-bit apps depend on third-party DLLs. Steve presents a technique that lets you incorporate 16-bit DLLs into 32-bit applications.

TUNING JAVA PERFORMANCE

by Paul Tyma

Given that Java is architecture neutral and interpreted, writing code that performs well isn't necessarily a slam dunk. Paul examines how compiled Java runs, then presents techniques for speeding things up.

EMBEDDED SYSTEMS

USING THE PARALLEL ADAPTER AS A HOST INTERFACE PORT

by Dhananjay V. Gadre

Dhananjay uses the PC's parallel-printer port as a link to the CCD camera controller for data acquisition in astronomy-related applications. While his technique is based on DSP, the design can accommodate any microprocessor or controller.

NETWORKED SYSTEMS

THE HARVEST OBJECT CACHE

by Peter B. Danzig

The Harvest cache is a hierarchical object cache designed to make Internet information systems scale better. As an httpd accelerator, the cache works in conjunction with existing Web server software to increase throughput.

EXAMINING ROOM

SPEEDING UP C-TREE PLUS DATABASE SEARCHES

by John Mudd

The algorithm John presents here enhances searches using FairCom's c-tree Plus cross-platform C function library for database I/O.

PROGRAMMER'S WORKBENCH

HTML CONVERSION AND FTP AUTOMATION

by Lauren Hightower

Lauren's HTML Automator program--built using IST's OpenExchange file conversion DLL, Distinct's TCP/IP Winsock library and SDK, and Borland's Delphi development environment--automates the process of converting data to HTML format and posting pages to a Web server.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Reading Andrew Davison's Humor the Computer sends Michael down the road of Paradigms Past.

C PROGRAMMING

by Al Stevens

After mulling over the two modes for fopen that Standard C supports, Al continues building Quincy 96, adding an expression parser to the debugger and the ability for external programs to send commands.

ALGORITHM ALLEY

by Peter Heinrich

When developing high-performance code, complex mathematical calculation is not always practical. The algorithm Peter presents here computes an integer square root suitable for just such situations.

UNDOCUMENTED CORNER

by Scot Wingo and George Shepherd

Scot and George kick off an examination of undocumented MFC, this month focusing on its document/view architecture. In particular, they examine the MFC CMirrorFile, CPreviewView, and CPreviewDC classes.

PROGRAMMER'S BOOKSHELF

by John H. McCoy

Hooked On Java, by Java development-team members Arthur van Hoff, Sami Shaio, and Orca Starbuck, is a book/CD combination that can get you up and running with Java programming.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg


DDJ May 1996 - OPERATING SYSTEMS

FEATURES

DIRECT PORT I/O AND WINDOWS NT

by Dale Roberts

As powerful as it is, Windows NT isn't designed to let application programs directly access system hardware--and for good reason. Sometimes access can come in handy, however, and Dale gives you the tools for direct, user-mode port I/O.

PIPES FOR MACINTOSH

by Kristiaan Coppieters

Kris presents a C program shell for creating Macintosh filters. And since the pipes are pure Mac applications, you don't need to extend the basic Macintosh operating system.

EXAMINING VxD SERVICE HOOKING

by Mark Russinovich and Bryce Cogswell

Intercepting VxD services lets you turn Windows into a fully extensible operating system. Mark and Bryce examine the different flavors of service hooking and unravel how hooking is implemented under both Windows 3.1 and Windows 95.

BUILDING A DOS SERIAL NETWORK

by Kyle York

While MS-DOS 6's Interlnk program enables simple resource sharing--allowing you to connect two PCs via their serial or parallel ports--it doesn't provide full functionality. Kyle presents a program that picks up where Interlnk leaves off.

CONDITIONAL COMPILATION

by David Epstein

David examines the proposed Fortran Conditional Compilation Facility (CCF), a line-based language that supports text substitution, macro expansion, and file inclusion. He also explains how CCF functionality can be easily adapted to other programming languages.

EMBEDDED SYSTEMS

BENCHMARKING REAL-TIME OPERATING SYSTEMS

by Eric McRae

The benchmarks Eric describes give you an intuitive feel for real-time operating-system performance and help you match an operating system to your design requirements.

NETWORKED SYSTEMS

WRITING A PORTABLE TRANSPORT-INDEPENDENT WEB SERVER

by John Calcote

John examines the Transport Layer Interface (TLI) for building a Web server. TLI is portable, allowing you to write server code that is 98 percent transport independent.

EXAMINING ROOM

IMPROVING USENET NEWS PERFORMANCE

by Robert Krten

KNews, the program Robert presents, takes advantage of QNX features to more efficiently handle news articles. Under KNews, one program gets and stores articles, while another program implements a "virtual filesystem" to keep track of them.

PROGRAMMER'S WORKBENCH

SHARING DATA BETWEEN WEB PAGE FRAMES USING JAVASCRIPT

by Tom Tessier

Frames are a powerful addition to HTML. When used in conjunction with JavaScript, you can create impressive pages that previously required knowledge of complex, server-based CGI.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

This month, Michael examines Gerry Wolff's premise that all of computing can be viewed as compression, Konrad Zuse's view that everything starts at the bit, and the Haskell programming language's assumption that just about everything fits into a pattern.

C PROGRAMMING

by Al Stevens

Before discussing the hows and whys of DDE and Quincy 96, Al looks at the real world of software design and takes Bill Gates' The Road Ahead on the road with him.

ALGORITHM ALLEY

by Andreas Bender

Fast, accurate arithmetic sometimes requires good fractional approximations of important constants. Andreas evaluates both continued fractions and Farey series for finding these approximations.

JAVA Q&A

by Cliff Berg and Steve Alexander

In the first installment of this new column, Cliff and Steve explain how to display images from a local file, remote location, or from memory.

UNDOCUMENTED CORNER

by Robert R. Collins

Four-MB paging lets the operating system access very large data structures. However, this feature doesn't appear to be available on x86 Intel processors--unless you know where to look. Robert shows you where 4-MB paging is documented, then presents a program that shows how the technique works.

PROGRAMMER'S BOOKSHELF

by Dean Clark

Graphics programming books are in the spotlight as Dean examines Ian Ashdown's Radiosity: A Programmer's Perspective and Tim Wittenburg's Photo-Based 3D Graphics in C++.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg


DDJ June 1996 - PATTERNS & SOFTWARE DESIGN

FEATURES

MANAGING DYNAMIC OBJECTS IN C++

by Tom Cargill

Dynamic objects in C++ are managed explicitly by the programs you write. The Localized Ownership pattern language Tom presents, however, does the job for you.

STL ITERATORS

by Dan Zigmond

STL iterators--objects that function more or less like conventional pointers--are used as the interface to data structures. Dan explains how iterators are central to the C++ Standard Template Library.

REUSABLE BINARY ASSOCIATIONS IN C++

by Terris Linenbach

Understanding relationships between objects is crucial to the success of any object-oriented software project. Terris presents a design for binary association that consists of both OMT and dynamic-model diagrams. He then implements the design in C++, using templates to promote code reuse.

AN ASYNCHRONOUS DESIGN PATTERN

by Allan Vermeulen

The IOU pattern provides a simple, intuitive way to add asynchronous behavior to applications. Since the IOU pattern is independent of any specific concurrency mechanisms, it is applicable to many different concurrency methods--and it's implemented in Java.

EMBEDDED SYSTEMS

VHDL FOR HARDWARE DESIGN

by Phil Tomson

VHDL is a hardware-description language that frees you from low-level details. Phil uses VHDL to design an interface between a PC's parallel-printer interface and a high-speed data-acquisition system that can generate several million 8-bit data samples per second.

NETWORKED SYSTEMS

REMOVING BLOCKING NETWORK I/O FROM WINDOWS PROGRAMS

by George F. Frazier and Derek Yenzer

Deciding how to handle blocking I/O is essential when designing programs that use the Winsock interface. Our authors present a method for removing the blocking network I/O function calls without having to rewrite the application from scratch.

EXAMINING ROOM

EXAMINING BORLAND DELPHI 2.0

by Ted Faison

Borland's recently released Delphi 2.0 environment supports 32-bit applications, client/server development, team programming, and more.

PROGRAMMER'S WORKBENCH

INSTANTIATING CODE PATTERNS

by Fred Wild

SNIP makes it possible for you to build code patterns into your software. Fred discusses the use of patterns, and describes how you can use SNIP to define and instantiate code patterns.

APPLYING DESIGN PATTERNS TO POWERBUILDER

by Mark Nielsen and Nick Abdo

In applying the Gamma/Helm Observer pattern to a PowerBuilder application, Mark and Nick show how design patterns can help PowerBuilder developers make good design decisions.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Tog on Software Design is on Michael's mind this month. He also looks at The Secret Guide to Computers and a new scripting language for the Internet.

C PROGRAMMING

by Al Stevens

Encapsulation comes to Quincy 96 as Al starts by grouping debugger operations in a Debugger class. He then turns to "Herman," a general-purpose document-viewer program written in Visual C++ with MFC.

JAVA Q&A

by Cliff Berg

How do you write a Java-based chat program? Cliff shows you how, starting with a C++ server and Java client.

ALGORITHM ALLEY

by Andrew Colin

Decision trees are used in such diverse applications as bird-watching guides and medical-diagnostic programs. Andrew presents the ID3 algorithm, which uses an information-theoretic metric to build compact decision trees.

UNDOCUMENTED CORNER

by Scot Wingo and George Shepherd

Scot and George show how you can customize the MFC print preview and print-status dialog. They also highlight some techniques for working with undocumented MFC classes that weren't really designed to be customized.

PROGRAMMER'S BOOKSHELF

by Tom Saltsman

PowerBuilder books are in the spotlight, as Tom examines PowerBuilder 4: A Developer's Guide, Developing PowerBuilder 4 Applications, Third Edition, and Special Edition: Using PowerBuilder 4.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg


DDJ July 1996 Graphics Programming

FEATURES

OPTIMIZING THE PERFORMANCE OF VRML WORLDS

by David R. Nadeau, Andrea L. Ames, and John L. Moreland

VRML, the "Virtual Reality Modeling Language," is a platform-neutral file format used to describe 3-D shapes and scenery for the World Wide Web. Different platforms, however, create different VRML-performance bottlenecks. Our authors present optimization techniques that let your VRML worlds look good and perform well.

3-D SURFACE CONTOURS

by Will Schroeder and Bill Lorensen

Visualization is the ability to transform complex data into visual form. What makes this possible is the contouring algorithm presented here.

SPIFF: STILL PICTURE INTERCHANGE FILE FORMAT

by James D. Murray

James examines SPIFF, the "still picture interchange file format," which is a generic bitmap file format defined by the ISO for the storage, compression, and interchange of color or grayscale continuous-tone images and bitonal image data.

AUTOMATICALLY GENERATING JAVA DOCUMENTATION

by Gary Aitken

Because Java doesn't require a header file, documentation is really important in a Java environment. Gary examines some of the documentation issues related to Java programming and discusses how to automatically generate documentation for Java classes using javadoc.

LOOP SPLITTING UNDER WINDOWS NT

by Charles Letner

Charles presents a C++ class that lets you use multiple threads to implement "loop splitting"that is, dividing processing of a loop over multiple processorsunder Windows NT.

EMBEDDED SYSTEMS

MONITORING DATA IN REAL TIME

by Tony Garcia, Jeff Woodard, and Craig Liddell

Our authors describe the design and implementation of a real-time system that monitors and logs environmental characteristics. Among other features, the system accommodates remote access to the data via the World Wide Web.

NETWORKED SYSTEMS

THE WINMOCK LIBRARY

by Joseph Hlavaty

Joe created WinMock, short for "Windows Sockets Mockup Tool," for testing and debugging Windows Sockets applications, without a network connection.

EXAMINING ROOM

EXAMINING THE SMARTSOCKETS TOOLKIT

by Douglass L. Campbell

SmartSockets, a message-oriented toolkit for developing systems that require IPC, lets you embed messaging capabilities into your applications so that they can communicate across different operating systems.

PROGRAMMER'S WORKBENCH

HELP FILE WEB LINKS

by Robert Lord

Bob shows how to embed links to World Wide Web URLs in your standard Windows help files. What makes this technique possible is a DLL implementation of a WinHelp macro that accepts a URL parameter.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

As Michael finds out this month, what can go wrong, will go wong, er, wrong.

C PROGRAMMING

by Al Stevens

In building his multimedia CD-ROM project, Al implements a derived application class for the dialog-based setup program. He also takes his first sip of Java.

ALGORITHM ALLEY

by Carlo Pescio

Dr. Pescio extends Cichelli's hashing algorithm to obtain a general implementation that improves the original algorithm's performance by more than an order of magnitude.

UNDOCUMENTED CORNER

by Robert R. Collins

The Pentium Pro's undocumented Physical Address Extensions (PAE) let the processor address up to 64 GB of physical memory (36-bit address bus), and access page sizes of 2 MB.

PROGRAMMER'S BOOKSHELF

by William Stallings

Emerging Internet protocols are discussed in IPng: Internet Protocol Next Generation, edited by Scott Bradner and Allison Mankin, and IPv6: The New Internet Protocol, by Christina Huitema.

Forum

Editorial

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg


DDJ August 1996 C/C++ Programming

FEATURES

BEYOND C++ TEMPLATES

by Fred Wild

Templates are just one approach to achieving code reuse in C++ programs. Fred examines templates and a number of other forms of instantiation some of which you may be acquainted with, and others you may not.

OBJECT-ORIENTED INTERPROCESS COMMUNICATION

by Stephen Blaha

Stephen shows how to place IPC services in C++ wrappers. He then turns his attention to Java socket classes, which illustrate an alternative object oriented interface.

STL ALGORITHMS

by Dan Zigmond

STL generic algorithms are independent of any particular data representation. Given a particular data structure that meets the algorithm's access requirements, they are as efficient as an algorithm hand-coded for that data structure.

LINEAR ALGEBRA WITH C++ TEMPLATE METAPROGRAMS

by Todd Veldhuizen and Kumaraswamy Ponnambalam

A C++ technique called "template metaprograms" makes it possible for you to exploit the interpretive nature of the C++ template mechanism to write metaprograms that are interpreted at compile time and generate specialized algorithms as their output.

DYNAMIC MESSAGE PASSING IN C++

by Pierre Arnaud

Pierre implements Objective-C-like dynamic message passing in C++, using a set of macros and classes. This project provides a set of operating-system-independent classes that let you build and modify a user interface with only a few mouse clickseven from within a running application.

INSIDE SOFTRAM 95

by Mark Russinovich, Bryce Cogswell, and Andrew Schulman

Our authors examine "RAM doubling" technology, then look inside SoftRAM 95 to find out what it does and, more importantly, does not do.

EMBEDDED SYSTEMS

CONCURRENT SMALL C

by Andy Yuen

Concurrent Small C is a programming language specifically designed for embedded-system development. A subset of Small C, Concurrent Small C uses five new keywords to provide direct support for preemptive multitasking, interprocess communication, and interrupt handling.

NETWORKED SYSTEMS

NETWORKING CD-ROMs USING CACHED CD IMAGES

by John H. McCoy

John describes a cache driver that reads cached CD images and makes them appear as CD-ROM drives. The images can be located on either the client machine or on a network server if the client accesses the network via a real-mode redirector rather than a shell.

EXAMINING ROOM

EXAMINING SYMANTEC'S CAFE

by Anil Hemrajani

Cafe is a 32-bit standalone Java visual-development environment available for both Windows and Macintosh. Anil uses it to develop a typical Java appleta phonebook for retrieving information about a person at a given Web site using their first name, last name, telephone number, fax number, or e-mail address.

PROGRAMMER'S WORKBENCH

BUILDING AN EXPERT SYSTEM

by Gregg Weismann

Gregg describes an expert system that helps in the installation and operation of network and network/modem combo cards. He developed the system using Borland C++, Microsoft Assembler 6.1, and Amzi! Prolog+Logic Server.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Between reading Dorfman and Ghosh's Developing Games that Learn and catching up on his correspondence, Michael takes time to attend Apple's World Wide Developer's Conference.

C PROGRAMMING

by Al Stevens

Interviewing for a job as a C++ programmer? Al has some tips for you, after which he discusses the Windows 95 Start Menu.

JAVA Q&A

by Cliff Berg

How do you send e-mail from a Java applet? Cliff shows you how.

ALGORITHM ALLEY

by Mark R. Nelson

The suffix trees Mark describes here precalculate data structures for fast string searches. To illustrate suffix trees, he presents a program that reads in a string of text from standard input, then builds a tree.

UNDOCUMENTED CORNER

by Scot Wingo and George Shepherd

George and Scot look inside OLE control property pages so you can see what's happening behind the scenes. They also present a workaround for adding parameterized properties to an OLE control.

PROGRAMMER'S BOOKSHELF

by Phil Mitchell

Phil examines Andrew Hodges' Alan Turing: The Enigma and Bruce Blum's Beyond Programming: To a New Era of Design.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg


DDJ September 1996 User Interfaces

FEATURES

GOAL-DIRECTED SOFTWARE DESIGN

by Alan Cooper

Goal Direction is the design methodology GUI guru Alan Cooper devised to cut through the confusion surrounding software-design problems. Using examples from his own design projects, Alan shows how Goal Direction lets you synthesize solutions that would otherwise never have been possible.

CUSTOMIZING THE EXPLORER OPEN DIALOG

by Al Williams

Windows 95 uses a special open dialog that allows users to rename files, create directories, and (of course) open files. Al shows how to customize this dialog, using a Delphi 2.0 component.

CREATING SHAPED UI OBJECTS

by Steve Sipe

CShape, the C++ class Steve presents here, lets you create and manage custom windows, custom controls, and shaped dialog boxes. He then uses the class to build sticky-note and stellar calculator user interfaces.

WRITING USER-DEFINABLE GUIs

by Troy A. Schauls

User-defined screens let users create and modify data-entry screens. This ability is possible if you use Visual Basic forms that are created, parsed, and compiled into a proprietary format, with only a "system form" in the app's executable file.

THE JAVA ABSTRACT WINDOW TOOLKIT

by Anil Hemrajani

Anil examines the Java Abstract Window Toolkit (AWT), a portable GUI class library for developing applications and applets. He then builds a text-editor application for Windows 95 and Solaris, along with an applet for Windows 95.

DATA COMPRESSION WITH THE BURROWS WHEELER TRANSFORM

by Mark R. Nelson

The Burrows Wheeler Transform is an algorithm that takes a block of data and rearranges it using a sorting algorithm. The resulting output block is extremely well-suited for compression.

EMBEDDED SYSTEMS

A PROCESS GROUP MANAGER FOR OS-9

by Peter C. Dibble

This file manager lets you adapt the OS-9 real-time operating system's I/O system to provide non-I/O services.

NETWORKED SYSTEMS

IMPLEMENTING A WEB SHOPPING CART

by Chris Baron and Bob Weil

Our authors examine the components of an online catalog, focusing on a virtual shopping-cart system and ways around the shortcomings of HTTP. They then present an online-catalog system implemented in Perl.

EXAMINING ROOM

EXAMINING THE INSTALL SHIELD SDK EDITION

by Joseph Hlavaty

Joe builds a standardized installation/distribution methodology using the InstallShield integrated installation/distribution program, versions of which are included with Visual C++ 4.1, Visual Basic 4.0, Borland C++ 5.0, Delphi 2.0, Paradox 7.0, and Optima++.

PROGRAMMER'S WORKBENCH

JAVA, JFACTORY, AND NETWORK DEVELOPMENT

by Eldon Metz

JFactory is a cross-platform screen painter, prototyper, and code generator for Java that lets you concentrate on the design and functionality of your GUI by generating AWT source code. Eldon uses it to build an Internet-based client/server Java application.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael strides forth into the field of software design.

C PROGRAMMING

by Al Stevens

This month, Al answers the fundamental C++ programming questions he posed in August.

JAVA Q&A

by Cliff Berg

What do you do if the Java AWT's layout managers won't let you build the kind of UI you need? You write your own layout manager, of course, and Cliff shows you how.

ALGORITHM ALLEY

by Edward Sitarski

To overcome the limitations of variable-length arrays, Edward created a data structure that has the fast constant-access time of an array, but avoids copying elements when it grows. He calls this structure a "Hashed-Array Tree" (HAT) because it combines some of the features of hash tables, arrays, and trees.

UNDOCUMENTED CORNER

by Robert R. Collins

How does your program know which Intel processor is the current system CPU? Robert looks at the options, including Intel's PUSHF/POPF technique.

PROGRAMMER'S BOOKSHELF

by Lou Grinzo

Windows 95 is Lou's focus this month, as he examines Migrating to Windows 95: Programmer's Guide to What's New, by Mark Andrews, and Programming Windows 95, by Charles Petzold and Paul Yao.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Monica E. Berg


DDJ October 1996 Object Oriented Programming

FEATURES

USABILITY AND CLASS LIBRARY DESIGN

by Arthur T. Jolin

As systems grow more complex, the usability of class libraries and frameworks becomes more important. Arthur presents a set of guidelines for usability that have been arrived at over time, during actual class-library and framework development.

MULTIPLE INHERITANCE FOR DELPHI

by Roland Kaufmann

Although complex, multiple inheritance can be handy from time to time. Roland implements multiple inheritance for Delphi 2.0 using the TLead class. Al Williams then adds a note on aggregation, containment, and derivation.

EXTENDING THE VISITOR DESIGN PATTERN

by Matthew Nguyen

The primary purpose of the Gamma/Helm Visitor design pattern is to promote code reuse. Matthew extends the Visitor pattern by adding conditional intelligence.

COMPONENT OBJECTS AND DISTRIBUTED COMPUTING

by Jeff Rush

Interoperable component objects are making distributed computing a reality by handling much of the complexity inherent in distributed systems. Jeff uses IBM's SOM to create desktop objects for the OS/2 Workplace Shell that use Distributed SOM (DSOM) to invoke methods on remote objects-all implemented in C++.

PERSISTENCE FOR C++

by David Channon

Persistent objects are data elements that can live after the program that created them has stopped. David implements a persistent layer for C++, which does not include persistence as a language feature.

EMBEDDED SYSTEMS

OBJECT-ORIENTED FLOW DESIGN FOR EMBEDDED SYSTEMS

by Barry Kauler

GOOFEE notation, the object-oriented methodology Barry presents here, uses a single graphical notation and diagram for every phase of design. For embedded systems, designs done with GOOFEE notation are readable and easy to develop.

NETWORKED SYSTEMS

ATM SOFTWARE ANALYSIS AND DESIGN

by Derek Cheung

Derek examines how you can apply OMT for analyzing and developing software for a simple Asynchronous Transfer Mode (ATM) switch.

PROGRAMMER'S TOOLCHEST

EXAMINING THE NUTMEG CLASS LIBRARY

by Doug Garrett

The Nutmeg class library for Java is an implementation of a Smalltalk Collection class library. Thought Inc.'s Nutmeg provides a variety of "smart," flexible array type objects to manage groups or sets of objects.

EXAMINING THE LABOBJX REAL-TIME CHART CONTROL

by Jonathan Williams

In developing a real-time monitoring system, Jonathan needed to display up to five channels at one time, allow users to scroll through large data sets, and more. He selected SST's LabOBJX Real-Time Chart, a custom control (VBX) that can be used with Visual Basic, C++, and Delphi.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

What's the state of computer science today? Michael finds out, as he examines a book of the same name.

C PROGRAMMING

by Al Stevens

Al hears from you on topics ranging from Setup versus Uninstall programs, Registry versus .INI files, and the Kevorkian algorithm. He then returns to MidiFitz, a MIDI program that reads an 88-key keyboard, parses the notes into chords in real time, and plays a matching bass line.

JAVA Q&A

by Cliff Berg

How do you display media formats that Netscape does not support? Cliff presents an applet that makes this possible.

ALGORITHM ALLEY

by Dann Corbit

Approximating the value of an integral is an important kind of calculation that's not nearly as hard as you think. Dann shows how simple it is to get good results, then discusses some new techniques that offer even better accuracy.

UNDOCUMENTED CORNER

by George Shepherd and Scot Wingo

Understanding how drag-and-drop works at the Common Object Model (COM) level and how MFC implements drag-and-drop illustrates the power of COM, underscoring the kinds of things you can do by programming in it.

PROGRAMMER'S BOOKSHELF

by Warren Young

Warren examines the now-classic Design Patterns: Elements of Reusable Object-oriented Software, by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, and the newly released Object-Oriented Design Heuristics, by Arthur J. Riel.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Eugene Eric Kim


DDJ Client/Server Programming

FEATURES

MIDDLEWARE AND THREE-TIER CLIENT/SERVER DEVELOPMENT

by Timothy E. Carone

Transaction managers-server-based software that enable the development and management of application programs-are key to the success of distributed processing. Timothy develops a typical three-tier, client/server system, using Tuxedo as the transaction manager and the Oracle Database Server as a resource manager.

OPTIMIZING CLIENT/SERVER DATABASE APPLICATIONS

by Gary Bist

Gary examines two coding methods-the Compound SQL statement and stored procedures-to reduce and reuse embedded SQL code to increase performance and productivity.

THE DBPERL RELATIONAL DATABASE API

by Perry Scherer

DBperl is a Perl 5 package that implements a relational database API for a variety of database engines, including Oracle, Informix, Ingres, Interbase, Postgres, Sybase, and Unify 5.0.

JAVA AND WEB-EXECUTABLE OBJECT SECURITY

by Michael Shoffner and Merlin Hughes

Our authors examine the general problems with Web-embedded executable objects and how Java's security model attempts to resolve them.

SPEECH RESEARCH WITH WAVE-GL

by Petra Lutter, Michael Muller-Wernhart, Jurgen Ramharter, Frank Rattay, and Peter Slowik

WAVE-GL, short for "Wave Generation Language," is a system designed for generating new sounds from mathematical descriptions. Our authors describe the tools they developed to create and manipulate WAV-format sound files.

EMBEDDED SYSTEMS

RESTARTING EMBEDDED SYSTEMS

by Fredrik Bredberg, Ola Liljedahl, and Bengt Eliasson

"Hot" starts allow a computer system to pick up at exactly the spot where it was before a system crash occurred. Operating systems such as the OSE RTOS from Enea Data make these hot starts possible.

NETWORKED SYSTEMS

UNDOCUMENTED WINDOWS NT AND THE NETWARE CORE PROTOCOL

by Sven B. Schreiber

NT's NetWare client API support leaves a lot to be desired. Sven shows you how to overcome this limitation by exploiting undocumented features of the NT NetWare redirector to send and receive NetWare Core Protocol (NCP) packets.

PROGRAMMER'S TOOLCHEST

EXAMINING THE SYSTEMS<TOOLKIT> LIBRARY

by Michael J. Vilot

Systems<ToolKit> is a library that builds on the expressive foundation of the C++ Standard Library. It also adds iostream support to distributed C++ applications using sockets (and pipes, in the UNIX version) for IPC connections. Mike uses Systems<ToolKit> to develop a pair of distributed client/server applications for environments such as the Internet.

EXAMINING FORTE EXPRESS

by Nabil Hijazi

Forte Express is a visual tool for client/server application development that generates the UI and database-access components of object-oriented, multi-tier applications.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

While examining multimedia-authoring tools, Michael realizes that if you give your users four ways to solve a problem, you don't really know what the problem is.

C PROGRAMMING

by Al Stevens

Years of piano playing and programming finally pay off, as Al breaks into the exciting world of late-night TV. Not quite ready to give up his day gig, however, Al also shows how he converted a dialog-based MFC application to use the Property Sheet/Property Page idiom.

JAVA Q&A

by Cliff Berg

How threads work and how you can create a general-purpose event scheduler are Cliff's focus this month.

ALGORITHM ALLEY

by John Swartz

The main idea behind LISP is that any data structure can be constructed from lists. Consequently, John turns to this language when in need of a simple solution to complex combination problems.

UNDOCUMENTED CORNER

by Robert R. Collins

Robert presents a processor-detection algorithm that doesn't use Intel's CPUID instruction.

PROGRAMMER'S BOOKSHELF

by Eric McRae

Eric examines The Benchmark Book, by Richard Grace, and C Algorithms for Real-Time DSP, by Paul M. Embree.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

SWAINE'S FLAMES

by Michael Swaine

PROGRAMMER'S SERVICES

OF INTEREST

by Eugene Eric Kim


DDJ December 1996 Cross-Platform Development and Portability

FEATURES

DCE PTHREADS VERSUS NT THREADS

by Michael Yam

Michael ports PTF, a C++ class library for DCE pthreads, from HP-UX System 9 to Windows NT. In doing so, he examines the differences between pthreads and NT threads, and describes the porting experience.

INSIDE THE WINHELP() API FUNCTION

by Paul Kissel

Paul shows what's involved in building a platform-independent implementation of the WinHelp() function. He then shares "seven deadly sins" you should avoid when writing portable software.

LUA: AN EXTENSIBLE EMBEDDED LANGUAGE

by Luiz Henrique de Figueiredo, Roberto Ierusalimschy, Waldemar Celes

Lua is a freely-available, general-purpose embedded programming language designed to support procedural programming with data-description facilities. Its code compiles without change in most ANSI C compilers, including gcc (on AIX, IRIX, Linux, Solaris, SunOS, and ULTRIX), Turbo C (on DOS), Visual C++ (on Windows 3.1/95/NT), Think C (MacOS), and CodeWarrior (MacOS).

VIRTUAL AUDIO THROUGH RAY TRACING

by Tom Zudock

By understanding how we hear and the cues we use to identify the relative location of sound, you can process sound that's perceived as "virtual audio." In this article, Tom focuses on how you determine the early reflections of a sound source that reach a listener in a simple room.

MULTITHREADING AND VISUAL BASIC

by Dino Esposito

Although Visual Basic does not support native multithreading, it does support the Windows API. This means you can write VB applications composed of two or more threads. Dino shows you how to create multithreaded applications using both the SDK and Visual Basic.

EMBEDDED SYSTEMS

INSIDE MOTOROLA'S TPU

by Richard Soja

Any number of embedded-control applications require high-resolution timing capabilities. Consequently, devices such as Motorola's Time Processor Unit (TPU) are becoming increasingly common for high-end control processors.

NETWORKED SYSTEMS

EXTENDING HTTP SERVERS WITH DGI AND TGI

by Andrew Montefusco

To reduce CGI-related overhead, Andrew implements two alternative approaches in his HTTPD2 server-Task Gateway Interface (TGI) and Dynamic Gateway Interface (DGI). Both approaches avoid the overhead of starting a new process for each separate request.

PROGRAMMER'S TOOLCHEST

EXAMINING THE WINBATCH TOOLKIT

by Dot Schryver

The WinBatch Toolkit, which provides traditional batch-language file-management capabilities, is based on a structured programming model. Dot tells how Bentley College is using WinBatch to support over 7000 networked users.

WEB PROGRAMMING WITH VISUAL FOXPRO

by George F. Goley IV

Visual FoxPro is a cross-platform, visual tool for database development that includes a number of wizards. Here, George uses the WWW Search Page Wizard to run Visual FoxPro programs across the Internet.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

The personal computer revolution was more than a Silicon Valley phenomenon.

C PROGRAMMING

by Al Stevens

Al reports on what the experts have to say about delete this;, then presents a generic Undo class library.

JAVA Q&A

by Cliff Berg

Cliff presents a technique for building a drag-and-drop interface using standard AWT components. In doing so, he builds an application that lets end users perform a host-to-host file transfer.

ALGORITHM ALLEY

by Dann Corbit and Rafael Collantes-Bellido

This month, we examine a pair of unrelated algorithms. Dann looks at ways to calculate factorials, while Rafael uses differential equations to produce natural-looking textures.

UNDOCUMENTED CORNER

by George Shepherd and Scot Wingo

George and Scot examine the undocumented areas of CSplitterWnd, one of the most complicated and confusing of all MFC classes.

PROGRAMMER'S BOOKSHELF

by Doug Nickerson

Doug examines a trio of Java books- David Flanagan's Java in a Nutshell, Peter van der Linden's Just Java, and Java Programming Language Handbook, by David H. Friedel, Jr. and Anthony Potts.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine


DDJ Special Issue 1996 - DATABASE DEVELOPMENT

FEATURES

SQL Access Group's Call-Level Interface

by Roger Sippl

The chairman of the SQL Access Group looks at the current status of SQL's call-level interface and provides a glimpse of the SQL specification's future.

Performance Testing, ODBC, and Native SQL APIs

by Ken North

Network latency, application bottlenecks, and client libraries make it difficult to judge the performance of your SQL API. The benchmark software Ken presents here lets you test the SQL API while holding other variables constant.

Partitioning Applications in Smalltalk

by Jay Almarode

Distributed Smalltalk systems allow you to build application servers, the middle tier in the three-tier architecture, where business logic is executed. Jay presents guidelines for partitioning your next application.

A Client/Server DBMS for Managing Clinical Data

by Richard A. Gams

In developing a database to manage clinical-trial data, Richard discovered that a network/hierarchical model is more suitable than the relational model for large volumes of data of different types.

Programming with M

by Dan Shusman

M, a successor to MUMPS, is an ANSI-standard language designed for direct data access and greater control than SQL over issues such as performance. Dan combines M and SQL to extend Visual Basic applications.

COLUMNS

Ramblings in Real Time

by Michael Abrash

Michael lifts the hood on Quake, the successor to id Software's DOOM, detailing how Quake's developer uses visible surface determination and culling to quickly perform surface rendering.

DTACK Revisited

by Hal W. Hardenbergh

What do minitower cases, product loyalty, UNIX, RISC workstations, Cray supercomputers, and the Pentium Pro have in common? The answer may be contained in Gresham's Law.

20/20

by Al Williams

Al kicks off a new column by showing how you can wrap an existing Windows control within a Delphi component.

Patterns and Software Design

by Richard Helm and Erich Gamma

Richard and Erich explain how Courier Patterns are used to pass arbitrary requests and information using a fixed interface.

Software and the Law

by Marc E. Brown

Has your product infringed on someone's patent? Marc looks at both sides of the question and shows how you can determine whether your product contains someone else's invention.

Editorial

by Michael Floyd

Letters


DDJ Special Issue 1996 - WINDOWS 95 PROGRAMMING

FEATURES

Customizing Delphi Applications

by Al Williams

Users can change the look of the Windows 95 shell by relocating the task bar, changing colors, relabeling system icons, and more. Al uses Borland's Delphi to show how you can make your next application more configurable.

Fast Interrupt Processing in Windows 95

by Victor Webber

When it comes to real-time responsiveness, Windows 95 can take 40 times longer than DOS to process hardware interrupts. Victor lifts the hood on Windows' internals and improves performance by using documented calls in an undocumented fashion.

Direct Thunking in Windows 95

by Matt Pietrek

Matt shows you how to use Windows 95's undocumented QT_Thunk function to thunk between 16- and 32-bit code and introduces a 32-bit utility program to get free system resources.

Building VxDs in Windows 95

by John Forrest Brown

John presents an assembly shell that shortens the VxD learning curve while providing a framework that can be used in most situations.

Windows 95 Subclassing and Superclassing

by Jeffrey Richter and Jonathan Locke

By inheriting features from existing controls, you can create new customized controls without starting from scratch. Jeff and Jon show you how.

COLUMNS

Ramblings in Real Time

by Michael Abrash

After considering some alarming trends in programming, Michael moves on to discuss 3-D clipping--particularly polygon and viewspace clipping.

20/20

by Al Williams

Al presents a neural-network object created using Visual Basic 4.0's new class facility. He then uses the class to build a tic-tac-toe game that you teach--not program--to play.

DTACK Revisited

by Hal W. Hardenbergh

In this issue, Hal sets the record straight on everything from how to spell his name to pushing the Pentium clock.

Software and the Law

by Marc E. Brown

Developers creating custom software applications can be exposed to litigation. Marc offers some contract clauses that minimize your exposure, while reducing the misunderstandings that lead to these expensive lawsuits.

Editorial

by Michael Floyd


DDJ Special Issue 1996 - GAMES GRAPHICS MULTIMEDIA

FEATURES

Games Programming with DirectPlay

by Chris Howard

DirectPlay, which comes with the Windows 95 Game SDK, provides communication services for your games. Chris examines DirectPlay by presenting a multiplayer game, while Jim Mischel adds a few DirectPlay "gotchas" he discovered the hard way.

Designing Isometric Game Environments

by Nate Goudie

As computer games became more sophisticated, simple tile-based games have given way to the isometric point of view and 3-D effects.

Designing a Distributed Simulation Game

by Ron van der Wal

Ron describes a simulation game he helped design, focusing on the communications facilities that allow it to run on top of several different protocols.

Your Own Two-Dimensional Gaming Engine

by Mark Seminatore

Mark's 2-D game engine includes modules that support VGA displays, keyboard, animation, and file management.

A MIDI Class in C++

by George Wright

George uses the VisualAge C++ collection classes to develop event, track, and MIDI file classes that produce realistic-sounding audio.

Programming with OpenGL Primitives

by Ron Fosner

OpenGL is a graphics API that allows portable, hardware-assisted 3-D rendering.

COLUMNS

Ramblings in Real Time

by Michael Abrash

Michael analyzes the rationale behind Quake's hidden-surface removal and looks at the pros and cons of sorting edges by BSP order or 1/z.

DTACK Revisited

by Hal W. Hardenbergh

CPU vendors' eyes are sometimes bigger than their stomachs, at least when it comes to delivery on performance promises.

20/20

by Al Williams

This month, Al shows you how to create DLLs using Visual Basic 4.0 and Borland's Delphi 2.0.

Software and the Law

by Marc E. Brown

If you earn your living working with third-party software, give careful thought to the legal ramifications of interfacing with software written by someone else.

The Software Engineer

by Allen Holub

In his return to Dr. Dobb's, Allen describes what it takes to get into the object-oriented design game.

Editorial

by Tim Kientzle


DDJ Visual Tools July/August 1996

Features

Visual Development Tools for Java

by Steve V. Yalovitser

Steve shares his experiences working with a trio of Java visual-development environments-Rogue Wave's JFactory, Symantec's Cafe, and Autodesk's HyperWire.

Visual Installation

by Al Williams

Al uses Sax Software's Setup Wizard to set up a multimedia training tool. He then takes a peek at Eschalon's Setup Pro, Jetstream's InstallWizard, and InstallShield's Express Professional.

Writing Delphi Components

by William Stamatakis

A Delphi component is simply a class with some value-added features for representing the class, and for manipulating attributes of the class. Bill shows you how to create a component that can be used in any Delphi application.

The Libero Development Environment

by Pieter Hintjens

Libero is a language-independent visual-development environment that lets you design programs as state diagrams. Pieter uses Perl with Libero to develop an HTML preprocessor.

Image Processing and Visual Basic

by Don Parrish

Don details his favorite tricks for squeezing more performance out of Visual Basic when using it for image plotting. His techniques improve disk access and image quality.

Adding Power to PowerBuilder

by Baylor Wetzel

Baylor presents an awk-like PowerBuilder nonvisual user object for string parsing that provides integration with databases and graphical objects.

COLUMNS

Ramblings in Real Time

by Michael Abrash

Michael examines the three main types of 1/z span sorting, then discusses a sample 3-D app built around the technique.

DTACK Revisited

by Hal W. Hardenbergh

When it comes to tape-backup systems, it's easy to get all twisted up. Hal describes the options and features to consider when choosing a system.

20/20

by Al Williams

Al develops several cooperating Delphi programs that utilize a shared-memory component that, in turn, utilizes Win32 synchronization to keep the memory consistent.

Software and the Law

by Marc E. Brown

The U.S. Patent Office recently released guidelines for issuing patents for software and display icons. Marc analyzes those guidelines to determine what they really mean to software developers.

The Software Engineer

by Allen Holub

One of the main strengths of the object-oriented approach is that you can make changes to the structure of an object without affecting any of the code that uses the object.

Editorial

by Tim Kientzle


DDJ Java Programming Sourcebook

FEATURES

Java User-Interface Design

by Jeffrey Kay

IBM's infoMarket is one of the first major web-based search services to implement a user interface written entirely in Java. Jeffrey discusses its design and presents some of the Java classes that make it work.

Server-Side JavaScript

by Sudhakar Ramakrishnan

JavaScript is an object-oriented scripting language that can be written within specified tags and embedded within an HTML document. Additionally, "server-side" JavaScript lets you develop applications that execute on the server.

Combining Visual Development Environments

by Wm. Ellis Oglesby

Our author mixes and matches the best features from Rogue Wave's JFactory and Symantec's Cafe to create his JavaTax applet, web-based software for tax preparation.

Calling Native Code from Java

by Robi Khan

The downside of native Java code is that it is nonportable. On the upside, however, native code is sometimes the only way of getting the job done. Robi uses native code to implement a Java Clipboard class for Win32.

Java and Embedded Real-Time Control

by Kelvin Nilsen

In the beginning, Java was intended for embedded-systems development. Kelvin describes the extensions and libraries you need to make this possible with today's Java implementations.

JavaOS: An Operating System for Small Devices

by Steve Mann

JavaOS is a complete operating system with a minimalist set of application and network services that can fit in a PDA-size memory footprint. Steve examines the operating system, and provides an overview of the upcoming JavaChips.

Columns

Ramblings in Real Time

by Michael Abrash

Michael reveals how he and other id programmers designed and implemented the Quake lighting model which draws the world. In doing so, Michael focuses on performance and complex lighting.

20/20

by Al Williams

ActiveX controls can be used with Visual Basic, Visual C++, Delphi, and many other environments. Al shows you how to use MFC to write custom controls.

DTACK Revisited

by Hal W. Hardenbergh

Will web servers revitalize the SMP (symmetrical multiprocessing) market? Hal examines SMP's chances for success.

Software and the Law

by Marc E. Brown

There's more involved in doing business on the Net than hanging a virtual shingle. Marc examines the promise and pitfalls of business on the web.

Editorial

by Tim Kientzle


DDJ Web Development

FEATURES

Harvard's Conference on the Internet and Society

by Eugene Eric Kim

Will the Internet really change the way we live, work, learn, govern, and communicate? Eugene reports on a Harvard University symposium that looked for the answer to this and other questions.

Analyzing Web Traffic with Perl

by Frederic Bien, Michel Delory, and Richard McGillis

Our authors present SurfReport, a program that takes the nearly unreadable format of your web-site log entries, and converts them to a meaningful report of who has been accessing your site.

Access Counters for Web Pages

by Andrew Davison

Andrew presents two approaches to creating access counters-one that's based on server-side includes, and another that utilizes the CGI protocol.

Automating Tech Support

by Mary Kroening

WebLS is a logic-based system that's designed to "automatically" answer commonly asked technical-support questions via the Web.

Networking with Java

by Anil Hemrajani

Java's java.net package provides the tools you need for developing client and server applications for the Internet. Anil examines this class and shows how you can make the most of it.

ActiveX Documents and the World Wide Web

by Vinod Anantharaman

Microsoft's ActiveX Documents are designed to make it possible for heterogeneous documents to integrate seamlessly with a wide variety of container applications, including multivendor Web browsers.

Your Own Netscape Plug-in Installer

by Mark Carolan

While Mark's PlugInstall was originally designed for installing plug-ins for Netscape Navigator, it's flexible enough for general-purpose Windows 95 installation.

COLUMNS

Ramblings in Real Time

by Michael Abrash

Michael always thought you had to resort to fixed-point math when attacking real-time, 3-D problems. But with its faster floating-point instructions, pipelined floating-point unit, and parallel FXCH, the Pentium has changed his way of thinking.

DTACK Revisited

by Hal W. Hardenbergh

DRAM and the future of Windows NT are Hal's focus in this issue.

20/20

by Al Williams

Adding Net-related functionality to your software used to mean knowing all about TCP/IP stacks, domain name services, and protocols. Tools such as Microsoft's ActiveX Internet Control Pack now do the work for you.

Software and the Law

by Marc E. Brown

What really happens when software is involved in a legal dispute? Marc examines the anatomy of a software lawsuit.

The Software Engineer

by Allen Holub

The next battles in the component architectures war may pit OLE against Java. Allen examines the two competing object models.

Editorial

by Tim Kientzle


Dr. Dobb's Developer Update, January 1996

Beyond Semiconductors
Conference Report - ColoradOS/2 Conference
The Last Word

DDJ January 1997 - Encryption, Error Correction & Compression

FEATURES

A CONVERSATION WITH EVA BOZOKI

by Jack Woehr

Network security is a concept whose time clearly has come, and, as Jack finds out this month, DSNT chief scientist Eva Bozoki is in the thick of things, security wise.

THE RIPEMD-160 CRYPTOGRAPHIC HASH FUNCTION

by Antoon Bosselaers, Hans Dobbertin, and Bart Preneel

Cryptographic hash functions are an essential building block for applications that require data integrity. In this article, our authors propose that the RIPEMD-160 hash function is a secure replacement for MD4 and MD5.

REED-SOLOMON ERROR CORRECTION

by Hugo Lyppens

For any number of reasons, Reed-Solomon error correction is commonly implemented in hardware. Here, Hugo presents a highly optimized software implementation of Reed-Solomon error correction, written in C++ and assembly language.

THE ZLIB COMPRESSION LIBRARY

by Mark R. Nelson

Mark examines zlib, a library of C routines that can be used to compress or expand files using the same deflate algorithm popularized by PKZIP 2.0.

WINDOWS NT SYSTEM-CALL HOOKING

by Mark Russinovich and Bryce Cogswell

Mark and Bryce present the design and implementation of NTRegmon, a tool that uses hooking to show detailed information about each and every registry access that occurs on a Windows NT system.

STEGANOGRAPHY FOR DOS PROGRAMMERS

by Alan Johnson

Steganography is a branch of cryptography that deals with concealing messages.

EMBEDDED SYSTEMS

SIMULATION AND DEVICE-DRIVER DEVELOPMENT

by Eddy Quicksall and Ken Gibson

To ease the process of writing device drivers for new hardware designs, our authors present a simulation environment. To illustrate its use, they use the sample Adaptec AHA-1540 SCSI miniport driver that comes with the Windows NT DDK.

SIMULATING THE DENVER AIRPORT AUTOMATED BAGGAGE SYSTEM

by John Swartz

John uses Xlisp to implement a computer simulation of the essential components of the Denver airport automated baggage fiasco, er... system.

NETWORKED SYSTEMS

EXAMINING EXTENDED MAPI 1.0

by Les Thaler

The Extended Messaging Application Programming Interface 1.0, not to be confused with the previous-generation "Simple MAPI," was created to standardize the interfaces between messaging applications and the underlying messaging systems.

PROGRAMMER'S TOOLCHEST

PUBLISHING DYNAMIC DATA ON THE INTERNET

by Lauren Hightower

Allaire's Cold Fusion is a development tool that provides access (via the Web) to any database the web server can access using ODBC. Cold Fusion runs as a multithreaded Windows NT system service and works with any ODBC-compliant database.

INSIDE ITERATED SYSTEMS' FRACTAL DEVELOPMENT KIT

by Dino Esposito

The Fractal Development Kit from Iterated Systems is a library that makes it possible for you to embed fractal-imaging capabilities into C/C++ Windows and Macintosh applications.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael looks at paradigms past, focusing this month on spreadsheets.

C PROGRAMMING

by Al Stevens

Users expect standard Windows Help for all applications, no matter how small or how intuitive the procedures. To that end, Al updates a property page dialog-based application to include context-sensitive help for the controls on the dialog pages.

JAVA Q&A

by Cliff Berg

Cliff examines how you can use Java to implement a CORBA application that is representative of the way CORBA is likely to be used. In doing so, he revisits the chat application introduced in a previous column.

ALGORITHM ALLEY

by John Boyer

Heaps are usually implemented via binary trees, with the property that for every subtree, the root is the minimum item. Here, John describes how to implement exceptionally fast "Fibonacci" heaps.

UNDOCUMENTED CORNER

by Robert R. Collins

Robert launches an examination of the Intel System Management Mode (SMM), comparing the SMM's RSM instruction to the ICE mode's undocumented LOADALL instruction.

PROGRAMMER'S BOOKSHELF

by Ron van der Wal and William Stallings

Ron examines Stanley Lippman's Inside the C++ Object Model, while William looks at Peter Wayner's Disappearing Cryptography: Being and Nothingness on the Net.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1997, Dr. Dobb's Journal

DDJ February 1997 - Software Debugging and Testing

FEATURES

UNIT AND REGRESSION TESTING

by Adrian McCarthy

Testing a function, module, or object in isolation from the rest of the program -- referred to as "unit testing" -- coupled with rerunning tests to detect unexpected changes in behavior ("regression testing") can dramatically reduce your bug counts. Adrian describes how to build effective units tests and automate regression testing.

A DEBUG/TRACE TOOL

by Rainer Storn

The debug/trace tool Rainer presents here is useful when you don't have a powerful debugger at hand, and also when you need to build trace functionality into your code for error-spotting support at the client's site.

JAVA GUI TESTING

by Alan Walworth

As Java development takes off, so does the need to test GUI applications written in Java. Alan examines Java GUI testing issues and presents a test harness written in and for Java.

A DISASSEMBLER WRITTEN IN PERL

by Tony Zhang

Tony presents the core subroutines of a disassembler written in Perl. Although designed for Intel's x86 instruction set, you can easily modify or customize the disassembler for your own applications.

EXAMINING THE WINDOWS NT FILESYSTEM

by Mark Russinovich and Bryce Cogswell

Mark and Bryce open up the inner workings of the NT filesystem by describing how a filesystem request originates in a user's program and ends up as a disk access. They also present an application called Filemon that monitors and displays all filesystem activity.

EMBEDDED SYSTEMS

ROBOTS AND FINITE-STATE MACHINES

by Everett F. Carter, Jr.

Designing and building autonomous robots presents a host of technical challenges. Our author focuses on one of these challenges, describing the high-level processing he implemented in designing a robot-control system.

NETWORKED SYSTEMS

UNIX FILESYSTEMS WITHOUT I-NODES

by Volker Lendecke

The Linux kernel nfs, smbfs, and ncpfs filesystems make it possible to link Linux machines to file servers across a LAN -- even though Microsoft's SMB protocol is not designed to handle UNIX clients like Linux. Volker presents a workaround for this limitation.

PROGRAMMER'S TOOLCHEST

EXAMINING C++ PROGRAM ANALYZERS

by Scott Meyers and Martin Klaus

Our authors examine a bevy of off-the-shelf tools that parse and analyze C++ source code, enabling you to detect troublesome C++ code via static analysis.

TESTING TESTERS

by Ron van der Wal

In an ideal world, development progresses smoothly from requirements to completion. In the real world, errors creep in. Ron examines a collection of commercially available automated testing tools that aid in ferreting out those errors.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Apple, Java, and the BeBox are on Michael's mind this month.

C PROGRAMMING

by Al Stevens

Al presents MIDI Xchg, a program that tests the MIDI data stream by sending event messages from one device to another as fast as possible.

JAVA Q&A

by Cliff Berg

This month, Cliff shows how you can use Java's distributed programming model and access a SQL database from a Java applet.

ALGORITHM ALLEY

by Oleg Kiselyov

Hoping to find the most efficient line between two points, Oleg examines scheduling algorithms and NP-complete problems.

UNDOCUMENTED CORNER

by George Shepherd and Scot Wingo

George and Scot continue their examination of the CSplitterWnd class, this month showing how you can apply knowledge of the CSplitterWnd internals to solve common MFC programming problems.

PROGRAMMER'S BOOKSHELF

by Phil Mitchell

Phil goes back to the future in his look at Thomas Landauer's The Trouble With Computers and The Future of Software, edited by Derek Leebaert.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1997, Dr. Dobb's Journal

DDJ March 1997 - Intelligent Agents

FEATURES

AGENT TCL

by Robert S. Gray

A mobile agent is a program that migrates under its own control from machine to machine in a heterogeneous network. Agent Tcl is a mobile-agent system that uses Tcl as its main language, but provides a framework for incorporating additional languages.

AGENTS AND REINFORCEMENT LEARNING

by Satinder Singh, Peter Norvig, and David Cohn

Many people see agents and agent-based programming as ushering in a new era in computing -- particularly on the Internet. Our authors explain why programming agents is not just business as usual, but requires a new way of looking at problems and their solutions.

DISTRIBUTED ACTIVE OBJECTS

by Marc H. Brown and Marc A. Najork

Distributed active objects, which communicate with other active objects located on different machines across the Internet, make it easy to write groupware, computer-supported cooperative work applications, and multiplayer games.

RPC FOR WINDOWS 95/NT

by Steve Sipe

Remote Procedure Call (RPC) programming allows client programs to call server-based functions. Steve presents a technique to simplify the use of Remote Procedure Calls in 32-bit Windows 95/NT applications.

EMBEDDED SYSTEMS

KERTESY: A REAL-TIME EVENT-DRIVEN MICROKERNEL

by Biswajit Sain and Timothy A. Gonsalves

"Kertesy" is a real-time microkernel for embedded systems designed around Analog Devices' ADSP-21xx series of digital-signal processors. The microkernel is small and fast, but nonetheless powerful.

NETWORKED SYSTEMS

DYNAMIC MEMORY ALLOCATION AND COMMUNICATIONS PROTOCOLS

by Gregory Bollella

Greg reviews memory allocators, then discusses the allocator used in typical implementations of TCP/IP. He also describes a number of allocator implementation techniques that are helpful in debugging.

PROGRAMMER'S TOOLCHEST

EXAMINING WIN32 C++ COMPILERS

by Ron van der Wal

Ron examines the leading C++ compilers for creating Win32 executables, including Borland C++, Visual C++, Symantec C++, Watcom C++, and VisualAge C++.

VISUAL BASIC 5 AND ACTIVEX CONTROLS

by Al Williams

Microsoft's Visual Basic 5 lets you create controls as easily as form-based applications. In theory, these controls can then be used with VB, web pages, C++, Delphi, or any other environment that understands ActiveX.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael analyzes what the Apple-NeXT alliance means to Steve Jobs, Apple Computer, and you.

C PROGRAMMING

by Al Stevens

When writing a data-scope program called "DScope," Al found a dearth of information on the Windows communications API. Still, after lots of digging and even more trial and error, he was able to get DScope up and running -- as a DOS application.

JAVA Q&A

by Cliff Berg

The Java Remote Method Invocation API, which Cliff describes this month, provides new host-based services and more -- all downloadable in an applet.

ALGORITHM ALLEY

by Fred Wild

Based on string "internalization" techniques used in Scheme and LISP, Istring -- the C++ class Fred presents here -- is a hashing mechanism that provides both compact storage and fast equality tests.

UNDOCUMENTED CORNER

by Robert R. Collins

Bob discloses the secrets of the Pentium state save map, shows how the AutoHALT feature works, explains the I/O Restart feature, and discusses interrupt servicing within system-management mode.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson

This month, Greg examines Steve McConnell's Rapid Development and Graphic Java: Mastering the AWT by David M. Geary and Alan L. McClellan.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1997, Dr. Dobb's Journal

DDJ April 1997 - Algorithms

FEATURES

DIFFERENTIAL EVOLUTION

by Kenneth Price and Rainer Storn

Since their inception nearly 30 years ago, genetic algorithms have evolved like the species they try to mimic. Here, our authors describe how one form of genetic algorithms -- Evolution Strategies -- are significantly faster at numerical optimization than traditional genetic algorithms.

ELLIPTIC CURVES AND CRYPTOGRAPHY

by Aleksandar Jurisic and Alfred J. Menezes

Originally pursued for purely aesthetic reasons, elliptic curves have recently been utilized in devising algorithms for factoring integers, primality proving, and public-key cryptography.

A RAPID ENTROPY-CODING ALGORITHM

by Wm. Douglas Withers

Entropy coding is an abstract problem weakly related to the type of data being compressed, while modeling of data compression depends intimately on the type of data being compressed. The entropy algorithm presented here allows rapid encoding and decoding.

A 2-D DDA ALGORITHM FOR FAST IMAGE SCALING

by Dean Clark

Graphic images are almost never exactly the right size -- they're either too small or too big. The algorithm Dean presents here is based on the Digital Differential Analyzer (DDA) technique but works on 2-D images rather then 1-D lines.

JAVA BEANS AND THE NEW EVENT MODEL

by Eric Giguère

Java Beans is a component model for building and using Java-based components. Eric examines the Java Beans specification and describes the event model that lets you glue components together.

EMBEDDED SYSTEMS

GRAPHICAL EMBEDDED REAL-TIME SYSTEMS

by Harry Beker

Harry describes how he uses VME-based distributed embedded microprocessors to read data from transparently interfaced instrumentation buses when developing data-acquisition systems for high-energy physics experiments.

NETWORKED SYSTEMS

SOFTWARE SECURITY AND THE DIRECTPLAY API

by Andrew Wilson

There have been many approaches to stopping software piracy, ranging from key disks to parallel port locks. Andrew's novel approach, however, uses the Windows 95 DirectX game SDK to implement network-based security measures.

PROGRAMMER'S TOOLCHEST

QUICKTIME AND CROSS-PLATFORM MULTIMEDIA

by Mark Carolan

Mark uses MetroWerks CodeWarrior Gold 10 development system to build a cross-platform reusable framework for preparing and presenting high-performance multimedia based on Apple's QuickTime multimedia engine.

PIPES, CHANNELS, AND PERL-WIN32

by Jean-Louis Leroy

Perl-Win32, HIP Communications' Win32 port of the Perl language, provides just the tool Jean-Louis needs to write a multifile search-and-replace extension.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Some of the recent decisions made at the top levels at Apple have been charged with high drama and empire-shaking significance. Michael takes a second look at some of these events, and speculates about what they really mean.

C PROGRAMMING

by Al Stevens

Al uses JavaScript and C to build an order-entry system for his web page.

JAVA Q&A

by Cliff Berg

Persistence may well be the most important capability of a computing environment, and Cliff shows how you can take advantage of built-in support for object persistence in the Java Developer's Kit 1.1.

ALGORITHM ALLEY

by Tim Kientzle

From XModem to TCP, most communications protocols use some form of error-detecting signature. Tim takes a look at one of the most popular schemes -- cyclic redundancy checks (CRCs).

UNDOCUMENTED CORNER

by George Shepherd and Scot Wingo

This month, George and Scot take a look at how two Component Object Model (COM) objects can set up a communication scheme whereby an object calls back to a client. They first examine how Connections work, then look at how MFC implements them.

PROGRAMMER'S BOOKSHELF

by Eugene Eric Kim

Eugene visits a pair of books that examine the history of computers -- Martin Campbell-Kelly and William Aspray's Computer: A History of the Information Machine, and Paul Freiberger and Michael Swaine's Fire in the Valley.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1997, Dr. Dobb's Journal

DDJ May 1997 - File Formats

FEATURES

DR. DOBB'S JOURNAL EXCELLENCE IN PROGRAMMING AWARDS

by Jonathan Erickson

Cryptographer Ron Rivest and PC pioneer Gary Kildall are this year's recipients of our annual award honoring achievement in the world of software development.

INSIDE WINDOWS CABINET FILES

by Sven B. Schreiber

The Windows Cabinet file format, an archive file format originally for compressed installation disks, is used in Office 95, Internet Explorer, and MSDN Library CD. Microsoft is touting the Cabinet file format as a means of reducing download times for Java class files.

DATABASE MANAGEMENT AND JAVA

by Art Sulger

In a previous article, Art presented a C++ class structure that provided a single interface to multiple file formats. In this article, Art shows you how to port the C++ code to Java.

CONVERTING WINDOWS METAFILES TO JAVA

by Carmen Delessio

Carmen presents a program that converts Microsoft Windows Metafile Format (WMF) files into Java source code. The generated Java code references classes provided with Sun's JDK.

PLUG-AND-PLAY OPROMS AND THE BIOS BOOT SPECIFICATION

by Tom Roden and Scott Townsend

Based on the PnP BIOS Specification, the BIOS Boot Specification ushers in the notion of boot priority, making multiple boot devices a reality. In examining the Boot Specification, Tom and Scott examine a PnP OPROM data structure called the "$PnP Header."

JAVASCRIPT COOKIES

by Charles B. Tichenor

The JavaScript document cookie enables browser-side persistence and the JavaScript methods Charles describes let you create web pages with long-term memory, pages that replace CGI scripts, or pages that communicate with each other.

EMBEDDED SYSTEMS

OBJECT FILE FORMATS

by Rand Gray and Deepak Mulchandani

Object files provide a concise and efficient representation for a compiled application, furnishing all the information needed to represent the state of the entire application at a point in time. Our authors examine object files in general, and explore the structure of the COFF and IEEE695 object file formats in particular.

NETWORKED SYSTEMS

WINDOWS NT PRINTER CONTROL

by Paul Trout

Paul examines Windows NT network printing mechanisms, explains how to move a print job from one printer to another, and presents a function library to perform this and other tasks.

PROGRAMMER'S TOOLCHEST

EXAMINING THE TAWK COMPILER

by James K. Lawless

Thompson Automation's TAWK compiler family is a set of compilers -- based on the AWK languages -- for UNIX, OS/2, Windows 95/NT, and Solaris. Jim finds TAWK to be a powerful programming tool, particularly when used as a scripting tool to quickly implement batch-oriented software.

EXTENDING VISUAL C++

by John Roberts

John shows you how to create a custom AppWizard, using as an example a custom AppWizard to create extension DLLs to the Microsoft Exchange e-mail client (also known as the "Windows 95 Inbox").

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

From his jabs at Java to the premature reports of TKSolver's demise, Michael digs into his mailbag.

C PROGRAMMING

by Al Stevens

Al takes a look at Borland's new C++Builder -- and likes what he sees.

JAVA Q&A

by Cliff Berg

Cliff uses Marimba's Castanet software to implement Internet Push channels

using Java.

ALGORITHM ALLEY

by Robert F. Kauffmann

Trigonometric functions can be used to create spline curves that are, in many ways, superior to the more-common cubic splines.

UNDOCUMENTED CORNER

by Robert R. Collins

Robert continues his examination of the Pentium's System Management Mode, this month discussing the caveats of SMM and details that you would never have gleaned by reading Intel's documentation.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson

Gregory reviews HAL's Legacy: 2001's Computer as Dream and Reality, edited by David G. Stork, Large-Scale C++ Software Design, by John Lakos, and The Elements of E-Mail Style, by David Angell and Brent Heslop.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1997, Dr. Dobb's Journal

DDJ June 1997 - Patterns and Software Design

FEATURES

LITERATE PROGRAMMING AND CODE REUSE

by Sverre Hendseth

"Literate programming," a concept introduced by Donald Knuth, lets you mix code and documentation in the layout of a program. Sverre implements the Singleton and State patterns to combine a macro processor with literate programming techniques.

DESIGN PATTERNS, JAVA, AND WEB DEVELOPMENT

by Martin Remy

Worker applets are nonvisual components that labor unseen behind the flashy facades of web pages. Using Java, JavaScript, and HTML, Martin presents three design patterns for incorporating worker applets into web projects.

DESIGN GUIDELINES FOR IS-A HIERARCHIES

by John A. Grosberg

When developing object-oriented designs, one of your goals should be to define a set of classes that are related hierarchically through inheritance. John focuses on the modeling approach to design. In doing so, he works with Venn diagrams and Object Models.

DESIGNING FOR TESTABILITY

by Fred Wild

Regression testing is a necessary, but tiresome, task, particularly in complex programs that have dependencies between subsystems. Fred shows how Perl scripts can automate the regression testing process.

IDLDOC: AUTOMATIC DOCUMENTATION FOR CORBA IDL

by Ernest J. Friedman-Hill and Robert A. Whiteside

idldoc reads in IDL (the OMG's "Interface Description Language") source and generates a set of HTML pages that document the interfaces described in the IDL.

SBI: THE SMALL BASIC INTERPRETER

by Steve Reichenthal and Tom Bennett

SBI implements a useful subset of Visual Basic. As such, SBI is a powerful scripting language that you and your users can instantly put to work.

EMBEDDED SYSTEMS

WATCHDOGS FOR INTERRUPT MONITORING

by Rolf V. Oestergaard

Rolf presents IntMon and WdMon, a set of verification and "problem-spotting" tools he wrote to ensure that interrupts are not missed, watchdogs are serviced, and processes don't run too long.

INTERNET PROGRAMMING

INTERNET SECURITY PROTOCOL

by Tom Markham

Tom examines the IP Security (IPSEC) protocol, a security layer that is part of the IPv6 protocol. IPSEC operates in the IP layer and secures anything using UDP or TCP.

PROGRAMMER'S TOOLCHEST

AN UNLIMITED UNDO/REDO STACK PATTERN FOR POWERBUILDER

by David Van Camp

David presents a technique for providing unlimited undo and redo capabilities to windows developed using PowerBuilder. He uses design patterns to provide a simple, standardized approach that is easily understood and highly adaptable to a variety of specific problems.

WEB EXTENSIONS AND APPLICATIONS USING FASTCGI

by Scott Dybiec and Philip Rousselle

By implementing a software layer that receives control from a web server, OpenMarket's FastCGI protocol addresses many of the shortcomings of both conventional CGI and server APIs. Our authors discuss the FastCGI protocol, describe the OpenMarket C programming library for FastCGI, and develop example applications using the OpenMarket library.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

From programming languages to free speech on the Internet, paradigm shifts do indeed happen. Michael looks at some paradigms that may (or may not) be in transition.

C PROGRAMMING

by Al Stevens

Al continues his examination of visual development environments for C++, this month focusing on PowerSoft's Optima++ 1.5. He also takes a peek at Windows CE before (or while) heading for the beach.

JAVA Q&A

by Cliff Berg

With its built-in security features, Java is among the most secure environments you can program in. This month, Cliff explains how to create a security manager for your applications.

ALGORITHM ALLEY

by John Swartz

John examines a technique for symbolic integration proposed by James Slagle over 30 years ago. In doing so, he uses CLIPS (C Language Integrated Production System), a nonprocedural language that supports system development across and among three programming paradigms -- rule-based, object-oriented, and procedural.

UNDOCUMENTED CORNER

by George Shepherd and Scot Wingo

The ActiveX Template Library (included with Visual C++ 5.0), a framework for creating COM components, takes care of things such as class object and server lifetime issues, COM identity, and implementing IDispatch.

PROGRAMMER'S BOOKSHELF

by Richard Brath and Ray Duncan

How data is visualized is the focus of two books this month. Richard Brath examines The Visualization Toolkit: An Object-Oriented Approach to 3D Graphics, by Will Schroeder, Ken Martin, and Bill Lorensen, and Ray Duncan looks at Visual Explanations, by Edward R. Tufte.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1997, Dr. Dobb's Journal

DDJ, July 1997 - Graphics Programming

FEATURES

IMPLICIT SURFACES AND REAL-TIME GRAPHICS

by Kyle Lussier

Implicit surfaces are used in molecular modeling, animation, geophysical systems, weather analysis, and the like. They're also at the heart of Silly Space, the modeling application Kyle describes here.

A MEMORY-CONSTRAINED IMAGE-PROCESSING ARCHITECTURE

by Mayur Patel

Image-processing applications are hungry for both processing time and memory. The architecture Mayur presents here puts you in the driver's seat when it comes to controlling memory consumption for high-performance image processing.

RAVEKIT: A PORTABLE GRAPHICS FRAMEWORK

by Mark Carolan

RaveKit, Mark's general-purpose, cross-platform framework, lets you create interactive 3-D environments that provide an alternative way of presenting graphical data and obtaining user input.

MOTION BLUR EFFECTS

by Tim Wittenburg

Altering the appearance of "moving" objects using blurring techniques can add realism and excitement to your graphic images. Tim shows you one way to accomplish this.

TREAPS IN JAVA

by Stefan Nilsson

Treaps, the randomized search trees devised by C.R. Aragon and R. Seidel, provide the functionality of a general-purpose sorting routine, priority queue, hash-table, stack, or standard queue. Stefan shows you how to implement treaps in Java.

EMBEDDED SYSTEMS

ATMEL'S AT89C2051 MICROCONTROLLER

by Dhananjay V. Gadre

Dhananjay presents a simple programmer for AT89C2051 that is hosted on a 8052-based circuit running a Basic interpreter. He then uses the system to build a 12-bit multichannel ADC to connect to PCs.

INTERNET PROGRAMMING

THREAD POOLS AND SERVER PERFORMANCE

by John Calcote

As John points out here, thread pools provide one way of improving server performance.

PROGRAMMER'S TOOLCHEST

SOUNDING OFF WITH THE RSX LIBRARY

by Steve Durham

Intel's Realistic Sound Experience (RSX) library was initially developed to enhance the silent 3-D world of VRML. Steve presents WaveSpinner, an RSX-based tool that reads a script, animates and spatializes all the sounds using RSX, and writes the result to a .WAV file.

Tectate and Interactive 3-D

by Peter D. Kochevar

By providing a set of tools for describing animated 3-D scenes and their interaction with end users, the Tecate system enables the description of interactive, animated 3-D scenes, and interfaces to existing applications and data sources such as the World Wide Web and remote collaboration.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael returns to the topics of Java bashing, Java books, and JavaBeans.

C PROGRAMMING

by Al Stevens

In rethinking the relationship between C and C++, Al wonders if it is time to put the proverbial cart before the horse.

JAVA Q&A

by Clif Berg

Cliff uses the JDK 1.1 multilanguage feature to create a multilingual currency calculator.

ALGORITHM ALLEY

by Will Schroeder and Tom Citriniti

Polygon decimation algorithms reduce the number of polygons in a mesh while maintaining a good approximation to the original data, leading to faster, more realistic 3-D graphics. Will and Tom show how these algorithms are used and create a decimated VRML file.

UNDOCUMENTED CORNER

by Robert R. Collins

Robert discusses the basics of in-circuit emulation, describing how it has become his primary software debugging tool.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson

This month, Greg examines Jonathan Rosenberg's How Debuggers Work, Mark Woodman's Programming Language Choice, and The Media Equation, by Byron Reeves and Clifford Nass.

Forum

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

SWAINE'S FLAMES

by Michael Swaine

OF INTEREST

by Eugene Eric Kim

Copyright © 1997, Dr. Dobb's Journal

DDJ, August 1997 - C/C++ Programming

FEATURES

THE SGI STANDARD TEMPLATE LIBRARY

by Matthew H. Austern

C++ programmers were introduced to generic programming in 1994, when Hewlett-Packard released the Standard Template Library (STL), which was subsequently adopted as part of the C++ Standard Library. Late last year, Silicon Graphics released a new version of the STL. Matt, along with Alexander Stepanov and Hans Boehm, was one of its coauthors.

THE EMPTY MEMBER C++ OPTIMIZATION

by Nathan Myers

The STL is flexible, but does it use too much memory? Nathan shows how the STL-and you-can use empty subobjects without bloating your data requirements.

C++ INTERFACES FOR C-LANGUAGE LIBRARIES

by Larry E. Baker, Jr.

C++ programmers must sometimes use legacy C support libraries, even though C and C++ styles don't always mix. Larry presents a C++ template wrapper that takes a C
hash-table library into the world of C++.

DYNAMIC DESIGN PATTERNS IN OBJECTIVE-C

by William Grosso

Language choice can affect the design patterns you use and how your applications are structured. William examines patterns sometimes used with Objective-C, but not commonly used (or used differently) with C++.

THE JAVA NATIVE METHOD INTERFACE AND WINDOWS

by Andrew Wilson

The JDK 1.1 implements a native calling convention-the Java Native Method Interface (JNI)-that makes it possible to do more than just convert types between Java and C++.

INSIDE THE PENTIUM II MATH BUG

by Robert R. Collins

Two days before Intel's biggest processor announcement in years, a math bug in the Pentium Pro and Pentium II came to light. Robert takes you inside the Dan-0411 "flag erratum," and tells how the story unfolded.

EMBEDDED SYSTEMS

RETARGETABLE CONCURRENT SMALL C

by Andy Yuen

Andy extends Concurrent Small C (presented last year at this time) by building a version called "Retargetable CSC" (RCSC) that is retargetable, with this port targeting the 8051 microcontroller.

INTERNET PROGRAMMING

WRITING ACTIVEX ISAPI EXTENSIONS

by Al Williams

The traditional approach to creating active web pages is to write CGI programs that accept input (from a form or URL) and send output to web browsers. If you use Microsoft's Internet Information Server (IIS), you can use an ISAPI DLL. Al mixes C++ and Visual Basic to create an ISAPI module that lets you write ActiveX ISAPI extensions.

PROGRAMMER'S TOOLCHEST

ADVANCED OBJECT-ORIENTED FEATURES FOR C/C++

by Blake McBride

Dynace, the development tool Blake presents here, adds to C or C++ object-oriented capabilities previously available only in languages such as Smalltalk and CLOS-but without the overhead normally associated with those environments.

CONCURRENT DATABASE COMMANDS AND C++

by Harold R. Kasperink and John C. Dekker

Mapping design problems to programming problems leads to software solutions that are easy to extend and reuse. Our authors explain how they resolved multithreaded porting problems using design patterns. The database they use is Oracle and the database transactions are implemented using Oracle ProC as an embedded database command language.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Irony is music to Michael's ears in this month's column.

C PROGRAMMING

by Al Stevens

Al reports on his sojourn to Jim McCarthy's TeamworX BootCamp, a one-week workshop about "how to deliver great software on time every time."

JAVA Q&A

by Clif Berg

Signed Java applets provide a means of verifying the authenticity of a program. Cliff describes how to create them using JAR Files.

ALGORITHM ALLEY

by Jonathan Pincus and Jerry Schwarz

Sometimes, traditional sorting is overkill-you only need to rearrange things to satisfy a few conditions. Our authors show how topological sorting does only as much as you need.

UNDOCUMENTED CORNER

by George Shepherd and Scot Wingo

George and Scot continue their examination of Microsoft's Active Template Library, this month looking at the heart of ATL, including its support for multithreading and its various implementations of IUnknown.

PROGRAMMER'S BOOKSHELF

by Michael E. Fitzpatrick and Laurence Vanhelsuwe'

Michael Fitzpatrick examines Dynamics of Software Development, by Jim McCarthy, while Laurence Vanhelsuwe' looks at The Unicode Standard, Version 2.0.

Forum

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1997, Dr. Dobb's Journal

DDJ, September 1997 - Designing User Interfaces

FEATURES

EMACSPEAK

by T.V. Raman

The Emacspeak speech feedback system is unique in that it enables the separation of the computational component of an application from its user interface.

CONVERTING MFC TOOLBARS INTO TASKBARS

by Mark Janczura

One use for a Windows 95 taskbar is for displaying information to users. Mark shows you how to undock a taskbar from the shell, giving users the option of docking the taskbar to the application window.

CUSTOMIZING COMMON CONTROLS

by Jason Clark

Common controls are standard Windows 95/NT GUI components that save you time and users trouble. As an example, Jason describes how you can customize a tree-view control.

A TEXT UI FOR THE JAVA AWT

by Stuart D. Gathman

Stuart presents a text user-interface toolkit for the Java AWT that allows ASCII terminals to run Java applications on UNIX servers. In addition, the toolkit enables a multiuser Virtual Machine.

TAGGED DATA STORAGE

by Jeremy Vineyard

Tagged data storage improves the efficiency and robustness of your data-storage architecture and decreases the time you spend writing code to store and restore data.

JAVA DEADLOCK

by Allan Vermeulen

One of the primary motivations for using Java-and one of its biggest advantages to developers-is safety. Still, Java does nothing to protect you from deadlock-a nasty problem where a program simply stops executing because all threads are waiting for a resource that will never become available. Allan examines Java deadlock and shows how it can be prevented.

EMBEDDED SYSTEMS

FIREWIRE: THE IEEE 1394 SERIAL BUS

by Thomas Tewell

FireWire, also known as IEEE 1394, may pave the way for a true convergence of consumer electronics and computers. Thomas presents a fully functional Win32 console application that takes a snapshot from the CCM-DS250 digital camera, converts it from a YUV format to a 24-bit device independent bitmap (DIB), and writes the DIB to a file.

INTERNET PROGRAMMING

SERVER-SIDE SCRIPTING IN VISUAL BASIC

by Al Williams

Al shows how you can transform a boring web page into an interactive powerhouse using Visual Basic, IIS 3.0, VBScript, and server-side ActiveX components.

PROGRAMMER'S TOOLCHEST

STEREOSCOPIC IMAGING

by Andy Ramm

Stereoscopic imaging gives you the ability to deliver a user interface that provides a natural 3-D view of an object or scene, dramatically increasing technical proficiency and the ability to interpret multidimensional data.

LEVERAGING ORACLE POWER OBJECTS 2.1

by Douglas C. McArthur

Douglas describes how Oracle's visual development tool Power Objects 2.1 was used to develop MDLSCREEN, an Oracle-based client/server data-management system for automated drug discovery and high-throughput screening.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Will Apple's bridge to the future be a bridge over troubled waters? Based on the goings-on at this year's World Wide Developer's Conference, Michael looks at what the future might hold for Apple.

C PROGRAMMING

by Al Stevens

Al's scratching his head over what's going on with the proposed C++ standardization.

JAVA Q&A

by Clif Berg

JavaBeans, Sun's answer to component software, are reusable components that can be visually manipulated. Cliff shows you how to build a Bean.

ALGORITHM ALLEY

by Bob Jenkins

What makes one hash function better than another? Bob knows the answer, and he has used his knowledge to design a new hash function that may be better than what you're using now.

UNDOCUMENTED CORNER

by Robert R. Collins

Robert continues his discussion of in-circuit emulators. This month he describes how microprocessor design has evolved with in-circuit emulation in mind, and the changes that occurred within the microprocessor itself in the process.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson

Gregory examines a bevy of books: Understanding ActiveX and OLE, Garbage Collection: Algorithms for Automatic Dynamic Memory Management, Modern Compiler Implementation in Java, Growing Artificial Societies, and Java Design: Building Better Apps and Applets.

Forum

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1997, Dr. Dobb's Journal

DDJ,
October 1997 - Communication & Networking

FEATURES

A CONVERSATION WITH RON RIVEST

by Jack Woehr

Computer scientist Ron Rivest takes time out to chat with Jack Woehr about computer security, digital certificates, cryptography, and a variety of other subjects.

INTERNET MULTICASTING

by Bob Quinn

Multicasting lets you deliver content from a single sender to multiple receivers. Bob uses the multicast-enabled WinSock API to present TimeCast, a one-to-many application that multicasts the time of day to multiple clients.

THE SSH TRANSPORT LAYER PROTOCOL

by Camillo Särs

The SSH protocol provides secure Internet connections that are authenticated and encrypted using military-grade encryption. Camillo examines how the transport layer protocol enables secure remote connections.

JAVA AND INTER-APPLET COMMUNICATION

by Andrew Meckler

The base Java libraries partially support inter-applet communication. However, if there are multiple HTML pages displayed in the browser at one time, the applets in different contexts cannot communicate with one another. Andrew presents a way around this problem.

THE BLOCK CIPHER SQUARE ALGORITHM

by Joan Daemen, Lars R. Knudsen, Vincent Rijmen

Square is a new fast block cipher that encrypts data in blocks of 128 bits, using a 128-bit key. Square's structure has been carefully chosen to allow very efficient implementations on a wide range of processors.

WIN32 NETWARE CORE PROTOCOL REVISITED

by Sven B. Schreiber

Microsoft's NetWare clients for Windows 95 and NT are a well-integrated part of the operating system. However, their APIs are rudimentary, making it difficult for NetWare client software developers to write nontrivial applications. Luckily, both operating systems offer a useful-albeit undocumented-NCP interface, allowing client/server communication through the backdoor. Sven explores those undocumented interfaces.EMBEDDED SYSTEMS

EMBEDDED SYSTEMS

THE ENHANCED PARALLEL PRINTER PORT

by Dhananjay V. Gadre and Larry A. Stein

The Enhanced Parallel Printer Port protocol was developed to provide a high-performance parallel-port link compatible with existing parallel-port peripherals and interfaces. Our authors examine this specification, and present routines for implementing high-speed digital I/O using EPP BIOS calls.

INTERNET PROGRAMMING

BUILDING AND RUNNING ONLINE AUCTIONS

by Brent Gorda and Gregory V. Wilson

Brent and Greg describe a web-site toolkit called "Webalog" which is being used to construct on-line auctions and similar web-based applications.

PROGRAMMER'S TOOLCHEST

SPIN MODEL CHECKING

by Gerard J. Holzmann

Spin, developed by Bell Labs' formal methods and verification group, is a freely-available software package that supports the formal verification of distributed systems. Gerard explains how Spin works, and what types of errors it can help you find.

LUCA: REUSABLE COMMUNICATION CODE

by Bennett Griffin

Bennett uses the Langner Universal Communications API to build a multiprotocol terminal emulator that works across various media.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Macs, Flaks, and Illiacs. Michael continues to follow the goings-on at Apple.

C PROGRAMMING

by Al Stevens

Al presents a Windows 95 program that lets you create the index to a book or other document quickly and easily. He then has a thing or to say about Visual C++ 5.0's new help system.

JAVA Q&A

by Clif Berg

Java servlets represent a new model for developing server-based applications. Cliff shows you how to write them.

ALGORITHM ALLEY

by Lynn Monson

Lynn shows how to use the ID3 and C4.5 classification algorithms with text. The result is a tool that can learn how to classify text based on a few examples.

UNDOCUMENTED CORNER

by George Shepherd and Scot Wingo

Imagine their surprise when George and Scot discovered that Visual C++ for Windows CE, a VC++ 5.0 add-in, includes its own unique version of MFC-a small-footprint system called "Mini MFC."

PROGRAMMER'S BOOKSHELF

by Warren Young

Warren examines a pair of Java programming books-Core Java, Second Edition, by Gary Cornell and Cay Horstmann, and Hacking Java, by Mark Wutka, et al.

Forum

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1997, Dr. Dobb's Journal

DDJ,
November 1997 - Numeric Programming

FEATURES

A CONVERSATION WITH WILLIAM KAHAN

by Jack Woehr

Noted mathematician and computer scientist William Kahan has played a central role in everything from the design of the 8087 math coprocessor to defining the ANSI/IEEE Standard for binary floating-point arithmetic. He takes time out of his schedule to talk with us about the current state of numeric computing.

SCIENTIFIC COMPUTING: C++ VERSUS FORTRAN

by Todd Veldhuizen

In the past, C++ programs were noticeably slower than their Fortran counterparts. But the performance of C++ programs has improved, mainly because of better optimizing C++ compilers and libraries such as Todd's Blitz++, a C++ class library designed for scientific computing.

EXTENDED-PRECISION NATIVE INTEGERS FOR JAVA

by Lou Grinzo

To address performance problems in the JDK 1.1 BigInteger class, Lou implemented mInts-his own "monster" integer library. The main difference between Lou's mInts and BigInteger is that BigInteger offers arbitrary precision, while Lou's library provides signed integers fixed at 256 bits.

CONVOLUTIONAL ERROR-CONTROL CODES

by Hugo Lyppens

Convolutional codes are error-correction codes that can encode an unlimited number of message symbols into one codeword and support "soft-decision" decoding. Hugo presents a C++ template class that implements both the encoder and decoder.

HIGH-SPEED FINITE-STATE MACHINES

by Brenton Hoff

Many programming problems can be efficiently handled with a custom virtual machine-and many virtual machines can be implemented as finite-state machines. Brenton presents a technique for implementing a virtual machine, using text-processing as an example application.

EMBEDDED SYSTEMS

OPTIMIZING MICROCONTROLLER PERFORMANCE

by James Flynn

Software practitioners often face the challenge of enhancing software performance. James describes one such situation he encountered when developing control software for a Mitsubishi M37735-based cellular phone.

INTERNET PROGRAMMING

TEMPLATE-DRIVEN WEB PAGES

by Jay Johansen

Jay presents "dynadd," a general-purpose, template-driven CGI application that automatically updates web sites.

PROGRAMMER'S TOOLCHEST

MODELING WITH MATLAB

by Mark Weaver

Designing and implementing complicated systems is a complex process. Mark describes how he uses MatLab, a mathematical tool from MathWorks, as a system-level programming tool for modeling communications systems.

DIFFERENCE EQUATIONS AND CHAOS IN MATHEMATICA

by Robert Knapp and Mark Sofroniou

Mathematica provides an environment for technical computing that includes tools for symbolic computation, numerical computation, and graphics. Our authors set up programs and use links to external programs to demonstrate Mathematica's dynamic properties.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Copy protection doesn't help at all in Michael's column this month.

C PROGRAMMING

by Al Stevens

Al uses the Windows 95 Wizard dialog box and WinHelp database to build an automated tech-support help desk. He also takes a look the CodeWarrior Professional Release 1 development system.

JAVA Q&A

by Clif Berg

A longstanding problem with Java is that printing support has not been available. JDK 1.1 makes a first stab at solving this problem, and Cliff shows you how to make the most out the printing facilities it provides.

ALGORITHM ALLEY

by Tim Kientzle

In this month's column, Tim goes inside the IMA ADPCM audio-compression format and examines how it is implemented by Microsoft and Apple.

UNDOCUMENTED CORNER

by Robert R. Collins

Robert continues his examination of in-circuit emulators and the Pentium by looking at the Pentium's ICE Mode.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson

This month on the bookshelf, you'll find Greg's reports on Object-Oriented Software Testing, by Shel Siegel, UML and C++, by Richard C. Lee and William M. Tepfenhart, Software Metrics, by Norman E. Fenton and Shari Lawrence Pfleeger, Programming Python, by Mark Lutz, and Computing Tomorrow: Future Research Directions in Computer Science, edited by Ian Wand and Robin Milner (eds.).

Forum

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1997, Dr. Dobb's Journal

DDJ,
December 1997 - Object Oriented Programming

FEATURES

OBJECT MODELS AND JAVA

by Jean-Marie Chauvet and Marc Lerman

Although distributed objects are rapidly becoming the foundation for many applications, differences between object models continue to be a problem. Our authors show how you can use Java to glue together Microsoft's ActiveX controls and the OMG's CORBA objects.

IMPLEMENTING ABSTRACT FACTORY AS AN STL CONTAINER

by Jason Shankel

The Abstract Factory design pattern provides an abstract interface for object creation. This allows applications to select object implementation at run time. Jason implements the Abstract Factory pattern using C++ and the Standard Template Library.

C++ AND GARBAGE COLLECTION

by Mike Spertus

Automatic garbage collection is one reason languages such as Java and Smalltalk are so appealing. C++ programmers can also enjoy the benefits of efficient memory management, with tools such as the Great Circle garbage collector.

AUTOMATED METRICS AND OBJECT-ORIENTED DEVELOPMENT

by Jagdish Bansiya and Carl Davis

QMOOD++, the automated tool presented here, supports a suite of over 30 object-oriented metrics. In addition to making it easy to collect metric data, QMOOD++ has a repository in which metric data can be stored and retrieved for later comparison.

JAVA AND THE ZIP FILE FORMAT

by Mark R. Nelson

By compressing data and reducing the number of download transactions, Sun's java.util.zip package speeds the loading of applet components across the Internet. Data-compression guru Mark Nelson examines this package.

WRITING PORTABLE WIN32 SCSI APPLICATIONS

by Thomas Tewell

The native SCSI APIs for Windows 95 and Windows NT are very different from one another, making portable Win32 SCSI programming difficult. ASPIEMU, the WinASPI
32-bit DLL emulator module presented here, can make the job easier.

IMPROVE YOUR PROGRAMMING WITH ASSERTS

by Bruce D. Rosenblum

Asserts help you track and fix bugs faster, provided you understand how to use them effectively. Bruce offers ten easy rules for creating more reliable software with asserts.

EMBEDDED SYSTEMS

REAL-TIME OBJECT-ORIENTED MODELING

by Kevin W. Smith

ObjecTime is a CASE tool that supplies a graphical modeling environment for the object-oriented design and simulation of event-driven real-time systems. Using a formal object-oriented design methodology, graphical models are entered into the ObjecTime toolset, and efficient real-time C++ source code is generated.

INTERNET PROGRAMMING

BUILDING A SMART ONLINE VIDEO APPLICATION

by Robin Rowe

Many of today's applications involve Internet protocols, MPEG-1 video, JPEG images, ActiveX components, Netscape plug-ins, and other hard-to-master programming paradigms. Robin describes an application that integrates these disparate technologies.

PROGRAMMER'S TOOLCHEST

GNAT: THE GNU NEW YORK UNIVERSITY ADA TRANSLATOR

by Gavin Smyth

Gavin examines the GNU New York University Ada Translator, a high-quality, low-cost Ada 95 (and Ada 83) compiler that supports DOS, Windows, and various flavors of UNIX.

CODESTORE AND INCREMENTAL C++

by Lee R. Nackman

IBM's CodeStore technology promises fast builds by taking the source code, the previous build's target files, and any other state the system chooses to save to produce the desired target files. For "incremental" builds such as these, build time is proportional to the impact of the source code changed since the last build.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

In this month's column, Michael takes a look back at the events of 1997 and challenges you with an End of Year Trivia Quiz.

C PROGRAMMING

by Al Stevens

Al cleans out his 1997 mailbox in this month's column and provides a forum for your comments on everything from constitutional law and the C++ Standard to Optima++ and the Florida Keys.

JAVA Q&A

by Clif Berg

Cliff demonstrates Java's dynamic class-loading features by creating a remote object browser that uses RMI.

ALGORITHM ALLEY

by Rod Stephens

Decision trees let you model a variety of complicated problems in a simple way. Rod shares some generic techniques that can accelerate a range of complex decision problems.

UNDOCUMENTED CORNER

by George Shepherd and Scot Wingo

Microsoft's Active Template Library provides template implementations of many of the most common COM idioms. However, to work with the more advanced COMisms in ATL, you'll want to understand what ATL is doing behind the façade of wizardry.

PROGRAMMER'S BOOKSHELF

by Robert Bernecky and Michael Fitzpatrick

This month, Robert examines Rick Booth's Inner Loops: A Sourcebook for Fast 32-bit Software Development, while Michael looks at Jeffrey Friedl's Mastering Regular Expressions.

Forum

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1997, Dr. Dobb's Journal

Dr. Dobb's Sourcebook January/February 1997 -- Distributed Objects

FEATURES

CorbaWeb: A Navigator for CORBA Objects7

by Philippe Merle, Christophe Gransart, and Jean-Marc Geib

The CorbaWeb environment -- a generic gateway between HTTP servers and CORBA objects -- makes it possible for World Wide Web clients to navigate through CORBA object links using dynamically generated URLs for each object.

Hector: Distributed Objectsin Python13

by David Arnold, Andy Bond, and Martin Chilvers

Hector is a framework that sits above other distributed environments, providing open negotiation and interoperability of communication protocols -- and it is implemented almost entirely in Python.

W3Objects: Distributed Objects and the Web19

by David Ingham, Mark Little, Steve Caughey, and Santosh Shrivastava

W3Objects, an add-on library to the Arjuna object-oriented programming system, provides tools for the construction of fault-tolerant distributed applications. The W3Object model provides a flexible and extensible way of building web applications with web resources encapsulated as objects with well-defined interfaces.

The Phantom Programming Language27

by Antony Courtney

Phantom is an interpreted language designed to address the problems that arise when developing large-scale, interactive, distributed applications such as conferencing systems, multiplayer games, or collaborative work tools.

Intergalactic Distributed Objects35

by Ron I. Resnick

From all appearances, the World Wide Web and the world of distributed objects are merging. Ron examines this phenomenon and suggests that the best capabilities of both domains can be used to enhance each other.

The InterLanguage Unification System41

by Tom Genereaux

The Interlanguage Unification System from Xerox PARC provides a powerful programming model that supports any language for which there is a binding. Current bindings include C, C++, Lisp, and Python.

COLUMNS

Ramblings in Real Time45

by Michael Abrash

Porting Quake to Rendition's Verite 3-D accelerator chip causes Michael to revisit the surface-caching technique that produces high-quality lighting without lots of polygons.

20/2050

by Al Williams

Al shows how you can free Windows programs from their square (and rectangular) confines by creating irregular-shaped windows that are simple and can be implemented in most languages. He also takes a quick look at Microsoft's Visual J++ Java development environment.

DTACK Revisited55

by Hal W. Hardenbergh

With a little help from his friends, Hal previews Intel's upcoming 64-bit CPU architecture, code-named "Merced."

Software and the Law59

by Marc E. Brown

Submarine patents can surface years after the development process is over, and more often than not, lead to nasty legal battles.

The Software Engineer

by Allen Holub

Allen wraps up his examination of ActiveX versus Java, at least when it comes to using them on web pages.

Editorial4

by Tim Kientzle


Dr. Dobb's Sourcebook March/April 1997 -- Database Development

FEATURES

Developing JDBC Applications

by Andrew Wilson

Client-side applet browsing of JDBC applets can be a problem -- unless you use the client/server development techniques Andy shares here.

Tokenized Databases

by Joseph M. Newcomer

Joe presents a database programming technique that allows conventional fixed-width-field representation of records, while still providing the advantages of variable-width fields and data compression.

SRDL: A Small Relational Database Language

by Sergei Savchenko

If you are familiar with SQL, then the small relational database language (SRDL) Sergei presents here will seem like an old friend. SRDL is designed to provide your applications with flexibility in dealing with database problems.

Optimizing Crystal Reports

by Richard Campbell

By preprocessing complex data, you can overcome the fundamental weakness of Crystal's "one-query" approach to report creation. Richard shows you how.

Using Locators to Manipulate Large Objects

by Gary Bist

By creating new sets of data types called "large objects," today's relational databases have adapted to the multimedia age. Gary describes how you can make efficient use of data types that support sound, video, and text.

Designing BitBox

by Lou Grinzo

BitBox is a database tool Lou designed to handle multiple database access, cursor manipulation and reference via handles, direct support for importing dbf files, callback-based record filtering, and more.

COLUMNS

Ramblings in Real Time

by Michael Abrash

Like it or not, Win32 looks to be the future of personal computers, and DirectX the future of personal-computer games. Michael investigates how you can write games that work well with both.

20/20

by Al Williams

Al examines Optima++, PowerSoft's highly graphical C++ visual-development environment.

DTACK Revisited

by Hal W. Hardenbergh

What do fine Bordeaux wines, rotten bananas, certified virgins, and Hal's column have to do with each other? Quite a lot, actually.

Software and the Law

by Marc E. Brown

Every organization needs is a comprehensive program for managing and protecting intellectual property. Marc lays out the groundwork for just such a program.

Web Database Developer

by William Robert Stanek

Microsoft's FrontPage 97 is a web publishing and development tool suite that features just about everything you need to create and manage web sites and intranets -- including a tool called the Internet Database Connector.

Database Briefs

Editorial 4

by Tim Kientzle


Dr. Dobb's Sourcebook May/June 1997 -- Visual Tools

FEATURES

Visual Envy

by Al Williams

Al shows you how to build a complete database program -- without writing a single line of code -- using Borland's recently released C++Builder.

Web-Database Connectivity

by Z. Peter Lazar

Developing sophisticated web applications that interact with databases is a complex task. Peter examines a bevy of toolsets that make this task easier, including Bluestone's Sapphire/Web 2.1, NeXT WebObjects 3.0, Netscape LiveWire 1.0, and Allaire Cold Fusion 2.0.

Asynchronous Communication and Visual FoxPro

by Bob Howard

Bob demonstrates how you can use Visual FoxPro 5 to connect to a remote PC, establish a network connection, map its hard drive, and transfer files from one PC to another utilizing familiar FoxPro functions such as GetFile(), COPY FILE, and the like.

DataBlade Technology for Web Development

by Chris Trueman

DataBlade modules extend the general-purpose capabilities of the Informix server. To illustrate how you can use the Informix Universal Server and DataBlades, Chris develops a document search engine that can be used on any Internet/intranet where documents are shared.

Visual Tools for DB2

by Gary Bist

When performance is a concern and you're building DB2 databases, the Performance Monitor and Visual Explain -- a pair of visual performance evaluation tools that come with IBM's DB2 -- are the tools you need.

A Visual User Interface Manager

by Saurabh Dixit

When managing visual objects becomes a chore, you need a tool like the "Visual User Interface Manager" Saurabh presents here.

COLUMNS

Ramblings in Real Time

by Michael Abrash

In his farewell column (at least for the time being), Michael explores the potential for variation in hardware-based 3-D games.

20/20

by Al Williams

This month, Al explains how to reuse existing ActiveX components to make new ActiveX components with Visual Basic 5.

DTACK Revisited

by Hal W. Hardenbergh

In the spirit of "history repeats itself," Hal examines the early 1980's Futurebus specification, and describes how it's still alive and kicking today.

Database Developer

by Ken North

In his inaugural column, Ken discusses ODBC, JDBC, and the database programmer's quest for a black box.

Web Database Developer

by William Robert Stanek

In the first of a two-part column, William uses Netscape's LiveWire to build a web-based database-management application.

Editorial

by Tim Kientzle


Dr. Dobb's Sourcebook July/August 1997 -- Database Engines

FEATURES

Java Native Methods and Legacy Databases

by Yoshiki Sakai, Mark A. Schmidt, and Marco Balini

Native-method libraries extend Java into new areas of support not yet developed in pure Java. In this article, our authors use a native-method library with Java to access the FairCom database engine.

Using Velocis Extension Modules

by Walter Carlisle

When he was worried about database performance, Walter turned to Raima's Velocis Extension Module, which let him define custom APIs for interfacing to a database. Since the code in the Extension Module runs within the Velocis server process and has direct access to the database, he could move large blocks of records to and from the database in a single call.

Titanium and the NTC Ship Manager Application

by Evan Michaelides

NTC Ship Manager software, which Evan helped develop, is used by ship owners and managers to administer operations, improve communications, strengthen controls, and cut costs. And at the heart of the highly database-intensive transaction-processing application is MDBS's Titanium database engine.

Portable Custom Time Structures

by Donald Bryson

In developing the TimeClock time and attendance application, Don found that the "standard" time functions weren't so standard. His replacements were both portable and better suited to his needs.

In-Memory Tables for Delphi

by Alexandre M. Gimenez

In-Memory Tables are regions in memory that behave much like ordinary database tables. Alexandre presents a Delphi component to create a bridge for Delphi and Borland Database Engine functions that access in-memory tables.

The VSData Database Engine

by Michiel de Bruijn

VideoSoft's VSData database engine is truly lightweight -- the entire engine is implemented as a single ActiveX control that doesn't rely on any proprietary support DLLs. Michiel uses the engine and Visual Basic to build a catalog application for his collection of MIDI files.

COLUMNS

20/20

by Al Williams

Al creates a compressed database control that uses Visual Basic for ActiveX and database management, and a C++ DLL for data compression.

DTACK Revisited

by Hal W. Hardenbergh

If Intel is hitting a performance wall with its new Pentium designs, then competitors might be able to catch up. Hal examines what this means for users, programmers, and CPU fabricators.

The Software Engineer

by Allen Holub

Allen reviews some recommended reading.

Software and the Law

by Marc E. Brown

Step-by-step, Marc takes you through the process of copyrighting software.

Database Developer

by Ken North

Microsoft developed OLE DB to be a component-level data-access API that cooperates with transactions and other enterprise APIs built on the Component Object Model.

Web Database Developer

by William Robert Stanek

In the second installment of this two-part column examining Netscape's LiveWire web-based database management software, William focuses on the dynamic query engine.

Editorial

by Tim Kientzle


Dr. Dobb's Sourcebook September/October 1997 -- Object Databases

FEATURES

ODMG 2.0: An Overview

by R.G.G. Cattell and Douglas K. Barry

The Object Database Management Group's primary goal is to promote standards for writing portable applications. Release 2.0 of the ODMG standard differs from Release 1.2 in a number of ways, including Java language bindings. In addition, Douglas provides details about the upcoming "Online Database Derby", which will let you see database management software in action in a real-life, multiuser, Internet environment.

Fault Tolerance with Object Databases

by Andrew E. Wade

As database systems become more distributed, they offer the possibility of dramatically reducing the frequency of failures. Andrew discusses the facilities ODBMSs have to do this, what new facilities they're adding, and how these affect you.

Authorization Models for Object-Oriented Databases

by Frank Buddrus

To protect data, it is critical that all databases support authorization. Frank presents a flexible approach for providing customized authorization to object-oriented databases.

ODBMS Solutions

by Chris Aakre

Chris shows how his company used an ODBMS to build an application designed to aid customer-support analysts capture information and find solutions.

Relational C++ Objects

by Eric Kass

Eric presents a database system that builds on C++ by adding a set of object classes that provide an object-oriented modeling environment. This system overcomes the inherent problem of mapping a hierarchical object schema to flat storage.

Dealing with Java Persistence

by Johnny Martin

Direct Express for Java is a tool that gives

Java developers access to an ODBMS's C++ bindings

without having to write C++ code.

COLUMNS

20/20

by Al Williams

To test drive Microsoft's Visual J++ Java development environment, Al develops a calendar applet that you can place on a web page.

DTACK Revisited

by Hal W. Hardenbergh

There's more to 3D video than meets the eye. Hal examines the goings-on in the 3D video market, and speculates on where that market is going.

Database Developer

by Ken North

As next-generation database architectures evolve, vendors continue their debate over where to install logic and which data types belong in what server. Ken examines the issues, and shows that database developers have more options than ever for deploying discrete logic in the right place.

Web Database Developer

by William Robert Stanek

In the early days of the Web, developers created their own web-to-database solutions using CGI. William takes a look at how CGI works and how you can pass data to and from CGI scripts.

Software and the Law

by Marc E. Brown

So you want to hire your competitor's top programmers? Marc examines the pitfalls in doing so.


DDJ, Spring 1997 - Special Report on Software Careers

FEATURES

Not Your Grandfather's Computer Industry

by Al Williams

Sometimes you need a scorecard just to know who the key players are. From tools to platforms, Al provides an overview of the software-development industry.

Strategies and Tactics for Getting a Job

by Ann Cary

Ann shares some successful job-search tips and techniques. Eugene Kim adds an interview with Susan Stoltman-Decroix, who tells what Microsoft looks for in the hiring process.

The Real World of Software Careers

by Jim Schad

Career trends in the computer industry come in all shapes and sizes. Jim contrasts the "official" U.S. Bureau of Labor Statistics figures with the word on the street.

Extending Java Streams to Support Bit Streams

by Laurence Vanhelsuwé

Laurence describes how you can subclass stream classes by designing and implementing I/O stream classes that support bit streams rather than byte streams.

How Perl Saved the Human Genome Project

by Lincoln Stein

Researchers developed a simple Perl-based data exchange format to manage storing the enormous amounts of data needed to see MIT's human genome project to its conclusion.

A C++ Class for Editing Large Files

by Vincent Van Den Berghe

The C++ class Vincent presents here was specifically designed to meet the large file requirements of CD-ROMs.

A Portable Multithreaded Web Server

by Pieter Hintjens and Pascal Antonnaux

The XITAMI web server, which Pieter and Pascal designed, is a portable, multithreaded server written in C—and it's freely available!

A Tunable Fuzzy Logic Engine

by Richard Sevenich and Paul Leathers

Our authors describe how enhancements were added to an existing fuzzy logic engine as part of the Eastern Washington University computer science curriculum.

COLUMNS

Gary Kildall and Collegial Entrepreneurship

by Michael Swaine

Digital Research, the company that gave personal computers their first operating system, was the brainchild of Gary Kildall, a perpetual academic and born teacher.

Keys to the Kingdom

by Al Williams

Al presents a 32-bit Delphi program that implements a simple keyboard macro. Almost all of the functionality of the program is encapsulated in a reusable unit that practically duplicates the Visual Basic SendKeys function.

Quake's 3-D Engine: The Big Picture

by Michael Abrash

Designing and developing Quake's 3-D multiplayer game engine was not a job for the faint of heart. Michael describes the engine from the inside out.

Passing the C++ Test

by Al Stevens

If you're looking for a job that requires C++ programming skills, here's a list of questions you'll likely be asked—and the answers you should be able to provide.

Editorial

by Eugene Eric Kim


DDJ, Software Careers Fall 1997

FEATURES

Making Your Move: Programming as a Career

by Eugene Eric Kim

Demand for software developers has rarely-if ever-been greater. Dr. Dobb's Journal's technical editor examines strategies to help you find the job you want.

Gatecrashing for a Job

by Brian D. Krueger

One of the hardest parts of latching onto the job you want is getting inside hiring companies when you have no internal leads or contacts. Brian shares secrets on how to accomplish this.

Weighing Job Offers

by Roger King

When your skills are in demand, which job should you take? Roger presents some of the questions you need to ask yourself-and prospective employers.

Distance Learning for Professional Programmers

by Joanna C. Dunlap and Ellen Waterman

Distance learning is one of the best ways to keep up with emerging technologies. Joanna and Ellen examine the options, while James Tomayko discusses programs at Carnegie Mellon University.

Java in the Classroom

by Craig Graci, Doug Lea, and Rameen Mohammadi

For the past two years, the computer science department of the State University of New York at Oswego has been using Java in its core computer-science courses.

Wanted: Senior Java Programmers

by Lefteris Kalamaras

Hiring qualified Java programmers is one of Lefteris's main responsibilities and he shares with you what he looks for during the interview process.

Java RMI in Practice

by Martin Remy

Java 1.1's Remote Method Invocation (RMI) facilities make it possible for you to design solutions that are straightforward to build and easy to maintain.

The F Language

by Walt Brainerd, David Epstein, and Dick Hendrickson

F retains the modern features of Fortran, but discards facilities which are difficult to teach, use, and debug.

C++ in the Real World

by Nathan Myers

C++ is an essential tool for software developers-not because it's the best possible language, but because it's a single, portable language.

PDL: The Perl Data Language

by Karl Glazebrook and Frossie Economou

The Perl Data Language is a Perl extension for numerical manipulation that provides the convenience of Perl with the speed of compiled C.

COLUMNS

Phoenix in Cupertino

by Michael Swaine

Companies come and go-and so do the people who work in them. Michael looks back at organizations ranging from Apple to NeXT to Taligent to IBM.

The Top Ten: Strategies for Surviving the Shifts

by Al Stevens

Al shares his Top Ten list for how to stay in demand in the shifting sands of technology and employment.

Arrays of a Different Color

by Al Williams

To illustrate how you can use loops with Visual Basic control arrays, Al presents a phone dialer application.

Programming in the Real World

by Allen Holub

Allen discusses the differences between computer science in the classroom and computer programming in the real world.

Great Books

by Gregory V. Wilson

Greg asks some of the most influential programmers and computer scientists what books they read.

Editorial

by Eugene Eric Kim

DDJ


Dr. Dobb's Journal January 1998 - Java Programming

FEATURES

JAVA: GETTINGDOWNTOBUSINESS

by Arthur van Hoff

A Java pioneer looks at the state of the art, Java-wise, and wonders if it is ready for prime-time business applications.

JAVA AND COM AUTOMATION

by Kenneth Bandes

Ken examines the ActiveX technology called Automation (formerly "OLE Automation"), and shows how you can implement it in Java.

JAVA REFLECTION

by Paul Tremblett

With the JDK 1.1 Reflection API, you can not only discover the fields, methods and constructors of loaded classes, but also dynamically manipulate them within the basic security framework. Chris Howard adds a note on the relationship between reflection and JavaBeans.

IMPLEMENTING ASSERTIONS FOR JAVA

by Jeffery E. Payne, Michael A. Schatz, and Matthew N. Schmid

Assertions act like watchdogs that assist you in finding bugs earlier in the development process. Our authors show how you implement assertions for Java.

INSIDE JAVA CLASS FILES

by Matt T. Yourst

Matt explores the class file format -- the key to Java's binary portability. He then presents JavaDump, a program that documents structures in class files, and StripDebug, which removes extra debug information from classes.

THE JAVA INTERNATIONALIZATION API

by Carol A. Jones

"Internationalization" is the process of preparing programs to run in other languages. Carol examines Java's Internationalization API and shows how you can use it to design global software.

EMBEDDED SYSTEMS

MUTUAL EXCLUSION AND SYNCHRONIZATION IN JAVA

by Dan Ford

Dan discusses Java's concurrency features, presenting classes for mutual exclusion and synchronization that mimic the behavior and interfaces of the synchronization mechanisms available in the Win32 API.

INTERNET PROGRAMMING

DEVELOPING PEER-TO-PEER APPLICATIONS FOR THE INTERNET

by Louis Thomas, Sean Suchter, Adam Rifkin

SimulEdit, the text editor presented here, lets groups of people edit the same file at the same time. Enabling this application are generic network data objects (NDOs) which are shared among multiple processes communicating over a network.

PROGRAMMER'S TOOLCHEST

EXAMINING JDBC DRIVERS

by Mukul Sood

JDBC, short for "Java Database Connectivity," provides a programming-level interface for communicating with databases in a uniform way. Mukul discusses the different categories of JDBC drivers, then compares them in terms of performance.

EXAMINING MICROSOFT'S J/DIRECT

by Andrew Wilson

Microsoft's J/Direct, which ships as part of Internet Explorer 4.0 (and with future versions of Windows 95/NT and Internet Information Server) simplifies the Java native code calling process almost to the point where a DLL function can be directly called from within a Java applet or application.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Will the next killer app really be a "FUDchecker"? And, if so, will it be written in Java?

C PROGRAMMING

by Al Stevens

Conferences, committees, and CodeWizard are the three Cs that Al sails this month.

ALGORITHM ALLEY

by John Boyer

Resizable data structures are flexible, but array-based structures are fast. John shows you how to get the best of both worlds.

JAVA Q&A

by Cliff Berg

This month, Cliff addresses centralized systems administration using Marimba's Castanet 2.0 channel (and JavaSoft's HotJavaBean) for distributing secure, signed content to users.

UNDOCUMENTED CORNER

by Robert R. Collins

The 80386 introduced microprocessor support for emulating multiple 8086s. Robert looks under the hood of these Virtual Mode Extensions, which are mostly used by memory managers and DOS boxes in Windows.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson

Greg looks at Visual Basic 5 from the Ground Up, by Gary Cornell; UML Distilled, by Martin Fowler (with Kendall Scott); The CRC Card Book, by David Bellin and Susan Suchman Simone; and GUI Design Essentials, by Susan Weinschenk, Pamela Jamar, and Sarah C. Yeo.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1998, Dr. Dobb's Journal

Dr. Dobb's Journal February 1998: Scripting Languages

FEATURES

A CONVERSATION WITH LARRY WALL

by Eugene Eric Kim

Perl has been described as everything from "duct tape for the Web" to a "Swiss Army chainsaw." Larry Wall, the creator of the language, takes time to chat with DDJ's Eugene Kim about how and why the language is what it is.

SWIG AND AUTOMATED C/C++ SCRIPTING EXTENSIONS

by David Beazley

SWIG, short for "Simplified Wrapper and Interface Generator," is a freely available tool that lets you generate interfaces to a variety of scripting languages from a common interface description.

TEMPLATE PROCESSING CLASSES FOR PYTHON

by Brad Howes

Brad shows how you can embed Python objects in HTML pages using boilerplate template processing classes. Then Python creator Guido van Rossum adds a note on what's new in the just-released Python 1.5.

TCLBLEND: BLENDING TCL AND JAVA

by Scott Stanton

TclBlend, a scripting language based on Tcl and Java, introduces new Tcl commands that let you directly manipulate Java objects without having to write any Java code. TclBlend also provides access to the Tcl interpreter interfaces through a set of Java classes.

AUTOMATIC FILE CONVERSIONS WITH PERL

by Tim Kientzle

Tim uses Perl to write a smart print filter that recognizes the type of data it is being fed and invokes the appropriate conversion.

A DATA ACQUISITION SYSTEM FOR LINUX

by Dhananjay V. Gadre and Sunu Engineer

Our authors present a general-purpose data-acquisition system for Linux that can be connected to the PC's parallel port to record eight channels of analog voltage.

EMBEDDED SYSTEMS

FLEXIBLE SYSTEM CONTROL AND SPECIAL-PURPOSE LANGUAGES

by Russell W. Mello

Mvcl, the programming language Russell presents here, was designed to do a particular job. It also provides an excellent model for designing reusable software.

INTERNET PROGRAMMING

XML PROGRAMMING IN PYTHON

by Sean McGrath

XML brings to the document world what the database world has had for a long time -- interoperability via open systems. Sean shows how you can use Python as a development platform for XML programming.

PROGRAMMER'S TOOLCHEST

THE DELPHI OPEN TOOLS API

by Ray Lischner

Borland's Delphi includes the Open Tools API, a set of classes for extending and customizing the IDE. This means that, in effect, you can use Delphi as a scripting language to extend itself.

AN ACTIVEX CONTROL FOR REAL-TIME COMPUTER CONTROL

by Charles H. Huddleston and Douglas A. Troy

Charles and Douglas present an ActiveX control which enables real-time computer control of external devices and sensors of various kinds in automated control applications. The control is written in C++, while the control system is built using the Lego Dacta Control Lab.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

When it comes to Apple, who are you going to believe -- Steve Jobs, Bill Gates, or Jim Carlton? That's just one question Michael asks as he reads the recently released Apple: The Inside Story of Intrigue, Egomania, and Business Blunders.

C PROGRAMMING

by Al Stevens

With the recent ANSI/ISO stamp of approval, "standard" C++ became a reality. Al takes a look at what this means for the language, focusing on references, assignments, initialization, and the like.

JAVA Q&A

by Cliff Berg

How do you transfer data securely between two locations? Cliff shows you how, using the SSLava security toolkit from Phaos Technology.

ALGORITHM ALLEY

by Karl-Dietrich Neubert

"Classification sorts" are much faster than Quicksort or Heapsort on large amounts of data. But, until now, they were thought to be too memory intensive for widespread use.

UNDOCUMENTED CORNER

by George Shepherd and Scot Wingo

George and Scot continue their examination of Microsoft's Active Template Library, this month focusing on ATL's ActiveX Control architecture.

PROGRAMMER'S BOOKSHELF

by Gerald L. Graef

This month, Gerald examines Expert C Programming: Deep C Secrets, by Peter van der Linden, and Graphical Applications With Tcl and Tk, by Eric F. Johnson.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1998, Dr. Dobb's Journal

Dr. Dobb's Journal March 1998 - Benchmarking and Software Testing

FEATURES

DR. DOBB'S JOURNAL EXCELLENCE IN PROGRAMMING AWARDS

by Jonathan Erickson

The "Gang of Four" -- Richard Helm, Erich Gamma, Ralph Johnson, and John Vlissides -- are recipients of this year's annual award that honors achievement in the world of software development.

SOFTWARE QUALITY

by Shari Lawrence Pfleeger

The metrics Shari describes here help you better understand code, control testing, and predict faults and failures.

BENCHMARKS: FACT, FICTION, OR FANTASY?

by Robert R. Collins

Can you really trust published benchmarks? By making a 166-MHz Pentium computer seem to outperform a 300-MHz Pentium II system, Robert shows why healthy skepticism is a useful trait. Brian Butler then presents a sample database benchmark.

TRACING BSD SYSTEM CALLS

by Sean Eric Fagan

How do you debug a program that doesn't have source or debugging symbols? One way is to watch the system calls it makes. Sean's "truss" utility lets you do exactly this.

A REAL-TIME PERFORMANCE VISUALIZER FOR JAVA

by John J. Barton and John Whaley

Find out where the performance bottlenecks in your Java programs are with the JVM performance visualizer presented here.

picoPERC: A SMALL-FOOTPRINT DIALECT OF JAVA

by Kelvin Nilsen

picoPERC is a Java subset in which the core Virtual Machine implementation fits in less than 64 KB of memory. This 64-KB footprint is nearly 1/16th the size of JavaSoft's yet-to-be-defined Embedded Java and over 50 times smaller than typical Enterprise Java implementations.

VerCheck: Discovering Component Version Numbers

by John Graham-Cumming

VerCheck, the utility John presents here, gives you a list of the versions of all the components of relevance to your program.

EMBEDDED SYSTEMS

BUILDING INTELLIGENT WEB-BASED CONTROL SYSTEMS

by Tom Milligan and Steve Coffin

Our authors shows how to embed web servers onto embedded devices and develop web-based user interfaces. To illustrate, they automate a sprinkler system using the Embedded Micro Interface Technology toolkit.

INTERNET PROGRAMMING

TRANSPARENT ATL CONTROLS

by Tom Armstrong and Mark Nelson

Tom and Mark use Microsoft's Active Template Library to build an ActiveX control that displays a bitmap with a single transparent color. You can then use the control with Internet Explorer, Netscape Navigator, Visual Basic, and most other ActiveX containers.

PROGRAMMER'S TOOLCHEST

SOURCE-CODE PROFILERS FOR WIN32

by Ron van der Wal

Ron examines profiling tools that target Win32 C/C++ development. These tools include Intel's VTune, Microsoft's Visual C++ 5.0 profiling tools, Rational's Visual Quantify, TracePoint's HiProf, Watcom's C++ 11.0 tools, and those that come with the Win32 SDK.

WINDOWS NT DEVICE DRIVER TOOLKITS

by Patrick Tennberg

Writing device drivers in C using the Windows NT Device Driver Kit can be scary. Patrick examines alternative toolkits, such as BlueWater Systems' WinDK and Vireo Software's Driver::Works.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael doesn't do benchmarks. Well, he does, but he doesn't like to. What he really likes to do is read Dilbert -- and he takes issue with those who don't.

C PROGRAMMING

by Al Stevens

Al launches a new project this month -- the C++ Persistent Template Library, for adding persistence to containers.

JAVA Q&A

by Govind Seshadri

Java's Remote Method Invocation brings distributed-object computing to Java. Govind examines the intricacies of enabling true peer-to-peer Java RMI interaction. He then presents a step-by-step approach to implementing callbacks. Cliff Berg will return next month.

ALGORITHM ALLEY

by William Stallings

Many programs need to predict the behavior of external systems. William shows how exponential smoothing fills the bill for a variety of applications.

UNDOCUMENTED CORNER

by Robert L. Collins

Robert continues his discussion of the Pentium's Virtual Mode Extensions, starting with a description of the various components of VME and how they work together.

PROGRAMMER'S BOOKSHELF

by Jeff Cromwell

If you need to learn more about ISAPI, the books Jeff examines here may be just the place to start. These books include Using ISAPI, by Stephen Genusa et al.; Professional Visual C++ ISAPI Programming, by Michael Tracy; and Programming ISAPI with Visual Basic 5, by Wayne S. Freeze and Tim Ritchie.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1998, Dr. Dobb's Journal

DDJ, April 1998 - Algorithms

FEATURES

TERNARY SEARCH TREES

by Jon Bentley and Robert Sedgewick

When you have to store a set of strings, what data structure do you use? Jon and Robert suggest one place you can start is with ternary search trees, which combine the time efficiency of digital tries with the space efficiency of binary search trees.

THE MAXIMAL RECTANGLE PROBLEM

by David Vandevoorde

The stepwise derivation of the algorithm David presents here illustrates a number of principles that are widely applicable in algorithm design.

VISUAL CRYPTOGRAPHY & THRESHOLD SCHEMES

by Doug Stinson

Threshold schemes have found many applications in various types of cryptographic protocols, including secure multiparty computations, key escrow/key recovery schemes, threshold cryptography, and electronic cash.

PROTOCOL ENGINEERING & KANNEL

by Kari Granö, Jukka Paakki, Jukka Viljamaa, Antti Viljamaa

Because of the complexity of communication systems, protocol engineering has evolved into a discipline that requires its own languages and tools. Kannel is an object-oriented programming language designed for protocol engineering.

STL'S RED-BLACK TREES

by Jason Shankel

The C++ Standard Template Library (STL) introduces the associative containers set, multiset, map, and multimap, which are based on red-black trees. Jason examines red-black trees and the specifics of the implementations used by the Hewlett-Packard and Silicon Graphics versions of the STL.

WINDOWS CE WIN32 API PROGRAMMING

by Bruce Radtke

Bruce examines Windows CE and its development environment, focusing on the differences between Version 1.0 and 2.0.

EMBEDDED SYSTEMS

INTERRUPT BEHAVIOR IN WINDOWS NT

by Dale Roberts

DIORQ, the program Dale presents here, analyzes NT's interrupt system, illuminating its problems, limitations, and potential.

INTERNET PROGRAMMING

USING NETREXX

by Pamela J. Taylor

NetRexx is a programming language designed to make programming the Java Virtual Machine easier than with Java. Although NetRexx syntax is derived from Rexx, NetRexx is strongly typed, making it first-rate for programming the JVM and allowing access primitive (binary) datatypes.

PROGRAMMER'S TOOLCHEST

DYNAMIC DISTRIBUTED SYSTEMS IN JAVA

by Philip Rousselle

Phil examines dynamic distributed Java programming techniques by presenting "Sojourner," a load-balancing system that uses Voyager distributed computing infrastructure from Objectspace.

BUILDING DISTRIBUTED APPLICATIONS WITH JAVA & CORBA

by Bryan Morgan

Bryan examines the concepts behind CORBA-based development, using Borland's JBuilder and Visigenic's VisiBroker for Java.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael catches up on breaking news about the 400-year old Ylbvi-Nlliv algorithm, then turns his eye to Steve Jobs efforts to pull Apple back to the top.

C PROGRAMMING

by Al Stevens

AntiPatterns and release 2 of his Persistent Template Library are the topics of Al's column this month.

JAVA Q&A

by Cliff Berg

How do you interface Java to your PalmPilot? Cliff shows you how, using IBM's new "PilotBean" Java interface.

ALGORITHM ALLEY

by Gary D. Knott

Delta modulation is a data-encoding technique that's particularly useful for transmitting fewer bits and archival storage. Gary examines the basic algorithm, then reviews variations that implement "adaptive" delta modulation.

UNDOCUMENTED CORNER

by George Shepherd and Scot Wingo

George and Scot continue their examination of the undocumented aspects of the Active Template Library, this month focusing on how ATL implements property pages for ActiveX Controls.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

In his inaugural column, Dr. Ecco faces a challenging problem when he's asked to determine where spacecraft will land on a distant planet.

PROGRAMMER'S BOOKSHELF

by Robert Bernecky

John Hennessy and David Patterson's Computer Architecture: A Quantitative Approach, Second Edition is a landmark computer-science book.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1998, Dr. Dobb's Journal

DDJ, May 1998 - Numerics and the Year 2000

FEATURES

DATE COMPRESSION AND YEAR 2000 CHALLENGES

by Robert L. Moore and D. Gregory Foley

Ultimately, fixing Y2K problems is about fixing storage overflow, and there are a variety of solutions that address the problem. Bob and Greg examine some of these solutions, focusing on date compression.

STRATEGIES FORSOLVING THEY2K PROBLEM

by William Gothard and Les Rodner

Even though Y2K solutions are fairly straightforward, the Year 2000 crisis still is a bet-your-business problem. Our authors describe the analysis, conversion, and testing process.

A YEAR 2000 TOOL SUITE

by Dev Bhattacharyya

Dev presents a Year 2000 toolset written in Java, consisting of a scanning tool that examines source code for date-related areas, and a data ager tool that lets you manipulate existing production data.

HDF: THE HIERARCHICAL DATA FORMAT

by Brand Fortner

The Hierarchical Data Format, developed at the National Center for Supercomputing Applications, is a portable, self-describing data format for moving and sharing scientific data in networked, heterogeneous computing environments.

ALGORITHMS FOR HIGH-PRECISION FINITE DIFFERENCES

by Michael Herstine

Michael presents algorithms that help you improve numerical methods in situations where obtaining greater accuracy from the function evaluations is difficult or impossible.

THE PENTIUM F00F BUG

by Robert R. Collins

When x86 processors encounter an invalid instruction, the processor is supposed to generate an invalid opcode exception. If this mechanism fails, however, the program can bring the system down -- and that's what happens with the F00F bug.

EXTENDING WINDOWS CE 2.0 MFC DATABASE CLASSES

by John C. Schettino, Jr.

John presents a set of Windows CE database classes and subclasses of the 2.0 MFC classes that provide an object-oriented wrapper to the basic database search API.

CUSTOMIZING DDX/DDV

by Jean-Denis Bertron

Jean-Denis implements a system for customizing data exchange routines to add macro processing to Windows.

EMBEDDED SYSTEMS

FAST MEMORY ALLOCATION

by H. Thomas Richter

In embedded-controller projects with execution time constraints, it's okay to sacrifice memory for speed. The power-of-two Fast Memory Allocator (FMA) Thomas presents here is used in just such a project.

INTERNET PROGRAMMING

ACTIVE DATA OBJECTS & ASP

by Mark Betz

Active Server Pages are useful for generating output and managing application state on behalf of a client. When combined with Active Data Objects, your scripts can manipulate ODBC data sources to do nearly anything that is possible in native SQL.

PROGRAMMER'S TOOLCHEST

THE HOT VIEWS GRAPHICS LIBRARY

by David P. Heddle

The Hot Views (Hv) graphical user-interface library was designed for use in scientific modeling and simulation applications.

PROFILE-GUIDED OPTIMIZATIONS

by Gary Carleton, Knud Kirkegaard, and David Sehr

Profile-guided optimizations feed information about how a program executes back to the compiler. This allows the compiler to focus its efforts more effectively on the regions of programs that matter for execution time.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Y2K guru Bob Bemer takes time out to chat with Michael about a big problem...the early days of Cobol and the latter days of the Y2K problem.

C PROGRAMMING

by Al Stevens

Al implements a C++ version of the Midifile C function libraries that parse MIDI files. He then takes a look at Bjarne Stroustrup's The C++ Programming Language, Third Edition.

JAVA Q&A

by L. Richard Moore

Streaming audio refers to audio that can be downloaded at the same speed it is played. Rick presents idtAudio, a streaming audio applet written in Java.

ALGORITHM ALLEY

by John Boyer

John introduces algorithms for and implementations of linked-list sorting and searching that are more efficient than those available in the Java Developer's Kit 1.2 Beta 2.

UNDOCUMENTED CORNER

by Robert R. Collins

In previous columns, Robert examined why Intel's Virtual Mode Extensions (VME) are needed and how they work. This month, he wraps up his analysis of VME by pointing out some of its caveats.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Dr. Ecco and crew tackle the problem of "nimmerics," which even stymied the Feds.

PROGRAMMER'S BOOKSHELF

by Peter N. Roth

Peter takes a look at Fuzzy Engineering, by Bart Kosko, Applications of Fuzzy Logic, edited by Mohammad Jamshidi, Andri Titli, Lotfi Zadeh, and Serge Boverie, and The Design and Development of Fuzzy Logic, by Byron Miller.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1998, Dr. Dobb's Journal

DDJ, June 1998 - Patterns & Object-Oriented Design

FEATURES

AUTOMATING DESIGN PATTERN IDENTIFICATION

by Jagdish Bansiya

DP++, the tool Jagdish presents here, automates design pattern detection, identification, and classification in C++ programs.

THE VISITOR PATTERN AND A JAVA GREP UTILITY

by W. David Pitt

One application of the Visitor pattern is the familiar grep utility, which searches for a string pattern in a file. David implements grep in Java.

DESIGNING CLASS LIBRARIES FOR VISUAL BUILDERS

by Arthur T. Jolin, David Lavin, and Susan Carpenter

It's not enough that other programmers understand your class libraries -- visual builders and other code generators have to make sense of them too. Our authors discuss the differences between humans and programs, when it comes to understanding class libraries.

ANTIPATTERNS

by Hays W. McCormick and Raphael Malveaux

Unlike design patterns, AntiPatterns focus on software failures in an attempt to understand, prevent, and recover from them. To developers, AntiPatterns are a tool that bridge the gap between architectural concepts and real-world implementations.

DESIGNING TECHNOMADIC SYSTEMS

by Steven K. Roberts

Microship, a technomadic vehicle/environment designed for open-ended coastal and inland travel, depends on embedded systems for everything from navigation to digital-video production.

EMBEDDED SYSTEMS

68HC05-BASED PERIPHERAL DEVICES: PART I

by Derrick B. Forte and Hai T. Nguyen

In this two-part article, our authors design a Windows 95-based Caller ID peripheral device built around Motorola's MC68HC(7)05P9 microcontroller. In this installment, they focus on the Call ID protocol and hardware design issues.

INTERNET PROGRAMMING

CGI PROGRAMMING & VISUAL BASIC

by Ofer LaOr

Ofer describes his oCGI2 library, which lets you develop true CGI applications using Visual Basic.

PROGRAMMER'S TOOLCHEST

DIGITAL SIGNATURES WITH THE MICROSOFT CRYPTOAPI

by John Boyer

The Microsoft Cryptographic API provides a standard function interface you can use to add data security features to 32-bit Windows applications. John examines this API and presents the Digital Signature Library for Microsoft CryptoAPI.

IMPLEMENTING ASSOCIATIONS

by Frank Hellwig

Maintaining pointer integrity as objects are created and deleted is a complex housekeeping chore. Frank presents an implementation of an associations class built using the Rogue Wave Tools.h++ foundation class library.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Is there a pattern in Apple's decision to jettison the Newton? Michael unravels the whole sorted story.

C PROGRAMMING

by Al Stevens

Al dives into the Windows CE SDK and comes out with a metronome for his hand-held PC. As its name suggests, the Metronome application is a familiar musical tool that ticks like a clock but at an assigned frequency.

JAVA Q&A

by Kenneth Golomb and Thomas Sorgie

How do you ensure secure communications from a Java applet? Kenneth and Thomas show how, using HTTPS tunneling for SSL security.

ALGORITHM ALLEY

by Jon Bentley

New insights into the cost of recursion allow Jon to use this powerful tool more comfortably. And when recursion is too expensive, simple techniques maintain the elegance of recursion, without sacrificing performance.

UNDOCUMENTED CORNER

by George Shepherd and Scot Wingo

George and Scot take a look at how two COM objects can set up communication scheme where the object calls back to the client when the object is written using the Active Template Library (ATL).

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

The police commissioner pays a visit to Dr. Ecco's apartment -- not looking for trouble, but answers.

PROGRAMMER'S BOOKSHELF

by Chris Jaekl and Paul Lu

Chris and Paul take on software projects and UNIX programming, by examining Steve McConnell's Software Project Survival Guide and W. Richard Stevens' UNIX Network Programming, Volume 1: Networking APIs: Sockets and XTI, Second Edition.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1998, Dr. Dobb's Journal

July 1998 -- Graphics Programming

FEATURES

COMPOSING REACTIVE ANIMATIONS

by Conal Elliott

Fran, short for "functional reactive animation," is a high-level vocabulary that lets you describe the essential nature of an animated model, while omitting details of presentation.

A CONVERSATION WITH JOHN KNOLL

by Thomas "Rick" Tewell

As a visual-effects supervisor for Industrial Light & Magic, John Knoll lives on the bleeding-edge of computer graphics. With his brother Tom, he also created the PhotoShop image-processing software.

A WINDOWS 3D MODEL VIEWER FOR OPENGL

by Jawed Karim

Combining Win32 with OpenGL can lead to some impressive 3D graphics. Jawed presents a model viewer for use with OpenGL on Windows 95/NT.

THE KERNEL GRAPHICS INTERFACE

by Andreas Beck

The General Graphics Interface (GGI) project brings safe, fast, and portable graphics to a variety of platforms and operating systems. Andreas describes KGI, the kernel-level component of the Linux version of GGI.

AFFINE TEXTURE MAPPING

by André LaMothe

Affine texture mapping is fundamental to many forms of 3D rendering, including light interpolation and other sampling type operations.

INSIDE DVD

by Linden deCarmo

Although DVDs physically resemble CD-ROMs, they store up to 25 times more data. Linden focuses on the DVD-Video specification, and presents a DVD-Video player.

EMBEDDED SYSTEMS

68HC05-BASED PERIPHERAL DEVICES: PART II

by Derrick B. Forte and Hai T. Nguyen

In this two-part article, our authors design a Windows 95-based Caller ID peripheral device built around Motorola's MC68HC(7)05P9 microcontroller. This month, they present the software.

INTERNET PROGRAMMING

RENDERING XML DOCUMENTS USING XSL

by Sean McGrath

Responsibility for rendering XML belongs to the eXtensible Style Language (XSL) Standard. Sean presents an overview of XSL and illustrates how it can be used with MSXSL, Microsoft's XSL implementation.

PROGRAMMER'S TOOLCHEST

EXAMINING THE DRAGON SPEECH-RECOGNITION SYSTEM

by Al Williams

Al uses Visual Basic 5 and Dragon Systems' DragonXTools toolkit to build a voice-activated autodialer. Since the custom controls are ActiveX controls, however, you can use most any language.

JDBC DRIVERS AND WEB SECURITY

by Mukul Sood

Although security is not officially part of the Java Database Connectivity (JDBC) specification, JDBC driver vendors are beginning to offer security features such as encryption and authentication.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael ventures into the land of the lizards before adding his two cents to LEO lore. He then introduces a new "Paradigms Past" feature.

C PROGRAMMING

by Al Stevens

Al continues his journey into the mysteries of Windows CE -- and the Windows CE Developers Conference has given him a lot to think about.

JAVA Q&A

by Aaron Michael Cohen

The Java API defines an abstract imaging model that can be used to display and manipulate both static images and sequences of images. Aaron examines this powerful yet flexible model.

ALGORITHM ALLEY

by Lee Kamentsky

Many image-analysis tasks must first separate the image into clearly defined regions. Lee's algorithm performs such a separation and presents the results in a fashion amenable to further study.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Dr. Ecco and his sidekick Liane help the military avoid going from the frying pan into lines of fire in this month's episode.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson

Greg looks at a bevy of books this month, including Software Visualization, C/C++ Software Quality Tools, Perl: The Programmer's Companion, Effective Perl Programming, Perl 5 Interactive Course, and Software Runaways: Monumental Software Disasters.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1998, Dr. Dobb's Journal

August 1998 -- C++ Programming

FEATURES

C++ INTERFACES

by Fred Wild

Interfaces provide a convenient means of resolving the tension between what a class is and what it can do. Keeping interface and implementation separate in C++ programs keeps designs clean and fosters reuse.

C++ NOTIFIERS

by Dave Pomerantz

Notifiers, also called "events" or "messages," are used to pass information anonymously between objects. Dave shows how notifiers can work in C++, using a multithreaded application as an example.

OBJECT SERIALIZATION, C++, AND JAVA

by Kevin Haverlock

Kevin presents a technique for exchanging data between Java and C++ using object serialization over a TCP/IP sockets connection.

SELF-REGISTERING OBJECTS IN C++

by Jim Beveridge

The "specialty store" Jim presents lets new classes be registered at run time, even if they live in a shared library or DLL. Once registered, these new classes are treated exactly like built-in classes.

C++ LOCALES

by Nathan Myers

Nathan discusses how the Standard C++ Library supports internationalization and offers tips on using the C++ locale library.

C PREPROCESSING WITH TCL

by Jonathan S. Arney

CPDQ is a utility that uses Tcl for more-sophisticated preprocessing than CPP. CPDQ's C API makes it easy both to extend the language and embed the interpreter into other applications.

THE WINDOWS CE BUILD PROCESS

by Aspi Havewala

When you create a unique hardware platform and use Windows CE, you can pick and choose from among available components to build a "custom" version of Windows CE.

EMBEDDED SYSTEMS

EMBEDDED DEVELOPMENT COMPILERS

by Don Hair and Cesar Quiroz

Don and Cesar examine the differences between native and embedded development systems, and discuss the features of embedded development compilers that make them different from native compilers.

INTERNET PROGRAMMING

FAST IP ROUTING WITH LC-TRIES

by Stefan Nilsson and Gunnar Karlsson

One of the bottlenecks of the Internet is the address lookup operations performed by routers. Stefan and Gunnar show how to perform the lookups efficiently with a simple data structure--a level-compressed trie.

PROGRAMMER'S TOOLCHEST

THE ACTIVE EXPRESSIONS LIBRARY

by Mauricio de Simone and Gregory V. Wilson

The Active Expressions library combines the conciseness and checkability of language extensions with the portability and extensibility of a library.

PLUG-IN COMPONENTS FOR MFC

by Stefan Hoenig

MFC is limited when it comes to encapsulating different window functionality into separate objects. Stefan presents a technique for encapsulating user actions into separate objects that support MFC message maps.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

"And the winner is...," says David Patterson, "...David A. Patterson." Michael also looks at Bob Bemer's newest Y2K trick, and reports on Apple's Worldwide Developers' Conference.

C PROGRAMMING

by Al Stevens

When it rains anniversaries, it pours. Al looks back at his past ten years at the helm of the "C Programming" column.

JAVA Q&A

by Cliff Berg

Cliff shows how you can use encryption to protect data at its point of origin or destination.

ALGORITHM ALLEY

by Sergei Savchenko

Efficiently resolving database queries requires you to reconcile the structure of the databases with the structure of queries. Mathematical algorithms known as "automated theorem provers" excel at this type of problem.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Ecco and Liane lace up their L.L. Bean boots and venture into the great outdoors to solve the problem of how many angels can fit on the head of a tent--and still survive.

PROGRAMMER'S BOOKSHELF

by William Stallings

William looks at a pair of recently released IPv6 books--Christina Huitema's IPv6: The New Internet Protocol, Second Edition, and Stewart Miller's IPv6: The Next Generation Internet Protocol.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1998, Dr. Dobb's Journal

September 1998 -- Communications & Networking

FEATURES

CHANNELS FOR INTER-APPLET COMMUNICATION

by Steve Ball and John Miller Crawford

When Java applets communicate with each other, users enjoy a richer experience when visiting your web site. One way to facilitate communications is to use Java's class variables (static fields).

DYNAMIC LINKING & LATE BINDING FOR NETWARE

by N. Thomas Creighton

Late binding further provides you with the flexibility to decide at run time whether a particular feature is available. On operating systems such as Netware (which doesn't support virtual memory), this can be extremely valuable.

DISTRIBUTING DATA USING TLT30G

by Oleg Kiselyov

TLT30G is a software system for distributing data from a central location to a number of clients over unidirectional, noisy, and generally slow communication links.

VOICE RECORDING AND PLAYBACK WITH ISDN

by Martyn Davies

ISDN allows data connections and voice connections over the same network infrastructure. ISDNREC, the program Martyn presents here, is a Win32 console-mode answering-machine application for ISDN-based systems.

ASYNCHRONOUS COMMUNICATIONS USING select AND poll

by Sean Eric Fagan

The select() and poll() system calls were recently added to FreeBSD to make it easier for one process to monitor system calls made by another process.

THE WINDOWS CE 2.0 REMOTE API

by Andrew Tucker

Communication between a desktop PC and an external device is one of the fundamental features all Windows CE users expect. Luckily, CE provides CeRapiInvoke, a unique high-level interface to query the device for information like the processor type and OS version.

EMBEDDED SYSTEMS

ASSEMBLY-LANGUAGE CONTROL-FLOW GRAPHING

by Edward J. Beroset

Ed presents a tool that automates the task of creating a control-flow diagram for assembly-language programs. Although written for the Mitsubishi 740 series processor, the tool can be adapted for other controllers as well.

INTERNET PROGRAMMING

AN API FOR INTERNET AUCTIONS

by Kevin O'Malley and Terence Kelly

The Michigan Internet AuctionBot is a freely available auction service that supports both software and human agents for one form of Internet-based e-commerce. The AuctionBot is both platform and language independent for extendibility and simplicity.

PROGRAMMER'S TOOLCHEST

VISUAL PROGRAMMING WITH PROGRAPH

by Garth Smedley

Prograph is an object-oriented visual language that lets you manipulate iconic data-flow diagrams to create the executable source code for your application.

NSBD AND SOFTWARE DISTRIBUTION

by Dave Dykstra and Katherine Lato

Not-So-Bad Distribution, or NSBD, is a web-based system for automatically distributing free software over the Internet.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

This month, Michael discusses the Web98 Conference, an IDE for Perl, the origin of Usenet, interesting developments concerning electronic books, the proposed return of OS/2, and the MySpace attack on Windows.

C PROGRAMMING

by Al Stevens

Al takes a look the recently finalized Standard C++ and reflects on what it means for working programmers.

JAVA Q&A

by Mukul Sood

Swing is a collection of lightweight components built on top of the Java Abstract Windowing Toolkit (AWT). Mukul zeros in on Swing's JTable components, and explains how the Model-View-Controller architecture applies to it.

ALGORITHM ALLEY

by John C. Gunther

Exponentially decaying averages are easy to program, widely used, and fundamentally flawed. John takes a close look at this standard technique and shows how to mend it.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Dr. Ecco and Liane take on Wall Street this month as they tackle the problem of options.

PROGRAMMER'S BOOKSHELF

by Jeff Cromwell

Jeff's focus this month is multithreading, as he examines Multithreading Programming Techniques in Win32, by Jim Beveridge and R. Wiener, Object-Oriented Multithreading Using C++, by Cameron and Tracy Hughes, and Multithreading Programming Techniques, by Shashi Prasad.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1998, Dr. Dobb's Journal

October 1998 -- Real-Time Computing

FEATURES

JAVA GARBAGE COLLECTION FOR REAL-TIME SYSTEMS

by Alexandre Petit-Bianco

The software specifications and hardware constraints of real-time systems result in unique problems when it comes to garbage collection. Alexandre examines the issues involved in choosing a garbage-collection scheme for real-time systems, then describes the garbage collector used by Kaffe, a freely available Java virtual machine.

DEVICE DRIVERS & REAL-TIME SYSTEMS

by Robert Krten

Robert examines two radically different device drivers and their implementation under QNX Software's QNX 4 real-time operating system.

A REAL-TIME WEATHER STATION

by Richard M. Smith

Need to know which way the wind blows? Richard describes a real-time, web-based weather station located on the roof of his company offices in Cambridge, Massachusetts.

REAL-TIME SOUND PROCESSING

by Randall Cook

Conceptually, real-time audio processing is simple. In practice, however, it is anything but easy. Randall discusses the issues involved in real-time sound processing and how to encapsulate operating system differences behind a cross-platform layer.

THE BENCH++ BENCHMARK SUITE

by Joseph M. Orost

Bench++ is a benchmark suite designed to measure the performance of code generated by C++ compilers. Bench++ 1.0 consists of more than 17,000 C++ source lines and contains more than 120 tests.

WINDOWS CE DEVICE DRIVER DEVELOPMENT, PART I

by James Y. Wilson

In this first installment of a two-part series, Jim provides a crash course in Windows CE device-driver development, by describing what you need to get started in CE driver development.

EMBEDDED SYSTEMS

FORTH AND REAL-TIME CONTROL

by William M. Stein

William describes an intelligent Forth-based controller that utilizes New Micros' Forth implementation running on a Motorola MC68HC11-based system.

INTERNET PROGRAMMING

THE WEB REPORT DATABASE REPORTING TOOL

by Lauren Hightower

The Web Report lets you connect users to ODBC-compliant databases, then lets them create ad hoc queries and reports using the Web as the query-building interface. Lauren knits The Web Report together by using Active Server Pages, JavaScript, and DHTML.

PROGRAMMER'S TOOLCHEST

EXAMINING THE MICROSOFT HTML HELP TOOLKIT

by Keith Bugg

Keith uses Microsoft's HTML Help 1.1 toolkit to develop an application that illustrates one approach to building HTML-based help files. Also, Max Fomitchev discusses HTML Help in distributed environments.

VISUAL BASIC 6 FILESYSTEM OBJECTS

by Paul Lomax

Among the enhancements to Microsoft's Visual Basic 6 is the extended File-System Object Model, which is made available to you via the Scripting Runtime Library.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

This month, Michael praises various underdogs, including a couple of "little" operating systems, a new magazine, a new web site, and a new book.

C PROGRAMMING

by Al Stevens

Al reports on his trip to Kuala Lumpur and keeps up to date on the C++ namespace goings on.

JAVA Q&A

by Mike Criscolo

In examining queuing techniques in Java, Mike presents one approach to multithreading he has implemented, and examines the differences between centralized- and distributed-queuing models.

ALGORITHM ALLEY

by Steven Pigeon and Yoshua Bengio

Although simple and often effective, Huffman's compression algorithm requires a lot of memory for 16-bit Unicode text files, and it doesn't adapt to varying conditions within the data. Steven and Yoshua explain how they updated Huffman's classic technique.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Lives are at stake as Dr. Ecco and Liane are faced with the challenge of re-Balkanizing the Balkans by redrawing the maps.

PROGRAMMER'S BOOKSHELF

by Sean McGrath

Tcl and Python are Sean McGrath's focus as he examines Effective Tcl/Tk Programming, by Mark Harrison and Michael J. McLennan, and Internet Programming with Python, by Aaron Watters, Guido van Rossum, and James C. Ahlstrom.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1998, Dr. Dobb's Journal

November 1998 -- Distributed Computing

FEATURES

NCSA SYMERA

by Pat Flanigan and Jawed Karim

NCSA Symera is a distributed-object and cluster-management system with application support libraries built on Microsoft's Distributed Component Object Model (DCOM). Our authors examine Symera, then convert a stand-alone Windows program into a Symera application that uses distributed resources.

A CORBA BEAN FRAMEWORK

by David Houlding

David presents a framework based on the JavaBeans Standard that provides a layer of abstraction over CORBA -- and, in particular, the CORBA Dynamic Invocation Interface (DII) -- to encapsulate its complexity and facilitate visual rapid application development.

THE MICO CORBA-COMPLIANT SYSTEM

by Arno Puder

MICO is a freely available CORBA implementation that supports IDL-to-C++ mapping, Dynamic Invocation Interface (DII), IIOP as native protocol, nested method invocations, and more.

CREATING ELECTRONIC MARKETS

by Ming Fan, Jan Stallaert, and Andrew B. Whinston

Our authors describe a web-based Financial Bundle Trading System that lets you access financial markets using Java applets embedded in web browsers.

THE GEF GENERAL EXCEPTION-HANDLING LIBRARY

by Bruce W. Bigby

GEF is a general exception-handling and contract-programming facility for C programmers. With GEF, its special control macros, and other support functions, you can separate the main purpose of a function from its exception-handling, contract-validation, and resource-reclamation code.

WINDOWS CE DEVICE DRIVER DEVELOPMENT, PART II

by James Y. Wilson

In the second installment of this two-part article, Jim identifies the basic skills you need to develop Windows CE device drivers, and implements a driver for an onboard peripheral device.

EMBEDDED SYSTEMS

FILE FORMATS & AUTOMOTIVE DATA ACQUISITION

by Lee R. Copp

When it comes to automotive data acquisition, the files generated while a vehicle is being tested are as different and varied as the vehicles themselves. Lee presents a tool that enables viewing, filtering, or analysis of this disparate data.

INTERNET PROGRAMMING

THE WIDL SPECIFICATION

by Lynn Monson

The Web Interface Definition Language (WIDL) is an XML file format for describing programmatic interfaces to the Web. Borrowing from the object community's ORB ideas, WIDL describes an abstract interface to a "service" existing on the Web.

PROGRAMMER'S TOOLCHEST

EXAMINING THE WIN32 DEBUG API

by Fritz Lowrey

The Win32 Debug API is a set of functions that provides a number of useful tools for both the debugger and the debugged. Since these functions are supported by the operating system, it doesn't matter whether the program being debugged has been compiled or optimized in Debug or Release mode, nor does it make any difference what language or tool you opt to use.

BUILDING SOLID CODE

by Wes Faler

The company Wes works for has refined its development process to produce well-structured, clean source code. Wes presents this process, along with notes on the tools they use.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael examines Jini, Sun's system architecture for distributed computing. Jini embodies a model for how devices and software connect on a network and how distributed systems can operate.

C PROGRAMMING

by Al Stevens

Al updates a C++ class template library that implements undo operations of interactive programs. The library assumes that the user modifies a document class object and might want to undo those modifications in reverse order.

JAVA Q&A

by Jason W. Purdy

Jason examines the drag-and-drop (DnD) capabilities of both JavaSoft's Java Foundation Classes (JFC) and Microsoft's Windows Foundation Classes (WFC).

ALGORITHM ALLEY

by Jon Bentley and Robert Sedgewick

Jon and Robert describe a new algorithm for sorting strings that combines the best of quicksort and radix sort.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Dr. Ecco and Liane use "directed evolution" to cure the ills that ail some.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson

Greg examines a bevy of books this month, including Web Site Usability: A Designer's Guide, Information Architecture for the World Wide Web, Official Guide to Programming with CGI.pm, Jesse Liberty's Clouds to Code, Advanced Programming Language Design, and Practical Software Configuration Management.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1998, Dr. Dobb's Journal

December 1998 -- Computer Security

FEATURES

DIGITAL CONTENT & INTELLECTUAL PROPERTY RIGHTS

by Arun Ramanujapuram and Prasad Ram

The Xerox Digital Property Rights Language (DPRL) can be used to specify rights for digital works. It provides a mechanism in which different terms and conditions related to access, fee, and time can be specified and enforced for the different operations on digital documents such as view, print, and copy.

THE TWOFISH ENCRYPTION ALGORITHM

by Bruce Schneier

The Twofish encryption algorithm was designed to become the Advanced Encryption Standard (AES), the yet-to-be-determined standard encryption algorithm to replace DES. Bruce lays out the algorithm, then discusses the AES and other encryption candidates.

THE PANAMA CRYPTOGRAPHIC FUNCTION

by Joan Daemen and Craig Clapp

Panama, a cryptographic module that can be used both as a cryptographic hash function and stream cipher, is designed to be very efficient in software implementations on 32-bit architectures. Joan and Craig examine Panama's basic design principles and implementation.

PROTOCOLS FOR E-COMMERCE

by Taimur Aslam

The financial and technological communities have created several payment models and protocols for e-commerce. Aslam examines four of these: iKP, which provides a model for secure credit card transactions; Millicent, a method for micropayments; and Netcash and Digicash, which are designed for anonymous transactions. Jeremy Barrett then adds a description of the BlueMoney commerce model.

DOMAIN USAGE TRACKING FOR WINDOWS NT

by Paul Trout

Determining when and how your network is used remains one of the most critical network administration tasks. The application Paul presents here was developed so that system administrators could track usage by workstation or user on Windows NT domains.

SMART CARDS AND THE OPEN TERMINAL ARCHITECTURE

by Edward K. Conklin

Smart cards, sometimes known as "Integrated Circuit Cards" or "pocket PCs," are being promoted as a replacement for conventional credit/debit cards. Edward discusses smart cards and the Open Terminal Architecture, a standard that defines terminal software.

EMBEDDED SYSTEMS

REAL-TIME EXTENSIONS TO UML

by Michael J. McLaughlin and Alan Moore

For real-time and embedded-systems developers, the Unified Modeling Language (UML) comes up short, specifically in timing, concurrency, and hardware/software interfaces. Our authors examine UML's deficiencies, then present UML extensions that address them.

INTERNET PROGRAMMING

XLINK: THE XML LINKING LANGUAGE

by Sean McGrath

The XML Linking Language (XLink) is a draft proposal from the World Wide Web consortium that addresses the shortcomings of HTML's simple hypertext model and allows the rich structure of XML documents to be fully utilized in hypertext creation and management.

PROGRAMMER'S TOOLCHEST

DELPHI 4 AND THE WNET API

by Fritz Lowrey

Fritz explores Delphi 4.0, a multimachine, remote registry editing tool based on the Win32 WNet API. In the process, he examines the WNet API, discusses some of the differences between Delphi 4.0 and previous versions, and looks at authentication differences between workgroups and domains.

EXAMINING MICROSOFT'S LDAP API

by Sven B. Schreiber

The Lightweight Directory Access Protocol is a TCP-based protocol that facilitates remote access to X.500-type directory services. Sven shows how you can use LDAP to access Microsoft's Exchange Server 5.x, then presents an LDAP DLL for programming an Exchange directory browser.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

This month, Michael rifles through The Microsoft File, finds out what Ted Nelson has been up to, and updates the Spyglass story.

C PROGRAMMING

by Al Stevens

Al launches an upgrade to his popular Quincy project. Quincy 99, as the new project is called, is a Windows 95-hosted integrated development environment for C/C++ DOS text-mode programming.

JAVA Q&A

by W. David Pitt

Java servlets are classes that implement the Servlet interface and can be invoked by a web page that defines a URL containing the class name of a servlet. David discusses two ways you can use servlet technology to create server-based Java applications with the ability to interact with web-based clients using HTML or serialized Java objects.

ALGORITHM ALLEY

by Bart Preneel, Vincent Rijmen, and Antoon Bosselaers

The design of secure cryptographic primitives that achieve high software performance is a challenging problem. Our authors compare different approaches and their performance in software.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Police commissioner Bratt shows up at Dr. Ecco's door once again, as he seeks to address the twin towers of public transportation and public safety.

PROGRAMMER'S BOOKSHELF

by Eduardo Fernandez

Everything is coming up UML, as Eduardo examines UML Distilled: Applying the Standard Object Modeling Language, Applying UML and Patterns: An Introduction to OOA and OOD, UML and C++: A Practical Guide to Object-Oriented Development, and Use Cases Combined with Booch/OMT/UML: Process and Products.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine

Copyright © 1998, Dr. Dobb's Journal

Spring 1998 - Software Careers

FEATURES

PROGRAMMING JOBS: WHAT, WHERE, AND HOW MUCH?

by Deirdre Blake

The job market for programmers is hot across the country, but not all areas are created equal. Our regional job-market report shows that, while demand is high all over, the companies doing the hiring are very different.

MIT'S VI-A INTERNSHIP PROGRAM

by Markus Zahn

Internships are one of the best ways to learn about the real world of work. Dr. Zahn, the director of MIT's VI-A internship program, describes MIT's cooperative work/study program.

THE 1997 SANS SYSTEM ADMINISTRATION AND SECURITY SALARY SURVEY

by Alan Paller

Programmers aren't the only information-technology professionals in demand. As Alan reports here, jobs for system administrators and security professionals are plentiful, too.

PASSING THE C++ TEST

by Al Stevens

What kind of questions can you expect if you are interviewing for a programming job that requires C++? Al provides a list of questions and answers that all C++ applicants should know.

PROGRAMMERS IN THE DRIVER'S SEAT

by Ilana DeBare

As the Year 2000 debacle edges closer, Cobol programmers are in high demand, and companies are willing to offer some big incentives to hire and keep knowledgeable programmers. But what will they do when the crisis is over?

SKILLS ACQUISITION

by Marian Corcoran

For programmers, skill acquisition doesn't stop when you graduate from college--it's a lifelong requirement, if you want to stay in demand.

HOW WILL THE SOFTWARE TALENT SHORTAGE END?

by Avron Barr and Shirley Tessler

Avron and Shirley, codirectors of the Stanford Computer Industry Project, argue that the programmer shortage is a unique problem that will not simply go away like labor shortages in the past.

INTERNET JOB SEARCH STRATEGIES

by Brian D. Krueger

Brian tells you which Internet sites are the best for both finding job opportunities and posting your résumé, and explains how best to prepare your résumé for electronic posting.

Editorial

The Programming Shortage: Fact or Fiction?

by Eugene Eric Kim


Fall 1998 - Software Careers

FEATURES

A Career Management Model

by Kurt Sandholtz

Kurt presents the Four Stages career management model, which focuses on career growth in terms of development stages.

The United States IT Workforce Shortage

by Howard Rubin

From Howard's perspective, the IT worker shortage is real and its impact will dwarf the technology issues, such as the Internet, e-commerce, and HDTV.

Surviving the Technical Interview

by Jay Sutaria

Interviews for technical jobs are perhaps the most intimidating and mysterious events that job hunters experience. Jay discusses ways in which you can better showcase your skills and experience.

Becoming a Computer Consultant

by Janet Ruhl

The term "computer consultant" describes three different career paths. Janet examines the differences among them, and shares what it takes to succeed at each.

Becoming Sun Certified in Java

by Barry Boone

A "Sun Certified Java Programmer" identifies you as someone who has taken the time to be recognized as an expert.

Working Overseas

by Gary M. Stern

Working overseas can give a boost to your career and provide you with lifelong experiences.

Making Your Performance Review Work for You

by Paul J. Kostek

The performance review can be a useful means of collecting feedback for guiding your career.

Training for Internationalization

by Debra Webster

Internationalization involves writing language and locale-neutral software and lead to local jobs for global markets.

Editorial

Reading, 'Riting, and R-Trees

by Eugene Eric Kim


January 1999 -- Scripting Languages

FEATURES

AUTOMATING THE WEB WITH WEBL

by Hannes Marais and Tom Rodeheffer

WebL, a freely available scripting language written in Java, is ideal for prototyping web applications. Hannes and Tom describe WebL, then show how you can use it by implementing a meta-search engine that combines search results from the AltaVista and HotBot public-search services.

LITTLE LANGUAGES WITH LEX, YACC, AND MFC

by Jason Shankel

Jason shows how to use lex, yacc, and MFC to create integrated Win32 development environments for little languages. In doing so, he develops "Slide," short for the "Small Language Integrated Development Environment," and integrates it with lex and yacc.

FULL-TEXT SEARCHING IN PERL

by Tim Kientzle

Full-text search engines are popular these days, and not just on web sites. Tim shows how you can build a fast full-text search capability using Perl's built-in database support.

EXTENDING JSCRIPT

by Paul Butcher

Paul extends Microsoft's JScript scripting engine by adding support for constructors and arrays. In the process, he presents JScriptTest, a program that displays a UI that lets you type and execute JScript source.

PARSING EXPRESSIONS IN JAVA

by Cliff Berg

Cliff presents a Java expression parser that complements the tokenizer classes that are already built into the language.

PERSONALJAVA & INFORMATION APPLIANCES, PART I

by Jaison Dolvane and Kumanan Yogaratnam

PersonalJava is the Java Application Environment designed specifically for low-resource environments and diverse visual displays. Our authors share some of the lessons they learned while developing Kalos Espresso, a lightweight Java UI toolkit optimized for PersonalJava environments.

EMBEDDED SYSTEMS

FICL: AN EMBEDDABLE EXTENSION LANGUAGE INTERPRETER

by John Sadler

Ficl, short for "Forth-Inspired Command Language," is an interpreter that has a system interface similar in spirit to Tcl, but specifically designed for embedded systems with minimal resources.

INTERNET PROGRAMMING

DYNAMICALLY RECONFIGURABLE SERVERS

by Ron Klatchko

The dynamically reconfigurable server Ron presents here is implemented in Python, a portable, interpreted, extensible object-oriented programming language.

PROGRAMMER'S TOOLCHEST

SCRIPTS FOR WINDOWS SCRIPTING HOST

by John Goalby

Microsoft's Windows Scripting Host (WSH) is a language-independent batch-processing language for Win32. John presents a number of self-contained scripts that are useful to software developers, not just systems administrators.

MATLAB AS A SCRIPTING LANGUAGE

by Peter Webb and Gregory V. Wilson

The numerical language Matlab has evolved to serve the role in science and engineering that scripting languages such as Visual Basic and Perl have served in nonnumerical applications.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Among other topics, Michael discusses Squeak, a freely available implementation of Smalltalk that includes a web browser and mail client.

C PROGRAMMING

by Al Stevens

Continuing the saga of his Quincy 99 and D-Flat 2000 projects, Al introduces a programmers' editor that addresses some of the deficiencies of the Win32 CEdit control.

JAVA Q&A

by Kenneth Hittleman and Ted Leung

Are you ready to move from JDK 1.1 to JDK 1.2? Ken and Ted tell you what to expect.

ALGORITHM ALLEY

by Sasha Gontmakher and Ilan Horn

Doing efficient memory allocation requires first understanding how real-world programs use memory. Sasha and Ilan discuss common patterns of memory usage, and use that to develop a practical memory manager.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

The future of Sweden depends on how good Dr. Ecco is at pattern recognition.

PROGRAMMER'S BOOKSHELF

by Paul Lu and William Stallings

This month, Paul takes a look at Tim Budd's Data Structures in C++: Using the Standard Template Library, while William examines Gigabit Ethernet: Migrating to High-Bandwidth LANs, by Kadambi, Crayford, and Kalkunte, and Rich Seifert's Gigabit Ethernet: Technology and Applications for High-Speed LANs.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine


February 1999 -- Java

FEATURES

JAVA AND LIGHTWEIGHT COMPONENTS

by David K. Perelman-Hall

JDK 1.1 lightweight components let you give programs exactly the same look-and-feel -- no matter which platform hosts the VM. To examine lightweight component development, David presents his dph.awt.lightweight package.

A JAVA APPLET SEARCH ENGINE

by Tim Kientzle

Most search engines are designed for web sites. The Java search engine Tim presents here, however, was designed for use on HTML-based CD-ROMs. The differences might surprise you.

THE JAVA 2D API

by Bill Loeb

The Java 2D API is a set of functions that is a much more flexible and full-featured rendering package than previous versions of the Abstract Windowing Toolkit (AWT). It provides enhanced graphics, text, and image handling, supports color definition and composition, and is extensible.

WRITING JAVABEAN PROPERTY EDITORS

by Morgan Kinne

JavaBeans are reusable software components that can be manipulated by visual programming tools. Morgan shows how you build property editors, focusing on the relationships between the visual tool, property editor, and bean.

PERSONALJAVA AND INFORMATION APPLIANCES, PART II

by Jaison Dolvane and Kumanan Yogaratnam

In the second installment of this two-part article, Jaison and Kumanan examine the hardware requirements for PersonalJava applications, discuss the embedded operating systems that support PersonalJava, and put PersonalJava and Kalos Expresso to work by developing a phone directory application for a web-phone appliance.

JPERL:ACCESSING PERL FROM JAVA

by S. Balamurugan

The Jperl package, written in C++, provides an interface to Perl from Java, and Jperl's APIs also make accessing Perl from C++ simple. This article outlines the capabilities of Jperl and explores its features.

EMBEDDED SYSTEMS

JAVA CARD APPLICATION DEVELOPMENT

by Darryl Barnes

Although the Java Card specification is a subset of Java designed for smart card applications, the Java Card API has little in common with the standard Java API. Darryl discusses Java Card and presents a typical smart card applet.

INTERNET PROGRAMMING

CREATING SIGNED, PERSISTENT JAVA APPLETS

by Paul Brigner

Both Netscape and Microsoft have facilities for signed, persistent applet deployment that extends the Java security framework. This should come as no surprise; however, that doesn't mean that you use these facilities the same way.

PROGRAMMER'S TOOLCHEST

COMPARING WFC AND JFC

by David M. Johnson

David compares Microsoft's Windows Foundation Classes (WFC) with Sun's Java Foundation Classes (JFC) framework by developing an Internet Relay Chat (IRC) chat-client called "Relay."

DESIGN BY INTERFACE

by Robb Shecter

Robb presents step-by-step instructions for making applications both reusable and independent using a technique called "design by interface" and the NetComponents class library from ORO.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Carl Sassenrath is a rebel with a cause -- and that cause is Rebol, a messaging-based programming language designed for networks and the Internet.

C PROGRAMMING

by Al Stevens

Quincy 99 goes into testing, as Al prepares it for use for developing D-Flat 2000, a Win32 application framework that uses Standard C++ features.

JAVA Q&A

by Dave Angel and Andy Wilson

Dave and Andy show how you can store a Java app in a self-executing encrypted file. In doing so, they present CodePacker, a custom loader that is both easy to install -- it's self-extracting -- and secure.

ALGORITHM ALLEY

by Andrew Colin

The analytic hierarchy process (AHP) is a decision-making tool reducing complex decisions to a series of comparisons and rankings. The results are then combined to give a single, unequivocal result.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Dr. Ecco and Liane dig up some dirt about archeologists in this month's installment.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson

Greg looks at a number of books this month, including The Essence of SQL, by David Rozenshtein, The Perl Cookbook, by Tom Christiansen and Nathan Torkington, High Performance Computing, Second Edition, by Kevin Dowd and Charles Severance, JavaScript for the World Wide Web, Second Edition, by Tom Negrino and Dori Smith, AntiPatterns, by William J. Brown, Raphael C. Malveau, Hays W. McCormick III, and Thomas J. Mowbray, and Beginning Object-Oriented Analysis and Design with C++, by Jesse Liberty.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine


March 1999 -- Simulation and Emulation

FEATURES

SIMULATING SEVERE WEATHER

by Louis J. Wicker

Simulating severe storms and tornadoes takes lots of computer power. Louis examines severe weather simulation, starting with equations for turbulence and ending with Fortran source code.

HIERARCHICAL LOGIC SIMULATION

by Donald C. Craig

Donald presents an approach by which hardware components can be represented and simulated hierarchically using C++. His simulation strategy is completely asynchronous, meaning that the concept of global time has been abandoned in favor of each component maintaining its own concept of local time.

THE JAVA PROVIDER ARCHITECTURE

by Paul Tremblett

Paul uses the JDK's Java Cryptography Extension to implement a cipher algorithm that simulates the Enigma machine made famous by Germany in World War II.

WOOKIE: A 68HC11 EMULATOR

by Kalle Anderson, Jason Buttron, Paul Clarke, and Matt Enwald

WOOKIE, short for the "Wireless Object-Oriented Kindly Interfaced Emulator," is a Win32 emulator for 68HC11-based software development. Our authors discuss both its development and use. Wilbert Bilderbeek, Harry Broeders, and Alex van Rooijen then introduce the THRSim11 68HC11 simulator which they designed and built.

THE WINDOWS CE EMULATOR

by Aspi Havewala

The Windows CE SDK includes a functional emulation shell that mimics a Windows CE Handheld PC (HPC) shell. This emulation environment makes it possible for you to jumpstart development by prototyping applications.

EMBEDDED SYSTEMS

LOW-LEVEL APIS FOR EMBEDDED SYSTEMS

by Tom Cunningham and Chad Peckham

While desktop APIs address desktop-oriented issues such as window manipulation, process management, and file/database access, APIs for embedded and real-time systems tackle debugger interfacing, task management, low-level device I/O, and the like. Tom and Chad examine a pair of APIs that are typical of low-level programming interfaces in embedded environments.

INTERNET PROGRAMMING

UNDERSTANDING LDAP

by Basit Hussain

LDAP, short for "Lightweight Directory Access Protocol," provides a platform-independent mechanism for searching, storing, and replicating information. Basit examines LDAP and presents examples of how you can use it.

PROGRAMMER'S TOOLCHEST

COMPILER CONSTRUCTION WITH ANTLR AND JAVA

by Gary L. Schaps

ANTLR, short for "Another Tool for Language Recognition," is a language tool that gives you a framework for constructing recognizers, compilers, and translators for C, C++, and Java.

CONTROLLING MOTION-TRACKING DEVICES

by Mike Harrington

Motion-tracking devices, which report on an object's position and/or orientation in real time as it moves, are necessary to navigate 3D simulated worlds.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Nanotechnology is a big deal in Michael's mind this month.

C PROGRAMMING

by Al Stevens

Al puts Quincy 99 and D-Flat 2000 on hold as he continues his discussion of Standard C++.

JAVA Q&A

by Andrew Wilson

How do you implement Microsoft's delegate keyword? Andrew presents classes that mimic the delegate keyword, letting you build a complex user interface with simpler event-handling code.

ALGORITHM ALLEY

by Tim Kientzle

The Discrete Cosine Transform (DCT) is a crucial part of modern image and sound compression. Tim discusses several fast algorithms for computing the 8-point DCT and IDCT.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Ecco and crew look for the most efficient way to mix trains, stations, and passengers.

PROGRAMMER'S BOOKSHELF

by Jonathan Amsterdam

Jonathan catches up on Dennis Shasha and Cathy Lazere's Out of Their Minds, and Peter G. Neumann's Computer-Related Risks.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine


DDJ, April 1999 -- Algorithms

FEATURES

REGULAR EXPRESSIONS

by Brian W. Kernighan and Rob Pike

Regular expressions, one of the most broadly applicable of programmer's tools, provide a compact and expressive notation for describing patterns of text. They are also algorithmically interesting, easy to implement, and highly useful. Brian and Rob, who are researchers at Bell Labs and the authors of The Practice of Programming, present a compact implementation of grep that uses regular expressions.

DESIGNING ALGORITHMS INCREMENTALLY

by Udi Manber

The incremental approach to addressing algorithmic problems Udi presents here is particularly useful as a way of arriving at possible new algorithms.

THREAD COMMUNICATION IN PARALLEL ALGORITHMS

by Lalit Pant

With the increasing availability of multiprocessing hardware, thread-based parallel algorithms are becoming more and more important. Lalit presents thread communication mechanisms for use within parallel algorithms.

SIMULATED RECURSION

by Earl Augusta

Recursion is a powerful tool for attacking problems where questions are repeated and the same actions are performed. C and Pascal allow recursion, but languages like COBOL generally forbid it.

THE HMAC ALGORITHM

by William Stallings

The Message Authentication Code (MAC) is a widely used technique for performing message authentication. HMAC (short for "keyed-Hashing for Message Authentication"), a variation on the MAC algorithm, has emerged as an Internet standard for a variety of applications.

THE PALMPILOT'S INFRARED PORT

by A.J. Musgrove

One of the powerful Palm III features is its support of data exchange over InfraRed (IR) ports. A.J. explores programming the IR port by presenting both an IR test application and a version of the venerable game BattleShip that can be played between two players via the IR port.

EMBEDDED SYSTEMS

PARALLEL FUNCTIONAL DECISION TREES

by Rene Schaad

Rene presents an approach to programming reactive situated agents that's based on parallel functional decision trees. In the process, he introduces "InSitu," a C++ class library and run-time system he's developed and tested on mobile robots.

INTERNET PROGRAMMING

EXAMINING PERLDAP

by Troy Neeriemer

Netscape's PerLDAP is an important tool for both programmers and administrators because it provides a mechanism for accessing directory information from Perl. Troy presents a high-level overview of PerLDAP, along with details of how you can use it.

PROGRAMMER'S TOOLCHEST

EXAMINING JPYTHON

by Kirby W. Angell

JPython is a freely available version of Python implemented in 100 percent pure Java. Since JPython is written in Java, it is easy to include the JPython packages in a Java application and use JPython as your application's scripting engine. JPython also makes an excellent tool for prototyping Java applets that are embedded in web browsers.

PORTING C++ CODE FROM NT TO UNIX

by George F. Frazier

When porting large C++ programs from Windows to UNIX, it makes sense to use a tool that implements the Windows API natively on the target system. George uses MainSoft's MainWin XDE (eXtended Development Environment) 3.1 to port a major application from Windows NT to Solaris.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael separates the blarney from the chaff this month, as he meanders through the world of computing.

C PROGRAMMING

by Al Stevens

Before putting the "scroll" back in his scrolling editor, Al asks the questions "What is Java?" and "Who the heck you gonna believe, anyway?"

JAVA Q&A

by Steve Ball and John Miller Crawford

A Java applet may seem to be an independent program, but in one crucial aspect it is not--if you change a static field of a class used within an applet, that change pervades all applets. Steve and John examine the ins-and-outs of dealing with this particularity.

ALGORITHM ALLEY

by Jon Bentley

This month, Jon presents tools and techniques for analyzing the performance of algorithms. Next month, he examines how code-tuning techniques speed up the various algorithms.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

The plans for a modular spacestation are up in the air, until Dr. Ecco and crew introduce some down-to-earth solutions.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson and Steve Chartley

Greg looks at Tom Armstrong's The Active Template Library, Jim Coplien's Multi-Paradigm DESIGN for C++, and Carlton Egremont's Mr. Bunny's Guide to Active X, while Steve Chartley tackles Patterns in Java, by Mark Grand.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine


DDJ, May 1999 -- Database Development

FEATURES

OBJECT PERSISTENCE: BEYOND SERIALIZATION

by Timo Salo, Justin Hill, Scott Rich, Chuck Bridgham, and Daniel Berg

Our authors describe techniques and frameworks necessary to successfully implement scalable object persistence for complex database systems. Much of the technology they examine has been incorporated in development tools ranging from VisualAge for Java, to EJB tools for WebSphere.

JAVA PROXIES FOR DATABASE OBJECTS

by Paul Lipton

Java proxy technology lets you define database object schema using the database ODL. To illustrate how such a technology might be implemented, Paul provides examples based on the Jasmine object-oriented database.

VBSCRIPT AND SQL CALENDARS

by John Donovan Lambert

John presents the VBScripts he uses for inputting SQL results into a web calendar, and discusses how you can port these scripts to Java, Perl, Cold Fusion, or whatever language you prefer.

THE CVS DATA FORMAT

by Cesar A. Gonzalez Perez

The CVS data format stores cartographic data for a specific geographic area into a single file. Cesar examines the format, then presents a tool for converting CVS files into DXF format.

AGENT ITINERARIES

by Russell P. Lentini, Goutham P. Rao, and Jon N. Thies

Instead of examining itineraries in the traditional way as a list of tasks to be performed by agents, our authors treat itineraries as a metaprogram -- a way of programming an agent and inadvertently its goal. To illustrate, they'll present an itinerary that performs a database query.

JAVA AND DIGITAL IMAGES

by David H. Martin and Johnny Martin

Capturing, storing, and retrieving images is an often-overlooked feature that many applications could benefit from. David and Johnny describe "Grabber for Java," an API that encapsulates the functionality necessary for video capture.

EMBEDDED SYSTEMS

THE SPARK REAL-TIME KERNEL

by Anatoly Kotlarsky

SPARK, short for "Small Portable Adjustable Real-time Kernel," is a royalty-free, fast, tiny, portable real-time kernel. Anatoly describes how he used it to build a video bar-code scanner.

INTERNET PROGRAMMING

AUTOMATED TESTING FOR WEB APPLICATIONS

by M. Selvakumar

The technique for automated web-user-interface testing presented here is based on HTML, JavaScript, and CGI, and implemented for Netscape Communicator 4.04 and Apache 1.2.

PROGRAMMER'S TOOLCHEST

THE VERSION CONTROL PROCESS

by Aspi Havewala

Source-code version control is a set of working rules for code sharing that lets developers modify files in an exclusive way. As such, it is one of the most important, yet least understood, areas of software development.

COLUMNS

C PROGRAMMING

by Al Stevens

Al ponders the question, "What's in an argv?" and speculates on why the answer is different for DOS and UNIX developers.

JAVA Q&A

by Lou Grinzo

How do you run untrusted classes? Lou takes a look at a couple of different answers to this question.

ALGORITHM ALLEY

by Jon Bentley

Last month, Jon presented techniques for analyzing the performance of algorithms. This month, he examines how code-tuning techniques speed up the various algorithms.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Dr. Ecco joins forces with the NSA, FBI, and other crime-stoppers to help fight web terrorism.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson and William Stallings

Greg examines Component Software: Beyond Object-Oriented Programming, by Clemens Szyperski, while William takes a look at Neil J. Gunther's The Practical Performance Analyst: Performance-By-Design Techniques for Distributed Systems.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine


DDJ, June 1999 -- Object-Oriented Design

FEATURES

DR. DOBB'S JOURNAL 1999 EXCELLENCE IN PROGRAMMING AWARDS

by Jonathan Erickson

Guido van Rossum and Donald Becker are the recipients of this year's Excellence in Programming Awards for their commitment to technical innovation and open communication.

USING THE COATS-MELLON OPERATIONAL SPECIFICATION

by Mark Coats, Mark McCloskey, and Theo Molla

The Coats-Mellon Operational Specification is a methodology for defining user-based scenarios that represent a complete and accurate model of system behavior. This article describes how the methodology has been used with real-world projects.

JAVA PORTABILITY BY DESIGN

by John J. Rofrano

Factory classes ensure that application code remains unaware of the platform it's running on. John describes how his team used factory classes when building an e-commerce catalog search engine written entirely in Java.

CROSS-PLATFORM DESIGN STRATEGIES

by Bob Krause

Bob discusses the cross-platform architecture his company uses when building applications that run on multiple platforms. In doing so, he presents a set of thread classes developed for use on both Macintosh and Windows.

A DNA SEQUENCE CLASS IN PERL

by Lincoln Stein

The Human Genome Project is a multinational project to determine the entire human DNA sequence by the year 2003. Lincoln describes some of Perl's object-oriented features in his Sequence library, which manipulates DNA sequences.

EXTENSIBILITY IN TCL

by John Ousterhout

One of the major reasons the Tcl scripting language has been widely adopted is its extensibility. Tcl's creator describes the design decisions he made to ensure this quality.

WIN32 DRIVERS FOR DIGITAL/VIDEO CAMCORDERS

by Thomas Tewell

The only thing wrong with the emerging class of digital/video camcorders is the lack of software to use them. Consequently, Thomas wrote a complete IEEE 1394 class driver package for Windows 98 and his new Sony DCR-PC10 digital/video camcorder.

EMBEDDED SYSTEMS

ROTATING A WEATHER MAP

by Robert D. Grappel

Robert describes and implements an algorithm he developed to efficiently perform rotation of graphical weather maps used by airplane pilots. He then suggests techniques you can use to optimize other time-limited computer applications.

INTERNET PROGRAMMING

CONCEPT-ORIENTED PROGRAMMING

by Brian McConnell

Concept-oriented programming makes it possible to write software that requires far less bandwidth to deliver, and thereby to increase apparent delivery speeds significantly. It also creates a mechanism for disseminating reusable code throughout the Internet.

PROGRAMMER'S TOOLCHEST

A VIDEO FOR WINDOWS ACTIVEX CONTROL

by Ofer LaOr

Video for Windows lets applications interact with video-capture cards. Ofer describes oVFW, an ActiveX control that encapsulates the Video for Windows API so that Visual Basic applications can easily interact with video-capture cards.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Did Xerox PARC blow it? Has HP lost its way? Can Linux really be for dummies? Michael asks and answers these and other questions.

C PROGRAMMING

by Al Stevens

Al's project this month is a Jukebox that maintains a list of standard MIDI Format files.

JAVA Q&A

by James Begole, Philip L. Isenhour, and Clifford A. Shaffer

Can JavaBeans be shared? You bet, and our authors show you how. Their approach is based on a replicated architecture, where each collaborator maintains a copy of the shared data.

ALGORITHM ALLEY

by Bill McDaniel

QuickSort is nice, but it's usually implemented using statically allocated arrays, and it does not take advantage of already-sorted data. Bill's variation of the Merge Sort addresses both of these weaknesses.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Dr. Ecco and Liane discover that there's an art to putting together the pieces of a geometric puzzle.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson

The focus of Greg's attention this month is The Practice of Programming, by Brian W. Kernighan and Rob Pike; How to Build a Beowulf, by Thomas L. Sterling, John Salmon, Donald J. Becker, and Daniel F. Savarese; Developing Visual Basic Add-ins, by Steven Roman; and Graph Drawing: Algorithms for the Visualization of Graphs, by Guiseppe di Battista, Peter Eades, Roberto Tamassia, and Ioannis G. Tollis.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine


DDJ, July 1999 -- Communications and Networking

FEATURES

JINI AND NETWORK-ENABLED DEVICES

by Hinkmond Wong

Jini is a technology designed to let anyone connect any device to any network in a straightforward manner. Hinkmond shows how you can use Sun's EmbeddedJava tools to build a system that incorporates Jini technology into small memory footprint, network-enabled devices.

INTERNET TELEPHONY PROTOCOLS

by Linden deCarmo

Linden examines the strengths and weaknesses of SIP and H.323, the two dominant "Voice over the Internet" protocols. He also takes a look at a new challenger -- the Media Gateway Control Protocol.

X.509 CERTIFICATES

by Paul Tremblett

Paul unravels X.509 certificates, one of the most popular computer security standards specifying the contents of digital certificates, by showing how you can decode and display them in a readable form.

THE HTTPSYNC INCREMENTAL UPDATE UTILITY

by Forrest J. Cavalier III

HTTPsync is client-side-only software that performs fast and efficient incremental updates to synchronize collections of files. And only the standard features of HTTP are used.

JAVA, SYNCHRONIZATION, & THE PALMPILOT

by Tilo Christ

Tilo's SyncBuilder framework lets you write Java applications that communicate with Palm Computing devices and that run on any platform.

EMBEDDED SYSTEMS

PROTOCOLS FOR NICHE AREA NETWORKS

by Jaromir Chocholac

SimpleChat, the Niche Area Network protocol Jaromir introduces here, is designed for applications where cost efficiency is more important than very high data rates.

INTERNET PROGRAMMING

AN ARCHITECTURE FOR WEB SERVICES

by David Houlding

David discusses an architecture that facilitates both the publication of distributed object services on the Web and the subsequent reuse of these services by application developers.

PROGRAMMER'S TOOLCHEST

EXAMINING MICROSOFT'S SPEECH SDK

by Peter Davis

Peter shows how to use the Microsoft Speech SDK to voice-enable your Windows apps by adding command-and-control voice recognition to applications.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

1984 -- the year, not the book -- was a watershed in the history of personal computing.

C PROGRAMMING

by Al Stevens

Al reports on what it's like to go on tour with a world-famous author like the legendary Herb Schildt.

JAVA Q&A

by Krishnan Rangaraajan

There are a number of ways to test Java classes. Our author examines conventional techniques, then presents an alternate approach that he feels is superior in many ways.

ALGORITHM ALLEY

by Ron Gutman

B-Tree databases are very efficient with one-dimensional data. Ron shows how Hilbert curves can be used to efficiently manage multidimensional data, with no changes to the underlying database.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Ecco and Liane are challenged by the Borghese Club to win the game of "Flats and Steeps," which is based on the principles of columns and beams.

PROGRAMMER'S BOOKSHELF

by Jeff Taylor

The focus of Jeff's review this month is Linux Network Administrator's Guide, by Olaf Kirch.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine


DDJ, August 1999 -- Visual Programming

FEATURES

THE FORMULATE VISUAL PROGRAMMING LANGUAGE

by Allen Ambler

Visual representations for manipulating structured data help eliminate both complexity and errors in working with structured objects. Formulate, the distributed visual programming language Allen presents here, was designed with these problems in mind.

VISUAL PROGRAMMING AND ASSISTIVE TECHNOLOGY

by Dave Lafever

Sanscript is a visual scripting tool that lets you assemble scripts from graphic functions connected together in a dataflow-like diagram. Dave has found Sanscript ideal for developing assistive technology applications.

END-USER PROGRAMMABLE SIMULATIONS

by Andri Ioannidou and Alexander Repenning

Simulations provide powerful means for communicating complex ideas. Andri and Alex show how AgentSheets can enable end users to build their own interactive simulations and export those simulations as Java applets or JavaBeans to the Web.

MINDSTORMS ROBOTICS AND VISUAL C++

by David Wendt

Dave presents a Visual C++ MFC program that combines Mindstorms RCX code with C++ code to control a robot's behavior.

SIMULATING GRAPHS AS PHYSICAL SYSTEMS

by Arne Frick, Georg Sander, and Kathleen Wang

Automatically generating comprehensible graphs for large amounts of data is a difficult problem in computer science. Our authors describe an algorithm based on a physical system of springs for drawing a useful and aesthetically pleasing graph from a large data set.

IEEE 1394 CONFIGURATION ROM DECODER

by William F. Alexander

Bill presents the DUMPROM utility that lets you examine the configuration ROM of any 1394 device. In the process, he examines the 1394 addressing scheme and other issues.

EMBEDDED SYSTEMS

A TASK DISPATCHER FOR EMBEDDED SYSTEMS

by Ron Kreymborg

Task dispatchers are small executive programs that control switches and other inputs. Ron presents a dispatcher implemented in C that's small enough to be reliably implemented in the assembly language of the destination processor.

INTERNET PROGRAMMING

USING INTERNET EXPLORER'S HTMLPARSER

by Andrew Tucker

Microsoft's Internet Explorer 4.0 browser provides COM interfaces that let you easily load and parse HTML without actually having to display it. Andrew describes these interfaces and implements a C++ class that lets you take advantage of them.

PROGRAMMER'S TOOLCHEST

EXTENDERS, UDFs, AND STORED PROCEDURES

by Ken North

The emerging generation of feature-rich applications required multimedia, geospatial data, and types that are more complex than traditional SQL rows and columns. Consequently, developers require sophisticated database managers for complex data, user-defined functions (UDFs), and user-defined types (UDTs).

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Between Alan Cooper's new book The Inmates Are Running the Asylum and Jerry Pournelle's "Chaos Manor," Michael is having a hard time keeping up with Jerry's kids.

C PROGRAMMING

by Al Stevens

Dummies for dummies? Yes, that, C++, and more -- including a wild argument on wild arguments.

JAVA Q&A

by W. David Pitt

Can Java handle exception handling? You bet, and David shows you how in this month's column.

ALGORITHM ALLEY

by Steven Pigeon

Wavelets offer an attractive alternative when it comes to image compression. Steven gives us a practical guide to image compression via wavelets, and compares the results to more familiar techniques, such as JPEG.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Dr. Ecco and sidekick Liane try to solve tomorrow's problems at NASA today.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson

Greg takes a quick look at Jim Blinn's Corner: A Trip Down the Graphics Pipeline and Jim Blinn's Corner: Dirty Pixels, both by (you guessed it) Jim Blinn, Essential COM, by Don Box, Effective COM, by Don Box, Keith Brown, Tim Ewald, and Chris Sells, Web Navigation, by Jennifer Fleming, The Computational Beauty of Nature, by Gary William Flake, Optimizing C++, by Steve Heller, Practical Software Requirements, by Benjamin L. Kovitz, and DNA Computing, by Gheorghe Paun, Grzegorz Rozenberg, and Arto Salomaa.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine


DDJ, September 1999 -- Graphics Programming

FEATURES

JAVA 2 GRAPHICS RENDERING

by Torpum Jannak

The optimized graphics-rendering pipeline Torpum presents here addresses performance concerns you may encounter when developing scientific visualization, action-based games, or other resource-demanding Java 2 applications.

GAMMA CORRECTION

by Angus Dorbie

Gamma correction is essential for good quality image generation. Angus examines the problems associated with gamma correction, focusing on why it is important to simulation in particular.

MMX TECHNOLOGY CODE OPTIMIZATION

by Max I. Fomitchev

Max examines MMX-code optimization techniques and shows how you can achieve maximum speed on the Intel Pentium II and AMD K6-2 processors.

WRITING HIGH-PERFORMANCE GRAPHICAL JAVA COMPONENTS

by Harold Shinsato

Harold presents tips and tricks for writing high-performance, computationally intensive, graphical Java components.

PORTING COMMUNICATIONS SOFTWARE TO WINDOWS CE

by Oliver Diener

According to Microsoft, porting Win32 apps to Windows CE is a piece of cake. The reality is much different, however. Oliver shares some hard-won secrets he discovered when porting the LUCA data communications framework from Windows 95/NT to CE.

EMBEDDED SYSTEMS

DEVELOPING CUSTOM NETWORK PROTOCOLS

by Curtis Schwaderer

Although custom protocols are common in the world of real-time embedded systems, creating them can be a problem. For Curtis, the solution is to create protocols that are interoperable with other protocols written for the same framework.

INTERNET PROGRAMMING

EVENT-BASED SERVERS IN TCL

by Stephen Uhler

Event-based programming is a powerful alternative to threads when building high-speed network servers. Stephen implements a web server in Tcl that is based on events and callbacks.

PROGRAMMER'S TOOLCHEST

WiT & HIERARCHICAL TREES

by Frank Höwing

WiT, a visual-programming package from Logical Vision, was originally designed for designing and developing image-processing algorithms and applications. Frank uses it to create HopTree, a Visual Basic app that recursively scans a file and creates a tree view of the hierarchical operators used.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael's column this month was a long time coming -- but was worth the wait.

C PROGRAMMING

by Al Stevens

After reporting on his trip to Amsterdam and examining Open Source with an open mind, Al introduces Storch, a software machine that plays back WAV files and includes an audio record function.

JAVA Q&A

by Andy Wilson

The Java Virtual Machine Profiler Interface lets you build tools that collect events about the state of the virtual machine. These events then let you gather information about how the VM and your Java application actually run.

ALGORITHM ALLEY

by Thomas E. Janzen

Thomas examines a trio of algorithms for generating simple -- yet precise -- line drawings from complicated -- yet imprecise -- 3D models.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Ecco and Liane have their heads in the clouds once again, as they try to solve space station designer Jordan Tyler's latest cargo port problems.

PROGRAMMER'S BOOKSHELF

by Lou Grinzo and Laryn Fernandes

Lou examines Open Sources: Voices of the Open Source Revolution, edited by Chris DiBona, Sam Ockman, and Mark Stone, while Laryn takes a look at the third edition of David M. Geary's Graphic Java 2: Mastering the JFC.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by the DDJ staff

OF INTEREST

by Eugene Eric Kim

SWAINE'S FLAMES

by Michael Swaine


DDJ, October 1999 -- C/C++ Programming

FEATURES

DATA STRUCTURES AS OBJECTS

by Jiri Soukup

Improving programmer productivity becomes increasingly difficult as programs grow more and more complex. Jiri examines what's involved in writing complex programs, which include a complex interaction among objects and employ many data structures and design patterns.

IMPLEMENTING OPERATOR->* FOR SMART POINTERS

by Scott Meyers

If you want to make smart pointers as behaviorally compatible with built-in pointers as possible, you should support operator->* just like built-in pointers do. Scott shows you how.

IMPROVING C++ PROGRAM PERFORMANCE

by Stanley Lippman

Stanley examines the three most common strategies for C++ program speedup, then points out that it is often enough to simply review the code for inappropriate C++ programming idioms.

PSEUDO-INCREMENTAL LINKING FOR C/C++

by William A. Hoffman and Rupert W. Curwen

Bill and Rupert describe a method for managing link/run time that provides fast link/run time during development, without sacrificing run time in the final product, and without the use of customized, nonstandard linking software.

THE WIRELESS APPLICATION PROTOCOL

by Steve Mann

WAP, short for "Wireless Application Protocol," is a multilayer communications architecture that borrows heavily from existing Internet standards while solving problems specific to wireless networks.

EMBEDDED SYSTEMS

THE SMALL SCRIPTING LANGUAGE

by Thiadmer Riemersma

Small, described as "Small-C" without the "C," is a typeless, 32-bit extension language with a C-like syntax that features fast execution speed, stability, simplicity, and a small footprint.

INTERNET PROGRAMMING

HTML THIN CLIENT AND TRANSACTIONS

by Jean-François Touchette

Jean-François shows how you can implement reliable, nonrepeatable transactions using a technique that is applicable to any Java Server Development Kit-based architecture.

PROGRAMMER'S TOOLCHEST

PETE: THE PORTABLE EXPRESSION TEMPLATE ENGINE

by Scott Haney, James Crotinger, Steve Karmesin, and Stephen Smith

PETE, short for "Portable Expression Template Engine," is a C++ framework that lets users easily add expression-template functionality to container classes and perform complex expression manipulations.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael takes a byte of the Big Apple, as he travels cross-country to attend MacWorld Expo NY '99, where he learned about the iBook -- and more!

C PROGRAMMING

by Al Stevens

In this brief column, Al reports on his visit to the 9th Annual Shareware Conference.

JAVA Q&A

by Evan Easton

In C and C++, enums let you define a constrained set of options for an API parameter. But Java doesn't directly support this concept. Evan presents a workaround for this deficiency using simple generic types.

ALGORITHM ALLEY

by Wesley Bylsma

Median filters are useful tools in digital signal processing. Wesley examines their use for removing impulsive signal noise while maintaining signal trends.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

In this month's installment, Ecco deals with the problems the rich and famous have in divvying up their loot. We all should have such problems.

PROGRAMMER'S BOOKSHELF

by Peter N. Roth

Peter Roth examines a trio of STL books -- Mark Nelson's C++ Programmer's Guide to the Standard Template Library; David Musser and Atul Saini's STL Tutorial And Reference Guide; and Matthew Austern's Generic Programming and the STL.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

edited by Nicholas Baran

OF INTEREST

by Nicholas Baran and Amy Lincicum

SWAINE'S FLAMES

by Michael Swaine


DDJ, November 1999 -- Operating Systems

FEATURES

A CONVERSATION WITH GLENN REEVES

by Jack J. Woehr

Pathfinder was a decade-long program of robotic exploration of the planet Mars. Glenn Reeves, the mission's "Flight Software Cognizant Engineer," chats with Jack Woehr about Pathfinder and what's involved in writing software for extraterrestrial exploration.

LINUX, REAL-TIME LINUX, & IPC

by Frederick M. Proctor

When dealing with real-time systems, IPC overhead becomes important. Fred examines two of the best IPC mechanisms available under Linux -- FIFO and shared memory.

INSIDE WINDOWS NT SYSTEM DATA

by Sven B. Schreiber

Sven untangles the mysterious Windows NT NtQuerySystemInformation function.

EXTENDING THE PALMOS

by Greg Winton

Packaging code into shared libraries can enhance code reuse and reduce in-memory footprints. Greg takes a look at the Palm shared library model and presents a shared library you can use.

THE POWERTV OPERATING SYSTEM

by Morgan Woodson

The PowerTV operating system is designed for set-top boxes and hybrid fiber/cable networks. Morgan provides an overview of the OS, then presents a weather/traffic camera viewer application.

THE BERAYS RAY TRACER

by Regan Russell

Regan presents BeRays, an object-oriented ray-tracer application that makes it easy to plug in new rendering ideas.

DESIGNING THE LEGOS MULTITASKING OPERATING SYSTEM

by Markus L. Noga

LegOS, the tiny, yet powerful operating system Markus built as an alternative to the RCX firmware, supports features such as preemptive multitasking, dynamic memory management, POSIX semaphores, infrared (IR) communication, and more.

EMBEDDED SYSTEMS

JBED: JAVA FOR REAL-TIME SYSTEMS

by Jörgen Tryggvesson, Torbjörn Mattsson, Hansruedi Heeb

Jbed, a small, fast Java Virtual Machine for embedded real-time systems, includes a complete real-time operating system.

INTERNET PROGRAMMING

MACHINE LEARNING & AGENT-BASED COMPUTING

by Zhimin Ding and Li Liu

Zhimin and Li examine the application of machine-learning technology to control software agents, and present MLEngine -- a general-purpose AI engine with real-time learning capability.

PROGRAMMER'S TOOLCHEST

XML AND CORBA

by Dirk Hamstra

The XML|IT toolkit from CareFlow lets you automatically tag results returned from calls to CORBA services, then format them using XML.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

According to Arthur C. Clarke, any sufficiently advanced technology looks like magic. Michael looks at some of the magical moments that are shaping the world.

C PROGRAMMING

by Al Stevens

Al has a thing or two to say about book publishers and programming books, then he turns his attention to this month's project -- TYFC, a framework to "Teach Yourself Framework Classes."

JAVA Q&A

by Krishnan Rangaraajan

Does Java support Design by Contract? Not directly, but as Krishnan shows here, support is still possible.

ALGORITHM ALLEY

by Tim Kientzle

Unsharp masking is a photographic technique that increases the sharpness of photographic images. Tim presents an algorithm that implements this concept.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

One man's Calabaza is another man's pocket watch, as Ecco and Liane discover this month.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson

Greg examines Mr. Bunny's Big Cup o' Java, The Inmates are Running the Asylum, Ready-to-Run Java 3D, The Java 3D API Specification, Advanced CORBA Programming with C++, and Inside the JavaOS Operating System.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by Nick Baran

OF INTEREST

by Nick Baran and Amy Lincicum

SWAINE'S FLAMES

by Michael Swaine


DDJ, December 1999 -- Computer Security

FEATURES

ATTACK TREES

by Bruce Schneier

Attack trees provide a formal, methodical way of describing the security of systems, based on varying attacks. Bruce shows how you can use them to improve security by modeling attacks.

MMPC: AN ALGORITHM FOR ENCRYPTING MULTIPLE MESSAGES

by Jim Shapiro and David Shapiro

To encrypt multiple messages in one transmission, Jim and David implement Ron Rivest's chaffing and package transform. Their technique is optimized to minimize memory usage, while making as few passes through the data as possible.

IP SECURITY PROTOCOLS

by Eva Bozoki

The need to address IPv4's lack of security has prompted the release of a number of standards, protocols, and applications.

ELLIPTIC-CURVE CRYPTOGRAPHY

by Andrew D. Fernandes

Andrew compares elliptic-curve cryptography to other cryptosystems. In the process, he shows how elliptic-curve cryptosystems are built.

A WDM IEEE 1394 CONFIGURATION ROM DECODER

by William F. Alexander

Bill updates his DUMPROM utility by presenting a WDM version that runs on Windows 98 and Windows 2000. DUMPROM lets you examine the configuration ROM of any 1394 device.

EMBEDDED SYSTEMS

TEMPORAL MODELS IN UML

by Bruce Powel Douglass and Srini Vasan

The Unified Modeling Language can be used to capture concurrency models and associated parameters. Bruce and Srini show how, then describe schedulability analysis using Rate Monotonic Analysis.

INTERNET PROGRAMMING

XFDL: THE EXTENSIBLE FORMS DESCRIPTION LANGUAGE

by John Boyer

The Extensible Forms Description Language is an XML extension language that addresses key problems involved with doing electronic commerce on the Web.

PROGRAMMER'S TOOLCHEST

PORTING THE SPICE LIBRARY

by Ed Wright

The SPICE library consists of 952 portable Fortran routines with 79,369 lines of executable code and 153,649 comment lines. Ed shares his experiences in porting this large Fortran library to C, then from C to C++.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

For Michael, James Gleick's new book Faster comes just in time.

C PROGRAMMING

by Al Stevens

Al weathers hurricane Floyd, as he continues to build a C++-based generic, platform-independent graphics library.

JAVA Q&A

by Paul Tremblett

One way to deliver dynamic data content to static HTML pages is by leveraging the power of Java and JavaServer Pages. Paul shows you how.

ALGORITHM ALLEY

by Jon Bentley

Jon is out of sorts, as he grapples with the Merge Sort and similar algorithms this month.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Ecco and Liane puzzle over the rules of friendship that exist on the island of Aresia, which has 27 ethnicities -- and each at the other's throats.

PROGRAMMER'S BOOKSHELF

by Eugene Eric Kim

This month, Eugene examines Netscape Time: The Making of a Billion-Dollar Start-Up That Took on Microsoft, by Jim Clark with Owen Edwards; and Competing on Internet Time: Lessons from Netscape and Its Battle with Microsoft, by Michael E. Cusumano and David B. Yoffie.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by Nick Baran

OF INTEREST

by Nick Baran and Amy Lincicum

SWAINE'S FLAMES

by Michael Swaine


DDJ, Spring 1999 -- Software Careers

What Software Companies Are Looking For

by Eugene Eric Kim

All the technical skills in the world won't get you hired if you don't know how to open a company's doors. DDJ technical editor Eugene Kim interviews two staffing managers to get an insider's view of how companies hire and what they look for in candidates.

The IT Professional Job Market

by Toni Cardarella

When it comes to job titles, there is more variety in the information technology (IT) field than you might think. Toni goes inside a number of companies and industries to find out what they mean when they say "IT professional."

Job Offers and Stock Options

by Jon Buchwald

Stock options are a recruitment tool increasingly used by many businesses. You have to be careful, however, because they may not be the pot of gold you thought they'd be. Jon shares five questions you need to ask yourself, and your employer, when evaluating stock options.

Certification and Microsoft's Windows NT Server

by Emmett Dulaney

Certification is a career development tool that can make you a more attractive job candidate. Emmett finds out what this means when it comes to Windows NT Server from the standpoint of where it fits into the MCSE certification, how it fits into MCP certification, and what skills are required for passing it.

Coding Forever?

by John E. Swanke

Do you really want to make coding your life-long career, or do you see yourself attending board meetings, sitting on a yacht in Pago Pago, or teaching programming to students? Find out what one long-time programmer thinks about programming as a career.

Relocation Packages

by Kelly Tanabe

An often overlooked--and most traumatic--part of the job search is moving. Kelly explains what to look for in your employer's relocation package, and how to find an affordable place to live.

High-Tech Hiring Practices

by Reginald B. Charney

Hiring practices can differ from company to company, and from locale to locale. Consequently, the ideal candidate for an established Route 128 company may not be the same as for a Silicon Valley startup. A software veteran who's worked on both coasts shares some hard won knowledge.

Programmer's Bookshelf

We review some of the best and most essential books for software professionals.

Editorial: Hear, Hear!

by Eugene Eric Kim


DDJ, Fall 1999 -- Software Careers

FEATURES

TRENDS IN HIGH-TECH HIRING PRACTICES

by Reginald B. Charney

Where should you focus your career-development efforts? Reg analyzes technical employment listings to find the answer.

THE WALDEN PROGRAMMER ANALYST APTITUDE TEST

by Bruce Winrow

The Programmer Analyst Aptitude Test from Walden Testing has become an essential tool for evaluating high-tech hires.

GAUGING CORPORATE CULTURE

by Greg Scileppi

Sometimes "fitting in" is more important than the money you make. Greg shares hints and tips for determining corporate culture before you sign on to a new job.

CAREERS IN SYSTEM ADMINISTRATION

by Barbara Dijker

Good system administrators, who possess problem solving skills, people skills, and organizational skills, are in demand in the high-tech job marketplace.


DDJ, October 2000 -- C++ Programming

FEATURES

THE C# PROGRAMMING LANGUAGE

by Scott Wiltamuth

Microsoft's C# programming language promises the power of C++ with the productivity of Visual Basic. Scott builds a Stack class that demonstrates important aspects of the language.

C++ TYPE TRAITS

by John Maddock and Steve Cleary

Generic programming does not have to sink to the lowest common denominator. And therein lies the value of type traits.

MIGRATING TO NAMESPACES

by Herb Sutter

If you aren't familiar with C++ namespaces, you should be because most compilers now support them.

TYPE-BASED ALIAS ANALYSIS

by Mark Mitchell

Aliasing issues make it difficult for compilers to generate code that runs as fast as you might hope. Luckily, the C++ type system makes clear what can and cannot alias.

MEASURING C++ PROGRAM EFFICIENCY

by Derek Truong and Allen Chan

Our authors describe an interactive C++ metrics tool that makes automated metrics gathering a natural part of the development process.

WHAT ARE MACTIMES?

by Dan Farmer

MACtimes are perhaps one of the most potentially valuable forensic tools in your digital detective toolkit. Dan shows how to use them.

MCCONNELL COMPLETE

by John Vlissides

Steve McConnell takes time to talk with us about what it means to be a programmer, entrepreneur, consultant, educator, author, and editor.

THE TINI INTERNET INTERFACE

by Al Williams

Need to build an Internet appliance? Dallas Semiconductor's Tiny InterNet Interface (TINI) board -- that includes a Java-capable CPU, 512 K of nonvolatile memory, and an Ethernet transceiver -- may be the place to start.

EMBEDDED SYSTEMS

PORTABILITY IN C

by James Metzger and William Wright

James and William present techniques they've developed to achieve portability of a real-time signal processing software system consisting of over 300,000 lines of C code.

INTERNET PROGRAMMING

USING APACHE PORTABLE RUN-TIME

by Ryan Bloom

Ryan examines the Apache Portable Run-Time, a library that is designed to address the Apache web server's portability problems.

PROGRAMMER'S TOOLCHEST

CVS VERSION CONTROL AND BRANCH MANAGEMENT

by Michael Simpson

Michael describes how branching and merging works in CVS, a widely used GNU source-code control system.

SOFTWARE CAREERS

TOP 10 CITIES FOR PROGRAMMERS

by Shannon Cochran

JAVA CERTIFICATION

by Marcus Green and David Hecksel

FINDING THE BEST SOFTWARE DEVELOPERS

by John Kaplan

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Zombies come out of the woodwork as Michael looks at the history of the personal computer.

C PROGRAMMING

by Al Stevens

Al shares what he heard at the annual Shareware Conference.

JAVA Q&A

by Karl Moss

How can you measure Java code performance? Karl examines techniques for instrumenting Java code at run time.

ALGORITHM ALLEY

by David Wincelberg

David first presents a simple alphanumeric-ordering function, then describes another function suitable for comparing long filenames.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Saving the X-mammal is the challenge that Liane and Dr. Ecco face this month.

PROGRAMMER'S BOOKSHELF

by Peter N. Roth

Books about the C++ STL are Peter's focus, as he examines STL for C++ Programmers, by Leen Ammeraal; Data Structure Programming, by Joseph Bergin; Designing Components With The C++ STL, by Ulrich Breymann; Data Structures In C++ Using The STL, by Timothy Budd; and Using the STL, by Robert Robson.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by Nicholas Baran

OF INTEREST

by Shannon Cochran

SWAINE'S FLAMES

by Michael Swaine


DDJ, January 2000 -- Scripting and Alternative Languages

FEATURES

SCRIPTING FOR PNUTS

by John H. McCoy

Pnuts is a language, API, and interpreter that provides a thin procedural wrapper with an interactive interface for manipulating Java objects.

REBOL AND E-MAIL SERVICES

by Michael Swaine

When rebuilding his web sites, Michael looked at a number of scripting languages -- and settled on Rebol. He found it easier to use than many other scripting tools, and the kinds of tasks it makes easy are those involving Internet programming.

A DYNAMIC SELECT COMPONENT FOR JAVASCRIPT

by Steve Johnson

Designing a GUI component in Javascript is different than developing a custom widget in more traditional object-oriented environments. Steve shows you how to do it.

PYTHON SERVER PAGES: PART 1

by Kirby W. Angell

Python Server Pages (PSP) is a server-side scripting engine designed along the lines of Microsoft's Active Server Pages (ASP) and Sun's Java Server Pages (JSP).

TOOLS FOR FLEXIBLE SCRIPTING

by Sergei Savchenko

Building scripting languages can be a time-consuming tasks. Sergei presents a pair of tools to simplify development.

EC: A EURO CALCULATOR FOR THE PALM PLATFORM

by Michael Yam

EC, the Euro calculator Michael presents here, involves a number of advanced Palm programming topics, including database and memory management, and the synchronization of data between the device and the desktop.

EMBEDDED SYSTEMS

ECOS: AN OPERATING SYSTEM FOR EMBEDDED SYSTEMS

by Gary Thomas

The Embedded Configurable Operating System (eCos) is a royalty-free, open-source, real-time kernel, targeted at high-performance small embedded systems. As such, eCos has been specifically designed and tuned to run on 32- and 64-bit microprocessors.

INTERNET PROGRAMMING

THE ULTIMATE HOME JUKEBOX

by Charlie Munro and Mark Nelson

Our authors describe how they used MP3 to encode and store on hard disk nearly 300 audio CDs, then networked the music server to create the ultimate home jukebox.

PROGRAMMER'S TOOLCHEST

EXAMINING PERLCOM

by Mike McMillan

PerlCOM, from O'Reilly & Associates, lets you use Perl in any language or application that supports Microsoft Component Object Model (COM) objects. Mike shows you how to use it to extend Visual Basic.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

It's more than a change in the weather that has Michael scratching his head this month.

C PROGRAMMING

by Al Stevens

Al continues his development of the graphics template library. This month, he adds an ellipse shape to the library implemented as a template class in ellipse.h.

JAVA Q&A

by Michael Travers

What is interactive scripting and what does it have to do with Java? Michael answers this question, as he presents Skij, an interactive scripting language for the Java environment.

ALGORITHM ALLEY

by Timothy Rolfe

Card shuffling is an example of putting a fixed number of items into completely random order. Timothy examines a couple of randomizing algorithms -- one that does not generate all permutations with equal probability, and another that does.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Ecco and Liane do lunch and go Hollywood, as they look for ways to keep a low-budget just that.

PROGRAMMER'S BOOKSHELF

by Jack J. Woehr and Lou Grinzo

Databases are the focus this month, as Jack examines the latest edition of C.J. Date's classic An Introduction to Database Systems, while Lou looks at MySQL & mSQL, by Randy Jay Yarger, George Reese, and Tim King.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

edited by Nicholas Baran

OF INTEREST

by Nicholas Baran and Amy Lincicum

SWAINE'S FLAMES

by Michael Swaine


DDJ, February 2000 -- Java Programming

FEATURES

GJ: A GENERIC JAVA

by Philip Wadler

Generic Java (GJ) adds generic types to the Java language. GJ is compatible with Java, the Java Virtual Machine, and existing libraries. It is also efficient, in that information about generic types is maintained only at compile time, not run time.

COLLABORATIVE APPLICATIONS AND THE JAVA SHARED DATA TOOLKIT

by Joshua Fox

The Java Shared Data Toolkit is designed to help you write distributed collaborative applications so that groups of users can work simultaneously on a common task.

JAVA REFERENCES

by Jonathan Amsterdam

Java lets a program refer to objects without preventing those objects from being garbage collected. Jonathan explains how references work and presents useful abstractions that make working with them easier.

PYTHON SERVER PAGES: PART II

by Kirby W. Angell

Last month, Kirby introduced Python Server Pages and looked at how HTML pages with embedded scripts are translated into compilable JPython code. This month, he examines the Java Servlet side of PSP.

JAVA, XML, & LITERATE PROGRAMMING

by Andrew Dwelly

Marius, the system Andrew presents here, implements some of Donald Knuth's ideas about literate programs, but uses Java as its programming language, with HTML as the output. In the process, Marius leverages the power of XML.

OPENCARD FRAMEWORK APPLICATION DEVELOPMENT

by Vesna Hassler and Oliver Fodor

The Personal Computer/Smart Card Interface (PC/SC) and OpenCard Framework emphasize the interoperability of smartcards and card terminals, and the integration of those card terminals into Microsoft Windows.

EMBEDDED SYSTEMS

THE REAL-TIME SPECIFICATION FOR JAVA

by David Hardin

The Real-Time Specification for Java promises to bring the benefits of Java to real-time developers. David examines the requirements and design decisions that led to the Real-Time Specification for Java, and provides practical examples of its use.

INTERNET PROGRAMMING

WEBRELAY: A MULTITHREADED HTTP RELAY SERVER

by Peter Zhang

Webrelay is a freely available multithreaded HTTP relay server that authenticates that clients are legitimate users before they are connected to vendor web servers.

PROGRAMMER'S TOOLCHEST

VISUALIZING NETWORK RESOURCES USING VISIO

by Chris Trueman

Visio is a generic diagram construction tool that just happens to include a powerful visualization engine. Chris uses that engine to write a C++ tool that generates diagrams to represent all the available resources on a Windows network.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

You won't need to go to the state of "iDenmark" to know that something smells. And you can bet Michael nose what he's talking about this month.

C PROGRAMMING

by Al Stevens

Al resurrects S, a homebrew C variant he implemented a decade ago -- back before the days of Javascript and VB. His updated version is written in C++, and includes a shell program that tests the interpreter by loading and executing text source-code files written in the S language.

JAVA Q&A

by Ethan Henry and Ed Lycklama

Our authors show what you can do when Java exhibits classic memory leak behavior -- unbounded memory growth leading to poor performance and eventually crashing.

ALGORITHM ALLEY

by Michael J. Wiener

Michael presents some key optimizations (with source-code examples) that can be made to make RSA algorithm as fast as possible.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Landmines are a nasty piece of work, indeed. Ecco and Liane need to come up with ways to make removing them a safer proposition.

PROGRAMMER'S BOOKSHELF

Gregory V. Wilson

This month, Greg examines Mastering Algorithms with Perl, by Jon Orwant, Jarkko Hietaniemi, and John Macdonald, Programming for the Java Virtual Machine, by Joshua Engel, Java for Engineers and Scientists, by Stephen J. Chapman, Introductory Java for Scientists and Engineers, by Richard Davies, the C++ Toolkit for Scientists and Engineers, by James T. Smith, Quantum Computing and Communications, by Michael Brooks, and Steven Roman's Learning Word Programming.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

edited by Nicholas Baran

OF INTEREST

by Nicholas Baran and Amy Lincicum

SWAINE'S FLAMES

by Michael Swaine


DDJ, March 2000 -- Testing and Debugging

FEATURES

WHITE-BOX TESTING

by Oliver Cole

Traditionally, there are two main approaches to testing software: "black-box" (or functional) testing, and "white-box" (or structural) testing. White-box testing strategies include designing tests such that every source line of code is executed at least once, or requiring every function to be individually tested.

DEBUGGING MULTITHREADED APPLICATIONS

by Peter Horwood, Shlomo Wygodny, and Martin Zardecki

It is often significantly harder to locate and test for bugs in multithreaded and multiprocess applications than for nonthreaded, single process situations. Our authors describe some of the problems with multithreaded applications and discuss common debugging techniques.

TESTING UNIX DAEMONS

by Len DiMaggio

UNIX daemons are programs that run in the background, letting you do other work in the foreground. Len presents a "recipe" for testing them.

BUILDING A TESTPOINT FRAMEWORK

by Noam Cohen

Noam presents a framework for creating and using testpoints. He originally designed and implemented this framework while developing VideoClick, a video distribution and management system.

CONSIDERING RECURSION

by Arch D. Robison

Granted, recursion means different things to different people. But for Arch, recursion means trouble because recursive code entangles control flow, which hurts readability, reuse, and optimization.

INSIDE BLUETOOTH: PART I

by James Y. Wilson and Jason A. Krontz

Bluetooth technology is an open specification for wireless communication and networking. In the first of a two-part series, Jim and Jason lay out the basics.

EMBEDDED SYSTEMS

INSIDE REAL-TIME LINUX

by Jerry Epplin

Real-Time Linux is based on the same model as the NT-based systems, but, since it is freely available, doesn't have the associated cost overhead. To illustrate how you can use RTLinux, Jerry presents a data-acquisition application.

INTERNET PROGRAMMING

MEASURING NETWORK SOFTWARE PERFORMANCE

by James K. Yun

The network performance measurement techniques James discusses here are especially useful in projects where the network interface is encapsulated in a class library or network middleware.

PROGRAMMER'S TOOLCHEST

SOURCEMONITOR: EXPOSING YOUR CODE

by James F. Wanner

SourceMonitor is a programmer's metrics tool that Jim wrote to expose the size and quality of his source code. To parse source code, Jim used Sandstone's Visual Parse++; to create reports, he turned to Stingray's Objective Chart.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

When we look back at it, 1999 might have been a breakthrough year for nanotechnology, as big advances were made in tiny computers.

C PROGRAMMING

by Al Stevens

Smart iterators might not be such a dumb idea, but, as Al points out, there are costs associated with them.

JAVA Q&A

by Mike Jennings

A service in Windows NT (or "daemon" in UNIX parlance) is a program that runs in the background to do a specific task. Can you write NT services in Java? Sure, and Mike shows you how.

ALGORITHM ALLEY

by Mingfu Gong

Group sorting algorithms are well suited for applications where recursion is either not allowed or inefficient. In this month's column, Mingfu presents an N*logN adaptive group sort algorithm.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Benjamin Baskerhound has turned over a new leaf, this time coming to Ecco and Liane for help, rather than mischief.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson

This month, Greg examines Extreme Programming Explained, by Kent Beck, and the recently released The Pragmatic Programmer: From Journeyman to Master, by Andrew Hunt and David Thomas.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

edited by Nicholas Baran

OF INTEREST

by Nicholas Baran and Amy Lincicum

SWAINE'S FLAMES

by Michael Swaine


DDJ, April 2000 -- Algorithms

FEATURES

DR. DOBB'S EXCELLENCE IN PROGRAMMING AWARD

by Jonathan Erickson

Through his research and writings, Jon Bentley has made significant contributions to the art and science of computer programming. And he's the recipient of this year's Dr. Dobb's Excellence in Programming Award.

A NEW ROAD MAP OF ALGORITHM DESIGN TECHNIQUES

by Anany Levitin

Before outlining a new taxonomy, Anany reviews the four most general algorithm design techniques: brute force, divide-and-conquer, decrease-and-conquer, and transform-and-conquer.

MONTE CARLO METHODS

by Matthew Ginsberg

Bridge is one of a handful of classic games that have thus far eluded competent computer play. However, GIB, the Bridge program Matthew wrote and discusses here, proves to be a worthy competitor.

THE FASTEST SORTING ALGORITHM?

by Stefan Nilsson

Which sorting algorithm is the fastest? Stefan presents his answer to this age-old question.

GARBAGE COLLECTION ON THE RUN

by Joshua W. Burton

Joshua examines several incremental memory-management algorithms, including simple user-defined reference counts, before turning to analyzing the global connectedness of pointer structures.

AN EFFICIENT ALGORITHM FOR MAGNITUDE OPERATION

by S. Manivannan

Magnitude operation is widely used in signal and data processing for signal detection and power estimation in systems such as real-time displays for sensors, radars, sonars, and scanners for medical-imaging systems.

THE BLUETOOTH SPEC: PART II

by James Y. Wilson and Jason A. Kronz

Bluetooth technology is an open specification for wireless communication. In Part I, Jim and Jason examined the voluminous specification. This month, they focus on the features of the Baseband specification.

EMBEDDED SYSTEMS

DIGITAL FILTERING AND OVERSAMPLING

by Jim Ledin

Compared to analog filtering, digital filtering can provide higher overall system performance and reduce circuit complexity. Jim examines the technique of oversampling, which can be used to gain these seemingly contradictory benefits.

INTERNET PROGRAMMING

LORE: A DATABASE MANAGEMENT SYSTEM FOR XML

by Roy Goldman, Jason McHugh, and Jennifer Widom

Lore is a DBMS designed specifically for XML. In the same way that SQL queries relational DBMSs, Lore provides the query language Lorel for issuing expressive queries over XML data.

PROGRAMMER'S TOOLCHEST

EXAMINING THE PYGTK TOOLKIT

by Mitch Chapman and Brian Kelley

PyGtk brings the benefits of a high-level programming language to Gtk+ developers, and gives Python programmers access to a modern, high-performance GUI toolkit.

SOFTWARE CAREERS

THE IT LABOR SHORTAGE: FACT OR FICTION?

by Richard Ellis

Current reports present conflicting views of the job market for information technology workers. Richard goes below the surface to uncover the real story.

WHAT ARE YOU WORTH?

by Susan Simcox

A recent dice.com career and salary survey on the IT industry gave some surprising (and some not so surprising) results. Susan reports on this study.

ACE YOUR JOB INTERVIEW

by Alex Bykov

If you're in the market for a job, be prepared to answer a lot of technical questions during the job interview. Alex shares some of the questions you'll face and gives you answers you'll need.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael ain't misbehavin' as much as he's misinformin'. Of course, that's not his fault.

C PROGRAMMING

by Al Stevens

Ramblin' Jack Elliot has nothing on Al this month, as our man in C rambles from one topic to another.

JAVA Q&A

by David Epstein, Joseph Kiniry, and John Motil

JJ is a Java implementation originally designed as an educational programming language and environment. Although it's a subset of Java, JJ includes advanced programming features such as support for Design by Contract.

ALGORITHM ALLEY

by Jon Bentley

Caching often works well, but sometimes fails utterly. In this column, Jon examines why that happens and what you can do about it.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

There's bad blood around Ecco's flat, as the good doctor and his sidekick Liane lend a hand to medical science.

PROGRAMMER'S BOOKSHELF

by Jeffrey L. Taylor

Jeffrey examines the second editions of Radia Perlman's Interconnections: Bridges, Routers, Switches, and Internetworking Protocols, and Bruce Powel-Douglass' Real-Time UML: Developing Efficient Objects for Embedded Systems.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

edited by Nicholas Baran

OF INTEREST

by Nicholas Baran and Amy Lincicum

SWAINE'S FLAMES

by Michael Swaine


DDJ, May 2000 -- Communications and Networking

FEATURES

THE MEDIA GATEWAY CONTROL PROTOCOL

by Linden deCarmo

The Media Gateway Control Protocol is a lightweight telephony protocol that promises reduced complexity and increased reliability for digital Internet phones.

GIGABIT ETHERNET

by William Stallings

Although it defines a new medium and transmission specification, the Gigabit Ethernet spec is based on the same strategy as 100-Mbits/sec. Ethernet.

A WIN32 NETWORK CRAWLER

by Jawed Karim

MP3 Voyeur is a freely available Win32 program that automates the task of finding MP3 files on the shared folders of local area networks. It works like a network crawler, querying each computer on the network and traversing each computer's hierarchy of shared folders to find MP3 files.

LDAP SEARCH FILTERS

by Marcelo A.F. Calbucci

The Lightweight Directory Access Protocol is a transport mechanism for Directory Service transactions. Marcelo focuses on the search filter that's part of LDAP search functionality.

MARGINATION AND PROJECT GUTENBERG

by William Fishburne

The goal of Project Gutenberg is to distribute a million books electronically by the end of the year. To that end, project organizers have identified some unusual requirements on the margins of the lines.

PREDICATION, SPECULATION, & MODERN CPUs

by Andrew Chasin

Predication and speculation are viable techniques for improving software performance, and the emerging class of processors and compilers are supporting it.

INFRARED CONTROL OF YOUR PC

by Gavin Smyth

Infrared devices are used to remotely control consumer electronic systems -- TVs, VCRs, stereos, and the like. Gavin shows you how you can add your PC to that list.

EMBEDDED SYSTEMS

WINDOW CE'S CESH UTILITY

by Andrew Tucker

CESH, a utility included with the Windows CE development tools, lets you automate test suites to download and run on a device, while logging results on the desktop machine.

INTERNET PROGRAMMING

SCALABLE MULTICAST FILE DISTRIBUTION

by Jim Gemmell

Fcast, the file distribution mechanism Jim presents here, uses IP multicast and forward error correction (FEC) to serve extremely large numbers of clients with minimal loads for servers and networks.

PROGRAMMER'S TOOLCHEST

BUILDING THE BELL ATLANTIC TARIFF MANAGEMENT SYSTEM

by John S. Barker

Bell Atlantic's Tariff Management System is a web-based, collaborative system for generating and managing tens of thousands of pages of documents. What made building the system difficult is that it had to be capable of delivering the product in multiple formats -- paper, PDF, and HTML -- while obeying strict, legislated rules regarding page layout.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael reports on Eazel, a Linux startup for Macs, and gets small with nanotechnology.

C PROGRAMMING

by Al Stevens

Al considers the upside and downside of using classes and functions from the Standard C++ library.

JAVA Q&A

by David Reilly

How do you use Servlets for state and session management? David shows you how.

ALGORITHM ALLEY

by Moheb Missaghi

How many ISP subscribers should share a modem? That's the question Moheb was faced with, and he presents and implements the algorithm that proved to be the answer.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Ecco and Liane find out it's better to be rich and healthy than sick and poor.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson

Greg's roundup this month includes Objects Unencapsulated: Java, Eiffel, and C++?, by Ian Joyner; The Logic Programming Paradigm, by Krzysztof R. Apt, Victor W. Marek, Mirek Truszczynski, and David S. Warren; Quantum Computing and Communications, edited by Michael Brooks; Cambrian Intelligence, by Rodney A. Brooks; Intellectual Property in the Age of Universal Access, by the ACM; Database Design for Smarties, by Robert J. Muller; Designing Maintainable Software, by Dennis D. Smith; and (finally) Automating Windows with Perl, by Scott McMahan.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

edited by Nicholas Baran

OF INTEREST

by Nicholas Baran and Amy Lincicum

SWAINE'S FLAMES

by Michael Swaine


DDJ, June 2000 -- Object-Oriented Design

FEATURES

THE METIS DESIGN METHODOLOGY

by César A. Gonzalez Perez and Pablo Criado Boado

Metis is an object-oriented development methodology that includes all the usual tasks found in a generic software project lifecycle.

OPEN SOURCE MEETS BIG IRON

by Pete Beckman and Gregory V. Wilson

The aim of the Software Carpentry project is to create a new generation of easy-to-use software engineering tools, and to document those tools and the working practices they are meant to support.

STATE PATTERNS & C++

by Julian Macri

In object-oriented design, objects can modify their behavior based on the current state of their attributes. State patterns abstract the ability for an object to change its behavior. Julian presents two ways the State design pattern can be implemented in C++.

XML, REFLECTIVE PATTERN MATCHING, AND JAVA

by Andrew Dwelly

Although the pattern matching available in Hex, the program Andrew presents here, is relatively simple, it is still powerful enough to perform sophisticated XML document processing.

AN OBJECT-ORIENTED UI FOR PERL

by Robert Kiesling

If you work with object-oriented languages, you are likely accustomed to user-interface objects that highlight the object-oriented features of a language's internal structures. Robert shows one way Perl's features can contribute to its usefulness in object-oriented projects.

WIN32 VERSION CONTROL

by Ping Ni and Mark Nelson

Faced with the problems created by scattered development teams, distributed objects, and dozens of DLLs and executables, Ping and Mark turned to Perl and C++ to give some muscle to the Visual Source Safe source-code version control system.

OBJECT-ORIENTED DESIGN IN PROCEDURAL ENVIRONMENTS

by Thomas E. Davis

Tom shows how you can apply some of the inherent cleanliness of object-oriented design to your procedural language projects. To illustrate, he designs an application for Motorola's PageWriter two-way pager.

EMBEDDED SYSTEMS

JAVA CUSTOM CLASS LOADERS

by Brian Roelofs

Custom class loaders create new possibilities for dynamic applications. Brian discusses how you can create your own class loader to read and load classes into the Java VM from any data source.

INTERNET PROGRAMMING

AN INTERNET TOOLBOX

by Ronn Ritke

Ronn examines a number of useful Internet tools, including packet-collection software, Internet-throughput software, ISP-measurement software, and the like.

PROGRAMMER'S TOOLCHEST

PARSING COMPLEX TEXT STRUCTURES

by Ian E. Gorman

A pattern language that includes recursive patterns and conditional pattern matching can handle complex text structures without supplementary programming. Ian uses the OmniMark pattern language from OmniMark Technologies to do a job that might otherwise be done with tools like lex and yacc.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael looks to the future of technology and society, and wonders if it will really be as bleak as a joyless Bill Joy thinks it will be.

C PROGRAMMING

by Al Stevens

While sitting by the side of the road, Al gets into his Quincy 2000 port and further considers using the Borland BCC32 C/C++ compiler as Quincy's compiler.

JAVA Q&A

by Jacob Gsoedl

Can you implement COM components using Java? Yes, and Jacob shows you how.

ALGORITHM ALLEY

by John Keogh

John presents and implements an algorithm for scaling child windows when the parent is resized. Although the example runs under the Win32 API, the algorithm and data structure are generally useful for scaling child windows on other platforms.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Are Ecco and Liane the antidote for a deadly new strain of microvirus? Read and find out.

PROGRAMMER'S BOOKSHELF

by Jeff Cromwell

Jeff reviews Applied Software Architecture, by Christine Hofmeister, Robert Nord, and Dilip Soni; Software Architecture in Practice, by Len Bass, Paul Clements, and Rick Kazman; and Software Architecture: Perspectives of an Emerging Discipline, by Mary Shaw and David Garlan.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

edited by Nicholas Baran

OF INTEREST

by Nicholas Baran and Amy Lincicum

SWAINE'S FLAMES

by Michael Swaine


DDJ, July 2000 -- Distributed Computing

FEATURES

MANAGING CLUSTER COMPUTERS

by Carlo Kopp

A side effect of the commodification of computer hardware has been the emergence of supercomputing clusters. Carlo describes how TurboLinux's enFuzion is used to manage the Monash Parallel Parametric Modeling Engine, a cluster of Pentium/Linux-based computers.

LOAD BALANCING FOR UNIX AND WIN32

by Abdul Sakib Mondal

In most distributed applications, the workload needs to be balanced across all available processors via software. Sakib presents XYALB, a load-balancing program that works on SunOS 4.1.1 and 4.1.3, Redhat Linux 6.5 (kernel 2.0.36), and Windows 95/NT.

PUBLISH, SUBSCRIBE, & THE JMS API

by Philip Rousselle and Daniel Greff

The Java Messaging Service API is middleware that supports message passing rather than RPC semantics. Philip and Daniel explore the advantages of publish/subscribe distributed programming by implementing a chatroom application.

A C++ LIBRARY FOR IBM MQSERIES

by Jack Woehr

IBM MQSeries is a distributed messaging system that has been ported to many platforms. Jack presents SoftWoehr, an open-source C++ class library that encapsulates the MQSeries C language bindings.

XML AND SOFTWARE CONFIGURATION

by Tony Sintes

Tony explores software configuration and how it relates to XML. In the process, he presents an XML configuration markup language and Java framework that you can use as the basis for any Java configuration engine.

THE REBOL SCRIPTING LANGUAGE

by Carl Sassenrath

The Relative Expression-Based Object Language (REBOL) was designed to make it easier to communicate between computers, or between people and computers, using context-dependent sublanguages.

CREATING WAP SERVICES

by Luca Passani

WAP is a communications architecture designed for wireless networks. Luca examines WAP services, then presents a WAP app used to pick songs from a database of music. To build this application, he uses the Apache web server (with PHP support) and MySQL database.

AUTOMATIC UPDATES FOR DISTRIBUTED APPLICATIONS

by Max I. Fomitchev

AutomatedUpdate, the program Max presents here, lets applications check file versions and automatically update themselves.

EMBEDDED SYSTEMS

A BSP PORTING LIBRARY FOR EMBEDDED PERIPHERALS

by Tom Cunningham

Board Support Packages (BSPs) are made up of interfaces that let RTOSs access system-level services, thereby isolating RTOSs from idiosyncrasies of the board. Tom describes a BSP he designed that is built on top of Motorola's M-CORE Peripheral Library.

INTERNET PROGRAMMING

PUBLISH AND SUBSCRIBE WITH CORBA WEB EVENTS

by David Houlding

David examines one approach to delivering publish/subscribe capabilities for web-enabled distributed object systems based on JavaScript clients and CORBA servers.

PROGRAMMER'S TOOLCHEST

DATABASE ENGINES: MYSQL VERSUS ORACLE

by Tim Kientzle

Among the more popular relational database engines with SQL interfaces are the open-source MySQL and commercially available Oracle database server. Tim looks at how they are alike and where they differ.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

The authors of the Cluetrain Manifesto argue that markets are being transformed in a fundamental and revolutionary way by the Internet.

C PROGRAMMING

by Al Stevens

Al goes undercover, then chats with Richard Stallman about Free Software, Linux, and more.

JAVA Q&A

by David Perelman-Hall

Does Java have "find" functionality? It does now, as David describes his implementation.

ALGORITHM ALLEY

by Bogdan Dorohonceanu and Craig Nevill-Manning

Suffix trees are used for string searches. Our authors describe how to build a generalized suffix tree data structure using as few hardware resources as possible while still approaching the time complexity derived in theory.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Ecco and Liane take on the challenge of wordsnakes -- a list of words without repeats such that some suffix of each word is a nonempty prefix of the next word in the list.

PROGRAMMER'S BOOKSHELF

by William Stallings

William examines recent books on frame relay technology -- Frame Relay: Technology and Practice, by Jeff Buckwalter; Frame Relay Networks, by Uyless Black; Frame Relay for High-Speed Networks, by Walter Goralski; and Frame Relay Internetworking, by Liza Henderson and Tom Jenkins.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

Staff reports edited by Nicholas Baran

OF INTEREST

by Shannon Cochran

SWAINE'S FLAMES

by Michael Swaine


DDJ, August 2000 -- GRAPHICS PROGRAMMING

FEATURES

INSIDE XBOX GRAPHICS

by Michael Abrash

Microsoft's upcoming Xbox game console has some pretty impressive graphics capabilities. Michael ought to know -- he's been developing the graphics internals for the past few months.

TRIANGLE INTERSECTION TESTS

by Eric Haines and Tomas Möller

Our authors provide an alternative to the classic methods of testing whether a point is inside a triangle. This new technique is based on barycentric coordinates.

OPTIMIZING 3DNOW! REAL-TIME GRAPHICS

by Max I. Fomitchev

One approach to pumping up real-time 3D graphics performance is AMD's 3DNow! technology, which adds floating-point SIMD extensions to the original x86 instruction set. Max examines 3DNow! technology, then provides guidelines for optimizing its performance even more.

AUGURAL IMAGE ZOOMING

by Wm. Douglas Withers

Augural image zooming is a new method for zooming images with a minimum of computation, while keeping smooth regions smooth and sharp edges sharp.

AUTOMATED BUILDS

by Aspi Havewala

Automated builds refer to a series of commands that can be executed to compile and link source code into its final deliverable format. Aspi discusses some advantages of automated builds, and suggests some features your builds can incorporate.

EXAMINING VMWARE

by Jason Nieh and Ozgur Can Leonard

VMware is a virtual machine platform that provides an abstraction of x86 PC hardware so that multiple operating systems can run unmodified at the same time on a standard PC. Among other things, this means you can run Windows applications with Linux.

A LINUX IEEE 1394 CONFIGURATION ROM DECODER

by William F. Alexander

William's DumpRom program is designed to read and decode the configuration ROM of 1394 peripherals. He presents the Linux implementation of DumpRom using an OHCI 1394 controller.

EMBEDDED SYSTEMS

RELIABILITY & EMBEDDED NETWORKS

by H. Thomas Richter

Reliability requirements for embedded networks are more critical than with nonembedded networks. Thomas presents a new method for ensuring reliable communication between hosts in small networked environments.

INTERNET PROGRAMMING

DB FORMS: PHP, MYSQL, AND PHPLIB

by Darryl Ross and Con Zymaris

Darryl and Con use the PHP server-side scripting engine, MySQL database engine, and PHPLIB class framework to build DB Forms, a reusable database framework for writing web applications.

PROGRAMMER'S TOOLCHEST

EXAMINING THE 3D GAME STUDIO TOOLKIT

by Clayton E. Crooks II

3D Game Studio from Conitec is a Win32-based authoring system for creating interactive 3D applications. Clayton uses it to build a typical three-room world that includes actor movements.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

C.J. Date's new book What Not How: The Business Rules Approach to Application Development gets Michael thinking about Prolog, declarative programming, business rules, and the state of software development in general.

C PROGRAMMING

by Al Stevens

You'd think that after 12 years, Al would figure out that complaining isn't worth the effort. But you have to hand it to him -- he doesn't give up.

JAVA Q&A

by Alexandre Sieira Vilar

Object pooling can be used very effectively to reduce the number of garbage collection executions in a Java application. And that reduction can deliver benefits in terms of reduced processor usage and the absence of unpredictable delays.

ALGORITHM ALLEY

by Laurence Marrie

Alternating skip lists are an option anywhere balanced search trees are appropriate. Laurence presents a subset of std::set functionality using ASLs, and gives a basic space/time comparison against a typical red-black tree implementation.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Nefarious criminals might be able to foil robotic prison guards, but out-thinking Ecco and Liane is another task altogether.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson

Python, C++, and a lot more are on Greg's mind this month, as he examines The Quick Python Book, by Daryl Harms and Kenneth McDonald; Python Annotated Archives, by Martin C. Brown; Python Essential Reference, by David M. Beazley; Python Programming on Win32, by Mark Hammond and Andy Robinson; Efficient C++: Performance Programming Techniques by Dov Bulka and David Mayhew; Exceptional C++, by Herb Sutter; Core Jini, by W. Keith Edwards; Designing Web Usability, by Jakob Nielsen; Understanding Search Engines, by Michael W. Berry and Murray Browne; Toward Zero-Defect Programming, by Allan M. Stavely; and Game Architecture and Design, by Andrew Rollings and Dave Morris.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by Nicholas Baran

OF INTEREST

by Shannon Cochran

SWAINE'S FLAMES

by Michael Swaine


DDJ, September 2000 -- Scientific and Numeric Computing

FEATURES

A CONVERSATION WITH DOUG ENGELBART

by Eugene Eric Kim

Doug Engelbart has dedicated his career to designing systems that help the world solve difficult problems. Along the way, he invented the mouse, hypertext systems, collaborative video teleconferencing, and more. Eugene talks with Engelbart about his career, inventions, and vision.

THE GENERIC GRAPH COMPONENT LIBRARY

by Jeremy G. Siek, Lie-Quan Lee, and Andrew Lumsdaine

As good as it is, the C++ Standard Template Library doesn't address every problem domain. Consequently, our authors implemented the Generic Graph Component Library (GGCL) for use with sparse matrix ordering algorithms for scientific computing.

ANALYTICAL COMPUTING

by Laurent Bernardin

The convergence of numeric and symbolic computation systems are making it possible to enjoy the speed of numeric computation and the flexibility and accuracy of symbolic computing.

GRAPHING CALCULATORS MEET PCs

by David S. Birkett

Maxwell, the program David presents here, lets you logically and accurately chart numerical solutions to difficult problems. And it is written in a visual object-oriented programming language called "HP Vee," developed by Hewlett-Packard.

SIMULATING KONRAD ZUSE'S COMPUTERS

by Raul Rojas

Raul presents a working simulation (written in Java) of Konrad Zuse's Z3 computer, originally created in 1938. The real Z3 consisted purely of electromechanical relays, but was ready and operational in 1941 -- four years before the ENIAC.

FORENSIC COMPUTER ANALYSIS: AN INTRODUCTION

by Dan Farmer and Wietse Venema

Solving computer mysteries require skills detectives and programmers have in common -- logical thinking, understanding cause and effect, and possessing an open mind.

WRITING WINDOWS CE DISPLAY DRIVERS

by Jeff Spurgat

Jeff examines the fundamentals of Windows CE display-driver development, including Microsoft's display-driver C++ classes, then explores improvements to simplify display-driver development.

EMBEDDED SYSTEMS

MICROCONTROLLERS AND CORDIC METHODS

by Michael Pashea

CORDIC algorithms are efficient in terms of both computation time and hardware resources -- and in most microcontroller systems, these resources are normally a premium.

INTERNET PROGRAMMING

INTEGRATING WEB PAGES WITH DATABASES

by David Cox

E-commerce is mostly about using and interacting with databases. David presents some unique approaches in integrating a database with web sites.

PROGRAMMER'S TOOLCHEST

ELECTRONIC SOFTWARE DISTRIBUTION

by Jeremy Soref and Sheridan Adjei

Electronic software distribution via the Internet is an attractive alternative to conventional delivery on CD-ROMs and diskettes -- assuming you've addressed licensing issues. Luckily, electronic license distribution tools offer a range of benefits to software vendors and end users alike.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Isn't profiting from someone else's failure what bidness is all about? Michael traces how a series of failures led to what may be one of the most controversial software patents around.

C PROGRAMMING

by Al Stevens

It was only a matter of time before "Me, Myself, and Al" surfaced, as our intrepid programmer meets our intrepid musician.

JAVA Q&A

by Joshua Fox

So what is SO_KEEPALIVE? It's a socket option that's responsible for killing the socket when the remote side is not available. Joshua presents Keep-Alive strategies and implementations for Java.

ALGORITHM ALLEY

by Ron Gutman

Ron presents techniques for exploiting the parallelism of bitwise operations to speed up some kinds of 64-bit computing tasks.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Ecco and Liane go ape over chimps in this month's installment.

PROGRAMMER'S BOOKSHELF

by Doug Reilly

Doug examines a pair of data-centric books: Guru's Guide to Transact-SQL, by Ken Henderson; and Mastering Data Mining, by Michael J.A. Berry and Gordon S. Linoff.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by Nicholas Baran

OF INTEREST

by Shannon Cochran

SWAINE'S FLAMES

by Michael Swaine


DDJ, November 2000 -- Computer Security

FEATURES

KERBEROS VERSUS THE LEIGHTON-MICALI PROTOCOL

by Aviel D. Rubin

Although more complicated, the Leighton-Micali protocol is more elegant, efficient, and secure than the venerable Kerberos security protocol.

THE SET STANDARD & E-COMMERCE

by William Stallings

The Secure Electronic Transaction (SET) is an open encryption and security specification designed to protect credit-card transactions on the Internet.

SECURITY PROTOCOLS AND PERFORMANCE

by Linden DeCarmo

Security protocols can be performance assassins. Linden examines several multimedia security protocols, and explains why they can devastate performance.

SECURITY ANALYSIS & DESIGN

by Uttara Nerurkar

The security-design techniques Uttara presents here provide a way of modeling security by extending the functional model of the system, instead of divorcing one from the other.

WINDOWS 2000 SECURITY DESCRIPTORS

by Marcelo Calbucci

Central to Windows 2000 security are Security Descriptors -- structures and associated data that contain the security information for securable objects.

MULTILANGUAGE PROGRAMMING

by David Wendt

David presents a technique that lets multiple language resources be built into a single resource DLL and automatically referenced by Windows applications.

STRANGERS IN THE NIGHT

by Wietse Venema

There's no telling what intruders might leave behind when they break into your system overnight. Wietse describes how he analyzed an unknown program left behind by one intruder.

ROBOT CONTROL AND COLBERT

by Kurt Konolige, Jeanne Dietsch, and William Kennedy

Robot control programs take a robot's sensory input, process it, and decide which motor actions the robot will perform. Our authors use the Colbert sequencer language to develop control code.

EMBEDDED SYSTEMS

EXCEPTION HANDLING IN C WITHOUT C++

by Tom Schotland and Peter Petersen

Error handling is an important issue in embedded systems, and can account for a substantial portion of a project's code. Our authors describe how they designed and implemented an exception-handling library.

INTERNET PROGRAMMING

WEBDAV, IIS, & ISAPI FILTERS

by Martin Hallerdal

The web-based Distributed Authoring and Versioning (WebDAV) specification defines a set of extensions to the HTTP protocol that let you collaboratively edit and manage files on remote web servers.

PROGRAMMER'S TOOLCHEST

THE OPENCV LIBRARY

by Gary Bradski

OpenCV is an open-source, computer-vision library for extracting and processing meaningful data from images.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

To hear Michael talk about it, you'd think interactive toys and open source are kid's stuff.

C PROGRAMMING

by Al Stevens

Al gets back on track in updating his Quincy IDE that hosts the GNU C/C++ compiler suite of tools on the Win32 platform.

JAVA Q&A

by Mike Jennings

How can you establish a network connection using Java? Mike shows how.

ALGORITHM ALLEY

by Alexander Ananiev

Generic tree traversal logic can be used with any type of tree-like structure or tree node, letting you focus on the application logic rather than the internals of the tree structure organization.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Making money is the challenge Ecco and Liane are faced with this month.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson

This month Greg looks at Programming Pearls, Second Edition, by Jon Bentley; Foundations of Multithreaded, Parallel, and Distributing Programming, by Gregory R. Andrews; GUI Bloopers, by Jeff Johnson; The Humane Interface, by Jef Raskin; Legal Battles That Shaped the Software Industry, by Lawrence D. Graham; The World of Scripting Languages, by David Barron; C for Java Programmers, by Tomasz Muldner; and XML Elements of Style, by Simon St. Laurent.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by Nicholas Baran

OF INTEREST

by Shannon Cochran

SWAINE'S FLAMES

by Michael Swaine


DDJ, December 2000 -- Operating Systems

FEATURES

INSIDE DEBIAN HURD

by Jerry Epplin

Debian is a freely available operating system, currently built around on the Linux kernel, that achieves flexibility by adhering to standard POSIX interfaces. And because Debian is kernel independent, the Hurd -- a collection of servers that run on top of the microkernel -- can also be used with the Debian distribution.

PORTING ACROSS UNIX AND WIN32

by Abdul Sakib Mondal

Even though UNIX and Win32 are the most common desktop operating systems around, applications written for one platform usually do not work on the other. Abdul ports a load-balancing application first from Sun OS to Linux, then from Linux to Win32.

THE WINDOWS 2000 CONTENT INDEX

by Bartosz Milewski

The Microsoft Content Index is a search engine integrated into Windows 2000. Bartosz, who was on the Content Index design and implementation team, describes its requirement set, design principles, and technical details.

MINIRTL: A MINIMAL REAL-TIME LINUX

by Peter Wurmsdobler and Nicholas McGuire

MiniRTL, short for "Minimum Real-time Linux," is a real-time Linux implementation that fits on a single floppy disk.

VIRTUAL LISTS FOR WIN32

by Steve Sipe

Steve presents CVListCtrl, a class that works in conjunction with the Win32 listview control to provide a virtual list implementation. Unlike normal lists, a virtual list only contains a handful of visible items at any one time.

THE MACOS FIND-BY-CONTENT ENGINE

by Chilton Webb

The Find-By-Content engine that's part of the MacOS is a system-level search facility that you can embed in your applications.

AUTOMATIC DETECTION OF POTENTIAL DEADLOCK

by John Mount

Deadlock can occur when a number of consumers (typically threads) access a set of resources in an unacceptable pattern. To combat it, John presents a solution based on run-time lock analysis that analyzes all transactions.

FILE RECOVERY TECHNIQUES

by Wietse Venema

Wietse investigates the topic of file recovery by reconstructing past behavior and examining deleted file access time patterns and other attributes.

THE DIGITA OS: AN EXTENSIBLE IMAGING PLATFORM

by Carlos E. Vidales and Eugene M. Farrelly

The Digita operating system from Flashpoint is designed for digital cameras. It supports all the basic camera features (including a GUI), and lets you extend the functionality of devices through scripts and applications.

EMBEDDED SYSTEMS

BUILDING AN OS-AWARE DEBUGGER

by Stewart Christie

Debugging applications developed to run under real-time operating systems can be difficult, but making debuggers "operating-system aware" can ease the process.

INTERNET PROGRAMMING

POP3 FOR C++

by Laura Michaels

Laura presents a POP3 implementation written in C++ that you can use for your POP3 client or library to handle SMTP or FTP or some other well-known Internet protocol.

PROGRAMMER'S TOOLCHEST

INFERNO APPLICATION DEVELOPMENT WITH LIMBO

by Phillip Stanley-Marbell

Inferno is a distributed OS for networked devices and Internet appliances, and applications for it are written in a programming language called "Limbo."

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

In addition to taking a look at Apple's public beta of its MacOS X operating system, Michael shares some thoughts about Jef Raskin's The Humane Interface and James Burke's The Knowledge Web.

C PROGRAMMING

by Al Stevens

While customizing Quincy 2000's Print dialogs isn't necessarily a day at the beach, it is still a boat load of fun.

JAVA Q&A

by Alexandre Pereira Calsavara

String searching is a basic operation for just about any application. Alexandre presents a small class that uses regular expressions to add powerful string search capabilities to Java.

ALGORITHM ALLEY

by Timothy Rolfe

If you need fast searching capabilities, AVL trees might just be what you're looking for.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Genetics, protein networks, and a Russian physicist are among the challenges Ecco and Liane face this month.

PROGRAMMER'S BOOKSHELF

by Lou Grinzo and Jacques Surveyer

Lou takes a look at Tom Swan's GNU C++ for Linux, by (you guessed it) Tom Swan, while Jacques examines Scott Ambler's Process Patterns: Building Large Scale Systems Using Object Technology.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by Nicholas Baran

OF INTEREST

by Shannon Cochran

SWAINE'S FLAMES

by Michael Swaine



Software in the 21st Century

THE FUTURE OF PROGRAMMING

by Eugene Eric Kim

Programming is bound to get easier, but the real challenge is making programs better.

THE PROMISE OF MOLECULAR COMPUTING

by Mark Reed

When Moore's Law reaches its limits, the next step may be the chemical synthesis of complex circuits.

HIGH-LEVEL PROGRAM DEVELOPMENT

by Bard Bloom, Jim Russell, John Vlissides, and Mark Wegman

Application builders are poised to reach new levels of abstraction and automated optimization capabilities.

INNOVATIONS IN USER INTERFACES

by Neil Scott

Research advances are improving the accessibility of computers for those with disabilities, and promise to make user interfaces better for us all.

COMPUTING WITH QUANTUM PHYSICS

by David Cory and Raymond Laflamme

Quantum computing is another frontier beyond Moore's Law. Unprecedented computing power is the prize at the end of the long road ahead.

SECURITY RESEARCH AND THE FUTURE

by Bruce Schneier

A noted security expert sees a future fraught with security threats and new technologies to combat them.

NEW LANGUAGES, OLD LOGIC

by Philip Wadler

Who would have thought that the programming languages of the 21st century will be built upon foundations of logic theory from the 19th and 20th?

XEROX PARC AT 30: INSIDE A RESEARCH LAB

by Rich Gold

A researcher at the venerable laboratory takes stock of Xerox PARC's place in the world of high-tech research.

EDITORIAL

by Nicholas Baran


DDJ, January 2001
Scripting Languages
+ 25th Anniversary Issue

FEATURES

PROGRAMMING & THE PC REVOLUTION

by Eugene Eric Kim

Twenty-five years ago, computer programming was big-iron heavy — then the personal computer came along and everything changed. In this special anniversary retrospective, Eugene Kim looks back at what computing was like then, and DDJ's role in that revolution.

PROGRAMMING IN RUBY

by Dave Thomas and Andy Hunt

Ruby is a freely available pure, untyped, object-oriented language. Dave and Andy show how to use the language, while Yukihiro Matsumoto (Ruby's creator) adds a note on why he developed it.

PHP & HOSTED APPLICATIONS

by Ahmad Abualsamid

PHP 4 is a server-side scripting language that runs on almost any OS used for web hosting. It also supports numerous web servers including Microsoft's Internet Information Server (IIS), Apache, and AOL Server, and it has native support for multiple database engines.

MAKING C EXTENSIONS MORE PYTHONIC

by Andrew Dalke

Andrew presents PyDaylight, an object-oriented wrapper for Python that provides the low-level interface to the underlying C libraries.

GUI CONSTRUCTION WITH PERL

by Cameron Laird

Contrary to popular belief, it is possible to build GUI applications with Perl. Cameron shows how you can start using Perl to build GUIs, then presents some of the options you have when relying on Perl for GUI development.

PYTHON'S PYQT TOOLKIT

by Boudewijn Rempt

Boudewijn examines PyQt, one of the most advanced Python GUI libraries, focusing on the innovative signals-and-slots paradigm it offers you.

PARSING XML

by David Cox

David presents his "miniXML" parser for XML that is written in C++ using the Standard Template Library for strings and various containers.

BRING OUT YOUR DEAD

by Dan Farmer

When it comes to forensic computing, data recovery is of interest to anyone who has lost data.

MIXIN-BASED PROGRAMMING IN C++

by Ulrich W. Eisenecker, Frank Blinn, and Krzysztof Czarnecki

A mixin is a fragment of a class that is intended to be composed with other classes or mixins. Our authors present a solution to the constructor problem in parameterized inheritance-based mixin programming in C++.

DIGITASCRIPT: A SCRIPTING LANGUAGE FOR DIGITAL CAMERAS

by Rich Robinson

DigitaScript is a built-in scripting language that provides user-level access to digital camera controls and image and information flow.

EMBEDDED SYSTEMS

DOS FOR EMBEDDED SYSTEMS: INTERRUPT LATENCIES

by Shai Vaingast and Ehud Cohen

With the emergence of low-power, low-cost, high-processing PC-based embedded-systems solutions, DOS has turned into a serious alternative for embedded applications. However, you still have to deal with the problem of interrupt latencies.

INTERNET PROGRAMMING

MANAGING TEAM-BASED WEB DEVELOPMENT

by Jacob Gsoedl

Going from a one-person shop to team development brings new requirements, such as the need for a source-code control and versioning applications, that may be familiar to programmers, but not web developers.

PROGRAMMER'S TOOLCHEST

NQL: THE NETWORK QUERY LANGUAGE

by David Pallman

David created the Network Query Language (NQL) with the new class of "connected" applications in mind — intelligent agents, bots, spiders, middleware, and web apps.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael's mixed bag includes database design, business rules, new programming environments, and a look at the cottage industry of books about Steve Jobs.

C PROGRAMMING

by Al Stevens

Before hitting the road in his venerable DobbsMobile, Al takes his own walk down memory lane and gives Quincy a new compiler.

JAVA Q&A

by Jason Wraxall

The lightweight controls which come with Sun's JFC Swing framework provide a rich set of interfaces for extending the way they look or behave. Jason extends the JComboBox control using Listener interfaces and a custom data model to make it a little smarter and less prone to error.

ALGORITHM ALLEY

by Paul F. Hultquist and William R. Mahoney

Reservoir sampling lets you find precisely the right number N of records without any prior knowledge of the number of records in the file — provided that there are enough!

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

The "Wildfire" Ecco and Liane have to deal with is more than a golden oldie rock hit.

PROGRAMMER'S BOOKSHELF

by Lou Grinzo and Trudy Pelzer

This month Lou examines Beginning Perl, by Simon Cozens, while Trudy takes a look at Al Williams's Windows 2000 Systems Programming Black Book.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by Nicholas Baran

OF INTEREST

by Shannon Cochran

SWAINE'S FLAMES

by Michael Swaine


DDJ, February 2001 -- Java Programming

FEATURES

THE JAVA SECURE SOCKET EXTENSIONS

by Kirby W. Angell

The Java Secure Socket Extension package and Java Run-Time Environment provide most of the tools you need to implement SSL within Java applications.

THE JUNIT++ TESTING TOOL

by Siegfried Goeschl

JUnit++ is a freely available Java unit test framework that includes a test data repository, command-line arguments, and a TestRunner class that supports a built-in repetition counter and multithreading at the command line.

TAPE DEVICES & JAVA

by Chad Gibbons

Since native support for tape devices doesn't exist in Java, Chad had to build his own tape library.

J.A.D.E.: THE JAVA ADDITION TO THE DEFAULT ENVIRONMENT

by Jean-Marie Dautelle

The Java Addition to the Default Environment (or "J.A.D.E." for short) is an open-source project that fills gaps in the JDK core library.

A JAVA 2 NETWORK CLASS LOADER

by Lorenzo Bettini and Donato Cappetta

Lorenzo and Donato present NetworkClassLoader, a class loader that lets you load classes from remote servers.

MOVING UP TO 64 BITS

by Arch D. Robison

The migration from 32-bit to 64-bit machines is really a test of how "clean" your code is.

C# VERSUS JAVA

by Marc Eaddy

Six of one and half a dozen of the other? Marc finds out when he examines how Microsoft's C# differs from Java.

EXPLORING PERL LIBRARIES

by Robert Kiesling

Among other things, the Perl modules Robert presents here let you view library module data within the Perl interpreter.

JAVA AND THE WABA TOOLKIT

by Al Williams

With Java and the Waba toolkit, you can develop powerful applications for handhelds like the PalmPilot or Windows CE-based systems.

INTERRUPT SCHEDULING

by John Pote

This interrupt scheduler was designed to be flexible enough to accommodate more handlers if and when they're needed, or if priorities change.

EMBEDDED SYSTEMS

MODULE DESIGN GUIDELINES FOR REAL-TIME SYSTEMS

by David Janik

A common problem faced by programming teams is producing consistent, reliable, and maintainable modules. David offers guidelines to address this issue.

INTERNET PROGRAMMING

CROSS-PLATFORM DHTML

by Charlie Ma

If browser incompatibilities are driving you batty, Charlie's techniques for cross-platform DHTML development might save the day.

PROGRAMMER'S TOOLCHEST

SAX2: THE SIMPLE API FOR XML

by Eldar A. Musayev

SAX, the "Simple API for XML," is an efficient and high-performance alternative to the Document Object Model.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

So Java isn't your cup of tea? Michael explores the alternatives.

C PROGRAMMING

by Al Stevens

Al mulls over all the charges against Microsoft — and changes his mind about the whole mess.

JAVA Q&A

by Elisabeth Strunk

Elisabeth builds a JNI wrapper that lets the Java Authentication and Authorization Service and Windows NT authenticate specific users.

ALGORITHM ALLEY

by Thomas Gettys

Thomas presents an efficient hash technique guaranteed to generate a perfect hash function for an arbitrary set of numeric search keys.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Up in the Alaskan tundra, oil and caribou mix about as well as oil and water.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson

Greg looks at a bunch of books, including Programming Ruby, Program Development in Java, The Interpretation of Object-Oriented Programming Languages, MMIXware: A RISC Computer for the Third Millennium, Essential XML, XML Processing with Python, Presenting C#, and Women in Computer Sciences: Closing the Gap in Higher Education.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by Nicholas Baran

OF INTEREST

by Shannon Cochran

SWAINE'S FLAMES

by Michael Swaine


DDJ, March 2001 -- Testing & Debugging

FEATURES

VISUAL DEBUGGING WITH DDD

by Andreas Zeller

If a debugger is a tool that lets you "see" what's going on in a program, then DDD is the tool that lets you see the most.

VALUE LATTICE STATIC ANALYSIS

by William Brew and Maggie Johnson

William and Maggie examine "value lattice," a new approach to static analysis that finds the most dangerous defects that tend to slip through testing.

DYNAMIC LOGGING & THE CORBA NOTIFICATION SERVICE

by Tarak Modi

Tarak examines CORBA's Notification service and proposes a low-overhead approach to debugging distributed systems.

CONSISTENCY-BASED DIAGNOSIS

by Girish Keshav Palshikar

Consistency-based diagnosis systematically works out the set of all possible diagnoses by reasoning from a logical model of the normal behavior of the system.

COM OBJECT REFERENCE COUNTING

by Noam Cohen

Using COM objects involves maintaining the reference count for each object. Noam's RefCatcher tool tracks the number of AddRef/Release calls and reports unbalanced reference counts.

VOLCANO MONITORING

by Steve Jordi

Instrumental monitoring of volcanoes involves remote data acquisition, automatic data processing, and interpretation — all linked to alarm systems. Steve's Tiltmeter program collects volcanic measurements for a volcano in Indonesia.

CROSS-PLATFORM COROUTINES IN C++

by George F. Frazier

Coroutines are a natural solution to parsing problems used by assembly-language programmers. George presents a cross-platform coroutine technique for C++.

POCKETPYRO FOR PALM DEVELOPMENT

by Linden DeCarmo

Most Palm users crave access to the multimedia gadgets found in "other" handheld devices. Fortunately, the Pyro for Palm satisfies those multimedia cravings.

EMBEDDED SYSTEMS

REAL-TIME DEBUGGING & WIRELESS DEVICES

by David Ruimy Gonzales and Brian Branson

David and Brian examine the issues associated with developing power-efficient handheld wireless devices and the on-chip debug capability needed for rapid product development.

INTERNET PROGRAMMING

DIAGNOSING PROXY SERVER PROBLEMS

by Russ Ethington

Russ presents TCPMapper, a Java utility that lets you peek inside the network connections between your browser and a proxy server.

PROGRAMMER'S TOOLCHEST

LOAD TESTING WEB SITES

by Nicholas Baran

Load-testing software lets you simulate scenarios in which many users are logged on to the site simultaneously. NSTL examined Mercury Interactive's Loadrunner, RSW Software's E-load, and Segue Software's Silkperformer — and Nick reports on what the testing lab found.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael plays the numbers by the book, with his look at Stephen Wolfram's A New Kind of Science and Paul Hoffman's The Man Who Loved Only Numbers.

C PROGRAMMING

by Al Stevens

The Software Development 2000 Conference took Al back to D.C. and he reports on everything he saw and heard before jumping into the Linux waters.

EMBEDDED SPACE

by Ed Nisley

DDJ's new columnist takes a hard look at soft errors that affect wireless devices.

JAVA Q&A

by Cameron Laird

Can you script Java with Tcl? Sure, and TclBlend is a great way to do it.

ALGORITHM ALLEY

by Joan Daemen and Vincent Rijmen

NIST has announced that the Rijndael algorithm was the winner of its Advanced Encryption Standard competition. Joan and Vincent, its inventors, lift the hood on the algorithm.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

The shortest distance between the accident and the emergency room is often cluttered with lawyers. Ecco and Liane come up with a plan for getting to the hospital quickly and safely.

PROGRAMMER'S BOOKSHELF

by Peter N. Roth

Peter takes a long look at Andrew Koenig and Barbara Moo's Accelerated C++: Practical Programming by Example.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by Nicholas Baran

OF INTEREST

by Shannon Cochran

SWAINE'S FLAMES

by Michael Swaine


DDJ, April 2001 -- Algorithms

FEATURES

JDSL: THE DATA STRUCTURES LIBRARY IN JAVA

by Roberto Tamassia, Michael T. Goodrich, Luca Vismara, Mark Handy, Galina Shubina, Robert Cohen, Benoît Hudson, Ryan S. Baker, Natasha Gelfand, and Ulrik Brandes

The Data Structures Library in Java (JDSL) is a collection of Java interfaces and classes implementing fundamental data structures and algorithms.

SEARCHING WITH QUANTUM COMPUTERS

by Lov K. Grover

Quantum computers can be in multiple states and carry out multiple computations at the same time and the quantum search algorithm Lov presents here takes advantage of that characteristic.

THE JPEG 2000 IMAGE CODING STANDARD

by Diego Santa Cruz, Touradj Ebrahimi, and Charilaos Christopoulos

The JPEG 2000 is a new image coding standard that specifies only the decoding algorithm and the compressed data format — the encoder algorithm is deliberately left up to you.

PREDICTING COMMUNICATIONS BOTTLENECKS

by Stathis Papaefstathiou

Stathis presents a model evaluation algorithm for calculating communication delays that occur during the execution of applications on any packet-switching network.

THE SPATIAL AGGREGATION LANGUAGE

by Feng Zhao, Christopher Bailey-Kellogg, Ivan Ordonez

The Spatial Aggregation Language (SAL) is a C++ library for supporting rapid prototyping of data analysis and control applications for distributed physical systems.

BEING PREPARED FOR INTRUSION

by Dan Farmer and Wietse Venema

As every good programmer knows, software will eventually fail — no matter how well it is written. The same applies to systems, networks, and security mechanisms; and a system that is prepared for failure has safety nets in various places.

VOICEXML AND THE VOICE-DRIVEN INTERNET

by David Houlding

David examines the concept of voice portals, and shows how simple design patterns — together with XML and XSL — can be used to deliver Internet content to web browsers and wireless devices.

EMBEDDED SYSTEMS

USING WINDOWS NT EMBEDDED 4.0

by James Metzger

James examines the Windows NT Embedded 4.0 toolkit and shows how he used it to develop a black-box project.

INTERNET PROGRAMMING

WEB SITE SEARCHING & INDEXING IN PERL

by Neil Gunton

Mysearchbot, the tool Neil provides here, is a script that crawls any web site you specify, and indexes all the pages it finds into a MySQL database. This database can then be searched from a web browser HTML form in much the same manner as the major search engines.

PROGRAMMER'S TOOLCHEST

SCRAM: SOFTWARE CONFIGURATION, RELEASE, AND MANAGEMENT

by Chris Williams

SCRAM, short for "Software Configuration, Release and Management," provides configuration management, distribution, and build services to ensure consistent and easy-to-use development environments in multiplatform environments.

SOFTWARE CAREERS

HOT JOBS FOR IT PROFESSIONALS IN 2001

by Katherine Spencer Lee

SURVEYING COMPUTER PROGRAMMERS

by Ana Zanger

THE ACM CAREER RESOURCE CENTER

by Lillian Israel

THE RISING COSTS OF SOFTWARE COMPLEXITY

by Shannon Cochran

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Everyone has a secret, but "Who can you believe?" asks our resident cynic.

C PROGRAMMING

by Al Stevens

Al has Linux on the mind as he continues to make the move from one operating system to another.

EMBEDDED SPACE

by Ed Nisley

Embedded systems straddle the fence between engineering approximations and exact counts. "And the problem is what?" asked Florida vote counters.

JAVA Q&A

by David Wincelberg

How do you use the javax.crypto package? David shows you, as he adds security to Java-based e-commerce systems by encrypting/decrypting users' credit-card numbers.

ALGORITHM ALLEY

by Jon Bentley

Suffix trees are simple, yet powerful, data structures: Fill an array with pointers to every position in a string, sort the array, then quickly search the string for long phrases.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

You say "ping pong," Ecco says "table tennis," as he and Liane coach the coaches to build the best team possible.

PROGRAMMER'S BOOKSHELF

by Lou Grinzo

This month, Lou takes a look at Professional Linux Programming, by Neil Matthew, Richard Stones, and others.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by Nicholas Baran

OF INTEREST

by Shannon Cochran

SWAINE'S FLAMES

by Michael Swaine


DDJ, May 2001 -- Communications & Networking

FEATURES

DR. DOBB'S EXCELLENCE IN PROGRAMMING AWARD

by Jonathan Erickson

From Turbo Pascal to C#, Anders Hejlsberg has made significant contributions to the art and science of computer programming. And he's the recipient of this year's Dr. Dobb's Excellence in Programming Award.

AGENTS & AUTOMATED ONLINE TRADING

by Kevin O'Malley

Next generation trading market infrastructures will include automated negotiation facilities. To find out what this means, the University of Michigan's AI Lab organized a Trading Agent Competition market game.

RSA DIGITAL SIGNATURES

by Burton S. Kaliski, Jr.

Digital signatures are growing in importance as they gain legal standing with traditional handwritten signatures. Burton examines the three most popular signature schemes currently in use.

AUTOMATED STREAMING VIDEO

by Jacob Gsoedl

Jacob presents an ASP-based web page that publishes streaming video clips to a streaming video server.

QUALITY OF SERVICE & VOICE-OVER-IP

by Vilho Räisänen

Quality of service, measured by limited end-to-end delay and packet loss, is critical for interactive real-time communication, such as voice-over-IP or video conferencing over the Internet.

COMPILING PERL/TK SCRIPTS

by Cameron Laird

Perl/Tk is an interpreted scripting language for making widgets and programs with GUIs.

DESIGNING 3G SYSTEMS

by Andreas Larsson and Henrik Jeppsson

The Universal Mobile Telecommunications System is a major part of the ITU's IMT-2000 vision of a global family of third-generation (3G) mobile communications systems.

EMBEDDED SYSTEMS

THE REAL-TIME SIMULATION PROTOCOL

by Jim Ledin

The Real-Time Simulation Protocol is a package of C++ source code and tools that enables high-performance real-time distributed simulation across a TCP/IP network.

INTERNET PROGRAMMING

WEB APPLICATIONS AS JAVA SERVLETS

by Brad Cox

Brad describes an approach to building web-based applications that exploit Java's type-checking ability to validate field parameters and detect invalid links between pages.

PROGRAMMER'S TOOLCHEST

THE wxWINDOWS CROSS-PLATFORM FRAMEWORK

by Vadim Zeitlin

wxWindows is a freely available C++ cross-platform GUI framework that lets you compile programs without changing anything under supported platforms.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

It's back to BASIC this month, as Michael looks at the state of the language in general, and the REALbasic implementation in particular.

C PROGRAMMING

by Al Stevens

Al finds out why the dependency carousel is central to both Linux and open-source development.

EMBEDDED SPACE

by Ed Nisley

Ed puts the brakes on embedded systems design as he looks around his house and wonders how all that stuff works.

JAVA Q&A

by Terry Smith

While writing data access objects (DAO) from scratch in Java can be a daunting task, Terry presents some short cuts that turn the pain to gain.

ALGORITHM ALLEY

by Thomas Gettys

A fundamental topic in computational geometry involves convex hulls, which are used in applications ranging from statistics, soil sciences, and medical imaging, to character recognition, parts inspection, and robotics systems.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

The beat goes on in the Safetown police department as the good guys look for the most efficient way to maneuver through the streets.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson

Greg has been up nights reading this month, plowing through the likes of XML for the World Wide Web, Writing Effective Use Cases, 3D Game Engine Design, Open Source Development with CVS, Computational Molecular Biology, SSL and TLS: Designing and Building Secure Systems, and Understanding SOAP.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by Nicholas Baran

OF INTEREST

by Shannon Cochran

SWAINE'S FLAMES

by Michael Swaine


DDJ, June 2001 -- Object-Oriented Software Design

FEATURES

INTEGRATING CMOS WITH UML

by Mark Coats and Terry Mellon

The goal of the Coats-Mellon Operational Specification (CMOS) is to provide a rigorous, yet straightforward, approach to defining system behavior early in the software-development process. Mark and Terry apply CMOS to the Unified Modeling Language.

A UNIVERSAL MODEL FOR DESIGNING THE ENTITY EJB LAYER

by Jonathan Leibundguth, Michael Pease, and Andrei Povodyrev

Entity EJBs generally come in two varieties: container-managed persistent and bean-managed persistent. Our authors propose a third flavor, the Universum Bean.

BUILDING SERVICE-BASED ARCHITECTURES WITH JINI

by Bill Pierce

Object-oriented schemes such as service-based architectures built on Sun's Jini framework for distributed services provide more flexibility than the traditional client-server model.

C++ CONCEPT CHECKING

by Jeremy Siek and Andrew Lumsdaine

The flexibility provided by C++ templates generally comes at the expense of type safety. Jeremy and Andrew present a technique for reintroducing type safety into template functions.

AN INFORMATION ASSEMBLY LINE IN PERL

by Ray Snow

How would you go about organizing thousands of daily news stories from hundreds of Internet-based sources? Ray turned to Perl's pattern-matching capabilities to cull, tag, sort, and present all the news that's fit.

WAP CLIENTS & SET PROTOCOL

by Liang Jin, Shi Ren, Liang Feng, and Gao Zheng Hua

Our authors examine both the Secure Electronic Transaction (SET) protocol and the Wireless Application Protocol (WAP), then present a model that uses WAP to support SET with a SET thin client and smartcard technology.

EMBEDDED SYSTEMS

PROGRAMMING IN SDL & UML

by Morgan Björkander

Morgan examines a combination of the Unified Modeling Language (UML) and Specification and Description Language (SDL) that forms a modeling paradigm for visual software engineering that is superior to either language by itself.

INTERNET PROGRAMMING

CREATING HTML USER INTERFACES FOR SERVER PROGRAMS

by Michael Janulaitis

Creating native client interfaces for multiple platforms can be a costly process. Michael's solution is to create a single HTML UI for server applications running on both Apache Web Server 1.3.14 and Microsoft's Internet Information Services 5.0 (IIS).

PROGRAMMER'S TOOLCHEST

EXAMINING CORBA INTEROPERABILITY

by Eric Ironside, Letha Etzkorn, and David Zajac

Our authors present conclusions from a study of ORB interoperability and code portability to determine the feasibility of CORBA as an interoperable standard for both new and legacy code within mobile and/or embedded computing environments, and to create a working demonstration of the mobile/embedded environment using CORBA.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael takes a look at Apple's new MacOS X operating system, then puts Wolfram's CalculationCenter (which Michael sees as a mathematical tool for the rest of us) to work.

C PROGRAMMING

by Al Stevens

What with drivers, editors, Linux, mail, and more, Al adds a new meaning to the term "multitasking."

EMBEDDED SPACE

by Ed Nisley

A trip to the bright lights of the LinuxWorld Expo gets Ed thinking about the world of embedded Linux.

JAVA Q&A

by Brad Cox

Can Java handle multiline strings? Yes, and Brad shows you how.

ALGORITHM ALLEY

by Shawn Bayern

Shawn presents strategies to adapt a generally memory-intensive recursive algorithm for use in environments where memory may be limited and reusability is required.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

It's probably a mistake to tell shipping-magnate Katy McLean that she floats your boat, but that doesn't mean she isn't looking for the most efficient port in a storm.

PROGRAMMER'S BOOKSHELF

by Doug Reilly

Doug examines a trio of SQL books, including Inside Microsoft SQL Server 2000, by Kalen Delaney; Advanced Transact-SQL Programming for SQL Server 2000, by Itzik Ben-Gan and Tom Moreau; and Robert Vieira's Professional SQL Server 2000 Programming.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by Nicholas Baran

OF INTEREST

by Shannon Cochran

SWAINE'S FLAMES

by Michael Swaine


DDJ, July 2001 -- High-Performance Computing

OPTIMIZING IA-64 PERFORMANCE

by Sverre Jarp

The IA-64, also known as Itanium, is a 64-bit processor designed by Hewlett-Packard and Intel that supports performance-enhancing techniques such as predication, speculation, rotating registers, and the like. It also sports a new kind of instruction set based on the Explicit Parallel Instruction Computing (EPIC) specification.

AUTOMATICALLY EXPLOITING IMPLICIT PARALLELISM

by Aart J.C. Bik, Milind Girkar, Paul M. Grey, and Xinmin Tian

Recent trends in processor design have introduced new ways for programmers to exploit parallelism — and "smarter" compilers do much of the work for you.

MULTITHREADING, FTHREADS, & VISUAL FORTRAN

by Dan Nagle

Dan presents a Fortran module that helps you write multithreaded programs for Windows-based applications.

IMPROVING SCALABILITY OF MULTITHREADED DYNAMIC MEMORY ALLOCATION

by Greg Nakhimovsky

Multiprocessor/multithreaded environments add a new dimension to the familiar malloc facility. The "MT-hot" implementation Greg presents here lets multiple threads execute in parallel without major delays.

A TRIUMPH OF SIMPLICITY: JAMES CLARK ON MARKUP LANGUAGES AND XML

by Eugene Eric Kim

Whether you know it or not, James Clark has made your life easier by creating a number of open-source tools such as expat (an XML parser), groff (a GNU version of troff), TREX (an XML schema language), and more.

PALM OS MEMORY LEAK DETECTION

by Jeff Ishaq

Nothing can stop Palm development faster than unexpectedly running out of memory, so every byte of dynamic heap is precious. Jeff presents techniques for hunting down memory leaks, then provides a robust memory leak detection system.

EMBEDDED SYSTEMS

ACTIVEX CONTROLS FOR EMBEDDED VISUAL BASIC

by Steve Lardieri

Using the ActiveX control Steve presents here, there's no need to resort to C++ when your Embedded Visual Basic applications need speed and power.

INTERNET PROGRAMMING

WEB-BASED VIDEO MONITORING

by Michael Larson

"Streamhealth," the automated web-site monitoring tool Michael presents here, was designed to monitor streaming video, but is flexible enough to accommodate new stream types.

PROGRAMMER'S TOOLCHEST

ANDROID: OPEN-SOURCE SCRIPTING FOR TESTING & AUTOMATION

by Larry Smith and Cameron Laird

Android is a tool for recording and playing back scripts of events. In other words, it is a personal assistant that's smart enough to "do what you mean" when drudge work is waiting.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael gets back to Basics again, then turns his attention to Tim Berners-Lee's newest project — the Semantic Web. Puzzled? Michael's got that, too.

C PROGRAMMING

by Al Stevens

Being on the road with the DobbsMobile means that Al gets a Linux editor and compiler — almost.

EMBEDDED SPACE

by Ed Nisley

There's "soft" real time, "hard" real time, and to Ed's way of thinking, there's also "brittle" real time.

JAVA Q&A

by Christophe de Dinechin

Moka is a Java-to-Java compiler that lets you extend Java to add features the language currently does not support.

ALGORITHM ALLEY

by Erik Demaine

Dynamically resizable arrays are an important answer to many problems. Erik describes several ways to resize an array, each with its own advantages and disadvantages.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

It may be Greek to you, but it is just another archaeological problem for Natasha as she returns to Ecco and Liane's digs.

PROGRAMMER'S BOOKSHELF

by Jeff Cromwell

Jeff comes clean with his examination of XML and SOAP Programming for BizTalk Servers, by Brain Travis; Understanding SOAP, by Kenn Scribner and Mark Stiver; Applied XML Solutions, by Benoit Marchal; and Developing XML Solutions, by Jake Sturm.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by Nicholas Baran

OF INTEREST

by Shannon Cochran and Della Song

SWAINE'S FLAMES

by Michael Swaine


DDJ, August 2001 -- Database Development

FEATURES

DBMS: PAST, PRESENT, AND FUTURE

by Ken White

From ISAM to XML, data has proven to be the power that runs businesses. Ken examines the database landscape to see where we've been — and where we will be going.

THREADING & THE .NET FRAMEWORK 30

by Douglas Reilly

Microsoft's .NET Framework offers a number of features, such as threading, that simplify difficult tasks.

THE STRIX OBJECT PERSISTENCE ENGINE

by César A. Gonzalez Perez

Strix, a software layer that works between an application and the relational database back end, interfaces relational databases with object-oriented programming languages.

A JDBC WRAPPER — IN PYTHON!

by C.K. Tan

Database access via JDBC can be less than straightforward. To simplify the process, C.K. presents a Python-based framework that wraps around JDBC.

APPFORGE: VISUAL BASIC FOR THE PALM OS

by Clayton E. Crooks II

AppForge was developed as an add-in to the standard Visual Basic 6 IDE. Clayton uses it to build a database for the Palm OS.

EMBEDDED SYSTEMS

OBJECT-ORIENTED DEVICE NETWORKING

by Michael Howard

Michael presents an object-oriented approach that is an alternative to the traditional ways of designing networked devices.

INTERNET PROGRAMMING

A TINY PERL SERVER PAGES ENGINE

by Andy Yuen

Perl Server Pages is a small footprint Perl-based cross-platform JSP-like facility for generating dynamic pages for both UNIX and Windows.

PROGRAMMER'S TOOLCHEST

EXAMINING THE FDF TOOLKIT

by Lauren Hightower

Lauren shows how you can use Adobe's Forms Data Format (FDF) Toolkit to make PDF documents come alive.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Was Bill Gates a good programmer? What does Prolog have to do with the Semantic Web? And what did Kent Beck have for lunch?

C PROGRAMMING

by Al Stevens

There's nothing like a comment or two about programmer's editors to fill up the mailbag.

EMBEDDED SPACE

by Ed Nisley

Every real-time project starts with a design point that determines what's to be included and — more importantly — what's to be left out of the final product.

JAVA Q&A

by Nadine McKenzie

Is JavaScript an object-oriented language? Well, it does utilize prototype-based inheritance and support encapsulation.

ALGORITHM ALLEY

by William Stallings

Orthogonal codes are sets of sequences extensively used in wireless communication.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

It isn't the Star Wars project, but the Air Force still has a base to protect and Ecco and Liane are called upon to help.

PROGRAMMER'S BOOKSHELF

by Peter Roth

Peter examines a pair of C++ books — C++Builder 5 Developer's Guide and C++ and Object-Oriented Numeric Computing for Scientists and Engineers.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by Shannon Cochran

OF INTEREST

by Shannon Cochran

and Della Song

SWAINE'S FLAMES

by Michael Swaine


DDJ, September 2001 — Distributed Computing

FEATURES

DEVELOPING SCALABLE DISTRIBUTED APPLICATIONS

by Mario A. Torres

Mario presents a generic model designed to serve as a blueprint for development of scalable distributed computing applications.

A PORTABLE DISTRIBUTED EVENT-LOGGING FACILITY

by Ivan Kiselev

Every application needs event-logging facilities to monitor the state of applications. Ivan presents a distributed portable event-logging facility that is simple, flexible, and relatively platform independent.

DISTRIBUTED COMPUTING COMPONENT LIFECYCLES

by Cliff Berg

A fundamental problem in all distributed systems is that different components are maintained on different schedules — and things inevitably break. Cliff presents a framework designed to synchronize components in distributed systems.

THE DELPHI XML SAX2 COMPONENT & MSXML 3.0

by Danny Heijl

Danny shows how to use the C++ COM interfaces of Microsoft's MSXML 3.0 SAX2 parser with Borland Delphi. He then presents TSAXParser, a Delphi component that uses these interfaces, but shields you from their complexities.

SHIFT-LEFT TESTING

by Larry Smith

By combining development and quality assurance earlier and more deeply in your project plan, you can expand your testing program and reduce manpower and equipment needs.

THE CURL PROGRAMMING ENVIRONMENT

by Friedger Müffke

Curl is a programming environment designed for developing interactive Internet applications. As such, it combines the ease of markup languages with the functionality of object-oriented ones.

PROGRAMMING MOBILE PHONES

by Panos Kougiouris

Panos presents one approach to updating contact information for mobile phones by downloading contacts from PCs running Outlook 2000 to Nokia mobile phones.

EMBEDDED SYSTEMS

TRAMPOLINES FOR EMBEDDED SYSTEMS

by Joseph M. Link

Trampolines are short snippets of code that start up other snippets of code to, among other things, minimize the latency of interrupt handlers.

INTERNET PROGRAMMING

SOAP: SIMPLIFYING DISTRIBUTED DEVELOPMENT

by Neil Gunton

The Simple Object Access Protocol (SOAP) was developed as an open RPC protocol using XML, targeting much the same problem set as CORBA, DCOM, and Java RMI. Neil uses it to add new facilities to his web site.

PROGRAMMER'S TOOLCHEST

SELECTING EJB APPLICATION SERVERS

by Ragae Ghaly, Krishna Kothapalli, and Uma Meyyappan

The Enterprise JavaBeans (EJB) architecture is the standard component architecture for building distributed object-oriented business applications in Java.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

This month, Michael trolls the seas of software development in search of the next "realizable fantasy."

C PROGRAMMING

by Al Stevens

Between not being able to play Myst III and the release of gcc 3.0, Al has a lot of ground to cover this month.

EMBEDDED SPACE

by Ed Nisley

Ed continues his examination of the space where real time and Linux overlap.

JAVA Q&A

by Jared Jackson

Resource bundles provide the means for utilizing locale-specific information without having to maintain multiple versions of code for those various locales.

ALGORITHM ALLEY

by Girish Keshav Palshikar

Simulated annealing is a probabilistic heuristic optimization algorithm that mimics the natural process of slow cooling of liquids that leads to a solid form that has the lowest energy.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

The problem Ecco and Liane face this month doesn't involve too many generals and not enough privates, but in figuring out who gives the orders and who carries them out.

PROGRAMMER'S BOOKSHELF

by William Stallings and Lou Grinzo

William examines a trio of Bluetooth books, including Bluetooth: Connect Without Cables, by Jennifer Bray and Charles Sturman, Bluetooth Revealed, by Brent Miller and Chatschik Bisdikian, and Bluetooth Demystified, by Nathan Muller. Lou weighs in on A Programmer's Introduction to C#, by Eric Gunnerson.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by Shannon Cochran

OF INTEREST

by Della Song

SWAINE'S FLAMES

by Michael Swaine


DDJ, October 2001 -- C++ Programming

FEATURES

REGULAR EXPRESSIONS IN C++

by John Maddock

Regex++ is a regular expression engine that makes C++ as versatile for text processing as script-based languages like Awk and Perl.

EXTRACTION AND EXAMINATION OF RELATIONS IN C++

by Keith Paton

Design flaws can be automatically detected, as long as you can extract and manipulate sets of key relationships among the entities in C++ systems.

PRECOMPILED HEADERS & NORMAL C++ SEMANTICS

by Jeffrey Taylor

If arranged correctly, precompiled headers, like those in Visual C++, can double the build speed. However, it is possible also to arrange precompiled header files in a manner that is inconsistent with normal C++ semantics.

C++ SET-THEORETIC OPERATIONS ON VIRTUAL CONTAINERS

by Gregory Begelman, Lev Finkelstein, and Evgeniy Gabrilovich

The C++ Standard Template Library (STL) provides the set-theoretic operations union, intersection, difference, and symmetric difference, accessible through the header file <algorithm>.

C# & PERL

by Talbott Crowell

Although C# is an evolution of C/C++ much like Java, it also borrows from other languages — and has facilities familiar to Perl. Talbott presents common Perl scripts that you can implement in C#.

SCRIPTING WITH JAVA & PYTHON

by Boudewijn Rempt

Boudewijn shows how you can embed a standard language such as Python into a Java application.

SHORT MESSAGE SERVICES

by Ron Hume

Short Message Services (SMS) let you send short text-based messages between wireless devices, such as cell phones and pagers.

EMBEDDED SYSTEMS

AN EMBEDDABLE HTTP SERVER

by M. Tim Jones

Most HTTP servers for embedded devices place requirements on the design of embedded systems that adversely effect cost. The embeddable HTTP server Tim presents here is small, but still powerful enough to get the job done.

INTERNET PROGRAMMING

HIGH-PERFORMANCE WEB SITES: ADO VERSUS MSXML

by Tim Chester

ADO and MSXML are tools that can be used to create high-performance web sites. MSXML provides flexibility, but ADO offers performance.

PROGRAMMER'S TOOLCHEST

VOICEXML AND THE VOICE/WEB ENVIRONMENT

by Lee Anne Phillips

While the Internet is making inroads into the public switched-telephone network, XML protocols such as VoiceXML are providing access to a set of tools that address the entire range of web applications.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael proves once again that he is a man of the (other) world.

C PROGRAMMING

by Al Stevens

Al continues his search for the perfect C++ class library for Linux.

EMBEDDED SPACE

by Ed Nisley

"Real time" sometimes doesn't have anything to do with "RTOS." Ed examines the problems you face when you have to decide which clock is giving you the real time.

JAVA Q&A

by Art Jolin

Can J2EE manage cache and pool memory? Yes, and Art shows you how.

ALGORITHM ALLEY

by Tom Cargill

Data that compresses well under a run-length encoding mechanism can be encoded in a way that is compatible with LZW's output, but independent of its patented algorithm.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Dr. Ecco and Liane divide their attention to add up the pluses and minuses in an effort to multiply the fun factor of Astrid Svensen's math class.

PROGRAMMER'S BOOKSHELF

by Barbara Lach-Smith

GPRS and 3G Wireless Applications: Professional Developer's Guide, by Christoffer Andersson, arrives just as the mobile Internet seems ready to take off.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by Shannon Cochran

OF INTEREST

by Della Song

SWAINE'S FLAMES

by Michael Swaine


DDJ, November 2001 -- Computer Security

FEATURES

AUDIO WATERMARKING

by Michael Arnold

Digital watermarking is a security technique that provides copy protection, authentication, and more for audio and other forms of information. The approach Michael presents here is based on a statistical algorithm working in the Fourier domain.

DEFECTIVE SIGN-AND-ENCRYPT

by Don Davis

Over the past 25 years, most security protocols have focused on securing network connections, ignoring relatively simple file-encryption problems. Don presents guidelines for avoiding a common security pitfall when combining encryption with digital signatures.

BANNERS & INTERNET PROTOCOLS

by Bruce Schneier and Elizabeth Zwicky

SMTP banners that contain version information can result in security vulnerabilities. Our authors show how to close this hole.

INSIDE eBOOK SECURITY

by Daniel V. Bailey

Daniel reports on Dmitry Sklyarov's analysis of PC-based digital rights management security techniques.

BUILDING DYNAMIC FAIL-OVER JAVA SERVERS

by Chang Sau Sheong

System outage isn't just a hardware problem. The design and implementation of software must be robust and hardy enough to survive failures of all kinds.

UNDERSTANDING PHOTOMOSAICS

by Manuel Lopez Michelone and Marcelo Perez Medel

A photomosaic is a digital image made up of other digital images, pieced together by software.

EXCEPTION HANDLING IN KYLIX

by Eli Boling and Chuck Jazdzewski

Kylix brings Borland's Delphi toolset and environment from Windows to Linux. And one of the most challenging aspects of the port involved exception handling.

PACKETCABLE SECURITY

by Linden deCarmo

The PacketCable Security Specification provides rigorous security standards for cable-based telephony networks.

EMBEDDED SYSTEMS

XML FOR INSTRUMENT CONTROL AND MONITORING

by David Cox

The Instrument Markup Language is an XML dialect designed to aid in the exchange of data and commands with remote instruments.

INTERNET PROGRAMMING

E-MAIL RELAYING

by Robert Kiesling

The rapidly increasing number of e-mail relay packages means interoperability challenges for programmers who need compatibility with existing e-mail software.

PROGRAMMER'S TOOLCHEST

BIOMETRIC SECURITY

by Richard Dale

Biometrics offers a strong authentication alternative to traditional passwords and tokens, and can do so without imposing the burden and cost of application source-code modification.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Just because Michael sees conspiracies everywhere, doesn't mean he's fantasizing. Or does it?

C PROGRAMMING

by Al Stevens

If he didn't know before, you can bet Al knows now that Schroeder is the piano player and Linus is the blanket-holder. Al goes on to examine programming issues related to a specific DSP audio problem.

EMBEDDED SPACE

by Ed Nisley

It's no surprise that microcontrollers and other embedded devices are used in life-support systems. But can you really, really trust them?

JAVA Q&A

by Oliver Goldman

Java provides two types of exceptions: checked and unchecked.

ALGORITHM ALLEY

by Jiri Kripac

The algorithm Jiri presents here performs undo/redo for a general network of interconnected objects.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

Ecco and Liane discover that urban planning in Texas isn't an oxymoron after all.

PROGRAMMER'S BOOKSHELF

by Jack J. Woehr

Jack examines a pair of books that focus on embedded systems: Embedded Controller Hardware Design, by Ken Arnold; and Programming Microcontrollers in C, Second Edition, by

Ted van Sickle.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

NEWS & VIEWS

by Shannon Cochran

OF INTEREST

by Della Song

SWAINE'S FLAMES

by Michael Swaine


DDJ, December 2001 -- Operating Systems

FEATURES

PRIVATE NAMESPACES FOR LINUX

by Ronald G. Minnich

Private namespaces let groups of processes construct their own namespace. Ron implements them for Linux to solve problems in both distributed and cluster computing.

THE MENUET OPERATING SYSTEM

by Ville Mikael Turjanmaa

Menuet is a multitasking real-time operating system that fits on a single 1.44-MB floppy diskette — that's right, a single diskette!

THE NEWOS OPERATING SYSTEM

by Travis K. Geiselbrecht

NewOS is a freely available lightweight operating system written in C for platforms ranging from Intel- and AMD-based PCs to the Sega Dreamcast.

SYNCHRONIZATION MONITORS FOR WIN32

by Thomas Becker

Thomas presents a Java-style synchronization monitor for multithreaded Win32 development.

REDIRECTION THROUGH C++ FUNCTION POINTERS

by Bill Trudell

Redirection through C++ function pointers abstracts clients from many implementations of underlying functions. The Logger class Bill presents here is one way you can use function pointers for debugging and similar activities.

EXAMINING WINDOWS CE 3.0 REAL-TIME CAPABILITIES

by Bart Van Beneden

So how real is Windows CE 3.0 real time? That's the question Bart and his coworkers were asked to find out — and here are their conclusions.

EMBEDDED SYSTEMS

BALANCING NETWORK LOAD WITH PRIORITY QUEUES

by Frank Fabian

A primary concern Frank had when building a web-based lighting control system involved identifying whether adequate response to all web users was even possible.

INTERNET PROGRAMMING

A REQUEST SCHEDULING LAYER FOR APACHE

by Ramkumar Ramaswamy

Request prioritization lets you efficiently utilize server resources without overkill. Ramkumar describes the modifications he made to the Apache server so that it could accommodate request scheduling.

PROGRAMMER'S TOOLCHEST

VNOS: THE VISUAL NETWORK OPERATING SYSTEM

by Mark Lacas

VNOS, the Visual Network Operating System, is a visual, event-driven, data-flow platform that lets you monitor and control physical devices on any network.

COLUMNS

PROGRAMMING PARADIGMS

by Michael Swaine

Michael speculates on what the big deal is about nanotechnology before turning to toddlers taking the Turing test.

C PROGRAMMING

by Al Stevens

Al continues development of his Music Minus Whatever project, which lets you encode three discrete logical channels of music into one stereo audio file.

EMBEDDED SPACE

by Ed Nisley

In-car electronics, ranging from cellular phones and entertainment systems to Internet connections, are affecting drivers in ways that we're only now beginning to recognize.

JAVA Q&A

by Tim Kientzle

Tim focuses on JDBC as he examines techniques for optimizing the performance of database-centric applications.

ALGORITHM ALLEY

by Shehrzad Qureshi

Shehrzad transforms an algorithm from C/C++-style code to vectorized Matlab code, then shows the performance gains resulting from this transformation.

DR. ECCO'S OMNIHEURIST CORNER

by Dennis E. Shasha

The dastardly Benjamin Baskerhound has turned over a new leaf, as he matches Xs and Os with criminals for a change.

PROGRAMMER'S BOOKSHELF

by Gregory V. Wilson

Greg examines a bunch of books this month, including Network Programming with Perl, by Lincoln Stein; Perl Debugged, by Peter Scott and Ed Wright; Beyond Contact: A Guide to SETI and Communicating with Alien Civilizations, by Brian McConnell; SSH, the Secure Shell: The Definitive Guide, by Daniel Barrett and Richard Silverman; and Hacking Exposed: Network Security Secrets & Solutions, Second Edition, by Joel Scambray, Stuart McClure, and George Kurtz.

FORUM

EDITORIAL

by Jonathan Erickson

LETTERS

by you

THE NEW ADVENTURES OF VERITY STOB

by Verity Stob

NEWS & VIEWS

by Shannon Cochran

OF INTEREST

by Della Song

SWAINE'S FLAMES

by Michael Swaine


DDJ, January 2002
Web Services

FEATURES

Mono & the .NET Framework


by Miguel de Icaza and Brian Jepson
Mono, an open-source implementation of the .NET Development Framework, is compatible with Microsoft's .NET Framework and offers compatible implementations of FCL libraries, such as ADO.NET and Windows Forms.

Web Services & Java Server Pages


by John M. Kanalakis, Jr.
Web services are collections of functions bundled together to deliver specific functionality to Internet-enabled applications. John presents a portal that shows how web applications can tie together distributed web services to offer a single solution.

Reducing Dependencies In .NET Development


by Scott Allen
GDEPENDS, the utility Scott presents here, leverages .NET Framework features to graphically display project dependencies parsed from Microsoft Visual Studio files.

Java Mobile Agents & the Aglets SDK


by M. Tim Jones
Tim uses the Aglets framework to develop Java mobile agents on Linux. The mobile agent he presents migrates to a number of hosts and performs data collection along the way.

Wireless Networking & Berkeley DB


by Ray Van Tassle and Marjorie Richardson
Berkeley DB is the embedded database engine that's at the core of Motorola's Wireless Mobile Network Gateway, an infrastructure box that supports up to 15,000 mobile units, each with its own IP address, with a message throughput of 400,000 messages per hour.

EMBEDDED SYSTEMS

Real-Time Music Synthesis & Embedded Applications


by Max I. Fomitchev and Joe Hershberger
Building an interactive musical toy that uses real-time music synthesis to generate on-the-fly music is as much a software as a hardware challenge. From the score generator to the microcontroller, Max and Joe describe the system they built.

INTERNET PROGRAMMING

Anatomy of a Parasitic Computer


by Vincent W. Freeh
Parasitic computing is a twist on the distributed computing paradigm whereby a parasite computer extracts computational cycles unbeknownst to the host system.

PROGRAMMER'S TOOLCHEST

Weather Data Distribution & System Monitoring


by Chris McClellen
One of the hallmarks of The Weather Channel is that it localizes weather data to thousands of geographic regions of the United States, no matter how large or small. Chris examines how the data is processed and transmitted from The Weather Channel's systems to the satellite.

COLUMNS

Programming Paradigms


by Michael Swaine
Michael tries to make sense of the Wayback Machine, the Semantic Web, iPod, and VISPs.

C Programming


by Al Stevens
There's more to plug-ins than just plugging them in, as Al finds out the hard way.

Embedded Space


by Ed Nisley
From CPU boards to real-time operating systems, Ed takes in the sights (and sounds) of this fall's Embedded Systems Conference in Boston.

Java Q&A


by Mike Jennings
Sun Microsystems' freely available Java plug-in tool works with operating system/browser combinations ranging from Netscape Navigator and IE on Windows to Netscape Navigator on Linux. Mike shows how to use the tool to deploy Java 1.3-enabled applets.

Algorithm Alley


by David A. Scott
When it comes to compression, properly handling the end of the bitstream requires modeling what is really happening. David examines one way to do this using arithmetic coding.

Dr. Ecco's Omniheurist Corner


by Dennis E. Shasha
Ecco and Liane need to come up with a way of using valuable, but scarce, water to keep valuable, but equally scarce, cacti alive in the Sonoran desert. Maybe you can help out.

Programmer's Bookshelf


by Lou Grinzo
Lou takes a look at Andrew Troelsen's recently released C# and the .NET Platform.

FORUM

Editorial


by Jonathan Erickson

Letters


by you

The New Adventures Of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Della Song

Swaine's Flames


by Michael Swaine

DDJ, February 2002
Programming Languages

FEATURES

The MIT Lightweight Languages Workshop


by Eugene Eric Kim
So what happens if you bring together programming language implementors from industry and programming language researchers from academia? For starters, some lively debate about why programming languages are the way they are and where they might be going.

Mondrian for .NET


by Jason Smith, Nigel Perry, and Erik Meijer
Mondrian is a modern, purely functional language specifically designed to leverage the possibilities of the .NET Framework.

The D Programming Language


by Walter Bright
D is a programming language that looks a lot like C and C++, but eliminates features that make programs difficult to write, debug, test, and maintain.

Tcl/Tk and SKILL Mix It Up


by Christopher Nelson
As Chris found out, adapting a GUI written in Tcl/Tk with SKILL — a proprietary language based on Lisp — is a job easier said than done.

The Fortran 2000 Standard


by Dan Nagle
Among other features, Fortran 2000 fully supports object-oriented programming, IEEE floating point, and enhanced derived types and I/O.

Creating Libraries for Multiple Programming Languages


by Ken Martin, William Hoffman, and Berk Geveci
If you ask five programmers what language they use, you'll probably get five different answers. So how do you develop libraries that support a wide range of languages? Here's one approach.

EMBEDDED SYSTEMS

Bob Meets NUON


by David Betz
Bob is a dynamic object-oriented language with syntax similar to C/C++, Java, and JavaScript — and it is used in NUON, a hardware/software platform for DVD players and set-top boxes.

INTERNET PROGRAMMING

Zope Page Templates


by Amos Latteier
Zope Page Templates let you define dynamic content using attributes on existing HTML/XML tags.

PROGRAMMER'S TOOLCHEST

Borland's CLX Component Framework


by Ray Lischner
CLX is a component framework for cross-platform development from Borland Software that debuted in Kylix and Linux. It is also available for Windows in Delphi 6.

COLUMNS

Programming Paradigms


by Michael Swaine
Michael looks at the state of scripting tools for MacOS X, reviews a popular history of computer programming, and reports on recent developments in nanotechnology.

C Programming


by Al Stevens
Al continues with his development of a C++ project for playing back music on a PC. This month, he addresses one part of it — waveform playback and recording on the Win32 platform.

Embedded Space


by Ed Nisley
So, is embedded-systems development a cup you can pour Java into? That's the question Ed examines this month.

Java Q&A


by Surlu Rao
Message-driven beans combine the features of container-managed EJB and the Java Messaging Service (JMS).

Algorithm Alley


by William R. Mahoney
Here's yet another record-selection algorithm for your database toolbox.

Dr. Ecco's Omniheurist Corner


by Dennis E. Shasha
Which member of the Napoleonic Society Dr. Ecco meets this month will come up short?

Programmer's Bookshelf


by Gregory V. Wilson
The books Greg examines this month include C++ Footprint and Performance Optimization; Python Standard Library; Applying Use Case Driven Object Modeling with UML; and Structure and Interpretation of Classical Mechanics.

FORUM

Editorial


by Jonathan Erickson

Letters


by you

The New Adventures Of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Della Song

Swaine's Flames


by Michael Swaine

DDJ, March 2002
Scientific & Engineering Computing

FEATURES

Satellite Navigation & the Internet


by Felix Toran-Marti, Javier Ventura-Traveset, and Juan Carlos de Mateo
The European Space Agency's SISNET project takes satellite navigation signals and broadcasts them through the Internet to users in real time.

C99 & Numeric Computing


by Harry H. Cheng
C99 is a milestone in C's evolution into becoming a viable programming language for scientific and numerical computing.

Python & Finite Elements


by Alexander Pletzer
ELLIPT2D is a finite element package written in Python that's designed to solve elliptic equations in two dimensions.

Debugging PHP Using A C++ Compiler


by Forrest J. Cavalier III
PHP2C++ is a PHP to C++ translator that Forrest uses to accelerate debugging and auditing.

EMBEDDED SYSTEMS

Embedded Development with Qt/Embedded


by Matthias Kalle Dalheimer and Steffen Hansen
Trolltech's Qt/Embedded toolkit is designed for development of Linux-based embedded devices.

INTERNET PROGRAMMING

Securing XML


by Amir Herzberg
Amir examines several proposed XML security mechanisms, including XML Digital Signatures and XML Encryption.

WORKBENCH

Programmer's Toolchest


Examining VB.NET
by Lauren Hightower

Java Q&A


How Do I Map SQL Database Tables to Java Objects?
by Michael J. Yuan

Algorithm Alley


Graph Traversals
by Timothy Rolfe

Programmer's Bookshelf


Doubling Down on the Good and the Okay
by Gregory V. Wilson

COLUMNS

Programming Paradigms


by Michael Swaine

C Programming


by Al Stevens

Embedded Space


by Ed Nisley

Dr. Ecco's Omniheurist Corner


by Dennis E. Shasha

FORUM

Editorial


by Jonathan Erickson

Letters


by you

The New Adventures Of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Della Song

Swaine's Flames


by Michael Swaine

DDJ, April 2002
Java Programming

FEATURES

Java's new Considered Harmful


by Jonathan Amsterdam
Even though Java's new keyword is central to the language, there may be better ways of getting the job done.

Implementing the JMS Publish/Subscribe API


by Philip Rousselle
The Java Message Service API provides a powerful message-passing API for distributed computing.

Java Security Architecture and Extensions


by Volker Roth
The Java Cryptography Architecture is a framework that attempts to provide a common interface for accessing basic cryptographic primitives.

The MPEG-4 Java API & MPEGlets


by Aaron E. Walsh
Aaron introduces a suite of Java APIs for MPEG-4 and shows how you can use them to build highly dynamic and interactive content.

GUMBIE: A GUI Generator for Jython


by Peter Brinkmann
Jython is a 100 percent pure Java implementation of Python that makes Java scriptable. Peter uses it to build his Gumbie GUI tool.

Implementing C++ Servlet Containers


by John Hinke
By combining the performance benefits of C++ and the power of the Java servlet API, you can more easily create robust web applications.

EMBEDDED SYSTEMS

Tracking Down Killer Bugs


by Eric McRae
When it comes to embedded system development, you occasionally run across a bug that eludes all normal techniques for discovery.

INTERNET PROGRAMMING

Globalized Web Applications & ASP.NET


by Max Poliashenko and Chip Andrews
The .NET framework and ASP.NET provide many features to support development and deployment of international applications.

WORKBENCH

Programmer's Toolchest


Java's Generic Connection Framework
by Paul Tremblett

Java Q&A


How Can I Make My Java Servlets Faster?
by Tim Kientzle

Algorithm Alley


Unbiasing Random Bits
by Michael Mitzenmacher

Programmer's Bookshelf


Performance Modeling for the Masses
by Stathis Papaefstathiou

COLUMNS

Programming Paradigms


by Michael Swaine

C Programming


by Al Stevens

Embedded Space


by Ed Nisley

Dr. Ecco's Omniheurist Corner


by Dennis E. Shasha

FORUM

Editorial


by Jonathan Erickson

Letters


by you

The New Adventures Of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Della Song

Swaine's Flames


by Michael Swaine

DDJ, May 2002
Algorithms

FEATURES

Dr. Dobb's Excellence in Programming Awards


Adele Goldberg and Dan Ingalls are pioneers in object-oriented programming in general, and the Smalltalk language in particular.

Image Scaling With Bresenham


by Thiadmer Riemersma
The graphics algorithm Thiadmer presents here is quick, produces a quality equivalent to that of linear interpolation, and can zoom up and down.

Good Hash Tables & Multiple Hash Functions


by Michael Mitzenmacher
Michael's multiple hash method produces good hash tables for applications ranging from employee databases to Internet routers.

Disk Thrashing & the Pitfalls of Virtual Memory


by Bartosz Milewski
Disk thrashing, also known as virtual memory thrashing, is among the more serious software performance problems.

External SQL Rewriters


by Richard To and Cara Pang
Database query optimizers optimize SQL statements by generating alternative execution plans to find the one with the least estimated cost.

EMBEDDED SYSTEMS

Optimizing Embedded Linux


by Todd Fischer
Todd shares seven hard-won techniques to aid in the embedded Linux development process.

INTERNET PROGRAMMING

Generating JavaScript from Perl


by Stephen B. Jenkins
The techniques Stephen presents here help you provide users with a better UI and reduce the load on web servers.

WORKBENCH

Programmer's Toolchest


Examining RubyCocoa
by Chris Thomas

Java Q&A


How Do I Correctly Implement the equals() Method?
by Tal Cohen

Algorithm Alley


Quicksort and Radix Sorts On Lists
by Steven Pigeon

Programmer's Bookshelf


Filling In the Gaps
by Gregory V. Wilson

COLUMNS

Programming Paradigms


by Michael Swaine

C Programming


by Al Stevens

Embedded Space


by Ed Nisley

Dr. Ecco's Omniheurist Corner


by Dennis E. Shasha

FORUM

Editorial


by Jonathan Erickson

Letters


by you

The New Adventures Of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Della Song

Swaine's Flames


by Michael Swaine

DDJ, June 2002
Communications & Networking

FEATURES

A C++ Socket Library for Linux


by Jason But
SocketCC, the C++ class library Jason presents here, supports both IPv4 and IPv6 network communications using both TCP- and UDP-style sockets. And it's freely available.

Tiny Perl Server Pages and MySQL


by Andy Yuen and Hung-Wai Yuen
Our authors use MySQL and Perl Server Pages to explore web-site personalization techniques.

The Mail4ME Project


by Jörg Pleumann
Mail4ME is a lightweight implementation of the POP3 and SMTP protocols — including MIME support and with IMAP support to come — allowing Java-based wireless devices to access e-mail services at any time, from any place.

Verifying Installation Environments


by Christopher J. Trueman
Chris describes a system that separates the process of verifying the environment on which your program will run from that of the installation process itself.

EMBEDDED SYSTEMS

Examining QNX RTOS 6.1


by Bart Van Beneden
QNX RTOS 6.1 is a message-based, real-time operating system with a true microkernel architecture.

INTERNET PROGRAMMING

ASP.NET Server Components


by Douglas Reilly
ASP.NET lets you create components in VB.NET and C#. And since these components are not COM components, many COM overhead and deployment issues disappear.

WORKBENCH

Programmer's Toolchest


Testing C++ Compilers for ISO Language Conformance
by Brian A. Malloy, Scott A. Linde, Edward B. Duffy, and James F. Power

Java Q&A


Does Java Guarantee Thread Safety?
by Peter Haggar

Algorithm Alley


Enhancing Newton's Method
by Namir Clement Shammas

Programmer's Bookshelf


All Over The Map
by Gregory V. Wilson

COLUMNS

Programming Paradigms


by Michael Swaine

C Programming


by Al Stevens

Embedded Space


by Ed Nisley

Dr. Ecco's Omniheurist Corner


by Dennis E. Shasha

FORUM

Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Della Song

Swaine's Flames


by Michael Swaine

DDJ, July 2002
Graphics Programming

FEATURES

Understanding Scene Graphs


by Aaron E. Walsh
Scene graphs are data structures used to organize and manage a variety of media types, including those supported by VRML, Extensible 3D, MPEG-4, and Java 3D.

Shadow Mapping


by Sergei Savchenko
Shadow mapping is a multipass technique for creating dynamic shadows. This shadow map algorithm is applicable to a wide variety of accelerated hardware and can be implemented using OpenGL.

Inside Intel's JPEG Library


by Mark R. Nelson
Mark examines Intel's Win32 JPEG Library, presents a slideshow application he built to test it, and compares Intel's library to Microsoft's standard IPicture component.

Smooth Talking Your Databases


by Dennis E. Shasha and Philippe Bonnet
Building bridges between islands of data is critical — but not always that easy to do.

EMBEDDED SYSTEMS

Determining Processor Utilization


by Byron Miller
Performance requirements are often considered after the fact when it comes to selecting processors for embedded products.

INTERNET PROGRAMMING

Monitoring Web Application Performance & ISAPI


by Kevin T. Manley
Accurately measuring the performance characteristics of web applications under realistic loads is a difficult task. Kevin presents an Internet Server API (ISAPI) filter for Microsoft IIS that does just that.

WORKBENCH

Programmer's Toolchest


Examining Visual Studio .NET
by Martin Heller

Java Q&A


So What Is a Java Event Agent?
by Eric J. Bruno

Algorithm Alley


Prime Numbers
by Peter Smith

Programmer's Bookshelf


Mathematics & C++
by Peter N. Roth

COLUMNS

Programming Paradigms


by Michael Swaine

C Programming


by Al Stevens

Embedded Space


by Ed Nisley

Dr. Ecco's Omniheurist Corner


by Dennis E. Shasha

FORUM

Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Della Song

Swaine's Flames


by Michael Swaine

DDJ, August 2002
Software Design

FEATURES

Aspect-Oriented Programming & AspectJ


by William Grosso
Aspect-oriented programming extends the object-oriented paradigm by letting you write more maintainable code using aspects.

Domain-Specific Modeling


by Risto Pohjonen and Steven Kelly
Domain-specific modeling raises the level of abstraction on which software development is carried out.

Tracking Software Development Projects


by Joe Marasco
Like physical bodies, software development projects have inertia, and large, complex projects tend to be more massive than small, simple ones.

Checkpointing Multithreaded Programs


by Christopher D. Carothers and Boleslaw K. Szymanski
Checkpointing is the process by which you grab snapshots of running programs.

EMBEDDED SYSTEMS

Adding Exceptions & RTTI to the Windows CE Compiler: Part I


by Dani Carles
Dani describes the TCU library, which lets you add exception handling and RTTI to the Windows CE compiler.

INTERNET PROGRAMMING

Implementing A Smart Spider


by Manu Konchady and Ray D'Amore
The smart spider presented here crawls the Web, locating links of interest based on topic keywords.

WORKBENCH

Programmer's Toolchest


JMeter: Performance Testing Server-side Java
by Jeff Linwood

Java Q&A


How Can I Generate Java Code for Tables in My Database?
by Mark Seaman

Algorithm Alley


Star Encoding
by Mark R. Nelson

Programmer's Bookshelf


It's Not Just Technology
by Gregory V. Wilson

COLUMNS

Programming Paradigms


by Michael Swaine

C Programming


by Al Stevens

Embedded Space


by Ed Nisley

Dr. Ecco's Omniheurist Corner


by Dennis E. Shasha

FORUM

Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Della Song

Swaine's Flames


by Michael Swaine

DDJ, September 2002
Distributed Computing

FEATURES



Distributed Computing with Ruby


by Phil Tomson
Ruby is a dynamic, object-oriented scripting language available on Windows, Linux, and Mac OS X. Phil uses DRb, Ruby's distributed object system, to build a task distribution framework.

Socket-Level Server Programming & .NET


by Paul Buis
Paul presents both C# and VB.NET implementations of an echo server, showing how you can handle sockets and asynchronous callbacks in the .NET Framework.

Java & UDDI Registries


by Paul Tremblett
Applications that require web services send requests to services at advertised URLs. Paul shows how your Java applications can contact business registries, such as UDDI, and retrieve information from them.

Writing Apache Modules


by L. Blunt Jackson
One reason for the Apache server's remarkable success is its modular architecture, which enables easy extension. So how do you go about writing Apache modules? Blunt shows how, illustrating key points of Apache design along the way.

EMBEDDED SYSTEMS



Adding Exceptions & RTTI to the Windows CE Compiler: Part II


by Dani Carles
Last month, Dani described how he had to reengineer a RTOS-based app so it could run under Windows CE. This month, he presents the TCU library workarounds.

WORKBENCH



Programmer's Toolchest


The REBOL IOS Distributed Filesystem
by James Esch

Algorithm Alley


Priority Queues for Motorists
by Ron Gutman

Programmer's Bookshelf


Intrinsic Difficulty
by Jack J. Woehr

COLUMNS



Programming Paradigms


by Michael Swaine

C Programming


by Al Stevens

Embedded Space


by Ed Nisley

Dr. Ecco's Omniheurist Corner


by Dennis E. Shasha

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Della Song

Swaine's Flames


by Michael Swaine

DDJ, October 2002
Intelligent Systems

FEATURES



The Science of Complexity


by David Lamper and Neil F. Johnson
Complex systems change in time, making empirical validation of theoretical concepts a difficult process. To get around this problem, David and Neil present a computer model that includes all the crucial properties of complex competition, frustration, feedback, and adaptability.

An Intelligent MP3 Jukebox


by Mark R. Nelson
The Windows-based MP3 player Mark presents keeps track of and accommodates your musical tastes by letting you rate artists, albums, and individual songs.

Personalization & Adaptive Resonance Theory


by M. Tim Jones
Tim examines Adaptive Resonance Theory, a clustering algorithm under the neural network genre of unsupervised learning, which can be used to group web site customers according to their preferences.

The Cg Programming Language


by John Ratcliff
Cg, short for "C for graphics," is a high-level C-like language for graphics programming. John presents a virtual base called "CgBinding" that provides a framework to dynamically bind any Cg program to your application.

.NET Versus COM


by Robert Gunion
.NET promises increased ease of development, deployment, scalability, and maintenance. But before getting waist deep in .NET, Robert and his team compared it to COM-based development.

EMBEDDED SYSTEMS



Two-Axis, Real-Time Camera Control


by Cort Dougan
Cort presents RTLinux-based software for viewing live images and controlling a servo-motor driven, dual-axis mounted camera in real time via a web page.

COLUMNS



C Programming


by Al Stevens
Playing piano for a month in Switzerland is a dirty job, but someone has to do it. While there, Al gets a chance to catch up with Erich Gamma.

Embedded Space


by Ed Nisley
You've probably gotten that queasy feeling when problems arise in thoroughly tested and debugged systems. Ed wonders if a field call concerning one of your products turns your stomach completely over?

Programmer's Bookshelf


by Jack J. Woehr
Jack takes a look at
Practical Linux Programming: Device Drivers, Embedded Systems, and the Internet, by Ashfaq A. Khan; and 68HC12 Microcontroller: Theory and Applications, by Daniel J. Pack and Steven F. Barrett.

Dr. Ecco's Omniheurist Corner


by Dennis E. Shasha
Dr. Windswift is his name and cloning is his game, but he still needs Dr. Ecco and Liane's help to do the job right.

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Della Song

Swaine's Flames


by Michael Swaine

Programming Paradigms


by Michael Swaine

DDJ, November 2002
Computer Security

FEATURES



Voice Biometrics & Application Security


by Moshe Yudkowsky
Voice-based biometric security must support identification, verification, and classification. Moshe presents a verification system in which users' voice models are stored in a database on a VoiceXML server.

Testing for Software Security


by Herbert H. Thompson and James A. Whittaker
Traditional testing techniques are not well equipped to find security bugs. Our authors discuss a fault model that describes a paradigm shift from traditional bugs to security vulnerabilities.

Building Secure Java RMI Servers


by Paulo Marques
Paulo uses the proxy pattern along with the Java Authentication and Authorization Service API to build secure Java Remote Method Invocation servers that allow only properly authenticated users access to systems.

Digital, Analog, and High-Definition TV


by Linden DeCarmo
Linden examines how analog and digital interfaces for high-definition television work, focusing on their copy-protection protocols.

Integrating GoAhead WebServer & eCos


by Anthony J. Massa
Anthony integrates the GoAhead WebServer—a portable open-source, small-footprint web server—into Red Hat's eCos real-time operating system.

EMBEDDED SYSTEMS



Examining the VxWorks AE 1.1 RTOS


by Bart Van Beneden
VxWorks AE from Wind River Systems is a real-time operating system designed for embedded applications with demanding requirements.

COLUMNS



Programming Paradigms


by Michael Swaine
Being the hermit he is, the idea of community strikes Michael as a novel idea.

Embedded Space


by Ed Nisley
A trip along the Erie Canal gives Ed the opportunity to ponder about the permanence of embedded projects.

Programmer's Bookshelf


by Jeffrey L. Taylor
This month, Jeff examines Agile Software Development Ecosystems, by Jim Highsmith.

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Della Song

Swaine's Flames


by Michael Swaine

DDJ, December 2002
Database Development


FEATURES



ODBC In UNIX Environments


by Robert Kiesling
The Open DataBase Computing (ODBC) Standard provides an efficient way to write client-server apps, including those that are UNIX based. Robert focuses on the unixODBC library because of its support for MySQL and PostgreSQL.

XSLT Querying & XML Documents


by Giuseppe Naccarato
This XSLT-based method of searching XML documents is easier to use, more flexible, and has better performance than the DOM- and SAX-based methods you're probably familiar with.

ASP.NET Page Persistence & Extended Attributes


by David Hovel
Active content and HTTP statelessness don't always mix. David uses the reflection capability of .NET languages to solve the problem for ASP.NET.

Comparing Fuzzy Numbers


by Bogdan Dorohonceanu
Fuzzy set theory makes possible the formalization of approximate reasoning. Bogdan presents a fuzzy number comparison method that's implemented in Java.

Embedded Databases


by Anton Okmianski
In deciding on Berkeley DB, a lightweight embedded database from Sleepycat Software, Anton's first challenge was to design a database layer that mapped a relatively complex data schema into Berkeley DB's simple key/data pairs.

EMBEDDED SYSTEMS



Automated Testing & Windows CE


by Tom Pugh
The technique Tom presents here lets you use third-party tools to test Windows CE-based systems.

COLUMNS



C Programming


by Al Stevens
Al sets out to build a better ConsoleApp. Along the way, he discovers Visual-MinGW and Transcribe! before having a knock-down drag-out with the GDB debugger.

Embedded Space


by Ed Nisley
State machines are mechanisms that sit around in one of several distinct conditions, waiting for something to happen. And they're Ed's focus this month.

Programmer's Bookshelf


by Jack W. Woehr
This month, Jack takes a look at Framework Process Patterns, by James Carey and Brent Carlson; and The MPEG-4 Book, edited by Fernando Pereira and Jouradj Ebrahimi.

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Della Song

Swaine's Flames


by Michael Swaine

Programming Paradigms


by Michael Swaine

DDJ, January 2003
User Interfaces


FEATURES



Robotic Control & 3D GUIs


by Hank Jones and Martin Snyder
Hank and Martin describe an OpenGL-based graphical user interface they use to operate GPS-enabled robots.

Private Desktops & Windows XP


by Stephen Lardieri
Kiosk and similar applications need full-screen user interfaces that suppress other dialog boxes and the windows of other applications—something that's easier said than done under Windows XP. Steve shows you how.

State Machines & User Interfaces


by BrÂ’an O'Byrne
JStateMachine is a software project built to control user interfaces by keeping them within the bounds of a statechart, letting you produce MVC-like View and Controller classes.

The CMake Build Manager


by William Hoffman and Ken Martin
CMake is an open-source, cross-platform C/C++ build manager that supports platform inspection and user-customized builds.

The "All-Pairs Closest Points" Problem


by William R. Mahoney
The divide-and-conquer algorithm William presents here recursively partitions the set of points into two halves, then solves for the halves plus a strip in the middle.

EMBEDDED SYSTEMS



Internet Connectivity In a Box


by Al Williams
When it comes to Internet connectivity, embedded processors must contend with TCP/IP stacks and access to the network. Al uses off-the-shelf components to build a system that does everything from handling e-mail to remotely monitoring temperatures.

COLUMNS



Programming Paradigms


by Michael Swaine
Does network topology play a role in secure networking? That's just one of the questions Michael asks this month.



Embedded Space


by Ed Nisley
Ed's making a lot of noise this month, as he uses his column as a sounding board.



Programmer's Bookshelf


by Gregory V. Wilson
Greg examines Java & XML Data Binding, by Brett McLaughlin; Design Patterns Java Workbook, by Steven John Metsker; and JSP Examples and Best Practices, by Andrew Patzer.

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Della Song

Swaine's Flames


by Michael Swaine

DDJ, February 2003
Testing & Debugging

FEATURES



Automated Defect Identification


by Kevin Smith
The techniques Kevin presents here help you quickly identify latent defects in C++ code—without extensive testing or simulation.

Testing Java Interfaces With JUnit


by Matt Albrecht
The GroboUtils JUnit Extension lets you write tests for inherited logic, leading to better maintainability and lower test-development costs.

C++ Stack Traces


by Noam Cohen
Collecting call stack data only when applications crash has limitations. The tool Noam presents here collects information in real time, thereby providing a context in which certain errors occur.

A Java-Based Music Player for MP3, Ogg, & WAV


by Sing Li
Here's a digital music player built around the JavaSound API that supports real-time decoding/playback of music in MP3, WAV, and Ogg Vorbis formats.

Bargain-Basement Parallelism


by Timothy Rolfe
The UNIX multiprocessing fork command lets you take advantage of underutilized processors in dual-processor computers.

A Report Generator for PC-Lint


by Jon Zyzyck
PC-Lint, from Gimpel Software, finds bugs, glitches, and other anomalies in C/C++ code. Jon's report generator reads in all PC-Lint messages and displays them sorted by message number.

EMBEDDED SYSTEMS



Examining Windows CE .NET


by Martin Timmerman
Martin examines Windows CE .NET's thread handling and advanced interrupt handling capabilities, as well as its synchronization mechanisms and network stack performance.

COLUMNS



C Programming


by Al Stevens
Standard C++ added typename to solve semantic ambiguities introduced by the class template mechanism and to make template declarations more intuitive.

Embedded Space


by Ed Nisley
When it comes to wireless devices, antennas—and wavelength—matter.

Programmer's Bookshelf


by Gregory V. Wilson
Greg examines Debugging, by David J. Agans; Translucent Databases, by Peter Wayner; The Turk: The Life and Times of the Famous Eighteenth-Century Chess-Playing Machine, by Tom Standage; Network Security with OpenSSL, by John Viega, Matt Messier, and Pravir Chandra; and Web Metrics: Proven Methods for Measuring Web Site Success, by Jim Sterne.

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Della Song

Swaine's Flames


by Michael Swaine

DDJ, March 2003
XML


FEATURES



XML-Based Programming Systems


by Gregory V. Wilson
Will mixing XML and source code revolutionize programming in the coming years? This is the question Greg untangles.

XML Data Binding


by Eldon Metz and Allen Brookes
XML data binding utilities dramatically simplify the task of writing XML-enabled applications by automatically creating a data binding for you.

SVG & Smart Maps


by Keith Bugg
Scalable Vector Graphics is a plain-text format that can make graphics look "flashy." Keith shows how you can use SVG to create smart maps that can be dynamically updated, animated, and more.

Generalized Callbacks: C++ and C#


by William F. Humphrey
Callbacks implement dynamic selection and invocation of functions at run time. Bill examines two technologies that implement callbacks—the libsigc++ class library in C++ and the delegate feature in C#.

The SmlMC Model Checker


by Wouter Boeke
Model checking lets you verify whether implementations satisfy a design specification. SmlMC, the model checker Wouter presents here, is written in Standard ML.

EMBEDDED SYSTEMS



J2ME & Embedded Systems


by William Wright
The Java 2 Micro Edition is a development tool for environments where resources don't support the full Java 2 Standard Edition. William uses it with aJile Systems' aJ-100 processor to build a network security device.

COLUMNS



Programming Paradigms


by Michael Swaine
Michael digs into computing history, searching for the answer to the question, "Who invented the computer?"

Embedded Space


by Ed Nisley
Ed reports on the Embedded Systems and Software Development East conferences, focusing on Nick Tredennick's Zeros Model theory of the microprocessor universe.

Programmer's Bookshelf


by Jack Woehr
The books Jack examines this month include The Linux Development Platform, by Rafeeq Ur Rehman and Christopher Paul; DNS & BIND Cookbook, by Cricket Liu; and Windows XP Annoyances, by David Karp.

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Della Song

Swaine's Flames


by Michael Swaine

DDJ, April 2003
Web Services

FEATURES



2003 Dr. Dobb's Excellence in Programming Award


by Jonathan Erickson
Don Chamberlin is the recipient of this year's Excellence in Programming Award for his groundbreaking work with SQL and (more recently) XML.

C++WSP: A C++ Web Services Platform


by Khushnood Naqvi and Yassar Sharaafath C.A.
C++WSP quickly exposes existing C/C++ systems as web services, and it's more elegant than JNI while avoiding the platform limitations of .NET.

J2EE 1.4 Web Services


by Aaron E. Walsh
Version 1.4 of Sun's Java 2 Platform Enterprise Edition (J2EE) is just about ready for release and its support for Web Services is one thing that sets it apart from previous version.

Memory Consistency & .NET


by Arch D. Robison
Understanding the basics of memory consistency is essential to writing multithreaded code that works on both uniprocessors and multiprocessors.

Cross-Correlation and Matched Filters


by Shehrzad Qureshi
Time-delay estimation of waveforms is of fundamental importance in signal-processing applications. Shehrzad uses matched filters, implemented via cross-correlation, to solve time delay problems.

Web Services & Datacenter Environments


by William F. Jolitz
Forget your cellphones and wireless PDAs. Web services can be used even more effectively in Internet datacenters to solve client communication errors and other such problems.

EMBEDDED SYSTEMS



Managing Devices with XML-RPC


by Brett Porter
Brett presents a client-side monitor application (written in Python) that uses XML-RPC to monitor the state of a simulated device.

COLUMNS



C Programming


by Al Stevens
Al goes further with C++'s typename keyword—yet another underdocumented C++ feature.

Embedded Space


by Ed Nisley
Real-time Linux is Ed's focus this month, as he reports on the Fourth Real-Time Linux Workshop, among other topics.

Programmer's Bookshelf


by Gregory V. Wilson
Greg takes a look at Creating Applications with Mozilla, by David Boswell, Brian King, Ian Oeschger, Pete Colins, and Eric Murphy; Java NIO, by Ron Hitchens; Performance Analysis for Java Web Sites, by Stacy Joines, Ruth Willenborg, and Ken Hygh; and Herding Cats: A Primer for Programmers Who Lead Programmers, by J. Hank Rainwater.

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Della Song

Swaine's Flames


by Michael Swaine

DDJ, May 2003
Algorithms


FEATURES



Dynamic Programming


by Mark A. Pumar
Dynamic programming has been widely used to solve problems in science, engineering, and finance—and it's become the algorithm of choice for many large optimization problems.

The SquareList Data Structure


by Mark Sams
The SquareList self-adjusting data structure Mark presents here performs basic tasks such as insert, delete, and findmin. It's particularly useful in programs that frequently require minimum and maximum values.

The Mithra Authentication Protocol


by Daniel Fremberg
Mithra is an authentication protocol designed to detect Man-in-the-Middle attacks that try to steal your passwords.

XML & Relational Databases


by Andrew Conrad and Dare Obasanjo
Andrew and Dare first examine the merits of an XML data model over the relational data model, then translate between the XML and relational query domains.

SA-C: Single Assignment C


by Willem Bohm, Ross Beveridge, Bruce Draper, Charles Ross, and Monica Chawathe
SA-C, a high-level, C-like language with single assignment semantics, was designed for building applications that run on reconfigurable computing systems, such as Field Programmable Gate Arrays (FPGAs).

Graph Canonicalization


by Brian Kelley
Graph canonicalization lets you form unique text representations for graphs, thereby enabling quick text-based searching without resorting to time-consuming isomorphism algorithms.

EMBEDDED SYSTEMS



Programmable Logic & Hardware


by Al Williams
If performance, cost, and simplicity are important in your embedded design, then programmable logic such as Field Programmable Gate Arrays (FPGAs) or Complex Programmable Logic Devices (CPLDs) may be what you need.

COLUMNS



Programming Paradigms


by Michael Swaine
Theories swirl as Michael ponders over what Apple, Microsoft, Phoenix, and others are up to.

Embedded Space


by Ed Nisley
The way Ed sees it, software testing should be completely unnecessary. But in the real world, he knows better.

Programmer's Bookshelf


by Gregory V. Wilson
Data Munging with Perl, by David Cross; LDAP Programming, Management, and Integration, by Clayton Donley; Struts in Action, by Ted N. Husted, Cedric Dumoulin, George Franciscus, and David Winterfeldt; Mastering Jakarta Struts, by James Goodwill; and The Struts Framework: Practical Guide for Programmers, by Sue Spielman are the books Greg examines this month.

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, June 2003
Communications & Networking


FEATURES



Route Control & Streaming Video


by Michael Larson
Route control is an emerging technology that improves the quality of streaming video by letting you select the path of data packets as they leave your video servers.

JXTA & Peer-to-Peer Networks


by Sing Li
JXTA is an open-source development project for creating a P2P substrate that's applicable to any hardware or software platforms.

Securing Wireless Networks


by Micah Silverman
Micah shows how to secure wireless networks as 802.11b, also known as Wi-Fi, using a combination of hardware and software.

Web Scraping Proxy


by Howard P. Katseff
WSP, the web scraping proxy server Howard presents here, is a Perl program that uses the socket library to communicate with the browser client and the server.

Heap Ltd.


by Evgeniy Gabrilovich and Alex Gontmakher
Evgeniy and Alex examine various existing sorting and searching algorithms, then present their "limited heap," which arguably provides the best tradeoff between speed and memory utilization.

EMBEDDED SYSTEMS



An Embeddable Lightweight XML-RPC Server


by M. Tim Jones
Tim examines the XML-RPC protocol for providing network-based RPCs, then presents a lightweight server for embedded designs.

COLUMNS



Programming Paradigms


by Michael Swaine
Michael feels a sense of release as he takes a look at Apple's OS X implementation of X Windows System Version 11—a network-transparent, client-server graphics display system that is the de facto standard for UNIX systems.

Embedded Space


by Ed Nisley
Software reliability and embedded systems go hand-in-glove.

Programmer's Bookshelf


by Gregory V. Wilson
The books Greg examines this month include Debugging Applications for Microsoft .NET and Microsoft Windows, by John Robbins; Facts and Fallacies of Software Engineering, by Robert L. Glass; Java Number Cruncher: The Java Programmer's Guide to Numerical Computing, by Ronald Mak; and Ant: The Definitive Guide, by Jesse Tilly and Eric M. Burke.

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, July 2003
Java Programming

FEATURES



Dynamic Proxies in Java and .NET


by Tom Barrett
Tom examines how proxies separate cross-cutting concerns, then explores—in both Java and C#—a new twist on the traditional Proxy pattern that promotes reuse and decreases complexity.

Calling C Library Routines from Java


by Mick Pont
Here's a technique for calling C library routines directly from Java, saving you the trouble of rewriting code in Java while gaining portability via Java Virtual Machines.

Using Thread-Local Variables In Java


by Tom White
Java's ThreadLocal class provides a powerful, easy-to-use way to write efficient code that is safe for multithreaded access.

JavaServer Pages 2.0


by Aaron E. Walsh
From the Expression Language to the JSP 2.0 API, new features in J2EE 1.4 change how you create custom JavaServer Pages.

Distributed Loadbuilds


by Kevin W. Smith
Dividing computationally intensive tasks among multiple machines is a technique that has been around for a long time. Kevin uses Rational's ClearMake distributed build technology to put idle computers to work.

JELLY: An XML-Based Scripting Language


by Siegfried Göschl
Jelly, which lets you turn XML into executable code, is a Java-based scripting language that can be used as an embedded or standalone tool.

EMBEDDED SYSTEMS



Real-time Signal Analysis & Real-Time Linux: Part 1


by Matt Sherer
In the first installment of this multipart article, Matt shows how you do hard real-time signal acquisition, controlling it from a Java GUI application.

COLUMNS



Programming Paradigms


by Michael Swaine
Michael looks back on the life and times of personal computer pioneer Adam Osborne.

Embedded Space


by Ed Nisley
Over the years, Ed has found IEEE publications to be an invaluable source of technical information.

Programmer's Bookshelf


by Gregory V. Wilson
Big and little, thick and thin: Greg looks at all kinds of books this month, including Processing XML with Java, Practical Debugging in C++, How to Break Software, Hacker's Delight, Bioinformatics Computing, and Bioinformatics for Dummies.


FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, August 2003
Software Design


FEATURES



Lightweight Aspect-Oriented Programming


by Michael J. Yuan and Norman Richards
Michael and Norman examine backward-compatible approaches to code reuse that protect investments in existing software.

Cleanroom Software Engineering


by Shawn P. Garbett
By focusing on defect prevention rather than defect removal, cleanroom software engineering helps you develop high-quality software with certified reliability.

Extreme Parsing


by Kyle F. Downey
Kyle applies Extreme Programming core principles and Java tools to build his Mini-IDL parser.

Creating .INI Classes in Java


by Mark Meyer
IniFile is a lightweight Java class that reads standard .INI text files into memory, lets you manipulate their contents, and stores their corresponding key/value pairs in memory.

Overriding the C++ Operator==


by Daniel E. Stevenson and Andrew T. Phillips
Our authors present a design that handles complex inheritance situations, then implement it in Java and C++.

UML 2.0 & Model-Driven Development


by Lars Mats
Lars develops a Java application using UML 2.0 and a model-driven development strategy.

EMBEDDED SYSTEMS



Real-time Signal Analysis & Real-Time Linux: Part II


by Matt Sherer
In the second installment of this two-part article, Matt simplifies both the real-time and Java code, then adds a digital filter.

COLUMNS



C Programming


by Al Stevens
Al closes the book on C++'s export keyword, then closes the book on his column. Say it ain't so, Al!

Embedded Space


by Ed Nisley
The flame in Ed's column this month isn't another irate engineer, but just another challenge for firefighting robots.

Programmer's Bookshelf


by Tim Kientzle
Tim revisits Leo Brodie's classic Thinking Forth and realizes it foreshadowed modern day topics such as Extreme Programming and Best Practices.

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, September 2003
Distributed Computing


FEATURES



Creating Java Grid Services


by Aaron E. Walsh
Aaron uses the Globus Toolkit, a development framework for developing special-purpose grids, to build Java-based grid services and grid clients.

Integrating .NET & J2EE With Web Services


by David Houlding and Sekar Govindasamy
The architecture David and Sekar present here lets you integrate heterogeneous environments, such as a distributed stock-quote web-service application that's based on .NET and J2EE.

Task Farming & the Message Passing Interface


by Paulo Marques
Paulo shows how to use the Message Passing Interface to parallelize applications on systems ranging from clusters of PCs running Windows and Linux, to supercomputers like the Cray X1 or IBM SP Power3.

Data Sharing With P2PdataShare


by Sree Padma Vempati and Kumaraswamy Ponnambalam
P2PdataShare is a generic database adapter that's implemented in a collaborative peer-to-peer architecture based on Groove Networks technology.

Ant, Cpptasks, & Multiplatform C/C++ Projects


by Mirko Raner
Mirko uses Ant and cpptasks to build a multiplatform C/C++ application, then shares tips for migrating existing projects from Make to Ant.

Music Information Retrieval Systems


by William Birmingham, Colin Meek, Kevin O'Malley, Bryan Pardo, and Jonah Shifrin
Our authors present an iTunes-based music information database system that incorporates musical content as searchable elements—and supports audio-based queries.

EMBEDDED SYSTEMS



Portability & the ARM Processor


by Trevor Harmon
When porting a Linux application to the StrongArm-based iPAQ handheld computer, Trevor found out that "ANSI C" and "portability" don't always go hand-in-hand.

COLUMNS



Programming Paradigms


by Michael Swaine
Summer reading at Summer Jo's. Now we know what Michael was up to this summer. Plus, his first reaction to Apple's G5 Macintosh—"the world's fastest personal computer."

Embedded Space


by Ed Nisley
Ed realizes that traffic-signal controllers are something to stop and think about from time to time.

Programmer's Bookshelf


by Gregory V. Wilson
From what Greg can tell, Code Reading: The Open Source Perspective, by Diomidis Spinellis, is an important book that every programmer should read.

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, October 2003
C/C++ Programming


FEATURES



Comparing C/C++ Compilers


by Matthew Wilson
Matthew compares nine popular C++ compilers in terms of their performance, features, and tools.

C++ String Performance


by Lev Kochubeevsky
Lev analyzes C++ string implementations, then presents a string class with the speed and efficiency of the automatic C strings, plus the convenience of the C++ string objects that are STL friendly.

The Mtlib Memory-Tracking Library


by Marco Tabini
Mtlib, short for "memory-tracking library," is a set of tools that automates the process of tracking and identifying memory leaks.

Java 2D & Web Pages


by Paul Tremblett
Incorporating server-side Java 2D into your web application components is an easy way to deliver dynamic data.

AutoLogout For Application Security


by Jonathan Lurie
AutoLogout is an application-level security technique that shuts down the system due to user inactivity. Jonathan presents a C# AutoLogout implementation for .NET.

Quantifying Popular Programming Languages


by Thomas Plum
Thomas uses the number of web-based job offers that specify requirements for different programming languages as a metric for determining popularity.

EMBEDDED SYSTEMS



Spy: A Windows CE API Interceptor


by Dmitri Leman
Spy, Dmitri's Windows CE API spy, is a valuable tool for exploring, troubleshooting, and debugging Windows CE-based applications.

COLUMNS



Programming Paradigms


by Michael Swaine
Michael discovers that reading code and writing wrongs can add up, as he wraps up this summer's reading list.

Embedded Space


by Ed Nisley
Ed flips the switch and makes a power play this month.

Programmer's Bookshelf


by Gregory V. Wilson
It's a Java kind of month, as Greg looks at Java Extreme Programming Cookbook, by Eric Burke and Brian Coyner; MySQL and Java Developer's Guide, by Mark Matthews, Jim Cole, and Joseph Gradecki; Java Performance Tuning, by Jack Shirazi; and JDBC: Practical Guide for Java Programmers, by Gregory Speegle.

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, November 2003
Computer Security


FEATURES



Red-Team Application Security Testing


by Herbert H. Thompson and Scott G. Chase
Red-team security testing demands focused application security testing that is independent of the development group and usually falls outside normal application-testing channels.

Helix: Fast Encryption & Authentication


by Niels Ferguson and Bruce Schneier
Helix lets you perform both encryption and authentication—and does so fast! In fact, Helix appears to be twice as fast as AES.

SAML & Single Sign-On


by S. Srivatsa Sivan
Single Sign-On systems authenticate users once, then authorize or reject them across multiple services. Sivan implements Single Sign-On using the Security Assertions Markup Language (SAML).

HDTV & Broadcast Flags


by Linden deCarmo
The Redistribution Control Descriptor, commonly referred to as the "broadcast flag," is the controversial copy-protection and file-sharing technique some in the HDTV industry want to mandate.

Command-Line Argument Processing & the Argv Library


by Oliver Goldman
Argv, the extendible Java-based argument-handling library Oliver presents here, lets you parse argument types and string values.

C++ Compilers & ISO Conformance


by Brian A. Malloy, James F. Power, and Tanton H. Gibbs
Brian, James, and Tanton examine how eight popular C++ compilers measure up to ISO conformance standards.

EMBEDDED SYSTEMS



Hard Real-Time Control & Real-Time Linux


by Raul Murillo-Garcia
Hard real-time control usually requires specialized hardware and software. Raul presents Simulink-Target for Real-Time Linux, a cost-effective tool for hard real-time control.

COLUMNS



Programming Paradigms


by Michael Swaine
Does electronic voting have your "yea" or "nay" this election season? And what will we do when a hard-disk full of votes suddenly crashes?

Embedded Space


by Ed Nisley
Ed looks at the history of cryptography and examines what it means for embedded systems developers programming in Java today.

Programmer's Bookshelf


by Jack J. Woehr
This month, Jack reviews The Art of UNIX Programming, by Eric Raymond; UNIX Systems Programming, by Kay Robbins and Steven Robbins; and Absolute OpenBSD, by Michael W. Lucas.

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, December 2003
Database Development


FEATURES



Networking, ODBC, & Perl


by Robert Kiesling
Robert first examines a Perl API for the unixODBC libraries, then a peer-to-peer API that lets ODBC clients access data sources of other systems on a TCP/IP network.

Application-Level Data Caching


by Paul E. Boal
Many applications can be designed so that continuous database access isn't necessary. Paul presents an application-level data-caching library that does just this.

Java NIO & the iTunes Database


by Dmitriy Rogatkin
Dmitriy uses the Java NIO package—part of J2SE 1.4—to unravel the iTunesDB format, which is at the heart of the database used in Apple's iPod MP3 player.

Full-Text Searching & the Burrows-Wheeler Transform


by Kendall Willets
Here's an indexing method that lets you find any character sequence in the source text using a structure that can fit the entire source text and index into less space than the text alone.

Web Services & C++


by Peter Lacey
Peter shows how to develop SOAP services and clients in C++ using the WASP Server for C++ from Systinet.

EMBEDDED SYSTEMS



Code Efficiency & Compiler-Directed Feedback


by Jackie Brenner and Markus Levy
With compiler-directed feedback, compiler output includes information you can leverage to tune application code for higher performance.

COLUMNS



Programming Paradigms


by Michael Swaine
Gray goo and smart dust. No, the cleaning crew hasn't tackled Michael's office. Instead, he examines what's going on in the world of nanotechnology.

Embedded Space


by Ed Nisley
Storage is a magnetic subject, as Ed discovers this month.

Chaos Manor


by Jerry Pournelle
In the first installment of his new column, Jerry takes on worms and viruses.

Programmer's Bookshelf


by Jeff B. Cromwell
Jeff examines Programming Wireless Devices with the Java 2 Platform, Micro Edition; Wireless Java, Developing with Java 2, Micro Edition; Java 2, Micro Edition: The Ultimate Guide to Programming Handheld and Embedded Devices; and Teach Yourself Wireless Java with J2ME In 21 Days.

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, January 2004
Best Practices


FEATURES



Mission-Critical Development with XP & Agile Processes


by Julius Gawlas
Getting a mission-critical application up and running in a matter of months is easier said than done—and sometimes it requires extreme (programming) measures.

Radical Refactoring


by Eugene Belyaev, Maxim Shafirov, and Ann Oreshnikova
Whether you're aware of it or not, refactoring is a fundamental part of the software development process. In fact, it is as crucial to projects as the initial coding itself.

iSCSI Target Emulation


by Patrick L. Garvan, Shawn McFarland, Manoj Mehta, Mike Ramsay, & Chris Robinson
iSCSI is a networking standard for sending SCSI commands over IP networks. Our authors present an iSCSI emulator and show how it can be used to test iSCSI systems.

VoiceXML & Instant Messaging


by Moshe Yudkowsky
Moshe uses Jabber, VoiceXML, Python, and a bunch of other tools to build a prototype system that enables speech technologies—speech recognition, text-to-speech, and speech biometrics—to interact with instant messaging.

Double Dispatch Revisited


by Nat Goodspeed
Nat takes a second look at the Double Dispatch pattern in C++, then implements a Java version of it.

Preventing Buffer overruns in C++


by Richard Grimes
Buffer overrun vulnerability can lead to security breaches. Richard shows how to use the Visual C++ .NET compiler and libraries to rid your code of buffer overruns.

Porting Lucene to .NET Using Visual J#


by Larry Reeve
Larry uses Microsoft's Visual J# .NET to port the open-source Lucene search engine to .NET. Lucene is a text search engine written entirely in Java.

EMBEDDED SYSTEMS



Programmable Systems-On-Chips


by Al Williams
Programmable systems-on-chips are similar to ordinary microcontrollers, but designed so that you configure components into different I/O devices.

COLUMNS



Programming Paradigms


by Michael Swaine
Michael's meanderings take him from paregmenons to paradigms, as he examines e-voting, Eric Raymond, and a bunch of other stuff.

Embedded Space


by Ed Nisley
Ed reports on what went on at this fall's Embedded Systems and Software Development conferences.

Chaos Manor


by Jerry Pournelle
Video boards are wonderful contraptions—when they work. And when they don't work, tracking down why and why not is a job in itself.

Programmer's Bookshelf


by Dan Wohlbruck
Ben Shneiderman's Leonardo's Laptop: Human Needs and the New Computing Technologies and B.J. Fogg's Persuasive Technology: Using Computers to Change What We Think and Do are the books Dan reviews this month.

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, February 2004
Web Services


FEATURES



Interoperable Web Services


by Arulazi Dhesiaseelan
WS-I is an initiative to promote web-service interoperability across platforms and programming languages.

Integrating XML Web Services With VB6 Applications


by Max I. Fomitchev
Max shows how legacy VB6 applications can consume web services written in C++.

UDDI & Dynamic Web Service Discovery


by Peter Lacey
UDDI is a platform-independent framework for describing services and businesses via the Internet.

Applying the Overtake & Feedback Algorithm


by John A. Trono
Here's an algorithm for ranking—among other things—the best sports teams.

I/O Multiplexing & Scalable Socket Servers


by Ian Barile
Ian provides a single interface for I/O multiplexing on both UNIX and Windows.

Regular Expression Mining


by Sergei Savchenko
Regular expressions are convenient devices for identifying patterns in collections of strings.

Parallel Programming with Interoperable MPI


by William L. George, John G. Hagedorn, Judith E. Devaney
IMPI is a set of protocols for programs running in multicluster environments.

Communicating With Software-Development Managers


by Adam Kolawa
Adam shares tips for presenting technical concerns that managers can understand.

Eudora Mailbox Classes


by Gary Krone
After examining the Eudora file format, Gary presents a class library for organizing e-mail.

ASP.NET Forms Authentication Best Practices


by Douglas Reilly
For most ASP.NET-based web sites, the only option for authenticating users is ASP.NET Forms Authentication.

Rethinking Software Security


by Herbert H. Thompson and James A. Whittaker
In the first installment of this series on security, our authors argue that security is now a business case.

EMBEDDED SYSTEMS



Multitasking On the Cheap


by Alan Porter
It is often important to design systems that don't require a significant training.

COLUMNS



Programming Paradigms


by Michael Swaine
Michael looks at quantum computing, reversible computing, and faster-than-light light.

Embedded Space


by Ed Nisley
When it comes down to it, software performance really is a number's game.

Chaos Manor


by Jerry Pournelle
Jerry wraps up what went on at Microsoft's recent Professional Developer's Conference.

Programmer's Bookshelf


by Jason Montojo
This month, Jason reviews Eclipse in Action and The Java Developer's Guide to Eclipse.

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, March 2004
Programming Languages


FEATURES



Fostering Little Languages


by John Clements, Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, & Shriram Krishnamurthi
Our authors present a programming environment that adapts itself to little languages.

The Bistro Programming Language


by Nik Boyd
Bistro provides a method syntax resembling Smalltalk, but generates Java class files.

Prototyping Interpreters using Python Lex-Yacc


by Shannon Behrens
To test the Python and PLY environment, Shannon wrote a language called "Squeamish" that consists of only 850 lines of code.

Collection Enumeration: Loops, Iterators, & Nested Functions


by Walter Bright and Matthew Wilson
The D language implements its collection enumeration via a foreach statement.

Building a Custom Rule Engine with Prolog


by Dennis Merritt
There are pluses and minuses to switching from a procedural- to logic-base approach for encoding rules.

Security & PseudoRandom Number Generators


by Ben Laurie
When it comes to security, weak randomness is sometimes better than strong randomness.

Instant Messaging: A Programmer's Tool?


by William Wright and Dana Moore
Our authors examine Jabber's client-side protocol, putting Python, Perl, and Ruby to work.

Faster Image Processing with OpenMP


by Henry A. Gabb and Bill Magro
OpenMP-based tools and multithreading can improve performance on multiprocessor systems.

A Struts Tool for Previewing Forms & Generating Beans


by Andy W. K. Yuen
Struts is becoming a de facto standard framework for building Java web applications.

The Business Case for Software Security


by Herbert H. Thompson and James A. Whittaker
Is it possible to make a business case for software security?

Adding .NET Control Properties


by Phil Wright
Here's an idiom for dealing with control properties that ensures a consistent feel for users.

Tech Tips


edited by George Frazier
This month's tips clean up component categories and develop an even better RegDeleteKey.

Transaction Processing


by Charles Curley
Transaction processing ensures data integrity in the face of catastrophic failure.

EMBEDDED SYSTEMS



Porting Small-C


by Pete Gray
Pete presents his port of Small-C to Motorola's DSP56800 digital signal processor.

COLUMNS



Programming Paradigms


by Michael Swaine
The convergence of ideas—even dumb ones—sometimes makes sense.

Embedded Space


by Ed Nisley
So what makes Ed think that five years from now PC performance will increase by another factor of 10?

Chaos Manor


by Jerry Pournelle
You can build high-performance machines to the state of the art or at the best price/performance point.

Programmer's Bookshelf


by Douglas Reilly
Doug reviews Microsoft SQL Server 2000 Performance Optimization and Tuning Handbook and The Guru's Guide to SQL Server Architecture and Internals.

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, April 2004
Algorithms


FEATURES



Dr. Dobb's Journal Excellence In Programming Award


by Jonathan Erickson
P.J. Plauger is the recipient of this year's Excellence in Programming Award.

Simulating Small-World Networks


by Mary Lynn Reed
Mary examines some of the most popular algorithms for simulating small-world networks.

Astronomical Adaptive Optics


by Thomas G. Schneider
Astronomical adaptive optics is a technique for the real-time removal of atmospheric distortion.

Adventures In Palindromes


by William R. Mahoney, Ph.D.
With palindromes, you may not know if you're coming or going.

SQL, Data Mining, & Genetic Programming


by Brian Connolly
Evolutionary algorithms solve problems by mimicking the process of natural evolution.

Genetic Algorithms & Optimal Solutions


by Michael Larson
Michael turns to genetic algorithms to solve redistricting woes in Texas.

Building Little Languages with Macros


by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram Krishnamurthi
Pattern-based macros in Scheme can express interesting language extensions.

Software Manufacturing


by Fred Wild
Software manufacturing is the process of applying automated methods to produce software components.

Understanding the arts of the Adversary


by Herbert H. Thompson and James A. Whittaker
Securing your software requires that you understand the techniques of potential attackers.

USB Device Drivers


by Dean A. Gereaux
The Universal Serial Bus (USB) may be ubiquitous, but you still need device drivers to use it.

Web Services & Relational Databases


by Alexander Vaschillo
Alexander shows how you build web services for relational databases.

Tech Tips


edited by George Frazier
Gigi Sayfan and Matthew Wilson show how to share the clipboard and use Managed C++ strings.

Time-lapse MPEG Animations


by Stephen B. Jenkins
Generating time-lapse animations starts with acquiring and storing images, then combining them in a single file.

EMBEDDED SYSTEMS



Genetic Algorithms & Real-World Applications


by Philip Joslin
Genetic algorithms can play a key role in testing electronic testing tools.

COLUMNS



Programming Paradigms


by Michael Swaine

Embedded Space


by Ed Nisley

Chaos Manor


by Jerry Pournelle

Programmer's Bookshelf


by Gregory V. Wilson

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, May 2004
Optimization & Performance Tuning


FEATURES



C/C++ Compiler Optimization


by Matthew Wilson
Squeezing the maximum execution speed from C/C++ compilers requires an understanding of optimization switches.

Optimization Techniques


by Tim Kientzle
When it comes to performance, a good understanding of processor architecture pays big dividends.

Optimizing For Intel Architecture CPUs


by Victor J. Duvanenko
Optimization often demands diving into system memory and processor cache.

Motion Estimation & MPEG Encoding


by Shehrzad Qureshi
Motion estimation is the most computationally demanding subsystem of an MPEG encoder.

A Manifesto for Collaborative Tools


by Eugene Eric Kim
While our future may ride on software for collaboration, the current crop of tools just isn't good enough.

A Customized Database Query Tool


by Bill Hamaker
This customized query tool makes query creation more accessible for users.

The Irony of Extreme Programming


by Matt Stephens and Doug Rosenberg
Even though extreme programming (XP) has some good ideas, it still falls short of being the silver bullet.

BackTracking Algorithms


by Timothy Rolfe
Backtracking algorithms let you systematically search for solutions to problems among all available options.

Java & Monetary Data


by John N. Armstrong
Accurate mechanisms for dealing with dollars is critical to Java-based e-commerce.

Measuring API Usability


by Steven Clarke
Steven examines some techniques that Microsoft uses to design and evaluate the usability of the APIs that ship with .NET.

Spam Filters & .NET 2003 COM Add-Ins


by Steve Goyette
When it comes to spam, you can do more than "just say no."

Implementing Screen Savers in .NET


by Richard Grimes
Because they involve graphical manipulation, screen savers are an excellent way to exercise a platform's new facilities.

Tech Tips


edited by George Frazier

To Inline or Not To Inline


by Richard Vaughan
Inline functions can deliver dramatic performance improvements while preserving proper design semantics.

Overtake & Feedback Follow-up


by John A. Trono
John applies the overtake & feedback algorithm to last winter's football bowl games.

EMBEDDED SYSTEMS



Gameboy Advance for Non-Gaming Applications


by Aarul Jain and Dhananjay V. Gadre
With the right tools, a fun toy can be turned into a powerful computer.

COLUMNS



Programming Paradigms


by Michael Swaine

Embedded Space


by Ed Nisley

Chaos Manor


Programmer's Bookshelf


by Douglas J. Reilly

FORUM



Editorial


by Jonathan Erickson

Letters


by you

The New Adventures of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, June 2004
Communications & Networking


FEATURES



Remotely Controlling Windows Applications


by Ruben Patel
When your application is running a mile or so under water, it makes sense to control it remotely.

Probing Network Characteristics


by Michael Larson
This framework lets you monitor, record, and act on packet performance.

HTTP-Based Anonymous Communication Channels


by Marc Waldman and Stefan Köpsell
Need a general-purpose request-reply anonymous communication channel? Here's how to build one.

The OpenCable Application Platform


by Linden deCarmo
The OpenCable Application Platform provides Java-based APIs and uses open networking for set-top boxes and HDTV.

The Secure Shell Game


by Glen Matthews
Glen examines the SSH protocol and shows how it can be implemented.

WLAN Security & Wi-Fi Protected Access


by Derek Cheung
Wi-Fi Protected Access is designed to address known WLAN security issues in the original 802.11 specification.

Building a Lightweight JMS Provider


by Eric J. Bruno
Here's a Java Message Service provider that is lightweight both in size and overhead—but not in features.

Security & Palm OS 5.x


by Michael Yam
Michael presents techniques for using masked records and encrypting/decrypting data on the Palm OS 5.x platform.

SALT: The Speech Application Markup Language


by Robert Hartman
Speech Application Language Tags let you integrate speech technologies into a range of user-oriented computing devices.

GPS Programming & .NET


by Johan Franson
The Global Positioning System is a worldwide navigation system. Johan shows how to use it for .NET applications.

Identity and Equality in .NET


by Matthew Wilson
C#'s as operator tests an object instance against a type, and returns a reference to the given type.

Tech Tips


edited by George Frazier
Boris Eligulashvili shows how to programmatically invoke the Microsoft Speech API.

String-Based Attacks Demystified


by Herbert H. Thompson and James A. Whittaker
Far too often, programmers trust string input without checking it for validity. That's foolish.

A Heisenberg Compensator for Measuring Software Performance


by Gary Carleton and Charles Spirakis
Measuring software performance without affecting the performance of the system being measured.

EMBEDDED SYSTEMS

Code Generation & High-Integrity Embedded Systems


by Tom Erkkinen
Production-code generation provides a framework for adding software details to the behavioral algorithm model.

COLUMNS

Programming Paradigms


by Michael Swaine

Embedded Space


by Ed Nisley

Chaos Manor


by Jerry Pournelle

Programmer's Bookshelf


by Gregory V. Wilson

FORUM

Editorial


by Jonathan Erickson

Letters


by you

The New Adventures Of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, July 2004
Java Programming


FEATURES

Java Management Extensions


by Paul Tremblett
Java Management Extensions provide the architecture, design patterns, APIs, and services for distributed apps.

Fixed, Floating, and Exact Computation with Java's BigDecimal


by Mike Cowlishaw, Joshua Bloch, and Joseph D. Darcy
Features in the J2SE 1.5 BigDecimal class make calculations easy.

The Java Virtual Machine Profiler Interface


by Christof Schmalenbach and Christian Höofig
The Java Virtual Machine Profiler Interface is an API for low-level performance measurements.

Java & the OpenCable Application Platform


by Linden deCarmo
Linden examines the strengths and weaknesses of the OpenCable Application Platform's Java interfaces.

Java Reflection & SmalLtalk-like Method Dispatching


by Barry Feigenbaum, Ph.D.
Here's how the Java Reflection APIs can be used to provide ad hoc polymorphism support.

C++ and The Perils of Double-Checked Locking: Part I


by Scott Meyers and Andrei Alexandrescu
In this two-part article, Scott and Andrei examine Double-Checked Locking.

Fortran 2003: Into the Future


by Malcolm Cohen
Fortran 2003 is in the final stages of review before official standardization.

Putting Web Services into Context


by Brent Carlson and Byron Healy
Our authors develop a .NET component using a straightforward four-step approach.

Making .NET Assemblies Tamper resistant


by Richard Grimes
Richard unravels the .NET file structure and show how it prevents alterations from being performed on .NET assemblies.

A Service-Oriented Architecture for Mobile Applications


by David Houlding
David develops a Microsoft PocketPC client implemented as a set of web services across .NET and J2EE/Axis.

Tech Tips


edited by George Frazier
Enumerating registry subkeys in D, debug formats in GCC, and null iterator types for STL.

Detecting Source-Code Plagiarism


by Bob Zeidman
Bob examines the tools and algorithms for uncovering plagiarism in source code.

GCJ & the Cygnus Native Interface


by Gene Sally
The GNU Compiler for the Java Programming Language is a GCC front-end for Java.

EMBEDDED SYSTEMS


Mixing ActiveX with Java


by Al Williams
Al uses JACOB, which is a library for running Java code under Windows to connect with ActiveX objects—for robotic control.

COLUMNS

Programming Paradigms


by Michael Swaine

Embedded Space


by Ed Nisley

Chaos Manor


by Jerry Pournelle

Programmer's Bookshelf


by Gregory V. Wilson and John Gilhuly

FORUM

Editorial


by Jonathan Erickson

Letters


by you

The New Adventures Of Verity Stob


by Verity Stob

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, August 2004
Testing & Debugging


FEATURES

Continuous Integration & .NET: Part I


by Thomas Beck
In this two-part article, Thomas introduces a complete Continuous Integration solution.

Testing Java Servlets


by Len DiMaggio
Java servlets differ from other types of programs, thereby affecting your testing strategies.

The Jpydbg Debugger


by Jean-Yves Mengant
Jpydbg, the debugger Jean-Yves presents here, is a Python plug-in for the JEdit framework.

Pseudorandom Testing


by Guy W. Lecky-Thompson
Guy examines how you can test objects by creating specific test harnesses with verifiable datasets.

Performance & System Testing


by Thomas H. Bodenheimer
When collecting performance data from dozens—if not hundreds—of computers, automation is a necessity.

Optimizing Pixomatic for x86 Processors: Part I


by Michael Abrash
In the first installment of a three-part article, Michael discusses his greatest performance challenge ever—optimizing an x86 3D software rasterizer.

HTTP Response Splitting


by Amit Klein and Steve Orrin
HTTP Response Splitting is a powerful new attack technique that enables other attacks.

Aspect-Oriented Programming & C++


by Christopher Diggins
Aspect-oriented programming isn't just about Java. Christopher presents AOP techniques for C++.

Building Callout Controls


by Thiadmer Riemersma
Thiadmer's balloon-style Windows control is configurable for many purposes.

Tracing Program Execution & NUnit


by Paul Kimmel
NUnit and .NET's TraceListeners help you eliminate bugs from code.

Synchronization Domains


by Richard Grimes
The best place to avoid deadlocks is in the design stage—and that's where synchronization domains come in.

C++ and the Perils of Double-Checked Locking: Part II


by Scott Meyers and Andrei Alexandrescu
In this installment, Scott and Andrei examine the relationship between thread safety and the volatile keyword.


When Format Strings Attack!


Herbert H. Thompson and James A. Whittaker
Format-string vulnerabilities happen when you fail to specify how user data will be formatted.

The Subversion Version-Control Program


by Jeff Machols
The Subversion version-control program provides all the benefits of CVS—along with many improvements.

EMBEDDED SYSTEMS

RunTime Monitoring & Software Verification


by Doron Drusinsky
Doron examines runtime monitoring, focusing on its application to robust system verification.

COLUMNS

Programming Paradigms


by Michael Swaine

Embedded Space


by Ed Nisley

Chaos Manor


by Jerry Pournelle

Programmer's Bookshelf


by Paul Martz

FORUM

Editorial


by Jonathan Erickson

Letters


by you

Dr. Ecco's Omniheurist Corner


by Dennis E. Shasha

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, September 2004
Distributed Computing


FEATURES

Grid Computing & the Linda Programming Model


by Rob Bjornson and Andrew Sherman
Compared to web services, the Linda programming model provides a number of advantages for building grid apps.

Debugging, Message-Oriented Middleware, & Distributed Systems


by Paul Pazandak and Steve Ford
If you've built distributed messaging systems, you know about problems with tracking down and isolating bugs.

Stream-Control Transmission Protocol


by Ian Barile
The Stream Control Transmission Protocol is a new transport layer protocol that offers an alternative to TCP.

Continuous Integration & .NET: Part II


by Thomas Beck
Thomas introduces a complete Continuous Integration solution.

RFID Blocker Tags


by Burt Kaliski
Blocker tags let you choose when, where, and what RFID devices are tracking you.

Optimizing Pixomatic for x86 Processors: Part II


by Michael Abrash
Michael discusses his greatest performance challenge ever—optimizing an x86 3D software rasterizer.

Band-In-A-Box, Finale, & MusicXML


by Al Stevens
Al converts Band-In-A-Box file formats into Finale notation files using MusicXML as a porting medium.

C#, COM Objects, & Interop Services


by Shehrzad Qureshi
Shehrzad implements an ActiveX control in both C++ and C#.

Improving .NET Events


by Richard Grimes
.NET provides facilities for writing your own event mechanisms—if you know how.

Building MFC Dialogs at Runtime


by Adrian Hill
Adrian presents a class for defining MFC-based dialogs.

The Qt Designer IDE


by Dave Berton
With Qt Designer 3.3.1, you have a feature-rich IDE for designing and coding GUI applications.

Eclipse & General-Purpose Applications


by Todd E. Williams and Marc R. Erickson
Eclipse provides the framework for combining disparate tools into a single integrated application.

Writing Plug-Ins in C/C++ for Eclipse CDT


by Doug Schaefer and Sebastien Marineau-Mes
The Eclipse CDT Project delivers a fully functional C/C++ IDE for the Eclipse platform.

Contributing to Eclipse


by Kent Beck and Erich Gamma
Eclipse's plug-in architecture means that every programmer is potentially a toolsmith.

Tools for Domain-Specific Modeling


by Steven Kelly
The Eclipse Modeling Framework and Graphical Editor Framework provide a domain-specific modeling solution.

EMBEDDED SYSTEMS

Bluetooth & Remote Device User Interfaces


by Richard Hoptroff
The FlexiPanel Bluetooth Protocol is a remote UI service for computers, electrical appliances, and other devices.

COLUMNS

Programming Paradigms


by Michael Swaine

Embedded Space


by Ed Nisley

FORUM

Editorial


by Jonathan Erickson

Letters


by you

Dr. Ecco's Omniheurist Corner


by Dennis E. Shasha

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, October 2004
Intelligent Systems


FEATURES

Political Modeling & Election Simulations


by Mary Lynn Reed
Agent-based modeling and simulation are natural tools for social science research and modeling real-world processes such as political elections.

Autonomic Delivery of Expertise via Web Services


by Michael J. Fichtelman
The Agent Building and Learning Environment is a complete environment for designing, testing, and implementing Java-based artificial-intelligence agents.

HTML Templates for Lisp


by Gene Michael Stover
One of the reasons Gene wrote this HTML template library is because he likes the elegance of Lisp programming.

C#, CLI (.NET), and C++/CLI Standardization


by Rex Jaeschke
Rex reports on the status of the C#, CLI, and C++/CLI Ecma standardization efforts.

Optimizing Pixomatic for Modern x86 Processors: Part III


by Michael Abrash
In the final installment of this three-part series, Michael wraps up his optimization of an x86 3D software rasterizer.

Examining Doxygen


by Al Williams
Doxygen is a tool for generating formatted documentation from comment blocks in the source code.

Object Serialization in .NET


by Richard Grimes
Object serialization is vital to web services and SOAP, .NET Remoting, and Application Domains and .NET Contexts.

Dynamic Compilation, Reflection, & Customizable Apps


by David B. Scofield and Eric Bergman-Terrell
David and Eric show how to develop apps that offer user-created buttons and menu items that launch custom features.

Launcher: Mastering Your Own Domain


by Gigi Sayfan
Launcher is a .NET GUI app that loads and executes other programs in multiple app domains.

Penumbra: Simplifying Eclipse


by Frank Mueller and Antony L. Hosking
Penumbra is a plug-in that takes some of the complexity out of the Eclipse IDE.

The Eclipse Visual Editor for Java


by Michael Pilone
The Eclipse Visual Editor for Java is a plug-in for, well, visual editing.

Refactoring with Eclipse


by Hugo Troche
Eclipse provides a collection of refactoring features.

Eclipse 3.0's Rich Client Platform


by Gene Sally and Maciej Halasz
Eclipse 3.0's Rich Client Platform takes the drudgery out of writing SWT-based applications.

EMBEDDED SYSTEMS

Robots & Small-C


by Pete Gray
Pete uses Small-C to write the control code for a DSP-based robot.

COLUMNS

Programming Paradigms


by Michael Swaine

Embedded Space


by Ed Nisley

Chaos Manor


by Jerry Pournelle

Programmer's Bookshelf


by Gregory V. Wilson

FORUM

Editorial


by Jonathan Erickson

Letters


by you

Dr. Ecco's Omniheurist Corner


by Dennis E. Shasha

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, November 2004
Computer Security


FEATURES

A Conversation with Avi Rubin


by Jack J. Woehr
DDJ
contributing editor Jack Woehr talks to Avi Rubin, the world's leading authority on electronic voting and software engineering.

Secure Web Forms & Struts Extensions


by Hari Gopal
Web forms with digital signatures provide a secure way to meet the authentication requirements of e-commerce apps.

The SecureScout Wi-Fi Security & Monitoring Framework


by Michael Larson
The SecureScout framework lets you monitor attacks on Wi-Fi (802.11) wireless networks.

ZigBee Wireless Sensor Networks


by Drew Gislason and Tim Gillman
ZigBee is an emerging wireless protocol designed for low-cost, high-reliability sensor networks.

Wireless USB


by Rahman Ismail, John Keys, and Rafael Kolic
Key to Wireless USB, which provides ultra-fast data rates, is Ultra-Wideband (UWB) radio technology.

Telephony & the Parlay Specification


by Bogdan Blaszczak and Mike Polcyn
The Parlay specification provides easy access to telephony networks via Java, CORBA, and web services.

Practical Secure Port Knocking


by John Graham-Cumming
Port knocking allows access to sensitive ports if you know the secret knock. John implements it using "Tumbler."

Binary XML


by Oliver Goldman
The price of portability includes bandwidth and memory constraints. "Binary XML" addresses these issues for XML.

Windows Forms Layout Managers


by Richard Grimes
Windows Forms is a .NET library for writing windows-based GUI applications.

Silent Application Update


by Zuoliu Ding
Online silent program updates are among the more useful and efficient features of today's software.

Creating Trace Listeners in .NET


by Michael Taylor
The .NET Framework comes with powerful, extensible classes for debugging and tracing applications.

Web Services & Apache Axis


by Paul Tremblett
Apache Axis lets you efficiently develop web services for both clients and servers.

Distributed Compilation


by Vadim Zaliva
Vadim uses distcc to create build and compile farms for effective distributed lifecycle management.

Eclipse & Tools for Embedded Systems Development


by Gene Sally
Eclipse's flexibility makes it an ideal platform for creating IDEs that serve the needs of embedded-systems developers.

Factoring for Eclipse


by Marcus Kestler
Applying Eclipse's Factor by Flow and Factor by Dependency features lets you produce efficient plug-ins.

EMBEDDED SYSTEMS

The VISA I/O API & .NET


by David Gladfelter
The Virtual Instrument Software Architecture (VISA) is a standard for instrument communication. David presents tools for using VISA with C# and VB.NET.

COLUMNS

Programming Paradigms


by Michael Swaine

Embedded Space


by Ed Nisley

Chaos Manor


by Jerry Pournelle

Programmer's Bookshelf


by Miles Thibault and Gregory V. Wilson

FORUM

Editorial


by Jonathan Erickson

Letters


by you

Dr. Ecco's Omniheurist Corner


by Dennis E. Shasha

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, December 2004
Database Development


FEATURES

Database Systems


by Dennis E. Shasha and Philippe Bonnet
Databases bring two things to the application development party—transactional semantics and querying capabilities.

Databases & Dynamic Ruby Classes


by David J. Berube
David uses Ruby's flexibility to execute Ruby code from a MySQL database.

The Firebird DBMS


by Steve Summers
Firebird is a freely available, open-source relational database system descended from Borland's InterBase 6.

Cloudscape & the Derby Project


by Ken North
Cloudscape is a Java-based, lightweight, embeddable, relational-database engine with a raft of freely available supporting drivers, plug-ins, and other tools.

Information Retrieval & Computational Geometry


by D. Ryan Stephens
Techniques borrowed from the field of Information Retrieval let you measure the similarity between data sets.

Plug-Ins & Java


by Michael Pilone
Michael uses design patterns and concepts in the development of a Java plug-in framework.

A Simple Oracle Call Interface


by Maciej Sobczak
Maciej's database library lets you "embed" SQL code within C++ applications.

Automating Batch Tasks with Ant


by Hugo Troche
Ant is a good framework for automating batch processing of database functions.

The Distributed Resource Management Application API


by Frédéric Parienté
DRMAA facilitates the development of grid-enabled applications by offering a standard API.

Relational Algebra & Metakit


by Brian Kelley
Metakit is an embedded database that encapsulates relational algebra and hierarchical data structures.

Examining Whidbey C++


by Richard Grimes
Visual Studio 2005 includes the next version of .NET and a new version of C++.

Dynamic Caching & ADO DataSets


by John Cheng and Hong Rong
Our authors present a technique that uses incremental queries to fetch data dynamically.

Sensitive Data & the .NET Crypto API


by David B. Scofield and Eric Bergman-Terrell
Properly used, the .NET Cryptography API is an effective way to safeguard sensitive data.

Eclipse Validators


by Lawrence Mandel
Lawrence presents a validator plug-in that uses Eclipse markers and dialog boxes to display problems.

EMBEDDED SYSTEMS

Real-Time Systems & RT CORBA


by William Nagel
The Real-Time CORBA specification is a set of CORBA extensions for systems with real-time scheduling requirements.

COLUMNS

Programming Paradigms


by Michael Swaine

Embedded Space


by Ed Nisley

Chaos Manor


by Jerry Pournelle

Programmer's Bookshelf


by Laura MacDougall & Gregory V. Wilson

FORUM

Editorial


by Jonathan Erickson

Letters


by you

Dr. Ecco's Omniheurist Corner


by Dennis E. Shasha

News & Views


by Shannon Cochran

Of Interest


by Shannon Cochran

Swaine's Flames


by Michael Swaine

DDJ, January 2005
Programming Languages


FEATURES



Metamodeling with Perl and AMPL


Christian Hicks and Dessislava Pachamanova
To create sophisticated financial models that required simulation, statistical analysis, and multistage optimization, our authors turned to AMPL and Perl.

RSS, Ruby, & the Web


Dave Thomas
Ruby 1.8.2 comes with a full set of libraries that make working with the Web and RSS easy.

Extending Python


Greg Smith
One of Python's greatest strengths is that you can extend it with modules written in C or C++.

Mixins Without Multiple Inheritance


Joe Strout
Mixin classes blend with other classes through multiple inheritance. Joe implements mixins for REALbasic.

printf Revisited


Walter Bright
The D programming language addresses some shortcomings of C and C++'s venerable printf.

Adding Voice to XHTML


Gerald McCobb and Jeff Kusnitz
XHTML+Voice is a multimodal markup language that enables voice interaction with web applications.

Cross-Platform Builds


John Graham-Cumming
John presents a cross-platform pattern for Makefiles that works across Windows and common UNIX platforms.

Writing GPS Applications


Jon Person
For commercial-grade GPS apps to work with different devices, you must understand how GPS data is interpreted.

MidiRecorder: An Exercise in Code Reuse


Al Stevens
Code reuse can mean less code in your programs, and more money in your tip jar.

Perl, VMWare, & Virtual Solutions


Sam Tregar
The Krang Farm is an automated build and test system created using VMWare and Perl.

Jacl.NET


Will Ballard
Jacl.NET is a port of the Jacl Java-based TCL interpreter to the .NET Framework.

Whidbey C++ Syntax


Richard Grimes
Richard continues his examination of Whidbey C++, covering new compiler and linker switches, and the build process.

Macros, Automated Builds, & Visual Studio 2003


Jake Watkins
You can extend the Visual Studio 2003 object model by writing macros in Visual Basic.

EMBEDDED SYSTEMS



Using Trace to Debug Real-Time Systems


Michael Lindahl
Hardware trace data gives you full printf() debugging in a completely nonintrusive fashion.

COLUMNS

Programming Paradigms


Michael Swaine

Embedded Space


Ed Nisley

Chaos Manor


Jerry Pournelle

Programmer's Bookshelf


Matthew Wilson

FORUM

Editorial


Jonathan Erickson

Letters


by you

Dr. Ecco's Omniheurist Corner


Dennis E. Shasha

News & Views


Shannon Cochran

Of Interest


Shannon Cochran

Swaine's Flames


Michael Swaine

DDJ, February 2005
Web Services


FEATURES



Java Web Services & Application Architectures


Eric J. Bruno
Eric use the Java Web Service Developer Pack to build a financial portal.

SOAs & ESBs


James Pasley
James examines Service-Oriented Architectures and the role of the Enterprise Service Bus when deploying SOAs.

Ruby/Amazon & Amazon Web Services


Ian MacDonald
The Ruby/Amazon toolkit is a high-level abstraction of Amazon Web Services for the Ruby programming language.

GIS Web Services and Microsoft Word


Keith Bugg
Here's a Geographical Information Systems application that lets you embed a map into a Microsoft Word document.

Java Cryptography & X.509 Authentication


Snezana Sucurovic and Zoran Jovanovic
Our authors use the Java Crypto API to implement X.509 authentication in a distributed system.

Building an Eclipse Web-Search Plug-In


Michael Pilone
This Eclipse plug-in lets you search DDJ's online archives.

Automating Localization


Hew Wolff
Converting existing systems to local languages can be a laborious process--making it ideal for automation.

Algorithms for Dynamic Shadows


Sergei Savchenko
Geometrically correct dynamic graphic shadows can add realism to your graphical applications.

Extending UML


Timothy E. Meehan and Norman Carr
Extended Activity Semantics (XAS) notation lets you model user interactions by extending UML.

Integrating Reporting Services into ASP.NET


David Lloyd
David designs and deploys a report using Reporting Services, a free add-on to SQL Server 2000.

New Syntax C++ in .NET Version 2


Richard Grimes
Richard examines how generics are declared in Whidbey C++ and how they relate to C++ templates.

Enhancing .NET Web Services


Eric Bergman-Terrell
SoapEx demonstrates how you can modify SOAP requests/responses and debug web-service calls with a network packet analyzer.

EMBEDDED SYSTEMS



Inside the uIP Stack


Drew Barnett and Anthony J. Massa
uIP lets you to add network support to small form factor, DSP-based embedded systems.

COLUMNS

Programming Paradigms


Michael Swaine

Embedded Space


Ed Nisley

Chaos Manor


Jerry Pournelle

Programmer's Bookshelf


Martin Heller

FORUM

Editorial


Jonathan Erickson

Letters


by you

Dr. Ecco's Omniheurist Corner


Dennis E. Shasha

News & Views


Shannon Cochran

Of Interest


Shannon Cochran

Swaine's Flames


Michael Swaine

DDJ, March 2005
64-Bit Computing


FEATURES



A Fundamental Turn Toward Concurrency in Software


Herb Sutter
The face of hardware is changing, impacting the way you'll be writing software in the future.

64-Bit Computing & JVM Performance


Sergiy Kyrylkov
Sergiy turns to a pair of 64-bit platforms—the AMD64 and PowerPC64—to gauge the performance of 32- and 64-bit JVMs.

Windows & the World of 64-Bit Computing


Vikram Srivatsa
Windows 64-bit Edition and the 64-bit version of the CLR will be major players in the 64-bit software world.

Integer 64-Bit Optimizations


Anatoliy Kuznetsov
To fully utilize the power of 64-bit CPUs, applications need to exploit wider machine words.

High-Performance Math Libraries


Mick Pont
The AMD Core Math Library is a freely available toolset that provides core math functionality for the AMD64 64-bit processor.

Programming with Contracts in C++


Christopher Diggins
Programming with Contracts is a method of developing software using contracts to explicitly state and test design requirements.

Making a Scene with Java3D


Michael Pilone
Java3D is a free library that provides a scenegraph and 3D rendering context for creating graphics applications.

A Sound File Editor for Netbeans


Rich Unger
Here's a full-featured Java IDE built on top of the Netbeans Platform--an open-source framework for building Java client applications.

Resource Management in Python


Oliver Schoenborn
Python does a good job of resource management, but there are subtleties that affect the portability, robustness, and performance.

The StatiC Compiler & Language


Pete Gray
StatiC is a dual-methodology language that's easy to learn, yet advanced enough for multitasking in embedded environments.

Building on TiVo


Arthur van Hoff and Adam Doppelt
The Home Media Engine lets you build TiVo applications that integrate seamlessly with the familiar TiVo user experience.

Adding Diagnostics to .NET Code


Richard Grimes
The .NET Framework library includes the Debug and Trace classes, which are important in debug builds.

Reducing the Size of .NET Applications


Vasian Cepa
Here's a technique for reducing the size of .NET executables without using native code or modifying the PE format.

EMBEDDED SYSTEMS



64-Bit Computing & DSPs


Shehrzad Qureshi
Shehrzad examines how the 64-bit features of the C6416 DSP can lead to performance boosts in image processing.

COLUMNS

Programming Paradigms


Michael Swaine

Embedded Space


Ed Nisley

Chaos Manor


Jerry Pournelle

Programmer's Bookshelf


Douglas Reilly

FORUM

Editorial


Jonathan Erickson

Letters


by you

Dr. Ecco's Omniheurist Corner


Dennis E. Shasha

News & Views


Shannon Cochran

Of Interest


Shannon Cochran

Swaine's Flames


Michael Swaine

DDJ, April 2005
Internet & Web Development


FEATURES



Dr. Dobb's Journal 2005 Excellence in Programming Award


Jonathan Erickson
Guy Steele Jr. is the recipient of this year's Excellence in Programming Award.

A Conversation with Guy Steele Jr.


Jack J. Woehr
DDJ chats with Guy Steele Jr. on topics ranging from programming languages research to programming language implementation.

Collaborative Web Surfing


Gigi Sayfan
Cosurfer is a peer-to-peer GUI application that lets two users chat and surf the Web together.

XForms & Cause-and-Effect Programming


John M. Boyer
XForms is a clean architecture for separating presentation, user interface, and business processing models.

RDF: The Resource Description Framework


Bob Ducharme
RDF lets you store metadata about anything, anywhere.

Digital Libraries & XML-Relational Data Binding


Rene Reitsma, Brandon Whitehead, and Venkata Satya Gokul Suryadevara
Conversion from XML to the relational model can be problematic. Here's a technique that lets you avoid hard coding.

Exploring WS-Notification


Marco Aiello, Manuel Zanoni, and Alessandro Zolet
WS-Notification is a web-service protocol that defines a standard approach to notification.

Call Control XML & The Voice Conference Manager


Moshe Yudkowsky
Call Control XML is a W3C API for third-party call control.

Software Synthesis for OS-Independent Coding


Bob Zeidman
Software synthesis lets you hide low-level implementation details from programmers.

C++ & operator []=


Matthew Wilson
Matthew thinks that the language definition of the C++ subscript operator operator [] is too coarse grained.

Building High-Performance Clusters


Christopher Jeffords and Dung Pham
Need to build a high-performance, 32- or 64-bit cluster computer? Here's how.

SharePoint Web Part Development


Seth Bates
Microsoft's Windows SharePoint Services is a web-based team collaboration and document management platform.

A Silent Component Update for Internet Explorer


Zuoliu Ding
Zuoliu presents a silent update technique for IE components.

EMBEDDED SYSTEMS



Debugging Complex Embedded Applications


Graham Morphew
Multithreaded real-time operating systems create unique problems when it's time to debug applications.

COLUMNS

Programming Paradigms


Michael Swaine

Embedded Space


Ed Nisley

Chaos Manor


Jerry Pournelle

Programmer's Bookshelf


Bjorn Karlsson

FORUM

Editorial


Jonathan Erickson

Letters


by you

Dr. Ecco's Omniheurist Corner


Dennis E. Shasha

News & Views


Shannon Cochran

Of Interest


Shannon Cochran

Swaine's Flames


Michael Swaine

DDJ, May 2005
Algorithms


FEATURES



Naive Bayesian Text Classification


John Graham-Cumming
Spam filtering may be the best known use of naive Bayesian text classification, but it's not the only application.

Optimal Queens


Timothy Rolfe
Optimal Queens is a classic problem in mathematics and computer science. Timothy optimizes it in C and Java.

A Multifield Single-Pass Shell Sort Algorithm


MacGregor K. Phillips
This enhancement to the venerable shell sort algorithm lets you sort on different types of fields.

Planarity by Edge Addition


John M. Boyer
Planarity is an important category in graph theory with applications ranging from circuit layout to web-site design.

Processing Rows in Batches


Steven F. Lott and Robert Lucente
To avoid sorting all of the rows in the table, focus your sorting on just a subset of those rows.

TileShare: Maps as Computer Images


Hrvoje Lukatela and John Russell
TileShare is a cross-platform file format and library for efficiently manipulating scanned map images.

Python 2.4 Decorators


Phillip Eby
Decorators are a powerful Python 2.4 feature that helps you reduce code duplication and consolidate knowledge.

Multithreaded Technology & Multicore Processors


Craig Szydlowski
Many software applications are about to be turned upside-down by the transition of CPUs from single- to multicore implementations.

Battle of the Code Generators


Gigi Sayfan
Code generation involves generating source code in some target programming language from some simpler input.

ASP to ASP.NET Migration Strategy


Mark Sorokin
Migration from ASP to ASP.NET can be done in different ways. Understanding possible paths leads to optimal strategies.

Windows Forms and Win32


Richard Grimes
To effectively use Windows Forms, you must have an understanding of how Win32 windowing works.

EMBEDDED SYSTEMS



Eclipse & Custom Class Loaders


Greg Bednarek
All classes used in a Java application are loaded by the System class loader, or a custom, user-defined class loader.

COLUMNS

Programming Paradigms


Michael Swaine

Chaos Manor


Jerry Pournelle

Embedded Space


Ed Nisley

Programmer's Bookshelf


Gregory V. Wilson

FORUM

Editorial


Jonathan Erickson

Letters


by you

Dr. Ecco's Omniheurist Corner


Dennis E. Shasha

News & Views


Shannon Cochran

Of Interest


Shannon Cochran

Swaine's Flames


Michael Swaine

DDJ, June 2005
Testing & Debugging


FEATURES



Omniscient Debugging


Bil Lewis
With omniscient debugging, you know everything about the run of a program--from state changes to the value of variables at any point in time.

Examining Software Testing Tools


David C. Crowther and Peter J. Clarke
Our authors examine class-based unit testing tools for Java and C#.

Dissecting Error Messages


Alek Davis
Error messages are the most important information users get when encountering application failures.

Debugging Production Software


John Dibling
The Production Software Debug library includes utilities designed to identify and diagnose bugs in production software.

System Verification with SCV


George F. Frazier
The SystemC Verification Library speeds up verification of electronic designs.

Portability & Data Management


Andrei Gorine
Following rules for developing portable code simplifies the reuse of data-management code in new environments.

Performance Monitoring with PAPI


Philip Mucci, Nils Smeds, and Per Ekman
The Performance Application Programming Interface is a portable library of performance tools and instrumentation with wrappers for C, C++, Fortran, Java, and Matlab.

The Technical Report on C++ Library Extensions


Matthew H. Austern
Matt looks at what the Technical Report on C++ Library Extensions means for C++ programmers.

Measuring the Benefits of Software Reuse


Lior Amar and Jan Coffey
Does software reuse really pay off in the long run? How can you tell?

Loadable Modules & the Linux 2.6 Kernel


Daniele Paolo Scarpazza
The Linux Kernel 2.6 introduces significant changes with respect to 2.4.

ASP.NET & Multiplatform Environments


Marcia Gulesian
Running .NET web apps in the enterprise means accommodating myriad servers and browsers.

EMBEDDED SYSTEMS



Hardware-Assisted Breakpoints


Dmitri Leman
Dmitri explains how to access debug registers on XScale-based CPUs from C/C++ applications.

COLUMNS

Programming Paradigms


Michael Swaine

Embedded Space


Ed Nisley

Chaos Manor


Jerry Pournelle

Programmer's Bookshelf


Gregory V. Wilson

FORUM

Editorial


Jonathan Erickson

Letters


by you

Dr. Ecco's Omniheurist Corner


Dennis E. Shasha

News & Views


Shannon Cochran

Of Interest


Shannon Cochran

Swaine's Flames


Michael Swaine

DDJ, July 2005
Java Programming


FEATURES



Measuring Java Reuse, Productivity, and ROI


W. David Pitt
David presents a way to measure productivity and reusability that occurs in Java development projects.

Java & Static Analysis


Amit Chaturvedi
Make the review process more manageable and predictable by using static analysis.

Java Annotations and apt


J. Benton
Java 5.0 introduces "annotations" that integrate metadata technology directly into the language.

Scripting Java Applications with Sleep


Raphael Mudge
Sleep is a freely available library for adding scripting services to Java applications.

Java & Bluetooth


Paul Tremblett
The Java Specification Request 82 defines a standard API for Bluetooth applications.

High-Performance Data Management in Java


Charles Lamb
High-performance data management involves on-disk persistent storage, in-memory data storage, and cache management.

JMX Redux


Juan C. Duenas, Manuel Santillan, & Jose Luis Ruiz
The Java Management Extensions 1.2 is becoming the de facto Standard for Java application and services management.

Cascading Style Sheets & JavaServer Faces


Tor Norbye
JavaServer Faces support Cascading Style Sheets and make it easy to create web applications.

Examining Enerjy's Java Toolkit


Ryan Barr
Enerjy Software's Java toolsuite includes a code analyzer, performance management/profiling tool, memory profiler, and thread analyzer.

Inside Digital Video Recorders


Linden deCarmo
Linden explains the differences between DVR software on PCs—Linux or Windows—and software optimized for set-top boxes.

Finding Binary Clones with Opstrings & Function Digests: Part I


Andrew Schulman
Reverse engineering is an invaluable engineering tool.

ASP.NET Configuration


Douglas Reilly
In all applications—and certainly ASP.NET ones—you need to configure certain aspects of the program.

EMBEDDED SYSTEMS



Surround Sound


Don Morgan
Surround sound lets you experience sound coming from all directions.

COLUMNS

Programming Paradigms


Michael Swaine

Embedded Space


Ed Nisley

Chaos Manor


Jerry Pournelle

Programmer's Bookshelf


Jack J. Woehr

FORUM

Editorial


Jonathan Erickson

Letters


by you

Dr. Ecco's Omniheurist Corner


Dennis E. Shasha

News & Views


Shannon Cochran

Of Interest


Shannon Cochran

Swaine's Flames


Michael Swaine

DDJ, August 2005
Development Platforms


FEATURES



NetBeans 4.1 & Eclipse 3.1


Eric J. Bruno
NetBeans 4.1 and Eclipse 3.1 are at the forefront when it comes to development platforms for J2SE, J2EE, and J2ME.

Visual Studio 2005 Visualizers


James Avery
"Visualizers" are Windows Forms dialogs in Visual Studio 2005 that let you create graphical views into the value of an object.

The Eclipse Modeling Framework


Frank Budinsky
The Eclipse Modeling Framework helps you define models, from which many common code-generation patterns are generated.

The TMS Development Platform


Alexander Frey
The TMS build system offers a simple, powerful way to do multiplatform development.

The VSTSEclipse Project


Joe Sango
The VSTSEclipse project is focusing on an Eclipse plug-in for utilizing Visual Studio Team System functionality outside the VSTS framework.

Performance Diagnosis & .NET Applications


Ramkumar N. Chintalapati and Sachin Ashok Wagh
The authors present a tool that lets you identify .NET-related problems and resolve bottlenecks during performance analysis.

Moving To .NET 2.0


Eric Bergman-Terrell
.NET 2.0, C# 2.0, and Visual Studio 2005 include a host of new features.

Finding Binary Clones with Opstrings & Function Digests: Part II


Andrew Schulman
Andrew continues his examination of reverse engineering, this month, focusing on binary code.

NPTL: The New Implementation of Threads for Linux


L. Blunt Jackson
Introduced with Version 2.6 of the Linux kernel, the Native POSIX Thread Library brings full compliance to the POSIX Standard.

Porting Compilers & Tools to 64 Bits


Steven Nakamoto and Michael Wolfe
Rehosting compilers and tools to 64-bit processors may not be as difficult as you think.

An STL-Compatible Hybrid of Linked List & Hash Map


William Nagel
"Linked_hash" is an STL-compatible data structure based on the best of the linked-list hash-map classes.

EMBEDDED SYSTEMS



A Reusable Duff Device


Ralf Holly
Duff's Device is a special kind of loop-unrolling mechanism that's useful when performance counts.

COLUMNS

Programming Paradigms


Michael Swaine

Embedded Space


Ed Nisley

Chaos Manor


Jerry Pournelle

Programmer's Bookshelf


Jacek Sokulski

FORUM

Editorial


Jonathan Erickson

Letters


by you

Dr. Ecco's Omniheurist Corner


Dennis E. Shasha

News & Views


Shannon Cochran

Of Interest


Shannon Cochran

Swaine's Flames


Michael Swaine

DDJ, September 2005
Communications & Networking


FEATURES



Mobile Java & 3D Applications


Oscar Vivall and Tom Thompson
Oscar and Tom examine the Mascot Capsule Micro3D and JSR 184 APIs, then use them to develop high-quality 3D applications for mobile phones.

Inside Mobile IP


Narendra Venkataraman
Mobile IP lets mobile-device users stay connected when moving to networks with different IP addresses.

High-Performance I/O with Java NIO


Brian Pontarelli
The NIO library offers a high-performance technique for handling input/output (I/O) operations.

Improving Performance with Custom Pool Allocators for STL


Anthony Aue
Anthony presents a highly flexible and configurable replacement for C++'s std::allocator for use with node-based standard containers.

The Extensible Firmware Interface


Craig Szydlowski
The Extensible Firmware Interface is a modern replacement for the venerable BIOS.

C++ Exceptions & the Linux Kernel


Halldor Isak Gylfason and Gisli Hjalmtysson
C++ kernel-level runtime support for Linux lets you use the full power of C++ in kernel-space programming.

Multithreading .NET Apps for Optimal Performance


Eric Bergman-Terrell
Multithreading delivers maximum performance from parallel CPU architectures. .NET has two main threading mechanisms--the Thread class and asynchronous methods.

Testing Web Applications


Sean Dawson and Kristin Kerr
Sean and Kristin automate web application testing by integrating JWebUnit into Hippo's existing test framework.

Finding Binary Clones with Opstrings & Function Digests: Part III


Andrew Schulman
Andrew wraps up his examination of reverse engineering this month, further unraveling binary code.

EMBEDDED SYSTEMS



Software Optimization & DSP Embedded Systems


Robert Oshana
The challenge of developing DSP-based embedded systems lies in making the most of limited resources--performance, memory, and power.

COLUMNS

Programming Paradigms


Michael Swaine

Embedded Space


Ed Nisley

Chaos Manor


Jerry Pournelle

Programmer's Bookshelf


Gregory V. Wilson

FORUM

Editorial


Jonathan Erickson

Letters


by you

Dr. Ecco's Omniheurist Corner


Dennis E. Shasha

News & Views


DDJ Staff

Pragmatic Exceptions


Benjamin Booth

Of Interest


DDJ Staff

Swaine's Flames


Michael Swaine

DDJ, October 2005
Computer Security


FEATURES



Preventing Piracy While Preserving Privacy


Michael O. Rabin and Dennis E. Shasha
The security approach presented here is a privacy-preserving, flexible, antipiracy solution that does not suffer from "Break Once, Run Everywhere."

Reestablishing Trust in the Web


Amir Herzberg and Ahmad Jbara
The TrustBar browser extension provides improved security, identification, and trust indicators.

Extended Visual Cryptography Schemes


Daniel Stoleru
Visual cryptography is a graphical form of information concealing.

Inside the SmartDongle USB Security Key


Joel Gyllenskog
Joel lifts the hood on his USB security key.

Developing JSR-168 Portlets


Ted O'Connor and Martin Snyder
The JSR-168 portlet specification defines APIs for building applications viewed inside portal frameworks.

The Eclipse Test and Performance Tools Platform


Andy Kaylor
The Eclipse Test and Performance Tools Platform provides open Standards for interoperability.

The Mac's Move to Intel


Tom Thompson
Steve Jobs dropped a bombshell when he told software developers that the Macintosh will switch from PowerPC to Intel x86 processors.

Calling C Library DLLs from C#


Shah Datardina
Need to utilize legacy software? Here are techniques for calling unmanaged code written in C from C#.

Removing Memory Errors from 64-Bit Platforms


Rich Newman
It's crucial to address potential memory errors before porting to 64-bit platforms.

Pointer Containers


Thorsten Ottosen
Smart containers are useful and safe utilities that can lead to flawless object-oriented programming.

EMBEDDED SYSTEMS



Using Hardware Trace for Performance Analysis


Michael Lindahl
Michael examines embedded-systems performance-analysis techniques, and discusses some of their inherent limitations.

COLUMNS

Programming Paradigms


Michael Swaine
Ringtones are where the money is—for now anyway.

Embedded Space


Ed Nisley
Large, complex embedded systems have more places for things to go wrong.

Chaos Manor


Jerry Pournelle
Jerry looks back when inventing the future, and looks forward to the world of 64-bit computing.

Programmer's Bookshelf


Michelle Levesque
Michelle examines Greg Wilson's Data Crunching: Solving Everyday Problems Using Java, Python, and More.

FORUM

Editorial


Jonathan Erickson

Letters


by you

Dr. Ecco's Omniheurist Corner


Dennis E. Shasha

News & Views


DDJ Staff

Pragmatic Exceptions


Benjamin Booth

Of Interest


DDJ Staff

Swaine's Flames


Michael Swaine

DDJ, November 2005
Distributed Computing


FEATURES



The Media Grid


Aaron E. Walsh
The Media Grid is a digital media network infrastructure and software development platform based on distributed grid technology.

Parallel Processing Clusters & PVM


David J. Powers
The Parallel Virtual Machine is network-clustering software that provides a scalable network for parallel processing.

Debugging Heterogeneous Distributed Applications


Stephen B. Jenkins
Debugging complex, asynchronous, heterogeneous, distributed applications is hard. The techniques Stephen presents here makes the process easier.

Building Internet Distributed Computing Systems


Charles Peck, Joshua Hursey, Josh McCoy, & Vijay Pande
Our authors present a framework for harnessing distributed, tightly coupled cluster and SMP resources for computational science research.

InfiniBand Technology


Corky Seeber
InfiniBand is a serial I/O interconnect architecture designed to connect hundreds--if not thousands--of computers.

Building Internet Distributed Computing Applications


David Houlding
Protege is a tool that lets you efficiently map out an Enterprise Architecture to enable knowledge mining for analysis and planning.

Linux Kernel Debugging


Dean A. Gereaux
Dean explains how to debug drivers with Linux Kernel Debugger, add hooks into KDB from your drivers, and create KDB modules.

Improving Search Precision Using Google Desktop Search 1.0


Lawrence Reeve
The Google Desktop Search SDK lets you build plug-ins for extending Google's Desktop Search local indexing and search service.

Functional Programming in Java


Mark Zander
Generic Java lets you extend the language to gain some of the advantages of functional programming languages.

The CustomTreeView ASP.NET 2.0 Server Control


Shahram Khosravi
CustomTreeView is a server control derived from the ASP.NET 2.0 TreeView server control that is used to display hierarchical data.

EMBEDDED SYSTEMS



Java & RFID Tags


Shamshad Ansari
The Java Communication API lets you send commands to and receive responses from RFID readers such as the TI S2000 Micro Reader.

COLUMNS

Programming Paradigms


Michael Swaine
Michael mulls over the concept of the technological imperative.

Embedded Space


Ed Nisley
Lego Mindstorms provides a stepping stone into the world of robotics.

Chaos Manor


Jerry Pournelle
SIGGRAPH, the ACM's Special Interest Group on Graphics, is one of the key places to observe computer trends.

Programmer's Bookshelf


Gregory V. Wilson
Greg's reading list includes books on everything from software vulnerability and regular expressions to XML and Perl.

FORUM

Editorial


Jonathan Erickson

Dr. Ecco's Omniheurist Corner


Dennis E. Shasha

News & Views


DDJ Staff

Pragmatic Exceptions


Benjamin Booth

Of Interest


DDJ Staff

Swaine's Flames


Michael Swaine

DDJ, December 2005
Database Development


FEATURES



Table Patterns & Changing Data


Todd Schraml
Historical data doesn't need to clutter your database and slow its performance.

Rapid Data Access Tier Implementation


John Cheng, Abdul Akbari, and Hong Rong
DBAG is a tool for automating the creation of domain-specific classes.

Month-Text Ordering


David Wincelberg
A month field-type can be a useful addition to your database toolbox.

Object-Relational Mapping in Java with SimpleORM


Martin Snyder and Ted O'Connor
SimpleORM is a lightweight--yet powerful--object-relational mapping implementation.

Building Grid-Enabled Data-Mining Applications


Alex Depoutovitch and Alex Wainstein
Computing grids let you use parallelization to tackle really big data-mining jobs.

The OCAP Digital Video Recorder Specification


Linden deCarmo
The OCAP Digital Video Record specification defines an open API for building DVR applications.

XML-Binary Optimized Packaging


Andrey Butov
XML-Binary Optimized Packaging provides a means for including binary data within XML documents.

A Mac Text Editor Migrates to Intel


Tom Thompson
BBEdit, an industrial-strength Macintosh text editor, has been ported to the Intel platform. Here's how.

Google's Summer of Code: Part I


DDJ Staff and Friends
Google's Summer of Code resulted in thousands and thousands of lines of code. Here are some of the students who participated.

Wide-Character Format String Vulnerabilities


Robert C. Seacord
Robert presents strategies for handling format string vulnerabilities in C.

Amazon Web Services


Ashish Muni and Justin Hansen
ScanZoom lets you use mobile camera phones to launch services by taking photos of barcodes.

Enterprise Application Logging


Jim Mangione
Accurately gauging the health of IT assets across applications requires true enterprise-level logging.

EMBEDDED SYSTEMS



Memory Management & Embedded Databases


Andrei Gorine & Konstantin Knizhnik
Embedded and in-memory databases depend on the quality of their memory-management algorithms.

COLUMNS



Programming Paradigms


Michael Swaine
Michael reminiscences about OOPSLA '89 in New Orleans.

Embedded Space


Ed Nisley
Ed attends the 7th Annual Linux Symposium to find out what's up with Linux.

Chaos Manor


Jerry Pournelle
Jerry shares his first impressions of Windows Vista.

Programmer's Bookshelf


Gregory V. Wilson
Six books in seven paragraphs! Greg's up to it.

FORUM

Editorial


Jonathan Erickson

Dr. Ecco's Omniheurist Corner


Dennis E. Shasha

News & Views


DDJ Staff

Of Interest


DDJ Staff

Pragmatic Exceptions


Benjamin Booth

Swaine's Flames


Michael Swaine

DDJ, January 2006
Programming Languages


FEATURES



Dr. Dobb's Journal @ 30


Michael Swaine
DDJ's long-time editor-at-large reflects on how we got to where we are today.

The Return of Tiny Basic


Tom Pittman
Tom updates one of the first implementations of the language that launched an industry.

Thoughts on Language Design


Guy L. Steele Jr.
Guy Steele, an engineer who knows something about designing programming languages, explains why new challenges require new solutions.

Google's Summer of Code: Part II


DDJ Staff & Friends
Google's Summer of Code resulted in thousands and thousands of lines of code. Here are more of the students who participated.

Recursive Descent, Tail Recursion, & the Dreaded Double Divide


Truck Smith
What can you do when the wrong answer turns out to be right?

Transforming XML & the REXML Pull Parser


James Britt
James uses Ruby and its built-in XML pull parser for an alternative approach to XML transformations.

PHP & Preprocessed Web Pages


Betsy Gamrat
Preprocessing lets you deliver complex web pages lightning fast, and in a cost-effective manner.

Sorting in Java & C#


David Perelman-Hall
David uses reflection to sort a list of complex types using both Java and C#.

The Java Location API


David Parsons
When it comes to real estate and mobile phones, the three most important words are "location, location, location."

Sessioning with XMLHttpRequest


Dionysios G. Synodinos
Here's an XMLHttpRequest object that lets you use HTML and JavaScript to connect the presentation layer directly to XML data.

Cocoa Memory Management


Jose R.C. Cruz
Cocoa, a Mac application development framework, has a memory-management scheme that differs from Java or C++.

Automation Interfaces & .NET Applications


Scott Swigart
Scott builds interfaces for .NET executables that use automation interfaces from other applications.

The Eclipse Visual Editor


David Orme and Joe Winchester
The Eclipse Visual Editor is a subproject that provides a framework for creating Eclipse-based GUI builders.

Detecting Potential Deadlocks


Tomer Abramson
To avoid deadlocks, Tomer explains how to use tools that detect potential deadlocks each time code is executed.

EMBEDDED SYSTEMS PROGRAMMING



Single Inheritance Classes in C


Ron Kreymborg
When C++ compilers don't exist for some processors, inheritable classes in C may be the best solution.

COLUMNS



Embedded Space


Ed Nisley
Trusted computing means that you have to trust someone, somewhere. But can you?

Chaos Manor


Jerry Pournelle
From watermarks to DVR, Jerry talks about some of the tools he uses day in and day out.

Programmer's Bookshelf


Jorge Aranda and Laura MacDougall
Jorge and Laura report on Aspect-Oriented Analysis and Design and Access by Design, respectively.

FORUM

Editorial


Jonathan Erickson

Dr. Ecco's Omniheurist Corner


Dennis E. Shasha

News & Views


DDJ Staff

Pragmatic Exceptions


Benjamin Booth

Of Interest


DDJ Staff

Swaine's Flames


Michael Swaine

DDJ, February 2006
64-Bit Development


FEATURES



Multiplatform Porting to 64 Bits


Brad Martin, Anita Rettinger, and Jasmit Singh
Porting 300,000 lines of 32-bit code to nearly a dozen 64-bit platforms requires careful planning.

Mac OS X Tiger & 64 Bits


Rodney Mach
Before migrating to 64-bit platforms, the first question to ask is whether you really need to do so.

Ajax: Asynchronous JavaScript and XML


Eric J. Bruno
Ajax, short for "Asynchronous JavaScript and XML," lets you create dynamic web pages.

Examining µC++


Peter A. Buhr and Richard C. Bilson
µC++ was designed to provide high-level concurrency for C++.

Native Queries for Persistent Objects


William R. Cook and Carl Rosenberger
Among other benefits, native queries overcome the shortcomings of string-based APIs.

Dynamic Bytecode Instrumentation


Ian Formanek and Gregg Sporar
Dynamic bytecode instrumentation is an innovative technique that makes profiling fast and easy.

Range Tracking & Comparison Algorithms


Kirk J. Krauss
Some information is best viewed as a list of ranges. Kirk presents algorithms for dealing with ranges.

Displaying GIF Images on J2ME Mobile Phones


Tom Thompson
Surprisingly, many Java-based mobile phones couldn't display GIF image files--until now.

Sudoku & Graph Theory


Eytan Suchard, Raviv Yatom, and Eitan Shapir
Understanding graph theory is central to building your own Sudoku solver.

Google's Summer of Code: Part III


DDJ Staff and Friends
Google's Summer of Code resulted in thousands and thousands of lines of code. Here are more students who participated.

Viewing & Organizing Log Files


Phil Grenetz
LogChipper, the tool Phil presents here, lets you view and organize the contents of log files.

EMBEDDED SYSTEMS PROGRAMMING



Porting an RTOS to a New Hardware Platform


Byron Miller
Porting software to new hardware boards doesn't need to be difficult.

COLUMNS



Programming Paradigms


Michael Swaine
Everything Michael knows he attributes to Roger Penrose's The Road to Reality: A Complete Guide to the Laws of the Universe.

Embedded Space


Ed Nisley
Ed remembers to tell you that memory really does matter.

Chaos Manor


Jerry Pournelle
Beware of Sony's Digital Rights Management (DRM) scheme, which covertly installs itself.

Programmer's Bookshelf


Peter N. Roth
Peter reviews Stephen C. Perry's Core C# and .NET.

FORUM

Editorial


Jonathan Erickson

Dr. Ecco's Omniheurist Corner


Dennis E.Shasha

News & Views


DDJ Staff

Pragmatic Exceptions


Benjamin Booth

Of Interest


DDJ Staff

Swaine's Flames


Michael Swaine

DDJ, March 2006
Intelligent Systems


FEATURES



Resource-Aware Mobile Device Applications


Hari Gopal
Smart-client applications need to be constantly aware of the changing status of the constrained devices resources.

Real-Time Stereoscopic Video Streaming


Karen McMenemy & Stuart Ferguson
Our authors examine real-time virtual reality by showing you how to use DirectX and OpenGL to build a stereoscopic webcam.

Getting Personal with J2ME's PIM API


Tom Thompson
J2ME, the Java platform for portable devices, doesn't allow access to a device's address book. The JSR 75 Personal Information Management and JSR 75 FileConnection packages change all this.

Keeping C/C++ Code Scalable


Kirk J. Krauss
Kirk presents techniques for identifying committed virtual address space in C/C++ programs.

Themes, Skins, and ASP.NET 2.0


Vikram Srivatsa
In ASP.NET 2.0, a Theme is a way of defining the look-and-feel for server controls in web applications.

Debugging & Embedded Linux Runtime Environments


Rajesh Mishra
Debugging in embedded Linux runtime environments requires an assortment of tools.

Google's Summer of Code: Part IV


DDJ Staff & Friends
Google's Summer of Code resulted in thousands of lines of code. Here are more students who participated.

COLUMNS



Programming Paradigms


Michael Swaine

Embedded Space


Ed Nisley

Programmer's Bookshelf


Gregory V. Wilson

FORUM

Editorial


Jonathan Erickson

Of Interest


DDJ Staff

Pragmatic Exceptions


Benjamin Booth

Swaine's Flames


Michael Swaine

DDJ, April 2006
Algorithms


FEATURES

2006 Dr. Dobb's Journal Excellence in Programming Award


Jonathan Erickson
Moving computer security to the front lines of software development is just one reason Bruce Schneier is the recipient of this year's Excellence in Programming Award.

An Algorithm for Compressing Space and Time


Tomas G. Rokicki
Making a slow program fast can lead to both joy and frustration. But sometimes a new approach yields amazing improvements.

Dependency Management


John Graham-Cumming
John explores the irony of Make.

Consuming .NET Web Services in Oracle JDeveloper


Max I. Fomitchev
Max uses Oracle JDeveloper 10.1.2 to examine the problems you must overcome when consuming ATL/.NET web services in Java clients that rely on Apache SOAP.

Monitoring the Java Virtual Machine


Paul Tremblett
Java Management Extensions (JMX) provide tools for monitoring and managing applications and the resources they use.

Managed C++ and the Side-by-Side Cache


Richard Grimes
The Visual Studio installer places Visual Studio shared libraries in a location called the "side-by-side cache." Here's what you need to know to leverage it.

Accelerating Compute Intensive Functions Using C


Joe Hanson
Joe examines how you accelerate application processing using a software-configurable architecture to achieve hardware-accelerated performance in C.

COLUMNS



The New C++


Pete Becker

Embedded Space


Ed Nisley

Programmer's Bookshelf


Peter N. Roth

FORUM



Editorial


Jonathan Erickson

Of Interest


DDJ Staff

Pragmatic Exceptions


Benjamin Booth

Swaine's Flames


Michael Swaine

DDJ, May 2006
Testing & Debugging


FEATURES

Dependency Injection & Testable Objects


Jeremy Weiskotten
Dependency injection is a pattern for designing loosely coupled and testable objects.

Postmortem Debugging


Stefan Wörthmüller
This postmortem analysis approach lets you identify and resolve hidden errors, but with little impact on the program.

Performance Analysis & Multicore Processors


Gary Carleton & Walter Shands
Gary and Walter describe how to use runtime performance analysis to make single-threaded applications multithreaded.

Incrementally Updating Software


John Keogh
Providing downloadable updates for selected portions of an application is critical to the development process.

Domain-Specific Languages & DSL Workbench


Griffin Caprio
Domain-specific languages can enable richer development environments than those provided by general-purpose languages.

I, Testbot


Ralf Holly
Testbots let you move the effort of building and testing from your shoulders to that of software robots.

Message Handling Without Dependencies


Anthony Williams
You can use the full power of C++ to pass messages while maintaining type safety and avoiding monolithic functions.

COLUMNS

The New C++


Pete Becker

Embedded Space


Ed Nisley

Programmer's Bookshelf


Gregory V. Wilson


FORUM



Editorial


Jonathan Erickson

Of Interest


DDJ Staff

Swaine's Flames


Michael Swaine

DDJ, June 2006
Game Development


FEATURES

Ruby on Rails


Michael Swaine
It catches your attention when a respected member of the Java development community says Ruby On Rails may be a successor to Java. You've heard of Rails, of course. It's that hot Ruby-based MVC-patterned full-stack framework for developing web applications that babysit databases.

OpenGL & Mobile Devices


Richard S. Wright Jr.
OpenGL is the de facto standard for cross-platform real-time 3D graphics. OpenGL ES extends these capabilities to mobile devices.

Heightmap Terrain Rendering


Mikael Baros
Using heightmaps and Java's Mobile 3D Graphics API to create realistic 3D graphics for mobile devices.

VSTS: In the Wild


Scott Swigart
An interview with Visual Studio Team System expert and Microsoft Team System MVP Richard Hundhausen.

Software Manager Basics


Mark I. Himelstein
Most software managers didn't start out as managers, but began their careers as developers.

Inside the db4o Database


Rick Grehan
Among other features, db4o, an open-source object database for Java and .NET, has built-in support for synchronization.

Secure Coding in C++/CLI


Robert C. Seacord
C++/CLI is an extension to C++ that adds properties, events, garbage collection, and generics for all types including existing Standard C++ classes.

The 2006 Jolt Awards


Rosalyn Lum
At this year's SD West 2006 Conference and Expo, 14 Jolt Awards and 42 Productivity Awards were presented.

COLUMNS

The New C++: Living By the Rules


Pete Becker
Understanding compiler rules better equips you to interpret messages the compiler sends you.

Nisley's Notebook: On Engineering


Ed Nisley
Licensing, quantitative software engineering, and the demise of his antediluvian printer are on Ed's mind.

The Agile Edge: Where Did All the Positions Go?


Scott Ambler
When management lets agilists in the door, roles and responsibilities are just a couple of issues that need to be addressed.

The 2006 Jolt Awards


Rosalyn Lum
At this year's SD West 2006 Conference and Expo, 14 Jolt Awards and 42 Productivity Awards were presented.

DEPARTMENTS

Editorial: Hmmmm


Jonathan Erickson
Welcome to the new Dr. Dobb's Journal.

Alius Vox


Christopher Seiwald
The concepts behind software configuration management can be applied to other industries, too.

Developer Diaries


Michael Swaine
Developers tackle problems as varied as RTOS, VoIP, and lifecycle management.

New & Noteworthy


Rick Wayne
The latest news and developments to take note of.

Developer's Notebook


DDJ Staff
New development products and new releases of existing ones.

Hard Copy


Joey deVilla
It's all about Ajax books this month, with reports on Foundations of Ajax and Ajax in Action.

Swaine's Flames


Michael Swaine
And you thought podcasting was something new?

DDJ, July 2006
Java


FEATURES



Living with Compliance


Michael Swaine
Ensuring that you're building the system you thought you were building amounts to "proving that you did what you said you'd do." Who'd have thought that this would prove to be one of the thorniest problems in software development?

Optimized Java


Matt Love
Virtual machine features in Java 6 can provide performance improvements—if you can avoid the pitfalls.

Radios, Cell Phones, & Java


Tea Vui Huang
Among other tricks, Java's Advanced Multimedia API lets you turn a mobile device (such as your cell phone) into an AM/FM radio.

Assurance & Agile Processes


Cliff Berg & Scott W. Ambler
Assurance that systems will perform as you expect does not conflict with agility—it merely challenges it.

Threading & .NET


Michael Taylor
Even with recent advances in .NET, multithreading issues can be a struggle for developers.

Supporting Custom C++ Types


Stephen Hutton
Traits are a powerful technique that lets you create arbitrary user-defined types, among other things.

COLUMNS

The New C++


Pete Becker
Pete discusses the addition of almost all of TR1 to the new C++ Standard.

Nisley's Notebook


Ed Nisley
Triple-boot systems and memory-stick errors are the least of Ed's problems.

The Agile Edge


Scott Ambler
When you want to launch an agile project, where do you start?

DEPARTMENTS

Hmmmm


Jonathan Erickson
Summer is supposed to be a time for poison ivy and mosquito bites&mdsash;not school.

Alia Vox


Tim O'Reilly
When it comes to Web 2.0, Tim wonders if we're stuck on a name or hooked on value?

Developer Diaries


Michael Swaine
From startups to SlickEdit, we're on the road this month.

New & Noteworthy


Rick Wayne
The latest news and developments to take note of.

Developer's Notebook


DDJ Staff
New development products and new releases of existing ones.

Hard Copy


Greg Wilson
Designing systems and designing games are the focus of this month's books.

Swaine's Flames


Michael Swaine
The sharing of delusional ideas by two people who are closely associated. And no cousin Corbett?

DDJ, August 2006
Computer Forensics


FEATURES



Sun, Java, and the Middle Course


Michael Swaine
Is Sun taking the initiative on openness and community, or is stepping off into the future by taking the middle course just being reactive?

Device Trails


Zvi Gutterman and Avner Rosenan
Modern hardware devices contain information that assists the operating system in finding appropriate drivers—and intruders in finding out who was doing what when.

Discovering Relationships in Context


Joe Celko
Cogito is a graph-based relationship analytics tool for pattern matching and relationship identification, making it an ideal tool for computer forensics.

Configuring J2EE Deployment Descriptors


Steve Taylor
Deployment descriptors are J2EE components that manage data connections when connecting to databases or maintaining unique transactions between web sessions.

Quick-Kill Project Management


Andrew Stellman and Jennifer Greene
Andrew and Jennifer show how you can do smart software development even when facing impossible schedules.

Code Quality Improvement


JunHo Yoon and YoonKyu Jang
Coding standards help you to improve code readability, produce consistent code, and prevent error-prone coding styles. Robert Buckley adds a note on MISRA-C and coding standards.

COLUMNS

The New C++


Pete Becker
The fundamental rule of laziness is: Don't do it unless you have to.

Nisley's Notebook


Ed Nisley
Ordinary Pepsi floating in the tubs of ice at LinuxWorld Expo! What does that tell you about the state of Linux these days?

The Agile Edge


Scott Ambler
Usability is a quality attribute of a system, which encompasses learnability, efficiency, memorability, error recovery, and end-user satisfaction.

DEPARTMENTS

Hmmmm


Jonathan Erickson
If it isn't broken, there's no need to fix it. But if it is broken...

Alia Vox


Gary McGraw
Penetration testing is a technique commonly practiced by computer security specialists, but its power is limited when it comes to software.

Developer Diaries


Michael Swaine
What do QA testing and NFL football have in common? They both involve developers.

Developer's Notebook


DDJ Staff
New development products and new releases of existing ones.

Swaine's Flames


Michael Swaine
Michael shares his tips on how a press conference ought to be held.

DDJ, September 2006
Communications & Networking


FEATURES



Web Developer Survival Tips


Michael Swaine
Staying afloat in the world that Microsoft, Google, and Yahoo are trying to create isn't that tricky.

Synchronize Now!


Eric Bergman-Terrell
Eric uses Amazon.com's S3 web service and .NET 2.0's FtpWebRequest class to securely synchronize files on multiple machines.

Multithreading, Java, & OSGi


Oliver Goldman
The ThreadManager class Oliver presents here goes a long way toward easing multithreaded programming with Java and the OSGi platform.

The Essential Unified Process


Ivar Jacobson, Pan Wei Ng, and Ian Spence
The Essential Unified Pr--ocess integrates practices from the unified process camp, agile methods camp, and process improvement camp.

Ant Colony Algorithms


Andrew Colin
Among other complex problems, Ant Colony optimizers can be used to simulate routing problems when network topologies change over time.

Mandatory Error Codes Revisited


Guy Peleg
Mandatory error codes force callers of a method to accept and use the returned error code.

COLUMNS

Nisley's Notebook


Ed Nisley
Do patches to the real-time Linux kernel trump a separate real-time layer for some applications?

The Agile Edge


Scott Ambler
The results of Scott's survey indicate that agile software development methods and techniques are gaining traction.

DEPARTMENTS

Hmmmm


Jonathan Erickson
It's Saturday night at the movies for DDJ editors.

Alia Vox


Herb Sutter
When it comes to programming languages and development tools, the concurrency revolution that's now underway will be as significant as the object revolution of the 1980s and '90s.

Developer Diaries


Michael Swaine
To this month's software developers, programming means applications, algorithms, and Apple computers.

Developer's Notebook


DDJ Staff
New development products and new releases of existing ones.

Hard Copy


Levent Gurses
If open source really is a success, there's got to be a reason. Steven Weber's The Success of Open Source offers up some answers.

Swaine's Flames


Michael Swaine
There are winners and losers—and then there are winners and losers.

DDJ, October 2006
Computer Security


FEATURES



Interactive Storytelling


Michael Swaine
Does the future of computer games and simulation depend on interactive storytelling? Chris Crawford thinks soѡnd he's bet his Oregon farm on it.

Parameterized Communication


Per Harald Myrvang
Obol is a Lisp-like, domain-specific language for testing and experimenting with when constructing and using security protocols in real systems.

Java Cryptography & Attribute Certificate Management


Snezana Sucurovic and Zoran Jovanovic

Since Java doesn't support attribute certificate generation and management, our authors built a provider called IMPCS that does.

The SPAMMED Architecture Framework


Arnon Rotem-Gal-Oz
The SPAMMED Architecture Framework Arnon presents here helps you identify the steps and activities you need to design, model, and build successful architectures.

AJAX & Record Locking


David Perelman-Hall
David presents a client-based technique for record locking of multiuser data-driven web applicationsѡnd it all hinges on AJAX.

Building Extensible Development Frameworks


Mark Ramsay
When development teams work independently, third-party components like CodeJock's User Interface controls provide one way of encouraging code reuse.

Application Responsiveness


Joe Duffy
A responsive UI is a happy UI. ItÕ³ snappy, responds to input promptly, and doesn't leave users hanging. But that's easier said than done.

Inside the VSIPL++ API


Mark Mitchell
VSIPL++ is a C++ API for high-performance computing. One unique feature of it is that it includes direct support for parallel applications.

COLUMNS

The New C++


Pete Becker
Buffer overrunsѪust maybe C's biggest bugaboo. Luckily, TR 24731 addresses the problem so that you can write fast, robust, and correct applications.

Nisley's Notebook


Ed Nisley
Looking back at what went wrong is what failure analysis is all about. And you can bet that government-sponsored programs have lots of experience in this realm.

The Agile Edge


Scott Ambler
Depending on your situation, you can adopt some agile techniques but not others.

DEPARTMENTS

Hmmmm


Jonathan Erickson
Globalization is making the world of software development a big deal.

Alia Vox


David Dame
Is Software as a Service (SaaS) an idea whose time has come? David thinks so.

Developer Diaries


Michael Swaine
From robots to hotels, you can't go wrong, even if the naysayers say nay.

Developer's Notebook


DDJ Staff
New development products and new releases of existing ones.

Hard Copy


Jonathan Lung and Adam Goucher
Jonathan looks into Ending Spam, and Adam goes Behind Closed Doors.

Swaine's Flames


Michael Swaine
Michael groks the squonk, even though plomeek soup wasn't on the menu. Go figure.

DDJ, November 2006
Distributed Computing


FEATURES



Apple and Intel: Together at Last


Michael Swaine
A year after announcing the move to Intel processors, Apple has completed the transition—there's not a non-Intel Mac in the lineup. So what does this shift mean for developers?

Scaling SOA with Distributed Computing


Robert W. Anderson and Daniel Ciruli
Scalability is critical when designing Service-Oriented Architectures.

Distributed Unit Testing


Pablo Santos and Francisco J. Garcia
There's only one way to accurately and efficiently support multiple platform combinations—testing, and lots of it.

Faster Development Through Modeling


Jeff Cahoon
Jeff describes a modeling technique that uses free tools and Model-Driven Architecture processes to speed up development.

Importing 3D Models into Mobile Java Devices


Tom Thompson
Here's a step-by-step guide for importing 3D models from PCs into cell phones.

Automating Applications On-the-Fly


Drew Wildner
Third-party tools, C#, and Visual Studio 2005 can take the pain out of generating PDF content in ASP.NET.

Code Finessing


Diomidis Spinellis
When it comes down to it, what counts is quality code that is correct, readable, and efficient.

APR Networking & the Reactor Pattern


Ethan Q. McCallum
The Apache Portable Runtime is a C-based API that provides abstractions ranging from memory management to telling time.

COLUMNS

Nisley's Notebook


Ed Nisley
Code reviews are just one means of detecting program errors. Ed looks closely at how errors evade detection and gives you the opportunity to play code reviewer.

The Agile Edge


Scott Ambler
Scott reports on his recent Data Management survey. You'll be surprised by the results. Lots of companies have a data group, but much of the time, they aren't being used effectively.

DEPARTMENTS

Hmmmm


Jonathan Erickson
Between Grids and Griddles, distributed computing is a hot topic these days.

Alia Vox


Herbert H. Thompson
When all is said and done, building security into your applications is really your only option.

Developer Diaries


Michael Swaine
Solving real problems real fast is all in a day's job.

Developer's Notebook


DDJ Staff
New development products and new releases of existing ones.

Hard Copy


Gregory V. Wilson
Greg examines a trio of books this month: Essential Software Architecture, Managing Iterative Software Development Projects, and Agility and Discipline Made Easy.

Swaine's Flames


Michael Swaine
Swaine's World Wiki. Ahhh, it's music to Michael's ears.

DDJ, December 2006
Database Development


FEATURES



Virtualization: Is it Real?


Michael Swaine
Virtualization abstracts out things—like hardware, operating systems, and applications. So what's the big deal?

SQL Server Everywhere: Just Another Database?


Scott Swigart
With the release of SQL Server Everywhere Edition looming, Scott sits down with Mark Jewett and Steve Lasker to find out about Microsoft's new database engine.

XML, SQL, and C


Jim Kent
Integrating data from XML sources into relational databases is easier when tools like autoXml, AutoDtd, sqlToXml, and xmlToSql do the work for you.

10 Mistakes in Transitioning to Agile


Levent Gurses
Levent explores the 10 most common mistakes in the transition from legacy development methodologies to Agile.

Lessons Learned


Jake Pearson
When moving complex commercial software to new platforms, third-party components can shorten development time.

Optimizing Open-Source Software for Intel Architectures


Max Domeika and Harry Singh
Aggressive compiler optimization is the first step for improving performance.

COLUMNS

Nisley's Notebook


Ed Nisley
Doing the experiments is fundamental to good science.

The Agile Edge


Scott Ambler
There are lots of reasons why you need to develop a comprehensive testing strategy for your databases.

DEPARTMENTS

Hmmmm


Jonathan Erickson
Complex problems often have simple solutions. Or is it the other way around?

Alia Vox


Ross Mason
Do software vendors really gouge customers? Ross Mason thinks so.

Developer Diaries


Michael Swaine
Product strategists, chief geeks, and location, location, location.

Developer's Notebook


DDJ Staff
New development products and new releases of existing ones.

Swaine's Flames


Michael Swaine
Michael raises the bar (or is that "closes the bar") for journalism as we know it.

DDJ, January 2007
Web 2.0 & Lightweight Development


FEATURES



Web 2.0 and the Engineering of Trust


Michael Swaine
Trust is always important in business, but it is fundamental to Web 2.0 in a way that it wasn't to earlier Internet businesses.

LINQ to Web 2.0


Kevin Hoffman
For social bookmarking within an enterprise to be effective, we need a new model.

Shelling the Pod


David Summer
David uses PHP to dynamically create web pages that describe podcasts—and specific episodes of the podcast.

Green Threads


Johnathan Nightingale
IBM's "green threads" project is an effort to drive better interaction and integration across products and brands.

Selecting Third-Party Components


Richard Stafford
Richard offers tips for effectively selecting and using off-the-shelf components.

Practical Parsing for ANSI C


Daniele Paolo Scarpazza
Daniele discusses the design of an ANSI C parser front-end, identifying the pitfalls that make design tricky.

COLUMNS



Nisley's Notebook


Ed Nisley
Okay, the voting is over—and now the fun commences.

The Agile Edge


Scott Ambler
As Scott shows here, the quality of your system is only as good as the quality of your testing efforts.

DEPARTMENTS

Hmmmm


Jonathan Erickson
Foo Bar bets and DDJ trivia!

Alia Vox


David Intersimone
Programming legend David I. lists his top reasons why programming has always been—and will always be—fun.

Developer Diaries


edited by the DDJ Staff
From start-ups to global enterprises, developers sometimes face similar problems—and turn to like-minded solutions.

Developer's Notebook


compiled by the DDJ Staff
New development products and new releases of existing ones.

Swaine's Flames


Michael Swaine
Swaine lunches with Linux ladies.

DDJ, February 2007
Testing & Debugging


FEATURES



Microsoft Loves Linux: What's With That?


Michael Swaine
Microsoft and Novell announced a five-year patent and technology agreement around Microsoft software and Novell's SUSE Linux software. Is it love or a declaration of war?

AJAX Debugging with Firebug


Joe Hewitt
Firebug is a Firefox extension that includes all the tools you need for efficient debugging during the Web development process.

Insidious Tight Coupling


Bil Lewis
Insidious tight coupling, where one module depends on another unknown to the compiler, can lead to overly complex development.

Java ME and the Command Pattern


Darius Katz
The Command Pattern provides an efficient workaround for problems you might encounter with Java ME based development.

Simplifying Web Service Integration


Neal Culiner
When adopting a SOA for his pilot logbook software, Neal found that third-party tools saved time and worry.

Bulletproofing C++ Code


Sergei Sokolov
Sergei examines techniques that improve the stability and reduce the risks of errors for programming.

Social Software Development Environments


Li-Te Cheng, Susanne Hupfer, Steven Ross, John Patterson
Distributed development, IDE extensibility, and social software are taking us to an development process that is not only more productive, but also an enjoyable social experience.

Going Global with Visual Studio Team System


Scott Swigart
Visual Studio 2005 Team System is a suite of lifecycle tools that enables communication and collaboration among distributed development teams.

Think Globally, Code Locally


Damon Poole
Damon shares tried-and-true best practices that help global teams improve the development process by thinking globally and coding locally.

The Global Project Management Challenge


Michelle Medley and Denny Panakal
When it comes to IT projects, utilizing the right technology solutions and implementing them along side of project management methodologies can help you deliver projects on time, under budget and without incident.

Online Collaboration and Agile Software Development


Doug Poirier
Agile software development requires input from all team members, and such collaboration is most effective when everyone participates.

COLUMNS



Nisley's Notebook


Ed Nisley
Ed does a postmortem report on those embedded systems we all love to hate—electronic voting machines.

The Agile Edge


Scott W. Ambler
Scott reports on his survey that focused on data quality issues and the application of various data-oriented development techniques.

DEPARTMENTS



Hmmmm


Jonathan Erickson
APL is 40 (or is it 50?) years old. But comparing it to more modern programming is like comparing APLs to oranges.

Alia Vox


Grady Booch
While traditional integrated development environments focus on improving the efficiencies of individual developers, collaborative development environments focus on improving the efficiencies of the entire development team.

Developer Diaries


edited by Michael Swaine
From start-ups to global enterprises, developers sometimes face similar problems—and turn to like-minded solutions.

Developer's Notebook


compiled by the DDJ Staff
New development products and new releases of existing ones.

Swaine's Flames


Michael Swaine
Michael gets lost on the "rhode" to "roam." The Web will do that to you.

DDJ, March 2007
Programming Languages


FEATURES



Whither Operating Systems?


Michael Swaine
Michael considers the future—if there is one—of operating systems as we know them.

Programming Language Format String Vulnerabilities


Hal Burch and Robert Seacord
Are C/C++ the only languages with security vulnerabilities? What about Perl, PHP, Java, Python, and Ruby?

The Road to Our Scripting Future


Peter Yared
Lightweight languages are primed to make huge inroads into the corporate market.

Image Manipulation with ASP.NET 2.0


Eric Bergman-Terrell
You can display, manipulate, and protect web site images by taking advantage of the .NET 2.0 Bitmap class and Http Handlers.

Debugging Makefiles


John Graham-Cumming
John shares practical debugging tips he's used to debug real-world Makefiles.

Bringing the Desktop Application to the Web


Conor Seabrook
To move a desktop application to the Web, Conor settled on a set of AJAX-based controls from Telerik.

Practical C++ Error Handling in Hybrid Environments


Gigi Sayfan
Gigi shows how to interface your exception-handling code to other software components that practice different error-handling methods.

MyMap: A Portable API for Maps


Lionel Laské
This API lets you switch from one map provider (like Google, Yahoo, or Microsoft) to another with minimum changes to your source code.

COLUMNS



Nisley's Notebook


Ed Nisley
Ed reports on the goings-on at the Embedded Systems Conference.

The Agile Edge


Scott W. Ambler
Documentation is an important part of every system, agile or otherwise.

DEPARTMENTS



Hmmmm


Jonathan Erickson
Did you hear the one about the operating system...?

Alia Vox


Colin Armitage
Many organizations still use sheer manpower to find defects in software, instead of employing methodologies to measure effectiveness.

Developer Diaries


edited by Michael Swaine
From start-ups to global enterprises, developers face similar problems—and turn to similar solutions.

Developer's Notebook


compiled by the DDJ Staff
New development products and new releases of existing ones.

Swaine's Flames


Michael Swaine
Sometimes sticking with what you know is best.

DDJ, April 2007
Algorithms


FEATURES



Dr. Dobb's Excellence in Programming Award


Michael Swaine
Contributions to object-oriented programming, software architecture, and modeling are just a few reasons why Grady Booch is the recipient of this year's Award.

Algorithmic Trading


John Bates
In the algorithmic trading space, an "algorithm" describes a sequence of steps by which patterns in real-time market data can be recognized and responded to.

Programming the Cell Processor


Daniele Paolo Scarpazza, Oreste Villa, and Fabrizio Petrini
Our authors present algorithms and strategies they've used to make breadth-first searching on graphs as fast as possible on the Cell multicore processor.

From SOA to SaaS


David Houlding
David shows how to grow a local Service-Oriented Architecture into a federated SOA distributed over the web to use and deliver Software-as-a-Service.

Enough of Processes: Let's Do Practices Part I


Ivar Jacobson, Pan-Wei Ng, Ian Spence.
In the first installment of this two-part article, our authors examine the problems created by today's software development processes--and why we need to change.

Updating Apps for Graphics and .NET


Jack J. Purdum
Jack gives new life to an old program by updating its graphics and moving it to .NET.

Counting Array Elements at Compile Time


Ivan J. Johnson
Ivan presents a new type-safe way to write COUNTOF so that it produces a compile-time error if you accidentally pass it to anything other than the built-in array.

Editorial


Jonathan Erickson

Properties, Dependency Properties, and WPF


Charles Petzold
Windows Presentation Foundation implements two complementary programming interfaces, letting you write entire WPF applications using a .NET-compliant programming language (or at least parts of it) using XAML.

Developing Windows Vista Sidebar Gadgets


Mike Riley
Windows Vista supports a user-selectable strip of miniapplications, called "Gadgets," that reside along the side of the screen, called the "Sidebar."

Workflow in SharePoint 2007


Kevin Hoffman
Windows Workflow Foundation is a facility that allows for bookmarked, resumable applications and supports integration with SharePoint.

RAD XAML with Microsoft Expression Blend


Mike Riley
In the age of Rich Internet Application (RIA) development, Microsoft has reengineered its interpretation of what a Windows application should look like.

Windows Workflow Foundation and Web Services


Brian R. Myers
The ultimate goal of Windows Workflow is to simplify development of web-service-based business processes in .NET.

COLUMNS



Nisley's Notebook


Ed Nisley
Whether it's avoiding an error you've made before or recovering quickly from a new problem, experience matters.

The Agile Edge


Scott W. Ambler
It was a dark and stormy night within the IT department, and suddenly a status report rang out!

DEPARTMENTS



Hmmmm


Jonathan Erickson
Where we put the "glo" back into "globalization."

Alia Vox


Christof Wittig
Open-source projects change the fundamental economics of software production.

Developer Diaries


edited by Michael Swaine
"The bug ate my homework," claimed the computer-science major.

Developer's Notebook


compiled by the DDJ Staff
New development products and new releases of existing ones.

Swaine's Flames


Another pleasant evening at the Foo Bar, where Tux once again has one too many.
Michael Swaine

DDJ, May 2007
Communications, Networking and Mobility


FEATURES



Get a (Second) Life!


Michael Swaine
Second Life is more than a programmer's paradise. Michael tells you why, and John Jainschigg gives you peek at what DDJ is up to in-world.

Open C: Paving the Way for Porting


Eero Penttinen and Antti Saukko
Open C is a new C variant that's specifically designed for porting legacy code to mobile devices.

Enough of Processes: Let's Do Practices Part II


Ivar Jacobson, Pan-Wei Ng, and Ian Spence
When processes can't cut it, practices offer an alternative.

Second Life: A Programmer's Perspective


Dana Moore and Ray Budd
In Second Life, you can create objects that have credible dynamism, even compared to AJAX and browser-based applications.

Charting: Fast and Efficient


Grady Werner
To keep his ASP.NET 1.1 and 2.0 applications at the cutting edge, Grady took a second look at the charting components his company was using.

XSL Transformations


Zeki Bayram and Ruhsan Onder
Extensible Stylesheet Language Transformations help you separate XML content from presentation.

C++ STL Hash Containers and Performance


Thomas Johnson
If you understand the details of your application and data, hash containers are powerful tools to add to your performance toolbox.

COLUMNS



Nisley's Notebook


Ed Nisley
Ed uses digital picture frames to show how virtualization works in practice.

The Agile Edge


Scott W. Ambler
Release-related activities that occur at the end of a development project should be the first thing on your mind.

DEPARTMENTS



Hmmmm


Jonathan Erickson
Old friends are the best friends.

Alia Vox


Ryan Martens
The way Ryan sees it, the software industry can help drive a green economy and still drive profits.

Developer Diaries


edited by Michael Swaine
Python, self-employment, and the "inevitable" Google.

Developer's Notebook


compiled by the DDJ Staff
New development products and new releases of existing ones.

Swaine's Flames


Michael Swaine
Who said that software development was a screwy business?

DDJ, June 2007
Architecture and Design


FEATURES



Software Development in Eastern Europe


Michael Swaine
Where will the next big thing in software come from? How about Eastern Europe.

Semantically-Enabled Service-Oriented Architectures


Arunava Chatterjee
Semantic Service-Oriented Architectures introduce semantic enhancements to services so that agents can dynamically combine services to satisfy business goals.

The Value of Pattern Implementations


Lee Ackerman and Celso Gonzalez
Pattern implementations go one step further than simply using pattern specifications as blueprints.

Enough of Processes: Part III


Ivar Jacobson, Pan-Wei Ng, and Ian Spence
In the final installment, our authors examine what's needed to make a practice-based approach work, and how EssWork delivers these innovations to you.

AJAX: Selecting the Framework that Fits


Andrew Turner and Chao Wang
AJAX frameworks can make software development easier. The hard part is selecting the right framework for the job at hand.

Optimizing Software for Multicore Processors


Edwin Verplanke
With the potential for real performance gains, multicore processors present the challenge of deciding how to validate and optimize code.

.NET Components for Image Management


David Cardinal
When evaluating imaging toolkits, David considered flexibility, performance, extensibility, and support, in addition to the feature set.

Developing Lightweight, Statically Initializable C++ Mutexes


Vladimir Kliatchko
The novel synchronization mechanism Vladimir presents here comes in handy for a wide range of applications.

COLUMNS



Nisley's Notebook


Ed Nisley
Ed wraps up his digital picture frame project, which led him delving into the ins-and-outs of virtualization.

The Agile Edge


Scott W. Ambler
So your boss just doesn't get "agile"? Scott provides a "management speak" primer on how to effectively pitch your ideas.

DEPARTMENTS



Hmmmm


Jonathan Erickson
Who says you can't get good coffee in Moscow? Need a guidebook for your upcoming holiday?

Alia Vox


Robert BK Dewar
Robert makes the case for merging the experience and skills of the safety and security communities.

Developer Diaries


edited by Michael Swaine
Dead code, survival, and Harmonia.

Developer's Notebook


compiled by the DDJ Staff
New development products and new releases of existing ones.

Swaine's Flames


Michael Swaine
Michael proves again that there are at least 13 ways to do bad things to good poetry.

DDJ, July 2007
Games, Graphics and Design


FEATURES



The Buzz About Builds


Michael Swaine
What's driving all the recent interest in Build tools that you might reasonably characterize as a rather, well, unglamorous?

Flash Lite: Graphics for Mobile Devices


Hartti Suomela
Based on Adobe's Flash technology, Flash Lite is specifically developed for mobile phones and other consumer electronic devices.

Spin Buffers


Prashanth Hirematada
If you are writing high-performance applications, you should consider using Spin Buffers that eliminate the need for synchronization.

SOA, Web Services, and RESTful Systems


Eric J. Bruno
Representational state transfer, or "REST" for short, is a less restrictive form of SOA than web services.

Real-Time Enough


Robert Krten
Robert implements a real-time caller ID implementation that is part of a voice-activated call monitor system he built.

A Fast Q&A System


Manu Konchady
Search engines don't give answers in response to queries. Instead users depend on question/answering (Q&A) systems to scan the text of a ranked list of documents to find answers.

The C5 Generic Collection Library


Niels Kokholm and Peter Sestoft
Collection libraries provide functionality for storing and manipulating collections of related data items.

RapidMind: C++ Meets Multicore


Stefanus Du Toit and Michael McCool
RapidMind is a framework for expressing data-parallel computations from within C++ and executing them on multicore processors.

COLUMNS



Nisley's Notebook


Ed Nisley
Ed catches up on reading and responding to his (e)mail.

The Agile Edge


Scott W. Ambler
Scott tackles the topic of certification for agilists.

DEPARTMENTS



Hmmmm


Jonathan Erickson
It's all about multicore!

Alia Vox


Alberto Savoia
Are you immune to test infection?

Developer Diaries


edited by Michael Swaine
Exploring desktop UNIX, the knowledgebase at Microsoft, and systems of systems.

Developer's Notebook


compiled by the DDJ Staff
New development products and new releases of existing ones.

Swaine's Flames


Michael Swaine
Swaine is back twittering at Foo Bar with the new piano player.

DDJ, August 2007
Distributed Development


FEATURES



Eclipse Europa: Eureka!


Michael Swaine
Eclipse's Europa release—21 projects all on the same day—is probably unprecedented.

Globally Distributed Development


Khurram Nizami
Today's world of globally distributed software development presents lots of challenges—but offers great opportunity.

Java Message Service


Eric J. Bruno
When it comes to distributed computing, JMS is Eric's tool of choice when reliability and performance are top priorities.

Python NetWorkSpaces and Parallel Programs


Robert Bjornson, Nicholas Carriero, Stephen Weston
Python and NetWorkSpaces make it easy to create and experiment with parallel programs without requiring specialized tools or hardware.

Unit Testing the UI


Jordan Vinarub
With the Model-View-Presenter pattern, Windows Forms 2.0, and automatic data binding, you can build frameworks for unit testing the user interface.

Simulating Polymorphic Operators in C++


Michael Dowell
Michael presents three different techniques for making operators polymorphic.

COLUMNS



Effective Concurrency


Herb Sutter
In his inaugural column, Herb makes the case that we must build a consistent mental model before talking about concurrency.

The Agile Edge


Scott W. Ambler
Scott reports the results of his 2007 Agile Adoption Survey.

DEPARTMENTS



Hmmmm


Jonathan Erickson
More multicore. Just can't get enough of it.

Alia Vox


Greg Law
According to Greg, debugging is the software industry's dirty little secret.

Developer Diaries


edited by Michael Swaine
From Spain to Germany to Canada. See, software development really is a global activity.

Developer's Notebook


compiled by the DDJ Staff
New development products and new releases of existing ones.

Conversations


What's "on-demand collaboration"? Jack Repenning, CollabNet's CTO, explains.
Deirdre Blake

Swaine's Flames


Michael Swaine
Strolling down memory lane with the TRS-80.

DDJ, September 2007
Requirements and Compliance


FEATURES



Return of the Desktop


Michael Swaine
Is the rediscovery of the desktop just the latest swing of some tech-trend pendulum, or is there something more going on here?

Separating Duties to Meet IT Compliance


Tracy Ragan
If your organization is facing strict audit compliance but struggles with distributed platforms, take a look at how the big boys do it.

SCRUM Meets CMMi


Pablo Santos
Codice Software tackles Agile methodologies (SCRUM) and process improvement (CMMi) at the same time.

Widgets & Rich Internet Applications


Dana Moore and Ray Budd
Desktop widgets are lightweight client apps used with RIA to take optimum advantage of what the client and server have to offer.

Service-Component Architectures


Arunava Chatterjee
Service-Component Architectures (SCA) provide a programming model for implementing Service-Oriented Architectures (SOA).

Debugging with NTSD and Application Verifier


Patrick Garvan
Did you know that Windows ships with built-in debugging tools--the Microsoft NT Symbolic Debugger and the Application Verifier?

Multithreaded Asynchronous I/O & I/O Completion Ports


Tom R. Dial
I/O completion ports provide an elegant solution to the problem of writing scalable server applications that use multithreading and asynchronous I/O.

COLUMNS



Effective Concurrency


Herb Sutter
How many cores (or hardware threads) can your code harness to get its answers faster?

The Agile Edge


Scott W. Ambler
Scott examines strategies for dealing with constraints that business stakeholders may put on software development teams.

DEPARTMENTS



Hmmmm


Jonathan Erickson
Multicore or manycore -- it's all the same to me!

Alia Vox


Joe Marasco
Organizations are recognizing the link between requirements quality and the success of software development initiatives.

Developer Diaries


edited by Michael Swaine
Petaflops and threads are in this month's spotlight.

Developer's Notebook


compiled by the DDJ Staff
New development products and new releases of existing ones.

Conversations


Deirdre Blake
Karl Wiegers answers the question: "So what are requirements?"

Swaine's Flames


Michael Swaine
Michael takes a practical look at the theory of a "hair of the bit that bit you."

DDJ, October 2007
Computer Security


FEATURES



AI: It's OK Again!


Michael Swaine
Over the last half century, AI has had its ups and down. But for now, it's on the rise again.

Visual Cryptography and Bit-Plane Complexity Segmentation


Daniel Stoleru
Bit-Plane Complexity Segmentation lets you embed large amounts of data in images.

Inside the Windows Vista Disk Encryption Algorithm


Mohamed Abo El-Fotouh and Klaus Diepold
To protect the confidentiality of data on hard disks, Windows Vista uses Bitlocker Drive Encryption, which is based on the AES-CBC + Elephant diffuser algorithm.

Memory-Aware Components


Kirk J. Krauss
In an ideal world, your programs gracefully handle out-of-memory conditions and keep running. But in the real world...

Software and the Core Description Process


Josh Reed
PSICAT is an open-source, cross-platform Java tool for creating, viewing, and editing geological core description diagrams.

Logging In C++


Petru Marginean
Logging is a critical technique for troubleshooting and maintaining software systems. Petru presents a C++ logging framework that is typesafe, thread-safe, and portable.

COLUMNS



Effective Concurrency


Herb Sutter
A "critical section" is a region of code that executes in isolation with respect to some or all other code in the program.

The Agile Edge


Scott W. Ambler
Scott argues that Agile is a discipline that requires discipline.

DEPARTMENTS



Hmmmm


Jonathan Erickson
To everyone's delight, it's back-to-school time.

Alia Vox


James Reinders
James shares his 8 rules for parallelization on multicore processors.

Developer Diaries


edited by Michael Swaine
Good tools and strong teams lead to top-notch software development projects.

Developer's Notebook


compiled by the DDJ Staff
New development products and new releases of existing ones.

Conversations


Deirdre Blake
Matt Moynahan defines on-demand security and examines the binary-code versus source-code analysis in terms of security.

Swaine's Flames


Michael Swaine
Here are Michael's candidates for Microsoft's greatest hits of 2007.

DDJ, November 2007
Distributed Computing


FEATURES



Smart Compilers--But Smart Enough?


Michael Swaine
Compilers are smart, but are they smart enough in the emerging world of multicore processors?

Grid-Enabling Resource-Intensive Applications


Timothy Hoehn and Bob Zeidman
Our authors take an application designed to run on a single PC and distribute its processing over a network grid.

Distributed Computing: Windows and Linux


Mohamed Abo El-Fotouh and Klaus Diepold
Mohamed and Klaus describe a distributed system in which a single Windows machine controls a Linux cluster.

Adobe AIR: Desktop/Web Convergence


Oliver Goldman
Adobe AIR is designed to enable the development of desktop applications using web technologies.

Transparency on Demand


Richard Vaughan
Richard presents a technique for loading JavaScript libraries transparently at the point of need.

Reusable Associations


Martin Soukup and Jiri Soukup
Our authors take the Model-Driven Development (MDD) concept of reusable associations and implement them for C++, C#, and Java.

COLUMNS



Effective Concurrency


Herb Sutter
Critical sections are our One True Tool for guaranteeing mutual exclusion on shared variables.

The Agile Edge


Scott W. Ambler
Many traditionalists will claim that Agile projects are difficult to govern, but Scott says nothing could be further from the truth.

DEPARTMENTS



Hmmmm


Jonathan Erickson
Plugging in to electrical plug-ins. And who's that changing your Wikipedia entry? Our editor deals with odds and ends.

Alia Vox


Matt Davey
Why use WPF for complex event processing visualization?

Developer Diaries


edited by Michael Swaine
Profiles of programmers, descriptions of developers.

Developer's Notebook


compiled by the DDJ Staff
New development products and new releases of existing ones.

Conversations


Deirdre Blake
Terracotta CTO Ari Zilka talks with us about the challenges ahead for distributed computing.

Swaine's Flames


Michael Swaine
Michael worries about the long arm of letters and the law.

DDJ, December 2007
Database Development


FEATURES



Computer Books: Reading Between the Lines


Michael Swaine
In the topsy-turvy world of publishing, books remain a fundamental source of information for developers.

Query Anything with SQLite


Michael Owens
Virtual tables are the foundation of some of SQLite's larger features, including full text search.

XQuery


Sam Edwards and Paul Tremblett
XQuery uses the structure of XML intelligently to express queries across the diverse kinds of data XML can be used to represent.

Web Maps with the Google Map API


Dionysios G. Synodinos
Google has provided web developers with a feature rich toolset for representing geographical information.

OpenALM and Its Manifesto


Mike Riley
Is the OpenALM Manifesto Borland's bid to universally codify the software development process?

Transactional Programming


Calum Grant
Database techniques applied to C++ programming.

COLUMNS



Effective Concurrency


Herb Sutter
The good news is that today's software is built on modular, composable software. The bad news is that locks, and other forms of synchronization, aren't.

The Agile Edge


Scott W. Ambler
How do you define project success? Scott provides some suggestions.

DEPARTMENTS



Hmmmm


Jonathan Erickson
The give-and-take of transactions is on our editor's mind this month.

Alia Vox


Adam Kowala
Adam reflects on his 20+ years in the software development business.

Developer Diaries


edited by Michael Swaine
Profiles of programmers, descriptions of developers.

Developer's Notebook


compiled by the DDJ Staff
New development products and new releases of existing ones.

Conversations


Deirdre Blake
MySQL's Jim Starkey discusses databases.

Swaine's Flames


Michael Swaine
Taking a cue from the title of his column, Michael takes a minute or two to flame.

DDJ, January 2008
Web Development


FEATURES



Is Your Workspace Informative?


Michael Swaine
What does your workspace say about you?

Tag Clouds: Usability and Math


Jurgen Appelo
Tag clouds are collections of tags that are presented so that the visual emphasis of each tag corresponds to the relative importance within the collection.

Hands-On Google Web Toolkit


Ed Burnette and Adam Houghton
Ed and Adam use the Google Web Toolkit—a free, open source framework created to make Ajax easier—to build a mash-up photo viewer that lets you browse any Flickr photo album.

Implementing Audio CAPTCHA


David Summer
David uses sound to make CAPTCHA an equal opportunity security device.

PHP: The Power Behind Web 2.0


Andi Gutmans and Cal Evans
Andy and Cal use PHP on the back end and JavaScript on the front end to build the "Flickr News Network" which lets you show pictures from Flickr to augment an article from a given news feed.

Memory Leaks Detection: A Different Approach


Michael Gopshtein
Experienced C/C++ programmers know what it means to properly manage dynamically allocated memory to avoid memory leaks. Michael presents an alternative approach.

COLUMNS



The Agile Edge


Scott W. Ambler
When trying to scale agile software development for complex situations, a common stumbling block is how to understand, prioritize, and act on requirements.

Effective Concurrency


Herb Sutter
Need to avoid deadlock in the code you control? Try using lock hierarchies.

DEPARTMENTS



Hmmmm


Jonathan Erickson
At times, editing a programming magazine can be a hair-raising proposition.

Alia Vox


Terry Quatrani
Agile modeling? No, that's not an oxymoron.

Developer Diaries


edited by Michael Swaine
Profiles of programmers, descriptions of developers.

Conversations


Deirdre Blake
Widgets are little programs that typically run on desktops—but as Craig Cumberland points out, they're coming to mobile platforms in a big way.

Swaine's Flames


Michael Swaine
Cousin Corbett finds the solution to everything, forgetting that he is a problem himself at times.

DDJ, February 2008
Visual Studio 2008


FEATURES



South American Software Development


Michael Swaine
Using Brazil to take the temperature of the South American software climate.

Inside Visual Studio 2008


Dino Esposito
Visual Studio is Microsoft's flagship for developers, and Visual Studio 2008 is the first version of Visual Studio to support multiple versions of .NET.

BibPort: Creating Bibliographic References


Matthew Curry and Jeffrey G. Gray
BibPort extracts relevant information from a set of legacy documents to create a database of bibliographic references using Visual Studio Tools for Office in combination with Visual Studio 2008 and Word 2007.

Continuous LINQ


Kevin Hoffman
Continuous LINQ is just one expansion made possible through language extensions and LINQ on the .NET Framework 3.5.

The ZK Framework


Andrzej Sekula
ZK is a framework that introduces event-handling programming--backed by an AJAX engine--to web applications.

Static Testing C++ Code


Carlo Milanesi
The C++ utility Carlo presents here implements static testing automation that retrieves from the command line the paths of the files containing the static testing programs.

COLUMNS



The Agile Edge


Scott W. Ambler
Test-driven development is an important agile software development technique that lets you specify and validate functionality at a finely detailed level.

Effective Concurrency


Herb Sutter
Herb fought the law—Amdahl's Law, that is—and Herb won.

DEPARTMENTS



Hmmmm


Jonathan Erickson
A caffeine-starved editor does his best to stay on track.

Alia Vox


John Graham-Cumming
If you are not yet using virtualization in your build environment, then it's time to get moving.

Developer Diaries


edited by Michael Swaine
Profiles of programmers, descriptions of developers.

Developer's Notebook


compiled by the DDJ Staff
New development products and new releases of existing ones.

Conversations


Deirdre Blake
Microsoft's S. Somasegar discusses some of the new and unique features that Visual Studio 2008 offers developers.

Swaine's Flames


Michael Swaine
Michael goes through the mail.

DDJ, March 2008
Testing and Debugging


FEATURES



Social Networks and Software Development


Michael Swaine
If 2007 was the year that social networks "got their geek on," will 2008 be the year that programmers actually profit from them?

Detecting Bugs in Safety-Critical Code


Paul Anderson
When software is used for safety-critical applications, bugs aren't just expensive annoyances—they can kill.

Change Code Without Fear


Nada daVeiga
Behavioral regression testing is a technique that provides a fast and easy way to determine if code modifications change or break existing functionality.

Continuous Integration and Performance Testing


Steven Haines
Steven extends continuous integration to perform integration, performance, and load testing.

Wt: A Web Toolkit


Wim Dumon and Koen Deforche
Wt is a freely available library and application server that lets C++ programmers write modern web applications using a familiar C++ GUI programming style.

Automating Release Notifications


Scott Miller
Scott presents an automated approach for notifying users about updates to libraries and frameworks.

COLUMNS



The Agile Edge


Scott W. Ambler
Scott examines the myths surrounding agile software development.

Effective Concurrency


Herb Sutter
When it comes to scalability and concurrency, more is always better.

DEPARTMENTS



Hmmmm


Jonathan Erickson
Misunderstandings happen.

Alia Vox


Rakesh Kumar
The impact of many-core processors goes beyond technical issues. Rakesh explains how they also change the economic model of how CPUs are bought and sold.

Developer Diaries


edited by Michael Swaine
Profiles of programmers, descriptions of developers.

Developer's Notebook


compiled by the DDJ Staff
New development products and new releases of existing ones.

Conversations


Jonathan Erickson
Jeff Lei goes beyond pairwise testing with an automated combinatorial testing technique that reduces the number of smaller tests faster.

Swaine's Flames


Michael Swaine
Is Bill Gates hatching a doomsday plot to eradicate all life on Earth? F. William Engdahl isn't sure.

DDJ, April 2008
Algorithms


FEATURES



Dr. Dobb's Excellence in Programming Award


Michael Swaine
The recipient of this year's Dr. Dobb's award is Bjarne Stroustrup, for his work on developing C++.

Fast String Search on Multicore Processors


Daniele Paolo Scarpazza, Oreste Villa, and Fabrizio Petrini
Multicores are the future, and you need to start mapping basic algorithms onto this new hardware.

The Byzantine Generals Problem


Mark Nelson
The Byzantine Generals Problem is an agreement protocol that's built around an imaginary General who makes a decision to attack or retreat, and who must communicate his decision to his lieutenants.

Optimizing Math-Intensive Applications with Fixed-Point Arithmetic


Anthony Williams
Understanding and using fixed-point math can result in real performance gains.

Random Numbers in a Range Using Generic Programming


Michael Orlov
The Greatest Common Divisor algorithm computes the maximal number that divides its two arguments—and can be used as an efficient random-number generator.

COLUMNS



The Agile Edge


Scott W. Ambler
Most articles focus on the success stories and few on the failures, a wrong that Scott hopes to right this month.

Effective Concurrency


Herb Sutter
Herb considers how to set superlinear speedups by harnessing more resources.

DEPARTMENTS



Hmmmm


Jonathan Erickson
Does geography matter anymore?

Alia Vox


Stephen Beneteau
The value of SOA is clear. But will it succeed in the long run?

Developer Diaries


edited by Michael Swaine
Profiles of programmers, descriptions of developers.

Conversations


Deirdre Blake
Jon Bentley talks about one of his favorite topics—algorithms.

Swaine's Flames


Michael Swaine
Some things change, but Macworld remains the same. It's just the devices that change.

DDJ, May 2008
Programming Languages


FEATURES



Software Development Goes to the Movies


Michael Swaine
Solving software problems for moviemaking has paid off for software development in general.

Cat: A Functional Stack-Based Little Language


Christopher Diggins
Cat is an intermediate language for program verification, optimization, and more!

Mojax: Mobile Ajax Framework


John Muchow
Mojax is a framework that provides the best of Ajax but on a mobile platform.

Kernel-Mode Databases


Andrei Gorine and Alexander Krivolapov
A database technology for high-performance applications.

Getting Better Search Results


Bob Zeidman
Search engines are great, but more often than not that bring you too much useless information. That's when human-aided filtering can make the difference.

COLUMNS



Effective Concurrency


Herb Sutter
Stopping threads or tasks you no longer need is important for efficiency. But how do you do it?

The Agile Edge


Scott W. Ambler
Scrum is an agile methodology that focuses on a subset of project management and requirements management. But some organizations are finding it can be a challenge to scale Scrum to meet the complexities of their real-world environments.

DEPARTMENTS



Friday Night Fish Fry


Jonathan Erickson
By whatever name they go by, programming languages are programming languages.

Alia Vox


Matt Davey
Parallel extensions to the .NET Framework. Do we need them?

Developer Diaries


edited by Michael Swaine
Profiles of programmers, descriptions of developers.

Conversations


Deirdre Blake
From what Paul Jansen has seen, everyone has a favorite programming language.

Swaine's Flames


Michael Swaine
Michael goes back to the future with John McCarthy.

DDJ, June 2008
Real-time and Embedded Systems


FEATURES



There Must be Contest


Michael Swaine
Programming contests used to be fun. Now they're a commercial software development business—and they're still fun!

Building a Test Harness for RTOS


Cort Dougan
"Sparky," the test system for RTOS that Cort describes here, does a build of all software components and tools and runs a set of measurement, specification, and regression tests.

Qt and Windows CE


Espen Riskedal
To demonstrate how you can use Qt to build a Windows Mobile application, Espen presents an image and internationalizes it for three different languages.

Software to Hardware Parallelization


Steve Casselman
To accelerate algorithms on multi-core systems, you must first identify the code within the application that can be parallelized, then figure out how to parallelize it.

Performance Portable C++


Jeff Keasler
Performance portability means that code can achieve good performance across a range of computer architectures while maintaining a single body of source code.

COLUMNS



Effective Concurrency


Herb Sutter
Want to kill your parallel application's scalability? Easy: Just add a dash of contention.

The Agile Edge


Scott W. Ambler
Has agile peaked? Scott crunches the numbers to find out.

DEPARTMENTS



Friday Night Fish Fry


Jonathan Erickson
First, you start with a requirements document...

Alia Vox


Joel Gyllenskog
Joel describes how Dr. Dobb's readers helped him create a better product through open peer review.

Developer Diaries


edited by Michael Swaine
Profiles of programmers, descriptions of developers.

Conversations


Deirdre Blake
Sebastien Marineau-Mes talks about the world of Real-Time Operating Systems.

Swaine's Flames


Michael Swaine
Michael treks with the stars, as he goes where no CEO has gone before.

DDJ, July 2008
Architecture and Design


FEATURES



Engineers Without Borders


Michael Swaine
Engineers Without Borders is an international humanitarian aid organization that mobilizes volunteer professionals to solve critical problems in the developing world.

Patricia Tries


Konstantin Knizhnik
Specialized indexes like the Patricia Trie can lead to faster development and more efficient code.

Event-Based Architectures


Ted Faison
Event-Based Architectures simplify system design, development, and testing because they minimize relationships between system parts.

Graphs Versus Objects


John Hebeler and Matt Fisher
Graph-based development can help in all areas of knowledge management, including Web 2.0 and beyond.

Lock-Free Queues


Petru Marginean
One thread can write and another read—at the same time!

Dr. Dobb's Architecture & Design World


Amber Ankerholz
Previewing what's to come at an exciting upcoming event.

Java and the Nokia N10 Internet Tablet


Eric J. Bruno
The Nokia N810 isn't really a phone. It's a Linux-based Internet tablet with wireless connection options—and you can write and run Java applications with it.

COLUMNS



Effective Concurrency


Herb Sutter
Linked Lists and Balanced Search Trees are familiar data structures, but can they make the leap to parallelized environments?

The Agile Edge


Scott W. Ambler
Does Agile scale to big—make that "really big"—team sizes?

DEPARTMENTS



Friday Night Fish Fry


Jonathan Erickson
Microsoft almost said "yahoo" about open source. But the key word is "almost."

Alia Vox


Bil Lewis
Bill says just say "No!" to overflow.

Developer Diaries


edited by Michael Swaine
Profiles of programmers, descriptions of developers.

Developer's Notebook


compiled by the DDJ Staff
New development products.

Conversations


Deirdre Blake
David Kranz talks about the architect's role in the world of RIA development.

Swaine's Flames


Michael Swaine
Slow nights at the Foo Bar can lead to some lively conversation.

DDJ, August 2008
Graphics and Game Development


FEATURES



A Conversation with Christos Papadimitriou


Jack Woehr
Christos Papadimitriou is this year's recipient of the Katayanagi Prize for Research Excellence. In this exclusive interview, Dr. Dobb's and Christos discuss subjects ranging from the economics of the programming market to the "computer scientist as popular novelist."

OpenGL and Mobile Devices: Round 2


Richard S. Wright Jr.
It's been a couple of years since Richard wrote about the intersection of OpenGL and mobile devices. And my word—the world has changed, thanks in part to devices such as Apple's iPhone.

Ellipse Specification Using Vectors


Robert F. Kauffmann
The program Robert presents here demonstrates a method for rendering ellipses that's suited to the specific task of aligning ellipses to arbitrary curve segments using trigonometric splines.

Embed Custom GUIs in WPF


Eric Bergman-Terrell
The FlowDocument class in the Windows Presentation Framework—the graphics and user interface engine in .NET 3.0—lets you easily manipulate documents containing rich content.

Building RIAs on J2EE Foundations


Joe Rinehart
Joe uses ColdFusion 8 to design and build an AdobeFlex RIA that enables collaborative management of a list of tasks using a rich front-end and real-time communications.

Disentangling Concepts in Object-Oriented Systems


Stephen Gross
A class interface can be deceptively simple, which is why Stephen finds useful this object-oriented technique for "unpacking" the underlying concepts present in a given class.

COLUMNS



The Agile Edge


Scott W. Ambler
One of the riskiest decisions you can make in software development is to require a "precise" cost and schedule estimate at the beginning of the project.

Effective Concurrency


Herb Sutter
Deadlock can happen whenever there is a blocking (or waiting) cycle among concurrent tasks.

DEPARTMENTS



Friday Night Fish Fry


Jonathan Erickson
Ruby just isn't for Tuesday anymore. It's a 24/7 programming tool that's finding it's way into large organizations.

Alia Vox


Matt Davey
Can Microsoft's Silverlight find a home in the financial industry?

Developer Diaries


edited by Michael Swaine
Profiles of programmers, descriptions of developers.

Developer's Notebook


compiled by the DDJ Staff
New development products.

Swaine's Flames


Michael Swaine
Four topics brought a smile to Michael's face this month.

DDJ, September 2008
Application Lifecycle Management (ALM)


FEATURES



A Conversation With Erik Demaine


Jack Woehr
Erik Demaine is this year's recipient of the Katyanagi Emerging Leadership Prize. Erik's research interests range from algorithms and data structures for improving web searches, to the computational difficulty of playing games.

Application Lifecycle Management Meets Model-Driven Development


John Carrillo and Scott McKorkle
The combination of ALM and MDD gives you the connected workflow you need to handle the development of even the most complex applications and systems.

Building a Robust Development Environment


Stephen Rylander
Stephen presents strategies for source-code managment, build automation, and human factors—including tips on how to handle significant project change, regardless of platform.

Real Users Really Matter


Hon Wong
To deal with the complexity of web applications, there has to be a link between development and operations.

Matching Wildcards: An Algorithm


Kirk J. Krauss
Here's an elegant wildcard string-matching algorithm that you'll find efficient and useful.

The Android Mobile Phone Platform


Tom Thompson
Android is an open-source mobile phone stack developed by Google for the Open Handset Alliance.

Managing Application Thread Use


Levent Akyil
Multicore processors are increasingly replacing single-core processors, and developers are being confronted with new challenges when using them.

Signalling Integer Overflows in Java


Frederic Bapst and Francois Kilchoer
Our authors present COJAC, a freely available tool that instruments any existing Java bytecode for overflow detection.

.NET Development & the IBM WebSphere Portal Server


Shelly Saunders
Shelly presents techniques and examines tools for developing .NET applications for IBM's WebSphere Portal Server.

COLUMNS



The Agile Edge


Scott W. Ambler
Much of what occurs during Iteration -1 involves the preproject aspects of portfolio management.

Effective Concurrency


Herb Sutter
Writing lock-free code can confound anyone—even expert programmers, as Herb shows this month.

DEPARTMENTS



Friday Night Fish Fry


Jonathan Erickson
Software engineers have always been willing and able to step up and help out when needed.

Alia Vox


Ben Chelf
Coverity CTO Ben Chelf wonders, how can we maintain our balance while walking the tightrope of software development?

Developer Diaries


edited by Michael Swaine
Profiles of programmers, descriptions of developers.

Developer's Notebook


compiled by the DDJ Staff
New development products.

Swaine's Flames


Michael Swaine
You'd expect a column called "Swaine's Flames" to be edgy and unbalanced, like a Lewis Black rant. Will this month tip the scales toward unbalancedness?

DDJ, October 2008
Computer Security


FEATURES



Is Your Next Language COBOL?


Michael Swaine
Erik Demaine is this year's recipient of the Katyanagi Don't count Cobol out. It's a key element in modern distributed business software architectures.

Safe Coding Practices


Gwyn Fisher
Gwyn examines several types of coding vulnerabilities and examines how you can mitigate the risk of exploit within your code.

Code Signing in Adobe AIR


Oliver Goldman
Adobe AIR requires that all AIR-based applications be signed for to secure delivery.

OpenID Single Sign-On


Jeremy Weiskotten
OpenID is an open standard that defines a way that web-based applications can authenticate users via a single identity.

The Book Cipher Algorithm


Dejan Ristanovic and Jelica Protic
The Book cipher algorithm uses letters of subsequent words in some text or book as a key to encode messages.

Indexing and Searching Image Files


Adelene Ng
Lucene.NET is a high-performance text retrieval library that Adelene uses to index and search image files.

Extending Continuous Integration Into ALM


Maciej Zawadzki
Traditional Continuous Integration has been constrained so that it provides only a partial picture of software quality. Maciej suggests alternatives.

COLUMNS



The Agile Edge


Scott W. Ambler
Scott examines the best ways to address nonfunctional requirements.

Effective Concurrency


Herb Sutter
Herb continues his exploration of lock-free code—this time focusing on creating a lock-free queue.

DEPARTMENTS



Friday Night Fish Fry


Jonathan Erickson
Visualizing organic information.

Alia Vox


Michael Swindell
Despite reports to the contrary, native code remains the core foundation of application development.

Developer Diaries


edited by Michael Swaine
Profiles of programmers, descriptions of developers.

Developer's Notebook


compiled by the DDJ Staff
New development products.

Conversations


Jonathan Erickson
Checking in with expert Bruce Schneier about the state of security.

Swaine's Flames


Michael Swaine
Fun with puzzles!

DDJ, November 2008
Communications, Networking and Mobility


FEATURES



Saving Open Source


Michael Swaine
The cause of free and open-source software dodged a bullet earlier this year.

Porting Javascript Applications to the iPhone


Tom Thompson
Tom examines the iPhone's web capabilities by porting a web-based application to the mobile device.

Building Your Own Web Server


Craig A. Lindley
Need a low-power, small-footprint web server? From hardware to software, Craig shows you how to roll your own server.

Green Telnet


Jeremy Blackburn and Ken Christensen
Reducing energy consumption is of growing importance. Jeremy and Ken create a "green telnet" that lets clients transition to a low-power, sleep state.

What's New In Boost Threads?


Anthony Williams
The Boost.Thread library, which enables the use of multiple threads of execution with shared data in portable C++ code, has undergone some major changes.

Testing Service Oriented Architectures


Arunava Chatterjee
Traditional testing techniques assume defective code can be precisely determined. But this isn't always the case with SOA.

Test Case Generation, UML, and Eclipse


Luis Fernandez-Sanz and Pedro J. Lara
Standard notations and open environments make useful tools for software quality-assurance techniques possible.

Unit Testing Web Services


Paul Hamill
For Agile developers, following best practices by doing Test-Driven Development of web service code can require extra work, but it's worth the effort.

C3 Programming


Shimon Rothschild
C3 programming is a process for fostering better communications between developers and other stakeholders.

COLUMNS



The Agile Edge


Scott W. Ambler
Who said Agilists don't do documentation? Scott looks at what agile teams actually do in practice.

Effective Concurrency


Herb Sutter
Herb tackles the general problem of supporting multiple producers and multiple consumers with as much concurrency as possible.

DEPARTMENTS



Friday Night Fish Fry


Jonathan Erickson
Readers learn from editors, but editors learn even more from readers, or so our editor recently learned.

Alia Vox


Jonathan Lindo
eBay is able to control the chaos of frequent releases, which makes Jonathan Lindo wonder why the rest of us can't do likewise.

Developer Diaries


edited by Michael Swaine
Profiles of programmers, descriptions of developers.

Developer's Notebook


compiled by the DDJ Staff
New development products.

Conversations


Jonathan Erickson
Radia Perlman talks about network protocols.

Swaine's Flames


Michael Swaine
Although Michael has made it clear that he will not be a candidate for public office, he nonetheless has position on the issues of the day.

DDJ, December 2008
Database Development


FEATURES



The Man Who Sold the Sky


Michael Swaine
Greg Wyler's mission is to make the Internet accessible and affordable to the "other three billion" people in the developing world, enriching lives and ensuring fair and equal access to information throughout.

Performance on Rails


Jeremy Weiskotten
Jeremy presents strategies for identifying common performance problems in Ruby on Rails applications—and shares ways to fix them.

LINQ-to-SQL and T-SQL


Dino Esposito
LINQ-to-SQL, an API for working with data in a SQL Server database, fully supports the LINQ syntax for running queries.

A Remote Java RMI Registry


Oliver Haase, Juergen Waesch, and Bo Zhao
Our authors present a custom registry that objects can register with remotely.

Beyond B-Trees


Konstantin Knizhnik
Of all the indexes that can order records in database-management systems, only B-Trees indexes are offered universally.

File Descriptors and Multithreaded Programs


Sergey Babkin
Sergey applies design patterns to parallel programming.

COLUMNS



Effective Concurrency


Herb Sutter
Understanding parallel performance. How do you know when good is good enough?

The Agile Edge


Scott W. Ambler
There's nothing simple about complex requirements and agile projects. Still with a discipline and a little luck...

DEPARTMENTS



Friday Night Fish Fry


Jonathan Erickson
We hear a lot about Java and C++, but that doesn't mean they're the only languages developers are using.

Alia Vox


Charles E. Leiserson
Making a case for a concurrency platform.

Developer Diaries


edited by Michael Swaine
Profiles of programmers, descriptions of developers.

Conversations


Jonathan Erickson
Paul Grabscheid has thoughts on the direction that databases are going.

Swaine's Flames


Michael Swaine
Michael looks at tech strategies for hard times. (Panhandling programmers? Riding the Rails?)

Dr. Dobb's Journal, January 2009



EDITOR'S NOTE

OS: Does That Mean Operating Systems, Open Source, or Both?


Jonathan Erickson


ALIA VOX


Speeding Up Software Development Using Embedded Scripting


Harry H. Cheng

DEVELOPER DIARIES



Mashups and Match Ups


Michael Swaine


CONVERSATIONS



What's Open About OpenSolaris?


Jonathan Erickson



SWAINE'S FLAMES



Virtual Is Its Own Reward


Michael Swaine




FEATURES



It's Time To Get Good At Functional Programming


Michael Swaine
If you've been wondering what functional programming is all about, don't wait any longer. Michael examines functional languages like Scala, F#, Erlang, and Haskell, and Mike Riley adds a note about functional programming with Mathematica.

.NET Development on Linux


Eric Bergman-Terrell
Eric finds out that a VM and Mono comes in handy when creating C# .NET programs. In addition to Linux, Mono lets you develop and run .NET client and server applications on Solaris, Mac OS X, Windows, and UNIX.

The DOORS OS


Walter O. Krawec
Even though the DOORS OS is an operating system designed to run on the HC11, there's nothing stopping you from porting the code to your processor of choice.

Lock Options


Bartosz Milewski
The two major problems in concurrent programs are data races and deadlocks. The solution that Bartosz presents here is based on a deadlock-avoidance protocol.

The iPhone Application Builder


Bob Cusick
Why bother writing apps for Apple?s iPhone when you can write an app to write the apps.

COLUMNS

Effective Concurrency


Herb Sutter
When it comes to scalability and concurrency, more is always better.

Disciplined Agility


Scott W. Ambler
Scott examines the myths surrounding agile software development.

Dr. Dobb's Digest, February 2009



EDITOR'S NOTE



Larrabee: Gamer or Game Changer?


Jonathan Erickson


TECHNO-NEWS



A Practical Algorithm for Morse-Smale Complex Computation




FEATURES



Virtual Machines, Real Productivity


Sean Campbell and Michael Jeronimo
You better manage the software development process--or it will manage you!

Virtual Machines, Put to the Developer Test


Mark Cloutier
To determine whether it's viable to run a VM as a testing/developing environment for software development, Mark ran a battery of performance tests. Here are his results.

Creating and Verifying Digital Signatures


Rafael Palacios and David de la Fuente
A straightforward method for creating and verifying digital signatures in HTML forms.

Recursive Descent PEG Parsers Using C++ Templates


Christopher Diggins
YARD, short for "Yet Another Recursive Descent," is a powerful C++ parsing framework.



COLUMNS



Book Review


Mike Riley
Anyone interested in parallel programming using the .NET Framework needs Joe Duffy's "Concurrent Programming on Windows."

Conversations


Jonathan Erickson
Shane O'Donnell, Vice President of Engineering for BlueStripe Software, talks with us about virtualization and lifecycle management.

Effective Concurrency


Herb Sutter
Sharing requires waiting and overhead, and is a natural enemy of scalability.

Dr. Dobb's Digest, March 2009



EDITOR'S NOTE



Dr. Dobb's Excellence in Programming Award


Jonathan Erickson


TECHNO-NEWS



The Safe C Library


FEATURES



Perils of Going Parallel


Steve Apiki
When going parallel, processors and teams -- not just the code -- must change.

Multicore Processors


Richard Kaufmann and Bruce Gayliard
How long will the pain last?

Porting D to the Mac


Walter Bright
Moving the D programming language to a new platform.

Crash Course in Lightweight Code Review


Jason Cohen
Get results in a week.

The Android Developer Experience


Mike Riley
Is this the 'droid you've been looking for?

Internet Explorer 8 and Compatibility Views


Dino Esposito
Beta 2 of Internet Explorer 8 passes the Acid2 test.

COLUMNS



Book Review


Mike Riley
The Art of Application Performance Testing is a valuable read for any developer and/or tester responsible for ensuring an optimal application execution experience.

Conversations


Jonathan Erickson
When it comes to parallel computing, performance can be a balancing act.

Effective Concurrency


Herb Sutter
Illustrating best practices for using threads -- techniques that will make concurrent code easier to write correctly and to reason about with confidence.

Dr. Dobb's Digest, April 2009



EDITOR'S NOTE



Open Source Meets Mobility

Jonathan Erickson


TECHNO-NEWS

Fuzzy Logic Reveals Cells Inner Workings

FEATURES



A Moving Target

Avo Reid
A CTO looks at the development issues in choosing a mobile platform.

A First Look at Larrabee New Instructions

Michael Abrash
LRBni is a very different -- and fascinating -- extension to the x86 instruction set.

Smartphone Operating Systems: A Developer's Perspective

Tom Thompson
For developers, the battle lines are forming in the smartphone wars.

Three Reasons for Moving to Multicore

Christopher Diggins
Performance is at the head of the class.

Bug Labs BUG Update

Mike Riley
With the release of the 1.4, the BugLabs folks are still in the modular system programming game in a serious way.

COLUMNS



Conversations

Jonathan Erickson
Dr. Dobb's talks with the Symbian Foundation's Lee Williams.

Book Review

Mike Riley
Examining Hello Android: Introducing Google's Mobile Development Platform.

Effective Concurrency

Herb Sutter
What are thread pools for, and how can you use them effectively?

Dr. Dobb's Digest, May 2009



EDITOR'S NOTE



Agile Development

Jonathan Erickson


TECHNO-NEWS


Technologies That Are Changing Education

FEATURES



Agile Processes Go Lean

Dave West
Lean approaches make it more likely agile development can deliver on its promise.

Rasterization on Larrabee

Michael Abrash
Michael follows up on his previous examination of Larrabee with this detailed examination of how rasterization is accomplished.

LibMTPRNG: A Multithreaded Pseudo Random Number Generator

Matthew Davis and Sameer Niphadkar
Matthew and Sameer present a library that uses threads to generation pseudo-random numbers.

5 Reasons for Taking a Closer Look at ASP.NET MVC

Dan Wahlin
ASP.NET MVC guides developers to build architecturally sound applications that separate presentation, business, and data logic.

COLUMNS



Conversations

Jonathan Erickson
Dr. Dobb's talks with agile expert Scott Ambler.

Book Review

Mike Riley
Examining The Passionate Programmer.

Effective Concurrency

Herb Sutter
Herb shows how to avoid false sharing.

Dr. Dobb's Digest, June 2009



EDITOR'S NOTE



Distributed Computing

Jonathan Erickson


TECHNO-NEWS


Game Theory, Machine Learning, and Better Building Strategies

FEATURES



A Model That's Right for the Times

Eric J. Bruno
Companies face pressure to find new ways to extend distributed computing.

Software Engineering ≠ Computer Science

Chuck Connell
Why can't software engineering have more rigorous results, like the other parts of computer science?

Minimize Code by Using jQuery and Data Templates

Dan Wahlin
ASP.NET 4.0 validates the usefulness of client-side templates.

The Android 1.5 Developer Experience

Mike Riley
Android 1.5 corrects shortcomings and provides exciting new enhancements.

The System of a Dump

Glen Matthews
DebugDiag is a simple-to-use debugging tool that provides you with a trove of information.

COLUMNS



Conversations

Jonathan Erickson
Dr. Dobb's talks with Erik Troan, CTO at rPath, about distributed computing and modular deployments.

Book Review

Mike Riley
Examining Gray Hat Python: Python Programming for Hackers and Reverse Engineers..

Effective Concurrency

Herb Sutter
Break up and interleave work to keep threads responsive.

Dr. Dobb's Digest, July 2009



EDITOR'S NOTE



Information Security

Jonathan Erickson


TECHNO-NEWS


Finding Java API Methods and Classes

FEATURES



How the U.S. Changed Its Security Game

Alan Paller
Agencies pool threat data and make practical fixes to common woes.

The Case for D

Andrei Alexandrescu
D could be best described as a high-level systems programming language.

Debugging MySQL Stored Procedures

Brian J. Tarbox
Being able to do low- or no-cost logging with Stored Procedures is an extremely useful technique.

Experiences with Kanban

Charles Suscheck
Somewhere between the structure afforded by Scrum and the fluidity of Extreme Programming, Kanban is a very lean Agile development technique.

Monitoring Remote Tasks in AJAX

Dino Esposito
The Progress Indicator pattern lets the JavaScript client and the server application share information.

COLUMNS



Conversations

Jonathan Erickson
Dr. Dobb's talks with security expert Gary McGraw about Twitter and other topics.

Book Review

Mike Riley
Andy Lester offers no-nonsense job search and interview advice in Land the Tech Job You Love.

Effective Concurrency

Herb Sutter
Herb explains the power of "In Progress."

Dr. Dobb's Digest, August 2009



EDITOR'S NOTE



Database Development

Jonathan Erickson


TECHNO-NEWS

Bokode: A New Kind of Barcode

FEATURES



3 Steps to Managing Data In the Cloud

Ken North
Matching the right cloud platform with the right database is critical.

Databases in the Cloud: Elysian Fields or Briar Patch?

Ken North
For handling distributed data in the cloud, the cornucopia of products includes everything from lightweight key-value stores to industrial-strength databases.

Fan: A Portable Language Is Bringing Actors to JavaScript

Gaston Hillar
Fan is both an object-oriented and functional programming language.

The C++0x "Remove Concepts" Decision

Bjarne Stroustrup
"Concepts" were to have been the central new feature in C++0x.

A Build System for Complex Projects: Part 1

Gigi Sayfan
A different approach to build systems.

Integrating jQuery Client-Side Data Templates with WCF

Dan Wahlin
Using client-side templates and binding JSON data that's retrieved from a WCF service.

COLUMNS



Conversations

Jonathan Erickson
Jon talks with MySQL creator Michael "Monty" Widenius about the future of databases.

Book Review

Mike Riley
Mike reviews Using Google App Engine.

Effective Concurrency

Herb Sutter
Why worry about "manycore" today?

Dr. Dobb's Digest, September 2009



EDITOR'S NOTE



Mobile Devices: Where Do You Start?

Jonathan Erickson


TECHNO-NEWS

OpenAjax Alliance Moves Towards More Secure Mashups

FEATURES



HTML 5 Starts Looking Real

Rob Cherny
The World Wide Web Consortium's statement that it was opting for HTML 5 over XHTML 2 as the "official" Web markup language sent ripples across web development waters.

The IIS7 Integrated Pipeline

Dino Esposito
In an integrated pipeline, an ASP.NET request is like any other request.

Coding in the Cloud

Lori MacVittie
There are three "gotchas" associated with deploying applications into a load-balanced environment.

G1: Java's 'Garbage First' Garbage Collector

Eric J. Bruno
A garbage collector works to reclaim areas of memory within an application that will never be accessed again.

Void Safety: Putting an End to the Plague of Null Dereferencing

Bertrand Meyer, Alexander Kogtenkov, and Emmanuel Stapf
Almost every program runs the risk of hitting a void call in some execution.

A Build System for Complex Projects: Part 2

Gigi Sayfan
Ibs is an invisible build system that doesn't require any build files.

COLUMNS



Conversations

Jonathan Erickson
Philippe Le Hegaret leads the W3C Interaction Domain, which develops technologies in areas such as HTML and CSS.

Book Review

Mike Riley
Venkat Subramaniam's Programming Scala doesn't waste time getting to the heart of the language.

Swaine's Flames

Michael Swaine
Don Ameche and the Human Torch.

Dr. Dobb's Digest, October 2009



EDITOR'S NOTE



Moblin Makes Its Move

Jonathan Erickson


TECHNO-NEWS

API for Cloud Application Services Project Launched

FEATURES



Programmer Productivity

Jonathan Erickson
Multitasking is good when it comes to computer programs, letting them do more with less. But when computer programmers start multitasking, productivity flies out the door.

How Effective Is ASP.NET Partial Rendering?

Dino Esposito
It's a simple postback-based technique.

Integrating ALM: Lessons Learned Deploying Tasktop at Nokia

Andy Boyle
Tool environments in tech companies require a stronger emphasis on treating engineers as customers.

Multithreaded File I/O

Stefan Wörthmüller
Tackling the file I/O bottleneck.

Why We Need a Theory for Software Engineering

Ivar Jacobseon and Ian Spence
Our greatest challenge is understanding how to build great software.

Coming of Age in the Era of Cloud Computing

Dana Moore
Cloud computing provides virtually unlimited computing resources in a wide variety of offerings.

A Build System for Complex Projects: Part 3

Gigi Sayfan
Generating a full-fledged NetBeans build system involves multiple projects.

COLUMNS



Conversations

Jonathan Erickson
Cyndi Mitchell, managing director of Thought-Works Studios, talks about Agile development and ALM.

Book Review

Mike Riley
Ray Harr's Murach's JavaScript and DOM Scripting is an up-to-date introduction to JavaScript.

Effective Concurrency

Herb Sutter
Perhaps the most effective way to deliver concurrency is to hide it inside "synchronous" APIs.

Swaine's Flames

Michael Swaine
Cousin Corbett and the Piggyback Skunkworks.

Dr. Dobb's Digest, November 2009



EDITOR'S NOTE



Beware Open Source Encryption

Jonathan Erickson


TECHNO-NEWS

P vs. NP


FEATURES



4 Steps to Better SOA

Raghuraman Krishnamurthy, Vinod Ranganathan, and Baskar Senguttuvan
Ontology gives semantic integration the boost it needs to speed data sharing.

Strengthening Service-Oriented Architectures (SOA) with Semantics

John Hebeler and Andrew Perez-Lopez
Semantics form expressive, useful computing abstractions or concepts that address these challenges and strengthen the SOA mission.

The Coreinfo 2.0 Utility

Gaston Hillar
Understanding manycore complexity in Windows.

Combining Code Development, Modeling, and Simulation with Eclipse

Paul Urban
A "best of both worlds" solution for open source development.

The Agile Social Contract

Ryan Martens
The two keys are commitment and a disciplined path for Agile rollout.

Elimination of Text Corruption in XML

Subramanian Narayanan and Ashish Arora
Feeds have become a standard way of sharing content on the Web.

A Build System for Complex Projects: Part 4

Gigi Sayfan
Generating a full-fledged Visual Studio build system involves multiple projects.

COLUMNS



Conversations

Jonathan Erickson
Richard Keller is a senior research computer scientist and group lead for the information sharing and integration group at NASA.

Book Review

Mike Riley
Natural Language Processing with Python by Steven Bird, Ewan Klein, and Edward Loper.

Other Voices

Steve Subar
Will mobile virtualization prevent fragmentation?

Effective Concurrency

Herb Sutter
What's good for the function and the object is also good for the thread, the task, and the lock.

Swaine's Flames

Michael Swaine
Meanwhile, back at Foo Bar, old programming languages never die, they just...Ding!

Dr. Dobb's Digest, December 2009



EDITOR'S NOTE



Bilski and the Problem with Software Patents

Jonathan Erickson


TECHNO-NEWS

The Discrete Fourier Transform

FEATURES



The SEMAT Initiative: A Call to Action

Ivar Jacobson, Bertrand Meyer, and Richard Soley
The best and the brightest form the Software Engineering Method and Theory initiative.

Secure Software Needs Careful Testing -- And Lots Of It

Herbert H. Thompson
With fuzzing, we deliberately attack software with random data in search of unexpected responses.

Is Larrabee for the Rest of Us?

Daniele Paolo Scarpazza
Can non-numerical application developers take advantage of the new LRBni instructions?

Cloud Computing: Detecting Scalability Problems

Gaston Hillar
Intel's Parallel Universe Portal is a free developer's service in the cloud.

recls 100% .NET

Matthew Wilson
Implementing a 100% C# implementation of recls for .NET.

The One Instruction Wonder

Al Williams
Al builds a single instruction CPU that does everything via a move instruction.

A Build System for Complex Projects: Part 5

Gigi Sayfan
Gigi wraps up this article series by testing and extending the ibs build system.

Go: A New Programming Language from Google

Gaston Hillar
A concurrent systems programming language.


COLUMNS



Conversations

Jonathan Erickson
Jon talks with Google's James Wittaker about software testing in a virtualized world.

Book Review

Mike Riley
Professional Ubuntu Mobile Development by Ian Lawrence and Rodrio Cesar Lopes Bele.

Other Voices

Mike Shepherd
How developer managers can cope with the ever-shifting requirements of today's projects.