Blog


Manually Installing phpMyAdmin (Ubuntu 18.04)

Sometimes installing phpMyAdmin manually, as opposed to using apt, is necessary. This might be because you're using MySQL 8 and/or PHP 7 and the version provided by Ubuntu's apt repository either won't install or won't function with this setup. You also may just want the latest version for the virtues that come with staying up-to-date. Whatever the reason, this tutorial will run you through the basic process of doing so.

The server I'm using is running Ubuntu 18.04 (though this tutorial will likely need little to no revision for previous versions), Apache 2.4.37, MySQL 8.0.13, and PHP 7.2.14. The latest version of phpMyAdmin at the time of writing is 4.8.4.

Read more

Installing an Up-To-Date LAMP Stack (Ubuntu 18.04)

Having spent a fair bit of time lately setting up new servers and installing LAMP stacks, I figured I'd write a tutorial on the basic process I use. And while there are plenty of tutorials covering the installation of the LAMP stack on Ubuntu, there aren't many I could find which ensure that latest versions of each component are installed.

Therefore, this tutorial will run you through several fundamental things that should be done to set up any Ubuntu server, such as user creation, SSH configuration, and firewall setup. Following that, it'll take you through installing the latest versions of Apache, MySQL, and PHP. At the time of writing, these versions are 2.4.37, 8.0.13, and 7.2.13 (discounting the very recent 7.3.0), respectively.

Read more

Projects Over the Last Few Years

As mentioned in the previous post, over the last few years I haven't made use of or added anything to my website, due to a mixture of the system being a hassle to use and more important things taking my time. A fair chunk of my time have been devoted to my computer/software engineering degree at QUT, which has been a great experience thus far. That said, this post aims to summarise the things I've done and released that weren't added to the website during this time.

First I participated in two more Ludum Dares, three if you count the fact that I didn't make a post about Super Space Invader, the result of Ludum Dare 31. Ludum Dares 34 and 37 resulted in Labyrinthian and Keeper of the Altar, respectively. I'd count Super Space Invader, an action-packed two-button arcade shooter, as the most polished Ludum Dare game I've ever made. Labyrinthian had an interesting vibe and gameplay mechanic but was a bit letdown by its implementation. Keeper of the Altar was another well-made arcade game by my standards, with similar features to Super Space Invader; my third best Ludum Dare game in my opinion.

Read more

Website Overhaul

After four or so years of inactivity I decided I'd give the website an overhaul. I registered a new, better-looking domain (ebens.me) and over the past couple weeks I've programmed a new system and ported over the majority of the content from the previous website (nova-fusion.com). The main noteworthy features are a revamped games section and new photo gallery showcasing some of the photos I've taken over the past few years.

As good as Jekyll (what the old website ran on) was, it had become cumbersome for me. Regenerating and uploading the website after each change took longer with each new piece of content and eventually became too much for me to bother. Besides this, I wanted greater and easier flexibility for different types of content; perhaps Jekyll has improved here, as it's been a long time since I've kept up-to-date with the project. That said, my favourite about Jekyll was being able to update a site based on text files, so I incorporated that functionality into the new system. Files are pushed to the server using Git and the server updates its database using the diff produced by the push. It's convenient and Git pushes are often quicker than comparative SFTP uploads.

Read more

Ludum Dare 27: Triad

For pretty much all of this year I haven't really been doing any game development (nor posts). But I'm starting to get back into it now; a couple weeks ago I started working on my arena shooter again, and now I've participated in the 27th Ludum Dare. It would seem my period for "not participating in the main competition" was only eight months. :P

The game I made is called Triad. You can download it from the previous link, or rate/comment at its Ludum Dare page.

Read more

Ludum Dare 25

Well, I participated once again in Ludum Dare and managed to succeed in creating a game (unlike last time). The game I created is called Amongst Shadows, and you can play it here on my website, or rate/comment on it at its Ludum Dare page.

Anyway, on with the post-mortem.

The theme was "You are the Villain"; I had hoped it would be "End of the World", given the date and that I had a good idea for it, but that was not to be. Now this was a somewhat difficult theme for me, because I hate playing characters of the evil archetype; I wasn't going to create some mindless mass-murder simulator. I decided to make the morality of your actions somewhat ambiguous. You're on an infiltration job for some mysterious organisation, you're probably a mercenary, making you morally grey. Furthermore, it isn't clear whether this organisation is good or bad, though it's hinted that they're bad.

Read more

Ammo 1.0

This is just a post announcing that Ammo 1.0 has been released (changelog). After a couple months in the 0.x range, I feel it's ready to be pushed up to 1.0. Hopefully soon I can create some tutorials for the library; the documentation is complete and up-to-date, but documentation isn't particularly good at conveying the big picture.

Anyway, if you've got any feedback on the library, please let me know.

Read more

Linked Lists in Lua

As an example of creating custom data structures in Lua, I thought I'd give a little demonstration of a linked lists implementation. Note that this isn't going to be an in-depth tutorial or anything; for the most part I'll just be showing pieces of the code.

Linked lists are wonderful data structures, perfect if you need to efficiently add, remove, and iterate through elements. The one trade off is that you can't find an element by an index.

