Wilminator.com Logo

Open Source Projects

I have been a big fan of open source software. I personally chose to use Apache, MySQL, and PHP at work and also have a copy installed on my personal computer for development. With all the cool games and utilities I have come into, I plan on returning the favor by publishing some of the utilities I have been working on for use by others.

I have quite a few projects that I want to release, but only the ones I have properly GPL'ed or LGPL'ed will be available on their own pages.

Errorlog

Status: Ready, Available

If you are using Flash Remoting or do not have access to PHP_DBG or another online debugger, this library is the next best thing! It allows for call stack dumps to file and has the ability to properly close finicky resources before a script is forced to terminate.

JS Rip

Status: Ready, Available

This nifty library converts PHP data structures and object into JavaScript and Javascript data structures into PHP. What good is that? Imagine being able to easily dump a part of a table into your client side JavaScript as data!

Config File

Status: Ready, Available

Does your program have a config.php file that is more than fifty lines of defines and constant assignments? Do you want to provide the administrator with a way to manually configure a service or program? Just need a way to record preferences for a user? This library can do all the above. Using a slighly expanded version of the old .ini config file layout, this library provides a simple and efficient way to retreive and set values from multiple config files.

CDB

Status: Ready, Unavailable

When I first started scripting to use the MySQL database, I read very interesting words of advice:

"If the part of your code that is responsible for database access has been properly abstracted/modularised, converting it to run with a replicated setup should be very smooth and easy. Just change the implementation of your database access to send all writes to the master, and to send reads to either the master or a slave. If your code does not have this level of abstraction, setting up a replicated system will give you the opportunity and motivation to it clean up. You should start by creating a wrapper library [...]." (MySQL Manual, FAQ in Replication chapter)

This is that wrapper library. It allows you to determine the conditions needed and availability of servers to execute specific types of queries. In addition, CDB can easily be extended to use any database server that PHP has functionality to use.

Database Config

Status: 90%, Unavailable

After working on the above two projects a little bit, I realized that I would need a meaningful way to store cluster configurations. I had the tools, so I wrote a wrapping library that allows for a config file to dictate the setup of a cluster.

Auth (authentication module)

Status: 90%, Unavailable

Yep, you probably guessed it. This site is punning on my Auth project. The intent was to provide a secure framework for web-based authentication for site and web programmers.

A few of the reasons you may want to use the Auth authentication system in your next site or project:

  • Flexible installation- this module is designed so that it can be installed wherever the site maintainer wants. The installation and use is greatly simplified by a common config file (which can be located outside of the web directory if the box admin will permit) and a common loader file that will load all of the modules from their appropriate location.
  • Ease of integration into coding projects- the whole system is loaded by including one file. There are many helper functions that wrapper common uses of the authentication system, including login verification, permission and membership verification, and account hold checks. All of these can also be checked and cause a redirect if the conditions are not met to a login page, a default page, and an error page in case anything goes wrong.
  • Authentication, not anything else- this is only an authentication system. It does nothing else. While it means that you must build your own security into your project, this also means that this system does not dictate anything to you. You decide what happens when conditions are or are not met.
  • Scaleable to accomodate multiple applications simultaneously- this system contains a concept I call context membership. With context membership, one web site could host multiple applications or projects and have unique permissions based on each. This allows for delegation of account administration to persons within a project, as well as allowing for the use of one account to access all of them (if the application permits the user!) In theroy, if a webmail app, a forum app, and a calendar app all used this system, a user could use one account to access all the apps and no one would have to change any code!
  • Per-application permissions- this authentication system allows for each application that uses it to designate and enforce its own permissions. Permissions can also be assigned by designated application power users or automated system accounts. Applications do not clobber each other when assigning permissions.

As a proof of concept, this site is currently running two concurrent applications: the Dragon Star Engine and Netstore, a web-based file storage system. You can play on DSE without any user intervention, but need an admin to grant privileges to the online game admin section. Likewise, you cannot even see Netstore unless you log in, and then can't access it without an admin granting you access.

Netstore

Status: 70%, Unavailable

There have been many times when I needed to get a file to myself but had nothing to save it on. In addition, I didn't want to email myself because it was a waste of ny inbox space. So I created Netstore. Netsore provides two things- a private store for me to put my own things, and a public store for sharing files with the community at large. I can control the size of the public share and default private store sizes in a config file, and as an admin, I can increase or decrease a user's quota manually. So far, I plan on using it as a repository for contributors to my DSE project. Later, I plan on virtuallizing the directory structure to make it more secure and allowing for users to simply make their private files available for public access.