August 30, 2002 spout

Development for Developers

I got an email today from David, who says, So, I am looking to see what I can do to develop my skills as a designer. The trouble that I have, is simple. Where does a programmer that is over 40 years old, with a good job, and a good family turn to to learn something like this?”

David, developing in any career means taking risks, trying new things, making mistakes. Some specific things you can do to improve your developer/designer skills include:

  • Examine your goals. Do you want to be a better coder, a better designer, a better tester? What’s better to you? Fewer lines of code? More lines of code? Faster code? More readable code? More documentation of code/design? More thorough designs? More testable code? More unit tests? Set yourself a list of goals and examine it on a regular basis to keep yourself on track.
  • Read some books and articles, like Writing Solid Code, and re-write some of your own code using the techniques you’ve read.
  • Pick your favorite feature in your favorite application. Design it. Implement it.
  • Read and review other peoples code to see what they do, especially in languages and task you’re unfamiliar with to get a different point of view.
  • Pick a bug out of the bug database. Find the real cause. Find the implementation mistake that caused it. Find the design mistake that caused it. Change the implementation and/or design to find other similar bugs in your code base. Change the design/implementation to make similar bugs impossible in the future.
  • Run a code review to get your peers’ feedback on your code.
  • Get together with a group of developers at your job for weekly lunch lectures. Teaching someone is a great way to learn.
  • Take the time to really do something right.” You can’t always do this due to other real-world constraints, but if you never do it, you’re much less likely to get things right in the future.
  • Take the time to follow your fetishes.” I can’t tell you how often I’ve followed up on something that didn’t have anything to do with what I was doing, but I just couldn’t leave it alone, and then it dove-tailed with something else I needed to do almost immediately. Most of this web site is a result of following this advice.
  • Attend a conference and ask a lot of questions. Really drill the speakers to make sure you get it” (especially if it’s me : ).
  • Write an article on something and send it around to your peers or put it up on the web. Writing about something is the only thing I can think of that’s better than teaching as a way for you to learn.
  • Hang out on the mailing lists and news groups, but only answer questions you don’t know the answers to. Don’t worry about being wrong and thank everyone who shows you when you are.
  • Write a hunk of freeware/shareware/open source software and put your software up on the web along with an installer and documentation. Maintain it.
  • Find yourself a mentor. Ask lots of questions and get them to review your work. I’ve had a number of mentors of my own over the years (Mike Woodring, Paul Crutcher, Don Box, Tim Ewald, John Robbins) and it’s made a world of difference.

If you’d like some hands on” guidance to improve your skills as a developer, I’m available as a mentor. I’ve mentored a number of folks over the years and they’ve had some nice things to say about the process. But don’t feel you need me to take advantage of these tips. Take risks, try new things, make mistakes.

August 29, 2002 .net

free .NET development environment

Here. From Hussein: As a Java developer, I was curious about the release of C#. Unfortunately, the list price of more than $1,000 for Microsoft’s developer environment, Visual Studio .NET, extinguished the appeal. I wanted to play with the language, but I couldn’t afford the investment. Thankfully, I discovered a free .NET development environment called SharpDevelop.
August 29, 2002 tools

VC++ Jacket for the Best Managed C++ Entry

Here. Things are still heating up in the prize category. Not only has O'Reilly just donated a year subscription of Safari, along with a bunch of .NET book packs, but Nick Hodapp, a PM on the VC++ team at Microsoft, has just donated a VC++ Jacket to the best "Spend A Day With .NET" coding contest entry that's written in Managed C++. The anticipation is killing me!
August 29, 2002 .net

“Spend A Day With .NET” Tomorrow!

Here. I've heard from folks from all over the world that are using tomorrow as an opportunity to either dive into .NET for the first time or to build their pet project with .NET. People are splitting into teams, designing their entries and looking for 3rd party libraries to get them started, all without writing a single line of code until the stroke of midnight on the morning of August 30th in their local time zone. The competition is fierce, and while the prizes seem to have attracted people’s attention, I think it’s the competition that is getting folks excited. Should be fun! : )
August 29, 2002

Newsletters Are Hard!

Here. "As I write this, several thousand emails are being sent to the initial list of SellsBrothers News newsletter subscribers. My motive (to let folks know what was happening on the site without having to visit every day) was pure, but if I would have know how hard it was going to be to set the thing up, I don't that I would have started."
August 28, 2002

Very interesting insight into working at Microsoft

Here. From Phil: compares microsoft's culture to mainstream company cultutes. The author ended up being a program manager for Excel. He has lots of interesting information on software development in general: http://www.joelonsoftware.com. Chris, I know you've visited the site, just giving a heads up to other folks...
August 28, 2002 spout

Newsletters Are Hard!

As I write this, several thousand emails are being sent to the initial list of SellsBrothers News newsletter subscribers. My motive (to let folks know what was happening on the site without having to visit every day) was pure, but if I would have know how hard it was going to be to set the thing up, I don’t that I would have started.

It began with a simple form on the web site to take people’s email addresses, which were in turn emailed to me and sorted into a Outlook folder. When that reached a couple thousand without yet having sent out a single issue, I figured it was time to put it into a real database. So, which a bit of data cleaning through VS.NET and Excel to get the dates right, I plunked it into an Access that would serve as the repository on my ISP-managed site. That was all fine and dandy but for one problem: I had to send emails using the data from my own machine, not the machine with my live site (and therefore the latest subscriber data). Did I really want to download an Access database from my ISP every time I needed to send a newsletter? It won’t be often, I admit, but that still seems wrong, doesn’t it?

