At the time of writing this, there is not much to see on my website, as it is still under construction. This will be fixed by the end of the week. My goal with this first writing is to explain my project, my goals for the project, my current plans, and some other notes.
To begin then, what is my assigned task? I have been tasked with the creation of a program that allows a user to drag and drop elements of basic digital circuits (logic gates) onto a workspace to create circuits. The program will need to include functionality for editing these circuits, loading and saving the work of a user, and have the ability to step through a circuit to see how it derives its current state (on/off). Harder still is the requirement of allowing users to save circuits as components to use in other circuits. For example, someone could create a series of gates which serve some purpose, but the series will appear multiple times in the circuit. This could be condensed into a single component for ease of use. Including examples and help documentation will be the final touch.
My first thought with this project is that I have no idea where to begin. There are a number of choices that are in front of me at the moment, and these will determine the course of the entire project (for better or worse). First, the project requirements given to me do not specify a platform to make this program on. I see my choices here as programming a Windows application in C#, or creating a web based application in HTML5. I have work experience with C#, but I also know that my ability with graphical output in C# will hinder my efforts. HTML5 is a great unknown. I have never attempted programming anything graphical in HTML, so this would be a major leap into the unknown. HTML5 would bring the added benefit of some platform independence though, so it is a consideration given that the description has this project oriented more as a learning tool. Learning tools are better when they are accessible.
With that in mind, I have created a preliminary checklist of components I will need to include: