Archive

Archive for the ‘Miscellaneous’ Category

Developer Growth Spurts

May 5, 2010 3 comments

As a kid, I remember my parents always talking about the “growth spurts” I would go through.  Mom always said you could tell if I was about to have a growth spurt by the way I would eat – she used to claim I had hollow legs.  As I recall, the biggest growth spurts always happened during the summer, and then you would return to school and your friends and teachers were always amazed at how much you’d grown. 

I remember one summer in particular, between 9th and 10th grade.  I had always been kind of a small kid, a little behind the rest, and I was an easy target for bullying and harassment. That summer I caught up with a vengeance: I grew over 4 inches and gained about 50 lbs.  On returning to school some of the kids didn’t even recognize me as I was now bigger than most everyone else.  My life really changed as the bullies decided it was time to move on to smaller prey.  That summer marks my entrance into adulthood, at least physically speaking, and things were never quite the same afterwards.

Growing as a Developer

My development as a developer has seen several similar growth spurts: the move from Procedural to Object Oriented Programming; the move from developing fixed format text screens to interactive GUI and the Event Driven model; and more recently the move from Windows Forms to WPF.  I consider each one of these to be a Paradigm Shift, and each represents huge advancements in my abilities as a developer.

Of course, what I remember most was how difficult each task seemed at the time.  I speak frequently about WPF, Silverlight, Blend, and other XAML related technologies.  Perhaps the most common question I am asked is “how long does it take to learn this stuff.”  While I naturally do not have a real answer (I usually say about 6 months of emersion to become competent), I understand what prompts the question – anticipation of the growth spurt and the accompanying growth pains.

While our adolescent growth was completely beyond our control, our developer growth is just the opposite.  We have complete responsibility over our growth as developers, and that is a bit of a scary thought.  The old adage “if you ain’t growing your dying” never applied more than to technology professions.  I think what this means for us is that we need to constantly make the effort to place our selves in one of two states: either we need to be preparing ourselves for a growth spurt or we need to be in the midst of one at all times.

Preparing for Growth

Remember Mom said you could tell I was getting ready for a growth spurt by how I ate?  In development, information is our nourishment.  You should be able to tell if you are preparing for growth by what you are reading.  For that matter, are you reading at all?

I’ve always been a fan of tech books and I have a tendency to read them cover to cover.  I even like to read books about stuff I think I already know because inevitably I don’t know it as well as I could.  I bought a Kindle just for tech books.  I take it with me almost everywhere so I can fill dead moments with reading.  And of course the web is overflowing with blogs, articles, white papers, etc.  I probably spend 30% of my work time reading or looking up information on the web.  The point here is to read, read, read, and then read some more.

A lot of the time this is reading just for the sake of it, like reading about a new technology or device just because you are curious.  This sort of non-targeted reading is great and necessary to stay aware of trends and general goings-on in our profession.  And doing so primes the pump, so to speak: it keeps your cognitive juices flowing so that you will be in the right state to grow.  To really prepare for a growth spurt, however, we need targeted study.

Targeting Growth

So once we make the conscious decision to grow, where do we begin?  The first thing to do is select the area you want to advance.  Personally, I’ve recently decided that Software Craftsmanship is where I want to improve.  Like many developers, I’ve mostly coded by the seat of my pants.  Get it coded, make it work, push it out the door: after all, this is a business we’re trying to run here and productivity is everything. 

I see now that this is a very short-sighted way of developing. I’ve almost always been a lone wolf programmer so I never had an environment or mentor that would train me otherwise.  Since I’ve been involved with the developer community, however, I’ve been exposed to different ways of thinking.  I’ve seen presentations on Unit Testing, learned about Agile practices, adopted coding tools, and more, but never in any targeted way: until now.

Summer Reading List

I have put together a reading list to begin the process.

I’ve already begun reading some of these. I’ve already been trying to learn unit testing and I think I’m finally starting to understand TDD: now I just need to learn how to actually put it into practice.  The fun part is that I will be implementing these ideas as I go: I’ll be writing soon about my new project, which is very ambitious from a development standpoint.

