I began writing programs in C# recently, and have thus not written very many programs. However, my knowledge of VB is amazing helpful as I transition over to writing advanced networked C# programs.
I used the C# programs listed below as a way to learn C#. Because of this, my C# programs are listed in the order that I wrote them, with my earliest programs at the top.
Hangman is a simple 1 player game of hangman verses a computer. The user chooses a number of letters for the word to have, and a number of guesses. The computer then random chooses a word, from a list of over 127,000 words. The user is then given the number of incorrect guesses they chose, to guess the word.
Hangman was the first program I ever wrote in both C# and JavaScript. When I wrote it, I had however recently written Project Hangman in VB.NET, so I understood the simple logic I would need to make it work. The problems that I encountered with both programs was the syntax. At the time, I was very used to writing programs in VB.NET which is very different from both C# and JavaScript. To view the JavaScript version of this program visit the JavaScript Hangman page.
The birthday paradox is a probability problem about the number of people needed before there is a greater than 50% chance that 2 people will share the same birthday. More information can be found on the Birthday Paradox problem on the Wikipedia Birthday Paradox page.
I started working on this problem shortly after writing project hangman in both JavaScript and C#. I wrote the program so I could get a feel both for solving problems with programing languages, something I had never done, and to get a feel for how hash-maps work in different languages. To view the JavaScript version of this program visit the JavaScript Birthday Paradox page.
Evil Hangman is a malicious form of the classic game of hangman. In evil hangman, users choose a word length and a number of guesses. However, unlike in hangman, the computer does not choose a word. Instead, the computer maintains a list of words. When the user chooses a letter, the computer refines its list, so that as many words as possible remain in the list of words, and the user either gets no information back, or very little. It is very difficult to beat the computer in a game of Evil Hangman. The strategy of Evil Hangman is very different, instead of guesses common letters, looking for word patters, you must guess letters so that the computer will eliminate words that contains those letters from its word list. More information can be found on Evil Hangman at the official Evil Hangman website.
I wrote Evil Hangman immediately after writing the Birthday Paradox in both C# and JavaScript. Evil Hangman is an amazing introduction into the use of hash tables in programming. Unlike my previous version of Evil Hangman, in my VB.NET Project Hangman this version works well. Because of the dictionary, sorting the words into different groups is easy, and this program is bug free.
This program was also my first introduction to using GUI is C#. I found it interesting has similar C# is to VB.NET in everything except for how forms are handled. In VB.NET I have a much easier time controlling what forms are open, and how they are used, but in C# I lose most of that control, or at least the ease of that control.
Folder Organizer V2 is an advanced organization tool designed for Microsoft's Windows 7 Operating System. Folder Organizer helps users store their files, folders, and websites in one place, without cluttering either the desktop or the quick launch. Folder Organizer V2 uses a simple drag and drop interface to add files, folders, and websites to data. Folder Organizer V2 also allows users to use a Windows standard parent/child relationship between folders and files. With this feature, users can drag a folder onto the form, and have the folder and all of its contents added to data. Once the folder is dropped, the original structure of the folder, its children, and its children's children will remain intact. In addition, to change the order, or parent/child relationship of any of the items stored in Folder Organizer V2's data, users can simply drag and drop the items into the list itself. The changes will be saved in data, without affecting the original source data on the user's computer.
The combination of this feature and several others makes Folder Organizer V2 an amazing tool to use in parallel, or instead of the standard Windows features, such as the task bar, the quick launch bar, and the system tray.
While the core features of Folder Organizer V2 are finished, some features still need to be implemented. To start using this program simply visit the Folder Organizer V2 page.
I started working on Folder Organizer V2 shortly after finishing Evil Hangman. When I started working on Folder Organizer V2, I still had very little knowledge on how to program in C#, and one of the reasons I wanted to start this project was to get a better feel for C#. I knew when I started working on Folder Organizer V2 that it would be a huge project, and at the time I had no idea how I would create even half of the features that I now have working perfectly.
Because of my lack of knowledge of C#, and my desire to make Folder Organizer V2 far out shadow my original Folder Organizer program, I enlisted the help of Austin Taketchi, a friend of mine who knew about as much C# as I did, to help create Folder Organizer V2, and learn more about C#. The first step we took to create Folder Organizer V2 was to try to see what data we would end up needing to store on each item in data. Because of this, we were able to create the program from ground up, with the code to handle the data create first, and the user interface for the data created last. Because of this, Folder Organizer V2 has far less errors, bugs, and crashes than the original Folder Organizer, and the code for Folder Organizer V2 is far less messy.
I had several goals when making Folder Organizer V2. These goals came from my increasing disappointment with the original Folder Organizer, in which I had been noticing a large number of bugs, data loss, and general slow performance.
My primary goal with Folder Organizer V2 was to make sure that the code was clean, well-commented and logically organized. Despite my best efforts, the original Folder Organizer's code had become nearly impossible to read, even with all the comments. This was largely due to a number of large changes I made to try to fix bugs. Most of these changes fixed the bugs they were meant to, but also caused other worse bugs, and made the code nearly completely unreadable.
My second goal was improving speed and efficiency. The original Folder Organizer was taking almost 30 seconds to start, and a very long time to refresh (clear and add all items to the list). Before I even had the idea of starting Folder Organizer V2, I went into the code of Folder Organizer and disabled several key features, just to make the speed of Folder Organizer bearable.
My final major goal with Folder Organizer V2 was to improve the user interface. The original Folder Organizer (RIGHT) had a menu strip with a plethora of useless options. Most of these options only existed because of bugs that I could not fix, or general design flaws in how data is stored, and how data is saved. As you can see, Folder Organizer V2 (LEFT) has no menu strip and the user interface is very simple, just a list of what is saved in data.
Folder Organizer V2 has a number of cool features that make it better than the original Folder Organizer.
The first cool feature is the automatic update system. When Folder Organizer V2 is opened it will automatically check online for new updates. If it finds a new update it will display the changes in the update and then ask the user if they want to update.
Another cool feature is the dynamic context menu. The context menu is the menu that open when the user right clicks. Folder Organizer V2 uses a dynamic context menu which changes to display different options depending on what items are selected.
Left to Right: File Selected, Parent Folder Selected, Website Selected
Another feature is the automatic hide feature. This feature automatically fades out the Folder Organizer V2 window when users are not actively using the program. This helps users to keep Folder Organizer V2 open at all times, without using up real estate on the screen. The amount that Folder Organizer fades out can be adjusted in the Program Settings Menu.
Note: In the picture below, the background behind Folder Organizer V2 is black. The auto-fade feature changes the transparency of Folder Organizer V2; it does not make the window darker.
Finally, Folder Organizer V2 offers interesting statistical information on a user's use of the program. This information can also be found in the Program Settings Menu.
Folder Organizer V2 uses an powerful integrated help system which allows users to find help on all aspects of the program through any window. For example, to access help through the Program Settings Menu, users have two options: they can look at the right panel for information on a setting, or they can use the help button at the bottom for detailed help on every setting of Folder Organizer V2.
Folder Organizer V2 uses an advanced error catching and handling system. If an error occurs, the error is immediately written to an error log, and a message is display to the user. The user then has three options: ignore the error and continue using Folder Organizer V2, get help on the error using the built in help button, or report the error.
The error message below is one of the most common errors in Folder Organizer V2. This error occurs when Folder Organizer V2 cannot find a file on a user's computer when the user tries to open the file.
Reporting errors in Folder Organizer V2 is far easier than it was in the original Folder Organizer. Users need only click the Report Error button on an error message, and a report error dialog will appear. Users can then enter any information they may have on the error, and an email is sent with the user's comments, the error information, and if the user chooses, the user's information which can be used to help fix the error.
Currently the code for Folder Organizer V2 is not available. This is due to the fact that Folder Organizer V2 is simply not done yet. While the core features are in place, and the program is mostly complete there are several important features left to put in, and the code is still fluctuating too much to make posting the code make sense. However, I can provide the general structure of Folder Organizer V2, and the different objects that make up the structure.
Folder Organizer V2 is broken into five main layers:
The separation of objects from both the data file and the user interface allows for a very important layer of validation that the original Folder Organizer lacked. This validation helps to prevent most of the bugs in the original Folder Organizer. In addition, these objects also do an amazing job of organizing the code. When I want to add a new setting to data, such as font size, I need only go to the object and make a simple change, and Folder Organizer V2 now has a changeable font size.