Dungeons and Dragons outlawed for outlaws

By Alan S. at January 27, 2010 07:09
Filed Under: Gaming

I found this article on the web and had to post it. Some of the arguments presented are laughable… Promotes gang activity? Well, it is a quest based game with parties of varying talents. Although I haven’t found a compendium for Crips, Bloods, and Aryans.

 

MADISON, Wis. — A man serving life in prison for first-degree intentional homicide lost his legal battle today to play Dungeons & Dragons behind bars.

 

Kevin T. Singer filed a federal lawsuit against officials at Wisconsin's Waupun prison, arguing that a policy banning all Dungeons & Dragons material violated his free speech and due process rights.

 

Prison officials instigated the Dungeons & Dragons ban among concerns that playing the game promoted gang-related activity and was a threat to security. Singer challenged the ban but the 7th U.S. Circuit Court of Appeals on Monday upheld it as a reasonable policy.

 

dnd35 Dungeons & Dragons players create fictional characters and carry out their adventures, often working together as a group, with the help of complicated rules.

 

Singer, 33, has been a devoted player of the fantasy role-playing game since he was a child, according to the court ruling. After the ban went into effect, prison officials confiscated dozens of Dungeons & Dragons books and magazines in his cell as well as a 96-page manuscript he had written detailing a potential scenario for the game that players could act out.

 

Prison officials enacted the ban in 2004 after an inmate sent an anonymous letter expressing concern about Singer and three other inmates forming a "gang" focused around playing the game.

 

Singer was told by prison officials that he could not keep the materials because Dungeons & Dragons "promotes fantasy role playing, competitive hostility, violence, addictive escape behaviors, and possible gambling," according to the ruling. The prison later developed a more comprehensive policy against all types of fantasy games, the court said. The appeals court said the prison's policy was reasonable and did not violate Singer's rights.

 

"After all, punishment is a fundamental aspect of imprisonment, and prisons may choose to punish inmates by preventing them from participating in some of their favorite recreations," the court said.

 

Singer was sentenced to life in prison in 2002 after being found guilty of first-degree intentional homicide in the killing of his sister's boyfriend. The man was bludgeoned to death with a sledgehammer.

 

Department of Corrections spokesman John Dipko said the department was pleased with the decision and will continue to enforce rules that are designed to maintain a safe environment.

 

Singer's court-appointed attorney, W.C. Turner Herbert of North Carolina, also did not immediately return a message seeking comment.

Bookmark and Share DotnetKicks dotnetshoutout

What’s new in Visual Studio 2010

By Alan S. at January 27, 2010 04:36
Filed Under: Web / Software Development

Just one year ago I upgraded Visual Studio 2005 to Visual Studio 2008. There were a number of enhancements that are ‘behind the scenes’ and some notable improvements to intellisense and AJAX, which motivated me to finally upgrade. Well, that and support for .NET 3.5. But it seems that just as soon as I upgraded I started receiving information about Visual Studio 2010.

 

I took some time to research the product (still in Beta) to see if the list of changes was significant enough to warrant me spending another couple hundred bucks on yet another upgrade. Here’s some of the things I found.

 

Code Editor

The new Code Editor makes code easier to read. You can zoom in on text by pressing CTRL and scrolling with the mouse wheel. Also, when you click a symbol in Visual C# or Visual Basic, all instances of that symbol are automatically highlighted.

 

Better tools for Web Development

