Resource Manager Essentials
CiscoWorks Resource Manager Essentials (RME) is a powerful suite of Web-based applications offering network management solutions for Cisco switches, access servers, and routers. The RME browser interface allows easy access to information critical to network uptime and simplifies time-consuming administrative tasks.
I have worked on ALL phases of RME 4.0, from analysis to delivery. I've also done some feature development and maintenance on RME 3.5. The applications I have handled so far are Syslog Analyzer, Change Audit, Audit Trail, CWCS Syslog Service, Inventory Manager, Smart Case and Bug tool kit.
RME Web Services
This project aimed at developing north bound API for RME using SOAP and
XML.
Wireless Communication between PCs
This final year college project of mine consists of the complete hardware and software needed for a wireless link between two PCs. While the hardware module has the circuits for transmitting/receiving, encoding/decoding the signals, the software, made with VC++, has a generic library for sending data using this hardware, along with a few applications like Remote PC controller, Wireless Chat and Wireless File Transfer that demonstrate the functionality of the hardware.
PC Controlled Wireless Robot
A robot that works on dual tone multi frequency transmitter/receiver; a Java application controls the movement of the robot by sending signals to the parallel port of the PC (to which a circuit is plugged in).
An Inexpensive Touch Pad
This is an unbelievably cheap device that functions as a Touch Pad. It consists of crisscrossed electric conductor lines at two different levels, whose intersection (during touch) is used to calculate the coordinates to be sent to the PC. The software section of this device consists of the driver that interprets the signals, and two applications (Paint and Ball Game) that demonstrate the ability of this device.
Bulk Rename
A perl script that can rename all files in a folder; this is the situation that made me develop this - every time I download pics from my digicam, the names are like IMG_0010, IMG_0011 etc. After I download and put them in the right gallery, I prefer giving them sensible names, like miami_trip_0010, miami_trip_0011 etc. For this, I need to remove those pesky IMG_s, then add my new prefix. That's exactly what this script does.
Imager - A bulk image-resize utility
Admit it. All of us are fed up resizing scores of photos from our digital cameras before emailing them to friends, uploading to photo sites etc. When something like this happens too often, its time for automation. I whipped up a quick utility to resize all the image files in a given folder. You can specify the new resolution and a suffix to attach to the new file names. This is a command line utility, run it in dos mode without any argument to get help. This was my first venture at C#, I used a few tutorials from the Internet to create this tool.
GExporter - A utility to export your Gmail address book
I created this before Google came up with the Gmail contacts export feature. Many people used it and had nice things to say. Though this tool is redundant now, it gives you many options for exporting your contacts. You can choose to export all the entries in your contact list, or search gmail with a certain string and export only those entries, or specify your own rule on certain field. The last one might be a bit confusing; to explain, you can specify something like this - "export all the entries whose email field ends with yahoo.com". You can also specify the fields to be exported, the character that should separate the fields, and in what count (eg., "separate the fields with 23 ':' characters"). If you are going to use it, be warned, you need to know how to install Java runtime and run a Java program. There is a readme file with the download, but some people still found it confusing.
You can download this from www.planet-source-code.com. I also found a link to my tool at www.gmailtools.com.
KwikSearch - A firefox extension (greasemonkey script) that can make your web search easy
Go to KwikSearch home page for a description and download.
Orkut ScrapEasy - A firefox extension (greasemonkey script) that makes Orkut scrapping easier
Go to Orkut ScrapEasy home page for a description and download.
Yahoo! Mail Extra - A firefox extension (greasemonkey script) that adds a few handy links to Yahoo! mail.
Go to Yahoo! Mail Extra home page for a description and download.
Syslog Power Toys
I named this after Microsoft Power Toys, if you know what it is. This was mainly done to make my team's work easy. Some of us worked on an application called Syslog Analyzer (a Cisco product), and to test it, we had to generate syslogs messages now and then from our desktops. So this one came in, with an easy to use UI, and many features like controllable generation speed, controllable duration and message formats. It can send the syslogs to any port as UDP packets, or to a flat file in a format specified by RFC 3164.
A Simple Digital Image Processor
A study project done using C++, this is an application that works on bitmap images. It can display bitmaps and perform basic operations on them like image flipping in any direction, producing mirror image in any direction, perform color inversion, enlarging/diminishing, tiling etc.
Image Tweener
One friend of mine gave me the logic behind this, and I implemented it in C++. Upon execution, the application asks you to scribble a couple of images using the mouse. Then the tweening begins. The first image slowly transposes to the second. Read below and try writing it yourself to get a good knowledge of high school analytical geometry and C++ data structures.
The idea is simple. Assume that there are two images, with 'n' points in each (practically, the number of points will not be the same, but ignore it for now). Now think of the first point in both these images - say (x1,y1) and (x2,y2) respectively. Assume that, an imaginary line connects these two points. What will be the coordinate of any point on this line? Recollect the formula your school math teacher taught you - "If a certain point (x,y) on this line, divides the line in the ratio m:n, then the point can be calculated using the formula x = (mx1 + nx2)/(m + n) and y = (my1 + my2)/(m + n)". And you are done! All right listen...
Suppose the value of m and n are 20 and 0, the value of (x,y) will be (x1,y1). And if the ratio is 0:20, then you get (x2,y2). If the value is something between 0 and 20, say 5:15, the value of (x,y) will be something between these two points. Plot a point at this location. Now lets fix the ratio to 5:15, and think of the other points on these two images. We agreed to have n points in each, remember? Pick up the second point of these images, and find the point (x,y) that divides these two in the same ratio (5:15). Do this with every other pair of points, and join all the points you just found. What do you get? A figure that looks like both the input images, with more resemblance to the first one than the second. Suppose we had used the ratio 10:10, the figure obtained will be midway between the input images. I hope you get the idea now... All you need to do is, take a ratio, find the figure that's intermediate between the two input images (as given above). Now erase the previous figure, vary the ratio, calculate and draw again... If you want a 50 frame animation, start with 0:50, go on with 1:49, 2:48,..., 50:0.
Remember, when you obtain the input images from the user, store the points in some data structure. Linked list is a good choice, but no compulsions. If you aren't comfortable with linked lists, use arrays, but you'll be wasting a lot of memory.
Multi-client Chat
This is easy to do, but it gave me a good foundation of networking with TCP/IP, multi-threading, Java AWT and making simple protocols. If you are interested in making one yourself, and don't know where to start, here is the idea -
1) Write a Server class, that has no user interface. This class should open a server socket, listen for connections. Also write a handler method / class that actually does the communication. When a client tries to connect to this socket, grab the client details, create a different socket, link this new socket to the client, and hand over the whole connection to the handler object.
2) Write a Client class, with some user interface. This should try connecting to the server when the user wants to. It should have a text area or something that can display the chat messages sent by other clients.
3) Create a simple protocol between the client and the server. Have a separate code for 'commands' from the server and chat message broadcast from the server. This way, you can add more features easily. I added 'private messages' and 'ignore user' features.
4) Make sure the Server class stores the client details in some data structure. Now when the server gets a chat message from a client, it should simply loop through the connections it has, and send the same message to every client. That's it!
TextPlay
This is a Java text editor application that makes good use of Swing components, and all that fancy stuff like Pluggable Look & Feel that come with Swing. I tried to give it the good features of all the text editors I've used. Particularly, it has those 'tabbed panes' for each file you open, a feature that TextPad has. It also lets you change the look and feel of the whole application to Windows style, Motif style or Java's very own 'Metal' style. It has all the features of a decent text editor. There is nothing much to boast about this application, but I did get a good sense of user interface designing after completing it.
A Simple HTML Editor
This one taught me a lot in C++. I didn't use STL, so I had to write my own data structures, like a heterogenous linked list. Basically, each HTML tag is represented by an object, and adding that object to the screen and setting its properties will later insert the corresponding HTML code. This is just a study project, and I don't expect anyone to use it. Use DreamWeaver or FrontPage instead.
Differ
This is a code diff tool that generates a graphical diff of two files in HTML format. My colleagues and I found this useful. Students may not need this much, but software engineers will always want to see what has changed between two versions of the same file. And personally, I hate the 'diff' command that Unix features. I can see the difference with naked eye better than with the output of that Unix command. Rational Clearcase has a much better diff utility, but not all people will have access to Clearcase.
I figured out an algorithm to find a graphical diff of two files - an output that can highlight the newly added, deleted, modified lines using different color codes. And the best part is, the output is saved in HTML format. Not just that, the HTML is frame-based, and has a set of controller buttons that take you to the exact locations with a difference. I'm quite pleased with this work of mine, because, apart from figuring out the algorithm, I used a very structured design. And by the way, this one uses Java, JavaScript and HTML.
Verbologist
This is one of my favorites because it was really useful to me. I invented that quirky name because I thought it'll become famous one day, so it should have a unique name to hit the top of Google search list :) . To give you the background, I was preparing for the GRE, and wanted an easy way to get those tough words into my mind. So I made this VC++ application. I made the best use of it and did get a decent score in the verbal section of the GRE. I distributed it to some of my friends and colleagues, and they found it useful too; well, at least that's what they say ;) ... But one thing, I do feel good about the interface of this tool, coz all of them who tried it out didn't believe I wrote the application, until I showed them the 'About' box. It does look professional and friendly. The application takes you through the GRE word lists at your own pace, pronounces the words if you want (I used Microsoft TTS Engine and Microsoft Agent characters), allows you to mark the words you find difficult etc. When you want to revise, you have the option of running through the list without the answers being visible and also playback those tough words you marked once. You can also split the word database such that you have fewer or more words per list, but I've given this as a 'hidden' feature... an Easter egg ;-)
Mandrake
This one is not yet complete. The idea is to club my two favorites - chess and programming. I wish to make this a very powerful chess engine, which follows the XBoard protocol. It can be played with any interface that supports XBoard. I did a lot of research on the existing chess algorithms, and am trying to figure out the best combination of all these algorithms, also keeping in mind not to make the code too cryptic. I've become a great fan of the 'Bit Board Rotation' concepts, which originated long back, but still rule the world in the form of powerful chess programs. I did some work on the move generation logics and the XBoard protocol interface, but that's pretty much it. These days, I don't have the time and the mindset to work on this, so its stalled for now. But once I recommence, this will come out good.