Certifications

Opinion: Certifications are no longer optional

I’ve decided to pursue a Microsoft certification or two. According to Computerworld, this is a good idea. I’m still not 100% sold on the value of a certification at this point in my career, but, hey, it’s something to keep me out of trouble, and maybe it’ll help!

Microsoft certification

After all the changes I’ve gone through over the last several months, I’m not entirely sure what I want to do with my life next. I’ve tentatively decided, though, that I’m going to pursue a Microsoft certification, probably some variant of MCPD. I’ll have to start with exam 70-536, regardless of which path I take, so I’ve started working on that. I’m reading through the official MS Press book for this exam, via my ACM Books24x7 account. I’ve succeeded in reading a chapter a day for the last three days, so if I can keep this up, I can probably take the test a few weeks from now.

I’m not sure how serious I need to be about practicing for the test. Should I buy a practice test from Transcender or MeasureUp or somebody like that? Or just wing it?

I stumbled across this page on CodeProject this morning. Looks like something that would be worth playing with after I make it through the book.

still messing around with my tag cloud

OK, I’m still messing around with my tag cloud code. As previously mentioned, I took a bit of code from this page, and have been messing around with it. I just added a couple of minor things that I wanted.
First, I now have a [Home] link at the end of the tag cloud, if we’re not actually on the home page. Second, I now change the link into just text if we’re on the page for a given label. None of this was a big deal, but it did serve to remind me of a few JavaScript basics, such as how to do RegEx matching in JavaScript, and how to get the URL of the current page. Here’s the code:


<!– originally taken from http://phydeaux3.blogspot.com/2007/05/automatic-list-of-labels-for-classic.html –>
<div id="labelList" class="BlogBody"></div> <script type="text/javascript">
//<![CDATA[
function listLabels(root){
var baseURL = '/search/label/';
var baseHeading = "My Tags";
var isFTP = false;
var llDiv = document.getElementById('labelList');
var entry = root.entry;
var h1 = document.createElement('h1');
h1.className = 'sidebar-title';
var h1t = document.createTextNode(baseHeading);
h1.appendChild(h1t);
llDiv.appendChild(h1);
var ul = document.createElement('not-ul');
ul.id = 'label-list';
var category = entry.category;
labelSort = new Array();
for(p in category){
labelSort[labelSort.length] = [category[p].term];
}
labelSort.sort(function(x,y){
var a = String(x).toUpperCase();
var b = String(y).toUpperCase();
if (a > b)
return 1
if (a < b)
return -1
return 0;
}); // http://www.java2s.com/Code/JavaScript/Language-Basics/CaseInsensitiveComparisonfortheArraySortMethod.htm
// where are we?
var pageaddr = document.location.href;
for (var r=0; r < labelSort.length; r++){
var li = document.createElement('not-li');
var full_link = baseURL + encodeURIComponent(labelSort[r]);
var re = new RegExp(full_link + '$');
if (pageaddr.match(re))
{
// just show the text
abnk = document.createTextNode(labelSort[r] + ' / ');
ul.appendChild(abnk);
}
else
{
// show the link
var a = document.createElement('a');
if(isFTP){
a.href = full_link +'.html';
}
else {
a.href = full_link;
}
a.innerHTML = labelSort[r] + ' ';
li.appendChild(a);
ul.appendChild(li);
abnk = document.createTextNode(' / ');
ul.appendChild(abnk);
}
}
// add a home link.
if (pageaddr != "<$BlogURL$>")
{
var li = document.createElement('not-li');
var a = document.createElement('a');
a.href = "<$BlogURL$>";
a.innerHTML = '[Home]';
li.appendChild(a);
ul.appendChild(li);
}
llDiv.appendChild(ul);
}
//]]>
</script>
<script type="text/javascript" src="http://www.blogger.com/feeds/13487006926024246136/blogs/3059692?alt=json-in-script&callback=listLabels" ></script>

revised AutoHotKey script

A couple of weeks back, I posted a semi-useful AutoHotKey script, just a little script to paste text from the clipboard, but stripped of formatting. Well, I did some searching, and of course, I’m not the only person to have come up with this basic script. This guy posted a similar script, a couple of years ago. The one thing I learned from his script, which I somehow didn’t think of myself, is that, rather than sending the clipboard contents using “SendInput”, it’s better to put the text back on the clipboard, then send ctrl-V. The reason this works better is that, in most applications, a paste is an atomic operation that’s easily undoable, whereas using SendInput appears to the application as though you just manually typed out the contents of the clipboard.
I also decided to disable the macro in Excel, since I have an existing macro in Excel that’s mapped to ctrl-shift-V, and I don’t want to override that. So, bottom line, the macro now looks like this:

#IfWinNotActive Microsoft Excel 
^+V::
myStr := clipboard
myStr := RegExReplace(myStr, "s+$","")
clipboard := %myStr%
Send ^V

Still nothing terribly amazing, but very useful, and something I was living without for longer that I should have.

useful AutoHotKey script

I’ve been using AutoHotKey for a while now. I’ve got a few macros programmed into it that are pretty much wired into my brain at this point. There’s one thing I’ve been meaning to write for the last year or so, and just never got around to it. Well, I was in the middle of something on Friday, and I just decided that I needed to stop what I was doing, and just figure out how to write this macro. It turned out to be a lot simpler than I though it was going to be! Now I feel kind of stupid for putting it off for so long.

Basically, I wanted a macro that would do a “Paste Special / Text Only”. Mostly, I needed this in Lotus Notes, but there are other apps where it could come in handy. Long ago, I’d taken care of this in Word with a simple one-line VBA macro. But, I never really knew how to do this in Notes. The reason I need this, is that I’m often pasting text from Word, or a web page, or some other app, into Notes. The text goes to the clipboard as formatted text, and if I just do a straight paste into Notes, all the formatting info gets pulled in, and it’s usually not a good match for the default e-mail formatting in Notes. So, I’d settled on just selecting Edit, then Paste Special, then Text from the menus. But that’s a lot more work than pressing Ctrl-V.

