Tuesday, December 30, 2008

Designing and Implementing the Silverlight Digital Logic Simulator, Part 1

It's been a while since I posted my first Silverlight application, a Digital Logic Simulator. Since I've posted this project, many people have asked for and I've promised to put together a tutorial that explains the design and implementation of this tool. Now that things are beginning to wind down as the holiday season comes to an end, I have some free time to begin working on this long awaited tutorial. So this will be the first in a multi-part series to document the design and implementation process employed for this project. I'll be sure to include sample code and detailed explanations as needed, but for those who are interested in diving right into the code, you can download the complete source code for this project from CodePlex.

Part 1: Defining a class for logic devices

I'd like to point out that this particular project is one that I've been thinking about since I was an undergrad studying Computer Science many years ago. My inspiration was a great program for the Mac (OS 8 era), the name of this program escapes me but I'll be sure to insert it here along with a screen shot if I do manage to figure out what this program was called. But in short, it was great because it allowed the student to very easily connect various gates together in order to verify that a simple digital logic circuit worked as expected, according to its truth table. I always thought that this program was nicely done and I was also disappointed that an equivalent PC version was not available. At one point, I considered developing a program like this in Java so that it would be portable, but Java turned out to be a disappointment on many levels (which is a topic for another blog article). In any case, when I first started learning about Silverlight, I almost immediately realized that it would be the perfect platform for implementing a simulator like the one for the mac. On a side note, there was also a great Turing Machine emulator for the mac that had no good PC equivalent, and I think that this could be another great little project to work on in the future.

Going back to that old mac program and thinking about how it was designed, what I really liked about it was how intuitive it was to use. You could simply drag various logic devices onto the screen and position them however you wanted, and connect the devices by dragging the output of one device to the input of one or more other devices. When trying to decide how best to replicate this behavior from an object-oriented perspective, it makes sense to identify all of the properties and behaviors that are common to all digital logic devices that will be used in the simulator. After identifying as many of these that come to mind, they can be defined and generalized in a super-class from which specific logic devices, such as gates, can be derived. For this digital logic simulator, I defined a "Device" class which fulfills this purpose.

(To Be Continued...)

Wednesday, November 26, 2008

Silverlight Drum Pad

This is a simple drum pad. I wanted to test out Silverlight's sound sample playback capability and this seemed like a great project for doing that.

The corresponding keyboard keys are listed on each pad:

  • Toms - A, S, D
  • Crash - C
  • Kick - Z
  • Snare - X
  • Hi-Hat - Open: K; Closed: M
The source code is available for download at CodePlex.

Feel free to comment. Enjoy!


Monday, October 20, 2008

LOLCats Slide Show in Silverlight

This is a simple slide show viewer written in Silverlight, currently featuring some lolcats images. The slide show viewer can be configured to view any images, I chose lolcats for this example just because of their popularity. Currently, this slide show viewer only supports a cross-fade style transition. In the future, I plan on added enhancements which will include a variety of transition types. This initial version serves as a decent baseline that can easily be built upon.

In this example, slides will automatically transition after being displayed for 5 seconds. In order to force a transition, simply click on the image.

The source code for the project can be found here.

Feel free to comment!


Sunday, September 21, 2008

Koch Snowflake in Silverlight

This program builds on the Koch curve, with the key difference being the initial state contains an equilateral triangle instead of a single line segment, and the snowflake is constructed by generating the Koch curve on each side of the triangle.

The source code is available at CodePlex.

Feel free to comment!


Saturday, September 20, 2008

Koch Curve in Silverlight

Here's another one of my favorite fractals, the Koch curve! Generating this is simple:

  • Start with a straight line segment
  • Insert an equilateral triangle in the center of the line segment
  • Repeat this process for each new line segment

The source code is available at CodePlex.

Feel free to comment!


Monday, September 15, 2008

Sierpinski's Triangle in Silverlight

Here's a fractal gem that's stuck with me since my discrete math days. Generating this fractal is simple:

  • Pick a random point.
  • Choose a random number from 1 to 3, each representing a point on a triangle.
  • Plot the midpoint between the first chosen point and the randomly selected point on the triangle. The color of the point can be different for each of the three points on the triangle.
  • Choose another random point on the triangle (1-3) and plot the midpoint between it and the previous point plotted.
  • Repeat the previous step (forever!)
The result is Sierpinski's Triangle! Click on the Silverlight app to clear the plotted points.

Note that the EditableImage class from Joe Stegman's Silverlight.Samples module was used in this project since it provides an efficient way to plot points on a 2-D plane. You can read more about it here.

The source code for this project is also available for download at CodePlex.

Feel free to comment!

Monday, August 18, 2008

Digital Logic Simulator in Silverlight

  • Press "F" for full screen mode
  • Click and drag digital logic devices onto the graph paper
  • Connect devices by clicking and dragging from the output of one device to the input(s) of other devices.
  • Double-click a device to select it for deletion
  • Clicking "Delete" will delete any and all selected devices.


The reasons behind creating this application are basically:
  1. This seemed like it would be a fun project to get started with learning about Silverlight.
  2. There are not any good digital logic simulators on the web, or at least I couldn't find anything that I thought was decent.
Feel free to comment. Enjoy!

Update - 9/16/2008: I've posted the source code at CodePlex.