Sunday, December 24, 2006

The Internet is "Everywhere"

Today's world is a lot more mobile than every before but despite our mobility, we still expect to be connected. Whether it be via the phone, email, IM, or even the snail mail, we expect to be able to communicate with others at a moments notice. Well, I am happy to announce to you that such has gotten even easier.

Although accessing the Internet through your phone has existed for a long time, its only recently that T-Mobile has eliminated the need to access the Internet through a proxy. Previously, you could access the Internet only via a few ways: first, you could purchase an expensive data plan and then follow their list of steps to tether your mobile to your laptop, second, you could use the mobile's mediocre screen and input device to handle your communications, or finally, attempt to tether your laptop to your mobile without using a data plan.

TMobile is a GSM network and thus uses GPRS (General Packet Radio Service) to handle data communications which has speeds similar to a very poorly connected 56K (expect speeds on average to be around a 33.6K modem). They also have deployed EDGE (Enhanced Data rates for GSM Evolution) which is capable of speeds closer to that of ISDN. Think 2 - 4 times as fast as GPRS but still dog slow compared to everyday broadband.

Why anyone would want to pay for this service is beyond me. I do have the 2.99$ T-Zones plan which I found out had ports 25 and 110 open to the public Internet. I then set up a proxy running on a computer to listen to port 110 and then pointed the proxy setting for IE to the IP of my computer. This allowed me to then tunnel http traffic past T-Mobiles proxy. It was painfully slow but worked and allowed me to tether too.

A few weeks ago I removed the proxy information and noticed that my Internet connetion still worked, in fact, worked better than ever. Even when I re-tethered, it continued to work. Howard Forums also has some information saying the T-Mobile silently removed the proxies. Now even this very blog will be posted over GPRS (edge is not offered here). I am truly glad for this as it continues to make me want to stick with T-Mobile as a wireless carrier. In addition I a also am looking forward to their HSDPA. After paying around $4 billion in frequency licensing fees, T-Mobile is looking to launch their rollout starting early next year in metropolitan areas first.

Right now, I am not aware of T-Mobile not wanting you to take advantage of the newly opened access. My only recommendation is to be a good stewart and use it responsibly. Don't run P2P clients, minimize traffic to that which is only necessary and don't depend on it for communications. Whenever HSDPA rolls out, I will be getting it. Until then, I will be gingerly using the E/GPRS network as the needs arise.

Wednesday, December 13, 2006

Compensation and Performance Reviews...Where are the Rocks

As you can assume from the title, I am going to be talking about compensation and performance review systems but first, why would I discuss this in a technical blog? Well, for starters, all of us techies and non-techies alike will have to work for someone at some point of our life (minus the occasional very large trust fund individual). Even if your working for yourself, compensation and performance are still very important as you have to be your own biggest critic as your paycheck is directly tied to your performance.

I believe that many compensation systems understand that pay is a hygiene factor. Herzberg stipulated that hygiene factors are those things in a workplace that don't bring job satisfaction however they are critical to preventing job dissatisfaction. This is where performance reviews often completely mess things up.

A performance review is a system or process that is designed to provide feedback to the employee to help them determine which areas of development they need to focus on and which areas are they already really strong in. In
reality, most performance reviews fail to accomplish the objectives that they originally set out to attain. Many people fear their reviews instead of viewing it as an open time of discussion. In addition, many companies perform reviews on an annual basis. The time between reviews is so large that entire company objectives might have changed. Then there is the whole concept of money. Money is only a motivator if its a goal. Once this goal is attained, it no longer motivates. Personally, I would not want my employees working for me, busting their butts with the sole intent of making more money. Instead, I would rather see them fairly and adequately compensated and have them vying for top positions by boosting productivity, education, and experience in order to be qualified to take on even more responsibility.

