This post is not about programmer tools, but just tools and helpers for everyday use in windows. There will also be no anti virus programs, big or special applications or any games in this list, just little tools (most of them just a few Kb big). All of them are free to download. Most of them didn't change over the last years, but some tools got replaced by some better tools :)
This are my personal Top 10 Tools. These are the first programs I install on a fresh windows machine (besides Visual Studio 2005 and UltraEdit of course ^^):
- Process Explorer:
The Process Explorer shows you information about which handles and DLLs processes, much more useful than the standard windows Task Manager. This is a very useful tool to find out more about running applications and getting detailed information of everything that is going on. Btw: Microsoft has just acquired Winternals Software and Sysinternals, the makers of this and many other great tools.
- Application Traffic Monitor:
Cool little tool to see traffic and speed of each application. Can also be used to see how much your traffic costs if you don't have a flatrate. It was originally developed by Andrew A. Fedorov (bizkit-soft) and more information can be found on this codeproject.com article.|
I extended the tool quite a bit and fixed some issues. New features are:
- Notify Icon shows the current upload and download speed in a nice graph
- Extra options in notify icon menu showing the current download and upload speed.
- Also showing to total used traffic since the tool is running.
- Tweaked the WinPcap calling code a bit and added some features (close button, stay on top, cost option now hidden, etc.).
- Disabled the small window by default and allowing it to hide with menu or simple double clicking it or the tray icon. The small window is nice for detailed info, but most of the time you don't want it.
- Notify icon shows a nice tooltip with speed and traffic information
- Remembers traffic window position and size.
- Added a nice installer, which automatically installs the WinPcap library if required.
You can download my extended version of the tool here:
AppTrafficMonitorInstaller.exe (163 Kb, v1.2, 23 July 2006)
- Google Desktop:
Most useful desktop search tool, also quite nice sidebar with many gadgets. There are many other desktop searchs available today (Yahoo! Desktop Search, MSN Search with Windows Desktop Search, etc.), but I still think Google Desktop is the most advanced, supports the most file types and has the most plugins available. If you use google all the time anyway, it is also useful to see if it finds something directly on your computer while searching the web.
Freeware image viewer, supports many file formats (almost everything you can imagine). Not much else to say about it. The default Windows Picture and Fax Viewer sucks and ACDSee is nice too, but cost money. I also like the support of .dds files, which almost no other image viewer can display, very useful during development.
- Miranda IM:
Instant Messenger that supports many formats, including ICQ, MSN, AIM, IRC. Miranda has a clean and simple interface, too simple for some people, but what really matters is how useable a program is. I don't need fancy buttons and annoying animations, which only look cool the first time. I never liked MSN or AIM or the newer ICQ versions (just the programs and looks, not the protocol). But to keep your contacts in one place, to access all the ICQ contacts (still the most used IM tool for games and almost everyone I know) and because the newer ICQ versions all suck too, it is quite nice to have one single IM tool that does everything. You can even use your Skype contacts with Miranda, now that is really cool because chatting with Skype is like talking to monkeys (Skype is good for talking, thats it).
Skype should be on every top 10 list, best phone and VoIP app ever. Forget about TeamSpeak, Ventrilo and the million other VoIP apps, they all suck :D Extended features like SkypeOut (calling phone lines) are also quite nice.
Best torrent client ever, Azureus was nice too for a while, but we all know .NET > Java and uTorrent has so many cool features (RRS downloader for getting DotNetRocks and Mondays :), trackerless support, quick resume, etc.) with an incredible small download while needing almost zero resources. It gets also improved from time to time to add more features while keeping it simple and user friendly.
- Daemon Tools:
Daemon Tools allows you to emulate cd and dvd drives and gives you the ability to directly access image files (iso, cue, bin, etc.). You should use it together with FastMount to easily open up images by double clicking on them. While this tool is used a lot for circumventing cd protections for games, it is also useful for everyday use. I hate changing cds or dvds and I got a big hdd raid with enough space to hold many iso images :)
- Panorama 32:
Really useful wallpaper manager since 1998, I got over 30k images in my wallpaper queue :) Well, you have to like changing your background a lot (I let it change every 10 minutes) and you should have a lot of pics with girls (or boys or cars or planets, whatever you like) ^^
Still the most useful program to play music. Can also be used for videos, but I suggest using VLC media player and Windows Media Player Classic for videos (but including them in this list would require more than 10 entries ^^).
Btw: Little shoutout to Dirk Primbs, who is blogging like crazy lately on his new blog, check it out. Lots of info about new technology and stuff.
I got my MVP Award Package today ;-) Thats some pretty cool stuff (see on the right side). Now I can not only brag on the internet, but also when running around (crying "I'm a MVP" like a madman).|
I also just checked the activity on this blog and I almost get twice as much hits than last month, wtf is going on? Ok, enough of that self-praising. Let's get to some serious stuff.
Lately I've been working a lot on databases, websites and xml data for several projects. I tried out Linq (C# 3.0), still beta last month (see this post about the Linq CTP May 2006) and still find it very useful. This post is about some of the experiences with Linq and especially DLinq, which is for accessing databases very easily. I got a lot of questions from people asking me if Linq is really that useful and instead of answering them one by one, I can now refer to this page and the links here. For this reason this post may become a "little" longer than usual ^^
Lets start with a graphic to let the C++ fanatics (and maybe some Linux freaks too) get more mad at me:
Introduction to Linq
If you don't know much about Linq and its uses, check out the official LINQ Project site first.
Linq does basically just simplify queries and data access in your application. For example if you are using DLinq you will not have any new Sql features or anything, your database stays the same, but accessing the data and working with it becomes much easier. I personally do also like the fact that I don't have to write any Sql Commands anymore in C#. Sql is something for the database and using stuff like stored procedures. It was never fun to write your own wrapper everytime you have to access some database stuff. Lets see an example:
Many more samples and examples can be found in the 101 LINQ Samples, which are still very useful.
ScottGu gave also a nice introduction about using LINQ with ASP.NET on his blog.
Also don't confuse LINQ (sometimes called C# 3.0 because it will come in Visual Studio 2007 - code name Orcas) with the Microsoft .NET Framework 3.0 (formerly known as WinFX), which consists of all the new Windows Foundatation technologies (WCF - Windows Communication Foundation (formerly Indigo), WPF - Windows Presentation Foundation (formerly Avalon), WF - Windows Workflow Foundation, Windows Cardspace (formerly InfoCard)). Ok, I admit you have every right to be confused.
Working with the new XDocument instead of XmlDocument
Ok, lets get back to Linq, we will talk about databases later. You might use some of the features in Linq in your classes, for example the new Extensibility Features, which are pretty cool to add functionality to existing classes. Other than that most of your code will stay the same, you will most likely not use queries just to render some lines on the screen.
But if you were using the XmlDocument class before, a lot of code can be changed and simplified. I had a couple of Xml helper classes, which I don't need anymore now since using the XDocument and XElement classes is much simpler than before with XmlDocument and XmlNode. Lets take a look how easy it is to compress large parts of code basically into a single line:
XmlDocument (.NET 2.0 and before):
Working with Xml data is also a lot easier now, check out the 101 Linq Samples to see what you can do with the new syntax in Linq. I would say code that is using Linq can get up to 2 to 3 times smaller than before if you use a lot of foreach enumerations and lists, especially in combination with xml data.
No schemas in Linq? What to do.
For some reason there is no XSchema class in Linq, but you can still use the existing XmlSchema class in the System.Xml.Schema namespace. Creating XElement nodes directly from XmlSchemas might require some new code, but it is not very hard to convert any old code. Lets take a look at a simple example.
Example Xsd Schema file (SomeSchema.xsd):
Creating an XElement with help of a schema:
The helper method for filling the XElement node:
The Linq documentation says you can also use Annotations instead of working with schemas to specify rules for your xml data, but in my case this doesn't help to create new xml data. To learn more about Annotations read the Linq documentation or listen to the Object Database Podcasts.
Ok, all this Xml stuff is interessting, but most applications, especially websites store their data in databases and this is were DLinq becomes useful. DLinq was the main reason for me to even bother checking out Linq. I always hated to write SQL commands in C# (or any other language) and not be able to catch any obvious errors, which could be seen while coding if Intellisense would be available for SQL Commands. But even if all the syntax is correct, a lot of semantic errors can happen and only testing it 7 million times makes sure that it works. As seen above we can now write our own queries directly in C# with Linq, which will create some stored procedures in the background for us. These queries are only created if we write some select statement in C#, the data is not actually retrieved yet. Only if we call foreach to enumerate all users a sql command is created in the background and will be handled.
So what about that TestDb class, where does it come from? It is autogenerated with help of the SqlMetal command line tool in Linq. This tool will create a class for every table in your database and give you a database class (in my case TestDb) and some helper methods to access your data. Everything else can be done directly from C# code.
What about performance? Well, I'm no SQL guru and it is hard to tell if Linq performs well on big databases, but from my tests and experiences in the last weeks, there is nothing wrong with Linq. It performs quite well. I don't think it will be Linq's fault if your database access is slow. You can also write Stored Procedures (see next section) if you think you can write some better sql code and call it directly from Linq. I can tell you for sure that using Dlinq is much more enjoyable (even with the current Intellisense bugs with Linq) than writing SQL statements in C#, I hope I don't have to do that ever again.
When will Linq be available? Currently Linq is still in Beta, it will become available in the next Visual Studio Version (code-name Orcas), which will come in 2007. Until then a couple of new Beta versions might come out. Beta 2 (Linq May CTP) is pretty stable and useable, it has only a couple of issues with the Intellisense in VS.
Stored Procedures with DLinq
Maybe you have already a lot of SQL tables and some Stored Procedures around and just want them to work with DLinq. Just use the /sprocs command line switch for SqlMetal. Now a couple of helper methods will be created for you that allow you to execute these Stored Procedures directly and use the return value as you would with a query written directly in DLinq.
Sahil Malik wrote on his blog Winsmarts already a lot of info about DLinq and Stored Procedures, so I'm going to be cheap and just link to it :-)
Thats not all. If you are usinq Linq for your website you should check out the Blinq Project, which automatically generates ASP.NET websites for all your database tables. It does not only allow you to view data, but you can also easily create new entries or change any data in the tables. If you know MyPHPAdmin from the php world, Blinq is quite similar (but not as complicated). Even if you don't really need this capabilities the generated code from Blinq can be helpful setting up your ASP.NET website because it shows how to use master pages, access your database and do all the things like getting data, adding data, updating tables, deleting rows, etc.
This is what a Blinq website looks like (ok, I've only created a very simple database):
- Official LINQ Project site on MSDN
- 101 LINQ Samples, still useful
- Q&A with Anders Hejlsberg (C#) and Paul Vick (VB) on Microsoft PressPass about Linq
- Blinq: Automatically generate ASP.NET websites for your database (similar to MyPHPAdmin in the php world)
- Anders Hejlsberg - LINQ on Channel9 (Sep. 2005), the first Video and interview about Linq
- Object Database Podcast, a new podcast series for OO Databases, also covers Linq.
- The Screening Room #5: LINQ: Podcast with Anders Hejlsberg about LINQ.
- ScottGu's Blog, has a lot of information about ASP.NET, Atlas, Linq, etc. and uses many images
- Demystifying DLINQ Blog post series on Winsmarts.com, very useful information about DLinq and handling Stored Procedures (click on June 2006 to get to the other posts)
- My blogpost from June 2006 about working with Linq in Visual Studio 2005, fixing Intellisense and the updated CR_Commanter
- Cyrus' Blather: About Linq Specifiqs - var (lots of old interessting posts, stopped blogging for some unknown reason).
That's it for today, more this weekend, when I announce that I will play StarCraft - Broodwar on the german TV. Arg, this wasn't supposed to come out yet ... (grin)