31 Days of Refactoring


Refactoring is an integral part of continually improving your code while it moves forward through time. Without refactoring you accrue technical debt, forget what portions of code do and create code that is resistant to any form of testing. It is an easy concept to get started with and opens the door to much better practices such as unit testing, shared code ownership and more reliable, bug-free code in general.

Day 1 : Encapsulate Collection

Day 2 : Move Method

Day 3 : Pull Up Method

Day 4 : Push Down Method

Day 5 : Pull Up Field

Day 6 : Push Down Field

Day 7 : Rename (method, class, parameter)

Day 8 : Replace Inheritance with Delegation

Day 9 : Extract Interface

Day 10 : Extract Method

Day 11 : Switch to Strategy

Day 12 : Break Dependencies

Day 13 : Extract Method Object

Day 14 : Break Responsibilities

Day 15 : Remove Duplication

Day 16 : Encapsulate Conditional

Day 17 : Extract Superclass

Day 18 : Replace exception with conditional

Day 19 : Extract Factory Class

Day 20 : Extract Subclass

Day 21 : Collapse Hierarchy

Day 22 : Break Method

Day 23 : Introduce Parameter Object

Day 24 : Remove Arrowhead Antipattern

Day 25 : Introduce Design By Contract Checks

Day 26 : Remove Double Negative

Day 27 : Remove God Classes

Day 28 : Rename boolean methods

Day 29 : Remove Middle Man

Day 30 : Return ASAP

Day 31 : Replace Conditional with Polymorphism

You can find all of the sample code available for download here: http://github.com/schambers/days-of-refactoring/tree/master

Via 31 Days of Refactoring – Sean Chambers – Los Techies : Blogs about software and anything tech!

Running IronPython Scripts from a C# 4.0 Program


Running IronPython Scripts from a C# 4.0 Program

Before you read this you may want to check out my other post.

IronPython is a scripting language hosted on the .NET platform. This posts shows how you can use the Dynamic Language Runtime (DLR) and the new C# 4.0 dynamic keyword to call an IronPython script from a C# program.



import sys

def Simple():
    print "Hello from Python"
    print "Call Dir(): "
    print dir()
    print "Print the Path: " 
    print sys.path


using System;
using IronPython.Hosting;
using Microsoft.Scripting.Hosting;

public class dynamic_demo
    static void Main()
        var ipy = Python.CreateRuntime();
        dynamic test = ipy.UseFile("Test.py");


Via Charlie Calvert’s Community Blog : Running IronPython Scripts from a C# 4.0 Program

Getting Started with IronPython


I recently spent some time getting IronPython up and running on my system; I will review what I learned in this post.

IronPython can be hosted inside a C# program as a scripting language. Nonetheless, Python is a powerful standalone language frequently used as the glue in web based applications. In this post Charlie explore the simple steps needed to run IronPython as a standalone tool from the command prompt. In other posts coming up he will show how to call Python from inside a C# application.

Via Charlie Calvert’s Community Blog : Getting Started with IronPython

Functional Programming for Everyday .NET Development

 Jeremy Miller

In this article we will examine in particular how the new support for functional programming techniques in .NET 3.5 can help you do the following:

  1. Make your code more declarative.
  2. Reduce errors in code.
  3. Write fewer lines of code for many common tasks.

The Language Integrated Query (LINQ) feature in all of its many incarnations is an obvious and powerful use of functional programming in .NET, but that’s just the tip of the iceberg.

For more visit Functional Programming for Everyday .NET Development

What is the difference between a.Equals(b) and a == b?

Value Types:
For value types, “==” and Equals() works same way : Compare two objects by VALUE
int i = 5;
int k= 5;
i == k > True
i.Equals(k) > True

Reference Types:
For reference types, both works differently :
“==” compares REFERENCE – returns true if and only if both references point to the SAME object.

Equals method compares object by VALUE.

StringBuilder sb1 = new StringBuilder(”Mahesh”);
StringBuilder sb2 = new StringBuilder(”Mahesh”);
sb1 == sb2 > False
sb1.Equals(sb2) > True


String s1 = “zzz”;
String s2 = “zzz”;
In above case the results will be,
s1 == s2 > True
s1.Equals(s2) > True

Why? Does that mean String a Value Type?

No, String IS a Reference Type. Although string is a reference type, the equality operators (== and !=) are defined to compare the values of string objects, not references. This makes testing for string equality more intuitive. For example:

Small Basic



Small Basic is a project that’s aimed at bringing “fun” back to programming. By providing a small and easy to learn programming language in a friendly and inviting development environment, Small Basic makes programming a breeze. Ideal for kids and adults alike, Small Basic helps beginners take the first step into the wonderful world of programming.

  • Small Basic derives its inspiration from the original BASIC programming language, and is based on the Microsoft .Net platform. It is really small with just 15 keywords and uses minimal concepts to keep the barrier to entry as low as possible.
  • The Small Basic development environment is simple, yet provides powerful modern environment features like Intellisense™ and instant context sensitive help.
  • Small Basic allows third-party libraries to be plugged in with ease, making it possible for the community to extend the experience in fun and interesting ways.

Getting Started Guide



Small Basic Blog


Microsoft Small Basic aims to make computer programming accessible to beginners.


Getting Started

  1. Download and install Small Basic
  2. Follow the Getting Started guide (docx or pdf) to build your first application

