Music gallery

If you would like to hear some of my work, please head over to the new music gallery page. The music gallery has MP3 demos, MIDI files and Yamaha Mobile Music Sequence (MMS) project files. Feel free to download the MIDI files and MMS projects. I’ve also posted a few production notes for each track. The production notes describe problems, solutions and tweaks. This is the place to go if you would like to hear MMS applied to something other than EDM!

I just posted two songs — Memphis Underground and Comin’ Home Baby — two good old soul jazz tunes. Both tracks were initially composed using MMS and were exported as Standard MIDI Format (SMF) files. The SMF files were imported into Cakewalk Sonar. General MIDI (GM) instruments were assigned and levels were set in Sonar. I played the files back through a Roland Sound Canvas and then checked playback through Windows Media Player.

While going through this process, I discovered that MMS generates “stripped” SMF files. MMS exports initial program (patch) changes, but does not export channel volume, pan or effect levels. The program changes depend upon the hardware setting on the export page. The “SMF” option produces General MIDI-like program changes while the “MOX” option produces a weird mixture of GM and MOX voices. It looks like MMS tries to pick the MOX voice that most closely resembles the voice used in the MMS part. The MMS manual is not very specific about all of this and you should be prepared to modify patch changes and set levels when tweaking an MMS-generated MIDI file in your DAW/sequencer.

There were also a few fix-ups related to differences between the MMS XG-like sound generator, the Roland Sound Canvas and the General MIDI standard. GM defines only one drum kit with a limited selection of individual percussion instruments. For example, finger snap is not part of the GM standard. Both Yamaha XG and Roland GS (Sound Canvas) implement an extended GM kit. Of course, the extensions are different (!) and finger snap is assigned to different keys. So, you should expect to tweak the drum tracks in the MIDI files for your own sound generator. Roland and Yamaha also define their note numbers differently and bass instruments, in particular, may sound one octave higher or lower. Transpose away and have fun!

Mobile Music Sequencer is here

The Yamaha Mobile Music Sequencer (MMS) is a fun tool for roughing out arrangements. MMS is an iPad app that uses a phrase- and section-oriented approach to building up full arrangements. A lot of rock, pop and dance music is repetitive, so once you have the basic building blocks (phrases), you can create loop-like musical passages (sections) and then combine the sections into songs.

I’ve been working with MMS for a few months now. I’m trying to create jam tracks for some of my favorite old soul jazz tunes like “Memphis Underground” and “Comin’ Home Baby.” The overall work-flow seems to be one way: create a song on your iPad with MMS then export the song to a computer-based sequencer or keyboard workstation for polishing. You cannot directly import a MIDI file into MMS. I have “imported” MIDI tracks by recording them with MMS — not a procedure for the faint of heart or MIDI novice.

By and large, MMS is intuitive and easy to use. The manual covers most of what you need to know in order to create new songs. If you intend to drive an external synthesizer (like the Yamaha MOX or Tyros) with MMS or if you export your songs as a Standard MIDI File, the manual does not cover important features such as the MIDI messages sent by MMS, program change numbers, etc. I’ve posted a page with this kind of helpful information.

Even though Apple has taken great pains to hide iPad files and the file system, musicians like to share their work. At the very least, we need to export and transfer our work to other computer-based tools and keyboards. No way around it, we need files.

Mobile Music Sequencer manipulates and produces four different finds of files.

  1. Individual MMS projects are stored in project files with the .yms1 extension.
  2. Individual phrases are stored in phrase files with the .yms2 extension.
  3. Sections and songs are exported as standard MIDI files (SMF) with the .mid extension.
  4. Mixdowns are exported as WAV audio files with the .wav extension.

When you are working within MMS itself, project and phrase files are transparent; you don’t see them. When you want to share or transfer these things, you need to know about them.

