September 2002 Archives

New Site Launch

| | Comments (4)
Happy Weekend Everybody! I stayed up until 6:30am last night working on the new site design. As mentioned earlier I got fed up with the slow development and lame bugs in phpWebsite and have switched to geeklog. I'd like to expound some the details.

geek log really is a great tool. It was pretty simple to use their web based install to get a barebones site up and running. Geeklog, like phpwebsite runs off of a mysql db backend. It was tedious to carve out a script that would migrate all my data from the old database to the new, but now that it's done it didn't seem such a chore. And it was really worth it to maintain the same users and ownership of objects. The only problem is the passwords were different lenght MD5 strings and there was no way to reverse those except through brute force so I just set the password to a default string. You can download my conversion script here if you'd like.

One interesting problem I ran into in the conversion process was with the secondary user definition tables; gl_group_assignments,gl_group_assignments, gl_userprefs, gl_userindex, gl_usercomment, and gl_userinfo. Now this is hard to blame developers for, but it's worth mentioning for people creating conversion scripts. The authentication routines SESS_userData et. al. read data by doing selects from multiple tables. For example doing an inner join on the user table and the preferences table. Initially I didn't convert those secondary tables. I just copied the users table. Subsequently, I was getting a 1064 mysql error where uid= because this inner join SELECT query had returned zero records because there were no secondary records to join with the user record. Hence, any of my newly copied users couldn't login. This is easily solved by looking at the geeklog createuser function and seeing which tables and what defaults they use to add a new user. Then you duplicate it in your conversion scripts. It would be an elegant touch by the developers though if the session routines checked for the existence of those secondary tables before trying to establish as session's validity. Then if there is a user and no secondary records, you can create a reasonable set of defaults. Short circuiting the mysql error I encountered. Then you can defer the creation of secondary records from the creat user routine to the first read of a user for session authenication.

But all and all the script I wrote converted all the information I valued (users, topics, stories, blocks). And geek log is just kicking bootay. Itransferred polls and static pages by hand later because I didn't have very many.

I was pretty impressed with the templating. It's not very deep, but the divisions are very elegant. I didn't have any problem modifying the gameserver theme by Simon Lord (slord.DONTPSPAMHIM.mac.com) to meet my needs. Key words are enclosed in {curly_braces}. I didn't look for or need a list of availably exported keywords. I just copied them from Mr. Lord's theme. I hope I didn't miss anything important ;)

I did see some problems with the temlating library. Specifically you know the comments at the end of the stories? The html for those blocks is HARD CODED into lib-common.php. So if you want to give your comments a local look and feel you'll be modyfing the main source tree. I'm going to see if I can override the COM_xxxComment functions in lib-common-local.php. Then I'll send my template and code changes into the team.

Another interesting point I would like to let the geeklog developers know about is that certain template keywords aren't replaced globally. I tried to put {welcome_msg} in the rightblocks.thtml file so as to have it appear over right most column of blocks, but it is ignored. Same with {datetime} in footer.thtml. No biggy, but noteworthy.

Finally, outside the code there is the really fun part. Photoshop. There is nothing so instantantly gratifying in computers as having form and color manifest instantly before your eyes. It's a mystical combination of art's abstraction and science's squareness. I basically did this with two images. The first image was a main logo concept which also integrated a blank background space below it to contain story/block content. I designed the block as a generic empty image. Image ready slices allow you to assign certain slices text content rather than image. Using that you can punch {template_values} directly into image ready. It's still not perfect and you'll need to do some background image tricks, but it gets the idea, the images and the code out really quick.

Another unexpected problem I ran into was using the png format. I thought hey I could be noble and have one of those gif free sites. Using the superrior png format would be a big plus. But it turns out that IEv6 cant render the alpha layers of a png correctly. I of course developed on OSX where both IE and Mozilla handle PNG24 format correctly. A virtual PC render test clued me in. It was a minor problem to just change the export format of my photoshop templates. I hope that MS fixes that soon because it looked "crisper" with the pngs.

This new design has many more images that the last one. They is lot's of repeated use of image components and large images are reduced to small color spaces for size, but it's still bigger than the old one. I'm be interested to see how it affects my bandwidth utilization for this site. A "wget -p http://www.jimweller.net" fetches the pile of items that it takes to build the homepage. That pile is 608k which isn't bad as far as net bandwidth, my 667Mhz TiBook has some sluggishness rendering it. I'd also be interested to hear any feedbock from people out in the world. How does it render on your computer? Does the eye candy work you CPU?

I don't miss phpWebsite all that much, but it had some nice features the geeklog folks might want to emulate. The first I can think of is in the blocks admin panel. There were little up/down errors next to each block in list view. When you clicked an error that block's layout priority was incremented/decremented. It's a handy way or reordering blocks without a full on form load. Anything that you can do in list view would be helpful for that matter. Like a story delete button.

Also story previewing isn't all that convenient when images are involved. Because the images don't work right. I know it would be pretty complexe, but it might be a good semantic to change the "preview" button to a "save as draft" button a-la email. This would just do a save and take you back to the story edit view instead of to the list view where you have to click the obscure number-edit link to edit the story. This would also avoid the user having to behave differently when images are involved.

But story submission isn't all three click previews. The fact that you can embed 5 pictures into a story is GREAT! I'll keep my galleries outside of geeklog for now (isn't there a gallery plugin?), but at least I can link to them with a nice thumbnail without coding an IMG tag into my story.

That's enough ranting and a good couple hundred lines of code for developers to think about. I'm off to clean up this them to hand off to the geek log team. Thanks phpWebsite I hope you get time to add the polish to a good start. And thanks geeklog for a pretty polished blog. I think they going to get some good development out of me on this one.

Jim Weller
9/29/02 9:16 PM

Charlemagne's Champion

|
I just finished reading (for the second time) Chalemagne's Champion by Gail Van Asten. It's a piece of trash compared to either tech or literature. But it's a fun read with some exciting moments.

The story is about a witchling bastard child that is beget by Charlemagne and his sister the witch. He starts life rough, but get's to train with the knights and nobility. Charlemagne never admits to siring him. Like rudolph the red nosed reindeer he is shunned and scorned by all.

Until he starts kicking serious ass. Then he gets all the good jobs and earns Knighthood. He does awesome in battles and kills major foes.

Well read deeply enough and you'll learn that he is a god (Apollo) incarnate (even though he doesn't know it. When he dies in a batlle by treachery his sword (also a god of sorts) carries him off to a temple to heal (months). But now he's this bitter cripple that killed his best friend with the evil sword.

So he takes up minstrel work and uses this song that he writes of his deeds to accuse the traitor that got him killed in battle. This is done before the whole royal court and ends in the traitors death.

The ending leaves you sour and the next book The Dark Sword's Lover is just creepy. But it is a good trashy read for when you're feeling like slumming it. So check it out.