in

 

Sean Chambers

  • Mapping a collection of Enums with NHibernate

    Just came across a situation where I needed to have a collection of enum values mapped to an IList and to have it supported by NHibernate. It took me a little bit to find the proper approach and get NHibernate to play nicely. So as a reference for anyone else running into this you can find some information at this posting here

    Here is a snippet of the bag at hand:

    <bag name="companyRoleList" access="field" lazy="false" cascade="none" table="CompanyRole" >
        <key column="CompanyID" />
        <element column="RoleID" type="MyCompany.Domain.Lookups.CompanyRoleType, MyCompany.Domain.Lookups" />
    </bag>

    This is from the blog post on the NHibernate forum. The trick here is to have the full namespace/assembly qualification in the type attribute that points to the Enum you are using as a collection. This is needed even if you have the namespace=, assembly= at the hibernate-mapping element. That stumped for a little while.

    Hopefully this helps someone else out!

  • I must admit

    Even though I haven't been blogging alot recently on LosTechies, doesn't mean I haven't been blogging. Even though Bil Simser, Sergio Pereira and Kyle Baley have all claimed to be ALT.NET Pursefight, they are indeed NOT!

    I am the true ALT.NET Pursefight!!!! Accept no substitute and believe noone else!

    Who else could it be? I am witty, intelligent and cool all wrapped up into one. This clearly makes me the ALT.NET Pursefight blogger. I am one of the "nobody developers" that would clearly end up being the ALT.NET Pursefight blogger. It's as clear as mud!

    At first I tried to chime in once or twice on the list only to get burned. This make me quite angry so rather then lash out I decided to don a cloak of anonymity and attack from behind the shadows. Genius eh? Before you ask I WILL NOT sign any autographs or kiss any babies.

    That being said, the list has become quite boring recently so I urge everyone to start bickering again. Give me more blogging material! PLEASE!!!

  • The amazing Storm botnet

    I originally heard about the storm worm/botnet about 6 months ago but wrote it off as another b.s. botnet used by spammers for mediocre spreading of email. Recently I saw some newer articles and started looking into it again. This is when I realized how diabolical, beautiful and well crafted of a worm this beast actually is.

    Originally discovered in early 2007, the storm worm was thought to just be another worm that spread randomly infecting machines via e-mail. Upon further investigation, experts realized that this worm was something much more dangerous than a basic worm infecting machines. The storm worm uses an exploit in Windows XP to propogate to machines. No surprise there.

    The storm worm is actually multiple different programs rolled into one. It is actually a massive well crafted botnet consisting of anywhere from 160,000 to 50 million machines total. Recently, security experts have developed spiders to crawl the botnet and place the estimate more towards 160,000 computers rather than several million. Along with worm propogation the botnet also performs DDoS attacks, spamming, command and control servers, an e-mail address stealer along with many other duties.

    An interesting attribute that the botnet possesses is resistance to probing and inspection, almost like a defensive barrier that reacts to any outside intervention. Upon scanning and/or crawling the botnet, experts found that the botnet instantly recognizes that someone is trying to inspect it and retaliates with a DDoS attack. Whether this is an automated process or is being controlled by a user is unknown, although experts assume that it is the former. A very innovative feature indeed.

    With enough processing power to rival most of the worlds supercomputers it is a scary idea that such a resource is being controlled by criminal intent. When the botnet does commit a DDoS attack, it contains enough firepower to take an entire country offline. To quote wikipedia, "The webmaster of Artists Against 419 said that the website's server succumbed after the attack increased to over 400 gigabits per hour of data, the equivalent of over 170,000 ADSL-connected machines". This is an amazing amount of bandwidth and a scary prospect indeed.

    The botnet operates on a modified version of eDonkey's peer-to-peer networking which makes it almost impossible to take the botnet offline. Just like file-sharing p2p networks, no matter where you attempt to disassemble the network there are always other machines to take the place of patched ones.

    Only specific portions of the botnet are dedicated to certain tasks. A small portion provides DDoS attacks, another portion is strictly for spreading the worm to other machines while an even smaller portion is used as command centers to spread commands to the dormant machines.

    So you ask why can't you just find out where the commands and updated virus packages are being sent from? Good question. The controllers of the botnet are using a constantly changing DNS technique called "fast-flux", this allows the host machines to be almost impossible to find. Couple that with the fact that almost all communication within the botnet is encrypted and one can see the difficultly in analyzing such a beast.

    There are speculations that the size of the botnet has recently decreased but it still remains a very real threat to the internet as a whole. Especially being in the hands of criminals. I am considering setting up a dummy box to purposely get infected to "play" with the worm so to speak. Although, this could very well mean the death of my cable connection =)

    Posted Mar 16 2008, 09:45 AM by schambers with 4 comment(s)
    Filed under:
  • PTOM: The Single Responsibility Principle

    After Chad and Ray I followed suit as well and am doing Pablo's Topic of the month post on the Single Responsibility Principle or SRP for short.

    In SRP a reason to change is defined as a responsibility, therefore SRP states, "An object should have only one reason to change". If an object has more than one reason to change then it has more than one responsilibity and is in violation of SRP. An object should have one and only one reason to change.

    Let's look at an example. In the example below I have a BankAccount class that has a couple of methods:

       1: public abstract class BankAccount
       2: {
       3:     double Balance { get; }
       4:     void Deposit(double amount) {}
       5:     void Withdraw(double amount) {}
       6:     void AddInterest(double amount) {}
       7:     void Transfer(double amount, IBankAccount toAccount) {}
       8: }


    Let's say that we use this BankAccount class for a persons Checking and Savings account. That would cause this class to have more than two reasons to change. This is because Checking accounts do not have interest added to them and only Savings accounts have interest added to them on a monthly basis or however the bank calculates it.

    Some people may say that the class would even have 3 reasons to change because of the Deposit/Withdraw methods as well but I think you can definately get a little crazy with SRP. That being said, I believe it just depends on the context.

    So, let's refactor this to be more SRP friendly.

       1: public abstract class BankAccount
       2: {
       3:     double Balance { get; }
       4:     void Deposit(double amount);
       5:     void Withdraw(double amount);    
       6:     void Transfer(double amount, IBankAccount toAccount);
       7: }
       8:  
       9: public class CheckingAccount : BankAccount
      10: {
      11: }
      12:  
      13: public class SavingsAccount : BankAccount
      14: {
      15:     public void AddInterest(double amount);
      16: }


    So what we have done is simply create an abstract class out of BankAccount and then created a concrete CheckingAccount and SavingsAccount classes so that we can isolate the methods that are causing more than one reason to change.

    When you actually think about it, every single class in the .Net Framework is violating SRP all of the time. The GetHashCode() and ToString() methods are causing more than one reason to change, although you could say that these methods are exempt because they exist in the framework itself and out of our reach for change.

    I'm sure you can come up with a lot more instances where you have violated SRP, and even instances where it just depends on the context. As stated on Object Mentor: "The SRP is one of the simplest of the principle, and one of the hardest to get right".

    Here is a link to the SRP pdf on Object Mentor for more information.

    Posted Mar 15 2008, 09:06 AM by schambers with 14 comment(s)
    Filed under:
  • Orlando Code Camp Presentation

    I will be doing a presentation at the Orlando Code Camp on next Saturday on March 22nd on Continuous Integration with TeamCity.

    I will be mainly cover the topic of Continuous Integration and how teams can benefit from it, then I will show how TeamCity works and dive into some of the details with this great tool. JetBrains just released 3.1 which improved TeamCity in various ways.

    If you are in the Orlando area you should definately try to get to the code camp. There is a lot of great topics lined up.

    Hope to see you there!

  • Separating Subversion Repositories using svndumpfilter

    About a year ago I setup a Ubuntu machine on an old P2 400 at home to use as a subversion repository. At the time I created one repository to house all of my projects. Over time I was adding more and more projects to it all under one master repository path. This was fine when there was 2 or 3 projects, but after growing to about 15 different projects, performing selective dumps and repository maintenance in general becomes a little cumbersome. I recently decided to break out the large repositories into their own repositories under the same subversion path (/var/svn/project). The original large repository was located at (/var/svn/repos).

    The idea here is that we will first dump the entire repository, and then pipe the output of the dump command to svndumpfilter which will extract only the path that we want. These two commands together is all that is needed to perform selective filtering of paths within a subversion repository and then dump the resulting output to the project.dump file. Unfortunately the svndumpfilter can only take either include or exclude in a command but not both, this limits it's usage in advanced scenarios, although it will work for what we are wanting to do here. Easy enough.

    With some piping we can perform all of this in one step:

    sean@svnbox:/var/svn$ sudo sh -c 'sudo svnadmin dump /var/svn/repos | svndumpfilter include projectfolder > project.dump'

    The reason for the sudo sh -c '' part, is so the piping of output of dump can be directed to master.dump with superuser permissions. In ubuntu everything is done with sudo instead of switching to root using su, therefore the first part of the command is evaluated using sudo, but the output being piped is evaluated using privileges of the shell. To make a long story short, if you are using ubuntu, you need to execute the command in it's own context thus, wrapping the command in it's own shell. If you were using any other distribution you could first switch to a root shell using su, then do the above command with the sh part.

    Now we can create the new repository, and load our filtered dumpfile into the new repository

    sean@svnbox:/var/svn$ sudo svnadmin create /var/svn/project | sudo svnadmin load project < project.dump

    The only thing that stinks now, is that since the single repository had a folder for each project, the project.dump now has a single folder in the root that is named project. To fix this, you just need to move your branches,tags and trunk folders into the root manually using svn mv or with tortoisesvn.

    In my case, I also had to edit /etc/apache2/mods-enabled/dav_svn.conf in order to accomodate the seperate repositories by adding the following:

    # from /etc/apache2/mods-enabled/dav_svn.conf

    # Remove/Comment out SVNPath
    # SVNPath /var/svn/repos

    # Added SVNParentPath
    SVNParentPath /var/svn

    SVNParentPath tells apache that there are multiple repositories hosted under /var/svn and that should be considered the root of your <Location> tag in the dav_svn.conf file. Clear as mud?

    In the future I will definately think twice about creating everything into one master repository, at the time I was just learning subversion and got started the quick and dirty way. In some cases however, it may make sense to have everything under one repository rather then break it out seperately.

    Hopefully this points someone in the right direction. Most of the above is documented very well in the SVN Book, so finding documentation on the above procedures and svndumpfilter should be easy.

  • SSIS Frustration? Enter Pentaho

    For awhile now I have been wrestling with SSIS. I don't like it at all so much to the point that the majority of my nightly packages are still on SQL 2000 as I have been unsuccessful in porting them to SQL 2005 SSIS.

    A little while ago I went searching for alternatives. There are quite a few out there, some having very good reviews. I don't have a list of what ones I looked at as this was a couple of months ago. The one that did stand out was Pentaho. Not only does it do everything and more than SSIS, but specific verions are available as open source. Namely, the Pentaho Data Integration is available as open source. This is the main ETL tool that they have and is written in Java. It is very mature and has a wealth of documentation that accompanies it. This was the deciding factor for me.

    Originally I was using RhinoETL, but the only problem was the lack of documentation. This was ok for simple tasks, but once I had to do more complex data processes, and my lack of knowledge with boo it became more difficult to stay with RhinoETL. Ayende has a great tool, it just needs to simmer for a little while I think. I would definately consider going back once it has matured a little more.

    In addition to the great documentation, Pentaho Data Integration also has a visual designer for creating data workflows. Here is one screen shot of a simple process that exports to a csv, uploads to a remote FTP and then send's an e-mail upon success or failure of the task.You can see a few of the tasks available to you on the left sidebar.

    Everything in Pentaho is in a propietary Package Repository on the server so if you mess up an export you can rollback the repository to previous versions. Very nice feature!

    Here are some more screenshots of the interface:

    Very basic export with email

     

    E-Mail configuration window:

    Options for attaching logs to the e-mail to send:

    This is just barely scratching the surface of the processes you can perform with this tool. The Data Integration server and clients are all available under open source liscences. As well as access to the forums and all the accompying documentation.

    I will post more on the topic later. It has just been a very helpful tool and I think other people need to see some alternatives to SSIS.

  • What happened to you've been HAACKED?

    I normally don't write blog posts directly at one person. I don't like to be confrontational, and I have professional courtesy. That being said, please take this post as constructive criticism rather than being negative.

    Over the last couple of months I have noticed a steady decline in the broad coverage of topics and knowledge put forth from your blog Phil, With recent posts such as Blocking Direct Access To Views in ASP.NET MVC, ASP.NET MVC Update, Testing Routes In ASP.NET MVCASP.NET MVC Design Philosophy; I am more than a little disappointed with how biased the topics are. Not all of your posts are about ASP.NET MVC, but a large majority are. More then half of them in the last couple of months.

    I understand that you are a new Microsoft employee and are excited about a new framework that you are working on and are trying to get feedback from the community. I am not so much disappointed in your blog as I am with Microsoft. It is clear that Microsoft has created a magnificent MVC framework and at the same time, played their cards right with the preview release of ASP.NET MVC and got the right people to spread information into the .NET community through various mediums. It was played very nicely I must admit.

    Now, Phil's blog has more subcribers than probably every single blogger on LosTechies combined. I think it was around 8000 subscribers the last time I looked. I know that before I got into a lot of open source frameworks and contributions, one of the first blogs I started reading on a regular basis was Phil's. This was because of MVC oriented posts years ago, TDD related posts as well as content about SubText, open source etc... I wonder if a lot of other developers go down the same route and find the same blogs. If so, then I question the motivation behind these posts. This is a little extreme however as I would never presume to say that Microsoft is asking you to make these posts Phil, but this I do not know. Please correct me if I am totally wrong of this presumption.

    I'm sorry Phil, I couldn't hold it in any longer and I feel like I need to vent on this. I am frustrated that yet another avenue for great agnostic content from the open source community has now been dominated by Microsoft tools and frameworks. It's nothing against you and I still plan on reading your blog. I will admit however that when I see posts appear on "you've been HAACKED!", I do not have the same enthusiasm and excitement at the prospect of another post from your blog that I used to.

    Now, with constructive criticism you need to offer a solution otherwise there is nothing to construct on. So my constructive criticism is this: Blog about what you think is most relevant but try to do so without being biased. I know probably all you are working on is ASP.NET MVC, but perhaps you can do more MVC agnostic posts rather then completely gearing your blog towards Microsoft related content.

    As I said at the beginning of my post, I really don't like posts targeted at one specific person but I really feel like someone had to say something. Maybe I am way out in left field but I had to vent some of this.

  • How can Open Source Software compete?

    I admit, that title is misleading and intriguing at the same time.

    I recently received a copy of Visual Studio 2008 compliments of Microsoft and a fellow colleague. Thanks Joe! After installing Visual Studio and playing with it for awhile I took a look through the other contents of the packaging. There was an informative pamphlet with factoids about the 2008 suite of products (Server, Studio and SQL). Along with this was a print out thanking me for trying 2008 and making note of the "Biggest launch event of 2008". After going to http://www.heroeshappenhere.com/ and browsing through what seems more like an agenda for a major rock tour it got me thinking enough to post about it.

    Here is this extremely large orchestration of marketing information steamrolling across the United States. Many dates have two cities on the same day, and all about 3 products from Microsoft. I am flabbergasted by how massive of a marketing engine Microsoft is commanding. I heard about launch events in the past, attended a couple in Orlando here and there but after checking out that website it is amazing as to how much content they are pumping into the community in a single day. They probably have more technology and sound equipment than a Kiss concert and a NASA shuttle launch at one of these things. All of this for computer software. This is amazing to me.

    It goes to show that Microsoft is gaining more developers and more steam each and every session at each and every one of these events. How in the world can Open Source alternatives EVER hope to keep up with this momentum or even surpass it?

    Simply put, It cannot.

    There will ALWAYS be more developers that are aligning with Microsoft tools and frameworks then any other open source alternative hands down. I don't care how easy to use your open source tool is, or how useful it is to the community or how good the documentation is. The bottom line is that Microsoft is simply playing with larger numbers. Now, this is a prime example of quantity over quality. Just because they are feeding 80% of the development community doesn't mean that it's quality, not by any measure. Most common developers are still hard coding SQL statements or creating C# applications with wizards. I will probably get blasted for that last statement but I'm sorry, it is a fact and quite sickening to see. The interesting part about the impending nasty comments is the fact that because Microsoft has a much larger following that certain developers, not all but some, will defend Microsoft blindly without any measure of comparison. That part is almost as amazing to me as the massive launch event that gets more attention then some open source projects get in their lifetime. Bottom line is, if you are reading this or are subscribed to the LosTechies feed you probably have a good idea of the slew of other alternatives out there to Microsoft and you know as well as I do that there is no possible way our kick ass open source tools can compete with Microsoft on their level. Our only hope is to show them the path, continue our meditations and hope that they will too become enlightened. Such is the path of the Bodhisattva :)

    This is definitely one of my more frustration driven posts but I'm sick of walking on egg shells around these crowds. Now if you will, please blast away just watch the language please.

  • Presenting to Students

    It has been an extremely long time since I posted last. I apologize to everyone and I promise to get back in the groove soon. I have an amazing amount of stuff going on lately. Looking to buy a house, planning a wedding, a newborn son and training new people at work and working on two side jobs, needless to say I have been stretched a little thin. There is light at the end of the tunnel though.

    Anyways, The topic of the post is presenting to students. I will be doing a presentation at a high school in the district at work to a class of technology help desk students. These are kids that are pretty much already technology savvy way before the age that we were first introduced to computers. I will be giving them a run-down on programming along with a couple of points that they will be quizzed on at a later date.

    After mentioning this to Joe Ocampo, He noted that high school kids are always interested in game development. I went over the codeplex and downloaded the WickedGames open source game engine and the QuickStart Game engine so I could have some code to show them. The only thing that kinda stinks with the sample code is the fact that I am presenting for VMWare Fusion on my mac and apparently DirectX support in VMWare is pretty lacking at the moment. Either way, I'm sure they have seen running 3d games before so I will show them the code and go into a couple of different topics. 

    Some of the other topics I will be presenting are along the lines of:

    • The history of programming, giving a quick timeline of programming languages
    • The cycle of developing a computer program with Agile Methodologies
    • Programming techniques such as TDD/BDD
    • How to learn programming with college, self learning and improvement
    • Other topics TBA

    After thinking about it for awhile I noticed that it was hard for me to describe how I got to the point I am at now. Every person follows a different learning path proceeding forward and it's hard to describe. I thought it might be easy to stress that every person learns at their own pace in their own way and then tell the students the path that I took to get where I am currently at in the learning process. Above all, I want to stress an importance on constant, continuous learning as this is the key.

    What does everyone else think of trying to describe the entire art of programming from languages to methologies in a little over an hour and a half without making their heads spin? =) 

  • Code Coverage

    I usually don't post something I've read but this one made me crack up. You guys have got to read this one!

    Code Coverage Nazi

    Cheers!

  • Being "The Computer Guy"

    This is a break from the usual developer oriented posts but I have been extremely busy lately with getting ready to launch StuntJuice in the next couple of days. I will do another posting on that later in the week. In a couple of minutes of downtime I churned out this post to just vent really. After removing more spyware in the last 2 months than most people do in a year. I'm happy to get through it with my sanity. I read this post at the DailyWTF and laughed so I figured I would share my experiences in a blog post.

    Frequently, I receive exasperated phone calls about a computer malfunctioning or someone having a "trojan" as I am sure most of my tech oriented readers do as well. I thought it would be a good time to outline the methods I go through with each virus infected spyware computer that I come across in hopes in sharing methods and/or tools of destruction of these horrible excuses for computers.

    Over the last couple of months the word got out at my girlfriends work that "I know computers". They have known this for awhile but since Aidan has been born all of the office staff at her work bought him tons of clothes and baby stuff, and figured it would be a good time to ask for much needed help from "The Computer Guy". I can't say I blame them after seeing the state of some of the machines I repaired.

    Let me start off first by saying that I very much dislike working with proprietary machines. Each manufacturer bundles a heap of junk software on every single machine and removing that software alone takes a couple of hours. I have found the absolute worst culprit of this is HP with Gateway in a close second place. Sony is not too bad but they still put junk on there all the same. Couple this with the fact that no one ever gives me the original disks that came with the computers so I can reinstall their OEM copy of windows if need be. I suppose asking for the disks that came with their computers is like asking someone where Jimmy Hoffa is buried.

    So over the last 2 months I have repaired about 7 machines. One of the machines she gave back again because I didn't get everything off of it and she was still getting popup's. At this point I have repeated the process below so many times I could do it in my sleep. If anyone please has improvements or other tools you find make this process go faster please let me know! There has got to be a better way =)

    Here are the steps I usually take when getting a horrible machine in the door begging for help.

    1. Uninstall all of the bundled software that I know for a fact they don't even use. I leave the software they might use till later so I can ask them if they actually use it or not. This is usually WordPerfect and the like.
    2. Depending on how bad the machine is at this point I will usually start by looking at the processes running and start killing them one by one through msconfig until I get the CPU and memory back to a manageable state.
    3. Once the processes are back under control I run all the windows updates. Amazingly a lot of these computers have NO windows updates. That's right...NONE. I mean I can't blame the user for this but the windows update stuff should be enabled by default. It's horrible to see this. Some of the images from the computer manufacturers have got to be years old when the machines are only 1-2 years old. Definitely no excuse.
    4. With my handy 8gb thumb drive I install Avast! Antivirus, AdAware and SpySweeper. Avast runs really well and is 100% free. If they have Norton Antivirus or McAfee and their subscription is expired I just uninstall it. I find that Norton and McAfee are complete hogs and I just don't even mess with them.
    5. By this point I have gotten all the viruses off with Avast and hopefully all the spyware. I make sure there is no add-ons installed in IE and make sure that IE7 is installed which should have been done at the end of the windows update process.
    6. I surf the web on the machine for a bit making sure there is no strange processes popping up or popup's. If I am still having problems at this point and there is still spyware on the machine I usually call up the person and tell them I am going to wipe and reload the whole machine and if they want me to save anything off of it. I suppose I could try to get rid of the spyware remnants but usually at this point I just don't care about their data that much. I know it's horrible to say but I really dislike wrestling with spyware. They should be doing backups in the first place anyway's =P

    I have realized lately that spyware is the largest epidemic on the average user's machine. We even have pieces of spyware popup on the school district machines where all our users and locked down very tight via group policy so I am amazed that these guys can find holes when windows is locked down as tight as we have it. This has got to be the most aggravating thing in the world for an average user that doesn't know how to fix it and has to take the computer to a shop where they are charged hundreds of dollars for a process that takes a little over 2 hours. It's highway robbery all around. All the machines I recently fixed I didn't charge any of them a dime for. I felt bad for them and each one of the people bought my son a bunch of gifts for the baby shower. Two of the ladies insisted on giving me money and when I refused they bought me a Heineken Mini Keg and a case of Miller Lite. I told them that was better than cash =)

    Anyone like to share their experiences? I know there has got to be a couple of good ones out there. =)

  • Evaluating TeamCity as a CC.net Replacement

    Over the last week or so I have installed TeamCity at home and at work to replace CruiseControl.NET. My interest was originally sparked by this posting by Aaron at Eleutian. After playing with TeamCity for a week I must say I am very impressed.

    First and foremost I was getting tired of how difficult it was to setup a new project in CruiseControl. It required a lot of steps and was full of hair pulling and screaming at the monitor. TeamCity eliminates all of this by making the whole process amazingly easy. This comes from the fact that they have pretty much included everything to setup in a 7 step process from start to finish.

    You have a number of different options when it comes to build runners. TeamCity will automatically tag your builds with build number/svn revision number. It has support for all the major source control systems including subversion and vss. One really neat feature is the introduction of build agents. Unlike CruiseControl, you can have multiple other servers that are "build agents". Once a build is triggered any of the compatible build agents will come in and begin compiling your code. By default the server that TeamCity is on is the only build agent but you can easily add more to spread the load of building your projects. The free version of TeamCity only allows for 3 build agents but liscences for more build agents are only $300 each. Not too bad.

    All of the cool options and features aside, the real power comes from the amount of reporting you can get out of this tool automatically with minimal effort. Here is a screenshot of the statistics pane which gives you an overview of all builds of a specific build configuration of a project.

     

    Here is another screenshot of an overview of what changes I have made to the project recently. This part is really neat as it integrates with your source control system. There is a user setting where you set what your source control username is and TeamCity automatically pulls the checkins for your account and compiles them in a tidy little list of changes.

    Another cool feature is the ability for TeamCity to compile VS 2008 SLN files. There are runners included with TeamCity that will also build VS 2005 SLN files. This way you are not obligated to use MsBuild if all you want to do is build a solution file. This makes life a lot easier. I was already using the nant msbuild task so this is a moot point for me, but I'm sure other people will find this part interesting.

    To get your test data into TeamCity all you need to do is just add the test runner element to your build runner. TeamCity will detect that you are running tests and automatically pick up the output and include it in the report. In addition to this, TeamCity will show your running tests as they are being executed through the web interface.

    Getting code cverage reports into TeamCity is a little more difficult. You can include custom reports into TeamCity by reading this link here

    TeamCity comes with a number of different notification utilities such as a windows tray notifier, visual studio plugin, jabber notifications and a lot more. I haven't even begun to dig into all the features in TeamCity. What I have mentioned here is just scratching the surface. Definately check it out if you are tired of poking around in xml configuration files for hours on end.

  • Dealing with RSI properly

    Over the last two weeks I have been having bad symptoms of RSI and Carpal Tunnel Syndrome. Specifically in the right hand more so than the left. This is almost surely from the mouse.

    I am going to share what I have found out after doing some research on the topics as all programmers should treat the symptoms of RSI as serious. This is probably the one thing that could end your career as a programmer and the symptoms should not be ignored for any reason. I have an appointment next week to visit my doctor and start physical therapy.

    Over the last year or so I have noticed waking up at night with numbness in my right hand and figured I was just sleeping on it wrong. This was the only warning sign I had up until two weeks ago. One night two weeks ago I awoke from an amazing amount of pain in my right hand. I ran some cold water over it for a couple of minutes to get it to stop hurting so much and went back to sleep. The next day I noticed that my index, thumb and middle finger on my right hand were tingling on and off. After some brief research I found that these were common symptoms of Carpal Tunnel. In addition to that I now have burning sensations in my knuckles/joints and stiffness in my forearm and wrist.

    Now, Carpal Tunnel is only one affliction in a family of problems that is RSI (Repetitive Strain Injury). Some of these include tendonitis, arthritis, carpal tunnel etc.. So before you jump the gun and assume that you have Carpal Tunnel, visit your doctor to get a sure answer. 

    First and foremost, take a break. At my peak over the last 2 or 3 months I have been spending about 14-15 hours a day at the computer typing away and coding. The very first thing I did was take a 2 day break over the vacation and iced my hand all the time. This helped me a lot and brought down a lot of the swelling.

    It seems the steps you take from here is where there are a lot of different options and opinions. For some links on information that I have gathered thus far take a gander at my RSI tag at Delicious. That's just some of the information I've gathered with a little bit of research. The two oldest links are by Phil Haack and Jeff Atwood with great information on what options you have with dealing with it. Phil Haack deals with RSI while Jeff Atwood fortunately does not.

    Some of the things I have done to help with my symptoms are simple things at the time being. The first thing I did was switch my mouse to my left hand. It felt very awkward at first but I am getting much better at finer control with the left hand. This helped a lot as I only had to use my right hand for typing. Next, I purchased a decent wrist brace from walmart to help stabilize my wrist which I haven't used that much as I switched mousing hands.  I purchased some Ibuprofen to help the swelling in my right hand and to help with the inflammation. I also got a stress ball from work that I have been using constantly to help strengthen both hands. Icing the wrist/hand at the end of the day works wonders for me and definately helps for sleeping and such.

    The most major change I made in the attempt to stop any further problems in both hands was switch to the dvorak layout. This has been tricky as it is very hard picking up a new keyboard layout. This is a very logical way to go however. Simply put, your hands do less traveling with the dvorak keyboard than the qwerty keyboard. I have been practicing an hour a day for the last 5 days and am getting pretty good. For any long periods of typing such as this blog post I switched back to qwerty as it would have taken me an hour to type out this entire blog post. For everything else though I have been using dvorak. I got a new flat apple keyboard from work and swapped all the keys as well as swapped all the keys on my macbook pro for the new layout. I think this is the first time I have gone back to qwerty in about 3 days. I've heard it takes about a month to pick up the new layout. So far so good.

    In closing, if you have any symptoms at all in shoulders/back/hands etc..., take them very seriously. Do some research and then see a doctor. There is no penalty for being careful. If symptoms go unchecked, the damage can be permanent and irreversible. Don't take anything I have said here as gospel or anyone else for that matter. Do your own research and seek a specialist. The industry we are in doesn't have many show stoppers, but this is certainly one of them. 

  • What I do

    Here is my response to Jason Meridth tagging me.

    I'm a Senior Programmer/Analyst for Flagler County School District in Flagler County Florida. Flagler county is situated in North East Florida, about 30 miles north of the famous Daytona Beach.

    Even though my title says "Programmer", I am definitely a multi-roled employee of the school district. My main duties include programming, DBA, graphic designer, Network Technician and a couple of other things here and there. Mainly I do all the database work and all the development. I am the sole developer for the school district and the sole DBA as well. My language of choice is C#, although I am starting to do more RoR development for smaller applications that have shorter life cycles.

    The biggest project I maintain is our public website which can be found at http://www.flaglerschools.com. This website is built with Castle MonoRail, Windsor and NHibernte on the back end. It allows every teacher/department and school in the district to maintain their individual website through an easy to use CMS interface. For the content editor I am using TinyMCE. We have about 600 teachers on the portal at this time and about 10 schools. We just launched it this past August. It took myself about a full 5 months of development to create it.

    Along with the public website there are a number of internal applications I developed and maintain. Some of these include a Timesheet logger for pay roll, a number of tools for the technology department uses to help manage active directory and our large user base. I frequently build reports and applications for various other departments in the district.

    For source control I use Subversion. I was using VSS about a year ago but since going to svn, I couldn't imagine going back. I have an ubuntu linux server that I am using for my apache/subversion server. Another linux server is my production RoR server that is running nginx/mongrel.

    Working for a school district definitely has it's perks though. Due to the fact that the district is not driven by profit opens a whole myriad of opportunities for me in the development world. First off, I can use any open source technology I wish without question. Management actually encourages me to use open source before purchasing tools as it matches well with education and as long as we have knowledgeable staff to support it, it just makes more sense. In addition to that, I can pretty much ask for anything I need (books, software, training) and get it as long as I supply a good reason for it.

    I work with about 20 fellow geeks in my department whom are mainly techs at each of our remote sites. I work at the main district office along with our network routing guy and our GP/AD administrator and a couple other office staff.

     

    Here are some of the tools I use on a day to day basis:

    • NAnt
    • CruiseControl.Net
    • Subversion
    • NUnit/MbUnit (newer projects)
    • RhinoMocks
    • Castle Project (MonoRail, Windsor/MicroKernel)
    • ReSharper (who doesn't?)
    • jQuery/Prototype/Scriptaculous (moving everything towards jQuery)
    • Notepad2
    • Pentaho Data Integration (really neat tool!, instead of stupid SSIS)
    • MediaWiki (online school board policy)
    • VisualSVN (awesome tool!)
    • VS 2005/SharpDevelop for IDE's
    • VMware Fusion on my Macbook Pro
    • Firefox w/ Firebug (couldn't live without it for CSS/AJAX debugging)

    Probably forgetting a couple but can't think right now.

     

    In turn, I tag the following:

    Bill McCafferty

    Colin Ramsay

    Chris Patterson

     

    What would you say you do here?

More Posts Next page »
Copyright Los Techies 2007. All rights reserved.
Powered by Community Server (Commercial Edition), by Telligent Systems