Choose Your Next Growth Spurt

So now it is up to you to choose your next growth spurt. Where would you most like to improve as a developer?  Once you answer that the challenge becomes “what are you going to do about it?”  Who knows, before long people may not recognize you anymore.

As always, feel free to post in the comments below: I’d especially like to see what’s on your summer reading list.

Categories: Miscellaneous

Computer Graphics – Assignment 2

February 24, 2009 Comments off

As I wrote previously, my Tuesday and Thursday afternoons are currently occupied in “academic pursuits” at the local Community College.  Over the last several weeks we have been working on Assignment 2, and just this past week a follow on assignment.  I have finished both of these, so as promised here are my recent graphics.

Assignment 2 – Company Logo

For this assignment, we were to create a logo for a company.  Most of us chose fictitious companies, so I chose “Grace Mandolins”, a custom mandolin luthiery.  Along with the company name, we were to select three keywords that we wanted our logo to convey.  For the logo, we had to produce three versions: full color, tinted, and black and white.  And then also for each one we had to produce a scaled down version.  My final image below is a single document representing all of these variations:

Logo Assignment, final version

Logo Assignment, final version

I did the B&W version first and I really liked it.  I’m not wild about the full color version, but once I understood Tinting and arrived at the tinted version above that quickly became my favorite.

Assignment 2A

The follow up assignment to the logo above was to then use the logo and create a business card.  This was largely a lesson in Typography, where we studied text sizing, alignment, fonts, etc.  I used the tinted approach and logo from above to create the following business card:

Business Card assignment final versiononline casino

Business Card assignment final version

I was pretty pleased with the way this turned out.  It breaks a couple of rules: it is largely centered and very balanced, but if it works, breaking a few rules is OK!

Categories: Miscellaneous

LiveBlogging:Microsoft PDC – Reston

January 16, 2009 Comments off

Today I am attending the Microsoft Programmer Development Conference in Reston, VA.

Keynote – Stephen Walthers

Software + Service platform is the topic. Microsoft has spent Billions developing services, sites, and data collection services.  Speaking about Windows Azure, the new Windows Operating System. Not Windows 7, but a Cloud operting system.  Built out of thousands of virtual instances of Server 2008, so that you can host applicaitons over the web.

  • Scalable hosting platform
  • Automated Service Management
  • Model-driven service lifecycle management
  • High Availability

No more reinvestment of servers and hardware, because you no longer need to build the infrastructure.  This should mean more an dbetter applications with lower cost and easier deployment.  This is called “Utility Computing”.  Azure takes advantage of existing skill sets: C#, .Net, Windows Server, Visual Studio, etc.  So for ASP.NET, you would simply publish it into the cloud.

Restriction: MS enforces programming paradigms that allow the software to scale up appropriately.

Azure is an open platform, so you can use Ruby, Python, etc.  Supports REST protocols, XML file formats, and of course Managed and native code.  It will even support unmanaged code in the future.

Users control and own their own identities.  “A single, federated identity platform” that you can take advantage of in your cloud applicatations.  But it is not mandatory, so you can still control all that information.

SQL Services – exposes SqlServer instances on the Cloud.  You can use ADO.NET Data Services, Entities, etc.  Data Sync allows you to replicate data across the cloud, and of course Sql Reporting services will be available.

Live Services – Identity, Communication and Presence, Directory, and Search and Geospatial.  Allows you to integrate with Microsoft identity, and potentially Open ID.  Opening up more directory services, so you have access to the client’s social information (like Facebook).  Geospatial is like integration of mapping etc.  Live service currently uses 11% of total Internet minutes and has over 460 million users. (Note to self: learn about MESH)  All this runs inside the Live Framework along with the Live Operating Environment and the Live Programming Model.

Online Applications – Microsoft is doing this so they can scale up to incredible numbers of users.  Now they are startin to apply this to Enterprise applications: you can push out Office, Exchange, SharePoint, CRM, etc.  Hosting these apps in house means maintaining servers, software, licenses, etc.  With Azure there is no investment in hardware, setup, deployment, etc.  Enterprise software will never completely leave the local sphere, but you can synchornize the Cloud with your local services.  Federated Identity allows you to push information from your organization to Microsoft Services Connector.  You can maintain the data at home and your customers can access it fro mthe cloud, and they stay synchronized.

