Thursday, May 10, 2007

Itanium server

So we got a really nice Itanium server donated from HP. I have access to 8 CPU cores and 32GB of memory so it's great for running the process I'm currently setting up. My boss wanted me to write a little info about what I'm using it for and I thought I might as well post it here.

Our nightly process is being developed on the Itanium server. To work with our environment I installed the IA64 .NET runtime with the IA64 remote debugger. Compiled applications can run without modification on the server with no work, but I have written code designed to utilize the extended resources of the server.

With access to 8 of the 16 cores available I tried writing the program to break into threads. The process’ goal can be divided into two sections. The first is to download student records from the school’s Oracle database(Aries), compare them to a copy of yesterday’s data to find which records are new, updated or deleted, then submit changes to our CRM system. Part two is pulling the data out of CRM which is now the merged between updates from Aries and updates made inside of CRM. Once the data is pulled out it is sent to various other systems: Account Creation, WebCT, Print Balance Manager, ect.

With roughly 800,000 student records I was originally going to process the records one at a time, but with the multiple cores I break the 800,000 records into chunks and process each chunk in an individual thread. I have different parameters for the number of records per chunk and the number of chunks processed at a time. The biggest help here is access to all the memory. A copy of the entire Aries database was just over 5 GB on the file system, but we don’t need to load it all. I load about 1 GB of data into memory. When this is broken into chunks at the end of the process the chunk data is serialized and saved to the file system so it can be compared to the next day’s data. The chunks are indexed by their associated CSU ID so the next day when a record is being processed it caches the previous day’s chunk in memory. For a time, essentially two times the memory is loaded if all chunks were being processed at that time, which they are because the server can easily accommodate this.
Compared to the server I was developing the process on previously with 2 CPU cores and 3 GB of memory the speed of the program has increased tremendously.


I'm not sure if my methods are the greatest but I sure am learning a lot as I go through this! In fact, this is why I named the blog empirical programming... because in all honesty I can get things done, but I have no idea if it is the right or wrong way.

OpenGL in .NET?

Well, I've been wondering about the possability for awhile on this. I've been using C# .NET day to day for about a year now but havn't considerd it as robust of a language of C++, but lately my thougts have been changing and I decided to try out writing some OpenGL in it again.


I wrote the above program using the Tao framework: http://www.taoframework.com/
Everything came together pretty easily and I was using the beta of the new Visual Studio, Orcas. For a LONG time before I started working here at the College of Business I didn't think much of Microsoft and Visual Studio, but after working with it I really like the development enviroment, and some of the things in Orcas are really fun to play with.

I'm still a fan of Linux and open source programming. Java is a great language with its cross platform virtual machine. I've always used Eclipse do develop java but compared to Visual Studio the features are definitaly lacking.

So, it might seem like I'm trying to make a point here but in the end I'm really not. It all comes down to prefrence, and usualy the descision isn't yours to make, but your employers.

My goal is to be able to pick up any development enviroment/language and come out with the same results reguardless of the restrictions. It really isn't that hard to adapt.

The Start

My profile:

1995: Started making websites in fourth grade.
1997: Started learning scripting via cgi
1998: Started learning programming via C++
1999: Started contributing to various online communitues by making websites and game content(mods).
2000: First programming class in highschool, Pascal
2002: Second programming class in highschool, C++
2003: AP Java class in highschool.
2004: Graduated highschool, started Colorado State University.
2005-2006: Internship at Colorado Research Associates programing an atmospheric model in FORTRAN
2005-Present: Working at CSU College of Business as application developer. Roles include making websites in ASP.NET, administrating 4,000 user accounts/semester on Windows domain controller. Writing support applications for IT department in C# .NET. Processing student records from campus Oracle database and loading it into COB systems(MySQL, CRM).