Apple provides two standard means of getting files on and off of your iPad: iTunes File Sharing and iCloud. You can directly access project files, MIDI files and WAV files through iTunes File Sharing. If you want direct access to your phrase files, however, you must have an iCloud account and use iCloud. The MMS manual strongly promotes SoundCloud as the way to access and share your audio files. SoundCloud is purely optional since you can transfer your WAV files from the iPad to your computer through iTunes File Sharing. This is a great relief because a free SoundCloud account is only good for two upload hours and thereafter you need to subscribe. BTW, would someone please explain what an “upload minute” is? I tried SoundCloud and frankly, I don’t need it or want it!

So, how do you use iTunes File Sharing? First, I’m assuming that you have a Mac or PC which syncs with your iPad. I use both Mac and PC and the procedure is the same. Plug in your iPad and let it connect with iTunes. Click to select your iPad device and then click on the “Apps” (pseudo-)button in the button bar for the iPad device. This is the same page that you would use to manage your Apps and home screens. Scroll down to the section titled “File Sharing.” You see two panes: one pane showing Apps and a second pane showing Documents. Select the “Mobile Seq” app and iTunes displays the documents belonging to MMS. Now you can add and save files. As I mentioned before, you have direct access to project files (yms1), MIDI files (mid) and audio files (WAV). iTunes also displays a few internal MMS files with plist, json, etc. extensions. Leave these the heck alone!

Life gets interesting under iCloud. You can publish projects and phrases to iCloud. First off, you need to turn iCloud on using the MMS SETTINGS > SYSTEM > GENERAL tab. Projects and phrases are handled differently.

  • Projects are published through the SETTINGS > FILE page. When iCloud is enabled, a little cloud-like icon is displayed to the far right of each project name. The icon shows the published or not-published status of each project. If a project is unpublished, its icon is grey and shows an upload arrow. Touch the icon to publish the project. The outline of the icon turns bright white after upload, indicating that the project is now published.
  • Phrases are published by saving them with iCloud enabled. You can use either the PHRASE > EDIT > SAVE button or the Save option that appears in the contextual menu for a selected phrase.

Published projects and phrases are accessible to MMS on other mobile devices connected with the same iCloud account. Please note, however, that you cannot access published projects via iTunes File Sharing. That’s right, iTunes file sharing doesn’t even show published project files.

Let’s say that you want to back up your projects and phrases to your Mac or PC from iCloud? Currently, if you’re on a PC, you’re hosed even if you have the iCloud control panel installed on your PC. You cannot transfer files through the control panel; you can only delete them. There are HOW-TO’s on the Web for turning on the iCloud daemon, etc. under Windows, but these techniques involve messing with the registry among other advanced Windows thingies. I’ve done this sort of stuff professionally and don’t really have much appetite for it when I’m not getting paid to futz with Windows.

Fortunately, I have a MacBook Air. Mac OS X has a double-secret directory to hold iCloud documents. First, open the Finder to your user directory. Press and hold the option key and open the Go menu in the menu bar. You will see a menu item called “Library.” If you don’t see “Library,” then you probably aren’t holding down the option key; the user Library directory is normally hidden. Select the “Library” item and the Finder goes to your Library directory. Double click on the “Mobile Documents” directory. This is where OS X keeps your iCloud documents. Double click on the directory with the identifier “mobilemusicseq” in its name. Then double click on the “Documents” directory. Lo and behold, you should see the project (yms1) and phrase (yms2) files that were published to iCloud. You’re now free to make a copy of your files. Go ahead. You own them.

That complete directory path, by the way, is:

User/XXX/Library/Mobile Documents/YYY~yamahamusic~mobilemusicseq/Documents/

where XXX is your user name and YYY is some iPad/iCloud cruft.

I believe that you should be able to copy project and phrase files to this directory, too. I haven’t tried this as yet, but you should be able to share songs and phrases this way. I want to share some of my songs and phrases in the future, so please stay tuned.

Hey, that you should get you going with MMS and file transfers.