The Front End Experience – Takes advantage of Silverlight, WPF, WCF, etc., and builds on the client .NET presence.

Visual Studio 2010 improvements:

  • Intellisense + jQuery
  • jQuery is a first class citizen in the .Net world – a first for an open source application
  • The Silverlight Toolkit, adds a bunch of controls (like Charting, DockPanel, TreeView, Expanders, and many more)
  • Integrated Silverlight Designer
  • ASP.NET 4.0 includes improvements to Web Forms, MVC, AJAX, and Distributed Caching (opens up the Cache APIs and includes “Velocity” a distributed cache provider)
  • VS2010 for Web Development: code focused improvements, JavaScript and AJAX tooling, Design View CSS2 support, publishing and deployment improvements

VS 2010 is being built with WPF, so I expect some serious user experience enhancements.

Windows 7 Fundamentals

  • Memory, reference sets, and graphics reduction
  • Disk I/O – registry reads and indexing reduction
  • Power reductions in DVD playback, Panel and Timers
  • Improved Spped for booting and Device readiness
  • Improved Responsiveness for things like the Start Up Menu and the Taskbar
  • Scalable to 256 processors (same Kernel as Windows Server 2008)

Windows 7 features:

  • has the ability to pin applications to the Taskbar.
  • You can also control what shows up in the Tool Tray.
  • You get application previews by hovering over the taskbar icon.
  • Jump list (which can be added to your own applications) allows you to jump to recent documents.
  • There is a new clock, you can have up to three clocks.
  • You can dock applications to the desktop.
  • You can “shake” an application and all the other windows will disappear (shake it again and they come back).
  • Library allows you to organize documents (outside of folders)  Opens document previews, and even allows cut and paste from the preview.
  • Multi-touch support for touch screens.

Developing for Windows 7:

  • Ribbon User Interface
  • Jump Lists
  • Libraries
  • Multi-touch, Ink, Speech support
  • DirectX Family
  • Pixel Shading
  • Multi-core application development
  • IDE support for very large code bases

.Net 3.5 SP1 Improvements:

  • Streamlined setup
  • Start up performance
  • Graphics improvements
  • DirectX/Direct3D Interoperability
  • More Controls
  • Built into Windows 7

Other Improvements:

  • In process side by side support
  • Managed and Native code interop
  • Dynamic Language support
  • Extensible Component model
  • Improved tooling with VS2010
  • WPF improvements – Deep Zoom, Multi-touch, VSM, Text, etc.

Conclusion – The overall theme of Microsoft’s vision is Software + Services.  Services communication, Cloud computing with Azure, etc.  Client/Server software will always be important, but connected devices are changing how we deliver the experience.  The vision is to unite all of these devices and scenarios in a unified and synchronized manner.

Categories: Miscellaneous

For all the Science Fiction Geeks

January 14, 2009 Comments off

Completely miscellaneous, but a friend of mine posted this link on Facebook, and I had to share it for any of you Science Fiction fans out there. It is a graphic of dozens of Space Ships from science fiction shows and movies, showing them in their relative sizes to one another.  Lots of fun for everyone!

Categories: Miscellaneous

2008: The .NET Year in Review

December 22, 2008 1 comment

Well, another year has come and gone, and as always, the end of the year seems to have sneaked up on me.  This month marked the second full year of Developing For .NET. I’ll soon be gone for the Christmas holiday, so I thought I’d go ahead and post my end of the year reflections now.