Despite my desire, not all people are wired to be the best of the best. Some people are what I would call solid individuals. They are the hard workers that have been in a position a long time, know the job, the environment, and all the tricks of the trade but really are not interested in moving up on the corporate ladder. They are happy where they are. They know that management is not for them and that a lateral move would only cause them to lose interest. What do you do with these people. First of all, you need to value them. They are your ROCKS upon which your department and organization can build a foundation; a source of stability. Secondly, two words: job enrichment. I believe that every one desires two things from a job: challenge and recognition. These people would be very beneficial to help new comers acclimate to the team, be able to lead efforts in documentation of team processes, facilitate an active policy of knowledge share, and might even be considered more of a mother hen than the manager is. Remember the hygiene factors? Work relationships can be both a hygiene factor and a motivational factor.

By leveraging these seemingly immobile workers, you can build a competitive advantage that results in less churn and burn and fosters greater knowledge share and creation. I know that when I am interviewing with different firms, one of the things that I really look at is how do the people seem to interact together. I also look at how much of a difference am I going to be able to make.

Having worked in many organizations, I can say that some organizations are too large and too broken far to long for any one individual to try and radically change things. One organization in particular had me excited about the potential to radically change a really dysfunctional team. After spending years trying many different tactics from team based approaches to grassroots efforts, I realized that I was merely just a finger in the dam. Conditions and morale would improve but if I was gone for longer than a week, the same fundamental issues would start to arise again and the dam would burst. It was obvious that I was not creating lasting change. Instead, most of the issues were originating from the top and I was merely acting as a diffuser. As soon as I left, it would turn back to a powerful jet stream, ripping people apart.

As us techies enter the workforce or even move about in it, we sometimes have to stop and realize that its not always about the technology, the projects, or the cool toys we get to tinker with. All workers, whether they be executives, asphalt pavers, or marketers, have certain basic needs. They require status, job security, benefits, and fair pay. They also desire recognition, challenge, and responsibility. Each individual will value each element differently and will also perceive how well each element is being met differently. Some like being congratulated publicly, others rather have a pat on the back and a whisper of "Fabulous job!" in their ear.

Issues of human resources might be incredibly boring to some but I don't think of it as human resources. The HR department to me is really the Department of Autonomous and Superior Logic Processing Computing. The human brain is really the ultimate computer and HR (DASLP if you will) processes is still trying to reverse engineer how we are wired and subsequently programmed. There is no API and each person has a different revision of code. Thinking of things this way helps us have sympathy for their misgivings.

Tuesday, December 12, 2006

PAL 2.0/Windows Vista WPA Issues Resolved

Thanks to our outstanding wireless engineer here on the Data Network Team at Purdue, the issue of Vista connecting to the PAL2.0 wireless service is solved. If you don't have any idea of what I am talking about, I suggest reading the blog entry I created a few days ago to catch up. Turns out that the RADIUS reflector just needed a single line patch to its source code in order to correct the issue. During testing, Windows Vista was able to successfully connect to a test network that was running in an almost identical configuration to the PAL2.0 network (WPA-Enterprise/PEAP-MSCHAPv2 authentication). This does not mean that your Vista machine will connect to the production PAL2.0 network. The security team will still have to certify the change, schedule the deployment through change management, and then deploy the fix which will result in a enterprise outage of PAL2.0. There is no current ETA for when this will be implemented however, there is hope.

If you want to let Purdue know just how much you want Vista to work with PAL 2.0, I suggest contacting the ITaP helpdesk via phone by calling (765) 494-4000, or in person in STEW G-65, by filling out a web form, or by sending an email to itap@purdue.edu. Its only by your feedback that Purdue can really understand how important something is to you. There is quite a bit of truth to the saying "A squeaky wheel gets the oil."

Hurray for .NET...XNA on the XBOX

XNA, which is a recursive acronym for XNA's Not Acronymed, is a new development platform and runtime environment for developing homebrewed, non-commercial games and applications for the XBox platform. It consists of a toolkit (similar to the Visual C# Express), CLR, and a rich set of class libraries to rapidly develop managed and modularized programs that have the ability to target multiple platforms.

