Web Site Evolution, Part I

Or, From Static to PHP Just a little background I have had a web site of some sort since around 1995. What you see on this site is, of course, the current implementation. As with most sites, this is not how it started. Though I have worked with some of the technologies used to created dynamic web sites, I have not used them to my own web site until fairly recently. For a very long time, I had a purely static web site, static HTML pages and mostly static content, too. Between then and now, I have experimented with various approaches, still having a mostly static result. Other than just adding some simple links pages, the early changes were to add some of my photography to the site just to add some spice. This helped some, adding some visual interest if not much else. For a time, I experimented with the ArsDigita Community System(ACS). This web application framework was written in Tcl, ran on AOLserver and used the Oracle database server. This had the capability of creating dynamic web sites, though it also included an associated cost that made it prohibitive for my to use long-term for my personal web site. OpenACS offered an alternative to this. Based on ACS, it used the PostgreSQL database instead of Oracle. Also written in Tcl and running on AOLserver, this provided the capability for dynamic web sites with a lower cost of entry. While fun to experiment with for a while, I felt the need for something more, more mainstream that is. Part of the desire to use mainstream technologies was the desire to development marketable skills. So, during the ACS experimentation, I also looked at having a Java based web site. This testing and evaluation was done using the Apache web server combined with the Jakarta Tomcat Java Servlet container. This, too, was fun to work with and more popular than Tcl and AOLserver. Further experimentation used Perl and Python with the Apache web server, two other popular solutions. Eventually, I ended up with the framework I have now, which seems to be growing in popularity. What next? Developing web applications at work with Microsoft’s ASP demonstrated the ease of development offered by scripted web pages. The addition of VB COM components handled the intensive tasks. This combination allows for fairly rapid development, with compiled code providing increased speed where necessary. With my personal web site, I do not expect to have traffic that would require compiled code. It is possible some portions in the future may be compiled, but I expect that to be the exception more than the rule. As for the Microsoft tools, I am also reluctant to spend the money required to license the servers and development tools for creating and running a personal web site. That is not to say that I will not do that in the future, only that I have not done it for a while. During my independent consulting days as BSoft Productions, I did have a Microsoft MSDN subscription. When that was no longer tax deductible as a business expense, the subscription and the expense ended. Now that ASP.Net works with C#, it may be worth making the investment again. But, I digress. The use of Microsoft technologies raises again the cost factor, which can be substantial. ACS was cost prohibitive due to Oracle and the skills to be gained using Tcl and AOLserver technologies used by OpenACS were not quite marketable enough. Web technologies have changed since then as they continue to do. The ease of development offered by scripted languages such as Perl and Tcl continue with new languages being added. One such language is PHP. After some experimentation with it, I decided to rework my web site using PHP as the basis. A web server running Linux, Apache with mod_PHP and using PostgreSQL for the database provides the capabilities for hosting a dynamic web site while still offering the low cost factor. With the growing popularity of PHP, the skills may have future marketability also, though possibly not as much as with Microsoft technologies. However, in order to pay now to earn later, you need to be able to pay now, which I cannot afford at the moment. The choice I made should be a nice compromise for personal use. While the syntax may be different, PHP web pages offer scripted classes and inheritance. I have heard that ASP.Net and C# offer this as well. Though I have not yet had a chance to work with the .Net technologies, I plan to do so when the opportunity presents itself, but I digress again. Current implementation Over a couple days time, I made some changes that will provide a framework for future enhancements. The first change was to add the Gallery software to allow for easily adding images and albums without requiring code changes. The second change was a bit more drastic, replacing the static HTML pages with a framework written using PHP. This framework is based primarily on the support of classes and inheritance offered by PHP. There is a base class for a Page, which the individual pages inherit from. Supporting the Page class is a Breadcrumb class and replaceable PageSection derived classes. The class inheriting from Page provides the actual content for the pages. The PageSection derived classes, PageTop, PageCenter and PageBottom, serve a supporting role to the Page classes. The use of CSS and replaceable pages and page sections derived from common base classes allow for easily changing the look of the entire site. The next article will have more details on the beginnings of the framework. Proposed enhancements The quick, two-day change is just the start of the work I have planned. While the use of a pre-written PHP framework may allow for a more rapid implementation, it would not provide the educational experience I also desire. Besides, I am not even sure such a framework exists and searching for it has not been a priority. A few of the changes I have planned are to use the database for data storage. The first few changes are for the articles, links and bookshelves. I will provide more details on these in future articles, but here is a quick overview. Articles: The current implementation for articles includes the page contents by reading the data from a static file. This was the quickest change from static HTML to using PHP, but does not provide the dynamic nature I wish for. The article data needs to be stored in a database according to topic. The first iteration will likely have the entire page data stored. Eventually, I would like to store different segments of the articles separately to allow for better formatting capabilities. Links: Maybe I have too many. I definitely have too many that have gone stale. Moving them to the database will provide an easier way to manage this. A regularly running script can check the database for stale links, marking which ones have possibly gone stale or are just having the site reworked. After being stale for a time, they can be automatically hidden and marked for removal. Bookshelf: I had started creating bookshelves to track some of the books I have on my shelves. As with the articles, I have books on many different topics. To present some of these on the web site, a database would provide an easier way to add new books without having to modify the pages to do so. I would like to have the ability to add new book entry simply by entering an ISBN number. The admin pages should be able to find the cover images to use for creating the links. Conclusion This seems like a lot of work for a personal site and it is given the time constraints of family life. While some individuals may benefit from the information presented, I feel I benefit the most. The educational experience alone is worth the effort. Besides, maybe the framework will become good enough to share or, at a minimum, others can learn from my mistakes.

