Thursday, January 31, 2008

Old Code Part 2: XML / XSLT Before it was Cool

For this issue of Old Code I'll be going way back. Before .NET, before Visual Studio, before broadband. I wrote this app before many of you were even working. This was probably my favorite project of all time, still stands up to that today. Since this was so long ago I can give more details than in the last issue so here we go.

Background: The year was 2000 and companies small and large were realizing they had to get online. Some because they had a business need to do so, others because "everyone else was'. This was a case of an actual business need.

I worked for a smallish web design / development company called DigitalDay, they had just changed their name from Mozes Cleveland and Company. We had some good sized clients like Sherwin Williams and Ernest & Young but our biggest (duh) was GE. We did a lot of work for GE Plastics and their Silicones division, incredibly huge multi-national companies. Anyway, one day I had just returned from TechEd 2000 in Orlando and was pulled into a conference call with a branch of GE Silicones in Europe. It was actually a joint venture between GE and Bayer (yes, the aspirin people). They had a problem.

Problem: When these two separate companies were merging their ERP systems it was concluded that they systems were incompatible so they switched both companies to SAP R/3. The E-Commerce team had been given a nearly impossible deadline of getting a system online using the new SAP system within just a few months. They did accomplish this goal (don't worry, we'll get to my role soon) as this was right after SAP had released the MySAP module which contained its own proprietary web server and exposed SAP modules online. Done, first goal accomplished. But there were issues.

Issues: While they met the milestone, no one was satisfied with the results. The web application wasn't branded GE Bayer Silicones but instead was branded MySAP including colors, logos and everything. Also, this was long before most manufacturing companies in Europe had broadband Internet and for them this application was incredibly slow. Customers complained. Then came the call.

So on this call they got us into the application to take a look around and wanted our opinion on if we could do anything to speed it up. It didn't take long before I had identified that the biggest issue affecting speed was the .js files being downloaded. They totaled around 300k. Even today in the AJAX and JSON world 300k .js files are a little excessive but in 2000 that was out of control. So the call ended and I went back to work only to be asked minutes later if I had a passport. Two weeks later I'm on a plane to Amsterdam to spend 10 days looking at the issue in Bergen Op Zoom Holland.

Once there I dug into the MySAP solution to see what I could do to fix it. So after three trips to Holland totaling over three months I had built them a solution that I am still proud of today.

Solution: The big requirement was to display a screen to the user with information on 300+ purchase orders in the quickest time possible. I crafted a solution where the page would have an embedded XML Data Island (linking XML was less reliable in those days) and linked XSL file, CSS file and JS file. The XSL/CSS/JS combination gave the ability to create HTML on the fly for two different layouts and allow sorting and filtering as well. All in client side code.

MySAP had already constrained them to using IE only, so I also had them use 5.0 or higher which gave me access to browser XML support and also having to only code the JavaScript once. I worked with ABAP programmers from Deloitte to get the information to me that I needed. I then had to learn SAP's server side language BHTML, which was simplistic but different, to craft the XML to send with the page. Due to the size constraints I went against "proper" XML design and used single character element names and no whitespace at all as every byte meant a lot when it would be repeated hundreds of times ((once in opening tag + once in closing tag) * number of results). Oh yea, and I built this entire app in Notepad. Not kidding. No IDE, not even Notepad Plus.

Conclusion: While using XML with client code in a browser may be common-place today, it was totally new at the time. XSL Transforms done in the client browser still isn't common, I did it in 2000. Basically between three months in Europe, totally cool technology and one of the best project managers I've ever worked under, this was my favorite project ever.