Finally, an editorial. Hey, Apple! This is where the whole hermetically sealed tablet environment of the iPad breaks down big time. I find using iTunes and iCloud in this way to be a total kludge. A complete sack. Applications that create and edit media — like MMS — need to manipulate and transfer arcane files. Please find a clean way to transfer and share media files! And, please give iCloud Dropbox-like features. It’s really kind of tacky to maintain a closed environment like this. We own our files, not you.

Arrangers need respect!

Sometimes I like to kick back and jam to a simple chord progression and a groove. It’s a lot more fun to play to a groove than it is to practice to a boring old metronome.

The Yamaha MOX workstation is full of delicious factory performances where you can play a progression with the left hand and let the right hand roam where it wants to. I’m always impressed by the creativity and talent of professional sound designers and programmers, especially those cats that have a deep understanding of the keyboard architecture and its “content” like samples and musical phrases. It was initially hard to imagine, as a new user, getting my mind around 6,720 phrases (arpeggios) in the MOX let alone making them work for me!

The MOX needs to appeal to a wide range of musical tastes in order to be a successful product. Thus, it has a wide range of factory performances for demo purposes and for getting people started with the ax. I really dig the rock, funk, soul and jazz performances, but I just don’t work in rap, hip-hop or EDM. (Although, chill is interesting…) So, I set out to program my own performances and to overwrite some of the factory performances that didn’t work for me.

I browsed through the list of arpeggios in the data list PDF just trying to find a place to start with 6,720 phrases! Even a casual reader would notice certain names like “Unplugged,” “Pop Shuffle,” or “Slow Blues” showing up again and again. Well, I quickly realized that there is a full back line (drum, bass, guitar) for “Unplugged” or whatever, and that several main, fill and break phrases are available for each instrument. The construction kit idea was born and I programmed 90+ new performances where each performance is based on a construction kit. I wrote about my experience here.

Hmmm, main, fill and break arpeggios look and sound like phrases that were lifted from an arranger like the old Yamaha QY-70. However, unlike the old QY from 1997, the MOX arpeggios sound good. Some of the improvement comes from the MOX samples and sound engine, but the phrases themselves had much better musical groove and style.

So, I took a little time to investigate and audition Yamaha’s current generation of arranger keyboards from the inexpensive PSR-E433 ($249 street) up to the Tyros 4 (now about $4,000 street). Yamaha has recently released the new top-of-the-line Tyros 5, but I haven’t had a chance to try one yet. Sure enough, many of the MOX arpeggios were lifted from Yamaha arranger keyboards circa 2006.

Are the arpeggios better than the old QY-70? You betcha! Even the PSR-E433 outshines the QY and for less than half of what I originally paid for the QY. I wouldn’t hesitate to use some of the sounds and styles in the PSR-E433 at a gig. The Tyros Super Articulation 2 (SA2) voices are amazingly playable. The Tyros tracks your playing in real time and drops in the little nuances which enhance a solo performance. You don’t need to consciously think about switching articulations — just play. The Tyros styles are very realistic and maybe sound too much like a studio recording, if one regards that as a criticism.

Best of all, playing these keyboards is terrific fun! BTW, Korg, Roland, and Ketron make pretty darned good arranger keyboards, too.

So, why did I feel guilty — almost dirty — auditioning arrangers in public, especially at the infamous store which shall not be mentioned? I think arranger keyboards still suffer from the stigma of the dreaded “home organ” with a cheesy rhythm box. These organs were designed for (gasp!) the home musician including the one finger wonder (usually dad) in the family.

First off, we run into the musical class system of professional vs. amateur. I respect the talent, training, practice and skill of the pros. However, since when should amateurs be reduced to the play button on an iPod in order to experience music? Bosh! An amateur is a person who pursues music for pleasure and is most likely to support the arts and artists.

Next, I think arrangers are misperceived as instruments for the home (or the nursing home) even when they have essentially the same sound set and effects as “professional” workstations. Tyros SA2 voices are still way ahead of professional workstations in out-of-the-box playability.

Finally, there is the lingering aftertaste of cheese from a 1960s fallout shelter. The QY and its home organ predecessors really did sound cheesy. This is where contemporary arranger keyboards unfairly take the bad rap. Get thee to a music store! Try one! Don’t forget to feel love, again, and have fun.

Way back in ’97…

Way back in the 1990s, Yamaha developed and sold the QY series of ultra-portable MIDI sequencers. The penultimate model in the QY series is my pal the QY-70 (purchased in 1997). I still occasionally use the QY today and this post is my mini-shrine.

The QY-70 combines a MIDI sequencer, a tone module, a Chiclet keyboard, and arranger-like chord recognition, styles and controls. The QY is about the size of a chunky video game controller and that’s a lot of functionality for a small box of that size! The tone module is a complete XG-compatible sound generator which still interoperates with XG-compatible software and hardware (like the Yamaha Mobile Music Sequencer iPad app). The QY can be attached to a standard MIDI keyboard (or computer) through 5-pin DIN plugs. This makes it easier to enter notes and controller data. You can also split the keyboard and play the QY like an arranger with chord recognition in the left hand.

The QY-70 has a lot of content: 128 styles based upon an internal library of 4,167 phrases. A musician can create new phrases from MIDI data and can create new styles from the built-in phrases and user phrases. The QY-70 can import and export Standard MIDI Files (SMF) through the PC-/Mac-based QY Filer program.

Of course, in many ways, the QY-70 shows its age. The XG sounds suffer from short loops and the effects are not up to the quality of modern day algorithms. Chord recognition is a little bit rocky although one can split the keyboard into three zones such that “On Bass” (slash chords) can be played. The QY lacks a true auto-fill, auto-start and auto-stop which are essential for live performance. The QY styles also sound dated. Certain styles (rock and pop) were pretty lame back in 1997 and probably did a lot to give arranger keyboards a bad name.

However, the QY does a great job integrating the sequencer, tone module, arranger functions and content. Workflow is smooth. If necessary, the musician can drill down and edit MIDI event and controller data in scrollable “event list” format. In fact, the QY’s editing support was comparable to computer-based sequencing programs of its day such as Opcode Musicshop or MOTU Freestyle. The editing facilities exceed those of some contemporary, high-end arranger keyboards such as the Yamaha Tyros.

I still use the QY-70 from time to time because its workflow is compatible with my musical process. I don’t really write original tunes, but quite often, I have the lead sheet for a new song that I need to learn. This is where the QY’s pattern and chord tracks come into play. I first annotate the lead sheet with measure numbers, main sections (A or B) and fills. Then I enter the chords, choice of style and style sections (main A, fill-AB, etc.) into the QY. The editor is simple and easy to use although it forces one to scroll linearly through the song. In literally ten minutes, I have a basic accompaniment and then can play (and possibly record) the melody against the backing track.

This is the kind of process that I wish I could use on the Yamaha MOX. The MOX is not an arranger keyboard and does not have the same notion of pattern and chord tracks. The QY’s pattern and chord tracks are independent such that I can easily change the choice of style or style section. This capability is great for trying out a tune with a whole different style/attitude. The style and chords are cooked into a MOX pattern section when the section is recorded and experimenting with style means re-recording entire sections.

You can see QY-like technology at work in modern arranger keyboards and the Yamaha Mobile Music Sequencer. The Motif, MOX, PSRs, and Tyros all have a built-in library of musical phrases although they use these phrases quite differently. The Motif/MOX expose the phrases as playable arpeggios while the PSR/Tyros keyboards embed the phrases into styles. It’s fun to MIDI the QY to the MOX and play the QY styles through the MOX sound engine. It’s amazing how much better some of those old styles sound when played through a decent sound engine! Unfortunately, you lose the power of an integrated tone module and sequencer.

The Yamaha Mobile Music Sequencer (MMS) strips away the concept of a style and is 100% phrase-oriented. Songs are broken into sections where each section is a group of phrases that play concurrently. MMS follows the chord progression that is programmed into a song section and harmonizes the phrases in the section. The musician arranges the sections into a full song arrangement. Sounds are produced through software virtual instruments that are better than the QY, but not as good as the MOX.

MMS comes with a library of rock and pop phrases. Yamaha sells the QYPACK that, holy smokes, is a subset of the old QY-70 phrases! Thus, a small part of the QY-70 lives on. The QY phrases get a sonic bump from the virtual instruments. The MOX phrases (arpeggios) are vastly superior since they are derived from later, better-played arranger styles (circa 2007) and the superb MOX sound engine.

All in all, the QY-70 is still a fun, useful tool for song writing and arranging. If there’s a computer science lesson in all of this, it’s the power of good standards like 5-pin MIDI, XG and General MIDI. 5-pin MIDI lets musicians mix and match hardware and software — something which is lost with MIDI-over-USB.

I’ll have more to say about MMS and arranger keyboards in future posts.

RPi MIDI bridge

[Update: See Send MIDI from USB-B to 5-pin.]

Here’s a vexing problem that many electronic musicians face.

Let’s say that you own a lot of gear, some of which uses the old school 5-pin DIN MIDI interface. For example, there are a ton of classic (and not so classic) tone modules and keyboards that have 5-pin MIDI IN and MIDI OUT ports.

Then, you buy a new mobile MIDI controller which only does MIDI over USB through a USB B device port. The M-Audio Keystation Mini 32 is an example. This design covers the most common case — hooking the controller to a computer having a USB A host port — but you can’t connect the controller directly to the 5-pin MIDI IN port on one of your old tone modules or keyboards. USB ain’t RS-232 and class-compliant MIDI over USB has its own protocols, too. So, you can’t just whip up a simple cross-over cable or signal converter.

There are two commercial solutions to this problem: the Kenton USB MIDI host and the iConnectivity iConnectMIDI4+. Neither of these solutions is cheap and they cost more than a lot of MIDI controllers themselves!

Some people on the web have suggested an Arduino-based solution. However, here’s an easy riddle. What super low cost single-board computer has two USB host ports? Answer: The Raspberry Pi Model B.

The RPi Model B seems like a natural for this problem. It’s inexpensive, it has the necessary ports, and there are plenty of rugged cases available. Musicians will want to use this solution at the gig, so a good case is essential. There are two issues. First, the RPi can source only a limited amount of power to a USB device. Some MIDI controllers may draw too much current. Second, musicians don’t like to haul extra gear to a gig, so they won’t want to take a display and keyboard to a gig just to boot the RPi and run the software needed to bridge the two USB A ports. The solution must be stand-alone, plug-and-play, and consist only of the RPi itself, a power source, and a few cables.

Here’s what I have in mind for the hardware. The MIDI controller is connected to the RPi using a standard USB A to USB B cable. The MIDI controller draws power from the RPi. Some MIDI controllers have a dedicated power supply jack and in that case, a separate power adapter for the MIDI controller seems prudent. The other USB host port on the RPi is connected to an inexpensive commercial USB to 5-pin MIDI interface — the kind used to connect 5-pin equipment to computers. The commercial interface should be MIDI class-compliant and should not require special drivers. Knowing the state of the world such as it is, you may not easily find proprietary Linux drivers for the interface. The commercial MIDI interface provides the connection to the 5-pin DIN MIDI ports on your old piece of gear.

Musicians usually have an old USB MIDI interface like the Edirol/Roland UM-2EX in the studio. These interfaces are readily available at very low cost on the web for not much more dosh than a cable. This approach doesn’t require custom hardware or shields like an Arduino-based solution.