To me, this is reason enough to upgrade. The publishing and FTP portions of Visual Studio past were a far cry from what Dreamweaver offers. Now with enhanced publishing and rebuilding web.config on the fly, it looks like they have finally caught up.

 

  • Creating Web packages

    The Web Deployment Tool, also known as MSDeploy, enables you to package your Web application for deployment to an Internet Information Services (IIS) Web server. A Web package is a .zip file or a folder structure that includes everything a Web server needs to host your application. It contains Web content, IIS settings, database scripts, components, registry settings, and certificates. The Web Deployment Tool has been integrated into Visual Studio and enables you to create Web packages with one click.

  • One-Click Publish

    You can now publish to a server by using the Web Deployment Tool, FTP, folder copying, or FrontPage Server Extensions in one click. Visual Studio stores all the setting information, such as publish method, server information, and user credentials.

  • Web Configuration Transformations

    You can now configure your project to transform the web.config file during deployment. When you deploy the project, the settings in web.config automatically match the settings on your debug, staging, and production servers.

  •  

    It also includes something completely new:

    Visual F#

    Visual Studio 2010 includes F#, a new .NET Framework language that supports functional programming and traditional object-oriented and imperative (procedural) programming. F# combines the succinct, expressive, and compositional style of functional programming with the runtime, libraries, interoperability, and object model of .NET. In other words, you get the best of both paradigms.

     

    Right now I don’t have the time or patience to try another development product so an actual ‘hands on’ review is not coming anytime soon. For now, I’ll have to rely on what I’m reading in order to form an opinion. I think I’ll also wait for the product to go through it’s first service pack release before upgrading. Maybe by then they’ll have the kinks worked out.

    Bookmark and Share DotnetKicks dotnetshoutout

    Hacking it: Old Skool Vol. 1

    By Alan S. at January 25, 2010 16:40
    Filed Under: Computers, Marketing

    There are times when I tell someone much younger than me about some of the trials and tribulations of early Internet life.  You know… before DSL and cable modems, before Wi-Fi, before DVD’s. Sometimes they look at me like I was making all of it up just to amuse myself.

     

    Let me start with a little background. I have been a Software Engineer for almost 25 years. I have had many titles and worked for all sized companies, from fortune 100 to mom-and-pop. I was around when the Internet ‘happened’. When this weird, wonderful technological gift was bestowed upon humanity. I’m also old enough to know, for a FACT, that Al Gore did NOT invent the Internet. Ah, those glorious days of my youth, watching as computers progressed from 286 to 386 to Pentium… Watching as hard drives fell in price from a $695 10MB drive to a $60 1TB drive. But I digress.

     

    Such was my early involvement with the Internet that I hold the dubious distinction of building and installing the first Internet accessible dial-in server at the University of Phoenix for student communication. Prior to that they had to use a dial in Bulletin Board system called ALEx (Apollo Learning Exchange). I left there in ‘95 to dedicate my efforts to Internet related activities and joined up with a man who wanted to start his own dial-up ISP. It reached it’s limit at about 1000 subscribers and was giving Primenet (our biggest local competitor) a run for their money. So, with that said, I believe I am pretty well qualified to speak on the historical events and their significance / relevance, peppered with a little humor, sarcasm, and embellishment.

     

    Thus was born the thread Hacking it: Old Skool. Here I will chronicle some of the pitfalls, surprises, achievements, and flat out failures of various Internet activities. So gather around the campfire and I, the eSource tribal elder, will mesmerize you with tales passed down from Sysadmin to Sysadmin. These are the tales of the life force we call Internet spoken by those who were there to experience it many moons ago… (cue howling wolf).

     

    This first article deals with early attempts at email blast marketing and how the perpetrators would hide their tracks. Remember that in the early days of the Internet, our email programs were barely GUI. They had none of the features you kids enjoy today like spam filters (at least ones that worked) or embedded HTML. They were TEXT with simple links and limited styling. Pornography was a budding business back then and people were looking for ways to get people to click to their site thinking they were clicking on something else. Hopefully the person who clicked was A) A guy, B) Looking for porn anyway, and C) Too unfamiliar with the early browsers to release themselves from the shackles of the endless redirect!

     

    Knowing their dial-up ISP would delete their account if they got complaints against them sending such material, they looked for ingenious ways to send emails, make them look like they are from someone else, and completely wash their hands of them. One such technique was called “The Gullible Server.”

     

    In those early days, ISP’s were generally small shops that, as a group, looked out for each other and tried to help out as needed. There were many servers that had security holes, either by choice or incompetence, that left the door wide open to those looking to take advantage of their kindness.

     

    The Gullible Server involved finding an ISP whose SMTP server had lax security / checking. The email marketer would then create their email with fraudulent or unreliable links and create an email list of recipients. Then the following would occur:

    emailscam

    1) The FROM address would be the actual address of the intended recipient

    2) The TO address would be a bogus address at the domain server they were spamming through (say Fake_Address@nowhere.com)

    3) When the email reached the Gullible Server, it tried to deliver it to the bogus address on their server. It would not be found

    4) Trying to be nice, the Gullible Server would send the email back to the FROM address to let them know it was undeliverable

    5) The user listed in the FROM address receives the email and the nefarious email scammer’s plan is put in action

    6) Some angry users call nowhere.com and complain about receiving offensive unsolicited emails

    7) Clueless admin scratches his head trying to find the user Fake_Address@nowhere.com… No luck

     

    If the admin waited more than a couple of days to check the logs and see what user actually sent the email, they were most likely gone or simply did not exist (the logs, not the user). Remember that drive space was at a premium, so keeping long term records on small capacity HD’s was not a priority or a necessity for small, independent ISP’s.

     

    The scam had several variations as different filters and methods were developed for the email servers to combat this sort of thing. For those early hacking pioneers it netted them some benefit and riches. As the popularity of the Internet grew and ISP’s began having to fight and claw to hold on to their customers, the locks got even tighter and eventually this type of email spamming became a thing of the past.

     

    Now, off to bed you little scamps! I’ll regale you with further tales of Internet past some other time! 

    Bookmark and Share DotnetKicks dotnetshoutout

    Web Marketing Ideas Can Come From Unlikely Sources

    By Alan S. at January 25, 2010 03:01
    Filed Under: Marketing, Marketing

    How often are you beat about the head and shoulders with some web marketing gimmick? I don’t much care for those pages (called squeeze pages) that trap you on that page, unable to click out of the trap without spawning pop-ups and redirects and slide in windows.

     

    The technique has been around forever and in just about every industry, not just the Internet. There was a car dealership in Phoenix that got in trouble for locking customers in the salesman’s office so they were unable to leave when the salesman went out of the room to talk to the ‘manager’. If you’ve ever bought or read any Internet Marketing get-rich-quick schemes, you know that the focus is to get people to a certain page and keep them there until they buy! Then they make you feel like an idiot for passing up the offer (don’t you want to join the exclusive club that makes thousands a day?).

     

    People nowadays are a little more Internet savvy. They steer clear of the Google ads that are obvious gimmicks and look for sites that truly have what they’re looking for. I never understood that sort of black-hat marketing where you click on something because the search engine told you it was what you searched for only to find it’s something completely different. Do these guys really think that someone searching for “Garden supplies” is going to buy car insurance on a whim from their trap ad?

     

    BTW: A lot of those get-rich-quick Internet Marketing courses that promise overnight wealth simply give you the material to start your own get-rich-quick marketing campaign selling the same course you just bought (or similar).

     

    Anyway, let me get to the point (finally!). There is an unlimited number of ways to get people to visit your site without tricking them or resorting to shady tactics. It just takes one original idea that is popularized by Internet users, not Google ads or pop-ups. People that visit, promote, and frequent those sites generate more real and loyal traffic than any search engine ad placement.

     

    dad Case in point, shitmydadsays. What is it? It’s a twitter / facebook account written by a young man who lives with his elderly father. When his father speaks pearls of wisdom, he posts them on Twitter (Example: "Son, no one gives a shit about all the things your cell phone does. You didn't invent it, you just bought it. Anybody can do that."). It’s very addictive. We all have relatives that have reached that age where they no longer care about what they say or who hears it, but this guy took it to the next level. The concept is so insanely simple that the genius of it escapes many who are still trying the unfriendly blast and trap methods. The Twitter account has over 1.2 million… that’s right, million, subscribers. The facebook page has almost half a million fans.

     

    Justin does not have any ads for his site other than the facebook ones. However, if he put these ramblings on a website and posted just a few simple relevant ad links, he would make bank! The traffic to that site just to check out the quotes would be phenomenal, and thanks to word of mouth the site would continue to grow like the Twitter / facebook pages have.

     

    Want proof that this is an Internet marketing goldmine? Check out the posers on facebook and other sites that are trying to horn in on this guys popularity. Again, do these people really think that someone is going to buy a diet pill because they landed on a site they thought was shitmydadsays? I think not.

     

    The last bit of proof that this honest, niche Internet entertainment source is explosively popular is this: They have a book deal and now CBS is in talks to make a show based on this guys postings! I have no idea how they are going to accomplish this because the beauty of the postings is in the colorful language. Congratulations to him and his family. Y’know why, because he did the right way, he built a simple mechanism to get the word out about his dad’s humor without resorting to the dishonest and slimy tactics of Internet marketers.

     

    My point is this… If you want to drive people to your site, give them some actual substance. Drudgereport is a free site that I visit multiple times a day because it lists headlines from dozens of news sources and doesn’t constantly beat me over the head with ‘buy this product now’ BS, pop-ups, or pop-unders. They rely on a few simple ad links that I click on to send a few nickels their way as a thank you for their website’s service. And if you find a site that provides decent content without those tactics, throw ‘em a bone and click their ads just to say ‘Thanks’.

    Bookmark and Share DotnetKicks dotnetshoutout

    Validating email address format on your ASP webpage

    By Alan S. at January 24, 2010 13:42
    Filed Under: Web / Software Development, Marketing

    If you’ve been a web developer for more than 5 minutes you know that you can’t create any type of website without getting a user to enter their email address. Sometimes this is done for marketing purposes or to add them to an email list for subscriptions, but whatever the reason the need is there on almost any website to prompt, validate, and record a visitors email address.

     

    An easy way to do this is with a JavaScript chunk of code that will look at the value the user entered and ensure it adheres to certain rules regarding how a standard email address is formatted. This will not validate that the email is a working account at the domain specified (that’s another post), but it will at least catch user input errors they might not be aware of when entering the address in the field.

     

    Test the code out on our email Format Test Page!

     

    Download the ASP and Javascript code used on the test page here: emailFormatExample.zip (2.48 kb)

     

    This file, emailTools.js, contains several functions that take a passed parameter and check the syntax to ensure it is formatted properly.

       1: function checkValidation(emailAddr) {
       2:     var message = 'OK';
       3:     if (stringEmpty(emailAddr)) {
       4:         message = "Error! There is no input value entered.";
       5:     } else if (noAtSign( emailAddr )) {
       6:         message = "Error! The address \"" + emailAddr + "\" does not contain an '@' character.";
       7:     } else if (nothingBeforeAt(emailAddr)) {
       8:         message = "Error! The address \"" + emailAddre;
       9:         message += "\" must contain at least one character before the '@' character";
      10:     } else if (noLeftBracket(emailAddr)) {
      11:         message = "Error! The address \"" + emailAddr;
      12:         message += "\" contains a right square bracket ']',\nbut no corresponding left square bracket '['.";
      13:     } else if (noRightBracket(emailAddr)) {
      14:         message = "Error! The address \"" + emailAddr;
      15:         message += "\" contains a left square bracket '[',\nbut no corresponding right square bracket ']'.";
      16:     } else if (noValidPeriod(emailAddr)) {
      17:         message = "Error! The address \"" + emailAddr + "\" must contain a period ('.') character.";
      18:     } else if (noValidSuffix(emailAddr)) {
      19:         message = "Error! The address \"" + emailAddr;
      20:         message += "\" must contain a two, three or four character suffix.";
      21:     }
      22:     return (message);
      23: }
      24:  
      25: function checkEmailValid (formField) {
      26:     if( checkValidation(formField) == 'OK')
      27:         return true;
      28:     return false;
      29: }
      30:  
      31: function stringEmpty (formField) {
      32:     // CHECK THAT THE STRING IS NOT EMPTY
      33:     if ( formField.length < 1 ) {
      34:         return ( true );
      35:     } else {
      36:         return ( false );
      37:     }
      38: }
      39:  
      40: function noAtSign (formField) {
      41:     // CHECK THAT THERE IS AN '@' CHARACTER IN THE STRING
      42:     if (formField.indexOf ('@', 0) == -1) {
      43:         return ( true )
      44:     } else {
      45:         return ( false );
      46:     }
      47: }
      48:  
      49: function nothingBeforeAt (formField) {
      50:     // CHECK THERE IS AT LEAST ONE CHARACTER BEFORE THE '@' CHARACTER
      51:     if ( formField.indexOf ( '@', 0 ) < 1 ) {
      52:         return ( true )
      53:     } else {
      54:         return ( false );
      55:     }
      56: }
      57:  
      58: function noLeftBracket (formField) {
      59:     // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN CHECK FOR LEFT BRACKET
      60:     if ( formField.indexOf ( '[', 0 ) == -1 && formField.charAt (formField.length - 1) == ']') {
      61:         return ( true )
      62:     } else {
      63:         return ( false );
      64:     }
      65: }
      66:  
      67: function noRightBracket (formField) {
      68:     // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN CHECK FOR RIGHT BRACKET
      69:     if (formField.indexOf ( '[', 0 ) > -1 && formField.charAt (formField.length - 1) != ']') {
      70:         return ( true );
      71:     } else {
      72:         return ( false );
      73:     }
      74: }
      75:  
      76: function noValidPeriod (formField) {
      77:     // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN WE ARE NOT INTERESTED
      78:     if (formField.indexOf ( '@', 0 ) > 1 && formField.charAt (formField.length - 1 ) == ']')
      79:         return ( false );
      80:  
      81:     // CHECK THAT THERE IS AT LEAST ONE PERIOD IN THE STRING
      82:     if (formField.indexOf ( '.', 0 ) == -1)
      83:         return ( true );
      84:  
      85:     return ( false );
      86: }
      87:  
      88: function noValidSuffix(formField) {
      89:     // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN WE ARE NOT INTERESTED
      90:     if (formField.indexOf('@', 0) > 1 && formField.charAt(formField.length - 1) == ']') {
      91:         return ( false );
      92:     }
      93:  
      94:     // CHECK THAT THERE IS A TWO OR THREE CHARACTER SUFFIX AFTER THE LAST PERIOD
      95:     var len = formField.length;
      96:     var pos = formField.lastIndexOf ( '.', len - 1 ) + 1;
      97:     if ( ( len - pos ) < 2 || ( len - pos ) > 4 ) {
      98:         return ( true );
      99:     } else {
     100:         return ( false );
     101:     }
     102: }

    Create a file called emailTools.js ( or download the sample .ZIP file above ) and place it in your sites root directory.

     

    In your .ASPX file, include a reference to the script file by adding the following line of code, preferably toward the bottom with other parts of your scripts.

       1: <script type="text/javascript" src="emailTools.js"></script>

    Next, add the textbox control to your page that will hold the email address the user enters

       1: <asp:TextBox ID="emailaddr" runat="server" MaxLength="50" Style="vertical-align: middle"
       2:     TabIndex="1" Width="300px" CausesValidation="True"></asp:TextBox>

    After the textbox control code that will contain the email address the visitor enters, you need to add a custom validator. Place it on the form so that if the user enters an address that is invalid, the message shows up on top of or below the email address textbox. This way the user can easily see the text when it pops up and make the necessary corrections. The first validator simply reminds the user that they need to enter an email address in order to continue. The second custom validator is what checks to see if the address is formatted correctly.

       1: <asp:RequiredFieldValidator ID="rfvFullname" runat="server" ControlToValidate="emailaddr"
       2:     ErrorMessage="Please enter your email address" Font-Bold="True" Font-Size="12pt" />
       3: <asp:CustomValidator ID="cvEmail" runat="server" Font-Bold="True" Font-Size="12pt"
       4:     ClientValidationFunction="checkEmailAddr" ControlToValidate="emailaddr" ErrorMessage="Email address is not formatted properly. Please correct." />

    Change the ControlToValidate value to the name of your email address textbox control on the form.

     

    Place a button on your form for the user to press when they are done.

       1: <asp:Button ID="Button1" runat="server" Text="Click to continue" OnClick="OnAddEmail" />

    Notice how the button has an OnClick variable that tells it to run our C# code block called OnAddEmail() and not our validation script? That's because the control will never fire the OnClick event until the validation specified in the CustomValidator and RequiredFieldValidator occurs and everything checks out. In our code behind, we have two functions. One to take care of the PageLoad and set our previous page variable, the second is the actual OnAddEmail function that records the users email and returns them to the page that sent them here. I have placed the code within the ASPX file and not in a separate file, but you can do it either way.

       1: <script runat="server">
       2:     public static string sPrevPage = "";
       3:     protected void Page_Load(object sender, EventArgs e)
       4:     {
       5:         // Save the originating page so we can send the user back whe done
       6:         if (!IsPostBack)
       7:         {
       8:             if (Request.ServerVariables["HTTP_referer"] != null)
       9:                 sPrevPage = Request.ServerVariables["HTTP_referer"].ToString();
      10:             else
      11:                 sPrevPage = "~/Default.aspx";
      12:         }
      13:     }
      14:  
      15:     protected void OnAddEmail(object sender, EventArgs e)
      16:     {
      17:         // Use this function to write the email address to a file
      18:         try
      19:         {
      20:             string sFilePath = Request.MapPath("~/emails/") + "visitor.log";
      21:             using (System.IO.StreamWriter sw = new System.IO.StreamWriter(sFilePath, true))
      22:             {
      23:                 sw.WriteLine(emailaddr.Text);
      24:             }
      25:         }
      26:         catch { }
      27:         Response.Redirect(sPrevPage);
      28:     }
      29: </script>

    Now comes the fun part… Insert the code at the bottom of the ASPX file to call the function(s) in our emailtools.js file that will tell us whether or not the email address is at least formatted OK.

       1: <script language="javascript" type="text/javascript">
       2:     var alreadyChecked = false;
       3:     function checkEmailAddr(sender, args) {
       4:         var retVal = checkEmailValid(document.getElementById('<%=emailaddr.ClientID%>').value);
       5:         if (retVal == true && alreadyChecked == false) {
       6:             alert("Your address appears valid. You will now be taken back to the previous page...");
       7:             alreadyChecked = true;
       8:         }
       9:         args.IsValid = retVal;
      10:     }
      11: </script>

    Now, when the user presses Enter or the submit button, the validation scripts fire. If they fail, they warn the user and lets them fix the errors on the form. Once a valid email is supplied, the name is recorded in the Visitors.log file, and they are returned to the previous screen or you can change the code to take them to a “Thank you” type page.

     

    You may be wondering about the variable alreadyChecked. It is needed because the checkEmailAddr function actually fires twice when the user enters a valid email address… Once for the validation and again for the form submission. This variable ensures our textbox message only gets displayed once.

     

    I hope this example helps and / or makes sense enough to help you with validating some of the user input.

    Bookmark and Share DotnetKicks dotnetshoutout

    Left 4 Dead 2 - Review

    By Alan S. at January 21, 2010 11:55
    Filed Under: Gaming

    I played the original L4D from Valve when it came out… Well, I played the demo version. The game itself was a newer twist on the FPS genre where you act as one of four survivors of a zombie apocalypse. The key is travel with your group (this is key) and get to various locations and cities without the hordes of zombies catching up with you.

     

    Left_4_dead_2pcboxart The game had a good bit of depth in the area of creating different zombie classes with different skills, speeds, and God-awful ways of making you die. This kept the strategy ever changing as you and the other three players tried to formulate a winning play based on the scenario’s terrain, zombie types, and goals. Valve released the Survival Pack months later so that players got the full Versus experience as well as the now-standard timed Survival mode.

     

    When L4D2 came out, my first thought was wow, that was fast. I said that because Valve has a propensity to take their time when it comes to sequels. I got the game and anxiously waited to see if it brought out new dimensions to the game play. It didn’t. Although it had five all new campaigns, this game was more like an aesthetic patch and enhancement of existing features than a whole new type of game. With that said, if you have L4D, keep it and wait for L4D2 to hit the bargain bin (or at least go below $30).

     

    If you have been waiting for an excuse to try L4D2, then the MSRP is well worth the price. It will provide you with hours of single player enjoyment as you master the various levels, weapons, zombies, etc. By all means, please play the single player missions first. It’s not like CoDMW2 in that if you familiar with WWII shooters you can pretty much kick it multiplayer without much more than a couple training missions. L4D2 has five new campaigns and, compared to the first version, has enhanced settings, more modes, and more responsibilities needed to win the level.

     

    Bottom line, if you don’t have it and are a fan of group RPG’s and zombies, by all means get the darn thing! If you have L4D, I would give a solid “M’eh” as to whether or not you should upgrade (at the current price).

    Bookmark and Share DotnetKicks dotnetshoutout

    Is Call Of Duty Modern Warfare 2 A Replacement For Enemy Territory?

    By Alan S. at January 20, 2010 17:47
    Filed Under: Gaming

    I’ll save you some reading time… Heck YEAH! I wasn’t that all excited about loading this game, but now that I’ve mastered it, I’m glad I did.

     

    et About a year and a half ago I was completely absorbed in Enemy Territory. If you haven’t heard of this game, it was the multiplayer version of Castle Wolfenstein. The publisher stopped work on the multiplayer version after sales of the game showed it was less than spectacular. The developers, knowing a good thing when they write it, finished the multiplayer version, Enemy Territory, on their own and released it as a FREE game. It was one of the best multiplayer WWII shooters around and is still going strong many years after it’s release.

     

    Before I found this game, I was addicted to Call of Duty 2. Enemy Territory took the place of that habit and along with my Clan, wreaked online havoc for a couple of years.

     

    But then came Vista, which isn’t a bad thing. I had to upgrade to keep pace with my customers to ensure my development systems matched their production systems. Enemy Territory did NOT run on Vista, even in compatibility mode. It was a bitter pill but I drudged forward. I looked high and low for a replacement but nothing came close, not even Enemy Territory Quake Wars (a futuristic version). I tried other genres with games like Sins of a Solar Empire, but nothing gave that feeling of being immersed and involved like I had with Enemy territory.

     

    codmw2 For Christmas my family got me CoDMW2. I waited a couple of weeks to install it thinking I would just be mildly entertained and then go back to writing my own games out of boredom. But NO, the game kicked ass. Despite a clumsy and cartoony snow mobile riding level, I whipped through the single player version in mere hours. Then I jumped on multiplayer and found exactly what I was looking for. I soon rose the ranks to Master Sergeant and was gaining familiarity with the levels. The perks that are unlocked as you progress make the game so interesting that you can’t stop until you’ve unlocked that damn red dot hack!

     

    Just a note about the levels. It’s the only thing I’m disappointed in so far. The levels (most of them) are ports of old CoD levels with modern skins! Don’t tell me their not. I’ve played enough of the original game to know a retreaded level when I see one. I’m not really complaining because it cut down on my learning curve!

     

    Anyway, this game is definitely a replacement for my old Enemy Territory habit. It worked great on Vista and works great on Windows 7. It’s a game that you can get on and play if you’ve only got a few minutes or an entire weekend. It will be a while before you find yourself looking for a replacement to this great game.

    Bookmark and Share DotnetKicks dotnetshoutout

    Singleton Class – C#’s MVP

    By Alan S. at January 20, 2010 16:15
    Filed Under: Web / Software Development

    What is a singleton class? Well basically it's a class that can only be instantiated ONE TIME within the confines of an applications space. Why is this useful? Well, it's a great place for creating and managing single point code logging functions or holding global data that requires a bit to retrieve.

     

    For example, I wrote a program for a user that read data from an Access database. When the program started, I instantiate a singleton and run a query to get the version of the data (within a table / row). This value is stored in the singleton upon startup. Now, when the dozens of custom reports are run, this information is printed on the header by simply referencing the singleton variable as opposed to running this query every time that value is needed.

    In the example below, I am going to create a singleton class that contains one of my most used functions, WriteToLog.

     

    First, lets create a singleton class in Visual Studio by right clicking the project name in the "Solution Explorer" pane and selecting "Add New Item." Select "Class" and type in a name for your new singleton class (example: LocalEnv). Enter this in the source code window:

       1: using System; 
       2: public class LocalEnv 
       3: { 
       4:     private static LocalEnv instance = null;
       5:     private LocalEnv() {}
       6:     public static LocalEnv Instance 
       7:     {
       8:         get
       9:         {
      10:             if (instance == null)
      11:             {
      12:                 instance = new LocalEnv();
      13:             }
      14:             return instance;
      15:         } 
      16:     } 
      17: }

    Notice how the constructor is private? This means that the class can only be instantiated internally by using the "new" command and referencing it through the instance variable. If an instance of this class already exists in memory, it will simply return the already instantiated instance. If not, it creates a new instance of the class. Be sure to note the differences in the Instance variable and the instance variable (upper and lowercase 'i' versions). They are two seperate things.

     

    Next, we'll need to create a function within our LocalEnv class that will write a message to a log file. In this example, I will assume that this is a website and that we want to write all of our logs to a subdirectory under the App_Data directory (or wherever you want) and that the log filename will be the date the event occurred.

       1: public void WriteToLog(string sBaseDir, string sText)
       2: {
       3:     string sLogFilename = sBaseDir + "/MyWebLogs/" + 
       4:         string.Format("{0:d}{1:d2}{2:d2}.log", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
       5:     StreamWriter myStream = null;
       6:     sText = DateTime.Now.ToShortDateString() + " "+DateTime.Now.ToShortTimeString() + ": " + sText;
       7:     using (myStream = new StreamWriter(sLogFilename, true))
       8:     {
       9:         myStream.WriteLine(sText);
      10:     }
      11: }

    Now, in our .aspx file, we can write any message to the generic text log as follows:

       1: LocalEnv.Instance().WriteToLog(Request.MapPath("~/App_Data"), "A new user was added");

    Whenever we call the function, it will write a single line to the log file in the directory we specify. It will write all log entries into a single file for the day. The result in our log file file (example: c:\inetpub\wwwroot\App_Data\MyWebLogs\20100114.log) will look like:

    01/14/2010 17:54:14: A new user was added

    Bookmark and Share DotnetKicks dotnetshoutout

    PC Gamer’s List Of Top 100 Games Leaves Off The Classics

    By Alan S. at January 20, 2010 15:02
    Filed Under: Gaming

    The kids at PC Gamer posted a list of what they consider the top 100 games then throw in the disclaimer that these are the best games today. They have some from the mid 90's but most everything else is recent visual masturbation. They completely ignored the ground breakers, the innovators, and the pioneers. So, being a gamer that has seen them all since 1982, I’ve decided to add just a few of my favorites from the dawn of computer gaming. These would be on a TRUE list of the top 100 PC Games EVER.

     

    KQtandy Kings Quest (1985) and King's Quest 2 - Romancing the Throne (1987): During those years, we had next to nothing except a Tandy 1000 and an EGA monitor. Many a Saturday night was spent playing this 2D scroller. Despite it not being driven by a $900 NVidia card, the graphics were stunning. The music and sound were unheard of (no pun intended). It was the first truly interactive experience on the PC with a story that made you want to complete the quest, but were left saddened when it was over. This game spawned a number of Sierra knockoffs like Leisure Suit Larry, Space Quest, and Police Quest. Truly groundbreaking and worthy of every gamer's respect.

     

    Bedlam (1984): It was a DOS text adventure that placed you in the middle of a large insane asylum. The goal was to escape since you were wrongly imprisoned there. If another inmate caught on to what you were doing, you would have to bribe them with cigarettes. Oh, the good old days of text adventures. Trying to decipher and remember the various verb - noun combinations that unlocked whatever secrets a room held... and putting them in the right order!

     

    DOOM and Wolfenstein 3D (1992): An 8 bit first person shooter that not only introduced that generation of gamers to 3d worlds, it beat them over the head with how incredibly forward thinking this technology was. I played that game over and over for years and never got tired of it. As a young developer, I could not even begin to grasp the kind of engineering knowledge necessary to create such an immersive world. Hell, I was getting excited having just wrote DOS pop-up menu's. Not just groundbreaking or exciting, this is the one that started it all. It opened the world of 3d depth and game play to the masses. Thank you, ID software.

     

    Bushbuck Charms, Viking Ships, and DoDo Eggs (1991): As a young engineer, I had the pleasure of working on this game. PCGlobe was a small company that made mapping and statistical data software. They wanted to cash in on the Carmen San Diego craze and decided to write a game that centered around world travel, using facts and figures from their PCGlobe and PCUSA products. When you think of small development shops, this was one of them. There were 2 full time developers, a graphics guy, and a sound guy (a side gig for Andre Bormanis who went on to Hollywood and became the Science Advisor on most all post-90's Star Trek shows and movies). Oh yeah, and me the 1/3 developer, 1/3 QA, and 1/3 PC Tech. This game wasn't ground breaking, innovative, or particularly interesting, but I listed it because it was the first one I worked on.

    Bookmark and Share DotnetKicks dotnetshoutout

    Windows 7 Upgrade Horrors

    By Alan S. at January 20, 2010 10:25
    Filed Under: Computers, Web / Software Development

    I have been using Windows 7 (both BETA and RC version) for several months now on a test machine. I purchased a full copy of Windows 7 over the Christmas break so that I could upgrade my development desktop from Vista and keep it current. Let’s just say the upgrade was less than spectacular.

     

    I had a 32 bit version of Vista but noticed I had 2 DVD’s in my Windows 7 packet… One was 32 bit the other was 64 bit. I thought since I recently upgraded to a dual core Intel I would take advantage of the 64 bit now available to me. Without warning or hesitation, the installation started in a flash but then soon bogged down into a quagmire. After waiting over 6 hours for files to copy, the screen showed it was only 12% done. Something was clearly wrong.

     

    I aborted the upgrade and attempted to boot into the remaining scraps of Vista that may still be lurking. No luck. The install had wiped it too clean on the Vista side and only installed 20% on the Windows 7 side.

     

    After much investigation I found that you cannot upgrade from 32 bit Vista to 64 bit Windows 7. Thanks for telling me! Some kind of warning or denial screen would have been nice. Luckily I backed up everything and had to proceed with a complete re-installation of Windows 7… Which isn’t a bad thing. It’s always best to start with a clean slate, but I have SO much software, dev tools, add-ons, and utilities that it took a day and a half to install them all.

     

    So be warned that even though your fresh new packet of Windows 7 comes with both versions, you can only upgrade to a version you currently have installed. I wonder how Windows 8 with 128 bit support will handle updates?

    Bookmark and Share DotnetKicks dotnetshoutout


       

    eMail Scraper
    Generate email lists in seconds!


    eSource Development presents the ultimate tool for email lead generation! They have decided to release the hottest email list generation tool that allows you to get hundreds (even THOUSANDS) of specific email addresses for any genre, niche, or geographical area.

    Internet marketing companies and professionals have been using this tool for years. Now, it has been re-engineered, updated, and released to the public. This 'insider only' software was a closely guarded industry secret until recently.



    Watch the Demo

    NEW! Trial version available!

    DOWNLOAD FOR FREE




      


    Dr. Torgo's PC
    System Inventory v2.0


    Dr. Torgo's PC System Inventory offers a full range of system query options and powerful reporting tools. This software quickly generates reports on several dozen hives of system information including disks, CPU, memory, motherboard, users, ports, services, software, and MORE.

    Read more here!

    NEW! Trial version available!
    DOWNLOAD FOR FREE


    Help us out by visiting our sponsors!

    GameFly







    Recent Comments

    Comment RSS

    What We're Playing





    Who's Watchin' Me?