in
Forums
Blogs
Files
Devexpress.Com
ClientCenter
Support Center
DevExpress Channel

Mark Miller

July 2008 - Posts

  • Calculating Return on Investment for Any Developer Tool

    I just finished work on a spreadsheet to calculate the ROI for developer tools. I've got it pre-configured to calculate ROI for a $249 CodeRush and Refactor! Pro purchase (with a corresponding 25% increase in coding speed), but you should be able to use it for any dev tool on which you're trying to get buy-in from management.

    Just change the red values to something more applicable to your situation, and you can get a sense of how much product usage time would pass before you saw a return on your investment. Here's a screen shot of the spreadsheet:

    ROI

    One neat feature of this spreadsheet is that it's flexible in how you measure productivity. In the example above, we're measuring productivity in methods written per hour (that's the value of the "Unit of Code" field. If you would prefer to calculate this based on lines of code per hour, or some other metric that feels more comfortable, it's easy to adapt.

    UPDATE: Revised spreadsheet and post is here.

  • Woah! Earthquake hits the DevExpress offices

    Hey kids,

    A 5.4 earthquake just rocked L.A., with the epicenter only a few blocks away from the office. Cell phones and text messages are not getting through, no doubt due to there being too much demand (everyone is trying to call out at once), but the internet is apparently still working. Skype is apparently your friend during natural disasters.

    The cool thing is that we were shooting a video when the earthquake struck, and the camera guy says we have some pretty exciting stuff. As soon as we have it up we'll let you know.

  • New Video: Refactoring Lambda Expressions and Anonymous Methods

    New Refactor! Pro video is up, showing refactorings that work with anonymous methods and lambda expresssions.

    Refactorings covered in this video include:

    • Compress to Lambda Expression
    • Expand Lambda Expression
    • Inline Delegate
    • Name Anonymous Method
       

    So far we've published ten videos, demonstrating a total of 87 refactorings:

     

  • New Video: Refactorings that Change Method Signatures

    New Refactor! Pro video is up, showing refactorings that change method signatures.

    Refactorings covered in this video include:

    • Add Parameter
    • Create Overload
    • Decompose Parameter
    • Introduce Parameter Object
    • Make Member Static
    • Promote to Parameter
    • Reorder Parameters
    • Safe Rename

    So far we've published nine videos, demonstrating a total of 83 refactorings:

     

  • Next Week: IDE Productivity Tools in the Labs, CodeRush & Refactor! Pro

    Hey kids,

    Here's a preview of what's coming next week.You'll see two powerful & fun new features that will ship in the next releases of CodeRush and Refactor! Pro.

    First, one of my favorite new refactorings, Extract to Type, moves a block of code located in the wrong class over to the right class. You know the kind of code I'm talking about: It usually sits inside a helper method and operates on locals of an instance type declared somewhere else in your solution, setting properties and/or calling methods on those locals of the other type. The UI for this refactoring is both smart and efficient. I think you'll like it. :-)

    I'll also show one of my favorite new code providers, Add Missing Constructors. This code provider does exactly what the name implies, and saves time when you need to add one or more missing inherited construction code in descendant classes.

    For devs on the bleeding edge, both of these new features are available right now in the latest daily builds (CodeRush and Refactor! Pro customers can get these from support@devexpress.com).

    Oh, and we'll also post more videos showing more refactorings in action.

    See you next week!

  • New Refactoring Video: Properties and Fields

    New Refactor! Pro video is up, showing refactorings that work on properties and fields.

    Refactorings covered in this video include:

    • Collapse Accessors
    • Convert to Auto-implemented Property
    • Convert to Auto-implemented Property (convert all)
    • Create Backing Store
    • Create Setter Method
    • Encapsulate Field
    • Encapsulate Field (read-only)
    • Expand Accessors
    • Introduce Setter Guard Clause*
    • Method to Property
    • Property to Method
    • Remove Setter Guard Clause*

    *Feature may change program behavior.

    So far we've published eight videos, demonstrating a total of 75 refactorings:

     

  • So, what's up with that keyboard, Miller?

    Hey Kids,

    Sometimes people ask why I carry around that big keyboard wherever I go. Here's a short video showing off a few special bindings as well as the somewhat controversial Censored (just one of many undocumented features built into my custom input device).

     MessageApproved

  • New Refactoring Video: Strings

    New Refactor! Pro video is up, showing refactorings that work on strings.

    Refactorings covered in this video include:

    • Inline Format Item
    • Introduce Format Item
    • Use IsNullOrEmpty
    • Use String.Compare
    • Use String.Format
    • Use StringBuilder

    So far we've published seven videos, demonstrating a total of 63 refactorings:

  • New Refactoring Video: Declarations and Initialization

    New Refactor! Pro video is up, showing refactorings that work on declarations and initialization.

    So far we've published six videos, demonstrating a total of 57 refactorings:

  • Adding Emphasis to Control Text

    Julian just posted about new text formatting technology coming out in the v2008 vol 2 release of our controls.

    However, the "ransom note screen shots" posted there don't reveal just how incredible this feature is. With great power comes great responsibility, so let's keep the emphasis subtle for striking effects.

    For example, take a look at this screen shot, where important words are elegantly emphasized with bold text:

    image

    Nice, isn't it? And interfaces like this improve user efficiency as well.

    We're looking forward to see what you do with this.

  • New Refactoring Video: Dead Code

    New Refactor! Pro video is up, showing refactorings that work on dead code.

    So far we've published five videos, demonstrating a total of 47 refactorings:

     

    Refactorings, by category. are below:

     

    ASP.NET

    Add AssociatedControlID Attribute*

    Add RunAt Attribute*

    Add Validator*

    Convert Color to HEX

    Convert Color to Named Color

    Convert Color to RGB

    Convert to Pixels

    Convert to Points

    Convert to Skin

    Extract ContentPlaceHolder (and create master page)

    Extract ContentPlaceHolder

    Extract Script

    Extract Style (Class)

    Extract Style (id)

    Extract UserControl

    Make ID Unique

    Merge Styles

    Move Style Attributes to CSS

    Move Style Attributes to External CSS

    Move Style Attributes to Theme (use SkinID)

    Move Style Attributes to Theme

    Move to Code-behind

    Set CssClass*

    Split Style

    Surround with Update Panel*

    Toggle ViewState*

    Changing Signatures

    Add Parameter

    Create Overload

    Decompose Parameter

    Introduce Parameter Object

    Make Member Static

    Promote to Parameter

    Reorder Parameters

    Safe Rename

    Conditionals

    Case to Conditional

    Combine Conditionals

    Compress to Null Coalescing Operation

    Compress to Ternary Expression

    Conditional to Case

    Expand Null Coalescing Operation

    Expand Ternary Expression

    Flatten Conditional

    Initialize Conditionally

    Reverse Conditional

    Split Conditional

    Dead Code

    Remove Empty Handler

    Remove Parameter

    Remove Private Setter

    Remove Redundant Constructor

    Remove Redundant Delegate Creation

    Declaration and Initialization

    Convert to Initializer

    Decompose Initializer

    Move Declaration near Reference

    Move Initialization to Declaration

    Make Explicit

    Make Explicit (and Name Anonymous Type)

    Make Implicit

    Name Anonymous Type

    Split Initialization from Declaration

    Split Temporary Variable

    Expressions

    Convert to Is Nothing

    Inline Constant

    Introduce Constant

    Introduce Constant (local)

    Inline Recent Assignment

    Inline Result

    Inline Temp

    Introduce Local

    Introduce Local (replace all)

    Introduce Result Variable

    Replace with Constant

    Replace with Local

    Simplify Expression

    Formatting and Structure

    Break Apart Arguments

    Break Apart Parameters

    Create Multi-variable Declaration

    Line-up Arguments

    Line-up Parameters

    Split Multi-variable Declaration

    Interfaces

    Add to Interface*

    Extract Interface

    Lambda Expressions and Anonymous Methods

    Compress to Lambda Expression

    Expand Lambda Expression

    Inline Delegate

    Name Anonymous Method

    Loops and Blocks

    Add Block Delimiters

    Consolidate Using Statements

    Create With Statement

    For to ForEach

    ForEach to For

    Inline With Statement

    Introduce ForEach Action

    Introduce Using Statement

    Lock to Try/Finally

    Remove Block Delimiters

    Split With Statement

    Using to Try/Finally

    Macros

    Use Const

    Use typedef

    Moving/Extracting Methods

    Extract Function (outside of class)

    Extract Method

    Extract Property

    Move Method to Header

    Move Method to Source File

    Replace Temp with Query

    Properties and Fields

    Collapse Accessors

    Convert to Auto-implemented Property

    Convert to Auto-implemented Property (convert all)

    Create Backing Store

    Create Setter Method

    Encapsulate Field

    Encapsulate Field (read-only)

    Expand Accessors

    Introduce Setter Guard Clause*

    Method to Property

    Property to Method

    Remove Setter Guard Clause*

    Resource Files

    Extract String to Resource

    Extract to XAML Resource (replace all)

    Extract to XAML Resource

    Extract XML Literal to Resource

    Replace with XAML Resource

    Strings

    Inline Format Item

    Introduce Format Item

    Use IsNullOrEmpty

    Use String.Compare

    Use String.Format

    Use StringBuilder

    Types, Typecasting and Namespace References

    Boolean to Enum

    Convert to Built-in Type

    Convert to System Type

    Encapsulate Downcast

    Inline Alias

    Introduce Alias

    Introduce Alias (replace all)

    Move Type to File

    Move Type to Namespace

    Optimize Namespace References

    Remove Type Qualifier

    Remove Type Qualifier (replace all)

    Rename File to Match Type

    Rename Type to Match File

    Replace with Alias

    Renaming

    Rename

    Visibility

    Reduce Visibility

    Widen Scope

    Widen Scope (promote constant)

    Widen Scope (promote to field)

    XML, HTML, and XAML

    Add End Tag

    Change Tag*

    Remove Attribute*

    Remove End Tag

    Remove Tag*

    Reorder Attributes

    Surround with Tag*

     *Feature may change program behavior.

     

  • New Refactoring Video - Conditionals

    New Refactor! Pro video is up, showing refactorings that work on conditional statements.

    So far we've published four videos, demonstrating a total of 42 refactorings:

    • Conditionals
    • Expressions
    • Formatting and Structure
    • Loops and Blocks

      Refactorings, by category. are below:

      ASP.NET

      Add AssociatedControlID Attribute*

      Add RunAt Attribute*

      Add Validator*

      Convert Color to HEX

      Convert Color to Named Color

      Convert Color to RGB

      Convert to Pixels

      Convert to Points

      Convert to Skin

      Extract ContentPlaceHolder (and create master page)

      Extract ContentPlaceHolder

      Extract Script

      Extract Style (Class)

      Extract Style (id)

      Extract UserControl

      Make ID Unique

      Merge Styles

      Move Style Attributes to CSS

      Move Style Attributes to External CSS

      Move Style Attributes to Theme (use SkinID)

      Move Style Attributes to Theme

      Move to Code-behind

      Set CssClass*

      Split Style

      Surround with Update Panel*

      Toggle ViewState*

      Changing Signatures

      Add Parameter

      Create Overload

      Decompose Parameter

      Introduce Parameter Object

      Make Member Static

      Promote to Parameter

      Reorder Parameters

      Safe Rename

      Conditionals

      Case to Conditional

      Combine Conditionals

      Compress to Null Coalescing Operation

      Compress to Ternary Expression

      Conditional to Case

      Expand Null Coalescing Operation

      Expand Ternary Expression

      Flatten Conditional

      Initialize Conditionally

      Reverse Conditional

      Split Conditional

      Dead Code

      Remove Empty Handler

      Remove Parameter

      Remove Private Setter

      Remove Redundant Constructor

      Remove Redundant Delegate Creation

      Declaration and Initialization

      Convert to Initializer

      Decompose Initializer

      Move Declaration near Reference

      Move Initialization to Declaration

      Make Explicit

      Make Explicit (and Name Anonymous Type)

      Make Implicit

      Name Anonymous Type

      Split Initialization from Declaration

      Split Temporary Variable

      Expressions

      Convert to Is Nothing

      Inline Constant

      Introduce Constant

      Introduce Constant (local)

      Inline Recent Assignment

      Inline Result

      Inline Temp

      Introduce Local

      Introduce Local (replace all)

      Introduce Result Variable

      Replace with Constant

      Replace with Local

      Simplify Expression

      Formatting and Structure

      Break Apart Arguments

      Break Apart Parameters

      Create Multi-variable Declaration

      Line-up Arguments

      Line-up Parameters

      Split Multi-variable Declaration

      Interfaces

      Add to Interface*

      Extract Interface

      Lambda Expressions and Anonymous Methods

      Compress to Lambda Expression

      Expand Lambda Expression

      Inline Delegate

      Name Anonymous Method

      Loops and Blocks

      Add Block Delimiters

      Consolidate Using Statements

      Create With Statement

      For to ForEach

      ForEach to For

      Inline With Statement

      Introduce ForEach Action

      Introduce Using Statement

      Lock to Try/Finally

      Remove Block Delimiters

      Split With Statement

      Using to Try/Finally

      Macros

      Use Const

      Use typedef

      Moving/Extracting Methods

      Extract Function (outside of class)

      Extract Method

      Extract Property

      Move Method to Header

      Move Method to Source File

      Replace Temp with Query

      Properties and Fields

      Collapse Accessors

      Convert to Auto-implemented Property

      Convert to Auto-implemented Property (convert all)

      Create Backing Store

      Create Setter Method

      Encapsulate Field

      Encapsulate Field (read-only)

      Expand Accessors

      Introduce Setter Guard Clause*

      Method to Property

      Property to Method

      Remove Setter Guard Clause*

      Resource Files

      Extract String to Resource

      Extract to XAML Resource (replace all)

      Extract to XAML Resource

      Extract XML Literal to Resource

      Replace with XAML Resource

      Strings

      Inline Format Item

      Introduce Format Item

      Use IsNullOrEmpty

      Use String.Compare

      Use String.Format

      Use StringBuilder

      Types, Typecasting and Namespace References

      Boolean to Enum

      Convert to Built-in Type

      Convert to System Type

      Encapsulate Downcast

      Inline Alias

      Introduce Alias

      Introduce Alias (replace all)

      Move Type to File

      Move Type to Namespace

      Optimize Namespace References

      Remove Type Qualifier

      Remove Type Qualifier (replace all)

      Rename File to Match Type

      Rename Type to Match File

      Replace with Alias

      Renaming

      Rename

      Visibility

      Reduce Visibility

      Widen Scope

      Widen Scope (promote constant)

      Widen Scope (promote to field)

      XML, HTML, and XAML

      Add End Tag

      Change Tag*

      Remove Attribute*

      Remove End Tag

      Remove Tag*

      Reorder Attributes

      Surround with Tag*

       *Feature may change program behavior.

  • New Video: Refactorings that work on Expressions

    New video is up -- this one shows refactorings that work on expressions

    Refactorings by category appear below, with links to available videos (three so far, more to come) appearing in the category text:

    ASP.NET

    Add AssociatedControlID Attribute*

    Add RunAt Attribute*

    Add Validator*

    Convert Color to HEX

    Convert Color to Named Color

    Convert Color to RGB

    Convert to Pixels

    Convert to Points

    Convert to Skin

    Extract ContentPlaceHolder (and create master page)

    Extract ContentPlaceHolder

    Extract Script

    Extract Style (Class)

    Extract Style (id)

    Extract UserControl

    Make ID Unique

    Merge Styles

    Move Style Attributes to CSS

    Move Style Attributes to External CSS

    Move Style Attributes to Theme (use SkinID)

    Move Style Attributes to Theme

    Move to Code-behind

    Set CssClass*

    Split Style

    Surround with Update Panel*

    Toggle ViewState*

    Changing Signatures

    Add Parameter

    Create Overload

    Decompose Parameter

    Introduce Parameter Object