• Not having worked with Java on a large-scale project before, I had also never touched Maven. (In this case, by large-scale project, I mean a project with lots of dependencies and a more involved build process - I did write a rather complex 3D renderer, but it only had a handful of dependencies that never changed and it was a traditional "hit f11 to run" application).

Apache Maven is a tool used for, well, a lot of things. It works with Java, C# and a bunch of other languages and automagically manages your dependencies and build process. It's essentially Ant's bigger brother.

When looking to add an existing library as a dependency to a project, it's very often to see it offered as a maven artifact. It would look something like this:

<dependency>
<groupId>com.ning</groupId>
<artifactId>async-http-client</artifactId>
<version>1.7.22</version>
</dependency>

This can be a tad frustrating if you're in a hurry and you just want to download a jar to add to your build path. You just want to keep working and not have to deal with Maven. But worry not, Eclipse and I are here to help! It's very easy to sort this out in only a few minutes!

• Every now and then, you stumble across amazing learning resources on the web. Some great, extensive tutorials which lie on websites that somehow look deserted. You take a look - it's not spam, the tutorials are there, for free, ready to enlighten you. The only ominous thing about them is the fact that it seems that nobody is using that site. There might be a comment section inhabited by only a couple of lonely comments. The site itself might look like it's ancient, but a closer look reveals posts are all very rich, just sitting there, waiting for someone to learn what they have to teach.

I got this feeling when I stumbled upon Open Security Training.

The site is extremely simple but filled with amazing content at the same time. I was amazed when I found the wealth of information on that website. Everything is free, licensed under Creative-Commons Share Alike license. And I don't mean quick 5 minute how-tos or 15 minute screencasts. These are multiple hour-long, in depth courses, with slides, code samples and additional resources. Grab the slides and click the video links. You find yourself at the beginning of a 10 hour-long playlist on, say, x86. This is just the introduction. You can continue with the intermediate x86 course, an introduction to ARM or an introduction to software exploits. All of them - 6-10 hours long.

There are some other great, well-known sites such as Coursera, Udacity and Khan Academy which are also amazing resources. They are also quite popular, so I won't be talking about them in much detail here, since they don't need the extra advertisement. They are gems, that's for sure, just not hidden ones.

I found myself addicted to Xeno's lectures, and now I'm already cruising through the intermediate x86 course, frantically taking notes, looking at slides and writing x86 assembly code.

The only thing that I believed was a bit of a problem was the absence of homework assignments in the form of programming challenges. I did go through all of the examples, re-wrote them, altered them (e.g. managed to successfully overflow my buffers and hijack my own program, which was a lot of fun), but some more concrete assignments would have been nice.

This was only a problem while going through the main body of the course (the introductory one), since at the very end, the students (myself included) were presented with Carnegie Mellon's binary bomb. And this more than compensated for everything else! I will probably be talking about the bomb (and its numerous variations) in another article, but what this "bomb" basically is, is an executable that's provided with no source (and only a handful of debug symbols) which expects some sort of text input. You give it the right input, and it's defused. Feed it the wrong one and it blows up. And the only way to figure out what input it wants, is to run it with a debugger attached and simply step trough the assembly code, tearing it apart and, essentially, reverse-engineering it. This has been, by far, the best programming challenge I've ever done when it comes to ASM. I've had one A-HA moment after the other, constantly digging through the instructions and figuring out what makes the bomb tick. It was very, very fun. From now on, this will be the number one thing I will recommend to absolutely anyone wishing to really learn x86.

The material is there, up for grabs! What are you waiting for?

• So Windows Azure has recently launched something called Mobile Services, which is what they call Backend-as-a-Service (BaaS). This is, in essence, one level of abstraction above PaaS (Platform as a Service) and two levels above IaaS, which is Infrastructure as a Service. BaaS is pretty cool. Like, really, really cool. And this article will consist of me explaining exactly why BaaS is such a cool thing.

But in order to fully explain that, we need to go back and think about what advantages PaaS offers when compared to its "lower-level" sibling, IaaS.

So, first off, given this context, what do infrastructure and platform actually mean?

• Well, here's my first update, with still not much to show. However, I've managed to add some rudimentary libgdx particle system support, as well as adding dynamically spawned enemies. I've also done some internal refactoring to speed up future development.

BGMS stands for Beasts Grant me Strength, by the way.

An actual demo is hopefully on the way.

• So I attempted to take part in the latest Ludum Dare which took place this weekend. I had even written an article about the contest and the preparations I was undergoing (or, at the very least, planning), just a week before. Friday evening eventually came, and the theme that was picked was 10 seconds. I decided not to do any actual coding in the first evening and get a lot of sleep - which ended up costing me a lot, considering that I ended up being busy Saturday morning and afternoon. This is what killed this project as a LD entry.

However, I'm quite content with the idea that I came up with, and I feel that it would be pretty fun to play once I get to implement all the content I currently have in mind.

The Ludum Dare team has come up with an additional challenge, called The October Challenge. In order to complete it, one must complete a game, publish it and earn \$1 from it. That's it. It's the idea of finishing a project and putting it out there on the market.

I will take on this challenge, but I will limit myself to the first two goals. To just publish my game (for free!) on the Android Market, by the end of October. Progress will obviously be tracked on this blog every Sunday.

Like stated before, the theme of this competition was "10 seconds". My approach was to build an infinite running hack'n'slash/shoot'em'up game where the player's abilities (and, as a consequence thereof, the gameplay style) would change every ten seconds. Each "state" is associated with an animal whose abilities the human character you're playing as takes on. The bear aspect enables melee slashes that deal a lot of damage. The raven has a weak attack but causes dead enemies to explode and damage other, potentially causing satisfying chain reactions. The peacock can deflect enemy attacks, but doesn't attack itself. These are the main three animals I will implement, with the goal being to add way more of them for the player to unlock, as they progress. Randomly cycling through these should be tuned so that it keeps the game fresh and doesn't frustrate, confuse or bore the player.

The end goal is to have the game feel really good, exciting and rewarding. This kind of game relies on replayability. Flying numbers, combos, screen shaking, upgrades, light effects, and all that juice.

Right now, I just handle the basic game states - load/menu/startup/playing/dead/restart/quit. Some sort of progress tracking and crude level generation is also in place, but that's pretty much it. This is the current menu screen that greets the player upon startup.