Git repos
Git is a free and open source, version-control software. Github is a private company that has thrown its servers open to the public to store their git repositories online for free (subject to size constraints). This frees people from the hassle of setting up their own online repositories, and aids in small-scale collaborative coding. My own github page can be found at https://github.com/dileepvr. While most of them have licenses and README files, some of them have interesting stories behind them.
spice-pinball
Oregon Center for Optical, Molecular, & Quantum Science, under the direction of its assistant Director Dr. Brandy Todd, has been hosting SPICE CAMP at the University of Oregon for several summers now. It is typically billed as a two-week long, science and engineering camp for middle-school girls, although the definition undergoes subtle changes every iteration. The camp itself is split into three tracks: Discovery (for 6th graders), Forensics (for 7th graders), and Engineering (for 8th graders). Participants are expected to attend all three tracks over three summers.
I got involved with SPICE when a friend with a shared interest in beam-robotics convinced me to volunteer for it. I was tasked with leading some Engineering camp sessions, and designing/debugging/assembling electronics for it. One year, we decided to add microcontroller programming to the curriculum, and I was asked to design and teach a few pilot sessions on it. Based on the feedback, we decided to make Arduino programming a core component of the camp. As it stands to day, the engineering camp has the participant teams learning to program an Atmega32u4 using the Arduino IDE, learning to use various sensors (piezo elements, push-buttons, IR detectors) and actuators with it, and ultimately integrating the whole into a fully functional pinball table. And I’ve been writing and maintaining some libraries in this git repository to make the coding easier to implement and parse.
The lessons/sessions have been neatly formatted into a hypertext tutorial-style website by Andrea Goering. Wes Erickson and Cody Jarrett have also been fellow contributors. Some of the functionality (like the motor H-bridge) requires custom PCBs to function. The library itself is very transparent and convenient. I find myself often using it in other projects when I don’t want to bother with internal timer and interrupt registers for the avr chips that power the whole thing. This library has been released under a modified version of the MIT license.
decks
CARD COUNTING IS LEGAL.
The best (worst?) a casino can do if they suspect you of it is to bar you from playing blackjack, and share your face and name with all associated casinos using a distributed blacklist maintained by one of many dedicated private companies. This repository contains code meant to simulate blackjack games under various house rules and counting strategies. So far, I’ve only implemented dealer-vs-single-player, but this could easily be extended to multiple players at the same table, each at various positions using their own strategies. This is able to reproduce results from other independent sources pretty well, so I’ve trusted it enough to base decisions on it during my own adventures.
The code is written in C, and I’ve released it under the MIT license. The file main.cu exists in the repo because at one point, I considered using this project to teach myself some cuda-GPU programming. I have since found other avenues for that goal.
Tadpole-SDL
Ever since I played my first videogame, I’ve wanted to make one from scratch. This dream is yet to be fully satisfied (watch this space). Tadpole was an early attempt at a casual, 2D, sprite-based arcade experience. In more recent times, I’ve been very interested in socket programming, and network protocols. I decided to turn the software into a casual, live multiplayer, party game. The idea is to have the game server persistently running on a projector at a gathering. The game can spawn players at any time for every instance of a TCP socket being opened and the right information exchanged (ideally, this should be done over local wifi). The objective is to stay alive as long as possible, and climb the hi-score board.
Wes Erickson is working on a Javascript controller, which would allow one to name and spawn a player, and control it via the browser by visiting a url. So this could be played on cellphones. I intend to make some hardware controllers on breadboards for this as well (watch this space). The rest of the code has been sucessfully field tested.
I had a lot of fun coding the AI for this. The frogs show pack behavior.
They are aware of each other’s movements and will try to flank you, guard
the fly, and so on. The background waves are all sequences of sprites
with an alpha-channel transparency layer. The sound effects are from
creative commons licensed files floating about on the web. Someday, I
hope to port it to render with openGL
or openGL_ES
, so as to exploit
hardware acceleration.
novenaX-kicad
If you’ve followed my blog posts on Rightshift, you’ll know of Project
Novena-X. I am building a laptop around the Novena Motherboard. I have
gone a bit crazy with the project, and am trying to interface with a
rediculously proprietary, backlit, Dell keyboard (0wx4jf
), and also
deck the front display panel out with a character LCD module, an E-ink
display, as well as internal i2c
devices and an nRF24l01+
module.
The circuitry meant to interface between all of these diverse elements is relying on USB hubs and a bunch of avr microcontrollers (the schematics can be found in the repo). I have laid them out on 2-layer PCBs using the open-source kicad suite, which Ihappen to use for all my PCB (printed circuit board) projects.
The layout has undergone some iterations. I am currently testing the various subsystems to see if they work independently.
I am using OSHPark as a PCB printing service. They print 2-layer boards at $5 per square inch (with 3 copies of the board included in that price). They also print 4-layer boards at a different prince. Just upload the zip file inside the gerber folder of the project repository unto their website and you are good to go.