Well the past few months have been consumed with releasing our external product to market. That was complete about a month ago and I took a couple of weeks to recharge the batteries. The past couple of weeks have been spent coding. It's a nice change to be able to write code all day at work in lieu of other things. I completed two projects over this time period.
Project 1 - Toolkit with Plug-in Framework
This project is a shell application the implements plug in features using C# and Interfaces. Each plug-in is a "tool" that used by someone internal to the organization. It is going through UAT this week and I am hopeful for the results
Project 2 - Redesign Existing Functions for improved user interaction
This project is to redesign some existing functionality to make more user friendly and less ambiguous. This is production code so a fair amount of effort, design, and unit testing was involved.
While I always give best effort when coding I do feel an extra "effort" being put into code that is going to be released to thousands of users.
All in all I am happy with my progress thus far and feel I am well on my way to achieving my goal of full time software developer.
Some items I plan to focus on over the next couple of months include:
- Agile Development Best Practices and Implementation
- TDD and BDD
- Usage of C# and Interfaces
- Usage of C# and Delegates
- Regular Expression building and Usage
- Optimizing SQL performance through query optimization and tuning for SQL and Oracle
That should keep me busy for a while.
Wednesday, September 9, 2009
Monday, July 13, 2009
Get Identity after SQL Insert Command
The following code will allow you to execute an insert command and retrieve the identity of the inserted record in a single method. The use of (ID = SCOPE_IDENTITY()) will prevent any triggers from providing incorrect ID results that can be obtained when using @@Identity.
public static int ExecuteIdentityInsert
(string connection,
string commandtext,
string tablename,
Dictionary<string, string> parameters)
{
SqlConnection con = new SqlConnection(connection);
string getIdentityCommandText =
(";SELECT ID FROM " + tablename + " WHERE (ID = SCOPE_IDENTITY())");
Object result;
using (con)
{
con.Open();
// Add query to retrieve inserted command id
SqlCommand com = new SqlCommand(commandtext+getIdentityCommandText, con);
if (parameters != null)
{
foreach (KeyValuePair<string, string> pair in parameters)
{
com.Parameters.AddWithValue(pair.Key, pair.Value);
}
}
try
{
result = com.ExecuteScalar();
}
catch (Exception ex)
{
throw;
}
}
return Convert.ToInt32(result);
}
Friday, June 12, 2009
Reflection over the past year
The past year has been an interesting journey for me. After many years of searching I finally found what I want to do with my career. I have fallen in love with software development and I like to think I am good at it. Software is more than just writing code, it is oh so much more. Between the planning, creating, testing, deploying and on going support it can be a bit hectic. I started my journey as the end user, then moved to support. I am now testing and writing tools and small applications.
I have learned so much in the past year but the biggest thing I have learned thus far is that I have so much more to learn. I have a passion for learning so this is perfect. This will keep me hungry for more while my company benefits from the tools and knowledge I gain during this never ending quest for knowledge.
Given my path I bring a unique perspective to software design. Through my end user and support years I have come to learn what bothers users the most and also what they like. This has led me to focus on user interaction and methodology to provide users the best possible interaction with the software. I find that many times developers tend to think about the end user but only when it's convenient. When times are tough and code has to be churned out to meet deadlines - the user is usually the last person considered in terms of UI design and interaction. This is a practice the software community as a whole needs to change.
I am very lucky to have the opportunity to work with such a great team. There are many great people on my team from Support to QA to Development. Each person genuinely cares about the product and we all strive to make it better. We also have management buy in for most if not all of the things we do (methodologies, etc). This environment is rich with knowledge from MANY experienced developers and I get as much information from them as possible. I love sharing ideas and thoughts to help build my "arsenal" of tools.
Current Focus
While my ultimate goal is full time software development I am still in quality assurance and have learned many new techniques for testing software. The biggest concept I have taken away thus far is automation. Nothing beats end to end automation. From building the code to deploying to setting up sample data to installing and then ultimately running automated tests. Nothing is more comforting than walking in to the office in the morning to a collection of GREEN tests.
I have a long road ahead of me but I have the desire, the tools, and the team around me to make this journey.
I'm so excited......
I have learned so much in the past year but the biggest thing I have learned thus far is that I have so much more to learn. I have a passion for learning so this is perfect. This will keep me hungry for more while my company benefits from the tools and knowledge I gain during this never ending quest for knowledge.
Given my path I bring a unique perspective to software design. Through my end user and support years I have come to learn what bothers users the most and also what they like. This has led me to focus on user interaction and methodology to provide users the best possible interaction with the software. I find that many times developers tend to think about the end user but only when it's convenient. When times are tough and code has to be churned out to meet deadlines - the user is usually the last person considered in terms of UI design and interaction. This is a practice the software community as a whole needs to change.
I am very lucky to have the opportunity to work with such a great team. There are many great people on my team from Support to QA to Development. Each person genuinely cares about the product and we all strive to make it better. We also have management buy in for most if not all of the things we do (methodologies, etc). This environment is rich with knowledge from MANY experienced developers and I get as much information from them as possible. I love sharing ideas and thoughts to help build my "arsenal" of tools.
Current Focus
While my ultimate goal is full time software development I am still in quality assurance and have learned many new techniques for testing software. The biggest concept I have taken away thus far is automation. Nothing beats end to end automation. From building the code to deploying to setting up sample data to installing and then ultimately running automated tests. Nothing is more comforting than walking in to the office in the morning to a collection of GREEN tests.
I have a long road ahead of me but I have the desire, the tools, and the team around me to make this journey.
I'm so excited......
Saturday, June 6, 2009
Data Comparison Tool
In the course of my job I have to validate numerous amounts of data. We have many processes that transfer data between databases to provide flexibility for our clients. In doing so we must support MS Access,MS SQL, and Oracle. Due to the complex nature of this task and the differences in how these database engines perform - it is very difficult to ensure they are all acting the same. So I have identified the problem - and developed a custom solution for it.
The outcome of this is a custom application that uses our existing DAL to compare two databases (regardless of platform). Some of the logic from this tool was based on an existing tool we had to compare single queries.
Setup:
1 Solution, 3 projects, and NUnit.
I wrote the main class as a DLL that can be used with a form, console, or integrated into an existing application. To test this - I used NUnit. This turned out to be the best method. With the console output available in NUnit and this being primarily a testing tool - I left the other options for later and just use NUnit to run my tests. I love it when I see green!!!
How it works
First it gets a list of tables from each database and compares them
Then it compares the rows counts for each table
If that passes, then it compares the row data. This is the tricky part. Since Access, SQL, and Oracle all handle identity inserts differently, it's hard to just sort on ID. To handle this I sort and attempt a compare on each column (in a data table in memory) for each table. I then walk through each data row and compare the contents. There are some fall back checks to handle other differences such as how numbers and bits are handled between the platforms.
In the end - I can move data from one platform to another, perform the same functions in each database, and then compare the databases very quickly with high confidence.
For a database with 300 plus tables I can run a complete test in under a minute with the databases in the same office.
Time Saved:
Before App - 30 minutes per test with less than 50 percent coverage
With App - 1 to 2 minutes per test with 100 percent coverage.
Horraaayyyy for automation!!!!
The outcome of this is a custom application that uses our existing DAL to compare two databases (regardless of platform). Some of the logic from this tool was based on an existing tool we had to compare single queries.
Setup:
1 Solution, 3 projects, and NUnit.
I wrote the main class as a DLL that can be used with a form, console, or integrated into an existing application. To test this - I used NUnit. This turned out to be the best method. With the console output available in NUnit and this being primarily a testing tool - I left the other options for later and just use NUnit to run my tests. I love it when I see green!!!
How it works
First it gets a list of tables from each database and compares them
Then it compares the rows counts for each table
If that passes, then it compares the row data. This is the tricky part. Since Access, SQL, and Oracle all handle identity inserts differently, it's hard to just sort on ID. To handle this I sort and attempt a compare on each column (in a data table in memory) for each table. I then walk through each data row and compare the contents. There are some fall back checks to handle other differences such as how numbers and bits are handled between the platforms.
In the end - I can move data from one platform to another, perform the same functions in each database, and then compare the databases very quickly with high confidence.
For a database with 300 plus tables I can run a complete test in under a minute with the databases in the same office.
Time Saved:
Before App - 30 minutes per test with less than 50 percent coverage
With App - 1 to 2 minutes per test with 100 percent coverage.
Horraaayyyy for automation!!!!
Sunday, May 17, 2009
How to install Oracle 11g on Windows 7
The following will guide you to install the Oracle 11g client software on a Windows 7 RC operating system. By default it will fail as it lists the operating system as 6.1 and the latest supported is 6.0.
To bypass - change the refhost.xml file located in the following directory:
C:\Users\tsells.TS\Desktop\win64_11gR1_client\client\stage\prereq\client
Note the additional XML entry below in bold. Add this and save the file. Now you will be able to install.
<CERTIFIED_SYSTEMS>
<OPERATING_SYSTEM>
<!--Microsoft Windows 2000-->
<VERSION VALUE="5.0"/>
<SERVICE_PACK VALUE="1"/>
</OPERATING_SYSTEM>
<OPERATING_SYSTEM>
<!--Microsoft Windows XP-->
<VERSION VALUE="5.1"/>
<SERVICE_PACK VALUE="1"/>
</OPERATING_SYSTEM>
<OPERATING_SYSTEM>
<!--Microsoft Windows 2003-->
<VERSION VALUE="5.2"/>
</OPERATING_SYSTEM>
<!--Microsoft Windows Vista-->
<OPERATING_SYSTEM>
<VERSION VALUE="6.0"/>
</OPERATING_SYSTEM>
<!--Microsoft Windows 7-->
<OPERATING_SYSTEM>
<VERSION VALUE="6.1"/>
</OPERATING_SYSTEM>
</CERTIFIED_SYSTEMS>
To bypass - change the refhost.xml file located in the following directory:
C:\Users\tsells.TS\Desktop\win64_11gR1_client\client\stage\prereq\client
Note the additional XML entry below in bold. Add this and save the file. Now you will be able to install.
<CERTIFIED_SYSTEMS>
<OPERATING_SYSTEM>
<!--Microsoft Windows 2000-->
<VERSION VALUE="5.0"/>
<SERVICE_PACK VALUE="1"/>
</OPERATING_SYSTEM>
<OPERATING_SYSTEM>
<!--Microsoft Windows XP-->
<VERSION VALUE="5.1"/>
<SERVICE_PACK VALUE="1"/>
</OPERATING_SYSTEM>
<OPERATING_SYSTEM>
<!--Microsoft Windows 2003-->
<VERSION VALUE="5.2"/>
</OPERATING_SYSTEM>
<!--Microsoft Windows Vista-->
<OPERATING_SYSTEM>
<VERSION VALUE="6.0"/>
</OPERATING_SYSTEM>
<!--Microsoft Windows 7-->
<OPERATING_SYSTEM>
<VERSION VALUE="6.1"/>
</OPERATING_SYSTEM>
</CERTIFIED_SYSTEMS>
Monday, April 27, 2009
Status Update
Well it's been a while since I have posted so I thought I would provide an update. I finished the Database Creation Tool with WPF and it turned out great. For my data binding issues I was able to work around that. I had my UI in WPF which was bound to an object with a help class that managed the data flow between the object and the database. I also incorporated some stored procedures to handle all of the settings being inserted.
I was recently working on a feature for our production application which is now finished. It turned out well and was a good learning experience.
Currently I am tidying up some development utilities and creating a c# console application to assist me in generating large data sets for performance testing. To simulate relevant data I found that using a custom app along with our existing DAL was the easiest and quickest way to create "real" and useful data.
We are coming up on a release now so the coding will be scaled back for a couple of months until that is out the door.
TS
I was recently working on a feature for our production application which is now finished. It turned out well and was a good learning experience.
Currently I am tidying up some development utilities and creating a c# console application to assist me in generating large data sets for performance testing. To simulate relevant data I found that using a custom app along with our existing DAL was the easiest and quickest way to create "real" and useful data.
We are coming up on a release now so the coding will be scaled back for a couple of months until that is out the door.
TS
Monday, March 16, 2009
Old Habits Die Hard - So I'm not going to start them..
I consider myself a strange breed when it comes to software development. While I am not writing software full time yet I am developing utilities for our teams to use during the course of development, QA, and support for our product. I started in support and moved my way into QA and my next step will be development. I am leaning towards middle tier / database development as this what I currently enjoy the most.
During this process I am doing as much as I can to build my foundation so I can be a great software developer. In building my base I am reading as much as possible from as many sources as I can find. One thing that I feel I do very well is usability. My first experiences with software were from the end user perspective being a system's / network administrator and running my own personal business for 3 years. I have come to realize many users don't have a clue when it comes to technology. As software developers we must make software as easy to use as possible while doing the following three things.
Of all my readings two books have really stood out for me.
GUI Bloopers 2.0 by Jeff Johnson
The Inmates are Running the Asylum by Alan Cooper
If you are reading this post and you haven't read these books - I would recommend ordering them and reading them. It will definitely make you a better software developer.
During this process I am doing as much as I can to build my foundation so I can be a great software developer. In building my base I am reading as much as possible from as many sources as I can find. One thing that I feel I do very well is usability. My first experiences with software were from the end user perspective being a system's / network administrator and running my own personal business for 3 years. I have come to realize many users don't have a clue when it comes to technology. As software developers we must make software as easy to use as possible while doing the following three things.
- Guide the user during the use of the software so they don't make mistakes (prevent mistakes when possible)
- Don't make the user feel stupid when they do make a mistake (show them how to fix it)
- Make the user interface FUNCTIONAL.
Of all my readings two books have really stood out for me.
GUI Bloopers 2.0 by Jeff Johnson
The Inmates are Running the Asylum by Alan Cooper
If you are reading this post and you haven't read these books - I would recommend ordering them and reading them. It will definitely make you a better software developer.
Subscribe to:
Posts (Atom)
