The sincerest form of flattery

Originally published at

Writing technical articles is hard work. I wrote my first one in 1993 for Dr. Dobb’s Journal (a link, more or less), and since then I have written a couple of dozen more. Last year I wrote three posts here on kubernetes networking that proved pretty popular and were picked up by the Google Cloud community blog. Each of these posts took dozens of hours of writing and research, not to mention creating accompanying graphics. And each of the posts got things wrong, despite my several years of experience with the platform and all the aforementioned research. As readers have chimed in with clarifications and corrections I have revisited the work and updated it where changes were needed. I know a lot of people are reading them and I’d like them to continue to be useful.

In all the years of writing I have never, as far as I know, been the source for a plagiarist. This is probably a testament to the level of obscurity in which I toiled. So I was fairly surprised when a kind reader named Ian Douglas reached out to me last week while I was attending Olark’s company retreat to let me know he had run into some content that was suspiciously similar to mine. I didn’t really have time to look into it until I returned home last night. When I did, sure enough, the content was suspiciously similar to mine. I’ll let you draw your own conclusions. Here’s a link to my post on pod networking, the first in the series, and the other guy’s post on the same topic:

MeUnderstanding kubernetes networking: pods

HimHow Does The Kubernetes Networking Work? : Part 1

The pattern continues for the whole series, but it would be tiresome to post them all. At least the author took the time to rewrite, rather than simply copy and paste text extracted from my posts. But the graphics were just snatched wholesale, and of course none of it is attributed to me.

Now, to be clear, I don’t make any money off these posts. Nobody has even offered me a job because of these posts. Which is fine because I’m not looking for one. I don’t really give a shit if someone copies them. My instinctive reaction would usually be “whatever.” If this had proven to be some small outfit in a developing nation copying my stuff for their website I’d be like: hey, if copying my stuff helps you get your business off the ground and make some money have at it. But the author of these derivative works is someone by the name of James Lee whose profile identifies him as an ex-Googler who lives in San Francisco.

I mean come on, man. I don’t even get to live in San Francisco. I live in one of the more expensive parts of New Jersey, where people from San Francisco come to downscale and improve monthly cash flow. Ok, that’s false, but it does strangely bother me more that I’ve been ripped off by someone who is probably a verified member of the privileged tech class. Maybe this is related to why he’s an ex-Googler. Who knows? But seriously, privileged people should not steal. It’s like taking two flutes of champagne from the tray at a fundraiser. There’s only so much ripping off that can be tolerated in a given period of time, and I think we should save that for people who need it.

So, James, if you’re looking to raise your profile and give your company a boost, the best way is persistent work. You can try an end run around that lamentable fact, but it will almost always come back to haunt you later. Like this.

Moving to a New Host

After five years running my site on Network Solutions I finally grew tired of their performance issues. It was taking 60-120 seconds to load the home page on some occasions, and inquiries to tech support just got me form replies reminding me I was on a shared platform, and advising me about optimizing my javascript and images to load from a CDN. Yes, CDNs are good. If you have tons of traffic using a CDN can move a lot of load off your server. Some day, if I have tons of traffic, I might care about CDNs. At the moment I don’t have tons of traffic, don’t aspire to having tons of traffic, and don’t think it’s taking Chrome 120 seconds to download and process the javascript in my WordPress install. But thanks for the advice, Network Solutions. I’ve moved my site to Rochen Hosting, and the pages load in about 2 seconds. Meanwhile, you might want to take a gander at the load on your MySQL servers.

GSearch 1.1 Update

Trying to get a few things cleared away before I start a new position on Monday morning. Shortly after the January release of my GSearch libraries for .NET 3.5 and Silverlight 2, Codeplex user FBrink discovered that my conversions for lattitude/longitude in the local search class were naive, in that they failed when the current culture uses the comma character as a decimal separator. Tonight I released version 1.1 of the .NET and SL libraries, which corrects that issue, as well as updating some similarly naive code in the search class event raising machinery. You can check out the release notes and grab the latest source and runtimes at the CodePlex project page.

Gradient Editor Update

I’ve released version 1.0 of the Silverlight Gradient Editor. This version fixes a few small bugs and usability issues, and adds support for transparent gradient stops using the system color picker. This will probably be the last release of the editor unless I discover some problems. There’s not really much more to do with it. It came into existance because I needed a gradient editor control for the drawing application I’m working on, and once I had one it was a very small leap to add some code output and slap it into a web page. Hope you find it useful. If you do, or if you run into some problems, drop me a note and let me know.

The GSearch Lib – Google Searches from .NET and Silverlight

In the process of working on GMemory, a Silverlight 2 game I wrote as an exercise a couple of weeks back, I became familiar with Google’s RESTful webservice API. Using this API applications can execute searches and receive results back. The API is not a complete drop-in replacement for the full-blown Google search engine – it can produce at most 64 results (8 items per page over 8 pages), for example – but it is an interesting and useful way to incorporate search results into your applications. Results come back in the form of some nested JSON types, which are easily deserialized into .NET classes once you understand the structure and get the type definitions correct. I had to do that for image searches to make GMemory work, so once that was done I decided to go ahead and implement the rest of the search types as well.