From a .NET perspective, the last 12 months have been quite a journey. I have spent most of my time learning and exploring a whirlwind of new technologies: Visual Studio 2008, .NET 3.5 (and SP1), LINQ, ASP.NET MVC, WPF, Silverlight 2, Expression Blend 2, Expression Design 2, Expression Web 2, and WCF.  I’ve spent more time in Sql Server than ever before, although I’m still using 2005.  I’ve given 3 presentations for RVNUG, presented at the Richmond Code Camp, presented at the Roanoke Visual Studio 2008 official launch, and taught dozens of classes to my co-workers.  Along the way I’ve spent countless hours reading .NET books, watching video training, and working through a mountain of tutorials and articles on the Internet.  All in all, this has been the busiest year of my professional career, and I’ve really enjoyed it.

So, how’d I do?

In January I posted a list of Resolutions for 2008, so I thought it would be interesting to see how I did:

Learn Blend, XAML, and WPF

I actually did OK here.  In fact, I have transitioned completely to WPF for all my Windows development.  And I’ve really come to appreciate Blend as a superior design tool.  This one was a success.

Finally learn ASP.NET and publish an ASP.NET driven website

Well, sort of.  I learned enough ASP.NET to conclude that I don’t really like ASP.NET.  Fortunately, this effort was interrupted by ASP.NET MVC, which I do really like.  With Silverlight 2, though, I doubt I’ll be doing much in this space (at least not directly – more to come on that).  I’ll call this one another success, but only because the rules changed on me half way through.

Take a SQL Server class

Fail.  The local opportunity I was pursuing for this never came to fruition, and I haven’t been able to travel this year.  Maybe next year.

Publish a White Paper (already underway – watch for the announcement)

The funny thing is I had completely forgotten about this project.  It is basically written, it just needs a final review.  Along with input from Kathleen Dollard, I wrote an “Extension Method Style Guide”.  If I can motivate myself, I’ll dig it up and finally put it out.  Partial success since I did write the thing.

Post here at least once a week but more often as I am able

Given that my last post was Nov. 24th, I obviously failed this one.  But I did manage 54 posts in 2008 (not including this one), which averages out to over 1 per week.  So I’ll call it mostly a success.

Attend VSLive! somewhere other than Texas!

As much as I would have liked to go back to my favorite conference, I really didn’t travel anywhere this year.  If I HAD gone, though, it would have been to Vegas.  And I am still hoping to go again in 2009.

Find and become an active member of some .NET forums

I guess it depends on your definition of “active”.  I did join some forums, and I have tried to answer some questions.  Of course, between MVC, Blend, and WPF, I think I have asked more than I answered.  I’ll rate this one a partial success.

With 2 Successes, 2 Failures, and 3 Partials, I’d have to rate it an overall success.

What I’ve learned

It certainly has been a big year for me.  I’m sure that this slew of new technologies appears random and disjointed to my non-.NET friends and co-workers, who have to constantly endure my ramblings about the tech-du-jour I’m studying.  Of course, this view is far from accurate.  In fact, the overview of all these bits and pieces has been solidifying in my head for some time now.  If you aren’t sure if or how all these things cohabitate, here is how the big picture comes together for me.

1) Visual Studio 2008 and .NET 3.5 –  Obviously, these are the core of any development effort that uses these new technologies.

2) LINQ – In its many flavors, LINQ is the new cool kid on the block.  Combined with Lambda expressions, LINQ simplifies and reduces coding.  There hasn’t been a project this year I wasn’t able to leverage LINQ to the betterment of the project.

3) ASP.NET MVC – I see Silverlight 2 becoming my preferred web development software, but the XAP files still have to be hosted somewhere.  Not to mention that there are still some things for which Silverlight would be overkill.  And I really like the Routing mechanism and the control that MVC provides.  So I see ASP.NET MVC becoming the reigning architecture for deploying all of my Web projects from here forward.

4) WCF – The possibilities here are extensive.  At least at first, I’ll be using WCF to provide data to my Silverlight applications.  Long term, however, I see using WCF to transport lightweight business objects across the network.

5) WPF – I have been to the mountain top, and I have seen … well, some really cool stuff!  Having emersed myself in WPF the last couple of months, I now view Windows Forms as almost childish.  That’s not to say anything against Windows Forms, which I’ve been a fan of for some time, but WPF is several orders of magnitude more refined and impressive.  Now, when I work on a Forms application, I feel so constricted!