Lessons Learned:

  • Two-Day shipping from Amazon to The Netherlands cost more than the book itself
  • Never spend an anniversary in Amsterdam unless you can do it every year (I did, I haven't, I hear about it frequently)
  • Never take wife to Europe unless you can move there (I did, I haven't, I hear about it frequently)

Monday, January 28, 2008

Model Railroads Are For Geeks Too

Like many people I had toy trains as a kid.  It was nothing huge or elaborate but my dad and I (well, mostly my dad as I was about 10) built a 4'X8' table in our basement with an HO layout on it.  It was fun and I enjoyed adding buildings and stuff to it but it never really 'grabbed' me.

Fast forward a few many years and here I am playing with trains again.  This time they are bigger, O Gauge instead of HO Gauge (1/48 scale instead of 1/87 for those not 'in the know').  And while there is still the fun of watching trains run around the track, and seeing the pure joy on my son's face while watching them would make anything better, there is something more this time.  Trains are 'smarter' then they were when I was a kid.  Current trains are fun for the geek in all of us (at least the geek in everyone reading a programming blog).

January 2008 043 The two largest companies in O Gauge railroading today are Lionel and MTH.  Lionel is the same company that made the trains your granddad played with.  MTH is a newer company but still very much into it, and the competition between the two helps them each do some great things.  Now I'm not saying that these guys are all these is, far from it, they just are the biggest.  There tons of companies that make all sorts of stuf.  You can even buy track that is so realistic it comes with wooden ties that are spiked to the rails like real track!

But what is cool for geeks?  I'll tell you :)

DCSRemote New engines from either company have a ton of features other than go & stop.  I have a remote control from MTH that lets me blow whistles, sound bells, launch station announcements, cause train wrecks, adjust volume, drop cars and a ton more.  And I can do this for multiple engines at one time, while walking around the room.  Trust me, it's a lot more fun than it sounds.  You have total control over multiple engines, can throw switches and even operate accessories, all from the one remote.  The home theater market could learn a thing or two from these guys :).


currentlayout Also for geeks, there is the planning.  You can't just throw track on a board and hope it all fits.  There is software these days to help you determine what the layout will look like (and if it will fit).  This software makes it easy to figure out how much of what type of track you can fit in the space you have available.  You can even look at your layout in 3d and give it accessories, buildings and mountains.


January 2008 300 And then there is the wiring.  A simple loop requires simple wiring, a couple of wires going to a lock-on (easy device for connecting wire to track) and you are done.  The more complex the layout, the more complex the wiring gets as well.  My layout shown here has 18 switches, three separate loops (each in numerous blocks), six sidings and numerous operating accessories.  All of these items require their own wiring, some needing soldered to toggle switches or screwed onto terminal posts.  You can't see even a fraction of the wiring from this one picture and this isn't even done.  That piece on the left will have about 20 sets of three lead wires heading into it soon.

Really I'm not quite which is more fun.  Playing with the trains or building the layout.

Old Code Part 1: Plug-In(able) Web Application

Today I'm starting a series that I'm calling "Old Code".  This will be where I go over some project I've worked on that was notable for some reason but may not directly translate into a "how-to" for developers today.  These posts will more be about some problem to which there was no simple solution but to which a solution was found that was usually either particularly creative, cutting edge (for its time) or a total hack but that got the job done.  Some of these projects I'm proud of, others I'll be telling you about even if it may not be my best work.  Overall though I think we can all gain by looking back at our past projects and letting the public review them for with us.  In most of these I won't be able to provide code samples or even give application / company names because of NDAs but I don't think that will impact the overall posts.

I this first installment I'm going to be talking about a project I was working on about four years ago. Disclaimer: My memory of 2004 may be a little fuzzy but I don't think I can take full credit or blame for this solution.

Background: The overall project was to create a web-based management application for complex devices which did have their own internal memory.  Basically this application was to replace numerous desktop applications with a multi-user, accessible anywhere, cool, user-friendly, do everything management application.  When the project got started it was 2004 and we were building it in C# and ASP.NET on the .NET 1.1 framework.

Problem:  Of these devices that the application was to manage there are numerous 'families' to which the capabilities of and communication to are drastically different.  This application was to allow the ability to be installed with the ability to support one or more family and have the ability to support future families possibly being added by third-party developers.  They didn't want to release the source code or to have to recompile every time a new family was to be added.  In theory a third party company that makes these devices would have the ability to create their own "plug-in" and install it at a customer location without our companies involvement.

Issues: With it being 2004 none of us had a ton of .NET experience but we did know a lot.  To our knowledge (and I still think this was true in 1.1) all code-behind files for a web app were compiled into a single DLL at build time.  This is where the real issue existed:  How do we let third-party developers seamlessly add pages to our .NET 1.1 web application?

Solution: Now the architecture that was devised to handle this is hard to explain without examples.  Who am I kidding, it's hard to explain with examples.  Many good developers took months to really grasp what we were doing, we'll see if you get it quicker.  Basically the application was split into pieces.  It was already n-tier with a full business object model based on Lhotka's CSLA framework.  Basically an architecture was created in which any family specific code would exist in satellite dlls that are loaded using reflection at run-time based on information coming from the SQL Server database.  This included the code-behind files for any pages or user controls that contained family specific controls/data.  Much work was done to construct generic widget classes that only contain fields that all widgets have regardless of family and then having the family specific classes derive from those classes and add their own fields / methods as well as all update logic.  While that is standard for OO business layer development, it's something else to apply that same paradigm to web pages. 

We ended up creating a structure where the base application would know that there was a widgetconfig.aspx page.  Then at run-time an intermediary page would intercept the request for the config page and append a family specific folder name in front so that the request would get to the correct page.  These was still the issue of the code-behind pages.  This is where it gets tricky.  For each family specfic page the actual aspx would only contain the generic header and footer user control declarations (this was pre-master pages) and a declaration for a user-control of the same name as the parent page.  In the directive for the family specific user control the assembly would be named to find the class in.  This assembly was a family specific dll that housed all code-behind files for that families pages.  In the class for that user control it would name the actual .ascx file to associate with the controls defined in the class. 

Through this method we were able to create a way to add a new family to an installed server by adding some dlls to the bin and some code-less aspx & ascx files to the application folders.  So it was possible to do this without touching the original source.

Conclusion:  After much coding effort and even more in education this strategy went untested for nearly four years.  Just today we got word that the first true use of this plug-in model had been successfully implemented using our SDK and without touching our source code.  While I'm sure that there were probably more elegant ways to accomplish this and that I'm glossed over much of the complexity this was a solution for the problem that worked.  Of course in .NET 2.0 it would have been much easier, but that didn't exist yet.  I was going to have a co-worker from that project review this before I posted it but what the hey, he can review it by reading it :).

Don't worry,  some posts in this series may contain actual code :).

New Developer Events in NEO?

Quick post here...

I've been talking with some people lately about getting more developer events up here where we "Get The Shaft". Another active Cleveland developer took the first step of creating a Google Group with the objective of getting people a forum to actually work together to make this happen. If anyone reading this is interested in helping get new developer events to the NorthEast Ohio area head on over to Google, join the group and do what you can. We need help in every way you can think of too btw: sponsors, locations, speakers etc.

Thursday, January 24, 2008

How Dinosaur Web Developers Can Regain Their Shine: Step 1

Last week I posted that a large number of us that have been web developers since the first Internet boom are becoming dinosaurs.  I may have said COBOL programmers, but it's the same thing :). 

I also said that one of the things we need to learn in order to catch up is CSS.  Now, we all used to think we knew CSS, and we did they way it worked at the time, in the browsers of the day.  Through trial and error we learned what you could and couldn't do that would look consistent across the major browsers of the day.  Along the way we learned to stay away from things like dynamic positioning, you were pretty sure to have things look bad unless you wrote a TON of special code to account for browser differences.

Well, the browsers have matured along with us but while our hair may have thinned or waistlines grown the browsers have become more standards compliant.  Now the MS bashers will say that IE is still not compliant and sure, there are issues, but overall, wow, they all do a lot of cool stuff consistently now.  You might say that while we are moving steadily toward middle age, the browsers are finally just able to buy us a drink.  Positioning of elements, cool dynamic looks and even whole page layouts can now be done using nothing more than CSS and some images.  Better yet, it looks the same in all major browsers.

The longer we wait to learn the new standards, the harder it will be for us. 

mix Are you not convinced yet of what can be done with CSS?  Take a look at the site for MIX08 and then look at the exact same site with a different (and plain) stylesheet.  Pretty amazing huh? 




csszengarden Still not convinced?  Ok, check this one out: CSS Zen Garden is a site created to demonstrate the capabilities of standards based CSS design and provide the resources to help you do it.  Play around with the site by choosing different designs and you will see what I'm talking about.  There are samples of all of it along with links to plenty of other resources.




So, do you think you have what it takes to use standards based web development already?  If so then head over to the restyle site and enter the contest with your cool design.  You can get a trip to Vegas out of it and hear some guys named Ballmer, and Guthrie talk about cool stuff.

Wednesday, January 23, 2008

I WILL be an MVP

Now maybe this isn't a practical goal but I truly think it is possible for me to be named a Microsoft MVP in ASP.NET when they are announced in December.

Wanna know how I'm going to do it?

Basically I'm doing the same things that I've been preaching that we all need to do:

  • Learn the newest stuff
  • Evangelize to peers
  • Be active in the community (online and in person)
  • Make yourself known

So that last one is the hardest, but I'll talk about that a little later. First I'm learning the newest stuff and catching up on stuff I've fallen behind in. For me this means getting up to date on dynamic positioning, learning ASP.NET AJAX and finding the limitations with Silverlight and trying to find ways to get around them. It means not just reading about these things online but also watching videos, reading books, building sample apps on my own time and also trying to convince my employer to use them in production. I'm well into this phase already, the only trick is going to be able to keep up the momentum.

Evangelizing to peers is something I've always done so that's not a hard one for me. When there is something I'm passionate about everyone around me knows it. I tend to talk a lot when I find something cool and want everyone else to see how cool it is.

Being active in the community is also not a hard one but takes a time commitment. For the last couple of week I've been all over the forums at answering questions about left and right. I've also learned a few things as well which is a great thing about forums, you may have a solution but someone else may know of a cleaner / cooler / more elegant solution. The in person community is a little harder just because of the time / distance issue. This is also something that I've done in the past so I need to get back at it. I had a contract gig at the Cleveland Clinic that was only a few months long but still was able to get an internal ASP.NET monthly lunch discussion going which had pretty good turnout. I also try to get to the .NET SIG at the MS office but that's about it at the moment. I really need to offer to speak at one of these groups to really push me to get involved more.

Making myself known kind of comes along for the ride if you do the "be active" item from above. You you are active enough and vocal enough then people will notice. You just need to make sure they notice you for your wisdom and insight instead of for your ignorance and stupidity.

Be an expert. This one is hard to quantify. What makes a person an expert? Is it a certification? Nope, I've seen plenty of people disprove that. What about an advanced degree? Again nope, that may give you academic knowledge but I don't think that makes anyone an expert. Personally I think you are an expert when someone else calls you one. Preferably numerous people. You can't name yourself an expert and expect it to mean anything unless you have people that truly think that you are one. Some people call me an expert in .NET web development already but I don't think I'm there yet. I will be before this year is up though, because I WILL BE AN MVP.

Monday, January 21, 2008

Well, Maybe Cleveland Doesn't Get The Shaft

Ok, so my earlier ranting must have paid off. Well, maybe not but at least I have answers to some of the stuff. I was right about one point, Cleveland is NOT getting an MSDN event this quarter. The reason is that we are getting a launch event which is bigger and full of sessions like what's at MSDN. And the launch event has been moved up about two months earlier than they had originally said, to March 13th. So now it's only about two weeks after the first event, instead of three months.

So maybe it's not all that bad up here after all.

What is a RIA?

I'm going to spend a lot of time over the next few months talking about RIAs so why don't we get a definition out of the way now. I used the word RIA in my last post and received some feedback wondering exactly what it meant so here we go.

RIA stands for Rich Internet Application. At times you will also hear it defined as Rich Interactive Application, particularly by Microsoft, since most of the aspects can also apply to desktop apps and in some cases an online RIA can be ported to work on the desktop pretty much as-is (via XAML). Wikipedia has a pretty good overview which I highly recommend as a starting point in learning about them.

In short a RIA is basically a front end to an online application which is user friendly, graphically 'pretty', user friendly, responsive and user friendly. Did you catch on to a theme there? If not let me spell it out for you U S E R F R I E N D L Y. No amount of graphics or flashy interface will make an application user friendly without thought into how many ways the user will use the application, what they would logically expect it to do and then making those things happen.

In my opinion a true RIA isn't just fancy graphics and cool animated buttons, but an interface that is clean, intuitive, responsive and accomplishes it's goals without overloading the user with options and abilities that they don't want or need. I'm not saying I like Jacob Nielson's basic text layouts, far from it I'm just saying that adding animation or drag & drop or whatever just because you can instead of for a real usability concern just annoys users and makes the app less user friendly instead of more. Both animation and drag & drop and all the other niceties are very useful and are needed in some cases, just not all.

Here are a few other sites and articles with some RIA info:

This is only a sample of an information base that is growing daily. In future posts I'll talk about some of the technologies, methodologies and such as related to RIAs.

Friday, January 18, 2008

Web Development Is Dead! Long Live Web Development!

Everything is about to change.

Some would say it already has, I would argue that the changes that have taken place in our industry during the last 5-10 years are nothing compared to what's going to be happening over the coming few.

New technologies combined with better tools are making the kinds of things possible that we laughed at when sales people / clients suggested them a few years ago. Silverlight, Flex, AJAX, Web Services, Ruby are just a few of the technologies that are enabling this change. Tools like the Expression Blend / VS 2008 combination allow unprecedented cooperation between designers and developers. Now we CAN do what the designers want us to do, if they can draw it, we can build it.

The time of the RIA is fast approaching. The seventh principle of Web 2.0 as written by Tim O'Reilly in 2005 requires "Rich User Experiences". Regardless of what you think of Tim O'Reilly, Web 2.0 or 'cool' websites, it's happening now. Even the corporate world is noticing. I work for a major Japanese electronics company building a mundane management application and a couple months ago a senior executive mentioned Web 2.0 and mashups. This is not going to be a passing phase.

I know there have been some RIAs created today but they are far from mainstream. Nearly prediction list for 2008 by prominent web development bloggers name 2008 as the year of the RIA. I agree. I think it is time for 'classic' web developers to learn and embrace the new technologies or risk becoming outdated. Those of us who were writing cutting edge apps in the first big Internet boom (1998-2000) risk becoming the online equivalent of COBOL programmers unless we get off our butts and start learning again. While it's great that we know the intricacies of HTML, CSS, JavaScript and the .NET framework, now we need to learn XAML, JSON and some design skills.

Most importantly we need to learn how to think differently. All the rules we knew about what could and couldn't be done in a browser are being thrown out the window. Unless you want to be the one that is dismissed as 'stuck in the past' and be passed up but the young kids with all the cool ideas (exactly who we were ten years ago) we need to learn the new capabilities and learn them fast. Just think about it this way, how do YOU feel about COBOL programmers?

Web Development Is Dead! Long Live Web Development!

Tuesday, January 15, 2008

Dream Job: Myth or Reality

If any of you are like me you've changed jobs a few times. Maybe more than a few times. Sometimes this was not our choice (read, web company circa 2001), most of the time however job moves are in part, motivated by a search for the perfect job: The Dream Job.

There is definitely a problem with most good programmers I know that we get bored easily. As soon as we know everything there is to know about the site/product/industry we are currently in, we want something new. At first this is just an idle though and then over time it turns into a desire to 'right' things and you move on. This is why I've spent a lot of time as a contractor, it's easier to change jobs without hurt feelings and such.

But what I'm really writing about tonight is the 'Dream Job' that we think we lost out on at some point early in our careers. For most of us there have been times where we had to make a choice between two (or more) companies, each with their draw. We made our decision and hopefully were satisfied with it. But you always wonder about 'what could have been.' Or maybe you did work there and for some reason left it and always wish you were still working with those people or in that industry.

Have you ever gone back and looked at the company again? I have. A couple of times in fact.

For me, there was this company I worked for back in the Internet heyday, times were good. I traveled the world writing cutting edge code and strategizing cool solutions for clients. We had writers, designers, information architects, programmers and all the other things a company like that should have. Times were good.

Then came the downturn and the owners decided it was a good time to split. No more company. No more good times. I always dreamed of that job, that perfect job which was no longer. I found new work quickly but it wasn't the same. I stagnated. No more cutting edge. No more cool.

Eventually I left this gig for a new one, in search of the perfect job, as always. This job was much better technically. It definitely honed my skill from a technical perspective. Real experience in OO programming and some of the intricacies of the .NET framework. But it still was lacking in that one criteria that the perfect job must have: cool. After a while I left this job too, still looking. After a couple of other gigs though I came back. What this job lacked in cool it made up for in tech.

And now the dance begins again. An old co-worker, now a partner in a new incarnation of that old dream job, called me the other day to basically offer me a job. We talked about this a couple years ago as well and while the company had cool it had little to no tech. This time though things seem to be different. I went and talked to them again and found that they are doing some OO development, some multi-application integration, some SharePoint work, some e-commerce work. And it still is cool.

I would be writing specs, managing off-shore development, writing code, architecting solutions; all good stuff. I would be encouraged to stay cutting edge. I would get to help steer the technical face of the company. And it is cool.

Would this count as a dream job? Would I burn bridges if I left the good job for the possible dream job? I still need to talk to both the new people and the old people but this may be a tough decision. Very tough.

Stay tuned, I'm not sure what I'm going to do.

UPDATE: Well, it may be an easy decision after all. I'm expensive.

Monday, January 14, 2008

Why Does Cleveland Get The Shaft?

DevCares: Don't care about Cleveland
MSDN Events: Frequently a non-event, late when it happens
Launch Events: So long after the actual event they've already announced the next version

Why does Microsoft not care enough about the Cleveland market to get events here timely or at all? Is there not a large enough developer base here? Is it that the developers that are here don't participate enough? Does the entire region use LAMP instead of MS solutions?

I don't think any of those explain what the issue is. Josh Holmes and the ArcReady events are here every quarter. Jeff Blankenburg comes to SIGs and is very responsive (scary fast in fact). The last MSDN Event had so many people they were turning them away at the door.

Maybe my perception is wrong but it seems that Cleveland is not only a minor market in MS eyes but even an afterthought. What can we do to change that? If we all bug our evangelists with questions and requests will that raise the chatter level high enough that the corporate types will think there are more of us then there are? I'm not actually saying we should do that, I like that Jeff and Josh are responsive and wouldn't want to annoy them, too much anyway.

Is is possible that the person in charge of our region's MSDN events and DevCares events just doesn't have time for Cleveland? I do happen to know that it is the same person. The company line on why no DevCares events come to Cleveland is that no local partner has stepped up to host them. While I believe that is true, how hard have they tried? For all I know they are trying their collective butts off and still no one from Cleveland will do anything about it. If that's the case then we all need to pressure our employers to play nicely with others. If it's that they only asked one company who said no, then they need to work harder (please).

If anyone reading this rant knows anything more about why Cleveland gets skipped please post it and maybe we can collectively figure out a way to get more attention.

Friday, January 11, 2008

Popfly How To- That was easy


So at the .NET SIG the other day, one of Jeff's demos was of Popfly and wow was that simple. For the last couple of days I've been walking around the office here talking about how cool Popfly is. So I'm posting some of those same points here (as well as pics of the cutest kid on the planet).

I've got to say that Microsoft's Popfly is the coolest free online app I've seen in a long time. It's
ridiculously easy to create cool and powerful mashups. So easy a 10 year old could do it, yet still fun and powerful enough to make geeks happy.

In fact, I've included a spinny thing (that is a technical term in my offce btw):

What are the steps required?

  1. Open the popfly site and log in with a Live Id
  2. Drag a few "blocks" into your workspace
  3. Drag connections between the blocks
  4. Set a few configuration items

That's it, all there is to it. So, how did I create this cool spinny thing? Simple

  1. Added a Flickr block
  2. Added Photo Carousel
  3. Draw line from flickr to photo
  4. Set flicker type to Photoset and give the id
  5. Run It, you're done!

That's all there is, nothing more. It's really that easy. Popfly is already getting a ton of press, I think it's only going to grow. I'll definitely be using it more.

Wednesday, January 9, 2008

We should all be Evangelists

Wouldn't it be great if we were all evangelists for the technologies we care about?  Going around telling other technical types about the benefits of the tech and the 'how to' you need to get started.  To be the person that people come to with questions about technology X.

Well why aren't we?  We should be.  I will be.

I'm not saying that we all quit our day jobs and try to get hired on by Microsoft or Sun or whomever and do it for a living, what I'm saying is what is stopping us all from staying up on the most current aspects of something we feel is cool and 'preaching' those items to other people.  If you don't try to know everything about everything then it doesn't take a huge time commitment to be an expert on some aspect of technology. 

So how do you do it?  I've got a few suggestions.

  • Read relevant books.  All technologies get books published about them as soon as the tech is announced.  Many times before platform / tool / technology has been released.
  • Subscribe to and read relevant blogs.  It's amazing how much information you can gain just by reading the blogs of the technology makers and implementers.  There are a ton of blogs out there dealing with pretty much every topic you can think of.
  • Play with it.  Download the betas and trial editions and work through samples.  Look at open source projects on the topic.  The best way for most people to learn something is by using it, so do it.
  • Attend events.  Microsoft and most other technology makers sponsor user groups, SIGs, technology overviews and other types of events where you can see real people talking about the newest technology.  Many of these events are small enough to ask relevant questions and talk one on one with the experts.
  • Speak Up.  Whenever there is a conversation about your area of concentration, let your voice be heard.  No one will no you are an expert if you don't let them hear you talk about it.  This can happen in person or in online communities, wherever you feel comfortable.  But remember, if you hope to gain respect at your place of employment you need to speak up in person sometimes.

This list is far from complete but it's a start.  Add to it, do only a subset, whatever, just do something. 

So get out there.  Be an Evangelist and let people know it!

Tuesday, January 8, 2008

Cleveland .NET SIG 1/8/2008- Silverlight 101

Tonight I attended the Cleveland .NET SIG hosted by Bennett Adelson with Jeff Blankenburg as the presenter. The topic was Silverlight and was basically a test run of the same presentations that Jeff will be giving at CodeMash later this week. In fact, this is part of the reason I'm not attending CodeMash, I got the content I wanted most anyway.

So on with the review.

Jeff was pretty well prepared, he had his slides put together professionally and his demos accomplished their goals of showing various features of SilverLight and of building upon each other nicely. He did have some trouble with some of the demos the first hour but while he was frustrated / embarrassed by it I don't think came off bad. Really all of the issues came down to the fact that this was his first real run of the content with an audience so he forgot a couple things that I think he knew, just was a tad flustered. I don't want it to sound like it went badly because it didn't, a couple little hiccups but overall a good pair of presentations.

The only complaint I would have, and this isn't a real complaint, come in the second presentation. In this hour he concentrated more on cool implementations like Tafiti and Popfly than on "how to". Now that may have been the goal the whole time but well, I wanted more meat :). And also, it did feel like, and Jeff actually said at one time, that he was staying away from the demos after the pain he went through during the first hour.

Still, overall, I think it was a good meeting and I'm glad I attended.
Atmosphere: The pizza was good and greasy, the room was full and Mr. Annoying was there as usual. I'm not going to name him because he's probably a nice guy but the person to whom I'm referring has been at every event I've attended for a while and ALWAYS asks loud, grating, almost confrontational questions of the presenter. I'm sure many readers know exactly of whom I speak (well, type). Really, I think Jeff did a good job of handling him, even got him to shut up for a while, but not until he had completely derailed his train of thought. Really I think that's probably what knocked Jeff out of his rhythm in the first hour.
Oh, and my losing streak continues. Still no door prize. For those keeping score, a few years back (like 2001ish) I won a few things from MSDN events and such. Since then: NADA. Zip. Zilch. A month ago I was at an event with about 12 attendees and 5 giveaways, still nothing. I'm hoping that I'll win a 'metric ton' of goodies on Thursday (hint, hint).

CodeMash, Well, maybe next year

Well, not all good things come to pass, or something like that.

As you know I had planned to attend the Codemash conference this Thursday and Friday in Sandusky. I was pretty psyched about the speakers and content but mostly about the networking oppourtunity. Clearly I'm in the midst of working through how to move forward with my career and I was looking forward to the chance to speak directly with people who have taken their career to the next level and get their advice on what to do next.

Well, not gonna happen now.

One on the downsides of being a contractor is no paid vacation. So after 1 1/2 weeks of no pay, facing another 2 days without pay plus the expense of the conference itself, while low, is still too much at the moment. I was still going to go anyway until it was announced that Jessie Liberty is not attending and that Jeff Blankenburg is giving his talks. The same Jeff that is giving the same talk at the Cleveland .NET SIG tonight.

So, much to my dissappointment I will not be attending codemash. This year. I suppose there is always next year.

Friday, January 4, 2008

Certification - Is it worth it? - Part 3

I've done some research on what others feel about Microsoft certifications. Here are the results.

First is the perspective of a development manager:

I spoke with a former manager of mine who has been hiring developers for a number of years, some good, some not so good, and asked his feelings on this topic. He was very much in favor of certifications (he does not have one that I know of btw). Basically in his opinion certifications tell him two things that increase the chances that the candidate will get an interview.

1st: The candidate probably has the initiative and drive to achieve this for himself (or herself). He stated what we all know which is that no matter what most employers say at hiring time, they will not give you time to study nor will they provide an incentive strong enough to make it "worth your while" to achieve a certification with great personal effort.

2nd: It does indicate a certain level of knowledge in the candidate. He was quick to point out that knowledge and competency are not the same thing as he and I both know a former hire that had a certification and was less than stellar.

Next we have someone who has managed to set himself apart:

A former Microsoft consultant, Patrick Santry of, last year posted his advice on how to get ahead in this field which had some decent information (read: his thoughts are similar to mine). This is more geared toward the consultant role but I think it is relevant for most people in our field. Included was a bulleted task list, notice the first item:

  • Get certified! You have to start somewhere, and getting certified helps provide some credibility for you on a technology area. [bold added for emphasis]
  • Never turn down an opportunity; you never know where it will lead.
  • Always follow up and build from your experience. If you write a book, then promote yourself as an expert.
  • Participate online. Build a website, be active in the forums, and get your name out there. Opportunities will arise just from being out there.
  • Create a career plan. You need to set goals and objectives of where you want to be five, or ten years down the road and try to stay on the path to those goals.
  • Stay current! Probably the hardest aspect of being a consultant, but necessary.
  • Work with your local Microsoft reps. Go to the presentations, and free training opportunities in your area. This helps build your knowledge and your network.
  • Support the local user group community. If you don’t have a SIG locally, start one. Contact INETA for more information about your area.
  • Build the network. Contact every user group, or organization to see if you can promote your book, presentation, or whatever it is you want yourself to be recognized with.
Finally, we have the words of someone who has been in the field longer than some of us have been alive. I won't call him out by name but my co-workers should know who he is.

While he worked at a consulting company a few years ago, this gentleman was asked to get his certification by the company he worked for. He was told that this was mostly so the company could retain partner status with Microsoft (I too have been asked for this reason at a previous position). At first he was excited about the supposed benefits of certification including access to software, exclusive messageboards and other items.

So he studied and tested and eventually achieved his NT certification (see, I told you he was older). He took the test seriously as well, instead of just memorizing the information he truly understood the WHY of things, not just the HOW. Still, he was disappointed. The access to 'exclusive' materials was underwhelming and the messageboards were full of people complaining about how even after achieving certification they still couldn't find a job.

In the end he was glad he went through the process but was quick to caution that the end results may not be what you dream of them to be.

So basically all three of these perspectives back up what I was already thinking. Now I'm sure if you dig into it you can find opinions that directly contradict these but this at least gives me confidence that what I am thinking is valid. I probably won't post any more in this series until I have achieved something, I really need to stop typing and get to studying... I mean working :).

What do you want to be when you grow up? - Response

In response to Dave's post on this topic, I thought I would jot down a few of my own thoughts as well.

I have also struggled with this same question for several years and have even made some bold moves in response to what I 'thought' I wanted to do. I've bought self-help books on the topic, signed up for college classes and created a reputation among my friends as someone who changes their career path monthly. One month I'm going into Aerospace engineering, the next it's GIS, followed closely by architect, robotic engineer, landscape designer and then as the frustration increases I land on ditch digger. Maybe I should have just stayed as an Infantryman, at least there the goal is clear (point gun that way and shoot).

In the end (well, currently at least) I think that radical changes (like switching fields entirely) is probably not something I want to do, mostly due to the time involved in getting qualified in the new field as well as the time I have invested in this one. So what I am pursuing at the moment (sure to change in a month), is to figure out how to move to the next level in the field I am in currently (which happens to be creating web applications for those joining late) and acting on those items. Maybe that way I can at least feel satisfied in my career.

I'll be posting shortly about how I'm trying to advance my career from average ho-hum developer to super programmer extraordinaire, or at least to happy respected developer.

Thursday, January 3, 2008

Certification - Is it worth it? - Part 2

Since my last post on this topic I have received mixed feedback from various people. In general the responses tend to vary based on the person's expectations.

If someones expectation was that by having a certification they would magically get a better, higher paying job, then they were usually disappointed and don't feel that certifications are worth it. On the other hand, if a person already had knowledge and experience and achieved a certification more for their own professional growth (with no pre-conceived notions of salary increases), they were happy with the results.

I don't have a certification yet so I can't speak to the aftereffects of achieving it but I can say that during my studying I'm learning that my 'expert' knowledge of ASP.NET web development isn't as all-encompassing as I thought it was. I knew that I didn't know everything but there are things that I thought I knew pretty well where I'm learning new things. Methods and attributes on controls that I didn't know about but have had occasion to use.

So for me, even if my getting a certification doesn't translate directly to better job/pay, the increased knowledge will help me do my job better, which will make me more employable at a better rate and so on. Basically, I think achieving a certification is a good thing professionally.

Just do it.