So it's been over five years since my last entry in this blog. A lot has happened since then, personally and professionally. I am now married, I have two little daughters, and for the past four years, I have been with a company that makes inserting machines for the mailing industry, supporting and extending software that works under the Automated Document Factory (ADF) concept. I continued with the manufacturing client (an auto plant) until March 2006, developing in VB 6 and C++. I had a 3-month hiatus from consulting when my wife came from the Philippines and we had our wedding. After that, I had a couple of short-term consulting gigs with another staffing company where I was involved with creating applications based on Microsoft Office VBA-- one in Excel, the other in Access on a tablet PC. After this same staffing company sent me on yet another Access project, I decided that they were not taking me in a direction that I wanted to go, so I quit the project on the second day and "fired" the staffing company.
In the meantime, a placement specialist from the previous staffing company I worked with (who got me the project at the auto plant) contacted me about an opportunity at what became my present employer. After interviewing with my boss and having interviews with a couple of other executives in the company, I was hired in March 2007. Finally, I landed a permanent position in IT! Coming up on my 4th anniversary with this firm, I have done a lot of different things, from providing software support to basic PC maintenance and software installation to writing applications and database procedures and functions, to creating testing plans and project plans. Our company provides a lot of autonomy to employees, which means in the ADF group we have a lot of freedom but also have virtually total responsibility for the customers we are assigned.
Working for the inserter company has also marked a transition in my development career from Visual Studio 6 to Microsoft.NET. I came late to the party, to say the least, but I believe I have done a lot to get myself up to speed in creating applications of all kinds. I have worked most extensively with applications written for the .NET 2.0 framework-- desktop applications, web applications, and service applications. I have also had to provide ongoing support and updates to a reporting application written in ASP.NET 1.1, and I have also recently contributed to a desktop application written in C# 3.0.
As much as I have done, I have to admit that my skills in .NET, my skills in programming in general, have always been a little behind the curve. A lot of this had to do with the reluctance to fully embrace the technology I was working with, or was prospectively working with. I believe that this led to my boss hiring someone who was more proficient in application development, and who has taken on the bulk of responsibility for new products under the "official release" category. In other words, the other developer has been working with products that are officially announced to the public, and I have been working with applications that bridge the gap between what our standard software offers and what the customer needs to integrate with their environment.
Working on the recent desktop application was a revelation. My boss asked me to contribute code that would control mailpiece disposition, since I was familiar with this functionality from our previous versions of the software. The other developer created the GUI and other parts of the application that created job and multiple mailpiece views. Finally, I get a piece of the action! But look, he's using a dataset with table adapters to call the stored procedures. In my applications, I have been calling the procedures programmatically, gathering the parameters and calling the Execute method in code. I wanted to update counters in the closing of a controls, he counters with a suggestion to do the update in the control's Dispose method. Dispose? Where's that? Oh, in the other part of the class code! It has been unnerving.
This is not to say that I have been doing anything "wrong" with the applications I have written or updated. They are in production and they work; when there is an issue, I have been able to resolve it... sooner or later. But essentially all of the applications that I maintained starting out in .NET were written in version 1.1, and there is a big difference between .NET 1.1 and .NET 2.0 or .NET 3.5. There are newer tools and components that I could have used to improve my productivity and perhaps also the efficiency of the applications I have written.
One possible exception to this tendency has been two service applications I have written for different customers. The second application was an evolution from the first one, but they both have similar functionality: they essentially send periodic output files back to the customer systems to update the job on mailpieces processed since the last time the service ran. Usually this runs on an interval of about 3 to 5 minutes. Instead of copying another similar application whose source code in .NET 1.1 I already had, I took a fresh approach to the solution. Instead of using array lists or hash tables, I adopted the use of generic dictionaries and lists to parse and organize the data. Instead of using a hard-coded definition of the file, I am using a file definition contained in an XML file. The first version of the application was a simple copy of the records recently processed into the output file. The application for the second customer was quite a bit more complex, requiring the extraction of the recently processed mailpiece records by data field and, for some fields, requiring the transformation of the field from one format to another (e.g., changing 6-digit mailpieces to 5-digit mailpieces or changing a numeric field to a text field). We are getting data from our internally defined format and sending the output files in the customer's file format. The XML file also contains a list of the transformations to be done and the fields in the internal and external formats to be operated on.
These are more the advanced and up to date aspects of this service application. They are state of the art for .NET 2.0, the version of the framework the service was first developed in. Of course, in the .NET 3.0 framework and later versions we now have LINQ2XML that promises to be a more efficient way to query the XML file I have as part of the service. I could also be using a dataset as a more efficient way to update the database after the file is created. If I get a chance to get around to it, I will try to incorporate this into the application.
I am now more motivated to keep my skills and knowledge up to date, more so than ever before. I have thrown off my reluctance to commit to a particular technology that is marketable. I will explain why in my next diary.
In the meantime, a placement specialist from the previous staffing company I worked with (who got me the project at the auto plant) contacted me about an opportunity at what became my present employer. After interviewing with my boss and having interviews with a couple of other executives in the company, I was hired in March 2007. Finally, I landed a permanent position in IT! Coming up on my 4th anniversary with this firm, I have done a lot of different things, from providing software support to basic PC maintenance and software installation to writing applications and database procedures and functions, to creating testing plans and project plans. Our company provides a lot of autonomy to employees, which means in the ADF group we have a lot of freedom but also have virtually total responsibility for the customers we are assigned.
Working for the inserter company has also marked a transition in my development career from Visual Studio 6 to Microsoft.NET. I came late to the party, to say the least, but I believe I have done a lot to get myself up to speed in creating applications of all kinds. I have worked most extensively with applications written for the .NET 2.0 framework-- desktop applications, web applications, and service applications. I have also had to provide ongoing support and updates to a reporting application written in ASP.NET 1.1, and I have also recently contributed to a desktop application written in C# 3.0.
As much as I have done, I have to admit that my skills in .NET, my skills in programming in general, have always been a little behind the curve. A lot of this had to do with the reluctance to fully embrace the technology I was working with, or was prospectively working with. I believe that this led to my boss hiring someone who was more proficient in application development, and who has taken on the bulk of responsibility for new products under the "official release" category. In other words, the other developer has been working with products that are officially announced to the public, and I have been working with applications that bridge the gap between what our standard software offers and what the customer needs to integrate with their environment.
Working on the recent desktop application was a revelation. My boss asked me to contribute code that would control mailpiece disposition, since I was familiar with this functionality from our previous versions of the software. The other developer created the GUI and other parts of the application that created job and multiple mailpiece views. Finally, I get a piece of the action! But look, he's using a dataset with table adapters to call the stored procedures. In my applications, I have been calling the procedures programmatically, gathering the parameters and calling the Execute method in code. I wanted to update counters in the closing of a controls, he counters with a suggestion to do the update in the control's Dispose method. Dispose? Where's that? Oh, in the other part of the class code! It has been unnerving.
This is not to say that I have been doing anything "wrong" with the applications I have written or updated. They are in production and they work; when there is an issue, I have been able to resolve it... sooner or later. But essentially all of the applications that I maintained starting out in .NET were written in version 1.1, and there is a big difference between .NET 1.1 and .NET 2.0 or .NET 3.5. There are newer tools and components that I could have used to improve my productivity and perhaps also the efficiency of the applications I have written.
One possible exception to this tendency has been two service applications I have written for different customers. The second application was an evolution from the first one, but they both have similar functionality: they essentially send periodic output files back to the customer systems to update the job on mailpieces processed since the last time the service ran. Usually this runs on an interval of about 3 to 5 minutes. Instead of copying another similar application whose source code in .NET 1.1 I already had, I took a fresh approach to the solution. Instead of using array lists or hash tables, I adopted the use of generic dictionaries and lists to parse and organize the data. Instead of using a hard-coded definition of the file, I am using a file definition contained in an XML file. The first version of the application was a simple copy of the records recently processed into the output file. The application for the second customer was quite a bit more complex, requiring the extraction of the recently processed mailpiece records by data field and, for some fields, requiring the transformation of the field from one format to another (e.g., changing 6-digit mailpieces to 5-digit mailpieces or changing a numeric field to a text field). We are getting data from our internally defined format and sending the output files in the customer's file format. The XML file also contains a list of the transformations to be done and the fields in the internal and external formats to be operated on.
These are more the advanced and up to date aspects of this service application. They are state of the art for .NET 2.0, the version of the framework the service was first developed in. Of course, in the .NET 3.0 framework and later versions we now have LINQ2XML that promises to be a more efficient way to query the XML file I have as part of the service. I could also be using a dataset as a more efficient way to update the database after the file is created. If I get a chance to get around to it, I will try to incorporate this into the application.
I am now more motivated to keep my skills and knowledge up to date, more so than ever before. I have thrown off my reluctance to commit to a particular technology that is marketable. I will explain why in my next diary.
Comments