Currently, all of this is free. You just need to download it from the MSDN DirectX website. The only drawback, is that even with homebrew games, it will cost the developers a $99/yr or $49/4months subscription fee to run their game/application on the XBox 360. I see this as a fairly hefty fee just to tinker around. Even if your not a game developer, you will still require a XNA Creator's Club account in order to play someone else's homebrew game. In addition to this drawback, XNA does not have any classes implemented for networking. This rules out any possibility of building a fully managed application that is able to be played across a network or by using the XBox Live service. Microsoft is planning to release XBox Live capability in 2007 however this is only for their Professional version of XNA. Its also reasonable to believe that XNA will not be coming out for the older XBox as Microsoft wants to push their XBox 360 and it would also mean that they would have to deploy a new version of DirectX in addition to a number of other libraries in order to get it to work. If the open source community develops a XNA compliant CLR based on mono, then maybe we will have XNA support on hacked versions of the old XBox.

Although there are quite a few limitations with XNA, I do believe that this is a revolutionary step in the game console world (sorry Nintendo). Playstation did offer an SDK but at a extraordinarily steep price of around 20K. There are open source SDKs available however there are legal implications to running these games as they often require hacks of the original console.

Despite the high cost of the Creator's Club accounts, its still a much cheaper alternative for small hobbyists to get started in console game development. By leveraging the XNA framework, a developer can write code and target both the Windows platform and the XBox console. Although, targeting these different platforms will require a conditional compilation, basic application design and a majority of the code written will be the same across platforms. Since XNA does not require a subscription fee in order to distribute the games on the Windows platform, it gives developers a low cost, low risk opportunity to test game ideas out on the general gaming community before deciding to launch a full scale game targeting a console. Savvy developers that license their software and ideas as proprietary have the great opportunity to have their games/ideas bought by large companies. Even the developers that open source their code will impact game development in general by spurring innovation and creativity to a fairly stagnant game design community. In addition, this can help larger development firms seek out new talent by recruiting promising young developers and designers.

Finally, my strongest excitement about all of this is that XNA once again shows the power and capability of the .NET platform. The XBox 360 is the second non traditional PC platform to receive an official .NET framework with Windows Mobile/CE devices being the first. I am also excited about seeing how true performance can be obtained even in a managed environment. One of the greatest aspects of .NET MSIL is the metadata. Using the meta data, the JITter can produce a native executable that is optimized for the specific hardware its running on dynamically. Combine this with caching, either dynamically or through the GAC, and JITted applications can actually outperform native images while providing greater reliability and security.

As for all you nay-sayers out there, the only thing I can say is "watch and see."

Saturday, December 09, 2006

mIRC Scripting

IRC (Internet Relay Chat) is a great medium for sharing ideas and collaborating with peers. Its one of the oldest forms of chat over the Internet (1988) and came before AIM, MSN, or even ICQ was even conceived. Since its so old, there are many programs (clients) out there for using the IRC networks. A few examples are listed below:
  1. BitchX (*nix)
  2. XChat (multiplatform)
  3. Ircle (MacOS)
  4. mIRC (Windows, *nix under wine)
I personally use mIRC partly because its what I started with (somethings I have a hard time changing) and also because its stable and just plain works. The real power of any IRC client is the ability to support scripting in one fashion or another. mIRC has implemented their own scripting language that shares some similarities to javascript however in many ways the syntax is quite frustrating. There are also lots of wierd limitations especially in variable sizes. I suppose one could argue that its just a scripting language and real programs should be implemented as plugins written in C++ or the like. Anyways, you can read more about mIRC scripting [here].

Often there is a need to perform administrative functions within an IRC channel such as changing users' status, adding bans, or kicking users. Normally, you would accomplish this with certian commands sent to the IRC server, however, some tasks are quite repetitive. For example, what if you want to op someone whenever they joined the channel. Well, there are two ways to accomplish this: first is with the built-in auto op list in mIRC, or second, is scripting. We will take a look at an example using the latter.

on *:JOIN:#electronic-mp3: {
%autoAwpList = *!~hi@cpe-75-180-172-215.indy.res.rr.com,*!Deviant@dynamic-216-211-49-42.tbaytel.net
if ($nick == $me) { halt }
if ($me isop $chan) {
if ($address($nick, 0) isin %autoAwpList) {
mode $chan +o $nick
}
}
}

