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.
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.
Rick Naro's listing continued from last month.
by Allen Holub
This month Allen wraps up a two-part presentation of his preemptive multitasking kernel, detailing how the subroutines work.
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.
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.....
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.
by Sara Ruddy
by Michael Swaine
by you
by Michael Swaine
Products for programmers
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.
by Craig Lindley
Craig's SPA offers a slick way to use your PC to visually monitor data flow and handshaking between serial devices.
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.
by Kent Porter
Kent offers some methods for handling DOS critical errors in Turbo Pascal.
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.
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.
by Tyler Sperry
by Tyler Sperry
by you
by Michael Swaine
Product news for the programming community
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.
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.
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.
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.
by Stan Krute
Stan winds up the CDEF project he began in the January column, and talks about several products.
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.
by Tyler Sperry
by Tyler Sperry
by you
by Michael Swaine
Product News for the programming community.
by Jonathan Amsterdam
Jonathan describes AAL, a language based on LISP that includes features from both object-oriented and declarative 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.
by Anthony J. Dos Reis
For those of you into propositional logic, Anthony offers working code (in C) for experimenting with "mechanical" theorem proving.
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.
by Allen Holub
Improving on an old standard, Allen tears into printf() to add new features.
by Stan Krute
Updates on QUED/M, TMON, and HFS Navigator, as well as code for HyperCard Scouting Toolkit.
by Kent Porter
Updating Niklaus Wirth with a LineDrawing graphics module in (what else?) Modula-2.
by Martin Tracy
A report on the 9th FORML, the latest on the ANSI FORTH effort, and other news.
by Tyler Sperry
by Tyler Sperry
by you
by Michael Swaine
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.
by Anthony Meadow, Rocky Offner, and Michael Budiansky
If you are writing an application that works with bitmapped images, consider TIFF....
by Mark Tichenor
Data arrays need not be limited
by available memory. Mark uses virtual arrays with background file management to overcome this problem.
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.
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.
by Stan Krute
Stan takes a field trip to the recent MacWorld Expo. He also has a wrap-up of the Scouting Toolkit.
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.
by Michael Swaine
This is the premier of a new column: Parallel Processing, Object-Oriented Programming, and a reading list. Enjoy!
by Jonathan Erickson
by Tyler Sperry
by you
by Michael Swaine
brief product descriptions
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.
by Dan Hildebrand
An overview of operating system design using intertask messaging, with real-world examples from QNX.
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.
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.
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( ).
by Martin Tracy
Martin offers some thoughts on the state of real-time Forth, as well as source code for floating-point extensions.
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.
by Michael Swaine
Notes on objectivity at Software Development '88, as well as Prolog, parallelism, and transputers.
by Jonathan Erickson
by Tyler Sperry
by you
by Michael Swaine
brief product descriptions
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.
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.
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.
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.
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.
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.
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.
by Jonathan Erickson
by Tyler Sperry
by you
by Michael Swaine
brief product descriptions
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.
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.
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.
by John Michener
John uses a generalized rotor operator technique to construct a cryptographic secret key system that is strongly resistant to analysis.
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.
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.
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.
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.
by Michael Swaine
Once again Michael attempts to go in many directions at once with a discussion of parallel algorithms--coupled with practical examples.
by Jonathan Erickson
by Tyler Sperry
by you
by Michael Swaine
brief product descriptions
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.
by Kim King
Getting acquainted with Ada needn't be a stressful experience especially if you're already comfortable with Pascal.
by John A. Grosberg
Tired of a classless society? John presents an object-oriented class structure using dimensional units.
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.
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.
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.
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.
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.
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.
by Jonathan Erickson
by Ron Copeland and Michael Swaine
by you
by Michael Swaine
brief product descriptions
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.
by John Dilworth
John develops an assembler written in Forth that takes advantage of the extended capabilities of the 80386.
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.
by Steve Heller
Steve's multiple cross-reference solution will help you keep track of symbols and their uses in your assembly language programs.
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.
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.
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?"
by Martin Tracy
Martin resumes his wrap-up of some recent real-time programming conferences, including several important Forth-related announcements.
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.
by Jonathan Erickson
by Ron Copeland
by you
by Jonathan Erickson
brief product descriptions
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.
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."
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.
by Todd King
Using dynamically defined data structures is one way to create flexible, yet powerful applications.
by Robert J. Moore
Avoid a world of pain, understand how DOS uses memory control blocks.
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.
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.
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.
by Kent Porter
Kent takes a look at Borland's Turbo Pascal 5.0 with the long-awaited integrated debugger.
by Michael Swaine
Michael ruminates over alternatives to conventional programming languages and wonders how (if) they'll affect our future.
by Jonathan Erickson
by Ron Copeland
by you
by Jonathan Erickson
brief product descriptions
by Greg Blackham
Greg examines three critical issues related to software portability: the operating system, the hardware, and the compiler.
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.
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.
by Chris Derossi
With Multifinder the world changed. Chris describes the new landscape and how to keep from being led astray.
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.
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.
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.
coordinated by Ron Copeland
Ernie Tello looks at the latest version of C_Talk from CNS --an implementation of C in Smalltalk-like environment.
by Al Stevens
Al discusses menu structuring, file management, and text searching along with an implementation of a context-sensitive help facility.
by Kent Porter
Kent introduces Xref, a symbolic cross-reference utility that uses some unusual data structures.
by Michael Swaine
Michael presents some general principles for classifying parallel processing algorithms.
by Jonathan Erickson
by you
by Michael Swaine
brief product descriptions
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.
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.
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.
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.
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.
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.
by Phillip Robinson
by Michael Swaine
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.
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.
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.
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.
by Randall P. Sutherland
by Michael Swaine
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.
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.
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.
by Scott Robert Ladd
When Scott compares C++ to Modula-2, he finds that neither language loses -- and that you come out the winner.
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.
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.
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.
by Kent Porter
Kent puts Modula-2 to work with three snappy utilities that go deep inside DOS.
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.
by Jonathan Erickson
by you
by Michael Swaine
brief product descriptions
Copyright © 1989, Dr. Dobb's Journal
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.
by David Bowling
Even though MS-DOS isn't multitasking, it can still be used for some real-time applications, and David shows how.
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.
by Tom Green
When Tom decided to rewrite his multitasking kernel, he thought that C++ objects would be ideal -- and he was right.
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.
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.
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.
by Robert Zigon
Robert shares a data compression technique that's saved him disk space and will for you too.
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.
by Michael Swaine
Michael takes object-oriented programmers off the horns of the inheritance dilemma.
by Al Stevens
This month Al introduces TINYCOMM to connect you to the outside world via modem.
by Kent Porter
New column! Come join our senior tech editor for a voyage into the magical (and sometimes maddening) world of graphics 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.
by Martin Tracy
Martin goes globe-trotting to update us on the world Forth scene, as well as sharing a Mandlebrot plotting program.
by Jonathan Erickson
by you
by Michael Swaine
brief product descriptions
Copyright © 1989, Dr. Dobb's Journal
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.
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.
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.
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.
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++.
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.
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.
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.
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.
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.
by Ken Porter
The shortest distance between two points is a straight line. But, as Kent points out, that's easier said than done.
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."
by Jonathan Erickson
by you
by Michael Swaine
brief product descriptions
Copyright © 1989, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
by Alex Lane
by Keith Weiskamp
by Bruce Tonkin
by Jonathon Amsterdam
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.
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.
by Kent Porter
Kent comes clean this month and tells us how he mixes and matches colors on an EGA screen.
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.
by Jonathan Erickson
by you
by Michael Swaine
brief product descriptions
Copyright © 1989, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
brief product description
Copyright © 1989, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
by Ken. L. Pottebaum
In this second installment of his two-part article, Ken puts to work the TSR tools he presented last month.
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.
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.
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.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
Copyright © 1989, Dr. Dobb's Journal
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.
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.
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.
by Victor Duvanenko
Photographers use chemicals to enhance and enrich images. Victor shows how programmers can achieve the same special effects by manipulating numbers.
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.
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.
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.
by Michael Swaine
While picking up some spare change, Michael asks Hal Hardenbergh why a hardware engineer would find neural networks fun.
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.
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.
by Jeff Duntemann
Turbo Pascal's object-oriented extensions launch Jeff into the swirling waters of OOP.
by Jonathan Erickson
by you
by Michael Swaine
brief product description
Copyright © 1989, Dr. Dobb's Journal
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.
by Michael A. Floyd
Making the C-To-Fortran connection lets you use the wealth of C tools to take advantage of Fortran libraries.
by Kent Quirk
Kent shows how he outputs PCX images files to PostScript printers, using C as a conversion medium.
by Herbert Schildt
Roll your own C interpreter using the code and techniques Herb presents here.
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.
by Randall Merilatt
Randy shares some proven techniques to help you detect, identify, and cope with C dynamic memory problems.
by Tim Berens
Procedure tables let you store functions and subroutines in a table for tighter program control.
by Scott Robert Ladd
ANSI C picked up where K&R left off, and knowing where the differences are can affect your programming practices.
by Stephen Russell
The non-recursive Heapsort algorithm may be just the sorting tool you need, no matter what language you're programming in.
by Scott Robert Ladd
by Professor T.A. Elkins
by Tom Castle
by Tom Castle
by Michael Swaine
Michael asks the question, "Why neural nets?" and gets into some background on backpropagation.
by Al Stevens
It had to happen sooner or later: Al takes a serious look at C++ after reexamining how he's abused typedef.
by Kent Porter
A drive along the twisty roads of Big Sur gets Kent to thinking about curves -- and ways programmers can handle them.
by Jeff Duntemann
Jeff looks into the Legend of Smalltalk and finds out that it's really an ordinary language -- within a remarkable framework.
by Jonathan Erickson
by you
by Michael Swaine
compiled by Janna Custer
Copyright © 1989, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
by Michael Swaine
Nobody knows the trouble Michael knows as he continues his discussion of neural nets and his talks with Hal Hardenbergh.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
compiled by Janna Custer
Copyright © 1989, Dr. Dobb's Journal
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.
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.
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.
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.
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.
by Gregory L. Lazarev
Gregory discusses how executable specifications can be generated from a data flow diagram using Prolog's declarative and procedural capabilities.
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.
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.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
compiled by Janna Custer
Copyright © 1989, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
compiled by Janna Custer
Copyright © 1989, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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.
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."
by Michael Swaine
OOPSLA '89 was one of this year's most exciting--and importantconferences. Here is Mike's wrap-up.
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.
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.
by Michael Floyd
by you
by Michael Swaine
compiled by Janna Custer
Copyright © 1989, Dr. Dobb's Journal
by Jef Raskin
Jef adds to the history of the Macintosh as we enter what he calls the "megamicro age."
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.
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.
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.
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.
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.
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.
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.
by Bryan Waters
As Bryan shows here, object-oriented tools take the pain out of developing Macintosh resources, particularly control panel devices ("cdevs").
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
by Scott Robert Ladd
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
by Tom Nolan
Build your own real-time data acquisition system with the hardware and software tools Tom presents here.
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.
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.
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.
by Robert Zigon
Robert returns to DDJ, this time with an algorithm for efficiently generating circles.
by Mark R. Nelson
A general-purpose "locator" program that matches code and data with target hardware.
by Scott Robert Ladd
Scott put Zortech's C++ 2.0 to the challenge of fractal geometry--and liked what he saw.
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.
by Michael Swaine
If your programming palate has been hungry for a taste of Lisp, Mike's monthly menu should fill the bill.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
compiled by Janna Custer
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.
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.
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.
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.
by William J. McMahon
It's possible to detect unexpected errors
by using function communication techniques such as the one Bill presents here.
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.
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.
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.
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.
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.
by Jeff Duntemann
Jeff takes time to reflect on The Quake of '89 before moving on to Arizona and Modula-2.
by Jonathan Erickson
by you
by Michael Swaine
compiled by Janna Custer
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.
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.
by Stephen Satchell
The newest member of the 680x0 family provides some challenges for programmers at all levels, particularly when it comes to caching.
by Al Williams
Use the 80386's hardware to debug your programs
by including Al's assembly language code to establish breakpoints.
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.
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.
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.
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.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
compiled by Janna Custer
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.
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.
by Jeanette "Jet" Lawrence
With more than 40 functioning neural net models to choose from, it is important to understand their similarities and differences.
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.
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.
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.
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.
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.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
compiled by Janna Custer
by Frank Jackson
The generation scavenging algorithm is an efficient portable garbage collector that does not require special support.
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.
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.
by Jan Bottorff and Jim Bolland
For object-oriented environments, "object-swapping" picks up where virtual memory systems leave off.
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.
by Michael Abrash
Michael clears up misconceptions about 16-bit VGA and explains why programmers need not treat 8- and 16-bit VGAs differently.
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.
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.
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.
by Michael Swaine
Michael copes with the chaos of complex systems.
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.
by Jeff Duntemann
Jeff poses some sharp questions about cutting edges, explores object hierarchies, and examines the Object Professional Library from Turbo Power Software.
by Jonathan Erickson
by you
by Michael Swaine
compiled by Janna Custer
by Scott Johnson
A behind-the-scenes look at the DDJ hypertext project
by the programmer who put it together.
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.
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.
by Leo Notenboom and Michael Vose
Knowing how help files and a hypertext engine interact is central to effective on-screen documentation.
by Kevin Weeks
The key to efficient programming using object-oriented languages is having a good base class.
by Norton T. Allen
Recognizing the general character of an image early in the display process lets you begin fine-tuning much sooner.
by Shawn M. Regan
Shawn enhances this popular data compression algorithm.
by Andrew Schulman
An interactive environment such as Rational Systems' Instant-C takes a lot of the pain out of 80386 protected-mode programming.
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.
by Michael Swaine
Michael shares different techniques for adding text links to HyperCard.
by Al Stevens
Al develops an indexing technique that is a loose adaptation of B-tree.
by Jeff Duntemann
Heap Fragmentation, and how to manage it in Pascal and Modula-2, are Jeff's topics this month.
by Jonathan Erickson
by you
by Michael Swaine
compiled by Janna Custer
by Christopher A. Howard
Chris presents a VGA chip-set detection method, including functions for addressing video memory and displaying pixels at specified locations.
by Tim Paterson
The digital differential analyzer, which uses unscaled integers for drawing straight lines and circles, belongs in every graphics library.
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.
by Todd King
Todd examines and implements Bezier curves
by using the literal rendering technique and the deCastejau method.
by Adele Goldberg
Smalltalk's Model-View-Controller architecture was built with user interface design in mind.
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.
by Bruce Tonkin
Can a leopard change its spots? Bruce finds out
by examining Spectra's PowerBasic, previously known as Borland's TurboBasic.
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.
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.
by Jeff Duntemann
It's one darn thing after another as Jeff tackles object design and multiple inheritance.
by Jonathan Erickson
by you
by Michael Swaine
compiled by Janna Custer
by William F. Dudley Jr.
Bill shares his experiences and suggestions for porting large C programs to 80386 protected mode.
by Jim Schimandle
Encapsulating memory routines gives you control over memory allocation. Jim presents a memory shell that does this.
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.
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.
by Jim Mischel
Here's an easy-to-use variation on printf( ) that utilizes variable arguments so you can output formatted numbers.
by Graham K. Ellis
Ken discusses concurrency functions for parallel C compilers and describes how to build transputer-based parallel systems.
by Lawrence D. Spencer
Larry tackles C memory allocation using functions that serve as a bookkeeping layer between programs.
by Nico Mark
Here's how to squeeze more information out of OS/2's cryptic error messages.
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.
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.
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.
by Al Stevens
Al mulls over C's past and future before exploring the NetWare programming environment.
by Jeff Duntemann
Jeff creates a Turbo Pascal object to solve a recent data-entry problem.
by Jonathan Erickson
by you
by Michael Swaine
compiled by Janna Custer
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.
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.
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.
by Leon Campise
Leon's FASTSRCH program lets you access data files quickly without resorting to sophisticated linked lists or database engines.
by William E. Ives
Roll your own assembler using the symbol-management techniques Bill presents here.
by Daniel Lyke
Dan opens the door to the world of realistic, computer-rendered 3-D images, implementing his algorithms in C and C++.
by Gary Entsminger
Gary takes a look at Turbo Power's Object Professional, an object-oriented library for Turbo Pascal.
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.
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.
by Al Stevens
Al comes in from the cold to discuss hacks, spooks, and data encryption techniques.
by Jeff Duntemann
Jeff discovers that multi-language development can be done in bits and pieces.
by Andrew Schulman
In launching this new column, Andrew takes a look at Microprocessors: A Programmer's View from a programmer's perspective.
by Jonathan Erickson
by you
by Michael Swaine
compiled by Janna Custer
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.
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.
by John Switzer
Accessing DOS without going through the INT21 function handler can have serious repercussions. John shows how to close the vulnerable backdoors.
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.
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.
by Pitts Jarvis
CORDIC (COordinate, Rotation, DIgital Computer) algorithms let you use one core routine to compute sines, cosines, exponentials, logarithms, and other transcendentals.
by Bruce D. Schatzman
Bruce investigates the practical and theoretical aspects of code optimization, using Microsoft C 6.0 as his example platform.
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.
by Michael Swaine
Michael reports on the recent MacWorld conference, focusing on System 7 developers and developments.
by Al Stevens
Al catches up on his correspondence and follows up on his token-pasting.
by Jeff Duntemann
Jeff returns to Zeller's Congruence before peering through the open window of Windows 3.0.
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.
by Jonathan Erickson
by you
by Michael Swaine
compiled by Janna Custer
by Michael Floyd
Mike defines, designs, and implements an object-oriented language that you can wrap around your code.
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.
by Simon Tooke
Simon examines strategies and tools for object-oriented debugging, using C++ as an example.
by William D. Cramer
Augment your Macintosh development environment with this general-purpose message logging window that provides basic printf( ) capabilities.
by the League for Programming Freedom
Will software patents kill innovation in the software development field? Here's one view.
by Al Williams
Al covers debugging and 80386 exceptions and takes you under his DOS extender's hood.
by Kenneth E. Ayers
In Smalltalk/V, MVC is spelled OPD. Ken examines both the Model-View-Controller and the Object-Pane-Dispatcher.
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.
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.
by Michael Swaine
Michael the New Connectionism, an emerging movement in cognitive and computer science that involves both neural nets and parallel distributed processing.
by Al Stevens
Al returns to the data encryption algorithms and the DES discussion began in September.
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!
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.
by Jonathan Erickson
by you
by Michael Swaine
compiled by Janna Custer
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.
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.
by Don Gaspar
Apple's Communications Toolbox includes connection, terminal, and file transfer managers for constructing dynamic communications applications.
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.
by Walter Williams
Here's a simple algorithm that can speed up a sequential search
by a factor of two or more.
by Gary Entsminger
The Zinc Interface Library is a C++ class library for constructing graphics- and text-application interfaces.
by Chris Olsen
Chris presents a message storage and retrieval system for electronic mail built around Borland's Paradox database engine.
by Michael Swaine
Michael wraps up loose ends that have come unraveled over the past year.
by Al Stevens
Al examines, updates, and balances a B-tree he first presented last spring.
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.
by Ray Duncan
If you're starting up or restructuring your business, Ray recommends a small, but important, book called Peopleware.
by Jonathan Erickson
by you
by Michael Swaine
compiled by Janna Custer
In this first installment of a multipart series, Bill and Lynne define the design specification for 386BSD -- Berkeley UNIX for the 80386.
Contrary to what you might expect, tomorrow's distributed computer systems may look a lot like Plan 9.
Mitch states his case for getting serious about software design.
Developing a user-interface toolkit for multiple platforms poses unique challenges.
Here's one approach to designing a write-once storage system for optical storage technology.
This algorithm provides an efficient method of determining vertex connections.
Making programs Windows 3 aware.
DDJ's founding editor reflects on the early days of the computer industry before turning his eye to the future.
Michael picks up where he left off in Fire in the Valley, his landmark history of the personal computer industry.
DDJ's editors look at emerging trends that may affect the way programmers approach their craft in the future.
Doug Hamilton's C Shell helps you create more powerful OS/2 programs.
The software design process is often made easier with CASE tools.
Michael boldly crosses the electronic frontier.
Al looks back on 15 years of C coverage in DDJ.
Among other topics, Jeff explores access rights in Turbo Pascal 6.0.
Andrew examines the connections among three network programming books.
Copyright © 1991, Dr. Dobb's Journal
You can achieve impressive compression ratios by combining arithmetic coding with powerful modeling techniques.
Understanding entropy is key to understanding data compression.
DFF keeps track of the differences between images rather than the images themselves.
Here's your chance to prove that your favorite compression technique is better than that of your fellow programmers.
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.
This utility helps you get your foot in the Window 3.0 programming door.
Dan takes you through the steps his team experienced when they designed an 8051-based touchscreen terminal.
The most recent Microprocessors Forum gives Ray - and you - a look into what's around the corner in terms of microprocessors and microcontollers.
Speed up slow processors by decomposing a division by a constant divisor into a simple sequences of additions, subtractions and shifts.
Todd uses MKS YACC to build a portable expert system.
Programmers can configure the Intrinsics toolkit so that X Window users can personalize computing environments.
Reading and thinking about van Gasteren's On the Shape of Mathematical Arguments is a task every programmer should shoulder.
After catching up on recent events, Al examines the Huffman data compression algorithm.
Jeff ponders the imponderable, starting with software design.
Our newest columnist launches his column by developing routines to draw filled polygons.
The use and abuse of fonts and typography leads Ray to Digital Typography.
Copyright © 1991, Dr. Dobb's Journal
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 make code more readable without sacrificing the traditional assembly language benefits of small code size and top performance.
Using their protected mode program loader, Bill and Lynne create a minimal 80386 protected mode standalone C programming environment for operating systems kernel development.
Here's a technique for speeding up disk access for many applications without buying faster, more expensive hardware.
Dan discusses the development of an application that emulates a VT100 terminal using just about every feature of a touch-sensitive display.
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.
Mike develops a network message sending utility using Microsoft C 6.0, the Windows 3.0 SDK , and Novell's NetWare C Interface.
Michael interviews computer pioneer Bill Duvall who is back in the Valley again, directing future HyperCard development.
Al explores event-driven programming, developing along the way drivers for the mouse, keyboard, and screen.
Jeff wonders what came first--the rubber chicken or the UART?
Last month's code for filling convex polygons is optimized using--you guessed it--assembly language.
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.
Copyright © 1991, Dr. Dobb's Journal
Sensitivity analysis helps explain a neural network's "thinking" process.
To solve problems, genetic algorithms analyze feedback from repeated attempts at a solution.
Bill and Lynne describe "cross" mode operations as they work towards bootstrapping 386BSD.
BioComputing may be one way to push the envelope of program complexity.
The IEEE 488 bus is ideal for embedded and engineering/scientific applications.
Get the benefits of multitasking operating systems without the complexities.
The APIs in Microsoft Mail for the Macintosh let you implement network applications without hassling with low-level communications programming.
Generate fractal images using this "fractal template" drawing tool.
Michael interviews computer visionary Ted Nelson
Last month's screen grabber becomes this month's TSR.
Jeff presents his prescription for portable design.
Will Edsun's CEG/DAC be as important to PC graphics as Super VGA?
Good design principles are needed for everything from software to soapboxes.
Copyright © 1991, Dr. Dobb's Journal
When fast graphics aren't fast enough, the TL 34020 graphics coprocessor employs its own coprocessor--the 34082 FPU--for even higher system performance.
Jim implements the Fast Fourier Transform to show that when it comes to speed, digital signal processing can make a difference.
Memory-mapped math coprocessors can boost performance without sacrificing compatibility.
Bill and Lynne describe the 386BSD root filesystem, a key component of kernel development.
Don implements IEEE 488.1 functionality by building an embedded system using the TMS9914A.
The r250 algorithm uses a 250-element array to generate pseudo random numbers faster than better-known techniques.
Widgets/V 286 extends the Smalltalk/V 286 environment by providing alternative classes to the standard Smalltalk user interface components.
Add array bounds checking to your Turbo C applications using DOS extenders and the techniques Glenn describes here.
Windows and the Windows Conference are the subjects of this months ruminations.
Al launches D-Flat, a CUA-compliant C library.
Designing good communications software requires knowing the hardware.
Last month, Michael introduced Edsun's CEG/DAC. This month, he puts it to work.
C++ books have come a long way, and Andrew looks at the best of the bunch.
Copyright © 1991, Dr. Dobb's Journal
Fortran wasn't designed to write drivers but Fortran applications can provide direct window support.
Access your system's real-time clock using homegrown Turbo Pascal time and date functions.
This Basic sort routine uses large string buffers and integer variables as pointers to buffers.
All isn't quiet on the Modula-2 front. Our experts brings you up to date.
Before beginning the kernel port, Bill and Lynne reflect on 386BSD's place in the world of UNIX.
Avoid redundancy--and improve performance--when raising polynomials to integer powers.
Is POSIX.4 the key to reconciling Unix and Ada for real-time systems?
This Forth multitasker falls between "medium weight" and "heavyweight" multitasking and provides preemption without additional overhead.
TSRs are no longer a chore when you use tools like Coderunner.
Capture planetary images using a CCD camera, a frame grabber, and Turbo Pascal.
Michael reports on The First Conference on Computers, Freedom, and Privacy.
This month's D-Flat installment manages application configuration and window classes.
Jeff takes a look at Turbo Pascal for Windows before moving on to dissecting UART registers.
Complex polygons are simpler than you probably think.
Pearls of wisdom about Jon Bentley's best programming books.
Copyright © 1991, Dr. Dobb's Journal
What do recursive drawing, iterated function systems, and fractal geometry have in common? They all play a part in producing realistic looking natural objects.
Use the VGA graphics controller and sequencer address registers for saving and restoring graphic screens.
386BSD's basic kernel incorporates a unique "recursive" paging feature that leverages resources and reduces complexity.
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.
Compared to previous versions, Microsoft's recently released Macro Assembler 6.0 embodies some ambitious changes.
This file viewer--implemented as a C++ class--creates a Windows 3 bitmap object from a PCX file.
Michael embarks on a two-part interview with Bob Jarvis, author of Wizard C--the precursor to Turbo C.
This month's installment of D-Flat presents event and message mechanisms.
Jeff continues his examination of UARTs and explains how to detect the presence of a serial port.
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.
Andrew weighs his options when examining Windows 3 programming books.
Copyright © 1991, Dr. Dobb's Journal
A noted expert examines how standard C got where it is and where it might be going.
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.
Here's an approach to representing and manipulating variable-length, heterogeneous lists, self-identified data objects, and symbolic data in C.
This article presents a method for creating C++ container classes--generic lists of objects.
The 386BSD kernel services and data structures are initialized in this month's installment.
There are advantages to using a high-level language compiler for programming microcontrollers.
The technique presented here strikes a balance between speed and storage requirements.
David compares how a variety of C compilers measure up when compiling XScheme, his implementation of the Scheme language.
Speed up fax printing on laser printers using the optimizing techniques Greg presents here.
Michael continues his conversation with Bob Jarvis, creator of Wizard C and other languages.
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.
According to Jeff, life is just a series of interruptions--one right after another.
Michael discusses latches and VGA's undocumented Mode X.
For graphics programmers, Computer Graphics: Principles and Practice, Second Edition is a must.
Copyright © 1991, Dr. Dobb's Journal
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.
Here's a tiny C-like object-oriented language that's an ideal extension language or learning tool.
Hooking little languages to big applications can be tricky, unless you follow the rules.
Multiprogramming is the focus of this month's installment.
Effectively using OBJ module libraries is an essential part of software development.
Partitioning communications into layers is one technique for increasing performance.
Probabilistic algorithms can be used for general-purpose pattern matching.
Peter uses ML, a Lisp-like little language, to stimulate and investigate multiprocessor architectures.
The extensibility and programmability of BRIEF lets you tailor the editor to fit your needs.
Dave Winer, designer of a powerful scripting language, shares his thoughts on software development.
D-Flat continued. This month Al covers menus, classes, and the C preprocessor.
As long as he's not distracted again, Jeff will continue his discussion of communication interrupts.
Michael puts the moves on animation using VGA's 256 colors.
The Emperor's New Mind, examines computers, minds, and the laws of physics.
Copyright © 1991, Dr. Dobb's Journal
This portable symbolic debugger lets you trace execution, display object values, and more.
As C++ moves through the ANSI process, String classes like this may become the standard.
The object-oriented model addresses the limitations of the difference model.
DDJ's senior technical editor reports on the recently-held TOOLS conference.
Bill and Lynne continue their exploration of multiprogramming and multitasking.
Implementing expanded memory equivalents of TP's dynamic memory functions.
Our authors describe how you can customize Borland C++ to support non-PC environments.
The Smalltalk environment can be a powerful embedded systems development platform.
Embedded systems programmers have much at stake in the move towards a standardized Forth.
Configuration inheritance adds a powerful dimension to object-oriented programming.
Microsofts's Visual Basic makes it easy for Fortran programmers to access Windows 3 features.
Michael reflects on the true meaning of the Apple-IBM alliance in this MacWorld Expo report.
This D-Flat installment provides list management functions and more.
Jeff makes a case for vertical application development--and the tools it requires.
Anitialising and the Sierra Hicolor digital-to-analog converter is explored this month.
Andrew discusses his favorite hard-core reference books.
Copyright © 1991, Dr. Dobb's Journal
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.
DEVLOD, the DOS program Jim presents here, lets you load character and block device drivers without rebooting your computer.
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.
Mark reveals the results of our data compression contest. And the winners are...
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.
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.
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.
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.
Looking good is good enough when it comes to antialiasing with 32 fully independent levels of each primary color, and resolutions up to 800x600.
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.
Copyright © 1991, Dr. Dobb's Journal
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.
Our authors describe how they extended the X-Window system by adding a paperlike interface and handwriting recognition capabilities.
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.
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.
This handle-based memory manager may solve you memory fragmentation problems.
Understanding statistical performance analysis helps you improve time-critical application execution and avoid potential problems.
Al built this Windows 3 network e-mail system with just 640 lines of code in only four days using Microsoft's Visual Basic.
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.
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.
The D-Flat TEXTBOX class Al discusses this month displays, scrolls, and pages through the text in textbox windows.
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.
In addition to catching up on his correspondence, Michael discusses graphics debugging and hi-res VGA page flipping.
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.
Copyright © 1991, Dr. Dobb's Journal
Use graphics and Boolean raster operations to estimate areas by determining the unit area represented by a single pixel.
Subclassing is an important--and misunderstood--method of intercepting and processing messages going to an object in Windows 3.
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.
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, 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.
Copyright © 1991, Dr. Dobb's Journal
High-performance, computation-intensive applications can benefit from parallel DSP architectures that are much faster than their general-purpose microprocessor equivalents.
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.
WISC computers borrow from the best of their RISC and CISC counterparts.
RISC processors present programming challenges, particularly in terms of fast floating-point events.
Ted and Dennis review B-tree concepts, then summarize their investigation into a simpler, more efficient approach to managing B-trees.
One of the unique aspects of the Infolio portable pen-based computer is that it's built around microcontrollers typically used with embedded systems.
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.
Explore the mysteries of Microsoft's SMARTDrive--the disk cache that's included with Windows 3, MS compilers, and MS-DOS.
Tiny BASIC put Tom Pittman on the front lines of the PC revolution.
This month's D-Flat discussion is on the EDITBOX window class.
Jeff explores event-driven programming, zeroing in on "focused" and broadcast events.
Michael moves into 3-D animation, starting with basic polygon fills and page flips.
Polya's How to Solve It presents a problem-solving method invaluable to all programmers.
Copyright © 1992, Dr. Dobb's Journal
This article shows you how a DOS application running in the enhanced 386 mode of Microsoft Window's application.
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.
This month, our authors continue their discussion of support macros and functions of the 386BSD kernel that drivers use to work devices.
This psuedo-random sequence generator is fast, statistically sound, machine independent, and optimized for 32-bit microprocessors.
In-circuit emulators make it easy to access protected-mode architectural features.
Al uses Microsoft C and Phar Lap's 286 DOS-Extender to develop an extensible graphics language that's loosely based on LOGO.
Paul shows how to make undocumented DOS calls from Windows' standard and enhanced modes.
Multimedia is all the rage, but what is it? And what kinds of machines will we need to find out?
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.
Events are an open-and-shut case with Turbo Vision, Borland's text-based windowing manager.
Michael uses backface removal to speed hidden surface handling of a single convex polyhedron.
Information theory is Andrew's focus as he examines Nelson's Data Compression, Lucky Silicon Dreams, and Leff/Rex's Maxwell's Demon.
Copyright © 1992, Dr. Dobb's Journal
The University of California Riverside Standard Library for 80x86 assembly language programmers provides a slate of useful high-level assembly language routines.
ASM programmers, like their high-level language counterparts, can use object-oriented programming techniques to develop reusable, maintainable code.
Contrary to popular notions, numeric coprocessor code can be optimized using assembly language in much the same way as integer-based code.
Entering, exiting, and masking various processor interrupts are covered this month.
Debugging device drivers is a snap with this monitoring program.
Abort procedures process Windows messages and yield control to applications on a regular basis.
Advanced Micro Devices' 29000 RISC coprocessor can achieve high performance without greatly impacting the hardware component cost of controller boards.
The Lotus OMI defines a platform-independent method for applications to exchange e-mail.
Blackbird, a communications library based on the ISO reference model architecture, was developed by Traveling Software for use in its file transfer software.
Michael looks to the future, when deciding what's relevant will be the key to success.
The D-Flat saga continues with LISTBOX window class, the base class for pop-down menus.
Jeff scales the twin towers of analysis and design.
Michael boosts the performance of his 3-D animation code using fixed-point arithmetic.
The "true" history of the computer industry depends on which book you read.
Copyright © 1992, Dr. Dobb's Journal
Fast wavelet transformations pick up where fast Fourier transforms leave off.
Ron discusses the design and implementation of a writer-dependent, platform-independent recognition engine for handprinted text.
The red-black algorithm, a twist on the classic binary search tree, uses an efficient mechanism for balancing trees.
BTC preserves image statistics, resulting in compressed images requiring 75 percent less disk space.
Precise sequence comparisons are basic to molecular biology research and handwriting recognition.
Our discussion of 386 BSD device drivers continues, focusing on interrupt routines.
Multiuser DOS from Digital Research is an MS-DOS compatible, multitasking operating system that's a good platform for control systems.
Ray shows how mathematical chaos works by graphically exploring Lorenz equations.
The rule-based paradigm in Mathematica's programming language lets you write code that closely matches the formulation of the problem to be solved.
Michael examines the life of Ada Lovelace and ponders whether programming is an art or a science.
Menus are added to D-Flat in this month's installment.
Jeff continues his exploration of Turbo Vision, focusing on how Turbo Pascal handles collections.
Raw speed and hidden surfaces are Michael's topics this month.
Andrew makes the case that the best programming books are written by and for programmers.
Copyright © 1992, Dr. Dobb's Journal
As we move into the world of electronic communication, the need for secure, private messaging becomes more and more important.
When it comes to high-speed data verification, Fletcher's checksum algorithm can do the job.
Mike ports an XModem engine from DOS to Windows using Windows' Comm API facilities.
This library of IPX functions can significantly improve Novell network throughput.
Over the next couple of months, we present the glue that lets you build an operational kernel.
Mark's implementation of the CRC-32 algorithm generates a unique 32-bit number.
Multiuser DOS from Digital Research is an MS-DOS compatible multitasking operating system that's a good platform for control systems.
Here's a TSR that bridges the gap between DOS and real- or standard-mode Windows.
Custom controls are central to Windows programming, particularly pencentric development.
Michael takes a look at UserTalk, Frontier's C-like scripting language.
The Application window class is the foundation of any D-Flat application.
To Jeff, Borland's Object Vision is really a Windows-based, event-driven programming language.
Michael opens his mail and finds alternative approaches to hidden surfaces, dual-monitor debugging techniques, bitblt "compiling," and more.
If you're a serious programmer, Andrew Tanenbaum's books should find a place in your library.
Copyright © 1992, Dr. Dobb's Journal
PC/RISC architectures give you the horsepower to run large-scale scientific applications.
Adaptive filters let you identify significant deviations from expected values.
Scientific data is often in gridded data format, and contouring is a way to view it.
Chuck Moore and others have a wide-ranging discussion about computing's changing landscape.
A "bare-bones" execve( ) system call is implemented this month.
Peter describes how to use a design tool to develop a team project.
The I2C bus is a two-wire synchronous serial interface for intelligent IC devices.
Barr examines X-arRAY, a Fortran library that manages extended memory and math operations.
FORTEX is a Fortran tool with a flexible UI that can be incorporated into applications.
Michael argues that the way we interact with computers is in the early stages of a paradigm shift.
Al discusses how to implement dialog boxes, and wraps up SD '92.
Jeff switches from Object Vision to Visual Basic in his look at Windows development tools.
Wu's method of antialiasing is Michael's focus this month.
Modern Operating Systems and The Design of OS/2 look inside today's operating systems.
Copyright © 1992, Dr. Dobb's Journal
Jim uses the DVI audio-video kernel to build a Windows program that captures video and audio from an analog source.
Create platform-independent multimedia applications using the techniques described here.
This sound-compression algorithm yields better than 6:1 compression on human voice and 3:1 on music.
"Seamless portability" means that you can transfer programs between different computers without relinking or recompiling the code.
Bill and Lynne take the final steps in their 386BSD journey.
Enter our handwriting recognition contest and win a PowerBook! Ray tells you how.
Fast 3-D spatial transformations and rendering can be made even faster using a graphics processor.
Apple's QuickTime is a system-wide architecture for handling sophisticated data elements, providing standard access to "time-based" data.
Giving Windows 3 the ability to import and manipulate graphics files created in another application needn't be a chore.
Michael tackles the related issues of multimedia and human-interface design.
Al develops D-Flat control windows and begins rewriting D-Flat in C++.
Streams under Turbo Vision are a prime example of what Jeff calls the Rubber Pipe fallacy.
Michael adds 3-D shading, a general color model, and 8088/286 support to X-Sharp.
As Ray points out, "ethics" and "computing" go hand-in-glove.
Copyright © 1992, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Copyright © 1992, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Are the computer and telecommunications industries butting heads instead of holding hands when building tomorrow's global communication networks?
Copyright © 1992, Dr. Dobb's Journal
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.
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.
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.
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 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.
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.
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.
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.
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.
"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.
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++.
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.
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.
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.
Copyright © 1992, Dr. Dobb's Journal
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.
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.
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, 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.
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.
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.
Information loss in dithering generally makes it possible to recover the original black-and-white image from a dithered image unless you "undither" it.
Scott enhances Borland's Turbo Vision by creating a method to extend event generation, which can be used to perform periodic or background functions.
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.
Debugging some programs is made a lot easier when you use compact, graphic displays.
Using test drivers simplifies the process of debugging motif widgets. Kamran presents one such test driver and discusses some of the common debugging pitfalls.
Mike develops a general-purpose expert-system shell to see how Borland's Turbo Pascal for Windows measures up as a Windows programming tool.
Where would you start if you had to write a portable application for Windows, Presentation Manager, Motif, Open Look, and the Macintosh?
What, Michael worry? You bet, especially when it comes to user-interface rights, wrongs, and usability.
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.
Software design means different things to different kinds of applications. Jeff investigates the issues surrounding program specification, design, and implementation.
Run-slice line drawing gains its efficiency by taking maximum advantage of available information, while minimizing redundant work. The result is high-performance graphics.
Ray has high praise for fellow columnist Andrew Schulman's Undocumented Windows.
Copyright © 1992, Dr. Dobb's Journal
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.
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.
Al discusses persistence, then presents a method for adding persistent objects to C++ programs by deriving applications classes from a persistent base class.
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 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.
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.
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.
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.
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.
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.
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.
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.
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.
Michael implements a fast assembler version of his run-length slice line-drawing routine before returning to the subject of page flipping.
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.
Copyright © 1992, Dr. Dobb's Journal
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.
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.
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 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.
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.
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.
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.
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.
Copyright © 1992, Dr. Dobb's Journal
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.
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.
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 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.
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.
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.
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.
Peter discusses his experiences in porting nearly 35,000 lines of C++ code from the Windows NT 32-bit API.
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.
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.
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.
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.
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.
Pamela McCorduck's Aaron's Code tells the story of Harold Cohen, his Aaron software, and the quest for realistic computer-generated art.
Copyright © 1993, Dr. Dobb's Journal
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 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.
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 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Copyright © 1993, Dr. Dobb's Journal
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.
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 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Copyright © 1993, Dr. Dobb's Journal
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 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Copyright © 1993, Dr. Dobb's Journal
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.
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.
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 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Copyright © 1993, Dr. Dobb's Journal
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.
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.
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.
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.
Our authors focus on the Astrophysics Data System and other applications that make the most of the distributed-computing paradigm.
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.
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.
Ken tackles optical character recognition using Matlab's Neural Network Toolbox. Matlab integrates matrix computation, numerical analysis, and data analysis--and without traditional programming.
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.
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.
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.
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.
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.
Rome wasn't built in three days--and neither BBS Michael set out to wire together using off-the-shelf objects.
Al presents JOYKEY, a joystick-driven keyboard simulator designed to provide handicapped computer users with a simple means of interacting with PC's.
Permutation algorithms are useful for arranging a sequence in all possible ways. Tom examines how they're implemented by Niklaus Wirth and Robert Sedgewick.
Ron Burk uncovers undocumented features of Windows' WinHelp facility, giving you yet another powerful tool for Windows development.
Fuzzy systems may or may not be logical. This month we examine fuzzy logic books, conference proceedings, and journals.
Copyright © 1993, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica Berg
Copyright © 1993, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Ray Duncan
Ray wraps up his multipart review of Internet books and provides a comprehensive list of Internet-focused books.
by Jonathan Erickson
by you
by Michael Swaine
Copyright © 1993, Dr. Dobb's Journal
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.
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.
by Aubrey Jaffer
Aubrey describes how he implemented lambda calculus in "Jacal," a symbolic mathematics system for the simplification and manipulation of equations.
by Andrew Schulman
Andrew takes a close look at the Windows "AARD" code which, under certain conditions, can generate a mysterious error message.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
Copyright © 1993, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
by Tom Swan
Tom presents a selection-sampling algorithm--a technique useful when reducing a large collection of records to a more manageable subset.
edited by Andrew Schulman
Pete Davis continues his exploration of the undocumented Windows .HLP file format.
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.
by Jonathan Erickson
by you
by Michael Swaine
Copyright © 1993, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Michael Swaine
Michael examines powerful tools for manipulating HyperCard extensions.
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.
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."
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.
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."
by Jonathan Erickson
by you
by Michael Swaine
Copyright © 1993, Dr. Dobb's Journal
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.
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.
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.
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.
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'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.
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.
Copyright © 1993, Dr. Dobb's Journal
by Al Stevens
No single Windows development tool can meet all of your needs. Al describes a multitool approach to Windows development.
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.
by Shankar Vaidyanathan
Here are interface statements and coding guidelines that let you write Fortran programs that call the Win32 C-type API directly.
by Al Williams
Al's VWinL library provides automatic window management for Windows 3.1, NT, and Win32s.
by Joseph M. Newcomer
When Joe needed a client/server architecture within the application itself, this was his solution.
by Ted Faison
Here's a C++ listbox class which manages all of the details for scrolling horizontally within a listbox.
by David Van Camp
Moving from Windows 3 to Windows NT needn't be a headache if you follow David's simple guidelines.
by Steven Reichenthal
The Windows API GetGlyphOutline() function is at the heart of this font-viewing program.
by Dan Brindle
Dan modifies the standard Windows radio button to create a custom VCR-style button.
by Ken North
Ken presents a C++ SQL class library for multi-DBMS programming.
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.
by Jonathan Erickson
Copyright © 1993, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1994, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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.
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.
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."
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.
by Tom Swan
Tom catches up on his mail and shares reader implementations of palindrome encryption and other algorithms.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1994, Dr. Dobb's Journal
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.
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.
by Joseph J. Graf
Joe's multiplatform implementations of the the Windows GetPrivateProfileString(), GetPrivateProfileInt(), and WritePrivateProfileString() functions support DOS and UNIX, too.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
edited by Tom Swan
Ernie Deel shares a data-compression technique that uses pattern recognition to quickly achieve efficient compression ratios.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1994, Dr. Dobb's Journal
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.
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.
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.
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!
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.
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.
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.
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.
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.
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.
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.
by Al Stevens
Borland's recent attempt to rewrite its software-license agreements didn't make anyone happy, especially programmers who use Borland tools.
by Tom Swan
Tom presents an information-retrieval system based on the trie-search algorithm.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1994, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Michael Swaine
Michael wonders what in the world is going on with operating systems, particularly when it comes to the PowerPC processor.
by Al Stevens
This month, Al launches "Quincy," a C-language interpreter with a D-Flat-based integrated development environment.
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.
by Andrew Schulman
Andrew had a front-row seat at the recent Stac Electronics vs. Microsoft court proceedings. Here is his report.
by Al Stevens
Bruce Schneier's recently published Applied Cryptography is a one-of-a-kind book that no programmer should be without.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1994, Dr. Dobb's Journal
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.
by Avram K. Tetewsky
Although they take radically different approaches, both ControlCalc and LabView are designed for building GUI-based, real-time control applications.
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.
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.
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.
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.
by Kamran Husain
Imake generates platform-specific makefiles. Kamran examines imake templates and rule files, then extends Imakefiles beyond the X Window System.
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++.
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.
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.
by Al Stevens
The Quincy preprocessor presented this month implements a subset of Standard C's preprocessing operators.
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.
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.
by Michael Floyd
Windows Programming Power with Custom Controls provides tips, tools, and techniques for the design and development of custom controls.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1994, Dr. Dobb's Journal
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.
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!
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.
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.
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.
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.
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.
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.
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.
by Michael Swaine
Michael wraps up his mushroom-identification programming project for the Newton MessagePad.
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.
by Tim Kientzle
The circle algorithm presented here is both fast and exact when plotting the closest points to the circle and drawing ellipses.
edited by Andrew Schulman
Ralf Brown examines the undocumented side of the private programming interface of QEMM, Quarterdeck's 386 memory manager.
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++.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1994, Dr. Dobb's Journal
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.
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.
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.
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.
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.
by Reginald B. Charney
Data attribute notation is an object-oriented coding style that emphasizes data abstractions.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Jonathon Erickson
by You
by Michael Swaine
by Monica E. Berg
Copyright © 1994, Dr. Dobb's Journal
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++.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Walter Oney
Walter takes a close look at the recently published Writing Windows Virtual Device Drivers.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1994, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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.
by Michael Swaine
Can software model the human mind? If so, what kind of model should it be? Michael examines these and other topics.
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.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1994, Dr. Dobb's Journal
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.
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.
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.
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.
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.
by Joe Celko
Partitions provide a means for dividing data into meaningful groups. Joe examines algorithms and techniques for efficient partitioning.
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.
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.
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.
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.
by Michael Swaine
The life and death of AI, robots, and Steve Ballmer's car are Michael's topics this month.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1994, Dr. Dobb's Journal
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.
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.
by Tim Kientzle
Tim's "XYModem" protocol automatically determines which XModem or YModem dialect is being used by the other end.
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.
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.
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.
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.
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.
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.
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.
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."
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1994, Dr. Dobb's Journal
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.
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.
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.
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.
by Les Wilson
Les analyzes how OS/2's Multimedia Presentation Manager uses multiple threads for full-motion video synchronization.
by Charles A. Mirho
The QUANTUMdsp board lets you download microcode from disk files, thereby redefining the QUANTUMdsp's functionality on-the-fly.
by Joe Sam Shirah
Joe Sam presents techniques for bitblts and screen repainting that let you create smoother, faster animations.
by Jack Krupansky
Jack describes a large multimedia application he wrote using the Liana programming system.
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.
by Jay B. Reimer
Jay explores the various audio-compression techniques and describes how DSPs can be used for higher performance in multimedia systems.
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.
by Michael Floyd
Copyright © 1994, Dr. Dobb's Journal
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.
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.
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.
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.
by William F. Jolitz and Lynne G. Jolitz
Very high-speed networking is the key to rapidly and economically delivering large amounts of information.
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.
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.
by Rahner James and Linus Sphinx
Build your own multiplayer network-game systems using the development tools provided here.
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.
by Jonathan Erickson
Copyright © 1994, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
by Al Stevens
Quincy, a C interpreter with a front end based on Al's D-Flat windowing system, is fast, small, and efficient.
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.
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.
by Jonathan Erickson
Copyright © 1994, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
by Joseph Firmage
Novell's AppWare Bus provides the tools and technologies to rapidly develop client applications that leverage existing network services.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
by Joseph Hlavaty
TrapMan, the Windows tool Joe presents here, is a debugging tool for analyzing exceptions in Windows applications.
by Michael Floyd
Copyright © 1994, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Michael Swaine
Michael mulls over what it means to be a programmer.
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.
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.
by Andrew Schulman
Andrew lifts the lid on some of Windows 95's internal structures, documented and otherwise.
by Peter Gulutzan
Making programs go faster is what Michael Abrash's Zen of Code Optimization is all about.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1995, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
edited by Bruce Schneier
Iwan Dobbe presents techniques for generating faster fast Fourier transforms, then implements these approaches in both C and assembler.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1995, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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.
by Raymond J. Schneider
Ray uses the PowerBASIC Developer Kit to write a Windows application for vocabulary-frequency analysis.
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.
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.
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++.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1995, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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.
by Michael Swaine
Michael takes a look-see at what's new with visual 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.
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.
edited by Andrew Schulman
Tim unravels the floating-point-division algorithm that Intel didn't quite implement correctly with its Pentium processor.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1995, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
by Matt Weisfeld
Matt presents routines in C, Pascal, Fortran, and Basic for using ANSI escape sequences on a variety of platforms.
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.
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.
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.
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.
by Michael Swaine
Before examining the pros and cons of visual programming, Michael mulls over the virtues of monkey wrenches.
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++.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1995, Dr. Dobb's Journal
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.
by Kanchan Kumar
The methodology Kanchan presents here consists of a language-independent abstraction model and a rule-based implementation model for C++ programmers.
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.
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.
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.
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.
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.
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.
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.
by Michael Swaine
Douglas Hofstadter's recently published Fluid Concepts and Creative Analogies may change the direction of AI research.
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.
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.
by Reginald B. Charney
Software Development with Z, by J.B. Wordsworth, uses the Z specification language to examine formal methods of software development.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1995, Dr. Dobb's Journal
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.
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."
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.
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.
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.
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.
by Peter D. Varhol
Peter presents one way of evaluating network traffic and routing packets without a large-scale computer network.
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.
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.
by Michael Swaine
Underscoring that everyone is getting on the Net, Michael discusses the Macintosh, WWW, and Mac WWW software.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1995, Dr. Dobb's Journal
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.
by Rex Jaeschke
Rex, chair of the X3J11 committee on ANSI C, reports on recent developments concerning the C language.
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.
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.
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.
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++.
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.
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.
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.
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.
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.
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.
by Michael Swaine
Michael walks the Cyberdog as he reflects on this year's Apple Worldwide Developer's Conference and Apple's Internet strategy.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1995, Dr. Dobb's Journal
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.
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.
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.
by Robert Sardis
Bob discusses how to access Visual Basic control properties at run time, then presents a collection of access functions.
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.
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.
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.
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.
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.
by Tim Parker
Tim looks at five C/C++ compilers for the Sparcstation, including those from SunSoft, Cygnus, Edinburgh, MetaWare, and Ready to Run.
by Michael Swaine
Michael plays the numbers game in this month's column.
by Al Stevens
Al builds an electronics music system for Windows 95 and NT.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1995, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Michael Swaine
Michael takes a look at Sun's HotJava Web browser, as well as Java, the programming language it was written in.
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.
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.
by Ray Valdés
A good C++ book can be hard to find. Ray looks at some of the better ones.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1995, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
by William Stamatakis
Bill shows how programs written in Visual Basic and Delphi can communicate via the MAPI interface.
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.
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.
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).
by Al Stevens
Raycast, a ray-casting engine written entirely in C++, is the project that Al offers up this month.
edited by Bruce Schneier
Mani Iyer proposes an algorithm for permutation generation using matrices.
by Michael Swaine
Books by and about Richard Feynman are the focus of this month's "Programmer's Bookshelf."
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1995, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
edited by Bruce Schneier
Gene Callahan discusses how to generate sequential keys in an arbitrary radix.
by Ray Duncan
Stephen Talbott's The Future Does Not Compute and Clifford Stoll's Silicon Snake Oil present contrasting views of cyberspace.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
Copyright © 1995, Dr. Dobb's Journal
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.
by Al Stevens
Theatrix is a C++ class library that encapsulates the operations of a typical game arcade.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Jonathan Erickson
Copyright © 1995, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
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.
by Marc E. Brown
Marc discusses the difference between software's protectable "form of expression" and its unprotectable "underlying ideas."
by Jonathan Erickson
Copyright © 1995, Dr. Dobb's Journal
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.
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.
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.
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.
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.
by Michael Abrash
Michael reflects on the last decade before he continues his discussion of BSP trees.
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.
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.
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.
by Michael Floyd
Copyright © 1995, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
by Marc E. Brown
Marc discusses when software can be patented, how to patent it, and how you can deal with patent-infringement allegations.
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.
by Michael Floyd
Copyright © 1995, Dr. Dobb's Journal
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.
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.
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.
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.
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.
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.
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.
by Hal W. Hardenbergh
As Hal shows here, pushing the clock can give you more bang for your Pentium buck.
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.
by Jonathan Erickson
Copyright © 1995, Dr. Dobb's Journal
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.
by Tong Lai Yu
Dynamic Markov Compression is a statistical compression technique that produces good results when applied to large binary files.
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.
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.
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.
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.
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.
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.
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.
by Trevor J. Pope
Many embedded systems require access control. Trevor implements the MD5 message-digest algorithm to implement one-way encryption of passwords.
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.
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.
by Gunter Born
After examining the TARGA graphics file format, Gunter builds a TARGA viewer using Borland's Delphi development environment.
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.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
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.
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.
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.
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.
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."
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.
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.
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.
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.
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.
by Michael Swaine
Before continuing his examination of little languages for the Macintosh, Michael looks at a number of books devoted to HTML coding.
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.
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.
by Dean Gahlon
Dean compares Practical Algorithms for C Programmers, by Andrew Binstock and John Rex, and Practical Algorithms in C++, by Bryan Flamig.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
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.
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.
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.
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.
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.
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.
by Jonathan Roberts and Dan Zigmond
Our authors use OODCE, a C++ library originally developed by Hewlett-Packard, to develop a distributed application.
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.
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.
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.
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.
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.
by Al Stevens
Al continues his development of Quincy 96, a Windows 95 IDE for GNU C/C++. This month he builds the debugger.
edited by Bruce Schneier
John DeVos presents a compact logarithm algorithm that trades off accuracy for size and performance.
by Lou Grinzo
Matt Pietrek's Windows 95 System Programming Secrets grabbed Lou's attention this month.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Michael Swaine
Reading Andrew Davison's Humor the Computer sends Michael down the road of Paradigms Past.
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.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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++.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
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.
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.
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.
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.
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.
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.
by Ted Faison
Borland's recently released Delphi 2.0 environment supports 32-bit applications, client/server development, team programming, and more.
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.
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.
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.
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.
by Cliff Berg
How do you write a Java-based chat program? Cliff shows you how, starting with a C++ server and Java client.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
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.
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.
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.
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.
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.
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.
by Joseph Hlavaty
Joe created WinMock, short for "Windows Sockets Mockup Tool," for testing and debugging Windows Sockets applications, without a network connection.
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.
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.
by Michael Swaine
As Michael finds out this month, what can go wrong, will go wong, er, wrong.
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.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Cliff Berg
How do you send e-mail from a Java applet? Cliff shows you how.
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.
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.
by Phil Mitchell
Phil examines Andrew Hodges' Alan Turing: The Enigma and Bruce Blum's Beyond Programming: To a New Era of Design.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
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.
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.
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.
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.
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.
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.
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.
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.
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++.
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.
by Michael Swaine
Michael strides forth into the field of software design.
by Al Stevens
This month, Al answers the fundamental C++ programming questions he posed in August.
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.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Monica E. Berg
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.
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.
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.
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++.
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.
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.
by Derek Cheung
Derek examines how you can apply OMT for analyzing and developing software for a simple Asynchronous Transfer Mode (ATM) switch.
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.
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.
by Michael Swaine
What's the state of computer science today? Michael finds out, as he examines a book of the same name.
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.
by Cliff Berg
How do you display media formats that Netscape does not support? Cliff presents an applet that makes this possible.
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.
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.
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.
by Jonathan Erickson
by you
by Michael Swaine
by Eugene Eric Kim
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Cliff Berg
How threads work and how you can create a general-purpose event scheduler are Cliff's focus this month.
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.
by Robert R. Collins
Robert presents a processor-detection algorithm that doesn't use Intel's CPUID instruction.
by Eric McRae
Eric examines The Benchmark Book, by Richard Grace, and C Algorithms for Real-Time DSP, by Paul M. Embree.
by Jonathan Erickson
by you
by the DDJ staff
by Michael Swaine
by Eugene Eric Kim
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.
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.
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).
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.
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.
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.
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.
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.
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.
by Michael Swaine
The personal computer revolution was more than a Silicon Valley phenomenon.
by Al Stevens
Al reports on what the experts have to say about delete this;, then presents a generic Undo class library.
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.
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.
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.
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.
by Jonathan Erickson
by you
by the DDJ staff
by Eugene Eric Kim
by Michael Swaine
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.
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.
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.
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.
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.
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.
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.
by Al Williams
Al kicks off a new column by showing how you can wrap an existing Windows control within a Delphi component.
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.
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.
by Michael Floyd
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.
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.
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.
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.
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.
by Michael Abrash
After considering some alarming trends in programming, Michael moves on to discuss 3-D clipping--particularly polygon and viewspace clipping.
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.
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.
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.
by Michael Floyd
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.
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.
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.
by Mark Seminatore
Mark's 2-D game engine includes modules that support VGA displays, keyboard, animation, and file management.
by George Wright
George uses the VisualAge C++ collection classes to develop event, track, and MIDI file classes that produce realistic-sounding audio.
by Ron Fosner
OpenGL is a graphics API that allows portable, hardware-assisted 3-D rendering.
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.
by Hal W. Hardenbergh
CPU vendors' eyes are sometimes bigger than their stomachs, at least when it comes to delivery on performance promises.
by Al Williams
This month, Al shows you how to create DLLs using Visual Basic 4.0 and Borland's Delphi 2.0.
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.
by Allen Holub
In his return to Dr. Dobb's, Allen describes what it takes to get into the object-oriented design game.
by Tim Kientzle
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.
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.
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.
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.
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.
by Baylor Wetzel
Baylor presents an awk-like PowerBuilder nonvisual user object for string parsing that provides integration with databases and graphical objects.
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.
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.
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.
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.
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.
by Tim Kientzle
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.
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.
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.
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.
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.
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.
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.
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.
by Hal W. Hardenbergh
Will web servers revitalize the SMP (symmetrical multiprocessing) market? Hal examines SMP's chances for success.
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.
by Tim Kientzle
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.
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.
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.
by Mary Kroening
WebLS is a logic-based system that's designed to "automatically" answer commonly asked technical-support questions via the Web.
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.
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.
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.
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.
by Hal W. Hardenbergh
DRAM and the future of Windows NT are Hal's focus in this issue.
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.
by Marc E. Brown
What really happens when software is involved in a legal dispute? Marc examines the anatomy of a software lawsuit.
by Allen Holub
The next battles in the component architectures war may pit OLE against Java. Allen examines the two competing object models.
by Tim Kientzle
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.
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.
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.
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.
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 is a branch of cryptography that deals with concealing messages.
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.
John uses Xlisp to implement a computer simulation of the essential components of the Denver airport automated baggage fiasco, er... system.
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.
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.
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.
Michael looks at paradigms past, focusing this month on spreadsheets.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Apple, Java, and the BeBox are on Michael's mind this month.
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.
This month, Cliff shows how you can use Java's distributed programming model and access a SQL database from a Java applet.
Hoping to find the most efficient line between two points, Oleg examines scheduling algorithms and NP-complete problems.
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.
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.
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.
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, 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.
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.
"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.
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.
Ron examines the leading C++ compilers for creating Win32 executables, including Borland C++, Visual C++, Symantec C++, Watcom C++, and VisualAge C++.
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.
Michael analyzes what the Apple-NeXT alliance means to Steve Jobs, Apple Computer, and you.
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.
The Java Remote Method Invocation API, which Cliff describes this month, provides new host-based services and more -- all downloadable in an applet.
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.
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.
This month, Greg examines Steve McConnell's Rapid Development and Graphic Java: Mastering the AWT by David M. Geary and Alan L. McClellan.
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.
Originally pursued for purely aesthetic reasons, elliptic curves have recently been utilized in devising algorithms for factoring integers, primality proving, and public-key cryptography.
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.
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 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.
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.
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
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.
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.
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.
Al uses JavaScript and C to build an order-entry system for his web page.
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.
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).
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.
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.
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.
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.
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.
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.
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."
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.
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.
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.
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.
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").
From his jabs at Java to the premature reports of TKSolver's demise, Michael digs into his mailbag.
Al takes a look at Borland's new C++Builder -- and likes what he sees.
Cliff uses Marimba's Castanet software to implement Internet Push channels
using Java.
Trigonometric functions can be used to create spline curves that are, in many ways, superior to the more-common cubic splines.
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.
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.
"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.
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.
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.
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 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 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by John Calcote
As John points out here, thread pools provide one way of improving server performance.
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.
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.
by Michael Swaine
Michael returns to the topics of Java bashing, Java books, and JavaBeans.
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.
by Clif Berg
Cliff uses the JDK 1.1 multilanguage feature to create a multilingual currency calculator.
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.
by Robert R. Collins
Robert discusses the basics of in-circuit emulation, describing how it has become his primary software debugging tool.
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.
by Jonathan Erickson
by you
by the DDJ staff
by Michael Swaine
by Eugene Eric Kim
Copyright © 1997, Dr. Dobb's Journalby 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.
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.
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++.
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++.
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++.
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.
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.
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.
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.
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.
by Michael Swaine
Irony is music to Michael's ears in this month's column.
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."
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.
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.
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.
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.
by Jonathan Erickson
by you
by the DDJ staff
by Eugene Eric Kim
by Michael Swaine
Copyright © 1997, Dr. Dobb's Journalby 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Al Stevens
Al's scratching his head over what's going on with the proposed C++ standardization.
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.
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.
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.
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.
by Jonathan Erickson
by you
by the DDJ staff
by Eugene Eric Kim
by Michael Swaine
Copyright © 1997, Dr. Dobb's Journalby 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.
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.
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.
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.
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.
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
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.
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.
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.
by Bennett Griffin
Bennett uses the Langner Universal Communications API to build a multiprotocol terminal emulator that works across various media.
by Michael Swaine
Macs, Flaks, and Illiacs. Michael continues to follow the goings-on at Apple.
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.
by Clif Berg
Java servlets represent a new model for developing server-based applications. Cliff shows you how to write them.
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.
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."
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.
by Jonathan Erickson
by you
by the DDJ staff
by Eugene Eric Kim
by Michael Swaine
Copyright © 1997, Dr. Dobb's Journalby 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.
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.
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.
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.
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.
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.
by Jay Johansen
Jay presents "dynadd," a general-purpose, template-driven CGI application that automatically updates web sites.
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.
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.
by Michael Swaine
Copy protection doesn't help at all in Michael's column this month.
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.
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.
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.
by Robert R. Collins
Robert continues his examination of in-circuit emulators and the Pentium by looking at the Pentium's ICE Mode.
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.).
by Jonathan Erickson
by you
by the DDJ staff
by Eugene Eric Kim
by Michael Swaine
Copyright © 1997, Dr. Dobb's Journalby 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Clif Berg
Cliff demonstrates Java's dynamic class-loading features by creating a remote object browser that uses RMI.
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.
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.
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.
by Jonathan Erickson
by you
by the DDJ staff
by Eugene Eric Kim
by Michael Swaine
Copyright © 1997, Dr. Dobb's Journalby 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.
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.
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.
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.
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.
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.
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.
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.
by Hal W. Hardenbergh
With a little help from his friends, Hal previews Intel's upcoming 64-bit CPU architecture, code-named "Merced."
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.
by Allen Holub
Allen wraps up his examination of ActiveX versus Java, at least when it comes to using them on web pages.
by Tim Kientzle
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.
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.
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.
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.
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.
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.
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.
by Al Williams
Al examines Optima++, PowerSoft's highly graphical C++ visual-development environment.
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.
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.
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.
Editorial 4
by Tim Kientzle
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.
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.
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.
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.
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.
by Saurabh Dixit
When managing visual objects becomes a chore, you need a tool like the "Visual User Interface Manager" Saurabh presents here.
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.
by Al Williams
This month, Al explains how to reuse existing ActiveX components to make new ActiveX components with Visual Basic 5.
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.
by Ken North
In his inaugural column, Ken discusses ODBC, JDBC, and the database programmer's quest for a black box.
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.
by Tim Kientzle
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.
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.
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.
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.
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.
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.
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.
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.
by Allen Holub
Allen reviews some recommended reading.
by Marc E. Brown
Step-by-step, Marc takes you through the process of copyrighting software.
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.
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.
by Tim Kientzle
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Marc E. Brown
So you want to hire your competitor's top programmers? Marc examines the pitfalls in doing so.
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.
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.
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.
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.
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.
by Vincent Van Den Berghe
The C++ class Vincent presents here was specifically designed to meet the large file requirements of CD-ROMs.
by Pieter Hintjens and Pascal Antonnaux
The XITAMI web server, which Pieter and Pascal designed, is a portable, multithreaded server written in Cand it's freely available!
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.
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.
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.
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.
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 askedand the answers you should be able to provide.
by Eugene Eric Kim
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Al Stevens
Al shares his Top Ten list for how to stay in demand in the shifting sands of technology and employment.
by Al Williams
To illustrate how you can use loops with Visual Basic control arrays, Al presents a phone dialer application.
by Allen Holub
Allen discusses the differences between computer science in the classroom and computer programming in the real world.
by Gregory V. Wilson
Greg asks some of the most influential programmers and computer scientists what books they read.
by Eugene Eric Kim
DDJ
A Java pioneer looks at the state of the art, Java-wise, and wonders if it is ready for prime-time business applications.
Ken examines the ActiveX technology called Automation (formerly "OLE Automation"), and shows how you can implement it in Java.
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.
Assertions act like watchdogs that assist you in finding bugs earlier in the development process. Our authors show how you implement assertions for Java.
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.
"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.
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.
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.
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.
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.
Will the next killer app really be a "FUDchecker"? And, if so, will it be written in Java?
Conferences, committees, and CodeWizard are the three Cs that Al sails this month.
Resizable data structures are flexible, but array-based structures are fast. John shows you how to get the best of both worlds.
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.
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.
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.
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, 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.
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, 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.
Tim uses Perl to write a smart print filter that recognizes the type of data it is being fed and invokes the appropriate conversion.
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.
Mvcl, the programming language Russell presents here, was designed to do a particular job. It also provides an excellent model for designing reusable software.
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.
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.
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.
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.
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.
How do you transfer data securely between two locations? Cliff shows you how, using the SSLava security toolkit from Phaos Technology.
"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.
George and Scot continue their examination of Microsoft's Active Template Library, this month focusing on ATL's ActiveX Control architecture.
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.
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.
The metrics Shari describes here help you better understand code, control testing, and predict faults and failures.
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.
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.
Find out where the performance bottlenecks in your Java programs are with the JVM performance visualizer presented here.
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, the utility John presents here, gives you a list of the versions of all the components of relevance to your program.
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.
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.
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.
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.
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.
Al launches a new project this month -- the C++ Persistent Template Library, for adding persistence to containers.
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.
Many programs need to predict the behavior of external systems. William shows how exponential smoothing fills the bill for a variety of applications.
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.
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.
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.
by David Vandevoorde
The stepwise derivation of the algorithm David presents here illustrates a number of principles that are widely applicable in algorithm design.
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.
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.
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.
by Bruce Radtke
Bruce examines Windows CE and its development environment, focusing on the differences between Version 1.0 and 2.0.
by Dale Roberts
DIORQ, the program Dale presents here, analyzes NT's interrupt system, illuminating its problems, limitations, and potential.
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.
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.
by Bryan Morgan
Bryan examines the concepts behind CORBA-based development, using Borland's JBuilder and Visigenic's VisiBroker for Java.
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.
by Al Stevens
AntiPatterns and release 2 of his Persistent Template Library are the topics of Al's column this month.
by Cliff Berg
How do you interface Java to your PalmPilot? Cliff shows you how, using IBM's new "PilotBean" Java interface.
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.
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.
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.
by Robert Bernecky
John Hennessy and David Patterson's Computer Architecture: A Quantitative Approach, Second Edition is a landmark computer-science book.
by Jonathan Erickson
by you
by the DDJ staff
by Eugene Eric Kim
by Michael Swaine
Copyright © 1998, Dr. Dobb's JournalDATE 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.
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.
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.
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.
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.
by Jonathan Erickson
by you
by the DDJ staff
by Eugene Eric Kim
by Michael Swaine
Copyright © 1998, Dr. Dobb's Journalby Jagdish Bansiya
DP++, the tool Jagdish presents here, automates design pattern detection, identification, and classification in C++ programs.
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.
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.
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.
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.
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.
by Ofer LaOr
Ofer describes his oCGI2 library, which lets you develop true CGI applications using Visual Basic.
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.
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.
by Michael Swaine
Is there a pattern in Apple's decision to jettison the Newton? Michael unravels the whole sorted story.
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.
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.
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.
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).
by Dennis E. Shasha
The police commissioner pays a visit to Dr. Ecco's apartment -- not looking for trouble, but answers.
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.
by Jonathan Erickson
by you
by the DDJ staff
by Eugene Eric Kim
by Michael Swaine
Copyright © 1998, Dr. Dobb's Journalby 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.
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.
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.
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.
by André LaMothe
Affine texture mapping is fundamental to many forms of 3D rendering, including light interpolation and other sampling type operations.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Jonathan Erickson
by you
by the DDJ staff
by Eugene Eric Kim
by Michael Swaine
Copyright © 1998, Dr. Dobb's Journalby 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.
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.
by Kevin Haverlock
Kevin presents a technique for exchanging data between Java and C++ using object serialization over a TCP/IP sockets connection.
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.
by Nathan Myers
Nathan discusses how the Standard C++ Library supports internationalization and offers tips on using the C++ locale library.
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.
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.
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.
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.
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.
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.
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.
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.
by Cliff Berg
Cliff shows how you can use encryption to protect data at its point of origin or destination.
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.
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.
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.
by Jonathan Erickson
by you
by the DDJ staff
by Eugene Eric Kim
by Michael Swaine
Copyright © 1998, Dr. Dobb's Journalby 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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Al Stevens
Al takes a look the recently finalized Standard C++ and reflects on what it means for working programmers.
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.
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.
by Dennis E. Shasha
Dr. Ecco and Liane take on Wall Street this month as they tackle the problem of options.
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.
by Jonathan Erickson
by you
by the DDJ staff
by Eugene Eric Kim
by Michael Swaine
Copyright © 1998, Dr. Dobb's Journalby 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.
by Robert Krten
Robert examines two radically different device drivers and their implementation under QNX Software's QNX 4 real-time operating system.
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.
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.
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.
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.
by William M. Stein
William describes an intelligent Forth-based controller that utilizes New Micros' Forth implementation running on a Motorola MC68HC11-based system.
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.
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.
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.
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.
by Al Stevens
Al reports on his trip to Kuala Lumpur and keeps up to date on the C++ namespace goings on.
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.
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.
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.
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.
by Jonathan Erickson
by you
by the DDJ staff
by Eugene Eric Kim
by Michael Swaine
Copyright © 1998, Dr. Dobb's Journalby 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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).
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.
by Dennis E. Shasha
Dr. Ecco and Liane use "directed evolution" to cure the ills that ail some.
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.
by Jonathan Erickson
by you
by the DDJ staff
by Eugene Eric Kim
by Michael Swaine
Copyright © 1998, Dr. Dobb's Journalby 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Jonathan Erickson
by you
by the DDJ staff
by Eugene Eric Kim
by Michael Swaine
Copyright © 1998, Dr. Dobb's Journalby 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.
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.
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.
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.
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?
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.
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.
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.
by Eugene Eric Kim
by Kurt Sandholtz
Kurt presents the Four Stages career management model, which focuses on career growth in terms of development stages.
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.
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.
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.
by Barry Boone
A "Sun Certified Java Programmer" identifies you as someone who has taken the time to be recognized as an expert.
by Gary M. Stern
Working overseas can give a boost to your career and provide you with lifelong experiences.
by Paul J. Kostek
The performance review can be a useful means of collecting feedback for guiding your career.
by Debra Webster
Internationalization involves writing language and locale-neutral software and lead to local jobs for global markets.
by Eugene Eric Kim
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.
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.
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.
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.
by Cliff Berg
Cliff presents a Java expression parser that complements the tokenizer classes that are already built into the language.
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.
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.
by Ron Klatchko
The dynamically reconfigurable server Ron presents here is implemented in Python, a portable, interpreted, extensible object-oriented programming language.
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.
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.
by Michael Swaine
Among other topics, Michael discusses Squeak, a freely available implementation of Smalltalk that includes a web browser and mail client.
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.
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.
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.
by Dennis E. Shasha
The future of Sweden depends on how good Dr. Ecco is at pattern recognition.
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.
by Jonathan Erickson
by you
by the DDJ staff
by Eugene Eric Kim
by Michael Swaine
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.
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.
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.
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.
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.
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.
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.
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.
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."
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.
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.
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.
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.
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.
by Dennis E. Shasha
Dr. Ecco and Liane dig up some dirt about archeologists in this month's installment.
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.
by Jonathan Erickson
by you
by the DDJ staff
by Eugene Eric Kim
by Michael Swaine
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.
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.
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.
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.
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.
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.
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.
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.
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.
by Michael Swaine
Nanotechnology is a big deal in Michael's mind this month.
by Al Stevens
Al puts Quincy 99 and D-Flat 2000 on hold as he continues his discussion of Standard C++.
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.
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.
by Dennis E. Shasha
Ecco and crew look for the most efficient way to mix trains, stations, and passengers.
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.
by Jonathan Erickson
by you
by the DDJ staff
by Eugene Eric Kim
by Michael Swaine
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.
The incremental approach to addressing algorithmic problems Udi presents here is particularly useful as a way of arriving at possible new algorithms.
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.
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 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.
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.
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.
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.
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.
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.
Michael separates the blarney from the chaff this month, as he meanders through the world of computing.
Before putting the "scroll" back in his scrolling editor, Al asks the questions "What is Java?" and "Who the heck you gonna believe, anyway?"
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.
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.
The plans for a modular spacestation are up in the air, until Dr. Ecco and crew introduce some down-to-earth solutions.
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.
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 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.
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 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.
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.
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.
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.
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.
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.
Al ponders the question, "What's in an argv?" and speculates on why the answer is different for DOS and UNIX developers.
How do you run untrusted classes? Lou takes a look at a couple of different answers to this question.
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 joins forces with the NSA, FBI, and other crime-stoppers to help fight web terrorism.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Did Xerox PARC blow it? Has HP lost its way? Can Linux really be for dummies? Michael asks and answers these and other questions.
Al's project this month is a Jukebox that maintains a list of standard MIDI Format files.
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.
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 and Liane discover that there's an art to putting together the pieces of a geometric puzzle.
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.
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.
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.
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.
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.
Tilo's SyncBuilder framework lets you write Java applications that communicate with Palm Computing devices and that run on any platform.
SimpleChat, the Niche Area Network protocol Jaromir introduces here, is designed for applications where cost efficiency is more important than very high data rates.
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.
Peter shows how to use the Microsoft Speech SDK to voice-enable your Windows apps by adding command-and-control voice recognition to applications.
1984 -- the year, not the book -- was a watershed in the history of personal computing.
Al reports on what it's like to go on tour with a world-famous author like the legendary Herb Schildt.
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.
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.
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.
The focus of Jeff's review this month is Linux Network Administrator's Guide, by Olaf Kirch.
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.
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.
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.
Dave presents a Visual C++ MFC program that combines Mindstorms RCX code with C++ code to control a robot's behavior.
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.
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.
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.
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.
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).
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.
Dummies for dummies? Yes, that, C++, and more -- including a wild argument on wild arguments.
Can Java handle exception handling? You bet, and David shows you how in this month's column.
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 and sidekick Liane try to solve tomorrow's problems at NASA today.
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.
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 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.
Max examines MMX-code optimization techniques and shows how you can achieve maximum speed on the Intel Pentium II and AMD K6-2 processors.
Harold presents tips and tricks for writing high-performance, computationally intensive, graphical Java components.
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.
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.
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.
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.
Michael's column this month was a long time coming -- but was worth the wait.
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.
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.
Thomas examines a trio of algorithms for generating simple -- yet precise -- line drawings from complicated -- yet imprecise -- 3D models.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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!
In this brief column, Al reports on his visit to the 9th Annual Shareware Conference.
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.
Median filters are useful tools in digital signal processing. Wesley examines their use for removing impulsive signal noise while maintaining signal trends.
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.
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.
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.
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.
Sven untangles the mysterious Windows NT NtQuerySystemInformation function.
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 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.
Regan presents BeRays, an object-oriented ray-tracer application that makes it easy to plug in new rendering ideas.
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.
Jbed, a small, fast Java Virtual Machine for embedded real-time systems, includes a complete real-time operating system.
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.
The XML|IT toolkit from CareFlow lets you automatically tag results returned from calls to CORBA services, then format them using XML.
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.
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."
Does Java support Design by Contract? Not directly, but as Krishnan shows here, support is still possible.
Unsharp masking is a photographic technique that increases the sharpness of photographic images. Tim presents an algorithm that implements this concept.
One man's Calabaza is another man's pocket watch, as Ecco and Liane discover this month.
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.
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.
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.
The need to address IPv4's lack of security has prompted the release of a number of standards, protocols, and applications.
Andrew compares elliptic-curve cryptography to other cryptosystems. In the process, he shows how elliptic-curve cryptosystems are built.
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.
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.
The Extensible Forms Description Language is an XML extension language that addresses key problems involved with doing electronic commerce on the Web.
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++.
For Michael, James Gleick's new book Faster comes just in time.
Al weathers hurricane Floyd, as he continues to build a C++-based generic, platform-independent graphics library.
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.
Jon is out of sorts, as he grapples with the Merge Sort and similar algorithms this month.
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.
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.
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.
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."
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 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.
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.
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.
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.
We review some of the best and most essential books for software professionals.
Where should you focus your career-development efforts? Reg analyzes technical employment listings to find the answer.
The Programmer Analyst Aptitude Test from Walden Testing has become an essential tool for evaluating high-tech hires.
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.
Good system administrators, who possess problem solving skills, people skills, and organizational skills, are in demand in the high-tech job marketplace.
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.
Generic programming does not have to sink to the lowest common denominator. And therein lies the value of type traits.
If you aren't familiar with C++ namespaces, you should be because most compilers now support them.
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.
Our authors describe an interactive C++ metrics tool that makes automated metrics gathering a natural part of the development process.
MACtimes are perhaps one of the most potentially valuable forensic tools in your digital detective toolkit. Dan shows how to use them.
Steve McConnell takes time to talk with us about what it means to be a programmer, entrepreneur, consultant, educator, author, and editor.
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.
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.
Ryan examines the Apache Portable Run-Time, a library that is designed to address the Apache web server's portability problems.
Michael describes how branching and merging works in CVS, a widely used GNU source-code control system.
Zombies come out of the woodwork as Michael looks at the history of the personal computer.
Al shares what he heard at the annual Shareware Conference.
How can you measure Java code performance? Karl examines techniques for instrumenting Java code at run time.
David first presents a simple alphanumeric-ordering function, then describes another function suitable for comparing long filenames.
Saving the X-mammal is the challenge that Liane and Dr. Ecco face this month.
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.
Pnuts is a language, API, and interpreter that provides a thin procedural wrapper with an interactive interface for manipulating Java objects.
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.
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 (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).
Building scripting languages can be a time-consuming tasks. Sergei presents a pair of tools to simplify development.
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.
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.
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.
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.
It's more than a change in the weather that has Michael scratching his head this month.
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.
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.
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.
Ecco and Liane do lunch and go Hollywood, as they look for ways to keep a low-budget just that.
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.
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.
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 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.
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.
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.
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.
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.
Webrelay is a freely available multithreaded HTTP relay server that authenticates that clients are legitimate users before they are connected to vendor web servers.
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.
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.
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.
Our authors show what you can do when Java exhibits classic memory leak behavior -- unbounded memory growth leading to poor performance and eventually crashing.
Michael presents some key optimizations (with source-code examples) that can be made to make RSA algorithm as fast as possible.
Landmines are a nasty piece of work, indeed. Ecco and Liane need to come up with ways to make removing them a safer proposition.
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.
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.
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.
UNIX daemons are programs that run in the background, letting you do other work in the foreground. Len presents a "recipe" for testing them.
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.
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.
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.
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.
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.
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.
When we look back at it, 1999 might have been a breakthrough year for nanotechnology, as big advances were made in tiny computers.
Smart iterators might not be such a dumb idea, but, as Al points out, there are costs associated with them.
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.
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.
Benjamin Baskerhound has turned over a new leaf, this time coming to Ecco and Liane for help, rather than mischief.
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.
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.
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.
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.
Which sorting algorithm is the fastest? Stefan presents his answer to this age-old question.
Joshua examines several incremental memory-management algorithms, including simple user-defined reference counts, before turning to analyzing the global connectedness of pointer structures.
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.
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.
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.
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.
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.
Current reports present conflicting views of the job market for information technology workers. Richard goes below the surface to uncover the real story.
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.
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.
Michael ain't misbehavin' as much as he's misinformin'. Of course, that's not his fault.
Ramblin' Jack Elliot has nothing on Al this month, as our man in C rambles from one topic to another.
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.
Caching often works well, but sometimes fails utterly. In this column, Jon examines why that happens and what you can do about it.
There's bad blood around Ecco's flat, as the good doctor and his sidekick Liane lend a hand to medical science.
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.
The Media Gateway Control Protocol is a lightweight telephony protocol that promises reduced complexity and increased reliability for digital Internet phones.
Although it defines a new medium and transmission specification, the Gigabit Ethernet spec is based on the same strategy as 100-Mbits/sec. Ethernet.
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.
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.
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 and speculation are viable techniques for improving software performance, and the emerging class of processors and compilers are supporting it.
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.
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.
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.
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.
Michael reports on Eazel, a Linux startup for Macs, and gets small with nanotechnology.
Al considers the upside and downside of using classes and functions from the Standard C++ library.
How do you use Servlets for state and session management? David shows you how.
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.
Ecco and Liane find out it's better to be rich and healthy than sick and poor.
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.
Metis is an object-oriented development methodology that includes all the usual tasks found in a generic software project lifecycle.
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.
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++.
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.
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.
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.
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.
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.
Ronn examines a number of useful Internet tools, including packet-collection software, Internet-throughput software, ISP-measurement software, and the like.
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.
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.
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.
Can you implement COM components using Java? Yes, and Jacob shows you how.
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.
Are Ecco and Liane the antidote for a deadly new strain of microvirus? Read and find out.
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.
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.
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.
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.
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.
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 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.
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.
AutomatedUpdate, the program Max presents here, lets applications check file versions and automatically update themselves.
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.
David examines one approach to delivering publish/subscribe capabilities for web-enabled distributed object systems based on JavaScript clients and CORBA servers.
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.
The authors of the Cluetrain Manifesto argue that markets are being transformed in a fundamental and revolutionary way by the Internet.
Al goes undercover, then chats with Richard Stallman about Free Software, Linux, and more.
Does Java have "find" functionality? It does now, as David describes his implementation.
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.
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.
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.
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.
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.
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 is a new method for zooming images with a minimum of computation, while keeping smooth regions smooth and sharp edges sharp.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Nefarious criminals might be able to foil robotic prison guards, but out-thinking Ecco and Liane is another task altogether.
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.
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.
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.
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.
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.
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.
Solving computer mysteries require skills detectives and programmers have in common -- logical thinking, understanding cause and effect, and possessing an open mind.
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.
CORDIC algorithms are efficient in terms of both computation time and hardware resources -- and in most microcontroller systems, these resources are normally a premium.
E-commerce is mostly about using and interacting with databases. David presents some unique approaches in integrating a database with web sites.
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.
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.
It was only a matter of time before "Me, Myself, and Al" surfaced, as our intrepid programmer meets our intrepid musician.
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.
Ron presents techniques for exploiting the parallelism of bitwise operations to speed up some kinds of 64-bit computing tasks.
Ecco and Liane go ape over chimps in this month's installment.
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.
Although more complicated, the Leighton-Micali protocol is more elegant, efficient, and secure than the venerable Kerberos security protocol.
The Secure Electronic Transaction (SET) is an open encryption and security specification designed to protect credit-card transactions on the Internet.
Security protocols can be performance assassins. Linden examines several multimedia security protocols, and explains why they can devastate performance.
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.
Central to Windows 2000 security are Security Descriptors -- structures and associated data that contain the security information for securable objects.
David presents a technique that lets multiple language resources be built into a single resource DLL and automatically referenced by Windows applications.
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 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.
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.
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.
OpenCV is an open-source, computer-vision library for extracting and processing meaningful data from images.
To hear Michael talk about it, you'd think interactive toys and open source are kid's stuff.
Al gets back on track in updating his Quincy IDE that hosts the GNU C/C++ compiler suite of tools on the Win32 platform.
How can you establish a network connection using Java? Mike shows how.
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.
Making money is the challenge Ecco and Liane are faced with this month.
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.
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.
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 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, short for "Minimum Real-time Linux," is a real-time Linux implementation that fits on a single floppy disk.
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 Find-By-Content engine that's part of the MacOS is a system-level search facility that you can embed in your applications.
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.
Wietse investigates the topic of file recovery by reconstructing past behavior and examining deleted file access time patterns and other attributes.
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.
Debugging applications developed to run under real-time operating systems can be difficult, but making debuggers "operating-system aware" can ease the process.
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.
Inferno is a distributed OS for networked devices and Internet appliances, and applications for it are written in a programming language called "Limbo."
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.
While customizing Quincy 2000's Print dialogs isn't necessarily a day at the beach, it is still a boat load of fun.
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.
If you need fast searching capabilities, AVL trees might just be what you're looking for.
Genetics, protein networks, and a Russian physicist are among the challenges Ecco and Liane face this month.
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.
Programming is bound to get easier, but the real challenge is making programs better.
When Moore's Law reaches its limits, the next step may be the chemical synthesis of complex circuits.
Application builders are poised to reach new levels of abstraction and automated optimization capabilities.
Research advances are improving the accessibility of computers for those with disabilities, and promise to make user interfaces better for us all.
Quantum computing is another frontier beyond Moore's Law. Unprecedented computing power is the prize at the end of the long road ahead.
A noted security expert sees a future fraught with security threats and new technologies to combat them.
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?
A researcher at the venerable laboratory takes stock of Xerox PARC's place in the world of high-tech research.
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.
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 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.
Andrew presents PyDaylight, an object-oriented wrapper for Python that provides the low-level interface to the underlying C libraries.
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.
Boudewijn examines PyQt, one of the most advanced Python GUI libraries, focusing on the innovative signals-and-slots paradigm it offers you.
David presents his "miniXML" parser for XML that is written in C++ using the Standard Template Library for strings and various containers.
When it comes to forensic computing, data recovery is of interest to anyone who has lost data.
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 is a built-in scripting language that provides user-level access to digital camera controls and image and information flow.
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.
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.
David created the Network Query Language (NQL) with the new class of "connected" applications in mind intelligent agents, bots, spiders, middleware, and web apps.
Michael's mixed bag includes database design, business rules, new programming environments, and a look at the cottage industry of books about Steve Jobs.
Before hitting the road in his venerable DobbsMobile, Al takes his own walk down memory lane and gives Quincy a new compiler.
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.
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!
The "Wildfire" Ecco and Liane have to deal with is more than a golden oldie rock hit.
This month Lou examines Beginning Perl, by Simon Cozens, while Trudy takes a look at Al Williams's Windows 2000 Systems Programming Black Book.
The Java Secure Socket Extension package and Java Run-Time Environment provide most of the tools you need to implement SSL within Java applications.
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.
Since native support for tape devices doesn't exist in Java, Chad had to build his own tape library.
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.
Lorenzo and Donato present NetworkClassLoader, a class loader that lets you load classes from remote servers.
The migration from 32-bit to 64-bit machines is really a test of how "clean" your code is.
Six of one and half a dozen of the other? Marc finds out when he examines how Microsoft's C# differs from Java.
Among other things, the Perl modules Robert presents here let you view library module data within the Perl interpreter.
With Java and the Waba toolkit, you can develop powerful applications for handhelds like the PalmPilot or Windows CE-based systems.
This interrupt scheduler was designed to be flexible enough to accommodate more handlers if and when they're needed, or if priorities change.
A common problem faced by programming teams is producing consistent, reliable, and maintainable modules. David offers guidelines to address this issue.
If browser incompatibilities are driving you batty, Charlie's techniques for cross-platform DHTML development might save the day.
SAX, the "Simple API for XML," is an efficient and high-performance alternative to the Document Object Model.
So Java isn't your cup of tea? Michael explores the alternatives.
Al mulls over all the charges against Microsoft and changes his mind about the whole mess.
Elisabeth builds a JNI wrapper that lets the Java Authentication and Authorization Service and Windows NT authenticate specific users.
Thomas presents an efficient hash technique guaranteed to generate a perfect hash function for an arbitrary set of numeric search keys.
Up in the Alaskan tundra, oil and caribou mix about as well as oil and water.
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.
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.
William and Maggie examine "value lattice," a new approach to static analysis that finds the most dangerous defects that tend to slip through testing.
Tarak examines CORBA's Notification service and proposes a low-overhead approach to debugging distributed systems.
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.
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.
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.
Coroutines are a natural solution to parsing problems used by assembly-language programmers. George presents a cross-platform coroutine technique for C++.
Most Palm users crave access to the multimedia gadgets found in "other" handheld devices. Fortunately, the Pyro for Palm satisfies those multimedia cravings.
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.
Russ presents TCPMapper, a Java utility that lets you peek inside the network connections between your browser and a proxy server.
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.
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.
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.
DDJ's new columnist takes a hard look at soft errors that affect wireless devices.
Can you script Java with Tcl? Sure, and TclBlend is a great way to do it.
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.
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.
Peter takes a long look at Andrew Koenig and Barbara Moo's Accelerated C++: Practical Programming by Example.
The Data Structures Library in Java (JDSL) is a collection of Java interfaces and classes implementing fundamental data structures and algorithms.
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 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.
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 (SAL) is a C++ library for supporting rapid prototyping of data analysis and control applications for distributed physical systems.
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.
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.
James examines the Windows NT Embedded 4.0 toolkit and shows how he used it to develop a black-box project.
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.
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.
Everyone has a secret, but "Who can you believe?" asks our resident cynic.
Al has Linux on the mind as he continues to make the move from one operating system to another.
Embedded systems straddle the fence between engineering approximations and exact counts. "And the problem is what?" asked Florida vote counters.
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.
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.
You say "ping pong," Ecco says "table tennis," as he and Liane coach the coaches to build the best team possible.
This month, Lou takes a look at Professional Linux Programming, by Neil Matthew, Richard Stones, and others.
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.
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.
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.
Jacob presents an ASP-based web page that publishes streaming video clips to a streaming video server.
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.
Perl/Tk is an interpreted scripting language for making widgets and programs with GUIs.
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.
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.
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.
wxWindows is a freely available C++ cross-platform GUI framework that lets you compile programs without changing anything under supported platforms.
It's back to BASIC this month, as Michael looks at the state of the language in general, and the REALbasic implementation in particular.
Al finds out why the dependency carousel is central to both Linux and open-source development.
Ed puts the brakes on embedded systems design as he looks around his house and wonders how all that stuff works.
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.
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.
The beat goes on in the Safetown police department as the good guys look for the most efficient way to maneuver through the streets.
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.
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.
Entity EJBs generally come in two varieties: container-managed persistent and bean-managed persistent. Our authors propose a third flavor, the Universum Bean.
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.
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.
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.
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.
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.
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).
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.
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.
What with drivers, editors, Linux, mail, and more, Al adds a new meaning to the term "multitasking."
A trip to the bright lights of the LinuxWorld Expo gets Ed thinking about the world of embedded Linux.
Can Java handle multiline strings? Yes, and Brad shows you how.
Shawn presents strategies to adapt a generally memory-intensive recursive algorithm for use in environments where memory may be limited and reusability is required.
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.
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.
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.
Recent trends in processor design have introduced new ways for programmers to exploit parallelism and "smarter" compilers do much of the work for you.
Dan presents a Fortran module that helps you write multithreaded programs for Windows-based applications.
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.
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.
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.
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.
"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.
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.
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.
Being on the road with the DobbsMobile means that Al gets a Linux editor and compiler almost.
There's "soft" real time, "hard" real time, and to Ed's way of thinking, there's also "brittle" real time.
Moka is a Java-to-Java compiler that lets you extend Java to add features the language currently does not support.
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.
It may be Greek to you, but it is just another archaeological problem for Natasha as she returns to Ecco and Liane's digs.
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.
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.
Microsoft's .NET Framework offers a number of features, such as threading, that simplify difficult tasks.
Strix, a software layer that works between an application and the relational database back end, interfaces relational databases with object-oriented programming languages.
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 was developed as an add-in to the standard Visual Basic 6 IDE. Clayton uses it to build a database for the Palm OS.
Michael presents an object-oriented approach that is an alternative to the traditional ways of designing networked devices.
Perl Server Pages is a small footprint Perl-based cross-platform JSP-like facility for generating dynamic pages for both UNIX and Windows.
Lauren shows how you can use Adobe's Forms Data Format (FDF) Toolkit to make PDF documents come alive.
Was Bill Gates a good programmer? What does Prolog have to do with the Semantic Web? And what did Kent Beck have for lunch?
There's nothing like a comment or two about programmer's editors to fill up the mailbag.
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.
Is JavaScript an object-oriented language? Well, it does utilize prototype-based inheritance and support encapsulation.
Orthogonal codes are sets of sequences extensively used in wireless communication.
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.
Peter examines a pair of C++ books C++Builder 5 Developer's Guide and C++ and Object-Oriented Numeric Computing for Scientists and Engineers.
and Della Song
Mario presents a generic model designed to serve as a blueprint for development of scalable distributed computing applications.
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.
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.
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.
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.
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.
Panos presents one approach to updating contact information for mobile phones by downloading contacts from PCs running Outlook 2000 to Nokia mobile phones.
Trampolines are short snippets of code that start up other snippets of code to, among other things, minimize the latency of interrupt handlers.
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.
The Enterprise JavaBeans (EJB) architecture is the standard component architecture for building distributed object-oriented business applications in Java.
This month, Michael trolls the seas of software development in search of the next "realizable fantasy."
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.
Ed continues his examination of the space where real time and Linux overlap.
Resource bundles provide the means for utilizing locale-specific information without having to maintain multiple versions of code for those various locales.
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.
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.
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.
Regex++ is a regular expression engine that makes C++ as versatile for text processing as script-based languages like Awk and Perl.
Design flaws can be automatically detected, as long as you can extract and manipulate sets of key relationships among the entities in C++ systems.
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.
The C++ Standard Template Library (STL) provides the set-theoretic operations union, intersection, difference, and symmetric difference, accessible through the header file <algorithm>.
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#.
Boudewijn shows how you can embed a standard language such as Python into a Java application.
Short Message Services (SMS) let you send short text-based messages between wireless devices, such as cell phones and pagers.
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.
ADO and MSXML are tools that can be used to create high-performance web sites. MSXML provides flexibility, but ADO offers performance.
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.
Michael proves once again that he is a man of the (other) world.
Al continues his search for the perfect C++ class library for Linux.
"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.
Can J2EE manage cache and pool memory? Yes, and Art shows you how.
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 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.
GPRS and 3G Wireless Applications: Professional Developer's Guide, by Christoffer Andersson, arrives just as the mobile Internet seems ready to take off.
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.
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.
SMTP banners that contain version information can result in security vulnerabilities. Our authors show how to close this hole.
Daniel reports on Dmitry Sklyarov's analysis of PC-based digital rights management security techniques.
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.
A photomosaic is a digital image made up of other digital images, pieced together by software.
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.
The PacketCable Security Specification provides rigorous security standards for cable-based telephony networks.
The Instrument Markup Language is an XML dialect designed to aid in the exchange of data and commands with remote instruments.
The rapidly increasing number of e-mail relay packages means interoperability challenges for programmers who need compatibility with existing e-mail software.
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.
Just because Michael sees conspiracies everywhere, doesn't mean he's fantasizing. Or does it?
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.
It's no surprise that microcontrollers and other embedded devices are used in life-support systems. But can you really, really trust them?
Java provides two types of exceptions: checked and unchecked.
The algorithm Jiri presents here performs undo/redo for a general network of interconnected objects.
Ecco and Liane discover that urban planning in Texas isn't an oxymoron after all.
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.
Private namespaces let groups of processes construct their own namespace. Ron implements them for Linux to solve problems in both distributed and cluster computing.
Menuet is a multitasking real-time operating system that fits on a single 1.44-MB floppy diskette that's right, a single diskette!
NewOS is a freely available lightweight operating system written in C for platforms ranging from Intel- and AMD-based PCs to the Sega Dreamcast.
Thomas presents a Java-style synchronization monitor for multithreaded Win32 development.
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.
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.
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.
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.
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.
Michael speculates on what the big deal is about nanotechnology before turning to toddlers taking the Turing test.
Al continues development of his Music Minus Whatever project, which lets you encode three discrete logical channels of music into one stereo audio file.
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.
Tim focuses on JDBC as he examines techniques for optimizing the performance of database-centric applications.
Shehrzad transforms an algorithm from C/C++-style code to vectorized Matlab code, then shows the performance gains resulting from this transformation.
The dastardly Benjamin Baskerhound has turned over a new leaf, as he matches Xs and Os with criminals for a change.
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.