Read more

Ammo

This announcement post is a bit overdue, but, better late than never. A short while ago, I released the first version (0.1) of Ammo, my organisational library for LÖVE. Its current version is 0.1.3. I plan to let the library stay in the 0.x range for a while as it's tested by me and any others who use it.

Along with the core library, there's a number of extensions available. The one I'm most excited about is ammo-debug, a versatile, highly customisable debugging console. It provides stuff like output logging, a command system, info graphs, and even simple live coding support. At present its version is 0.2.

Read more

Custom Cursors in Love2D

When making a game in LÖVE, you'll probably end up needing to customise the mouse cursor. As I recently had to do just that, I thought I'd make a quick tutorial on it. If you want an example cursor, here's the crosshair I'm using in a game right now.

Now, all of what we need is contained within the love.mouse module. The first step is to hide the mouse with love.mouse.setVisible. You'll probably want to do this in love.load:

Read more

Lua for Programmers Part 4: Tips and Tricks

If you haven't read the previous parts (one, two and three), then I'd highly recommend doing so. For reference, here's a list of the parts in this series:

Command line arguments are stored in the arg table. For example, if we had the script foo.lua:

Read more

Lua for Programmers Part 3: More Advanced Concepts

If you haven't read part one and two already, I'd highly recommend doing so. For reference, here's a list of the parts in this series:

In part one I stated that Lua has "braces of a sort in the form of keywords like then and do." Much like a language with C-based syntax, these "braces" represent blocks, which are essentially sequences of statements. An example of some blocks in Lua:

Read more

Lua for Programmers Part 2: Data and Standard Libraries

If you haven't read part one already, I'd highly recommend doing so. For reference, here's a list of the parts in this series:

  • Part 1: Language Essentials, covers fundamental syntax and concepts such as operators, loops, and functions.
  • Part 2: Data and Standard Libraries, the current part; covers Lua's built-in data types and some of the standard libraries.
  • Part 3: More Advanced Concepts, deals with things like variable scope, advanced functions, and file loading.
  • Part 4: Tips and Tricks, a collection of small things that you may find useful.

Tables are essentially associative arrays which can have keys and values of any type. Tables are incredibly flexible, and are the only data structure in Lua, so knowledge of them is crucial.

Read more

Lua for Programmers Part 1: Language Essentials

In this series we'll be taking a look at most everything you should know to program in Lua. The series is targeted at people who already know how to program, and as such I'll aim to be brief in my explanations.

Here's an overview of the four parts the compose the series:

In case you didn't already know, Lua is an interpreted programming language. It's fast, flexible, embeddable, simple, and easy to learn. You can get Lua from its download page.

Read more

Illusive Dreams: Test Build 5

Well, it's been some time since I've released a test build for Illusive Dreams hasn't it? Work on it has been very slow lately; both I and Jeremiah haven't done all that much on it during the last few months. Nevertheless, a lot has happened to the game since the last test build, and I thought it best to release a new one before I go off to Brisbane. You can find the build here: /games/illusive-dreams/test. Any feedback, suggestions, etc., would be most welcome.

Read more

Getting More Ratings in Ludum Dare

I thought I'd share a few quick tips on getting more ratings, which I've picked up in my experience with Ludum Dare. Please note, I'm not putting this down as fact or anything, but merely expressing my own opinion.

Yeah, this one's kind of obvious by now I'd say. Your "coolness level" increases by one per game you rate, and the cooler you are, the higher chance you have of getting rated. Games are picked for people to rate both by how high the author's coolness is, and how low the number of ratings are.

Read more

Rock 'n' Slash: Ludum Dare 23 Postmortem

Well, I think it's about time I made my Ludum Dare 23 postmortem. First of all, I blame not posting in a long time on my seemingly inherent laziness. Procrastination is an easy trap for me it seems, but that's another topic altogether.

Back on subject, the latest Ludum Dare took place between April 21st and 24th, with the main competition ending on the 23rd. It just so happens that this event was Ludum Dare's 10th anniversary, which is pretty awesome.

Read more

Ludum Dare 22 Postmortem

A couple of in-game screenshots

Last weekend was Ludum Dare 22, and of course, I participated. The game I created is entitled Uncorrupted; there's more information available at its page on my website and on Ludum Dare. You could also check out the time-lapse of my work on the game.

Read more

Illusive Dreams: Test Build 4

The fourth test build for Illusive Dreams has been released. Chapter two has been finished, with nine new levels, in-game text replacing cutscenes, and many other modifications and fixes.

I haven't been able to do anything with the commonly reported "white screen" bug, as I'm not able to reproduce myself. Please let me know if it occurs in this build. If it hasn't disappeared, I'll have to put more effort towards hunting it down.

Anyway, all feedback would be greatly appreciated. Thanks!

Read more

Illusive Dreams: Test Build 3

I've now released the third test build for Illusive Dreams, and as usual, it's bigger than the last one. There's eight new levels, re-arrangements of previous levels, another night time music track, and many modifications and fixes. Check it out and let me know what you think. Thanks!