SQL# (SQLsharp) – Enabling more powerful SQL



  • String: Contains, Count, Cut, EndsWith, Equals, IndexOf, InitCap, Join, LastIndexOf, Newline, NthIndexOf, PadLeft, PadRight, Split, SplitIntoFields, StartsWith, Trim, WordWrap
  • RegEx: IsMatch, Matches, Match, MatchLength, MatchSimple, Replace, Split
  • Math: CompoundAmortizationSchedule, Constant (30 physics constants), Convert (22 measurement conversions), Cosh, Factorial, IsPrime, RandomRange, Sinh, Tanh
  • Date: BusinessDays, DaysInMonth, DaysLeftInYear, FirstDayOfMonth, FormatTimeSpan, FromUNIXTime, FullDateString, FullTimeString, IsBusinessDay, IsLeapYear, LastDayOfMonth, ToUNIXTime
  • InterNet (not available in free version): AddressToNumber, FtpDo, FtpGet, FtpPut, GetHostName, GetIPAddress, GetWebPages, IsValidIPAddress, NumberToAddress, Ping, PingTime
  • File (not available in free version): ChangeEncoding, Copy, CopyMultiple, CreateDirectory, Decrypt, Delete, DeleteDirectory, DeleteMultiple, Encrypt, GetDirectoryListing, GetDriveInfo, GetFile, GetFileBinary, GetRandomFileName, GetTempPath, GUnzip, GZip, Move, MoveMultiple, PathExists, SplitIntoFields, WriteFile, WriteFileBinary
  • Miscellaneous: CRC32, Deflate, GenerateDateTimeRange, GenerateDateTimes, GenerateFloatRange, GenerateFloats, GenerateIntRange, GenerateInts, GUnzip, GZip, Hash, Inflate, IsValidCC, IsValidSSN, ToWords
  • Database: DumpData (not available in free version)
  • Convert: BinaryToHexString, FromBase64, HexStringToBinary, ROT13, ToBase64
  • LookUps: GetCountryInfo, GetStateInfo
  • Internal: Version, Help, Setup, Uninstall, GrantPermissions, IsUpdateAvailable, Update (not available in free version), SetSecurity, WebSite
  • User-Defined Aggregates: GeometricAvg, Join, Median, Random, RootMeanSqr
  • User-Defined Types: FloatArray, HashTable, NVarcharArray

What can SQL# do?

  • SQL# gives you the easiest access to the power of the CLR!
    – a single assembly with over 100 functions, 5 User-Defined Aggregates, 3 User-Defined Types, and more being added!
  • SQL# installs easily and in moments!
    – download one small install sql script, execute it, and enjoy the power of the CLR!
  • SQL# is backed up and restored with the database along with all other objects and data!
    – no need to worry about separate DLLs as with COM Extended Stored Procedures
  • SQL# has built in documentation (list of function and procedure signatures)!
    – if you ever lose the documention, the worst off you are is one procedure call away from viewing the entire list of function signatures!
  • SQL# can easily be updated via the web in moments!
    – you can optionally install updates via the web with a single procedure call
  • SQL# saves countless hours learning CLR and .Net, not to mention the cost of Visual Studio 2005!
    – time is money and you have work to do so why stop and learn yet another language, especially when you might need to purchase additional software just to compile a basic function!
  • SQL# lets you focus on SQL programming without sacrificing the power of the CLR!
    – again, there is only so much time in the day so do you want to spend it NOT being productive?


Download Free Version of SQL# (SQLsharp) here!

The manual and “What’s New” document cover both Free and Paid-For versions.
Manual in PDF format (766k)
What’s New in Version 2.5.20/2.5.21 (122k)

Date_BusinessDays ExcludeDaysMask Worksheet .
Download Spreadsheet (19k)

Via SQL# (SQLsharp) – Enabling more powerful SQL (Features)

Essential SQL Server Date, Time and DateTime Functions

Standard Date, Time & TimeSpan Functions

function DateOnly(@DateTime DateTime)
– Returns @DateTime at midnight; i.e., it removes the time portion of a DateTime value.
returns datetime

create function Date(@Year int, @Month int, @Day int)
– returns a datetime value for the specified year, month and day
– Thank you to Michael Valentine Jones for this formula (see comments).
returns datetime

create function Time(@Hour int, @Minute int, @Second int)
– Returns a datetime value for the specified time at the “base” date (1/1/1900)
– Many thanks to MVJ for providing this formula (see comments).
returns datetime

create function TimeOnly(@DateTime DateTime)
– returns only the time portion of a DateTime, at the “base” date (1/1/1900)
returns datetime

create function DateTime(@Year int, @Month int, @Day int, @Hour int, @Minute int, @Second int)
– returns a dateTime value for the date and time specified.
returns datetime

create function TimeSpan(@Days int, @Hours int, @Minutes int, @Seconds int)
– returns a datetime the specified # of days/hours/minutes/seconds from the “base” date of 1/1/1900 (a “TimeSpan”)
returns datetime

create function TimeSpanUnits(@Unit char(1), @TimeSpan datetime)
– returns the # of units specified in the TimeSpan.
– The Unit parameter can be: “d” = days, “h” = hours, “m” = minutes, “s” = seconds
returns int

For More Details: Essential SQL Server Date, Time and DateTime Functions

see also:

IronPython Studio – Home



IronPython Studio is a free full IDE (Integrated Development Environment) for the Python programming language. It is based on the existing IronPython example that is included in the VS SDK.
IronPython Studio is based on the Visual Studio 2008 Shell runtime (royalty free) and can be installed without requiring any version of Visual Studio.

IronPython Studio – Home