Little Red Ride

Or, My First Bike Yes. I did get a bike. No. I have not yet passed the MRC:RSS. Hmmm. How do I approach this? My original goal was to get decent gear, pass the MRC:RSS, get my license and then buy my first bike. I still want to do all those things. Only the order has changed. That’s my story and I’m sticking to it, though I can provide a bit more detail. After several months of not being able to take the MRC:RSS, I was getting tired of waiting for a chance. I could just try to wait it out, but I didn’t want to wait another year. I had started waiting last year for this year. I didn’t want to put it off for another. I still believe in the value of the education provided by the course. I am thankful for the knowledge I did receive from the portions of the course I was able to take. If I did not have at least some foundation, I wouldn’t have altered my path the way I did. But, I did and I’m not sorry either. I had taken a look at a local bike that would fit me fairly well. It was a Suzuki Bandit 600S, and it was red. But, I didn’t get it. During the discussion with the owner and a friend of his, I became a bit apprehensive about it. It had been sitting for a while, several months in fact. I asked about what he did before storing it and he told me, but a specific piece of information I was looking for was missing. Later in the conversation, I asked if they ever put StaBil in the tank. The owner mentioned that the dealer might have done that. It was obvious that he didn’t know what it was for. His friend clued him in. This was to be my first bike and I was looking at it, alone but for my wife. What did I know about evaluating a used bike? Nothing. That’s what. While it may have been minimal, I didn’t want to risk carmelization and a possible carburetor overhaul. There was quite a bit of fuel that could have carmelized, too. It sloshed quite a bit when I rocked the bike sideways. Also, I haven’t heard of a dealer doing something that wasn’t asked for. Since the owner hadn’t asked, I doubt it had been added. Progress on finding the right bike was slow. As I didn’t know what type of riding I would be doing, I wasn’t exactly sure what I wanted. Reading various reviews and comments on web sites gave me a few more choices. I knew I wanted a standard. That would give me a good balance between a crotch rocket and a cruiser, neither of which really attracted me. My readings pointed me towards either a Kawasaki ZR-7, a Suzuki Bandit 600S or a Suzuki SV650. I went to look at another Suzuki, an SV650 this time, a new one. I visited a couple of dealers, each of which had a new SV650 in stock. One was blue. The other was red. I didn’t get either one, though a slight change in pricing might have changed thing. It wasn’t the price actually that caused me not to get it. The difference in prices allowed the circumstances to play out. Both dealers had given me out the door prices over the phone. I won’t debate the value of that practice here. Suffice it to say that the red one was slight higher priced than the blue. Blue is my favorite color, too. But, I digress. After speaking with the dealer selling the blue SV650, I managed to get some time off work and went for a visit. The sales person I had spoken with was busy with another customer, along with their significant other. During a quick break from them, he asked if I would wait a bit while he finished with them. No problem. I could wait a little while and went to look at the bikes. I found the blue SV650 parked outside around the corner. I sat on it and tried out the fit. I walked around some more and tried it out again. I had been there a little while now and went back to check on the sales person. My salesman was still busy with the original customer; I could wait a little more. After a bit more waiting, I heard something a customer should never hear. The original customer had walked outside to look at the bikes again and my salesman was in a heated argument with someone that I guessed to be the sales manager. They were cussing up a storm, in the showroom no less, and in front of several customers. This complete lack of professionalism really turned me off. Then, to top it off, my salesman started talking to another customer right in front of me. They obviously didn’t want my business. So, I left. Besides, the lean angle on the SV650 bothered my back a bit. I wasn’t sure I could take that for a long period of time anyway. I needed to look at something different. Earlier in the year, back when the motorcycle show was in town, I managed to attend it. I attended another one when I went to Minnesota to pick up my Aerostich. Of course, I’m going to sit on some bikes at the show. That’s what we go for. Right? There always seemed to be one brand that I was more attracted to than the others. They’re a class act for sure. Quite a few people think so anyway. I did too, though I wasn’t sure I could swing it. As with many motorcycle manufacturers, there are larger models and smaller models. My preference was for a particular larger model. My long-term goals would have picked a different model, but for a first bike, this one might work ok. The smaller model was nice, too, but I liked the larger just a bit more. Though the motorcycle shows had been months earlier, I started thinking about these bikes again. I should go take another look. After a perusal through the manufacturers’ web site, a search of the dealer locator page and a few phone calls, I found a local dealer who had the model I was interested in. Though late in the day, I arranged to go take a look at it and try it on again. This I did. I tried it on and had a good conversation with the salesman. Again I heard something I had not expected to hear at a dealership. The salesman told me that I should not buy this as a first bike, but should buy a smaller Japanese bike to learn on. Unexpected? Definitely. But, it made me want to give them my business just on principal. The dealer was Laurel BWM in Westmont, IL and they only sell BMWs. He was telling me to give my money to another dealer. That’s unheard of, to me anyway. Rafe said that the R1100RL was just a bit too large for me to start on. He had an F650, but wanted to keep that as a loaner. It was hard to believe that they would sacrifice a sale for the good of their customers. Needless to say, I was impressed. I did end up buying a BMW, but the smaller one. I am now the proud owner of a 1998 BMW F650, red, of course. Chicago Cycle had it in on consignment. The prior owner was moving to the West Coast, riding his GS, and couldn’t take the second bike. His loss is my gain. This will be the bike I learn to ride on. With less than 2000 miles on the odometer, a year left on the warranty and a price to match the SV650 I had looked at previously, it looked like a winner. That it was a dual-purpose and could handle whatever type of riding I might decide to try was a bonus I couldn’t pass up. The salesman, Mike Abt, made the purchase a very pleasant experience. Have you heard of low pressure? This was no pressure. He made me feel totally comfortable and I thank him for that. I can look back on the experience with fondness instead of regret. My wife is not what I would call enthused about the idea of me riding a motorcycle. She is, however, supportive of my endeavors, even this one. I had called many of the dealers listed on the BMW dealer locator page, asking about what they had in or might be expecting, but found nothing. I was ready to call it quits and wait some more, when my wife suggested I try a few more. My call to Mike yielded the winner. He had received it just two days before I called. Thanks to my wife, my Little Red Ride is now parked in our garage. To come full circle, I do still intend to pass the MRC:RSS. In the mean time, I will learn to ride and get my license. Either this year or the next, I will take the course again and fully expect to pass, even if I do get more bad bikes. Following that with the ERC will get my motorcycles adventures off to a good start.

