October 26, 2009

Computer prices vs. Computer power

I just finished buying components for a new PC for my wife, and I surprise myself every time with how cheap computers are. For only about $500 I was able to build a quad core computer with 8 GB of memory and a GeForce 9500 with 512 MB of memory and a 500 GB hard drive. I think the first computer that I bought was a 486 DX2 with a 66 MHz processor and I don't even remember how much memory or disk space.

It seems like most people don't even have the need for expensive computers anymore. Most mainstream computers can handle almost anything you can throw at them. There will always be specific tasks that can take advantage of high end computers and workstations, but most people don't need these. From basic tasks like word processing and browsing the Internet, to high end computer games: most computers will handle the job just fine.

When I was younger I always used to dream about high-end super powerful computers. I'd go to a computer website like Dell and spec out the coolest most expensive computer I could. Most of those computers I dreamed about are less powerful than the computer I just bought. I almost think that computers are plateauing: I don't see the same rush to make a faster processor or build a bigger hard drive. Mots of the basic computer technology is more than sufficient for the next few years at least. It just seem like we need processors faster than 3 GHz, or disk drive greater than 1 TB for home desktop computers. What we need now is applications and operating systems that can take advantage of the power they have available to make our lives and jobs easier. Hopefully someone will take the job.

October 24, 2009

C# 4.0 and Visual Studio 2010

I've started looking into C# 4.0, Microsoft .NET framework 4.0, and Visual Studio 2010, hoping there will be some cool new features that I will like. I've done very little with some of the new features of .NET 3.0 and 3.5, and didn't notice much new with Visual Studio 2008. Here are some of the things I've seen that look intersting:

  1. Parallel Extensions for the .NET Framework: Now that most computers have 2-4 processors it is become more apparent that parallel programming will be going mainstream. Instead of being relegated to high end scientific and business applications on large supercomputers and distributed systems, every day programmers are going to need to know and use techniques for parallel programming. These extensions look like they are a step in the right direction. When combined with solid software development practices, these can get a developer headed in the right direction to be able to easily take advantage of the multiple cores available in computers today.
  2. C# optional parameters: One thing that I do miss from C++ is finally making it's way to C#. I can't count the number of times that I have had to create multiple different variations of a function, just to be able to mimic the capabilities of optional parameters. What could be 3 or 4 functions with slight variations in parameters, can now become a single method definition. Easier to maintain, easier to use, and much more convienenient. Plus by allowing named arguments, you don't even need to specify all parameters from left to right, you can pick and choose which parameters you want to set, when yo call the function.
  3. Static ID's for ASP .NET controls: I've always wondered why Microsoft decided to enforce their control naming on all ASP .NET developers. I could understand if the naming standard was the default, because it does enforce that all of the names are unique, but we are finally getting a way to specify the name we want. This will make my like so much easier, especially for JavaScript code and forms post-back. With multiple nested master pages and containers, the length and complexity of names for controls is ridiculous. I've actually had a few cases in JavaScript that I've had to create a lookup variable to map my usable names to the actual control names.
  4. Dynamic Programming and Dynamic Variables: I have to admit that I haven't done anything with the dynamic languages and features that already exist in .NET, and I don't intend to start now. I tend to prefer the enforced structure and design of normal development, but it is nice to know it is available if I want to give it a try.
These are just a few of the features that I've seen that look interesting, once I've have a chance to play around with it more, I'll try to come up with some more exciting features that we can all look forward to.

October 23, 2009

Is Linux the operating system of the future?

I'm been using different variations of Linux for 10-15 years, and there seem like there have been some pretty dramatic improvements over that time. As a server operating system Linux is great, it has many advantages over Windows, but Windows has many advantages over Linux. Both operating systems can be good choices, depending on your needs and requirements.

I'm more interested in the desktop side of things. Linux still hasn't made many inroads on desktops. Many techies have dual boot installations with both Windows and Linux, and some ultra cheap computers come with Linux. Some companies and government institutions have converted wholesale to Linux. But most of these case are the exceptions to the rule. Windows is by far the most popular desktop operating system.

I think that the biggest reason for this is compatibility: all of the applications that people use work on windows, everyone else uses windows, everyone knows windows. Linux has a huge hurdle to overcome to be able to compete like Windows. Even if Linux may be a superior technology and run more efficiently, and even if it's GUI is comparable to the UI on Windows: it doesn't have the same value has Windows.

When you select windows as your operating system you don't have to worry about training, you don't have to worry as much about application incompatibilities, you don't have to worry if your employees will be able to interact with external parties. But with Linux many or all of these can be potential issues that will require time and money to overcome. I don't think that there are any significant flaws in Linux. It isn't perfect, but Windows isn't either. But even with all of the things that Linux has going for it, it doesn't have the momentum to really beat Windows. At least not yet...

October 22, 2009

Why are netbooks so popular?

I've been wondering lately why netbooks are becoming so popular. I've always seen these devices as a small niche market between smart phones and real latops. They seem to be smack dab in the middle of the two worlds, with few of the advantages of either. Smart phones are ultra portable - they fit in you pocket. They may lack in processing power and screen real estate, but you can take them everywhere. Laptops are not as portable but you can still take them with you on the go. They can have considerable processing power and good screen size, so they are still very useful computing platforms.

Netbooks seem to fall in the middle. They are small but not small enough to carry in your pocket, seems like you would still need a briefcase or bag to carry them around in. They don't seem much more powerful than a smartphone and have considerably less screen real estate than a laptop.

Maybe I'm just not the target audience. I either want ultimate portability, where I'm willing to sacrifice performance; or I want ultimate power so I can get real work done. But I'm a software developer and a techie, so I probably have different needs than the average Joe.

October 17, 2009

Code Profiler for .NET

I've always been interested in profiling my C# code. Years ago with .NET 1.1 I used the DevPartner Profiler Community Edition, which is no longer available. Ever since then I have been unable to find a good free or open source solution for profiling .NET code. I know that there are some decent commercial products out there, but I'm cheap and I don't the tools often enough to merit purchasing them.

Is code profiling just not in demand? It seems like if enough people were interested in the value of profiling, then there would be at least one decent open source solution. For me it has been fun on occasion to really dig deep into an algorithm that I'm working on. Trying to eek just a little more performance out of it. I've found that disassembling the code also helps to see what is actually happening behind the scenes. One of the nice things about profiling .NET code is that you don't need to instrument the code manually. When I used the DevPartner ProfilerProfiler I just picked the options I wanted and clicked go. After running the application I could delve into the details of which functions were being hit the most, and even which lines of code were consuming the most time. It can be a challenge to tune the performance of an algorithm or an application, but it can be rewarding to the code double in speed, or even more.

Hopefully I'll be able to find a good open source code profiler to "get my fix" on performance tuning my code.