6) Silverlight – If you learn WPF, you’ve mostly learned Silverlight.  Silverlight only supports a subset of WPF, but your skills will be interchangeable.  And what freedom!  For the first time, we can really develop Rich Internet Applications using a first class language like C#.

6) Expression Blend – Having said what I did in #5 and #6 above, I would also say this: I would not wish to develop WPF or Silverlight without Blend.  It takes most of the drudgery out of your hands and allows you to really focus on design.  It is NOT just for Designers!  Skip the Microsoft hype about separating responsibilities – you are going to need to be able to at least do rudimentary design with Blend if you want to compete.  Trust me, you’ll be happy you did.

7) Expression Design – If you break out of the Developer mode and begin exploring your Designer Dark Side, you will appreciate Expression Design.  The interface is suitably familiar to Blend, but more geared towards simply designing graphics.  The best part is that they can be exported as XAML resources, which makes them very easy to consume in Blend.  The great thing about this is that it allows you to focus your Blend efforts on Application Design, and not get bogged down in Graphics Design.

So my recommendation would be to get at least basic knowledge of these technologies.  This combination of skills should serve you well in the .NET space for years to come.  I hope you had a great year, and I look forward to another year of Developing For .NET!

Categories: Miscellaneous

Star Trek Movie Trailer

November 20, 2008 Comments off

OK, I know, absolutely nothing to do with .NET, but I’m sure my fellow Trekkers out there will appreciate this. There is an awesome new trailer on http://www.startrekmovie.com/ for the next Star Trek installment. And I must say I am very impressed!

And, the site itself is very impressive. It is a Flash 10 site that has some great effects. I used to see a site like this and believe that it was out of my reach as a developer, after all I’m no graphic artist. But these days, when I see something like this I start to think that I could get results like this in Silverlight. Personally, I’m starting to get very excited about web development again.

Categories: Miscellaneous

Authorize.Net Code Release

September 29, 2008 6 comments

Back in February I posted the beginnings of a project to wrap Authorize.Net credit card transactions in C# .NET code. I have been working on this project off and on, in conjunction with a new website we are developing, and have been meaning to post the production version for some time.

Today, I am publishing the current version of the code, DevelopingForDotNet.AuthorizeNet, along with a few supporting updates. I’d like to thank everyone who posted comments on that entry and the First Foray into Unit Testing entry. Most of those suggestions made it into the final version and I learned a lot about Unit Testing along the way.

This version is slightly different than the original post. Here are the major differences:

Validity Checking

This version incorporates validity checking on the following TransactionRequest class properties:

  • EMail
  • Zip
  • SecurityCode
  • CardNumber
  • ExpDate

EMail, CardNumber, and ExpDate validation have been completely rewritten.

ExpDate now accepts the following formats:

  • MMYY
  • MM/YY
  • MM-YY
  • MMYYYY
  • MM/YYYY
  • MM-YYYY

The Validity Checking uses a set of Regular Expression patterns that I have put into another namespace, DevelopingForDotNet.RegexSupport. It will be available on the Free Code page as well.

Right now, all the failures throw an ArgumentException, which is very heavy handed but I haven’t had a need to improve it yet.

INotifyPropertyChanged

Each of the three classes implements INotifyPropertyChanged so you can use them for data binding if you wish. If you have never implemented this interface before, it is very easy. Add a reference to System.ComponentModel to your code. Then add the inheritance statement to your class:

public class TransactionRequestInfo : INotifyPropertyChanged
{
    ...
}

Then implement the PropertyChangedEventHandler and add a method to fire the event:

public event PropertyChangedEventHandler PropertyChanged;