So, I paid the extra $10/month to get SQL Server support on my site and worked with a friend of mine (Paul Crutcher) to build the form to take name, email address and HTML vs. Text settings. Except it’s not just one form. To make sure that folks aren’t subscribing other folks, we send out a confirmation email with an URL in it that updates the database and shows another form indicating whether that worked or not. Then, in case anyone changed their mind, we needed another form to change subscription settings along with another form letting them know that their changes were made. Of course, before we could let them change their settings, we needed to let them log in, which was another form. And, if they forgot their password, they need another form so that they can enter their email address and we can send it to them. Further, if the worst happens and they tire of my musings, they need to be able to unsubscribe themselves.

Not only did Paul build all of these forms, but he built them in two parts, a form part and a control part, so that I could update the form part to have the sellsbrothers.com look n’ feel, while leaving the real logic in the control part untouched (and potentially reusable). All in all, just letting folks manage their newsletter subscriptions was 46 hunks of HTML packaged as .htm, .aspx and .ascx files. 46! I would have downloaded something and integrated it, but I never found anything to do the job (and this is where I get a hundred emails showing me the error of my ways… : ).

Of course, all that user-managed subscription work was to avoid one thing: angry emails. I didn’t want folks who’d forgotten they subscribed many months ago or, worse, folks that were subscribed implicitly from other activities like the DevCon, to find themselves on a list with no way to get off of it except for sending me angry emails. That’s just how insecure I am. : )

So, after a few weeks of Paul and I working on the pages to do the administration for me, I thought that the hard part was over. I was wrong. While I did have an SQL database on my site, it was still nearly empty. There were some folks who were newly subscribed after the new code went live, but all of the folks who’d subscribed before then were stuck in an Access database. That’s OK,” I thought. SQL Server and Access were made by the same folks. I’m sure I won’t have any problems moving the data.” That was two weeks ago. It took tons of advice from my database friends (thanks BobB and ShawnW and BrianR!), along with a final push from my brethren on the Off Topic Mailing List to get the data moved to the right place. The good news is that I got to polish my T-SQL skills a bit and I got to play with DTS and the Enterprise Manager (both very nice pieces of software).

But that’s not all. Once I had the subscribers in the database, I then had to send several thousand emails, sorted into folks that want HTML and folks that want Text, keeping track of bad email addresses. This time, I went looking for a commercial product to do the job. I figured that since my inbox was full of spam (SpamNet is my new best friend!), that there must be really great tools for sending emails by the boatload. And again, my friends on the Off Topic mailing list were there to help with a recommendation of the Advanced Direct Remailer. ADR is also a nice piece of software that comes out of the box configured almost right, but not quite and the documentation has to be read very carefully. ADR is an SMTP server that takes mail from your mail client and forwards it to a list of folks based on who you sent it to. For example, you can send it to foo@localhost where foo” is a mailbox that resolves to a list of email addresses in a text file or you can send it to bar@localhost where bar” is a mailbox that resolves to a select statement from a database. That all works great, except if you get any of the settings at all wrong, ADR starts acting like a real email server and just tries to send the email to foo@localhost. Well, actually, it can’t be foo@localhost for me, since I’m using Outlook XP, a marvel of software engineering that in it’s infinite wisdom prohibits me from sending an email to a server without a .” in it. So, I send an email to foo@127.0.0.1, which ends up in ADR, but the default settings only resolve requests sent to localhost”, so ADR won’t do the queries. However, it is talking to the built-in SMTP server on my machine (which I need for testing my web site before publishing it), so it looks like it’s doing something, making it even harder to figure out what’s going on, since I’ve never seen what ADR does when it works correctly.

When I finally do get everything right and the emails are queued in ADR properly, I can tell it’s going to take hours of 100% CPU utilization for the newsletter to get out, so I go on to something else. But I can’t stay away for very long, so I’m constantly logging into the machine doing the sending via Terminal Services to check on the progress. With the CPU fully utilized, all the failed TS connections (I have to keep trying!) eventually crash the ADR machine, causing a panic as I reboot. I needed have worried. ADR has kept everything logged and picks up right where it left off before the crash. Truly an amazing piece of software.

Why do I feel like Jerry Pournelle all of a sudden?

Now, as I’m drawing this missive to a close, I’m getting half a dozen emails from subscribers that wish to unsubscribe but can’t because of the peculiarities of the imported data vs. what I tested against. So, the angry emails have started. Here’s a particularly angry one:

Subject: Get me off your spam list

You are too much of a hassle to remove, you lie about where you got my address, I do not trust you at all.

I will prosecute you my every means possible if you do not remove my address from your database.

If I find out you spread my address, I will go after you for that.

Oh, well. I tried…

August 27, 2002

CollectionGen Updated

Here. The CollectionGen hits, they keep on coming. Tor-Erik Hagen has split the core code from the VS.NET custom tool code to provide for the command line tool he also provided, along with porting all the C# template code to VB.NET. Justin Rudd and James Johnson have also contributed some efficiency and type-safety enhancements. If only we had a wizard, we'd be set (I've got the beginnings of one, if anyone is interested). Enjoy!

← Newer Entries Older Entries →