So, going through some old code on Git-Hub – and having been recently blown away by how cool Gradle is for deployment, building, and testing applications – I decided to fix some issues with some old games I had worked on. Small stuff really. But then I cam across this game, simply called Simple Tank Game, for lack of a better name (It’s working title was Example 8, so it just needed a fracking name). It was a good exercise from my games programming class, and I knew my partner who co-wrote it wouldn’t mind me fixing some bugs, repackaging it, etc.., so I integrated it with Gradle and fixed some minor things, and thought I’d put it up here again. This time, complete for the world to see.
It’s a fairly simple game, but the rules were we could only use Java and OpenGL, and it must use real continuous collision detection, frame by frame, so that in essence things never do collide. Instead, they are detected for collision and dealt with accordingly before the collision occurs in the next frame. This was a concept laid out in our class. So with a lot of Vector math, and a little motivation to learn OpenGL, we wrote this tiny game, and wound up learning a lot. In fact, until LWJGL3 was released, I kept using the engine for slightly more complex game ideas, since it’s a fairly straight forward basic 3-D engine running the game loop.
Recently, I’ve read a free Gradle book I got from O’Reilly, so I decided to redo the rather complicated deployment, this time using Gradle, which is uber cool if you haven’t already been converted. So anyway, here’s the final game, almost 3 years later, with a new build system, better code, and documentation…
Anagrams = new Meteor.Collection('anagrams') in both client and server (which is essential) you would have to have a globals.js file with nothing more than
- bootstrap-3 (for styling)
- bootstrap3:glyphicons (for cool glyphicons)
- moment (for time and date formatting)
- coffee-script (for scripting)
- iron:router (for page routing)
Wordsleuth’s functionality let’s you choose from different dictionaries, it’s main stock dictionary being the Scrabble (TM) Player’s dictionary. Other languages are slated for inclusion, such as Spanish, German, and French. Also, I plan to make native Android app at some point, as I am unhappy with the way Meteor plays with phones at the moment.
Like most projects, it feels like they are never done, but my purpose for this project wasn’t to create the best anagram app on the market, because there are som out there that are admittedly better, but I do imagine I’ll keep adding features and functionality as it comes. The goal of my project was to make a finished MeteorJS product that has minimal styling (because I’m not a front-end developer by any means, and I am horrible at writing 21st century html), and that I could share with other developers at Meteor events, etc…, in the hopes of proving that 1) I am somewhat competent at writing Meteor apps, and 2) I can actually finish a product, even if I’m a little unsure about a few things. At some point though, you have to move on, and put out what you have. Nothing is ever perfect, at least not to me.
Anyway, if you have time, or are curious, my app can be found here and the Git Hub project is located here.. Thanks for reading, I’ll post updates to the app as they come about. Until then…
For our final project in CS3600 Operating Systems, Stephen Chavez and I wrote an operating System in ARMv6 assembly language that runs on the Raspberry Pi. Our initial work was based of a tutorial called Baking Pi, a Cambridge University operating systems programming tutorial that targets the Raspberry Pi. We completed the tutorial series, and from there went on to add functionality, ramp it up, and create a bare-bones operating system that could be re-purposed for many things.
The code is all ARM, although it uses a custom c Library for the generic keyboard driver. The compiled files are linked together using a linker script and a make-file written by Alex Chadwick, who also wrote the tutorial series. ApothemOS is approx 5000 lines of assembly language code, more than 75% of it being our modifications to what we were left with after completing the tutorial.
One of the most important aspects of our functionality is the complete control over all GPIO pins available. Apothem OS can turn on or off any or all or none of the 54 GPIO pins on the board. via it’s command line, and functions are in place where combinations could be applied. There is a command for each one, i.e.
gpio16 on would turn on GPIO pin #16.
ApothemOS has 59 commands, control over all GPIO pins, a help menu, and several humorous ASCII art commands based on Linux programs such as “cowsay” or other similar programs that echo text. We were more or less just trying to display functionality. However, things can still get confusing, so we added a help menu command
help. The help menu is informative and tells the user how to use each command currently in use in a helpful and simple way, we believe at least.
But having control over all available GPIO pins is a great place to start with I/O and I’ve constructed a 3X3X3 cube to test the pin functionality with some success. Initially, our project was going to be to try to get the LED lights to sync with music, but we ran out of time. An OS is a large enough undertaking as it is in 5 weeks. Here is a picture of the GPIO breakout connected to a breadboard that houses the test LED cube, which BTW, taught me I’m not a very good electrical engineer.
The future of ApothemOS could be that it is re-purposed and stripped down to a level where teachers could assign ARM programming assignments on a Raspberry Pi running ApothemOS, so that the student should get a hands on learning experience. When I learned ARM at first, it was very difficult to even find a way to emulate it, let alone have any fun with it. All this would require would be that students at the particular institution would have to be required to buy a Raspberry Pi unit, but the cost for a bare bones raspberry Pi is $35 and a full kit with everything you could need as a beginner runs roughly $60. So it’s not that unreasonable to ask of a student to purchase one of these units.
Here’s a pic of my unit I got as a present that cost $60:
I plan to attempt to persuade my school to adopt this teaching device for assignments, and hope that something good can come out of it. If not, ah well, I tired… But working with Stephen and doing this assignment (which was not one of the original three assignment choices, but a custom one we got permission for), I learned more about assembly programming doing this assignment than I have in the last 2 years running simulators.
Overall, this was a great way to learn ARM, we are very proud of it, and we hope it can benefit others. It’s licensed in a way that you could do whatever you wanted with it, and the whole source code/developers package can be downloaded from git-hub for people to check out by clicking on this link.. Or you could download a ZIP file in the downloads section in the widgets bar. That site also includes a project description, links to pictures, videos, etc… It’s really the place that documents the project as a whole and the best resource we have to offer. Feel free to make pull requests or fork to your own repository through GIT, SVN or whatever you use. It’s there for people to play with at this point. We had a lot of fun making it, so I hope everyone checks it out if you have the time.