protected void OnPropertyChanged(string propertyName)
{
    if (this.PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

Then call the method whenever a property changes:

public string FirstName
{
    get { return _first; }
    set
    {
        _first = value;
        OnPropertyChanged("FirstName");
    }
}

Easy as can be!

Transaction.ProcessPayment

Transaction is a static class with ProcessPayment as its single static method. In reviewing the project, I realized that this was a perfect case for an Extension Method, so I added this before the first keyword, and now calling the method is even nicer than before:

// Account is built above...
TransactionResponseInfo pmtResponse = pmtInfo.ProcessPayment(Account);

Unit Testing

I really got my feet wet with Unit Testing on this project. I followed the advice I got from FreekShow and implemented the testing of Exceptions in a much cleaner fashion. The whole experience got me thinking about why Unit Testing is so beneficial, and as I began rewriting the code I started by writing tests that fail first and then coding my way into success. Just for grins, the testing project for this solution is included in the download.

[REPOST] – Geeking on a Saturday

June 6, 2008 Comments off

In a recent post entitled I am a Professional Geek, I mentioned that I only geek at work. Well, Saturday I had the opportunity to prove just how deep that particular Rabbit hole goes… I gave a presentation on .NET 3.5 Language Enhancements at the Richmond Code Camp Saturday morning, and boy did I stink! I really had trouble focusing my message and expressing myself. I was live coding and kept screwing up the syntax (to those attending, I was missing the delegate keyword on the Local Methods demonstration). We have a tendency to judge ourselves harshly, so I can only hope that the attendees didn’t think it went as poorly as I felt.

I guess every one has off days: Babe Ruth struck out a lot and Edison found 2,000 ways not to make a light bulb. Even Einstein stank up the joint on occasion (read about “The Ether” sometime). Not that I am Einstein, Edison, or Ruth: clearly I’m not. But I believe it is important to give ourselves these pep talks when we mess up. Let’s face it: as programmers, we mess up a lot!

So what’s the lesson? For me it is that weekends and technology don’t mix. Hopefully I can redeem myself in June when I will be presenting at RVNUG on ASP.NET MVC. At least that is during the week!

Categories: Miscellaneous

[REPOST] – Of Mice and Men(tors)

June 6, 2008 Comments off

Just a weekly update…

When I bought this machine, I picked up a new wireless mouse and keyboard. About a week ago, I noticed that my mouse had a flashing red light on it. I had never seen it before, and I quickly realized that this is a battery low indicator light. I had mixed feelings about this. First, I appreciate the notice, because there is nothing more frustrating than being deep in the zone and the mouse or keyboard runs out of power. But when I got to thinking about it, I thought that in a way it is foolish. Just when the power is getting low, you add an additional energy draw by powering a flashing light! I even went around the office showing everyone and commenting about how dumb it was. I likened it to the bank drawing an overdraft charge when you bounce a check. Hello! The problem is there is no money in there in the first place! <sheesh>

Well, today it finally died… right in the middle of a great coding session. Naturally, I was annoyed, both at the interruption and (sheepishly) at the realization that I should have obeyed the warning and replaced the stinking batteries. But I did learn two things: first, the light flashed for over a week before the batteries finally died, and second I learned that the mouse will function on a single battery (which I discovered when I was replacing the batteries). Interesting.

On the Mentor side (to make the title work), I will be giving my “.NET 3.5 Language Enhancements” presentation tomorrow morning at the Richmond Code Camp. Unfortunately I’ll be driving in and immediately driving out and will miss some of the presentations I would like to see. If you see me there, mention the blog and say hello.

Categories: Miscellaneous

[REPOST] – GMail is Hiring

June 6, 2008 Comments off

Since Jon Skeet recently announced he is joining Google, I thought it was worth mentioning that the GMail Team is hiring. I’ve wondered several times in the past what it would be like to work at Google. I think the truth is that I’m not geeky enough, but I would probably enjoy it while it lasted.

GMail in particular would be of interest to me. I’ve been on the GMail bandwagon since it was in Beta (oh wait… it still is…) OK, I mean since it was really Beta, like fresh and new type beta. I have been purely GMail since 2004 and I have never looked back. I have even succeeded in getting my friends, spouse, parents, and coworkers to convert to GMail as well.

I have a friend who is very SEO savvy, and he shared with me some of the Google interview questions, and all I can remember is that it would have put a Mensa candidate to shame. So since I’m not smart enough to even apply, I’ll just sit on the sidelines and continue be a happy consumer.

Categories: Miscellaneous