Funkytools.com is Live

by mgordon 28. June 2009 10:18

I’ve been working for months on a Silverlight application for task management that draws from the Getting Things Done philosophy among others.  I’ve created a web site to host the application at http://www.funkytools.com.  If you get the chance and are so inclined, check it out.

Tags: ,

General | Silverlight

Not Contracting Any More

by mgordon 26. February 2008 08:34
It's been a really busy last several weeks.  We've been working to get the application I'm currently working on into production and after considerable deliberation, I've decided to leave the ranks of the contractors and accepted the offer to become a full time employee of a local telco.  I'll be serving as IT manager and will be managing systems administration as well as software development.  Wish me luck as I endeavour to exceed expectations.

Tags: ,

General | Contracting

What Motivates You?

by mgordon 8. January 2008 04:44

I'm currently working on a project that began in March of last year.  A friend of mine is managing the project and after he brought me on, we decided to try and make things as pleasant and as fun as possible for the project team.  I purchased a couple of novelties that we awarded developers when they broke the build or were deemed the most productive.  We blazed through requirements and watched features get implemented swiftly.  I was having a ball and it seemed the whole team was enjoying working on the project. 

Around mid summer, though, something happened.  Several, previously unknown, requirements were uncovered and while they were added to the project, the timeline was not adjusted.  I marveled that in the space of about a week both motivation and productivity dropped noticeably.  I felt my own attitude about the project begin to change and in asking myself why I identified a few things that motivated me and a few that did not.

What Motivates Me

  • An opportunity to learn new technologies is always a motivator.  Looking back, I've always been willing to put forth the extra effort and spend the extra time to stay as productive as possible while learning about new tools, languages or language features.
  • Trust.  When a task has been delegated to me and trust has been placed in me to get the task done, I've always risen tot he challenge.  In fact, any gesture that communicates, "I believe in you and your abilities." is bound to motivate me.
  • Organization.  When a project is well managed and organized so that I can concentrate on what I do best (design and build software), I find I have more energy and apply myself better to the tasks at hand.  

What Robs Me Of Motivation 

  • Repetitive tasks.  Copy / paste, boiler plate code...yuck.  Can't we automate this task and move on to something else??
  • Micro-managing.  I think of myself as a professional and I don't think its too much to ask to be treated that way.  Ask me if I can perform a task.  If I tell you I can perform it, let go of the task and give it to me.  I'll give it back when it's completed.  I promise.
  • Surprises.  Whether it's formal or not, there is always a plan.  When I start a project, I may not know precisely what the finished product will look like and I may no be able to tell you precisely when it'll be finished but you can bet I have a plan.  I need to know what constitutes a finished product and have some idea of how long the task will take.  When the environment in which I'm working or the projects requirements are in a constant state of flux, it drains me of energy and motivation.  Will the section of code I'm working on, right now, just be thrown away?

I'm sure you have your own similar experiences.  What has motivated you, in the past?

Tags: , ,

General | Productivity | Contracting

Code Reviews

by mgordon 4. December 2007 04:38

In the developer space, it's astounding how fast new technologies are arriving.  In order to stay current, a developer has to become digest the new tools and approaches, ty to get some hands-on with them and then possibly retain that new knowledge without being in a position to use it day-to-day.  Contractors or consultants, especially, need to be able to keep their tool belts well stocked with the a wide assortment of tools, technologies and methodologies both because of not being able to predict which of them the next client may utilize and also because since the right tool always makes the job easier it makes sense to have as many as possible.

With all this in mind, when it comes time to hold a code review, upon what criteria will the code be judged?  We all have our favorite approaches to designing software...our favorite code constructs, favorite tools, naming conventions.  How does one prevent a code review from degenerating into a argument about which is correct?  In my view, there is only one way. 

Each team needs to spend the time, up front, to determine what standards the group will use.  How are exceptions to be handled?  Where is configuration information to be stored?  What, if any, frameworks or external components are to be used?  What unit tests and comments are to be created, minimally?  By doing this, the code review becomes an opportunity to measure the code being reviewed against a known and agreed upon standard.  This makes the review much more beneficial to the developer responsible for the code and offers a chance for the group to identify problems or omissions in their group standards and correct them.

Tags: ,

General | Contracting

Automatic Properties

by mgordon 14. November 2007 08:20

I've been exploring some of the new language features that will be available in the coming version of .Net.  I continue to see things that look like they have been borrowed from dynamic languages.  Another to add to the list is automatic properties.  In C#, you'll be able to define properties like this.

public string FirstName { get; set;}

This is functionally equivalent to the following:

