UpFRONT

Doc Searls

Issue #68, December 1999

Stupid Programming Tricks, LJ Index and more.

LJ Index - December, 1999

  1. Number of hosts on the Internet in December, 1969: 4

  2. Number of hosts on the Internet in August, 1981: 213

  3. Number of hosts on the Internet in October, 1989: 159,000

  4. Number of hosts on the Internet in January, 1992: 727,000

  5. Number of servers on the Web surveyed by Netcraft in September, 1999: 7,370,929

  6. Number of Apache servers on the Web: 4,078,326

  7. Apache's share of all web servers: 55.33%

  8. Apache sales: $0 US

  9. Number of web pages with the term “brand”: 2,302,060

  10. Number of web pages with the term “branding”: 183,510

  11. Number of web pages with the term “brand name”: 114,262

  12. Money spent on advertising worldwide in 1998: $200.3 billion US

  13. Money spent advertising Apache through all of time: $0 US

  14. Number of web pages with the phrase “Apache”: 286,619

  15. Estimated consumer purchases over the Web in 1999: $31 billion US

  16. Estimated business purchases over the Web in 1999: $80.4 billion US

  17. Estimated annual consumer purchases over the Web by 2003: $177.7 billion US

  18. Estimated annual business purchases over the Web by 2003: $1.1 trillion US

Sources

  • 1 to 4 from Matrix Information and Directory Services

  • 5 to 7 from Netcraft

  • 9 to 11 and 14 from AltaVista, September 21, 1999

  • 14 excludes pages with the word “native” or “Indian”

  • 12 from McCann-Erickson

  • 15 to 18 from International Data Corporation (IDC)

Deplugging the Net

You almost certainly think of the Internet as an audience of some type—perhaps somewhat captive. If you actually had even the faintest glimmering of what reality on the Net is like, you'd realize that the real unit of currency isn't dollars, data or digicash. It is reputation and respect. Think about how that impacts your corporate strategy. Think about how you'd feel if a guy sat down at your lunch table one afternoon when you were interviewing an applicant for a vice-president's position and tried to sell the two of you a car and wouldn't go away. Believe it or not, what you want to do with the Internet is very similar. Just as you have a reasonable expectation of privacy and respect when you're at a table for two in a public place, so too do the users of the Internet have a reasonable expectation of privacy and respect. When you think of the Internet, don't think of Mack trucks full of widgets destined for distributorships, whizzing by countless billboards. Think of a table for two.

—@Man, from “Attention Fat Corporate Bastards!” www2.ecst.csuchico.edu/~atman/attention-fat-bastards.html

Whoa, Nettie!

Alan Greenspan has stated that the Internet is the engine “driving” the U.S. economy. This engine has been working hard for a number of years, doubling and redoubling. But what happens when it begins to slow down?

