CBNetTools underway!
As a systems engineer/software engineer, I enjoy writing code for a living. To be honest, I really don’t care if it’s just writing logon scripts for Group Policy in VBScript, or simple automation tools in AutoIt, PowerShell, or BASH, or developing full-blown enterprise applications in .NET, or Java. I love to code.
But sometimes writing code for a job is not as exciting as writing code for yourself. Given the limited amount of personal time I get to just sit around, I really don’t get to code “just for fun” that much these days. Honestly, I sometimes feel like I’m hurting myself in a way because I’m not able to be quite as agile as I used to be as far as learning and adopting new technologies. I started to teach myself Ruby and Lua not long ago, but have not progressed beyond a few simple “Hello World!” programs. I also wanted to learn several JavaScript frameworks like jQuery or Prototype. But alas, I usually spend all my time developing code for work or taking a break from my computers altogether.
But sometimes a project comes along that could benefit both my work life AND my personal life…
I was recently dusting off some of my old codebase from my VisualBasic days and stumbled across an old project that I’d started long long ago and never finished. I had started in VB6, then completely re-wrote in VB.NET (framework 1.0, then 1.1) and later upgraded to a more modern design and improved the code under .NET Framework 2.0. Having made the switch C# (and haven’t looked back), I decided to pick the project up again and re-write it from scratch. The project was called “NetTools” and it was originally intended to provide a GUI interface for several command-line network tools like ping, tracert, ipconfig, netstat, etc. Knowing all the things I know and understand now about proper object-oriented development, multi-threading, process tracking, cross-thread communication, and custom exceptions…. well, it was time for a complete overhaul.
I decided to start from scratch again taking some of the old ideas and design decisions and completely re-developing the rest. The purpose of the whole project was to provide a sort of network admin’s Swiss Army knife in GUI form. As an admin myself, the venerable command line (and now also the PowerShell command line) is my best friend. I always have at least one open so that I can do pings, traceroutes, and even the occasional nmap. But I decided what would be really handy is one app that allowed me to spawn multiple instances of several different tools that had their own interfaces and ran independently of each other on separate threads.
The main application is nothing more than a sort of “sandbox” or “desktop” to run multiple instances of the different tools in. So I could launch multiple “Ping” windows, for example, and even be able to tile the windows. I can even save the output of all these tools to a file, or print them. I haven’t gotten very far yet, I have already got the main application and 2 of the tool modules (TraceRoute and Ping) done. Here’s a screen shot of them running:
It uses an API library behind the scenes call NetToolsLib, which provides all the wrapper logic, custom exceptions, events, and event arguments for each tool. Each wrapper class can be instantiated as a new object and each instance spawns a new instance of whatever tool inside a new thread. The process is then read and tracked using data from StdOut and/or StdErr. Not all the tools in the API will be external executables though…. some of the tools will wrap functionality already found in the .NET Framework (version 3.5) and the Win32 API. The API library is being developed in parallel with the main application, but will be made available as a separate package in case any of you developers out there want to use it in your own applications.
This project got me excited to code again! w00t! More details as the project reaches its various milestones….