private string _FirstName;
public string FirstName
{
    get
    {
        return _FirstName;
    }
    set
    {
        _FirstName = value;
    }
}

This will be a real timesaver for those not using a tool such as CodeRush where creating he above block of code is reduced to three keystrokes (ps<space>) and then typing in the name of the property. 

Now, look at how the equivalent is accomplished in Ruby.

attr_accessor: FirstName

Instead of specifying get; and set;, you specify attr_writer for a write-only property and attr_reader for read-only.

Tags: , , ,

General | .Net | Productivity | Ruby

Installing SCSI/SAS Drivers Without a Floppy Drive

by mgordon 1. November 2007 06:01

The Dell PowerEdge I ordered finally came in.  I had ordered it without an OS installed and was eager to remedy that.  I popped the install CD in and booted the beast up.  Didn't take long for me to realize that Windows was not going to be able to see my hard drives until I loaded drivers for the controller and that I had no floppy drive through which to load them.  Without belaboring the point, would it be so difficult to have the windows installer prompt you for a cd from which to load the drivers?

After a short panic, I started looking for solutions on the web.  I read about several approaches where folks were booting from USB drives and executing a subst command to make it look like an A: drive.  Seemed too risky, to me.  Then I found a recommendation for nLiteOS which is a utility that allows you to modify the Windows install CD to include extra drivers, set up unattended installs, include hotfixes in your install and more.  The posting I read said that success could be found by including my SAS driver in the Windows installer.  Once it was added, the utility would generate an ISO image for me and I could burn a new CD from which to boot and do my install. 

I followed the tutorials on the nLiteOS web site and was pleasantly surprised to find that Windows found my drives and I was on my way.

Tags:

General

Getting My Media On

by mgordon 23. October 2007 05:24

I was lucky enough to receive an Xbox 360 for Father's Day, this year, and it brought me one step closer to my dream of on-demand media from my own media server.  Throughout the past several months, I've been piecing together all the necessary parts.

First I purchased the WIFI add on for the Xbox.  I'm currently running a wireless G network, at home, but the adapter supports A so I have room to increase the bandwidth, if needed (and it probably will be).  I have an old desktop that I installed Windows 2003 on (Pentium, 128 Meg) and I wanted to be able to stream my media from that machine to my Xbox.  Since I wasn't running Media Center on the machine, I went looking for alternatives.  Apparently, if you have Windows Media Player 11, it will let you stream to other devices, but alas it can't be installed on Windows 2003.

Then I found Orb.  Orb includes a service that you install on your media machine that catalogs all your media and serves it up either through a web interface on their site or to devices on your network.  It was a bit slow and I kept running into files encoded in formats that Xbox wouldn't play.  Quite by accident, I then found TVersity.  Tversity works similarly to Orb in that it installs a service on the media machine that keeps an inventory of your media files and serves them up.  However, it is also smart enough to detect what type of device it's serving the content to and transcode it to a format the device can play.  You can also tell it about any video or audio podcasts you like and it will download them and make them available for viewing.

Instead of offering you a web site through which you can access your media, the server on you machine serves up the data on a port that you configure.  If you hit this port with a browser, you get a nice flash application that allows you to browse and play your media files.  One word of caution, though.  The port is not secured by any means, currently, so if you open this port on your router, your media (compromising photos?  videos?) is available to anyone who accesses the port.

I'm happy with TVeristy, but my current hardware chokes when the on-the-fly transcoding kicks in.  The good thing here, is that after the Xbox spring update the system will play many additional formats which means that less transcoding is necessary.  However, for those times when I need the raw power, I've purchased a new Dell PowerEdge server ;-).  As good an excuse as any, I'd say.

Tags: , ,

General | Xbox | Media

puts "Ruby and Rails"

by mgordon 2. October 2007 03:48

For the past few weeks I've been kicking the tires on the Ruby language and the Rails framework.  This post is not meant to be a review of either, but I thought I'd note some of my impressions for other .Net developers that have been hearing the buzz and have not had the time to take a look.

First of all, I'm not planning to make a jump from ASP.Net to rails anytime soon.  However, I think there is always benefit in exploring other technologies, approaches and points of view and my look at these things was primarily motivated by curiosity.

