Archive for the 'General' Category

Advanced Apex Programming for and

Sunday, August 5th, 2012

Advanced Apex Programming for and

As many of you know, I do enjoy writing books. Which is a good thing given that I’ve written quite a few of them. I’m proud of all of my books, but there are a few that fall into a special category – and that includes my latest effort.

If you’ve looked at the book market, you’ve probably noticed that a lot of books are very similar. Most subjects offer dozens of competing books that have pretty much the same content. Personally, I’ve always felt that if a good book exists on a particular subject, I shouldn’t waste my time writing another one. As a result, most (if not all) of my books have been either unique, or the first one in a given space. For example: my original Visual Basic Programmer’s Guide to the Windows API was the only book for a long time that dared to teach Visual Basic programmers to use the Windows API. My recent book on teaching leadership skills to teens is nothing like anything else on the market.

Which brings us to Advanced Apex Programming.

As I mentioned in my previous blog post, I’ve been spending more and more time over the past few years working in Apex – the native language of I’ve learned a great deal in the process and… well, you know how it is. Sooner or later, if I learn something, I end up writing a book to teach it. In this case, I was astonished to find that nobody has written an advanced Apex book yet. There’s lots of great reference material, a good selection of articles, and plenty of beginner’s texts out there. But there was no book to help the intermediate developers take the next step, and give the advanced developers something to geek out to. Even the domain, was available!

I couldn’t resist.

You can read about the book at I’m as excited about it as I was that original VB Programmer’s guide. As with that book, I think it’s going to help a lot of programmers write a lot of great code and become more successful. And as an author, hearing from readers that a book I’ve written has helped them build their careers is what really makes it worth the effort.

Specialization is for Insects

Monday, April 25th, 2011

Recently, for a variety of reasons, I’ve been asked about my background. It’s a question that can take some time to answer. To answer why, allow me to share one of my favorite quotes by Robert A. Heinlein:

Specialization is for Insects

A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects.

I can only do about half of these myself, but I’ve always agreed with the sentiment. Back in college my advisors all explained why it is important in one’s career to specialize. But I’ve always chosen breadth over depth. My ideal has never been the specialist, but rather, the synergist – someone who can combine multiple skills and talents to come up with creative and unique solutions to problems.

Some would argue that when one tries to do many things, it becomes impossible to do any of them well. This is not true. What is true, is that if you do not specialize, it becomes impossible to be the very best at something. I know this, because for a time in my career I did specialize in a specific area of technology and became one of the best at it anywhere. Now, I can safely say that I am not the best at anything. But it does not mean I don’t do a lot of things very well.

What might Heinlein add to his list if he were writing for today’s technical society?

A human being should also be able start and run a company, speak in front of a group (any size), write a book, film and edit a video, plan an event, write and place an ad, teach a class, read or write a financial statement, manage investments, work with spreadsheets, write production quality code (on several platforms and in multiple languages), handle a TV or radio interview, mentor a kid, build a computer, wire a network, play an instrument, configure a firewall, architect a complex software system.

Ok, that might not be his list, but it is at least part of mine. It turns out that if you spend time doing a lot of different things over enough years, you can actually become surprisingly good at them. You can even find connections – ways different knowledge sets overlap – that a specialist might never see.

So if you are still early in your career, I encourage you to create your own list. Don’t limit yourself to the confines of what you are taught in school or at work, or what you think you are supposed to be learning. And please don’t limit yourself just to technology – there’s a lot more going on out there.

And if you’re visiting this site to gain some insight into my background, suffice to say – it’s a long story. I like to think that were it possible for me to meet Heinlein today, he would, after some conversation, judge me to be a human being. Coming from him, I would consider it the highest of compliments.

And now a book of a different sort

Tuesday, March 1st, 2011

Developing Teen Leadership: A Practical Guide for Youth Group Advisors, Teachers and Parents

Cover for "Developing Teen Leadership"

In addition to my technical career, I’ve spent over 20 years volunteering as a youth group advisor with a group that emphasizes youth leadership.

I really believe that in today’s world, academic success is not enough to achieve success in a career or in life. It takes more. Call them social skills or communication skills, or initiative or the ability to plan and execute a task… All of them fall into the category of leadership skills.

Over the years I’ve learned a thing or two about how to teach these skills, and have just published a new book on the subject. Like my technical books, it is a practical “how to” guide – not an abstract theoretical tome. Unlike my more technical books, it’s an easy read and, I hope, entertaining as well as useful.

Whether you are a coach, scoutmaster or youth group advisor, a teacher, or even a parent of a teen – I’m confident that this book will offer both insight and practical strategies to help you become more effective at teaching leadership skills, and better able to help teens prepare for an increasingly complex future.

You can read more about it at

The Accidental Shopping Cart

Monday, October 25th, 2010

I wrote an online store. I didn’t really want to, but I just couldn’t find a solution that fit my needs.

I wanted a shopping cart that had really good extensibility – one that could connect to our licensing server not just to allocate keys, but to perform custom operations like allowing purchase of additional installations for existing keys.

What I found was largely disappointing. Not that there weren’t some great packages out there. If I wanted to set up a large online store with many products, it was clear that setting up my own equivalent would not be hard at all. There are any number of powerful online stores with numerous features available. But none of them had exactly the right features, and none had the extensibility I needed.

What I really wanted was a shopping component – some ASP .NET controls that could be dropped onto any ASP.NET page and would somehow work together to implement a shopping cart. There would be a control that would “add to cart” a single product – and a page could have any number of these control to display multiple products. There would be a shopping cart page that would allow modification of quantities or deletion of items from the cart. And there would be a checkout control.

