For a while I have wanted this blog to be little more than an aggregator for some of the other thins I am working on. I thought LifeStream would do that and it does … sort of. LifeStream does a pretty good job of catching what is new, particularly from the Social sites (e.g. FaceBook, Twitter, etc.) and linking to it. What it doesn’t do is actually display content in a way where it can be read without leaving this site.
So I have moved LifeStream over to the sidebar using the LifeStream widget and reduced the number of feeds it monitors. In its place, I am now using FeedWordPress which is a plugin that monitors feeds and add the content as posts to this blog. Yes, some of the content is duplicated and I am ok with that. It allows me to have a single place where all of the content is available in one spot.
I prefer to post in content specific sites (e.g. on www.wp-SwimTeam.org) for certain projects so that material is self contained. But at the same time, I want that material to exist in the steam of all of the other things I am doing (this blog). So far it is working as I expected although I did end up with a category explosion when I added a couple feeds. That took a little while to sort out.
When I am working on the plugin I find that I frequently need to populate the database with a bunch of user and swimmer information. It is easy to add a few opponent swim clubs and some other information but adding a bunch of dummy users and swimmers takes a while.
This past weekend I started working on a separate plugin that will populate the database with a random number between 25 and 100 dummy users each with between 1 and 4 swimmers, each registered for the current season. This generation of users and swimmers happens when the plugin is activated. The plugin can be deactivated and then activated again to add additional users and swimmers.
This plugin was used to populate the database on the new wp-SwimTeam Demo site.
I have noodled on how to handle wp-SwimTeam’s dependency on phpHtmlLib on several occasions. Today I was at the gym with my mind wandering while I was on the elliptical machine, I started thinking about it again.
I am considering pulling it into the plugin as SVN external. This would allow me to ensure it is always installed. Doing this will greatly simplify the download and installation process for the end user as well which ultimately will make it easier to support users of the plugin. The more I think about it, the better idea I think this is. I need to read up on SVN externals!
The overhaul of phpHtmlLib is largely complete, I just need to validate a few more things before I call it done. One of the things I did during the overhaul was to add some things to the library so it will load as a WordPress plugin. This will make installation and configutation much easier. The changes to phpHtmlLib made the migration from PEAR to the WordPress database abstraction class much easier.
While trying to get a demo site up and running I ran into an issue that has taken me down a path I didn’t expect to head down at this time. But now that I have run into it, I have decided to fix it correctly.
The wp-SwimTeam plugin depends on phpHtmlLib and the 2.x version of the library requires that it be installed in the web site’s root directory. This typically isn’t a big deal but in some cases can be inconvenient. It also requires the library be named phphtmllib as the path is (was) encoded into quite a few of the widgets.
When I uploaded the library to the new demo site, it didn’t run correctly. The demo site is running PHP5 which I immediately suspected as the problem. So I loaded PHP5 and phpHtmlLib into a new virtual machine (I love VMware, it is wonderful for configuring different environments) and all the examples ran just fine. Odd, very odd. Digging into it further, it looks like the hosting provider’s PHP virtual directory support setting is different than what I had locally and affects how include files are handled.
A couple of tests confirmed my suspicions. Since this hosting provider is large, I suspect this PHP configuration is pretty typical and it provided sufficient motivation to go back and fix phpHtmlLib 2.x so it can be loaded with appropriate configured PHP define() statements. If you look through the phpHtmlLib forums you’ll find this is a fairly regularly requested item (including by me) and phpHtmlLib 3 (which requires PHP5) is configured this way.
Over the last couple days I have been updating the phpHtmlLib 2.x branch to support this configuration method and now have it all running correctly in my development area. Before I commit all the changes, and there are a lot of them, I need to verify it all works in the suspect hosting environment.
The trickle down of setting up a demo site resulted in an overhaul to phpHtmlLib. It needed to be done anyway and doing it will allow phpHtmlLib to be loaded as a WordPress plugin eventually.
I have had a couple ask recently about a demo site for wp-SwimTeam so I think I am going to set one up that people can play with. The plugin is current live on the MacDolphins web site but since that is a real team and real data, it isn’t a suitable sandbox for people to explore.
If I can set up another instance of WordPress underneath this one to demonstrate the plugin, I will make it available for play with. I am not sure how to assign new users the necessary permission to admin the demo site since that would provide them a fair amount of control over the actual WordPress install itself. Hmmm … need to think that through before I turn it on!
It seems like most of my free time has been consumed with swim team lately. I volunteered to help bring the MacDolphins into the 21st century this year and it has taken quite a bit more time than I expected it would. A lot of that is because it is fun working a technical problem and doing it right.
We had some goals for the season.
- Report results in a timely manner.
- Capture times and keep a history so swimmers and parents could monitor their progress.
- Electronic registration to minimize data entry errors.
- Communicate quickly and effectively.
After searching the internet for an existing swim team solution I determined there really wasn’t anything suitable do I decided to write my own WordPress plugin to address part of the problem. I had no aspirations to build a complete solution but I did want to offer something which addressed goals 1, 3, and 4 above. I started working on the plugin early this year and for the most part, it is working out pretty well. I wish I had a few more things done but I am happy with what I have been able to do.
For actual meet management, our team (actually me) ended up choosing WinSwim over the industry standard Hy-Tek solution. I went with WinSwim mostly because their support was excellent and their ability to import our roster electronically. For whatever reason, Hy-Tek has made doing this difficult if not impossible to do. (Read more on my wp-swimteam plugin blog regarding my dealings with Hy-Tek.)
WinSwim is easy to use but it hasn’t been without some problems. Fortunately they don’t seem to mind the volume of e-mail and issues I am sending them and they turn around solutions really quickly. To distribute the data our parents and swimmers want to see (mostly their times), I have learned quite a bit about Crystal Reports. It is pretty powerful once you get the hang of it but the learning curve is non-trivial. This weekend I think I had the “ah-ha” moment because now I am able to edit and create new reports pretty quickly.
The season is coming to a close and I still have a few things to do. I need to get end of season reports done for our banquet. I think this will be pretty straight forward now that I think I have a handle on Crystal Reports!
The Swim Team Overview, the first page the plugin presents to end users, has been updated to do something useful. It previously had some placeholder text on it. Now it reports the active season and the number of active swimmers per age group.
Today I finished the first pass on generating an SDIF file for the roster. I sent it to Hy-Tek and it doesn’t import. Great. Apparently they don’t seem to support all of the SDIF specification, just some of it. No mention of that anywhere on their web site.
On the plus side, I found a better version of the SDIF specification on the WinSwim web site. If I can get WinSwim to digest the SDIF file I generated, I may push our team to use it.
I have been trading e-mail with a support guy at Hy-Tek regading Team Manager’s ability to import SDIF. After our dialog, I am not sure Team Manager can import the roster I am trying to generate. It can import results but based on the samples Hy-Tek sent me, it isn’t clear if it will deal with the D1 and D2 records or not. Since they won’t send me an evaluation version, only the Lite version which doesn’t support SDIF import, I have to sending them my SDIF file for them to import and see what I get back.
I am also looking at WinSwim which actually looks like a better solution for most club swim teams. WinSwim also offers a really useful SDIF Checker which will help me out greatly. Using the checker, I should be able to send Hy-Tek what I believe is a good SDIF file.
It really boggles my mind that Hy-Tek is the defacto standard when their tool is so hard to use and to get data in and out of. Convincing our team that WinSwim may be a better choice for us will be no small feat.