Here’s what I have in mind for the software. Folks already bridge PC MIDI ports using MIDI-OX. Linux has the ALSA MIDI software. The amidi -l command displays the physical and virtual MIDI ports. The aconnect command connects MIDI ports. The trick will be discovering and connecting MIDI ports after boot without manual intervention, i.e., the RPi boots and builds the bridge without a keyboard, display, a log in, etc.

So, there it is! My hardware lab is currently in disarray so I can’t easily do a proof of concept implementation. However, if you have the RPi and the pieces/parts, please give this a try.

If you enjoyed reading this article, you may find these articles interesting, too:

And now for something completely different

Been a while since the last post, eh?

After the intensive push to publish courseware, I took a little “dreadlock holiday” and spent the last few months devoted to music. (Ahhh, the privileges of retirement!) In particular, I decided to deep dive into the Yamaha MOX workstation which is now my main gigging instrument. I learned to create songs using the rather wonderful library of musical phrases that are built into the MOX. I bought an iPad to use some of the many apps developed by Yamaha, including the Yamaha Mobile Music Sequencer.

As always, in the spirit of sharing what I have learned, I have published a page about getting started with the Yamaha MOX synthesizer. It describes my own journey and it is meant to complement the MOX owner’s manual. I hope that it helps you out.

Finally, I also learned a lot more about “arranger” keyboards. These keyboards ain’t your father’s Wurlitzer any more and surely have a place in professional studios as well as the home recreation room. I’ll have more to say about arranger keyboards in a future post.

On the nerd front, I took a side trip into the basics of quantum mechanics and quantum computing.

Needless to say, this all took a bit of time.

Topics in computer architecture

A new courseware page — topics in computer architecture — is now available. This page covers a wide mix of topics from RISC vs. CISC to non-von Neumann languages and architectures. You might just find an interesting lecture or two for a special topics seminar about computer architecture.

Way back when in the early eighties, I had a chance to work with Al Davis at the University of Utah. Al was a proponent of data-driven dataflow computers. His ideas showed me that there are alternatives to centralized synchronous control, sequential programming and the von Neumann memory bottleneck. The topics page has links to information about some of this interesting work.

Looking back, I’m struck at how mired we are in the von Neumann architecture! Sure, there are a few projects underway to investigate alternatives like quantum computing, functional programming languages, and so forth. However, the world remains dominated by the centralized, sequential von Neumann model and programming languages in which parallelism is glued on through a (class) library or two. General purpose GPU (GPGPU) computation is not really that radical. Yes, GPGPU computation is data parallel, but the underlying model is the sequential execution of SIMD instructions. Speculative execution is a bit of a kludge to allow conditional execution in highly sequential SIMD programs. Further, data transfer from memory to execution units remains a limiting factor in performance.

I think we need to introduce students to a wide range of computing models. Hopefully, some young, clever soul will find a way to pull us out of our rut!

VLSI systems course

The syllabus and notes for my VLSI systems course is now available in the courseware section of the site.

This is a “Mead and Conway” course on VLSI systems and CMOS circuit design. Mead and Conway led the world with their approach to VLSI design. Instead of focusing on device electronics and physics, this approach spans system-level design down to layout and fabrication. It is particularly well-suited for computer science majors who may not have much background in electronics.

I approach VLSI system design like computer design. Heck, a computer is just another digital system to be implemented in CMOS! Thus, students build and test a series of successively more detailed models for a VLSI (digital) system, eventually implementing a circuit layout which is suitable for fabrication. At the time, student designs were manufactured by the MOSIS fabrication service (which is still in business, by the way).

Both the computer design and VLSI systems courses relied quite heavily on simulation. System- and register transfer-level models were written in a stylized C/C++. Logic- and switching transistor-level simulation was handled by IRSIM. Electronic circuit-level simulation was performed through SPICE. It’s good to see that IRSIM is open source and is still available. And, of course, SPICE is still an industry standard.