In my ideal solution checkout would be handled by an external processor such as Paypal, and once the order was confirmed my code could issue license keys, download links, send out customer Emails and so on.

After searching through and installing trial versions of numerous packages, I came to realize that none of them came close. The truth is, I didn’t want an online store – I wanted an online store component.

So I wrote one. The excuse I used to justify the time was that it would make a great application note for the latest version of our licensing system. But in truth, it sounded like a lot of fun – and it was. I ended up using for the credit card integration (they have the best online documentation for developers of any of the card processors I found other than perhaps Paypal).

There’s still some work ahead to turn it into an application note for distribution, but the store is now live at

Above all, the experience confirmed to me the rightness in the way we decided to extend the licensing system for the newly released version 2. Instead of piling in features, we focused on enhancing the extensibility model. Our licensing system is not so much a licensing application as it is a licensing component – and right now it’s hard for me to imagine a licensing scenario that it can’t implement.

Where did all the developers go?

Saturday, February 7th, 2009

New article published on Visual Studio Magazine.

Top five fictional gadgets of 2008

Sunday, January 4th, 2009

This one was just for fun to end the year.

See Top five fictional gadgets of 2008

Gadgets, gadgets and more gadgets

Wednesday, November 12th, 2008

Ok, I’m a geek. I love gadgets. But, I have a confession to make – I’m a flawed geek.

You see, a true gadget nut loves gadgets for their own sake. If it looks cool and has great features (the more the better), it’s great – that’s all that matters. Cost, value, reliability, technical support, practicality and usefulness – these tend to stay in the background; minor details to be excused or explained away.

I’m too much of a skeptic to be a true gadget freak. I think an intuitive and easy to use gadget with fewer features is far better than a fancy complex gadget with tons of features (most of which you’ll never use anyway). I’ll take six month old technology if it will save me 50% off the latest and greatest. And in today’s economy, I really want to make sure that every dollar I spend is worthwhile.

I’ve always wanted to write about gadgets, and I finally found the right opportunity. I’ve become the National Gadget Examiner at It’s an interesting concept – a sort of virtual newspaper that seems to be succeeding at attracting competent people to write about their topics (I’m speaking of the other writers, called Examiners – you can judge my competence for yourself).

I’m certainly having fun at it so far – gadgets is a broad topic (at least as I interpret it), and I hope my skeptical (and cheap) attitude will strike a chord. I invite you to check it out at Gadgets Examiner.

I’ve been cross-posting the articles to a new blog: as well. I’ll also be using that for more in-depth articles that don’t fit on the Examiner site.

New Column

Tuesday, October 7th, 2008

I invite you to visit my new bimonthly Guest Opinion column in Visual Studio Magazine called “The Human Factor”.

The Email Encryptor Reborn

Sunday, March 2nd, 2008

Email obfuscation using Javascript is a popular way to hide Email addresses from spam-bots. One of the most popular of these was written by Jim Tucek at the Academy of Science at St. Louis. Unfortunately he hosted it on one of their student pages at, and the other day (during a website move), all of those pages were taken down, leaving web developers unable to create new Email addresses for sites that use the script. After getting a panicked call from a friend (who has many clients on the script), I decided to step in and see what I could do to help. The result can be found on my new Email Encryptor page.

This actually posed an interesting challenge. Jim used RSA encryption (about 10 bits) to encrypt the strings. I’m not sure why he chose an asymmetric algorithm instead of a symmetrical algorithm – as the primary result of this choice is to make it hard to create new Email addresses (in a symmetric algorithm you could use the decryption key to encrypt as well – so the loss of the original page would have had little impact. In an asymmetric algorithm having the decryption key offers no help). Fortunately, the algorithm itself is reasonably simple and widely published. Though I use cryptography a great deal, this was actually my first time doing the math, and translating some of the mathematical requirements into computer algorithms took a bit of thought. It was also the first time I’d really thought about modulus math. Finally, there was the Javascript coding itself. Though my primary expertise remains VB .NET and C#, I’ve gotten to do quite a bit of Javascript in the past couple of years (both in web projects and some Ajax work), so that part was relatively simple. By the way, I love the Visual Studio 2008 Javascript debugger – it doesn’t get much attention, but it’s very cool. As a side-effect I also got a nice prime number example to use next week at SD-West when I talk about the TPL, I mean “the Parallel Extension to the .NET Framework”.

So ultimately I was able to get it to work. It’s now live and hopefully will serve as a good resource to those left stranded when Jim’s page went down, and the rest of us in our never-ending battle to fight spam.

Coding Time

Friday, November 2nd, 2007

They say life is a balancing act. Certainly one I share with most of you is figuring out how to balance time between learning new technology and actually getting work done. This is particularly challenging for those of us who spend all or part of our time writing or teaching others – especially at times when another version of Visual Studio and the .NET framework is heading towards us with the inevitability of freight train with no brakes.

Lately things have been a bit quiet here. I haven’t posted much on my blog. I don’t speak at too many conferences (though I will be at devconnections next week and probably in Spring – it’s actually a very cool conference, so I do encourage you to consider it if you’re looking for one to attend). I’m not writing much.


Well, I know this may sound odd coming from someone who obviously (if you look around this site) has very diverse interests. But the truth is that despite the time spent writing, speaking, developing other sites (like, I’ve always been and continue to be primarily a coder.