A Review of Project Obelisk

After testing out most of the projects that the class has done, I have to say that the one that impressed me the most is Project Obelisk. The scope of the code is immense when compared to all the other projects. I don’t have much experience with Java myself, but the code looks clean and concise. The project loads in external resource to run, leading me to believe that it will be quite modifiable which a nice example of Unix design. The game works well, and is for very enjoyable too. Well, at least for the most part anyways. I do have a couple of gripes:

Firstly, it is quite awkward to have to click the left and right mouse buttons to attack. I feel that these actions should be mapped to the keyboard. Secondly, when attacking an enemy, the enemy should be pushed back a little bit. This would allow the combat to be a little more dynamic than just standing still and constantly attacking while being attacked. And finally, it would be nice if noise were somehow implemented. As I am playing the game, I am imagining that every time my sword swings, I hear Link swinging his sword.

All of those comments aside however, I am quite impressed by the fact that a full game world has been realized with collision detection, enemy AI, and very smooth rendering. Given a bit more work, this could definitely evolve into a very fun game.

Software, Multithreading, Excitement

The Software Engineering class here at Virginia Tech is nothing to scoff at. Homework accounts for 80% of the grade for the course this semester. Don’t let that title fool you though; we don’t get homework, we get projects. On the first day of class professor Plassman said that the average assignment will be about a thousand lines. This might have been an underestimate for some people though; just my source code (no headers) for my last assignment was almost 1,600 lines. Even though the assignments require plenty of work, they are some of the most interesting I’ve ever.

In this class, we learn to program in C++ using the Qt framework. Initially using Qt was frightening to me (although perhaps it still is). Learning to use the massive number of Qt classes and functions and features is an undertaking. They empower you to do so much though. Our latest assignment was to computer simulator with a GUI interface. Once all is said in done, it is quite amazing to see how pushing buttons on my GUI asynchronously updated the state of the simulator. To think that our processor – a unit notable for sequential execution of instructions – can react accordingly to a variety of inputs at random times. This is the power of using a multitasking operating system like Linux and multithreaded applications.

Just today, we began learning how to use QThreads (a part of Qt) to give us even more fine grained control of our programs’ threading. I can already think of a bunch of fun projects that I can take on now with QThreads. Perhaps I can start on a parallel linear algebra library or N-body simulator. Multithreading is quite an interesting topic to learn.

A Playground for Python

Not too long ago I was introduced to a website called Project Euler:

http://projecteuler.net/

Once you create an account on this website you are free to tackle hundreds of creative math puzzles. They are wonderful because they not only require solid mathematical analysis to solve, but also generally require one to write programs to perform the task at hand. The early problems are incredibly simple, but they get progressively harder as you go on; most of the latest problems look like complete gibberish to me. To solve these problems, I decided to go with Python as it is very simple and quick to develop with and it includes many useful features right out of the box like arbitrary precision arithmetic (a must for many Project Euler problems). Using python my solutions are generally no more than a mere 10-20 lines of code, but generally a fair amount of time is spent crafting those lines as I analyze the problem. Once a problem is complete, a forum thread opens up to you that is visible to all others who have solved it. This way, you can share your solutions with others around the world. Looking through these threads I find a variety of different languages being used: C, C++, python, Java, and others. Sometimes I find x86 assembly solutions (Those people must be a little insane). Overall however, this site was a wonderful way for me to program in Python with a more mathematical feel; I would suggest all of you to try it as well.

Console PC Convergence

I grew up playing video games, I play video games now, and I will continue playing the for the foreseeable future. I imagine that many of you Unix users are quite similar to me in that regard. Anyways, as I kid I grew up on a gameboy color, and both the PlayStation 1 and PlayStation 2. Nowadays, I am far too fixated on PC gaming to bother with gaming on consoles anymore, but the PlayStation 4 announcement that happened just recently really caught my attention.The system will run on an AMD-based x86 processor. That’s certainly a first for a game console. I know that Linux has been installed on PlayStation 3s before, but the performance wasn’t anything spectacular because the kernel is generally optimized for x86 processors. Assuming Sony doesn’t prevent other OS from being installed (I certainly wouldn’t put it past them) one could potentially install any modern distro of linux onto a PlayStation 4 and be able to use it as any normal computer would. In fact, one might even be able to get Windows up and running on one (as interesting as that would be because Microsoft is Sony’s competitor in the console arena). On the other hand, rumors about Microsoft’s next Xbox console suggest hardware that is quite similar to the PlayStation 4’s. We can most likely expect to see an AMD x86 CPU in that console as well. Considering this, Microsoft definitely has the capability of installing their Windows operating system on their Xbox consoles. It would certainly be interesting to see that happen. People nowadays expect their devices to have multiple uses. Nobody uses telephones anymore; we all use smartphones that can surf the web, run apps, and call people. I expect the same multipurpose functionality to become part of the game console experience too. If not this generation though, maybe the next. Perhaps one day consoles will just disappear from the gaming market altogether, and nothing will be left except for gaming PCs.

A Wonderful Programming Environment

I’ve been using Linux based operating systems (mostly Ubuntu, however I’ve dabbled in some other distributions) for just about a year now. When I first started using Ubuntu, I had no idea how to get anything done. I simply had the operating system installed on my computer for the fact of having it rather than using it. I came in with the desire for a Windows-like experience and almost no will to try anything else, so I didn’t make it very far. However, I was lucky enough to have a software engineering internship this past summer and had a wonderful group of engineers help me in the process of getting acquainted with Linux. In the beginning of the internship I dabbled in the terminal only when it was necessary, used gedit to write all of my programs, and didn’t even know how to compile my C++ code. Through the internship, I got used to bash and many of its powerful features, I learned to use vim (a program that could only be described as a nightmare to me when I used it first), and I learned to use python and GCC to develop scripts and programs to achieve my tasks. While I could do many of these things in Windows, my productivity soared in Linux. Linux now has claimed its place as my favorite development environment. Frankly, it’s just fun to program in Linux.