A Long Time to Nowhere

Or, Still Missing the MRC:RSS It has been several months now, but yes, I am still missing the MRC:RSS course. However, that is not to say that I didn’t pass the course. Well, I haven’t done that either. The thing is, I still haven’t retaken it. I know. I know. I wanted to take the course before doing anything else, before getting the motorcycle or my license. It’s just not working out that way. I did have confirmed reservations in two courses in addition to the one I had first taken. But, circumstances conspired against me. That seems to be happening a lot lately. I hope it is not a sign of how most things related to motorcycle experience are going to go. The first course I was scheduled to take was the single weekend version, Friday night and all day Saturday and Sunday. Well, I had something else that needed to be done that Sunday. Don’t you hate it when that happens? Yes. Yes. I know. Where are my priorities? Anyway, I didn’t bother to show for Friday night to check in. It wouldn’t be fair really. Someone else might be able to use the spot to actually pass the course. The most I would get is some more practice. Besides, my elbow wasn’t quite healed yet. The second course was of the two-weekend variety, with afternoon sessions on Saturday and Sunday two weekends in a row. I really wanted to take the course. After all, I had missed the previous one and I did still want to pass the course before proceeding. But, then I did have something that needed to be done the following Sunday afternoon. You know. It was the Sunday afternoon when I would be taking the exam. Knowing that I wouldn’t be able to make the following Sunday for the exam, I tried a different tack. I showed up as a walk-in for the morning session. The next four weekend mornings were open, no conflicts. Getting the registration would mean I wouldn’t have to worry about attending the afternoon session. I would be able to take the course and keep to my original plan of passing the MRC:RSS before taking the next step. Can you guess what happened? The morning session wasn’t quite full. At least, not all of the confirmed registrants showed up. I was the second person there that morning, which gave me a good chance of getting in, or so I thought at the time. Then a few other people showed up. No, they were not confirmed registrants. But, for me, the effect was the same. They were confirmed walk-ins. And there were more of them than spaces available. No morning sessions for me. While waiting for the instructors to arrive for the first session, I talked a bit with the person ahead of me in the queue. He was a young guy. Well, younger than me anyway. I think he was in his late teens, still a kid. His father had just bought a local motorcycle dealership and he wanted to help out around the shop. In order for him to do that, he needed to get his license. The best way to learn to ride and get your license at the same time, at least in Illinois, is to pass the MRC:RSS course. I felt sorry for him, actually. He really needed the license, more than I did anyway. He needed it to work. I wanted to ride for the fun and enjoyment of it and to commute to work, though for my three-quarter mile commute, my truck did suffice. Besides, I did have a conflict that would prevent me from taking the exam. Sometimes, I wonder if I’m too nice. I gave the kid my registration card and told him I wouldn’t bother showing up for the afternoon session. And, I had a confirmed registration, too, not a confirmed walk-in, but an actual registration. But, I still wouldn’t have passed the course. And, he did need it more than I did. It turns out that the registration card didn’t help any, though my not showing up did. He was able to attend as a walk-in and managed to pass the course. I found this out from an interesting source. I received an email the Monday morning after that first weekend. A fellow worker had attended the same course, heard my name called, and wondered if they were referring to me. They were. Oh, and she passed it, too. The end of the season is nearing. Soon, there will be no more courses until next year. I still have a goal of passing the MRC:RSS and eventually the ERC also. If I find some courses scheduled that I might be able to attend, I’ll try for another walk-in. In any case, there is always next year.