The Ruby Language
I love this language.  Scott Hanselman has commented on how easily intent can be expressed in Ruby and Wilco Bauwer likes its rhythm.  Writing logic in it feels really natural, to me, and it seems that whenever I need a particular piece of functionality, it's available and easy to invoke without having to jump through hoops.  Without casting a vote for either dynamic languages or statically typed ones as the be-all-and-end-all, I have to say that if I were to be tasked with creating a domain specific language I'd certainly go for Ruby as my language of choice to implement it in.  It lends itself well to that type of exercise.  After all, to an extent Rails is a DSL for the web application space.  Some day to day tasks would lend themselves well to being implemented in Ruby.  Command line tasks, in particular, could be easily handled in Ruby.  The language (as implemented for Windows) supports calling into the win32 API and COM.  It does not contain any support for building windows UI, though you can do that by calling the windows API (if you're nuts) or by making use of one of the many Ruby .Net bridges that are freely available.  Just don't expect the performance of the bridge to blow you away.

Another thing that impressed me was the number of dynamic language features that are making their way into .Net languages.  Anonymous methods, continuations and extension methods all seem to have their roots in dynamic languages such as Ruby. 

Ruby is easy to learn and the code is easy to read.

Rails Framework
As one who appreciates the value of convention and likes having a process in place to grease the wheels of progress, I find Rails to be a very comfortable approach to use for web development.  As stated on many Rails-Centric sites, Rails is about "Convention over configuration"  and "DRY" or "Don't Repeat Yourself" meaning don't duplicate code.  Typical frameworks offer abstractions to make the most commonly required functionality easier and faster to use.  Rails does this well, but adds code generation and a type of adaptability that could only be achieved by using dynamic language such as Ruby.  There is also a substantial number of tools to aid the developer with ancillary tasks such as deployment and testing.  In general, Rails forces the developer to use the Model-View-Controller pattern to build their web application.  Few would argue with this approach.  ActiveRecord, which is an ORM library, is used for database access.  ActiveRecord is the stated inspiration for the Subsonic library written in .Net and greatly simplifies database access.

Many proponents of Rails claim extraordinary gains in productivity can be achieved.  I can see how productivity can be increased greatly for an experienced Rails developer, but be warned that there is a lot to remember and new Rails developers may find they are spending a great amount of time in the Rails documentation. 

There are a few IDE's out there that support Rails development.  I preferred RadRails and have been using it for the past few weeks with good success.  I found that Rails, as many have claimed, brought some fun back to the development of web pages. 

The one area I found to be a significant pain was in the deployment story.  Rails is not thread safe.  This means that each web request cannot be handled by only a new thread, but a new process.  I searched, for some time, and found some solutions using FastCgi which basically spins up several instances of a web server and feeds requests to them.  There seem to be some better solutions on the horizon , but I was not able to find what I would consider to be a "clean" solution to use immediately.

I've gained a number of insights, so far, from this exercise.  I don't see myself building my next business application in Rails (but, who knows) or even being gainfully employed as a Rails developer, but the lessons learned will continue to open my mind and make me a better developer.

 

Tags: , ,

General | Productivity | SubSonic

Why I like Agile - Redux

by mgordon 20. September 2007 05:15

I'm in a situation, right now, where scope creep is a problem.  It's frustrating, without a doubt, but I started wondering why it was such a source of stress and made some observations.

I'm a person who likes things very ordered and I suspect that most good developers are successful at what they do because they, too, like things to be organized and ordered.  If your going to be using a waterfall type approach to manage the project, ordered means having to know, up front, what all tasks need to be completed and how long each will take.  Without this information, there's no way to know if the project is on track or not as it progresses.

Business people don't seem to work well, that way.  Typically, they'll get their hands on a nearly finished product and start finding exceptions to the rules that were first specified when the design was being made.  Bottom line, here, is that there will almost always be late-breaking requirements and modifications that will be specified.  Knowing this can get you half way to a point of being stress free.

The other half of the frustration stems from the fact that these late-breaking revelations are contrary to the method used to manage the project.  The whole process used to manage the project gets stood on its ear and the project goes into a kind of suspect status because our process is not equipped to handle this disruption of the project flow.  This causes stress on the development team and causes the project stake holders to get nervous.

If we accept as fact that requirements are going to change and that users are going to think of things they didn't realize during the requirements gathering stage of the project, and make that fact a part of the process we use to manage the project, these changes don't come as a surprise to anyone involved and the stress level drops considerably.  To the developer, the change is just another item on the back log of tasks and to the business side of the house it just means they're going to get what they REALLY need.

The key, here, is that you have to start the project out with an agile approach so that everyone's expectations are set from the get-go.  Trying to switch an existing project to an agile method somewhere in the middle is a sure recipe for crash-and-burn. 

Tags: ,

General | Productivity

Not Bragging, But ...

by mgordon 12. September 2007 03:33

     

     Try it for yourself, here.

Tags:

General

Powered by BlogEngine.NET 1.5.0.7
Theme by Extensive SEO