This is not an idle question, as data in Matrix Maps Quarterly 601 (published by MIDS, http://www.mids.org/) demonstrates. The sky may not be falling, but growth is definitely slowing.

Comparing the resulting per-country host data for the period between January and July 1998 and 1999 reveals an interesting feature of the Internet. For nearly a decade, the number of Internet hosts doubled every year. From 1985 to 1997, growth was 2.176. The rate of change is now 1.5. The graph outlines the growth rate for 1969-1999, then extrapolates out to 2002.

In some ways, the more things change, the more they stay the same. The total number of Internet hosts continues to grow, but at a somewhat slower pace.

RIPE data, published monthly, shows that the European growth rate has been falling off as well.

That this would happen should surprise no one; clearly, as any area begins to become saturated, growth slows.

—Peter H. Salus, info@linuxjournal.com

Overheard

Do you want to spend the rest of your life selling sugared water, or do you want a chance to change the world?

—Steve Jobs to John Sculley, 1983

C'mon Steve, do you want to go on selling colored plastic all your life, or do you want to change the world?

—USENET posting to Steve Jobs, 1999

jbum rocks

Jim Bumgarner's Public Opinion Research Project at www.jbum.com/jbum/public_opinion.html takes the Sucks/Rules-O-Meter concept to its extreme. His site lets you poll the Web (through www.altavista.com) for the negative and positive adjectives of your choice. Here are a few of the polls displayed at the site on September 23, 1999.

GAMES FOCUS—Weiqi Baduk Igo Go

a robot playing a board game or striking a thinking pose?

From its origins in China, Weiqi has spread through Asia and indeed throughout the world. In Korea, where it is most popular, it is known as Baduk, while in Japan and elsewhere, it has the familiar name Go. Its rules are simple and easily acquired, yet the mathematical and logical complexities are vast and largely unfathomable. Indeed, some say Go can be as demanding and subtle as art or science, while the scope for personal expression is such that it is said one cannot hide his personality on the Go board. So what is your Linux box's personality like? Go find out!

The board is 19x19; the stones are round. Everything else is just numbers, a dendrite path which I would vaguely estimate to contain a number of paths somewhere around 361!/111! (if we assume 250 moves per game). Navigating this path well has proven to be an impossible task for computers. Still, in the post-Deep Blue world, Go may be both the most promising and the darkest frontier in artificial intelligence gaming. From chess, we developed heuristic searches and witnessed the power of brute force when we trimmed our search trees, not to mention the parallel processing research which occurred during the construction of Deep Blue. The subtlety of Go, which is less materially dependent than chess and has more branches in the dendrite with a less clear objective (territorial acquisition rather than monarch hunting), has rendered brute force largely ineffectual, and we have to resort to pattern recognition and analysis and strange algorithms to make a computer think like a human. What we learn from developing Go software could expand our knowledge base of AI theory and techniques a great deal. The computer chess authority Hans Berliner remarked that Go “may have to replace chess as the task par excellence for AI.” Fortunately for us Linux enthusiasts, there is some very high-quality Go software floating about, free of charge and with the source code, of course.

If you have long been frustrated by GNU Chess, you can get back at the GNU Project by beating GNU Go—well, maybe not. While computers are relatively worse at Go than at chess, GNU Go is not a weak program. In fact, it recently took second place at the 1999 U.S. Computer Go Championship, winning the “Best New Program” award as well. It has a text interface, but since it understands Go modem protocol, it can also be played against other programs or with the Cgoban interface. Check out www.gnu.org/software/gnugo/devel.html if you're interested in playing or contributing to the project.

Figure 1. GNU Go for Console Enthusiasts

Baduki, by Jim Laebum (who goes by Artist), is free Go software with its own graphical interface. The program is actually quite good, and the interface is nice. The board seems to have come from the GIMP's wood pattern (I suspect, since I did this myself for Go software I was writing). The software allows you to set handicaps and play levels, and the interface scales to whatever window size you like. Additionally, Baduki can give its rationale for moves, show its thinking process and display alternate moves. Baduki understands GMP (Go modem protocol); thus it can play on IGS (Internet Go Server), NNGS (No Name Go Server) or against another program such as GNU Go. The Baduki home page lives at soback.kornet21.net/~artist/baduk/baduki.html.

Figure 2. Jim Laebum's Baduki

CGoban (Complete Goban) by William Shubert is the Go equivalent of xboard. It allows users to play Go against programs (such as GNU Go or Baduki), or against other players on the Internet Go servers. In addition, CGoban allows one to examine SGF files, that is, game records. The interface looks quite nice (the standard wooden board with black and white stones), scales to whatever size you like, and should run on all UNIX systems with X. CGoban will automatically connect you to the Go server of your choice with a simple mouse click. The home page of CGoban is http://www.inetarena.com/~wms/comp/cgoban/.

Figure 3. CGoban on the Internet Go Server

The Internet Go Server is the on-line meeting place for wired Go enthusiasts the world over. You can telnet in and play with a text interface, or use a graphical interface like CGoban. IGS is similar to the chess servers, with the typical commands applying like who, match, observe, kibitz, tell and shout. I find the atmosphere to be friendly enough, though less talkative than the chess counterparts. Also, blitz Go seems to be less popular than blitz chess, and as for lightning Go, I don't know. (Lightning chess is one or two minutes per game, a rather difficult schedule for Go.) If you want to check out IGS's well-designed web page (available in English, Chinese, Korean and Japanese), go to http://igs.joyjoy.net/. Or, if you want to go directly to the server, use telnet igs.joyjoy.net 6969 (yes, port 6969). There are a few other Go servers wandering about, No Name Go Server (NNGS) being one of the more popular. CGoban already knows the addresses and will connect you automatically.

Whether Go interests you on a playing level or a programming level, many on-line resources are available as well as software and many excellent books. A visit to your local bookstore or gaming shop should provide you with ample opportunity to foster an obsession (assuming, of course, that you don't find it boring). Likewise, if AI is your thing, Go is in need of creative solutions and has a lot of scope for truly clever, brilliant thinkers. If you become outstandingly fond of Go, you may even want to check out your local club, which would probably be overjoyed to have a new member. Happy Going! (Next month, something more violent...)

—Jason Kroll

STUPID PROGRAMMING TRICKS→SCROLLTEXTS

Last episode, we initialized console graphics (at great risk to our system's health) but we didn't do much afterwards. Now it's time for something truly impressive, a feat which Microsoft has apparently not yet accomplished—a smooth scrolltext.

“What is a scrolltext?” you may ask, in particular if you haven't been around on a Commodore 64, Amiga or PC and names like Fairlight, Red Sector and Future Crew mean very little to you. Hopefully, you've at least seen the intro screen from Jet Set Willy. What it comes down to is this: scrolltexts are the most exciting form of communication ever. Words that glide across the screen, often advertising the latest release or copy party, complaining about high school teachers, or detailing unfortunate experiences at the hands of public transit, usually accompanied by music (MODs) blaring in the background with animated graphics and the ubiquitous star fields. Perhaps you've seen Microsoft's screen saver which scrolls words across the screen and noticed it flickers terribly. It is very simple to fix, so our scrolltext won't flicker; then we can taunt the Microsofties to fix their screen saver.

The routine is quite simple. We start by initializing three graphics screens: a physical screen, a virtual screen and a scroll board screen. The physical screen is the graphics context which will be displayed, the virtual screen is the graphics context we use as a whole-screen copy to the physical screen. That is, we make changes to the virtual screen, and when everything's ready, copy it to the physical screen. The third screen is the scroll board, a virtual graphics context which will be wider than the physical screen by one character (8 pixels) and will be only as tall as the font itself (again, 8 pixels). Since we're using an 8x8 font and a 320x200 graphics screen, we can fit 40 (320/8) characters on a line, making 41 characters for our scroll board. Once we've set up these three contexts, we'll use a simple loop to get the letters scrolling. After that, we can add anything we like: 3-D graphics, dancing animals, star fields or anything else. Here's the loop:

  • Write 41 letters to scroll_board.

  • Copy 40 letters from scroll_board to virtual_screen, always copying to the same location on virtual_screen, but copying from one pixel farther to the right each time, so that at first we get the first 40 letters, then the first 40 letters minus the first row of pixels from the first letter but with the first row of pixels of the 41st letter and so on, until we have scrolled 8 pixels (the width of our current font).

  • After each copy of scroll_board to virtual_screen, copy virtual_screen to physical_screen and hold for a vertical refresh. (This makes things look smooth and lets us add things later, like the dancing animals.)

  • Once we have moved 8 pixels forward in scroll_board, such that we are copying the 2nd through the 41st letter (instead of the 1st through 40th), we reprint 41 letters to scroll_board, starting one letter in, such that what was once, for example, “Hello world welcome to my glorious scroll” would become, “ello world welcome to my glorious scrollt”.

This routine is fairly simple and requires only a couple of variables: one to keep track of how many pixels in we are and one to keep track of how many letters in we are. Also, we want to make sure we don't run out of scrolltext and start scrolling bits of random memory, which would ultimately lead to a segmentation fault. While we might prefer to draw each letter individually and just keep modulating around the length of the scrolltext, we get faster drawing if we print characters as a string once instead of calling gl_writen 41 times every time we move 8 pixels. So, leave some blank space at the beginning and end of your text to ensure smooth wrapping. We could also create the whole scrolltext as one really long graphic, but that would be cheating.

Once the basic scrolltext is going, we can do all sorts of fun things. We could, for example, have a sinusoid equation for the y value of where the text is placed such that it would bounce up and down on the screen, or we could insert some graphics and possibly call mikmod or playmidi to get some music going. Compile with

gcc -Wall -O2 scrolltext.c -lvgagl\
   -lvga -o scrolltext

For information on the specifics of svgalib or vgagl, try their respective man pages. Library functions also have their own man pages. Here's the code:

#include <stdio.h>
#include <stdlib.h>
#include <vga.h>
#include <vgagl.h>
#define VGAMODE G320x200x256
#define FONTW 8 // font width
#define FONTH 8 // font height
#define TEXTL 600 // text length
int main(void)
{
  char d;
  char text[TEXTL]="                                         Megagreetings from whomever this happens to be! This is where the scrolltext words are, so fill them as you like. Fun rarely entices everyone. Keep enjoying video interfaces nevertheless................. There is space to be filled!! ";
  short int text_pos;
  unsigned char pixel_pos;
  unsigned char speed;
  GraphicsContext *physical_screen;
  GraphicsContext *virtual_screen;
  GraphicsContext *scroll_board;
  vga_init();
  vga_setmode(VGAMODE);
  gl_setcontextvga(VGAMODE);
  physical_screen = gl_allocatecontext();
  gl_getcontext(physical_screen);
  gl_setcontextvgavirtual(VGAMODE);
  virtual_screen = gl_allocatecontext();
  gl_getcontext(virtual_screen);
  gl_clearscreen(0);
  scroll_board = malloc( (WIDTH/FONTW+1) * FONTW *
     FONTH * BYTESPERPIXEL);
  gl_setcontextvirtual(WIDTH+FONTW, FONTH,
     BYTESPERPIXEL, 8, scroll_board);
  scroll_board = gl_allocatecontext();
  gl_getcontext(scroll_board);
  gl_clearscreen(0);
  gl_setwritemode(FONT_COMPRESSED);
  gl_setfont(8, 8, gl_font8x8);
  gl_setpalettecolor(1,63,63,63);
  text_pos = 0; // text offset
  pixel_pos = 0; // pixel offset
  speed = 1; // scroller speed
  gl_setcontext(virtual_screen);
  for (d=0; d==0; d=vga_getkey()) {
    pixel_pos+=speed;
    while (pixel_pos > FONTW) {
      gl_setcontext(scroll_board);
      gl_writen(0, 0, WIDTH/FONTW,
        &text[text_pos]);
      text_pos++;
      pixel_pos-=FONTW;
      if (text_pos > TEXTL - WIDTH/FONTW)
      text_pos -= (TEXTL-WIDTH/FONTW);
      gl_setcontext(virtual_screen);
    }
    gl_copyboxfromcontext(scroll_board, pixel_pos,
       0, WIDTH, FONTH, 0, HEIGHT-FONTH-1);
    gl_copyscreen(physical_screen);
    vga_waitretrace();
  }
  return 0;
}
This code can be downloaded from ftp.linuxjournal.com/ftp/pub/lj/listings/issue68/3722.tgz.

—Jason Kroll

VENDOR NEWS

Red Hat, Inc., a provider of open-source Linux-based operating system solutions, announced that Burlington Coat Factory Warehouse Corporation has purchased support services from Red Hat for its nationwide Linux deployment. Under the agreement, Red Hat Services will provide telephone-based support to more than 260 Burlington Coat Factory stores nationwide (including subsidiaries). Red Hat will provide ongoing maintenance for customized Dell OptiPlex PCs and PowerEdge servers running factory-installed Red Hat Linux. The Red Hat Linux OS-based systems will host Burlington Coat Factory's Gift Registry and will facilitate all other in-store functions, such as inventory control and receiving.

International Data Corp. research states that Linux was the fastest-growing server operating environment in 1998, growing more than 212 percent in that year alone and capturing more than 17 percent of new licensed shipments of server operating systems.

Andover.Net announced it has completed extensive hardware upgrades to its influential Slashdot (www.slashdot.org) and Freshmeat (www.freshmeat.net) news and resource sites. With a major investment in the IT infrastructure of both sites, Slashdot and Freshmeat can now serve the growing Linux community, without delay, the same news and information that has made these sites the most popular destination for Linux news and information.

Oracle Corp., a provider of Linux-based database software, and Red Hat jointly announced that Oracle has certified Oracle8i on Red Hat Linux and that future Oracle product releases will also be certified on Red Hat as they become available.

Tripwire joined ISS' Adaptive Network Security Alliance (ANSA), an industry-wide initiative dedicated to developing and delivering adaptive network security solutions. Through ANSA, real-time adaptive security capabilities are being integrated across systems and applications, providing automated responses to security risks, including intrusions. Tripwire will use the ANSA modules to integrate Tripwire and ISS products. Any modifications made to operating system or user files will be detected by Tripwire. Tripwire will then send an alert to the ISS product set, which will conduct another set of security checks to monitor and combat the intrusion. More information on ANSA can be found at http://www.ansa.iss.net/.

KeyLabs Inc., an e-business testing facility, announced that Motorola Computer Group's (MCG's) SLX2020 network appliance has passed KeyLabs' network server compatibility tests in support of major Linux operating system distributions. KeyLabs' compatibility testing showed the SLX2020, the first of Motorola's recently announced SLX Series of network appliances, to be compatible with Caldera Systems' OpenLinux 2.2 and 2.3, Red Hat 6.0, SuSE Linux 6.0 and TurboLinux 3.0.1. KeyLabs' “Linux-Tested” certification results for the SLX Series may be found at www.keylabs.com/linux/results/motorola.html.

Ariel Corporation, a supplier of open-architecture remote-access solutions for Internet service providers, announced that KeyLink Systems, a Pioneer-Standard Electronics, Inc. company, is now offering bundled remote access solutions for ISPs based on Ariel's PowerPOP architecture. KeyLink Systems also announced a dedicated sales and support team for the assembly of these ISP solutions.

STRICTLY ON-LINE

Transparent Firewalling by Federico and Christian Pellegrin presents the solution to one of the difficult problems encountered when building a firewall: how to split the existing network without affecting the configuration of the machines already in use on the network. They do this by using a proxy arp technique. All the information you need to know about requirements and configuration can be found here.

Kerberos by Cosimo Leipold is an introduction to this powerful set of programs which give you encrypted connections to TELNET, FTP, e-mail, etc. Mr. Leipold explains the configuration files and commands needed to give the administrator complete control of the system.

What Can You Expect? by Denny Fox describes the end-to-end process of defining and implementing a data collection project that illustrates the use of Expect, stty, cron, a little C programming, gnuplot and ioctl to the serial device driver. Learn more about Expect, a powerful tool used to automate UNIX programs which interact with a user or processes needing a command or trigger and then return some kind of response. Just the sort of tool System Administrators need on a regular basis.

Building a Firewall with IP Chains by Pedro Bueno is a very short article which gives you the basics on using IP firewall chains. Developing adequate security for your system is one of the most important steps you can take.

Customizing the XDM Login Screen by Brian Lane shows you how to jazz up your login screen, explaining how to set up XDM, change your background pattern, randomly display a background image and change your prompt.

The Use of Linux in an Embedded System by Dave Pfaltzgraff presents one company's solution to a customer problem using Linux and open-source software. Mr. Pfaltzgraff tells us how to implement the serial interface and control program and interface with the database, in his case, PostgreSQL.

Porting Progress Applications to Linux by Thomas Barringer is an explanation of the steps required to port an existing Progress application to the Linux system, including the advantages and disadvantages of doing so.

Army National Guard Using Linuxby Richard Ridgeway is a look at how a military war game simulation was ported to Linux workstations. Included is a comparison of graphic refresh times on different platforms and operating systems. Saving money and getting high performance are two very good reasons to port to Linux.

COSOURCE ANNOUNCES COMPLETION OF FIRST PROJECT

The program supermount has been successfully ported to the 2.2 kernel, implementing all the functionality of Stephen Tweedie's original version. The project was started on August 11 and completed on September 27 by developer Alex ... in Russia. This Linux enhancement was cooperatively funded by several different individuals and coordinated by cosource.com, thereby proving the Cosource model works! Congratulations to Alex and Cosource! Get all the details from www.cosource.com/cgi-bin/cos.pl/bid/info/5http://www.cosource.com/cgi-bin/cos.pl/bid/info/5.

Lineo Proposes Embedded Linux Advisory Board

On September 30 at the Embedded Systems Conference in San Jose, Lyle Ball and Bryan Sparks of Lineo proposed a group to be called the Embedded Linux Advisory Board (EMLAB). This proposed body would serve as an advocacy group, helping Linux to gain greater visibility and name recognition in the embedded systems arena through activities such as establishing Linux Pavilions at embedded systems shows and promoting birds-of-feather sessions and Linux presentation tracks. Other possibilities include:

  • Shared software development, for example, a GPL flash-disk file-system driver. Like Linux itself, such software offers a fundamental basis on which embedded systems may grow.

  • Vendor-neutral comparisons of embedded Linux approaches

  • Tracking and publicizing Linux design wins

  • Setting standards

Funding would come from corporate sponsorship with complimentary memberships open to community groups, such as Linux Router Project or individual developers, via a nomination process.

Lineo hopes to turn EMLAB over to an independent board to be selected soon.

Present at the announcement were Lineo and some of its customers and strategic partners including Ziatech, Motorola and Intel. The press was represented by Linux Weekly News and Linux Journal.

Reaction from companies and groups not present was cautious, though there is support for the idea of such an organization.

Lineo has set up a server hosting an open mailing list and a web site. For list subscription information, e-mail info@emlab.org. For news updates, visit http://www.emlab.org/ or stay tuned to www.linuxjournal.com/.

—Dan Wilder