CodeBetter.Com
CodeBetter.Com
RSS 2.0 via Feedburner
           Do you Twitter? Follow us @CodeBetter

Darrell Norton's Blog [MVP]

Fill in description here...

November 2004 - Posts

  • Refactoring to Patterns book

    I finally finished Code Complete 2nd ed., so expect a book review on that eventually. I remember a few months back everyone in the blogosphere was talking about getting Code Complete 2, but nobody has published a review on it. Maybe it's so long nobody can get though it? :)

    Refactoring to Patterns bookMy new book arrived recently from Amazon, Refactoring to Patterns by Joshua Kerievsky. Joshua has long been into design patterns. In fact he's created the most detailed outlines for design patterns study groups I've seen. He has also posted a more in-depth overview of what the book covers on his web site. Martin Fowler heaps similar praise on the book too.

    All in all, I expect this book to really deliver the goods.


  • The three software development environments

    Robert Boque has an article called Understanding the Differing Goals of Software Development on developer.com. In it, he describes three different software development environments in general terms.

    Corporate Development

    Robert further divides this category into two subcategories, small and large corporation. The small company basically has developers change the application until it meets the business needs. Large companies have a much more defined, and rigid I would add, process, as well as numerous applications in production needing maintenance that take away time from developers, keeping them from working on interesting new work.

    I would say that the difference is not in the size of the company, but in the approach. For example, some large companies can take a “small company” approach to developing applications, continuing to tweak the existing production application until it has been beaten into shape. Some advanced small companies might take a “large-company” approach as a result of experienced management.

    There is also a tendency, in my own non-scientific observations, that corporate developers are mainly interested in things other than development. Non-software corporations are generally better places to work for quality of life, with more of a 9-to-5 schedule and less pressure to be constantly updating your skills.

    Pure Software Development Companies

    Pure software development companies have advanced software development practices and infrastructure. Problems at this type of company include standard Innovator’s Dilemma issues. “We’ve always had this type of architecture,” or, “We’ve always done it that way” are common roadblocks to change.

    I’ve never worked in a pure software development company, but I would love to work for Microsoft, which falls into this category.

    Consulting Company Development

    Like Robert, this is where I feel at home. Consulting software development is marked by pretty strict adherence to the requirements, whether the approach is agile or not. Software development practices and processes are generally up-to-date, if not cutting edge.

    I have little to say here because I thrive in this type of environment!

  • Tool: TestDriven.NET

    Everyone else is doing it, so why not me?

    TestDriven.NET – go download it! [via Scott Hanselman]

  • Tool: Design Pattern Automation Toolkit (open source)

    Here’s an interesting open source project, Design Pattern Automation Toolkit. From the web site:

    Features

    • Allow new design patterns to be plugged into the design of software application as they are discovered. The developers can develop design pattern plug-ins using the application and these design patterns can be merged into the design of a component. Hence it helps in Multi-site development. The design pattern plug-ins are saved in XML format for cross-application portability.
    • Allow code generation routines to be plugged into the application for new languages as they emerge. By programming for an interface, the developers can write their custom code generators and create a DLL. These DLLs can be plugged-into the application and used to generate code.
    • Allow Reverse Engineering modules to be plugged into the application.  Reverse Engineering helps to understand the structure of an existing software project.
    • Provide XML serialization/De-serialization of the projects so that they can be interfaced with other technologies/ languages.
    • MetaInfo: The developers can customize the code generation (for ex: final in Java, sealed in C# etc.) by adding the metainfo for classes, methods, fields and parameters. This feature helps to overcome the language-neutral limitation of the class diagram. The code generation routines can query this information and incorporate the suitable keywords in the generated code.
    • Hover-Sense: Provides dynamic help to the user. The user can get the details (such as summary and meta info) associated with a class/methods/fields by hovering the mouse on the respective visual element. The metainfo, which is not depicted in the class diagram, is presented to the user in this form.
    • Image Generation in 4 formats: gif, jpeg, png, tiff
  • The Mozilla Development Process

    A lot has been made about how great the Firefox browser is, and how it’s finally better than IE. One thing that has been overlooked, though, is the process Mozilla is using to develop software. Sure, everyone laughed when Joel Spolsky called the decision to rewrite the code base from scratch stupid, but nobody has picked up on how well they are doing now. Firefox is currently available in 24 languages with 7 more on the way on 10 different operating systems (flavors of Windows, Mac, and Linux) and is setup to work on 32 and 64-bit systems.

    The secret is right on Mozilla’s web site, in the Hacking Mozilla site and in the Introduction To Hacking Mozilla. There are strict guidelines on writing portable C++ to keep Mozilla compiling on all those different platforms. There is a coding style guide that is enforced by code reviews. And the Mozilla roadmap paints a clear direction for the future of the project, as well as discussing how past events have led to current decisions (gee, I wish I had that on all my projects!).

    All code is reviewed before being committed to source code control, usually twice. First, the module owner has to approve the code, or else the code doesn’t get in. There are very clear rules about check-ins and there is a checklist for code reviews. The existence of module owners and peers, people to whom the module owner has delegated authority to, also implies that there is clear ownership of code through the modules. Then most code is reviewed again by a “super-reviewer.” The neat thing about a super-reviewer is that they earned their reputation by continually making good decisions on whether code is good or bad based on the track record of check-ins.

    Then comes quality assurance. There is a pre-check-in test list, full smoke tests including performance testing, and detailed accounting that makes everyone who checks in code “on the hook.” Being on the hook means that you are around to make fixes should the build break. Chris Yeh writes,

    “After checking-in, you watch Tinderbox until your check-ins clear. You do not go home. You do not sleep. You do not log out or experiment with drugs. You do not become unavailable.”

    Builds are watched over by a different sheriff every day. The sheriff watches over the builds, opens or closes the tree for various reasons, fixes blockers, and hunts down whoever broke a build to get it fixed as quickly as possible.

  • Microsoft Mid-Atlantic Community Leaders meeting

    Last night Geoff Snowman, Developer Community Champion, and Andrew Duthie, Developer Evangelist, held an event for Microsoft MVPs, user group leaders, and INETA volunteers in the mid-Atlantic district. Mark DiGiovanni and I represented the WeProgram.NET contingent!

    I have to say it was great finally getting to meet Jonathan Cogley and Lamont Harrington, whose blogs I read regularly. It was good to see Brian Noyes again, as well as catch-up with Sara Faatz of INETA/Wintellect fame and Scott Lock, also an INETA volunteer. More shout-outs to Brian Moran, Frank Grimberg, Dennis Courtney, Joe Brinkman (DotNetNuke), Jim Justice, and Doug Ramirez.

    A great time was had by all!

  • Free ASP.NET utilities by Carlos

    Wow. Carlos provides all these useful little utilities for free (especially the Excel Xml Writer!):

    • WebChart: Control for rendering charts in ASP.NET and WinForms application
    • XGrid: IE Behavior to render XML as a grid with filtering/paging/sorting support in the client-side
    • X-Map: Html Map Editor, application to create HTML Maps.
    • ForumColorizer: Simple application to generate the markup to add posts in the forums at www.asp.net so they look like VS.NET.
    • Excel Xml Writer: Library to generate Excel workbooks in .NET.
    • CodeColorizer application to colorize your code for web sites.
  • How to determine whether Javascript is enabled

    I just found an interesting article on 15seconds, Creating a Server Control for JavaScript Testing by George Masselli. It shows you how to create a control that verifies whether Javascript is supported and enabled. Apparently it is not easy to determine if a user disabled Javascript support for security reasons.

  • PureText - copy text without formatting

    Have you ever copied some text from a web page, a word document, help, etc., and wanted to paste it as simple text into another application without getting all the formatting from the original source? PureText makes this simple. Just copy/cut whatever you want to the clipboard, click on the PureText tray icon, and then paste to any application. Better yet, you can configure a Hot-Key to convert and paste the text for you. The pasted text will be pure and free from all formatting.

    You can also configure a system-wide Hot-Key to be used to activate PureText and convert the clipboard contents to pure text. To configure, right-click on the tray icon and choose "Options" from the pop-up menu. The default Hot-Key is WINDOWS+V. PureText can also optionally paste the converted text into the window that currently has the focus, which allows you to convert and paste in one keystroke.

    PureText is basically equivalent to opening Notepad, doing a PASTE, followed by a SELECT-ALL, and then a COPY. The benefit of PureText is performing all these actions with a single Hot-Key and having the result pasted into the current window automatically.

    [found via Michael Swanson]

  • Microsoft's response to Firefox

    Microsoft Internet Explorer’s response to Firefox: the IE Marketplace.

  • Wal-Mart special

    This is hilarious. Short version – a guy suits up as a storm trooper and goes to Wal-Mart.

  • Stop the Windows XP file association web service

    From here:

    The file association Web service in Microsoft Windows XP Professional Service Pack 1 (SP1) extends the scope of information stored locally by the operating system about file name extensions, file types, and the applications or components to use when opening a particular file type. Assuming that .123 filetype is unregistered in your system, and when you double-click a 123 file, you'll be presented with the Web Service dialog as shown in the figure. When you choose the first option, Windows launches this website:

    http://shell.windows.com/fileassoc/0409/xml/redir.asp?Ext=123

     Windows XP file extension web service

    To prevent the initial dialog from being shown, to proceed directly to the Choose Programs dialog, try this:

    • Open Registry Editor and navigate to HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer
    • In the right-pane, set InternetOpenWith value to 0
    • To make changes to all the user profiles, make the changes here:  HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer
    • If InternetOpenWith does not exist, create a new REG_DWORD value and assign 0 to it.

    Another method:

    • Navigate to the following registry key: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
    • In the right-pane, create a new REG_DWORD value named NoInternetOpenWith 
    • Double-click NoInternetOpenWith and set it's data to 1.
    • To make changes to the current user profile only, delete the NoInternetOpenWith value in HKEY_LOCAL_MACHINE area, and add the value here: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System
    Posted Nov 16 2004, 07:54 AM by darrell with 5 comment(s)
    Filed under:
  • Ergonomics 101

    Jiho Han, Scott Hanselman, and my fiancé are all having ergonomic problems, so I wanted to post a little ergonomic 101 refresher for all you computer workers out there!

    Ergonomics.com in Australia (what a name, huh?) has this page on how to sit at a computer. – read time: 5 minutes

    PageWise has some tips on ergonomic exercises to help with computer fatigue (yes it is possible for desk jockeys like us to get fatigued!). – read time: 10 minutes

    UpdateXP has a good overview article by MVP Marc Liron on computer workstation ergonomics. – read time: 10 minutes

    HealthComputing.com has an extensive list of all computing health concerns, from office ergonomics to injuries to mobile ergonomics and even kid ergonomics! Check out the free newsletter. – read time: 1-2 hours for the whole site, less for individual pages

    CU Ergo is Cornell University’s Ergonomics web. They have quick ergo tips, instructions on how to choose an ergonomic chair, a business justification of ergonomics for your boss, and a bunch of tools. Check out the 10-step checklist for work stations. – read time: 2-4 hours for the whole site, less for individual pages

  • Comment Spam - a solution?

    As anyone can see from the DNJ weblogs home page or the ASP.NET weblogs home page, comment spam is a problem. Jay we understand how you feel! Of course, feeling that I am obviously smarter (ha ha) than the hundreds of super-intelligent people working on this problem, I’d like to offer my two suggestions.

    For a short-term fix, disable any comment with more than 1 link. These spammers are using 1 comment to boost some 20 or 30 of their web sites. If we make that only 1 for 1, it will massively cut their productivity for a while. This would give us enough time to implement the long-term fix.

    Long-term, why not use Bayesian filtering, similar to SpamBayes? It’s pretty much the same thing, comment spam or email spam, it’s all SPAM! And the benefit with Bayesian filtering would be that you could scale the effort in training the filter across all of the bloggers on a site! I have a feeling that the type of comments left in technical weblogs is vastly different than links to pharmacy and gambling sites.

  • Review of Software Project Survival Guide by Steve McConnell

    Over my vacation I read Steve McConnell’s Software Project Survival Guide as a sort of retrospective of our recently completed project. In the book McConnell suggests a complete, somewhat minimal development process targeted at medium-sized applications, that is, non-safety-critical applications that take from 6 to 18 months to complete with a team size ranging from 3 to 25.

    As I was reading the book, I had to keep checking the published date because a lot of the concepts in the book are core agile tenets. Staged delivery is one of the key concepts in McConnell’s process, and development drives the software to a releasable state at the end of each stage. Developers estimate their work several times throughout the process, when the requirements are roughed out, when they are detailed, and at the beginning of each new stage (iterative development with constant reevaluation). The user manual is the requirements document except for calculation or non-UI intensive parts of the application (reduction in documentation). There is even a nod given to the Peopleware aspects of software development, like ensuring that developers have work environments conducive to productivity, or make the schedule with the understanding of extremely low productivity. Or getting the users involved early and often and making them a key part of the development process (user involvement and a developer focus). Sounds pretty agile to me!

    Perhaps the part I liked best was McConnell’s views on process. Development processes are not bad in and of themselves. They are bad when misapplied, either with too little or too much process. All process slows down development work, but the huge gains in project visibility far outweigh the minor gains in programming efficiency. It would be faster in XP not to have to bring the software to a releasable state every 1-3 weeks, but the fact that you deliver working software into the hands of the project’s stakeholders is far more important. So the tradeoff should be made when the gains outweigh the costs.

    The only part where Steve veers off course, in my opinion, is in stipulating that requirements should be 80 percent complete at the detailed level before starting architectural design. Even the Rational Unified Process suggests that only a representative 20 percent of the requirements need to be detailed, with the remaining 80 percent roughed out enough to know that there is nothing severely wrong with the architecture.

    The book was an easy read. I never spent too long on a chapter and everything was presented in an approachable manner. There are graphs or pictures or diagrams on most pages to illustrate the main points. If you are new to project management, this book is a great start. If you’re a veteran, read it before your next project to pick up some important tips on improving your process.

More Posts Next page »