All relatively simple. First we need to define the specifics of the event. For any user (on *), when a user joins a channel (JOIN), called #electronic-mp3 (self explanatory), do the following. First, we define a comma seperated list of hostmasks to match. Second, we want to ensure that we don't try opping ourselves. Then we need to ensure that we have the appropriate operator privileges. Next we check if the hostmask of the user that just joined exists in the variable %autoAwpList and if so, run the next line that ops them.

We also could have done this with an user access list but that is a touch more complicated but would be the preferred method if you had a lot of users that you always wanted to op. In addition you probably noticed my curly brace syntax. mIRC syntax seems to demand that you use the opening brace has to be on the same line as the block definition or conditional. I hate that rule but then again, mIRC is not a true programming language.

Friday, December 08, 2006

PAL2.0 Airlink and Windows Vista

A break through has been made in the Windows Vista and PAL2.0 issues. For those that might not be aware, Windows Vista does not work with PAL2.0. PAL2.0 uses WPA-Enterprise which uses PEAPv0/MSCHAP. The issue with Vista is that they changed their EAP implementation in such a way that freeRadius does not understand. Currently the freeRadius team is working on a patch but this will take time to create, implement, test, and certify.

You can read one of many threads about this [here].

Until this issue is resolved, I would suggest using PAL1.0 (SSID: PAL) and then VPN'ing into vpn.purdue.edu. If you want higher speeds, I would suggest using the Cisco Client provided on the Airlink page as it uses IPSEC which is hardware decoded. PPTP works but decryption occurs in the CPU decreasing the concentrators ability to perform its administrative tasks.

Thursday, December 07, 2006

Can't please everyone

I see that not everyone is impressed with the help that I provide over IRC (Dalnet channels #asp.net, #asp, #c#, #csharp). In fact, CloCkWeRX was so dissatisfied with my observations that he ended up blogging about his disgust. CloCkWeRX, I am honored that I made it to your hall of shame.

Read more about it [here].

ASP.NET "Access Denied Error"

Have you ever received an error like this:

Server Error in '/MyWebApp' Application
Configuration Error
Description: An error occurred during the processing of a configuration file required to service this request.
Please review the specific error details below and modify your configuration file appropriately.

Parser Error Message: Access is denied: 'mydll'.

Source Error:

Line 169: <add assembly=<System.Drawing, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a>/>
Line 170: <add assembly=<System.EnterpriseServices, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a>/>
Line 171: <add assembly=<*>/>
Line 172: </assemblies>

Source File: c:\winnt\microsoft.net\framework\v1.0.3705\Config\machine.config Line: 171
Version Information: Microsoft .NET Framework Version:1.0.3705.0; ASP.NET Version:1.0.3705.0
If so, then you are most likely suffering from a locking issue. It seems that the Microsoft Windows Indexing Service will lock a file while its indexing it and if a page is requested during that time, it will toss an error similar to the one above. Why it does this, I don't know.

There are several ways to address this issue
  1. Disable Indexing services. Often Indexing Services is not needed on most services unless your using it for your search engine, in which case, I would just suggest using google instead. In order to disable Indexing services, open up the Control Panel, click Add/Remove Programs, click Windows Components, and uncheck Indexing Services.
  2. You can also disable it on a given drive by opening My Computer, right clicking the drive, click properties, and uncheck "Allow Indexing Service to index this disk for fast file searching".
  3. You can do the same for a folder or for a given file. Right click on the folder or file, click properties, click the Advanced button on the General tab, and uncheck the item that starts with "For fast searching, allow Indexing Service to index this (file|folder)."
  4. Finally, if you really must have Index Services running, you can solve the problem by just removing the indexing from the "c:\\Microsoft.NET\Framework\\Temporary ASP.NET Files" folder. WINDIR is, of course, your installed windows directory, Version is the version of .NET that your application is using. I suggest just not indexing the Microsoft.NET folder at all, why would you be searching that folder in the first place
If you want to read more about this, reference the MSDN article (#329065) via the following url: http://support.microsoft.com/default.aspx?scid=kb;en-us;329065