Category Archives: Uncategorized

Tecnu

A few years ago, I read about some stuff that would make poison ivy stop itching, It was supposedly the only thing that would actually wash away the oil from the ivy. I found some online. It was about $50 for 2 ounces. And, besides, I didn’t actually believe it would work.

Well, I got poison ivy again this week, and I have been quite miserable. Today, my Beloved found some stuff at the pharmacy called Tecnu, and got it for me. I used it to wash my arm, which was all red and blistery and itching hijjus, and it was immediately better. The red was gone, the blisters were receding, and the itch had stopped. Just like that. Gone.

I was still kind of skeptical, and, indeed, the itch has come back a little, but just a little, and only in the spots that I didn’t wash as thoroughly, or the spots where the skin was already broken.

I’m truly amazed. If you suffer from poison ivy, you must try this stuff.

FF3 and Safari

Looks like Firefox 3 was the motivation I needed to switch entirely to Safari. The thing that pushed me over the edge was the “open all in tabs” feature.

I use the “open all in tabs” feature to reset my workspace. I make a bookmarks folder, and put in there my 9 or 10 sites that I use most frequently, or perhaps a folder of all the work-related websites. I then click on that folder, and “open all in tabs” to get my workspace where it needs to be to work on it. I do this dozens of times per day.

In Firefox 3, instead of resetting the workspace – that is, closing existing tabs and opening the new ones instead, it opens the new ones in addition to what’s already open, giving me a growing number of tabs, rather than my desired workspace.

In Safari, not only does it open just the ones I want, rather than adding to the existing, but it’s got this cool single-click feature, where I can mark the folder as a one-click workspace, and it just does what I want on one click.

So, this morning I imported all my Firefox bookmarks into Safari, and set Safari as my default browser. What with the theme change in Firefox, it seemed like a good time to do that – the new Firefox theme is no more strange than switching to Safari.

Strangely, the new Firefox didn’t noticeably improve anything, or provide any shiny new functionality (at least that I noticed), and broke a feature that I rely on all day, and didn’t address any of the things that make Firefox so annoying to me (bookmark management being one area where Safari is worlds better than FF). So I really would have been better off just sticking with the old version. So strange.

Movie recommendations

The last two movies that have come from our Blockbuster account have conclusively proved that we would be better off ignoring the well-meaning movie recommendations of our friends.

The first of the two was “Lady In The Water”, which was dreadful, inexplicable, and tedious. But then, last night, we saw “Sideways”, which was a trainwreck almost from the first. We eventually turned it off when it degenerated into pornography. The conversations about wine were interesting, but incongruous in a story that was almost entirely about fornication and adultery.

So, we’ve gone through our Blockbuster list again, and dropped all the movies from it that folks have recommended, that we haven’t ourselves seen previews. There’s only so much time in life, and it’s a shame to waste it watching trash.

No Spam

Yesterday I switched email for my primary domain over to GMail. I have a dozen email addresses and a few distribution lists, and I moved about a half million email messages over to my GMail folders.

It’s probably too early to sing its praises, since it’s only been 12 hours, but …

This morning, it was eerily quiet in my inbox. No strident calls to buy a genuine fake Roles, or increase the size and strength of various body parts. No encouragement to get my website to the top of the search results, or make a million dollars by helping out a long-lost relative in Uzbekistan.

It was rather like walking down the main street in a big city, but not being jostled by grubby passers-by, and not hearing the sound of cars, gunshots, hawkers, screaming children, barking dogs, or howling sirens, but being able to hear the polite, soft-spoken conversation of the well-dressed gentleman walking beside you.

I looked over in the Spam folder, and all the noise was there, where it should be, but as far as I could tell, none of the polite conversation had made it over there by mistake.

I think I’m going to like it here.

Gmail for RCBowen.com

I just flipped the switch, and pointed the MX records for RCBowen.com at GMail. I’ve been running my own mail server for about 15 years now, and this is the first time I’ve trusted anybody else to handle @rcbowen.com email. We’ll see how it goes. I sincerely hope that the outcome is less spam.

By far the most painful part of the process was migrating a half-million email messages from my IMAP server over to Google, and trying to get all the same folders and filtering rules set up. But, in the process, I deleted probably another quarter of a million email messages. Ye gods I have a lot of email.

And, yet, after all that, I’m only using 5% of my capacity on GMail.

Using the Plug n Pay API from PHP

We use Plug n Pay at $work to conduct our financial transactions. It’s a great service, but the example code that they provide for PHP and Perl developers leaves something to be desired.

I spoke with a tech support guy there, and, while he was helpful, and clearly very knowledgeable, I found that we differed significantly on a particular point of philosophy. He seemed to be somewhat perplexed as to why I would want a full OO interface to their API, because, as he said, any PHP programmer worth their salt can take the API documentation and write code that sends arguments via Curl, or PHP sockets, or whatever, and get useful results from it.

To this end, they offer one PHP file, containing a partial implementation of one of the API methods, as an example of how one might do this. The example manually builds a query string, rather than using http_build_query, and manually splits the return value, rather than using parse_str – not crimes in themselves, but it seems that ecommerce code should be held to higher standards than this.

While I don’t disagree that a good programmer could indeed do this, I disagree that any would *want* to. Good code is reusable code. Having thousands of programmers writing exactly the same code, and having many of them, no doubt, doing it really badly and insecurely, is not in the best interests of anyone – the programmers themselves, the companies they work for, or even Plug n Pay (or any other financial vendor). They are wasting thousands of hours, and they are very probably writing code that is insecure, confusing, poorly documented, and, in many cases, just plain wrong.

Having a complete API implementation, and providing that to customers, is a service to everyone. It saves my time as a programmer, it saves time and resources on tech support, and it results in more secure code that is guaranteed to do the right thing every time.

Now, the folks at PnP offered to audit my code and possibly offer it for download on their site, given certain licensing requirements, and I may take them up on that. I haven’t decided yet. But, to be honest, I find their attitude about the whole thing to be quite at odds with my view of how software development should work. Encouraging every individual programmer to find their own way is not the way to improve the overall security stance of ecommerce websites. In fact, I would say that the huge daily number of compromised ecommerce websites is a direct result of this stance.

So, anyways, to this end, I offer my starter implementation of a full PHP API for PnP. So far, it’s incomplete, but exposes the most frequently used methods, and does it in such a way that it’s pretty difficult to get it wrong. Of course, you need a PlugNPay account to use this, but one hopes that if you found this article by a Google search, this is the solution you’re looking for.

Now, it’s possible that I’m the only person that cares about this kind of thing, but if you’re interested in receiving updates of this code, or possibly in participating in the ongoing development of this code, please let me know, and we’ll work something out. Collaborative development of reusable code seems like the only sane way to implement a financial transaction codebase.

Inexhaustible battery

We took over 500 photos yesterday with the Rebel, and the battery still says it’s completely charged. And I think it’s been at least two weeks since we charged it, and we’ve taken a bunch of photos in that time. Why can’t all batteries have this kind of life?