I thought as a child: but when I became a man,
I put away childish things.

Time moves on at an ever-quickening pace, and even faster in the realm of technology. While I have been designing dynamic websites using PHP since 2004, a lot has changed since then. Most dominantly, as the Web has become more pervasive, niche websites sprung up that did one thing and did it well. When just starting with dynamic sites, I made many PHP 'widgets' to solve a particular issue I had at the time, and it served its purpose well. I published those widgets on my personal site for my own amusement and the use of others, but the time has come to move on from them. While the widgets I designed were great in their time, the problems that they solved (and the niches they filled) now have more universal replacements, that really should be used instead of my antiquated pieces.

Take a look below at my gallery of 'classic' PHP widgets, and suggested modern equivalents, if you find yourself needing that same niche filled.

DDR Graph and Bar Graph widgets | Wishlist Widget | Text Encode/Decode widgets | 3E Profiler and DM Screen widgets | Minis Maker | Random Tables

DDR Graph and Bar Graph widgets

While Excel as a desktop application excels at making pretty graphs out of numbers in a data set, creating such displays within HTML used to be a hard task to accomplish. Originally one had to design the graph themselves in a desktop publishing application and export it as a JPEG or GIF for web use. If you wanted a dynamic graph, there were Javascript libraries that could create images, and widgets such as these two that I designed, using PHP functions to create graph images on the fly. The downside to Javascript/PHP libraries is only the smoothness of the lines drawn. When drawing arcs and curves, the edges look a bit jagged in both techniques.

A new technology arose in recent years called SVG (Scalable Vector Graphics). The "vector" part of the name means all lines drawn are expressed mathematically, so finer detail can be achieved and 'jaggieness' eliminated. But browsers don't universally support SVG images yet. So a niche tool arose:

Internet mega-site Google released an API December 6, 2007 called Google Charts. This tool creates charts dynamically based on query parameters sent in the URL, and creates an SVG image behind the scenes, and converts it to a PNG image for display, which is much more universally accepted as an image format.

Here's a sample of the two, my script on the left, Google Charts result on the right:

DDR Graph widget Google Charts

Google has expanded the Charts API to include many more types of graphs than the radar and bar graphs that I was implementing, and will likely continue to do so. So, I'd recommend using the Google Charts API to create such charts embedded in HTML work.

Wishlist widget

I created the wishlist widget right around the time that Amazon.com's wishlist feature was catching on mainstream, and other sites were starting to have wishlist capabilities on their own site. But rather than having a wishlist on each individual vendor site, I wanted to have one wishlist that would contain all wished-for items from anywhere on the Internet. I designed this widget and it worked well, but there's a lot more that can be done with wishlists than I implemented.

Sites like WishList.com, and Wishlisting.com have sprung up in the last few years and offer features like reserving an item someone else is wishing for to buy for them, bookmarklets to facilitate adding items anywhere on the Internet, sharing/securing wishlists, having multiple wishlists, and more. I'd suggest moving/setting up your own wishlist on one of those sites if that interests you.

Wishlistes that were on this site are archived on this page if you would like to transfer them.

Text encode/decode widgets

Wanting to be all super-spy-like, I created this widget pair to encode a text string into a graphical image such that it could be transmitted encrypted. Also, since the image was digital, the color difference in the image bits could be very minute and have it still work. I created this by assigning a number to each letter, and then representing that number in binary using two colors for zeroes and ones. Much later I realized that I probably should have used the ASCII value of the character rather than a proprietary number, and many other possibilities for enhancement.

Well, someone took my idea (I doubt they actually used my widget and derived this technology from it, but it's very similar), and the result is the QR (Quick Response) Code protocol. The QR Code standard allows for encoding data into a black and white image such that optical scanners (i.e. barcode scanners) can read the data back, and incorporates error-correction such that parts of the code can be destroyed and still have it able to be read.

The Data Matrix code standard is another such two-dimensional bar code that behaves very similarly to this widget.

If you want to make your own QR Codes, or Data Matrix codes many websites will encode your text for you, including Google Charts which can create QR Codes dynamically. Here's a comparison of the two, my widget on the left, and a Google Charts QR Code on the right, both encoding the URL 'http://brooks.boyd.name':

Text Encode WidgetGoogle Charts QR Code

3EProfiler and DM Screen widgets

3E Profiler was a program designed to digitize Dungeons and Dragons Third-edition characters into online format for ease of use and sharing with other players. In my opinion it was a great program, available for webmasters to download and host on their own server, and allowed for extending to other gaming systems, which I did for my friends who played GURPS as well. The original creator ceased working on that software and it eventually traded hands to MythWeavers. MythWeavers modified the program to more closely integrate with their forum system, enabling role playing games to be done all online through their forums. Meanwhile I too had modified the 3EProfiler program to allow a Game Master access to all players in the campaign's characters, and to do dice rolls against common attributes in all players (i.e. have everyone make a Spot Check without players knowing it) via a laptop at the gaming table.

MythWeavers' changes make their forums a great place to host a role playing game, but it's designed for Play-By-Post, not playing live. So, if you're looking to play a game by post, I'd suggest heading to MythWeavers and setting up your characters there. But if you want to play live, I'll be keeping my program active as long as I can, even with the 3E Profiler base discontinued.

A side project has sprung up on SourceForge, called RPG Web Profiler, which is a direct descendant of the 3E Profiler program, with some added enhancements that are pretty close to the enhancements I was adding to comprise a DM Screen (working instance at HD RPG.com. Likely my DM Screen widget will merge into that project and I'll host that here in the DM Screen's place.

Minis Maker

Another tool for working with role-playing games, I ran across the instance where when a group of players wanted to play online together, the tabletop program we used (OpenRPG) didn't have standard images for character representation on a map, so I created this utility to create generic buttons quickly and effectively, if you just needed some image to represent a character on a digital map.

This widget works well, using PHP image functions to work, though has some caveats. The PHP image functions are a bit slow to generate the image, and it doesn't allow for custom images to be used as the base token image, only colors. RPTools.net has a collection of Java-based utilities for online, real-time gaming including TokenTool, which serves the same function as my Mini Maker, if you already have an image you want to turn into a token, and integrates quite nicely with their MapTool for online play. If you need some simple tokens created, from an existing image, try the TokenTool. If you've got nothing and want at least something, my Mini Maker can get you there!

Random Tables

After getting introduced to wiki structure when Wikipedia was just hitting the mainstream, I wrote this widget to combine wiki technology and the random table generation used in role playing games when leaving things up to chance. I had been using the TableSmith program on my laptop to generate random tables, so simply borrowed the syntax for the table and wrote my own wiki interface to edit the tables.

Well, the idea was popular, and even the syntax was the same base, but the result was much more powerful what Abulafia came up with. They built a custom extension for the MediaWiki wiki utility to harness that very advance wiki engine, and give it the power to randomize. I have moved several tables from my widget to that site (take a look at my contributions to re-find those tables), and would highly recomend that wiki site as the source of your random inspiration.