The result is GSearch, a library of classes for searching Google from .NET 3.5 and Silverlight 2 managed code. The library encompases all the supported search types on the current version of the Google API, meaning blogs, books, images, locations, news, patents, video, and web pages. The classes are very easy to use, and you’ll find some examples in the readme files accompanying the runtime packages. The .NET distribution also includes GSearchPad, a WPF example program that will allow you to execute any of the search types with custom arguments and display the results.

GSearch is copyrighted software released under a BSD Permissive license. Feel free to play around with it and use it in your own commercial or noncommercial apps. This is the first release, and there are sure to be some warts left in it. If you find one, or have a question, please feel free to drop a comment here or shoot me an email.

OBX Time

Over the last week my family and I had the pleasure of joining the rest of our far-flung and extended clan in Nag’s Head for the wedding of my brother and his delightful fiancee. Which is to say that by the end of the week the clan was even more extended and far-flung than it had been when we started. The wedding was held on Coquina beach, across from the access road to Bodie Island Light. The weather, and the relatives (for the most part), behaved admirably, and an excellent time was had by all. I had never been in the Outer Banks area before, and was captivated by the dunes, the long stretches of pristine beach, the Atlantic breakers rolling in after three days of steady winds. I managed to get out and take some pictures, capturing some scenes from Oregon Inlet all the way to Hatteras Light. I’ve collected the better ones in this gallery. Have a look and let me know what you think!

WordPress 2.6 Follow-up

I figured out that the little balloon with the number “2” in it that appeared next to the “Plugins” menu choice in the admin screen meant that WordPress thought there were two plugins that required upgrading. I’m not sure why it thought that, as there was really just one. But that one didn’t show up right after upgrading to 2.6. It showed up the next day. Once I upgraded Sociable the tooltip disappeared.

WordPress 2.6

Well I got around to upgrading this evening. I’m not sure whether I would ever go through this if it weren’t for the pale yellow nag bar that appears in the admin screen whenever there’s a new version. That’s a pretty effective device. Everything went smoothly, though it took a few minutes longer because I decided to actually follow advice this time and grab a database backup and a copy of the existing files. One little wierdness: since upgrading one of those little “tool tip balloons” appears next to “plugins” in the admin menu. It has the number “2” in it. Apparently there are two plugins that want… something. I understand when comments want to be admin’d, but I’m not sure what these two plugins want, or which plugins it is that want something. Clicking the balloon just goes to the plugin admin screen. Other than that I haven’t noticed any difference, which I’ll take as a good thing. Well, the nag bar did go away, and I guess that’s good too.

Hawk News

I left a message this morning at The Raptor Trust inquiring as to the progress of the young Broadwing Hawk we brought them last week, something they encourage people to do through an option on their voicemail system. Not all animal welfare organizations will provide progress updates to the people who rescue wildlife, so my daughters and I very much appreciate this aspect of their operation. A short time later I received a call from Donna who told me that the bird was doing well, and that she had been in an outdoor aviary since the 6th of July. They were unable to find any medical problem, however Donna noted that she is a young bird and that, to paraphrase her comments, fledgelings often get into trouble. Whether she was just confused and lost, or had been sideswiped by a car without sustaining serious injury we’ll never know, but at least she is well now, and we can look forward to her release back into the skies of Northern New Jersey. I can’t say enough about the professionalism and care that the folks at the Trust have displayed, and I encourage anyone who finds an injured raptor to contact them.

Broadwing Update

The princess was feeling quite a bit better when I went out to check the cage this morning. We tried to give her a restful night, but of course the girls and I couldn’t help peeking in from time to time. When I went up about 2 AM she was standing in the corner with her head tucked under her wing. A blanket covered the cage to darken it. When I lifted the blanket first thing this morning she was standing there looking at me, beak half open. She didn’t touch any of the chicken the kids provided for her, and I don’t know if she drank any of the water, but she did crap in the cage, as well as outside of it (thus settling the age-old debate about whether bird poop just drops out or has actual velocity), so at least that end of her is working. If you don’t know to whom I refer here, check out the post immediately below this one.

I ran out and picked up a pair of thick work gloves, and about 10:30 AM we transferred her from the wire cage to a cardboard box that would be safer for travelling. She didn’t appreciate the effort we were going to on her behalf, and just about put her talons through the gloves. About 11:15 AM we arrived at The Raptor Trust in Millington, New Jersey, on the edge of the Great Swamp wildlife refuge. The Trust just celebrated their twenty-fifth anniversary, and they have quite a compound there. After a young lady took the box from us we walked around and viewed the collection of raptors. Among the permanent residents are Great Snowy Owls, Golden Eagles, Bald Eagles, Vultures, Peregrine Falcons, and three or four kinds of hawks. It’s really quite a place.

Eventually we want back to the office to collect our box and towel. The volunteer who accepted the hawk from us told us she was a Broadwing, not a Red-tailed. She said that after the bird had calmed down they would be giving her a complete medical examination including x-rays, after which they would know what actions to take. If possible she will be returned to the wild. We’d like to think that’s what will happen. I feel pretty good about her chances after having her talons wrapped around my gloved fingers this morning. The staff at the Trust think she was probably hit by a car and stunned, and if she can’t fly it might indicate a broken shoulder bone. I’ll try to find out what happens to her and post an update down the road.