How Not to Pass the MRC:RSS-Follow Up

This is a follow up to How Not to Pass the MRC:RSS I went to the doctor yesterday to get my personal inspection. After a couple of consultations and several x-rays, I learned that I have a hairline fracture in the radial head, the end of the radius bone of the forearm where it connects at the elbow. I am surprised I was able to ride at all after it happened. I must have been running on adrenaline for the next several hours. It makes me even less surprised that I did not do as well as I would have liked on the evaluation. It was slightly painful. Does this change anything? No. It doesn’t, at least not much. It increases the hardness of that school of hard knocks. I am now even more aware than before of the need to not lock the front brakes. But, I still want to learn to ride. I know I still need the practice. No matter how long you have been riding, there is always something more to learn. In my case, the learning just got delayed a little more. According to the doctor, I should wear a sling for a couple of weeks and resume normal use. Within a month, it should be fully healed. Bummer. My next class was in less than two weeks. Looks like I will miss it. I have another class already registered for June and maybe I can do a walk-in before then. I have not yet begun to ride. But, I will soon.

How Not to Pass the MRC:RSS

Or, Missing the Certificate In case you haven’t guessed from the title, I took the Motorcycle Safety Foundation’s Motorcycle Rider Course : Riding and Street Skills, and did not pass. Actually, I am not too surprised at the outcome. There are many things to learn and much has to go right to succeed. Sometimes things happen just right. Other times? Well, have you ever heard of Murphy? The classroom portion went really well. Though not used to getting up at 6:00am and then having a fourty minute commute, I was able to maintain concentration through all of the modules, MSF speak for sections. Both video and course workbook were absorbed in due course. This part progressed quite smoothly. The result? I only missed one question on the written exam, though I have no idea which question that might have been. The skills portion, however, went entirely different. Problems of one kind or another surfaced, quite reqularly, too. Blame, though, is a shared thing, and it can be all too easily distributed. In this case, I had quite a bit to go around. Before I discuss the problems, let me set a little background. The course is designed to learn things in “building blocks.” Each new skill builds upon those previously learned. This makes sense. You don’t learn to run before first crawling and walking. Motorcycling is the same. Simple skills are learned that are then combined into more complex actions and at greater speeds. Throughout all of the other problems, one that I could control kept recurring, more so than the others at any rate. For the better part of my life I have had a habit. This particular habit does not carry well into the world of motorcycles. The habit? Watching were I am going to put my feet. Yes, something as simple as looking down. What happens when you do this on a motorcycle? If you look down, you go down. I didn’t go down. Well, not because of this anyway. But, it does tend to make things unstable. This bit me a couple of times during the skills evaluation, along with some other things. I’m getting ahead of myself here. So, I’ll backtrack to the first day of practice and start from there. Actually, it started rather well. Starting with the engine off, we straddle walked our motorcycles from one side of the course to the other and did the same thing coming back. Next, we were assigned to a partner and took turns pushing the other across the course and back, still with the engine off. Between each of the exercises, or at least most of them, there were twentyone in all, we would get off the bikes and meet with the instructors for a brief description of what came next. Once we got to the motorized exercieses, an instructor would demonstrate the exercise and the route we were to take through the course. It is rather difficult to do something if you don’t know what it is you are supposed to be doing. I had no problem understanding the instructions and … I’m getting ahead of myself again. The motorcycle I first started on was a Nighthawk 250 of an unknown vintage. It was a functional motorcycle and did me well for a while. After one of the exercises, though, it decided it had had enough. After the motorized exercises, we rode back to a staging area. This is where we would park the motorcycles, dismount and go listen to the instructions for the next exercise or go take a break. The procedure for ending some of the earlier exercises went something like this. The riders would circle the permiter of the course, heading for the designated area to regroup, as it was called. Each rider is assigned a place to park as they come in. We hit the engine cut-off as soon as we are at our designated place and, when instructed, dismounted. All is going well. After receiving the instruction for the next exercise, we each return to our motorcycles and prepare to begin the exercise. To begin the exercise, we are to start our motorcycles, wait for the neutral gear check, and then move out one by one as instructed. Well, I couldn’t do that. The Nighthawk had had enough. The transmission would not go into neutral, no matter how hard I tried. It would go into second, but not into neutral, even when the instructor tried. So, the range aid, a person assisting the instructor for the skills practice, took over with me while the instructor went back to the other riders who were out practicing without her. A quick check by the range aid revealed that a swap was in order. So, I straddle walk the motorcycle over to the large storage container the motorcycles are delivered to the course in and the range aid begins preparing another motorcycle. It was cold and needs a bit of warm up time with the choke before I depart. Eventually, I am able to rejoin the exercise in progress, though after missing most of it. Remember what I said about building blocks. The next motorcycle I am assigned is a CB125, which is a bit smaller and more cramped than the Nighthawk had been. It also seemed a bit tempermental. It could be that I just wasn’t used to it, or to motorcycles in general, but the throttle seemed to me to be a bit off. Maybe it was just cold. Maybe I just did not control it delicately enough. In any case, I would let out the clutch and it would try to die on me. Rolling on the throttle a little didn’t seem to help, though letting out the clutch would send the rpm skyrocketing. The range aid mentioned something about needing to be very ginger with the throttle. In the meantime, I was fighting the throttle and the choke, but not for very long. A couple of exercise passed without much of a change. I was learning some new things; still having some problems looking where I shouldn’t, though starting to get the hang of it. I was starting to look where I was supposed to, fighting the habit, and winning on occassion. We received instructions for the next exercise and were sent back to the motorcycles. The instructions came. “Mount up.” “Start your engines.” But, mine wouldn’t start. A check by the instructor confirmed I was doing the FINE-C (Fuel, Ignition, Neutral, Engine cut-off and Choke/Clutch) procedure properly. Either the battery or the electric start had died. It was time for a swap. The motorcycle was walked back to the storage containers, a task that was not rapidly accomplished due to starting from the far corner of the practice range. Once there, warm up of the replacement began. With my new mount prepared, I was ready to reenter the fray, again missing most of the practice. Do you see a pattern here? The new motorcycle was again a CB125 and sported a similar temperment. Remember the problem with throttle control? It was back and as bad as before. Throughout all of this, I had been able to listen to the instruction, but unable to execute sufficiently on what I had heard. This motorcycle was the same. No, it wasn’t swapped out again. Not yet anyway. The exercise we were beginning was the figure eight. Each rider was supposed to time the gaps and use their throttle to control crossing the path of the other traffic. If you cannot control the throttle, that gets downright scary. I did make one gap, though, but pulled off course to get the throttle checked. This is not getting any easier. I am also missing much practice. The first day had many changes, many missed or mostly missed practice sessions. A dead gearbox, two dead starters or batteries and recurring throttle problems hindered progress, combined with the direction of looking problem, of course. All together, I missed most of three exercise on the first day of practice. Would it have helped to have had the practice? I know it wouldn’t have hurt. That came the second day. Maybe it was a missed building block. Maybe I didn’t use fine enough control. Well, it was definitely that. On the second day, I again got a CB125, though, after a bit of familiarization between us, me and my new mount got along just fine. Or, we did until I did something I shouldn’t have done. It happened during a braking exercise, the emergency stop exercise to be precise. Just before this we had practiced locking the rear wheel and riding out the skid. I had it down pat. Well, mostly anyway. This was a bit different. Instead of using just the rear brake, we were supposed to use both front and rear brakes to stop in the shortest distance possible. I did three tries at this, the second going pretty well. I thought it went well. The instructor thought I could do just a little better and told me to be a little more aggressive next time. I was more agressive, too aggressive in fact. There is a fine line between not enough and too much. I crossed it. The front brake locked. The handlebars were not perfectly square. The motorcycle stopped quickly. I didn’t. As the motorcycle went horizontal, I took a nice little tumble over the top. It didn’t land on me and I didn’t land on it. According to one of the spectators, the other riders waiting their turn, I acted like I did it on purpose. The motorcycle hit the pavement. I hit the ground, rolled a couple of times and was back on my feet before I stopped moving. I guess it would have looked good from a distance. I could have skipped the close up view. Thanks to my Aerostitch, I wasn’t really injured either, though my arm and elbow were a bit sore. At the next break, I went to my truck and took an Ibuprofen to ease the ache that remained. At lunch, I took another. For the most part, the remaining exercises went ok. This one would haunt me later. An evaluation test scores you on how well you perform various skills tests, skills similar to those that were practiced that morning and the day before. The looking problem resurfaced a couple of times. The slow portion had a foot down on the cone weave and again on one of the sharp turns. With the quick stop, I wasn’t so quick. Remembering the morning tumble, I stopped. I stopped straight, with the left foot down. I didn’t stop quick enough. There were some problems on a couple of other areas also. There was nothing really major, but the points are cumulative. I accumulated enough that I didn’t pass. The weekend is over and it is back to work again. I learned a lot. I had some practice time, but not enough. Not having missed so much practice would have helped. That what I missed was built on later without my having the proper foundation did not help my situation. Not having an aching arm and elbow might have helped as much or more. Though it happened in the morning and I am writing this at night, the elbow still aches. I should get it looked at.