Most academic courses have switched to VHDL or Verilog for system- and register transfer-level modeling. Both languages and associated simulators can be applied to the logic-level, too. I would strongly consider or recommend either option today. Depending upon tool support, students may also be able to synthesize their designs in field programmable gate array (FPGA) technology. Logisim and SmartSim look like terrific alternatives, too. I saw a LogiSim demo at SIGCSE last March and it’s a pretty spiffy tool. SmartSim runs on the Raspberry Pi — what could be better than that?

Unfortunately, VHDL and Verilog are not the most approachable, easily understood languages. I’m not the only person with this opinion. Please see “FPGA Programming for the Masses” in the April 2013 issue of CACM. I’ve seen advertising that calls Verilog “C-like.” I disagree.

My ulterior motive is to reach and teach digital systems at the high school level. VHDL and Verilog, unfortunately, are not as easily learned as C/C++ or Java. I’m hoping to gain more hands-on experience when I get rolling with Papillio — maybe find a way to bridge Java/C/C++ to VHDL and open the door to a broader community of students.

Wanna design a computer?

The next installment in the courseware section — computer design — is now available.

This course shows how to design a computer starting with an abstract specification of the instruction set architecture (ISA) and ending with a gate-level implementation. The course teaches a method which successively translates a higher-level representation for the machine into a lower-level representation. For example, the ISA is translated to a datapath consisting of large-grain building blocks and a control graph annotated with register transfer statements. Then, the datapath and control graph are mapped into gate-level building blocks and control store. Different datapath and control styles (clocking, pipelining and microprogramming) are discussed. Computer science students should be comfortable with the representations — no scary electronics.

I taught this course for several years at Case Western Reserve University. It’s an undergraduate level course that assumes a prerequisite course in basic logic design. So, if you already know about gates, flip/flops and simple sequential logic, you’re ready to dive right in! Course material includes draft chapters for a book on computer design and slides.

I hope that you will be able to use this course for background knowledge once I begin to experiment with and write up Papillio projects. I would probably base class projects on Xilinx FPGAs (Papillio) if I were teaching this course today. Papillio makes hardware design personal and affordable. I would love to see more computer science students take up hardware design, especially in high school. Perhaps this course will help you out.

Courseware is here

Finally, the courseware section of the site is open for business!

The first course is undergraduate data structures. I taught this course twice at Tufts University. Topics include the most important elements of the old ACM 2001 “CS2” curriculum along with a basic introduction to software engineering. The course is compatible with the “new” ACM 2013 curriculum which distributes computer science topics across one or more courses. Most of the hours are devoted to data structures with software engineering and algorithms/complexity playing secondary roles.

The main web page provides a rationale for the course design. It lays out the syllabus for a one semester course (15 to 16 weeks). The syllabus links to a full set of lecture notes. These notes should be a gold-mine for any instructor — high school or college — who needs to develop and deliver a course on data structures. I tried to meld and blend the best information I could find on each topic, usually from multiple textbooks. Of course, if you are a student, please dive in and browse, too!

The main course page also has links to the projects. I drew inspiration from my background as a system programmer, so the projects are not your usual “search tree this, search tree that.” The projects include lexical analysis, expression evaluation and discrete event simulation among other subjects. For the more advanced projects, I provided a source code framework/infrastructure to the students to help get them started. They were required to design to an interface specification and then integrate their implementation into the framework. This approach allowed my students to attack larger problems with more substance and purpose.

The course uses C++. Quite often, however, the code examples were translated from Java. So, it shouldn’t be too hard to translate back to Java. The examples do not use STL, Boost or templates that would hinder translation to Java or reuse.

Please take a look! For your convenience, here are links to a sampling of topics: stacks,
linked lists, trees, debugging, algebraic datatypes (ADT) and testing.

I will be rolling out additional courses during the month of August. These courses will be hardware-oriented: computer design, VLSI systems and computer architecture. If you ever prep’ed a course, you know how time consuming it can be to simply organize course material. Blog posts will be a little less frequent until I complete the courseware section.