On the Habari development mailing list, Daniel Smith writes:

I am interested in learning PHP (object)/MYSQL programming in general, and Habari-specific in particular. As a php newbie, could anyone please point me to any resources, latest quality books, tutorials or whatever, that could help me to learn how this all works?

An excellent question, and something that we experienced PHP folks would all do well to answer to help bring more people in and teach better coding practices.

For beginning PHP and MySQL, I really like the Visual Quickstart series of books. They have clear chapter goals and are rife with examples. Combine the books on PHP, MySQL, and PHP and MySQL with a willingness to frequently search the online documentation for both tools, and you can accomplish pretty much anything you set yourself to. Obviously, these are not for seasoned code veterans, but I think they're just right for people just starting who don't want to be babied but instead want to learn real code.

One thing that I've always found useful is picking a specific project goal, the simplicity of which would be determined by how green I am on the topic, and trying to code it myself. Sometimes working through other people's code can be daunting.

That said, looking through other people's code to see how they do things is essential to being literate with the common conventions for coding. A good example of something that the PHP coding world does that you don't usually learn in a book would relate to database access.

When looking through the books on PHP, you'll see a lot of reference to commands for accessing MySQL. No project I know worth anything uses PHP's mysql commands directly. Instead, they use an abstraction layer that handles many of the mundane details of database use without having to write the same three lines of database connection code repeatedly.

The lesson from the above is to see what projects like Habari do for database access. Habari is very object-oriented code. Practically everything in Habari takes place in classes and objects. If this is not your mental paradigm, then it may take some relearning to become comfortable in that milieu.

On the plus side, you will be significantly rewarded for your patience in learning Habari's style of coding with code that is cleaner and more flexible than that of many other projects. And if you're starting out with object-oriented thoughts, then you'll be a step ahead of others who learned procedural coding and have bullishly stuck to it.

Perhaps the best resource Habari has to offer for teaching new coders is the IRC channel, where Habari developers occasionally roost. There, you can ask PHP questions and get real answers from people who often know what they're doing. The plus side of using #habari and not #php is that while many of us are seasoned developers, we have a commitment (at least I do) to making new people feel comfortable in our community. As we say, "community first."

I'm glad you've decided to take the plunge in learning PHP, and hope that Habari can offer you tools toward your success.

Berta and I went to IndyHall's movie night on Saturday to hang out in the city and to watch the first of the two films in the double-feature, "Office Space". We got to talk to a few of the folks down there, both some people we knew and some people we met for the first time.

The event was sponsored by Philly Car Share, which is an interesting organization that offers shared vehicles to city-dwellers. You basically make a reservation, and you get a car for a few hours. It's kind of like renting, I suppose, but it's a more comfortable plan. The cars are where you might need them to be, parked in nearby lots, rather than centrally at a rental place. And they have all different kinds of cars, so if you needed a trunk or a van, they've got that, or for a night out on the town, a convertible or BMW is obtainable. Neat idea for folks that live downtown, especially.

We don't have much use for the service, since we'd have to drive our own cars to anywhere where a carshare car would be waiting, and that doesn't make much sense. In talking to people who have more use for these services, I discovered an interesting distinction of what is "city" and "suburb", and it was amusing to me to see how the line moves depending on which side of it you primarily dwell.

We were chatting about getting a suburban meeting together of people who work at home or independently in general, which is part of the idea behind IndyHall. The trick with suburbanites, I think, is getting in contact with them. We're all so into our little worlds, we don't often realize what's going on outside of our own neighborhoods. This is strange to say considering the differences I was going to portray between suburban life and urban life.

In any case, the idea of where to hold one of these meetings arose. Suburban to me means "where I live", and if I had to draw a line where the city ends and where "not the city" begins, it would be somewhere between King of Prussia and the Zoo. If you're not familiar with the area, neither of those places are really anywhere near the city proper. This distinction is interesting to me because on Saturday we met people who define the line differently.

Living on the other side of my line, folks define the city limits as "not paying the city wage tax", which I'm sure is a significant distinction to draw, but I don't think it's very realistic from a social point of view. I think it's more a matter of whether it's easier to get into the city (where you pay the wage tax) to do significant daily things, or it's easier to stay near home. Or perhaps the frequency of doing those things.

