213 Articles


14 years Ago

Going Aqua

Published by marco on

 The Finished Product!This is the simplest possible tutorial for creating convincing OS X–style Aqua effects using only vector graphics. The Ultimate Aqua Button takes a designer step-by-step through Fireworks to create a simple oval button. Here are the advantages listed in the tutorial:

  • It takes the fewest number of steps (for a technique that doesn’t leave out any design elements)
  • It uses fewer objects to complete the design
  • All the elements of the button remain fully editable
  • The final button is made entirely... [More]

ISE Eiffel Goes Open-Source

Published by marco on

 At long last, ISE Eiffel has released their development environment and libraries as Open-Source software, as announced in their press release (ISE Eiffel). The project is hosted on a wiki at the ETH and includes downloads for the most recent builds and nightlies (for Linux and Windows). The ISE implementation is the only one that fully supports the ECMA-367 standard, released in June of 2005. The download includes all development tools and libraries.

This is the language that Java and C# should be chasing... [More]

The Canvas Object: 2-D Graphics for Browsers

Published by marco on

History of the HTML Canvas

When Apple shipped Mac OS X 10.4 “Tiger” last year, it included the Dashboard and Widgets. Widgets are almost completely platform-independent, built with HTML, JavaScript and CSS and the Dashboard is a desktop-sized layer that could be called up instantly to show all installed Widgets. The “almost” above is deliberate since the release of the WebCore browser engine in Tiger included special hooks through which scripts could call system utilities (like executing local... [More]

15 years Ago

JavaScript Libraries

Published by marco on

If you’re looking for good advice on JavaScript programming, take a look at javascript.faqts, which offers a massive list of questions and answers about JavaScript, including many samples and snippets organized by topic.

Yahoo goes Open Source

 The Yahoo! User Interface Library offers all of Yahoo’s JavaScript controls, packaged and ready for download as Open Source. It includes GUI-level components for handling drag & drop, or building treeviews or calendars as well as low-level components... [More]

AJAX and Usability

Published by marco on

Why Ajax Sucks (Most of the Time) by Jakob Nielson is a critique of Ajax that borrows almost all of its text from a critique of HTML frames made several years ago. The author claims the article is a spoof, but, given that the complaints made about frames were valid at the time — and still are — and that the complaints are just as valid for the current batch of web applications, it’s hard to see what’s so funny about this “spoof”.

There are those who argue that frames in fact have not died out, since they... [More]

Google Maps: Web Applications done right

Published by marco on

 Mapping Google is an in-depth examination of Google Maps, a new web application that searches the US graphically. There are follow-up articles in Making the Back Button dance and Still more Fun with Maps. The series of articles covers the techniques Google used to bring a full-fledged, usable application to a web browser.

What’s so special about it? It feels like a desktop application:

  • Drag the image and it scrolls
  • Click a pushpin and get more information
  • Objects throw shadows for a “real”... [More]

16 years Ago

Print-ready with CSS

Published by marco on

Printing XML: Why CSS Is Better than XSL by Håkon Wium Lie, Michael Day (O'Reilly XML.Com) responds to a line drawn in the sand in webarch.pdf by Norman Walsh, a noted XSLFO proponent. In it, he said:

“…web browsers suck at printing … they all suck. And CSS is never going to fix it. Did you hear me? CSS is never going to fix it.”

That’s pretty much all he has to say about CSS in that paper; it actually discusses a general style sheet, written in XSL, that transforms an HTML document to printable FO. If you motor on over to that link, even with Firefox’s... [More]

Using the XMLHttpRequest object

Published by marco on

If you make websites, pay careful attention to this JavaScript object: it’s going to change everything about web application interfaces. Web pages can use this object to make an “in-place” request for data to another URL, then inject the results of the request (with optional post-processing in JavaScript) into the current document.

All without refreshing the page.

Google introduced the first really noticeable implementation of a web application using this technology in GMail. It was so... [More]

Joel “Blowhard” Spolsky Sounds Off

Published by marco on

Hey, I know he’s well-read in the industry and he often has some interesting topics, but his latest article, Advice for Computer Science College Students, is way more over the top than it needs to be. Maybe he thinks that, since he’s addressing people about to go to college (or those already in college that have not yet chosen a major), he needs to go all MTV on us and “get all up in our faces”, not missing a single opportunity to “dis the man”.

Whatever; it’s annoying.

He takes needless... [More]

Why it’s OK not to use (or even know!) UML

Published by marco on

UML is bandied about so much these days that it’s considered by many to be standard. It’s standardized, but to be standard it’s got to be in use almost everywhere. Everywhere important, at least. Domain-Specific Modeling and Model Driven Architecture by Steve Cook (PDF) assures us that we who feel uncomfortable with UML’s claims to universality are, in fact, in good company.

Where I work, we do pretty much pure object-oriented designs; every once in a while someone dares put an aspect of our design into UML... [More]

17 years Ago

An analysis of C# language design

Published by marco on

This article originally appeared in 2004. In the meantime (it’s 2009 as I write this), a lot has changed and the major complaint—a lack of explicit contracts in C#—will finally be addressed in the next version of C#, 4.0.

A Conversation with Anders Hejlsberg ( is a four-part series on the ideas that drove the design of C#. (The link is to the first page of the first section; browse to Interviews to see a list of all the sections.)

Virtual vs. Static

I found some points of... [More]

Rock star programmers

Published by marco on

Ronco Spray-On Usability (Daring Fireball) is an essay on software usability triggered by a column by the rambunctious “Eric S. Raymond”. The setup covers some of the background of Linux usability, but gets interesting near the middle, where he proposes that:

“The problem isn’t just that dear old A.T. [Aunt Tillie] can’t use desktop Linux — the problem is that even Linux geeks have trouble figuring it out.”

That indicates that people, Raymond included, who believe that Linux is a few hard nights of coding away... [More]


Published by marco on

This is an old, old story. I’ve seen it a few times before and was reminded of it again when someone posted it to a Slashdot article. It’s worth reading all the way through.

A recent article devoted to the *macho* side of programming
     made the bald and unvarnished statement:

                Real Programmers write in Fortran.

     Maybe they do now,
     in this decadent era of
     Lite beer, hand calculators and “user-friendly” software
     but back in the Good Old Days,
     when the... [More]

Was software good enough 5 years ago?

Published by marco on

Rewrites Considered Harmful? by Neil Gunton thinks developers, especially Open-source ones, make a mistake when moving to a completely new code-base. You see, the old code-base had a lot of testing time in it and was, if not more stable, at least had known bugs.

This is a good argument and one that most project managers are aware of. However, stability is relative to the given feature set. A product is well tested with feature set A. Within 3 years, the product will have feature set B. What must a project... [More]

Static-typing for languages with covariant parameters

Published by marco on

class DRIVER
    name: STRING
    license_valid: BOOLEAN

    maximum_weight_vehicle: INTEGER

    drive (d: DRIVER) is

class TRUCK
    weight: INTEGER

    drive (d: TRUCK_DRIVER) is
      require else
          >= weight
     ... [More]

Message Logging

Published by marco on

I’ve recently written a new message-logging system for my company and wrote up a bunch of thoughts on the subject into a white paper, Message Logging. The abstract is below:

“Discusses the requirements of software logging, relative to the needs of different types of users of a product. Outlines the goals of a logging system with respect to these users and provides guidelines and a set of rules for providing good self-documenting software components and processes. Sending messages and handling... [More]”

Planning complex software processes

Published by marco on

I’ve recently written a new startup system for my company’s main software library. The technology on which it’s based is documented in the white paper, Describing Multi-step Processes. The abstract is below:

“Discusses the properties and requirements of multi-stage tasks or processes. Addresses the challenges associated with maintaining and customizing complex hierarchies of tasks by using a declarative approach which concerns itself less with the absolute ordering of steps within a task and... [More]”

18 years Ago

Browser Detection

Published by marco on

earthli is now sporting a state-of-the-art browser-detection technology, described below. If you’d like, you can download it (PHP version only, full documentation included), read the class documentation online (developer documentation also available) or check out the source code.

Browser Detection Technology

The earthli Browser Detector is (hopefully) the last word in browser-detection technology. It provides the standard information like browser name and version, operating system name and... [More]

Blue Screen Program

Published by marco on

 I learned this trick for crashing Windows 2000/XP a while ago. I know, I know, it doesn’t take much. But, seriously, I haven’t gotten a BSOD (Blue Screen Of Death) in Windows 2000 in a long time. I can’t actually remember the last time I got one. This extremely simple program produces a BSOD immediately every time. Your computer will reboot.

It still works today. It’s quite simple: you simply issue one more backspace in a buffer passed to printf than there are characters in the buffer. You... [More]

Full Eiffel on .NET

Published by marco on

 MSDN has published Full Eiffel on the .NET Framework by Emmanuel Stapf, Raphael Simon and Bertrand Meyer, all of ISE (though Meyer is identified as being at the ETH in Zurich, Switzerland, so perhaps he’s teaching there now, which, for someone moving near Zurich, is pretty exciting).

“[It d]escribes the implementation and integration of the full power of the Eiffel language and method, including Design by Contract, multiple inheritance, genericity, and other advanced facilities, into the... [More]”

“Stealing” music with an iPod

Published by marco on

Apple has bowed to industry pressure and crippled their music device, the iPod. Each iPod has one “home” machine with which it stays automatically synchronized. Once you’ve connected the iPod (and only then), you can change on-board settings that control whether this happens automatically for all songs, for just selected playlists (useful if your library is larger than the iPod’s capacity) or not at all. If you select the manual mode of music transfer, iTunes and iPod still enforce moving songs... [More]

Dreamweaver MX

Published by marco on

 Another exciting product announcement at the Apple Developer’s Conference is Dreamweaver MX, from Macromedia. In fact, you can download an OS X or Windows version right now. It has a lot of new functionality, including better support for PHP/MySQL. Future testing will determine whether that support includes design-time data.

CSS, XHTML, XML and any other buzzword you can think of are all supported. Most of the automated design tools can be run in a standards-compliant mode, so it doesn’t stick... [More]

19 years Ago

Nice Web Pages

Published by marco on

The contents of this article have been moved to the new section, Web Design.

Donald Knuth Answer All Questions

Published by marco on

The American Mathematical Society recently published a paper titled All Questions Answered (PDF):

“On October 5, 2001, at the Technische Universität München, Donald Knuth presented a lecture entitled “All Questions Answered”. The lecture drew an audience of around 350 people.”

Donald Knuth is the grand old man of programming. He published the The Art of Computer Programming Vols. I-III (with the fourth one on it’s way, believe it or not) and invented TEX and METAFONT, the definitive document... [More]

Carmack on Doom’s Radeon/GF4 Support

Published by marco on

John Carmack made a couple of interesting posts to his .plan file recently. If you’re interested in seeing what the best 3d graphics programmer in the world is doing and thinking, check out his .plan from February 11, 2002. In it, he talks about implementing the Radeon-specific rendering instructions for the DOOM engine.

Of particular interest to those in the market for a video card when his next engine comes out is this quote: “Do not buy a GeForce4-MX for Doom.” He goes into some detail as to... [More]

C++ Initializer List Ordering

Published by marco on

The April issue of the C++ Users Journal published a letter by Ashley Williams pointing out yet another wart of C++. For any class in C++, you may declare as many member variables as you like. Each one of these member variables may be initialized in the constructor in the “initializer list”. References, in fact, must be initialized in this list.

Now, if you had to guess, in which order would those initializers be called? In the order they’re written? Remember that parameters passed to a... [More]

Skinnable User Interfaces

Published by marco on

osOpinion has an interview with Jef Raskin, …Jef Raskin Talks Skins…, one of the original UI designers for the Macintosh.

Skinning is all the rage with many applications these days (like’s themes). A lot of the time, it seems that the designer is more interested in the fun had making the skin or the look of it than the actual usability of it. Apple recently drew criticism for keeping its UI, “Aqua”, closed to skinning in order to provide a more consistent interface for users.
... [More]

Visual C++ Warning #4786

Published by marco on

The March 2002 issue of Windows Developer Journal has a tech tip that anyone who uses the STL with Visual C++ has been waiting for. If you’ve tried this, then you’ve likely gotten warning #4786, which tells you that the fully-qualified name of the class you are using is too long to fit into the debug information and will be truncated to 255 characters.

The reason behind this error is pretty stupid. You see, a while ago, I had a cross-platform project that compiled in Visual C++ 6.0 on Windows... [More]

What is .NET?

Published by marco on

Ars Technica is running a great article called Microsoft .Net aims to demystify .NET and clear up some of the misunderstandings and deliberate obfuscations surrounding it.

“In a remarkable feat of journalistic sleight-of-hand, thousands of column inches in many “reputable” on-line publications have talked at length about .NET whilst remaining largely ignorant of its nature, purpose, and implementation. Ask what .NET is, and you’ll receive a wide range of answers, few of them accurate, all of... [More]”

Dots Per Inch

Published by marco on

For those who’ve ever struggled to determine what pixels per inch actually means when applied to the real world, the thread DPI: TRUTH OR LIE? at TalkGraphics provides many answers.

The basic gist is that when you store a graphic in Photoshop, it asks for the Pixels per Inch for the graphic. If this graphic will never be printed or does not need to retain its crispness when printed, this number does not matter at all. With an increasing amount of content created exclusively for the web, the... [More]