Before yesterday, I’d never looked at the AHK docs closely enough to realize how simple this was. The contents of the clipboard, in plain text format (that’s the key there!) are available in a system variable called “clipboard”. So, all I really needed to do is call SendInput on that. Duh. Just to get fancy, I also decided that I wanted to trim trailing whitespace from the clipboard contents. So, here’s a simple macro that trims trailing whitespace from the contents of the clipboard, and sends it out:

^+V::
myStr := clipboard
myStr := RegExReplace(myStr, "s+$","")
SendInput %myStr%

I just have that mapped to Ctrl-Shift-V, so I can paste text anywhere, without formatting, no problem. And, yes, I could have written this in one line, but I broke it up so it would be easier to see what I was doing.

The point of this story, I guess, is that AutoHotKey is a wonderful thing, and that some things are simpler than you think they are, if you just sit down and spend a few minutes reading the docs.

programming books

I finished the Advanced .Net Programming class a couple of weeks ago that I was taking at NYU. While the class was going on, I limited my reading mostly to stuff that related to the class. I read bits and pieces of three books; I posted about those back in February.

I took a break from reading any programming-related books for the last couple of weeks, but now I’m looking to get back into something. I picked up Rocky Lhotka’s Expert C# Business Objects again tonight. I’ve had that book since 2007, I think, and I just haven’t been able to get all the way through it. The copy I have is now several versions behind. (Here’s a link to the current version.) I had read through the first six chapters previously. Tonight, I just sat down and leafed through the remainder of the book. I’ve decided that there’s nothing else in there I really need to read in depth right now, so I’m just going to drop it, and maybe pick up the new version at some point and start over with that.

Meanwhile, I also recently bought C# 2008 for Programmers by Paul and Harvey Deitel. I picked this up largely because I’d found some good stuff in an older version of the book that’s available on the Safari subscription I have through ACM. This is a general C# book, written for people who already have programming experience. It covers a lot of the newer stuff in C# and .Net that I haven’t really had time to pick up, since I first learned this stuff back in the days of .Net 1.1 — LINQ, generics, WPF, and so on. I’m thinking I should probably put this book on top on my reading list, since there’s a lot of stuff in there that could actually be useful to me at work.

Jira

I finally got around to installing Jira today. The Windows install was pretty simple. I did a default install, then went in and changed the database to MySQL. That worked fine. I then tried getting the CVS integration working, but I haven’t got that figured out yet. It just hangs when I try to set up a CVS module.

Either way, now I’ll have to spend some time setting up projects, and seeing if I can get myself used to tracking projects in Jira. Of course, I’ll also have to see if I can get the two other developers in the department interested in using it.

Jira

I picked up Jira and Confluence this week, during Atlassian’s “Stimulus Package” sale — $5 each! A while back, I’d looked at Jira, and several other bug-tracking/project-tracking applications, but I never got around to evaluating any of them. I’ve had a vague sort of a plan to implement Trac eventually, after first converting from CVS to Subversion (which was also a vague kind of plan with no particular timeline on it). I don’t think I could have ever talked my boss into paying $1200 for Jira, which is their cheapest commercial license. The $5 version only covers 5 users, but that’s fine, since I only have two programmers working for me right now anyway.

It looks like Jira can work with either CVS or Subversion. I’m still planning on converting to SVN before I install Jira though. Of course, since we’re a (mostly) Microsoft shop, I should probably look into TFS, but I think that might a bit too expensive for me.

It’s a bit of a balancing act, in a small shop, trying to figure out how much time and money to spend on infrastructure (for lack of a better word) — project tracking, version control, formal testing, and so on. I can’t spend too much time on it, but if I don’t do it at all, things start to fall apart…

DreamSpark

Whenever I take a class at NYU, I always spend a little time looking around to see if I can take advantage of any student discounts on software or hardware, while I have a valid student ID card. In the past, I’ve picked up some random software from the NYU computer store, if there was something I needed, and they had it cheap. Right now, Microsoft has a great program called DreamSpark that allows college students to download certain developer tools for free. The authentication mechanism ties into NYU’s Net ID system, so you can authenticate yourself as an NYU student just be selecting “NYU” from a drop-down at the DreamSpark site, then logging into your NYU account. Pretty simple. I’m downloading Visual Studio 2008 Pro, SQL Server 2008 Developer, and Windows Server 2008 Standard right now. I’m not sure that I really need any of these things; I have access to all of them through my MSDN subscription at work. But, this way, I’ll have a set of licenses that are definitely mine, and not the company’s, just in case.

.Net books

The instructor for my NYU .NET class listed three books on his syllabus. Programming C#, by Jesse Liberty, is the main book for the class. CLR Via C# by Jeffrey Richter is an optional book, as is Programming .NET Components, by Juval Lowy.
I bought all three of these books the old-fashioned way: from Amazon, in dead tree form. I have an older edition of the Liberty book, but I don’t have any edition of the other two, and I think they’ll come in handy.
None of these books is available on the Kindle, by the way, though the Liberty book is available as a DRM-free e-book directly from O’Reilly. Of course, the e-book costs $40, while the hard copy from Amazon is only $31.50. Oh, and the Juval Lowy book is available through the limited Safari subscription I get through ACM, though I didn’t figure that out until I’d bought the hard copy.
I actually haven’t bought any computer books in a while, so I was due to plunk down some money and (hopefully) spend some time reading. The last time I remember buying anything was after VS 2005 and .NET 2.0 came out.