For me, once or twice a month into the city is plenty. Actually, I could (and have) go for quite a while never venturing near the city. So I feel suburban. Nonetheless, there are indicators that I'm still suburban and not rural, like the fact that the regional rail comes out this far. And that my major news still comes from city stations, and when they report the traffic, they talk about major roads that are near me.

For people who live in the city, my area has a few too many trees. There are horses down the street that are unsaddled, much less attached to handsome cabs. I have to drive to get, well, anywhere.

It's interesting to me what magnetic force the city - both Philadelphia and your nearest city - have on the dwellers outside of its boundaries. Where people draw the line also interests me, especially when taking into consideration which side they're on, and how that affects their reasoning. And I also wonder at what point a person considers himself "rural" -- perhaps when the lure of the city is simply a curiosity except when called to federal jury duty?

After my debacle with the monitor this week, I decided that I needed a new screensaver. Primarily I was thinking of disabling the login display when returning to the OS from the screensaver, but I have been thinking I wanted something more for a while now. And since my new monitor does not recover from power-save mode, I need something good to prevent the burn-in that I saw on the monitor at Best Buy.

I've been using the basic My Pictures slideshow screensaver that comes with Windows XP for a while. I have a lot of pictures, and the kids like to see my computer showing them photos of us on all of our vacations. Abby actually asked me why I had changed my screensaver once, which prompted me to restore the photo one.

The thing is, the one that comes with Windows is pretty lame. It'll only show photos on one monitor at a time, unless you turn on the "animation" feature, which simply drags the single photo across all three screens very slowly. I'm looking for something that does a little bit more.

One of the more cool multi-monitor screensavers I tried displays an old-school BOB (you might call it "particle") animation. It's neat because it centers on the center monitor, and spreads over all three like its supposed to.

Most screensavers will only work on the primary monitor. If they work on multiple monitors they often only work on the monitors attached to the primary graphics card. Rarely do they show different content on all three monitors.

Today I downloaded Google's screensaver application. It does some animation/crossfading, but I guess my second card isn't quite up to snuff, at least not for non-DirectX animation. Still, it does a nifty Polaroid-style photo pile on all three monitors, which is much better than what the Microsoft screensaver does.

What I'd really like is some slow-zooming/panning crossfades. Simple transitions. It would be neat if larger pictures could be displayed as faded or black and white across the entire 3-monitor background, and several smaller versions of different photos could face in and pan across them simultaneously. And it would be ultimately cool if I could get a little animated information on there, too.

I've liked the screensaver one of the guys I've met through work uses on his Mac. It displays a list of unread email subjects. It would be swell if I could get an RSS feed or email subjects somewhere on the vast expanse of monitors on my desk along with the photos.

My new computer is supposed to arrive on Tuesday. It should be able to push DirectX pixels to all three (four, if I get another one) monitors without any issue. So a working screensaver that did what I want would be nice. I hope I don't have to write my own.

And hey - Why is it so hard to create a simple software catalog? There are a bazillion software listing sites on the net, and they all suck so much. Just looking at some will make your eyes bleed, they're that poorly designed. Maybe that's the problem, people see how poor the existing sits are, and then insist on making their own poor site. Well, I'll try not to fall into that trap.

I'll just say it plainly -- today sucked.

It started last night after the kids got home from Trick-or-Treat. I was reassembling my computer, which I had to take apart partially to hook the projector to my notebook. See, I was projecting a Halloween sign onto our garage door that told the kids to go up the street for candy. Perhaps I'll explain that more later. In any case, I was reassembling things when I noticed that, unrelated to my reassembly, my center monitor's backlight seemed to have blown out. This makes it exceptionally hard to log in.

It's kind of a strange puzzle. The center monitor is the only one on DVI, and the side monitors are both VGA-only. This might have been fine if I had a DVI to VGA adapter, but there were none to be found. So, it was time to order a new monitor, and with me being off to take care of Riley while Nana was on vacation, I saw this as a perfect opportunity to visit Best Buy and get that upgrade I've been considering. But then, events seem to collude to conspire against me.

Around the time I was futzing with my monitors, Riley had actually asked to go to bed. This is a sign; the omen kind. After curling up under the blankets in his room voluntarily as early as 9pm (this doesn't happen - ever) we took his temperature: 102.9 degrees.

Thankfully, a little Tylenol brought his fever down, but he was out for the count. A second dose to kill his fever this morning, and he was bouncing around like a well-rested Riley. He was ready for the day and didn't seem any the worse for wear.

I'll just say here that nothing terrible happens to Riley in this story, because it seems like that might be the direction it was headed. So if you were worried, fear not. No, the badness is for me today, one of those "boo-hoo, poor, poor Owen" stories that makes me oh so popular with the people who don't have anything to whine about. As stupid as this sounds, if I got my arm cut off somehow, I'd probably whine less, simply because all of the crap that happened today is stuff that didn't really have to happen, and isn't of any real consequence, but is the kind of thing that messes with your head and has you start thinking about whether the depression is going to hit again this holiday season. But anyway, moving on...

So with Riley up and ready to go around 10am, we packed our gear and headed for Delaware, home of tax-free monitors. Actually, I had managed to order the new monitor from Best Buy after he went to bed, and it was just a matter of picking it up. While there, I grabbed a new VGA cable to replace the one that I left at the PHP Framework presentation along with the power cable for my projector (which I didn't notice was missing until trying to hook up the thing for Halloween, and I didn't think to replace today, darn it). Oh, the irony of all of this.

After lunch with Berta and a quick trip home, Riley was sitting on the couch while I poked at some email. Nothing good is coming of me not working today. I had to send out a couple emails. A couple I neede dto send out I couldn't reply to without information from my headless desktop computer. Oh, but shouldn't I have had a monitor by now?

First... As I said, Riley was watching TV. Suddenly he laid down and started looking lethargic. I felt his head. Sweltering 102.1. More Tylenol for the kid that acted like he was fine all day, even when the medicine should have worn off. I was really hoping it was just a weird overnight thing, but that was not to be.

Between making Riley comfortable, I tried to set up the new monitor. As it turns out, this monitor has every conceivable connection on it. Except DVI. Note that as I said above, the only connection that I need (read: "must have") is DVI. Great. I consider my options and decide that a trip out to get a DVI to VGA converter should do the trick.

Abby came home while Riley lulled on the couch. She required supervision. I was anxious to get out to get my adapter. There were some games. There was some TV. I read more email, and didn't like any of it.

I will insert here that there are work-related things in my email content that are driving me absolutely insane, not just at this point of the day, but throughout the day. I'm not going to mention them specifically here, but I'm almost hoping I'm still hot enough about them tomorrow to have something done about it, but not quite enough to just quit. Anyway.

Berta came home. I called Dave to see if he wanted to hitch a ride to Best Buy and dinner so I could pick up my pre-ordered cable. Done deal. Another trip to Delaware. A phenomenally lousy burger at Damon's in Wilmington - ugh. If if was more salty or more overcooked, it would have been a charbroiled salt-lick. It hardly looked like beef. It was disgusting.

Back with my two new cables (yeah, buy two $30 cables just to avoid another trip to Delaware), I started plugging things in. DVI to HDMI? Failed. DVI to VGA? Cable. Too. Short.

Freaking out ensues.

I tucked in Abby, who was reading a book to Berta. Riley was already down, once again victim of whatever bit him. He's going to be off tomorrow, and needing a doctor's appointment because his ear is probably acting up again, hence the fever.

I should say that Riley was a perfect little boy today, and although after reading my email I considered how nice it might be to quit work and be a stay-at-home dad, I think I lack the constitution to pull it off. I would really go nuts. More than I did today. See my sanity meter? It broke when the mercury exploded out of the top.

Where was I?

Tucked in kids, headed back out to Target this time, because everything else is closed. Surely Target carries a simple 12-foot VGA cable? No. No, they don't.

They do carry a DVI to HDMI adapter and a 12 foot HDMI cable. I think I must have been struck stupid at this point because I bought them both. Didn't I already have a set of this that didn't work? Well, whatever.

I returned home and started connecting things. HA! The new adapter doesn't fit next to the other plugs on the back of my PC! Amazing, no?!

I started to plug and unplug random things. Finally, I get the new monitor to come online with the DVI to VGA adapter and a VGA cable plugged into the VGA switch, which gives me an extra foot or so of length. Oh and wasn't the picture quality cruddy? It was blurry. Nobody said this would happen. This isn't good. "Is it the monitor that's crappy?" I asked myself, recalling the lousy display monitor I saw on the shelf with tons of burn-in and what looked like a weak signal, but just then realizing it was simply VGA. Oh, the humanity!

I took the switch out of the signal, and moved the PC half out of the cabinet, wires strewn all over the floor. Still no clarity.

Also I should mention that at some point the PC decided that the VGA port on the primary card, rather than the DVI port, had become the primary monitor, and had taken it upon itself to rearrange the positions of all of my screens for me. Very confusing.

Finally, for no good reason, I swapped in the original DVI to HDMI cable, since it would now be close enough to try, I guess. It worked. Crystal clear picture.

So it basically took all day, through Riley being sick, three trips to the store, needlessly buying tons of needlessly expensive connectors, and I finally have wallpaper that doesn't fit my desktop. Why was this so hard? Total new resolution: 4925440 native pixels. (2 * 1280 × 1024 + 1 * 1920 × 1200)

Riley is going to Mom's tomorrow with Berta because they live near the doctor. Work email can wait until the morning where I won't be screaming at everyone and regretting it. Lunch meeting at noon anyway, where hopefully I can complain about what ails me without quitting or getting fired. Then I'm passing the heck out at 5pm and trying to forget that this week ever happened. I might even start right now. See you in the AM.

Today was an interesting day for both Riley and me. Nana has vacation this week, and so she's not at the house to watch Riley during the day when I'm working. Normally, Berta would take off these days, but she's been taking off so many days on these occasions - from times that Nana needs off to times when I've got to be somewhere at the end of the day when Abby comes home from school - that it's becoming a burden to her work. So to ease that burden, I told her that I would watch Riley on the two days this week that he didn't have preschool.

I had originally thought that I would keep Riley at home and take the day off myself. I had mentioned to Nate that I might need a couple of days this week to be home with Riley, as I've described, and he suggested that I could bring Riley over to his house and his wife, Mary, would keep an eye on Riley while I got some work done. Riley would be able to play with his kids and it would be a good work day.

So that didn't work out exactly as planned.

I started to worry yesterday morning as Berta was rousing Riley for his extra day of preschool this week. Normally he goes only on Wednesday and Friday, but we added a day just os I would have him one less day this week. He was not having that. He did not want to go to school on a Monday, and put up a pretty good fight in the morning. Screaming a lot, Berta finally got him out the door, and had to leave him crying at preschool, something that doesn't normally happen on his regular days.

This morning, I let him sleep in and did a little work in the meantime. When he finally got up, I started laying the foundation. Would you like to go over and visit with Mr. Nate's kids? "No." How about some toast? "Ok."

Eventually, I got him to be not only willing to accept the idea, but enthusiastic to go. Actually, I have my laptop out on the kitchen table, and Riley was hurrying me along to pack it up and head out for his visit.

When we finally arrived, Riley was still anxious for his visit. He squirmed until I unbuckled his seat and let him out, then we both walked to the front door and rung the bell. Mary greeted us and welcomed us inside.

It was at this point that something in Riley snapped. He suddenly turned around, mumbling "I don't want to go...", and headed back toward the car.

The rest of the morning was pretty much like this. Mary did finally convince Riley to play with the kids and some toys in the basement, but when Riley came up for lunch and didn't see me where he left me, he kind of freaked out. He didn't want to eat a real lunch (just two slices of cheese and some pretzels), and he didn't want to play with the other kids at all.

So, I guess the little guy isn't ready to break from his routine with Nana at all. It might be nice to run him out on some unscheduled outings with some other people during the week, just to get him used to the idea. Maybe we should really have socialized with Nate's kids more before trying this and it would have worked out better. That's probably something we should plan on for the future anyway.

Oh well. I guess I'll have to plan something for us to do with Thursday. Hopefully, he'll not want to stay home all day, like he decided he wanted to do after today's outing.

Riley's going to be three in a couple of weeks. This should be interesting.