Linux Kernel 3.1 has arrived!

Tux, the Linux mascotJust this morning, Linus Torvalds released the Linux kernel 3.1 into the mainline branch. This was merely a few days after Linux kernel 3.0 hit the Internet. Apparently the new version numbering scheme is doing its job well. Still this release has been relatively silent and without much fanfare, as neither Linus or Kernel.org have published any announcements or posted on their mailing list yet.

Changes

The current lack of publicity in this version does not mean that there is nothing nice in this new release. There have been a plethora of new improvements whipped up in this batch of the kernel. Here are a few highlights:

  1. Open source graphics driver improvements
    • This is an epic win for GNU/Linux! Notable GPU fixes and speedups include the buggy Ivy Bridge, Intel GMA 500, Nouveau, and ATI drivers, among others.
  2. Filesystem usage
  3. Dynamic Writeback Throttling
    •  “Writeback” is when programs copy data from RAM and write it to your hard disk. To keep busy programs from overwriting their own RAM data, “context throttling” comes in handy. Throttling is telling a process or two to not create any new data until the current data has been copied to disk (hint: think of a street crossing guard).
    • Unfortunately, the older writeback was not very mindful of the filesystem dutifully tidying up your hard disk, and would sometimes interfere with its cleanup work and corrupt its structure. The new writeback system can now intelligently check when the filesystem is busy and adjust its throttling habits accordingly, keeping your hard disk clean and boosting performance.
  4. OpenRISC support
    • Yay! OpenRISC is a project by the OpenCores organization aimed at creating a modern computing CPU platform based upon the classic RISC, fully licensed under the GNU LGPL License, and now Linux can boot on it. I’m not surprised, as Linux can be made to run on basically anything. 🙂
  5. Wiimote Controller support
    • Finally, the Wii remote works! The driver has been around for a while, but it has now been added to the official kernel repositories.

More Information

To see a full description of the new Linux kernel 3.1 fixes and improvements, I’d recommend you visit this page at KernelNewbies.org. It explains the rather cryptic changelog in a well-organized, plain English wiki page. Now, all that is left is to wait for Linux kernel version 3.2, which (unsurprisingly, given the new warp-speed version numbering scheme) is already in the works…

Honeyd: Your own virtual honeypot

Featured image: “DEFCON In Action #2” by Ambrosia Software

HoneyD Logo
Today, I will discuss a very interesting tool called Honeyd (pronounced “honey-dee” or “honey-daemon“). It is a powerful virtual honeypot tool written by Niels Provos and released as open source under the GNU General Public License v2.0, as part of the Honeynet Project. It runs on many Linux distributions and BSD’s.

A honeypot is a public or private computer that is intentionally left insecure, unpatched, without an anti-virus or firewall, etc. which encourages malicious hackers to attack it for behavioral analysis or for spamtrapping. This is a perfect tool for catching potential black-hat network intruders or spammers and monitoring their behavior. If you like, you can even build a massive open “playground”, giving any hacker (good or bad) a testbed to develop their skills and put their knowledge and techniques to the test without disrupting others.

If you have the cash, you can up multiple honeypots in your home or workplace, which act as convincing “decoy machines” that can help protect your legitimate computers from crackers. Networks like these are called honeynets.

Read more

Library Review: SFML

Visit SFML's project page

Hello everybody and welcome! I decided that I will review a very, very useful cross-platform library that I have been using often lately called SFML, which stands for “Simple and Fast Media Library”. For those who don’t know, SFML is a game library (at version 1.6 at this time of writing), which is a collection of C++ functions that can aid you in making games, and is similar in spirit to another more mature game library called SDL (“Simple DirectMedia Layer”).

Let’s say that you wish to create a sidescroller like Mario, for example. Instead of researching deeply through the net and going into the nitty-gritty of setting up the window and coding unimportant (but complex) components, you could simply bundle SFML together with your project’s code. SFML can take care of playing the sound effects or video cut-scenes, displaying textures and loading game maps, interacting with OpenGL for 3D graphics, etc. while you focus on actually writing the game logic itself.

❗ NOTE: SFML is not a game engine! It is a bit more low-level than that, and it does not include any drag-and-drop editors or media creation tools. It’s purely source code, and you are expected to already know how to program in order to use it. However, it  is powerful enough that it could actually help you create a game engine of your own.

In this review, I will go over the features of the library and explain what it can do. I will also supply an example C++ snippet that demonstrates how to initialize SFML, along with step-by-step explanations of what the program does and how it works. I will finish by outlining SFML’s pros and cons, summarizing my overall impressions, and telling you whether it is worth being in your toolbox as a programmer.

Read more

Minimal Linux distros for the Ubuntu refugee

Fed up with Ubuntu? Image from Wikipedia.
Fed up with Ubuntu?

I’ve seen many people get frustrated with Ubuntu’s new direction in terms of its user experience, its recently worsening speediness, and its mixed-bag Unity interface. I was one of them! When I first tried Ubuntu back in 2008 (version 8.04 LTS), it ran like a dream on my shoddy 1.6GHz, 1GB DDR2 RAM, Windows Vista laptop. I loved GNU/Linux’s ease of use, efficiency, and its immunity to virtually all known malware. With each release, Ubuntu seemed to get better and better, with a slicker interface, better driver support, bugfixes, and a more diverse package repository every time.

When version 10.04 LTS was released, that’s when the shit hit the fan for me. I liked its new “Ambience” theme and I was enthusiastic about the improved Linux kernel release.

Later on, problems started cropping up. My wireless drivers broke down unexpectedly, 2D/3D acceleration performance was worsening on my integrated Intel GMA 965, the interface was getting increasingly sluggish, boot times were gradually lengthening, and despite my constant config file tweaking and fine tuning, my frail laptop eventually sank into a dependency hell.

I tried out Kubuntu instead for a while, but I didn’t like KDE, so I wiped it soon after. I tried Xubuntu, and while it helped speed up my machine a little, I couldn’t seem to get used to Xfce and its little quirks either, so that distribution was out the window as well.

Ubuntu version 10.10, however, was a far better performer on my laptop than 10.04, and with some more command-line knowledge and some system administration experience under my belt, I managed to keep Ubuntu chugging along for a long, long time on my weak laptop hardware. Those were reasonably happier days, and my programming experience flourished.

By then, I now had a fully custom-built desktop with a Core 2 Duo, 2GB DDR2 RAM, which could run Ubuntu a lot better than my laptop, so I migrated my data there. Still, I longed for an alternative distribution that would run more efficiently on my old lappy.

Read more

uShell Advances… if Slowly

µShell Desktop 0.0.2.6 Screenshot
A screenshot of the latest µShell build (as of this writing).

My hobby shell replacement project, µShell, is improving a lot. It is still far from being finished, and it has a few glitches, but it is still a useable, but limited, shell replacement.

Originally, I was seriously concerened with its high memory usage, but I realized that it seemed to run slowly only because it was being compiled and executed from my USB backup drive. After unplugging the drive and executing the program from my desktop, it ran like a dream. Lately, I have managed to implement some new features during the past few months:

  • A proof-of-concept taskbar. It currently has only two functional buttons:
    1. iTunes Hide: This button will check to see if iTunes is running. If it is, it will hide it.
    2. iTunes Show: The exact opposite of the other button. I’m sure you can guess what it does.
  • Filled the code up to the brim with useful comments. You don’t really need extensive documentation (you will need to read the SOURCEMAP file, though) as the comments serve this purpose well enough.
  • Improved the looks of the program (added translucency and new icons from the Elementary Project’s icon set for Linux).
  • The beginnings of a unified settings manager. It barely has any controls on it, but it’s starting to make use of C#’s Properties.Settings.Default plumbing under the hood. There is still much room for improvement, though.
  • Virtual Desktops! It took me so long to implement this. I feel my head gained weight with all of that reading. It is still limited, though: it only supports two desktops, and there seems to be a severe glitch where µShell doesn’t always start on the second desktop, so when you switch to the second one, you are stuck there.

I understand this shell may be sub-par in its present state, but please remember that although I have been working on it since 2010 (not counting the VB 2008 “Altershell” prototype made in 2009), but only one to six hours a day and with five-month breaks in between. I believe that if I could find a way to effectively juggle high school, summer camps, and my free time, I could really exploit its potential and make something great out of it.

If you wish, please check out my new YouTube video that I have uploaded, which showcases the latest nightly Git build of µShell, which can be found here. Also, if you wish to see the three new & recently added shell screenshots, you can find them in the Pictures page.

Sorry that this post is kind of short in comparison to others (or maybe you are happy that it isn’t a big lecture), but I just wanted to promote my project a bit, after so many long months of no status updates.

Game engines: What they are and how they work

Featured image: Crysis Expanded Mod

Most people are familiar with the following video game titles: Battlefield, Halo, Doom, Civilization, Call of Duty, Half-Life, the Sims, and Unreal Tournament. Chances are, you may have seen the term “game engine” associated with them, but don’t really know what the term means. Perhaps you know what game engines are and think you have what it takes to write your own? In either case, I will introduce you in this article to the wonders of game engines and attempt to explain their internals as simply as I can. I assume that you, the reader, is familiar with basic programming parlance. If not, you might not understand everything I’ve written here.

Basics

A game engine is essentially a software development kit (SDK) that contains the source code and tooling necessary to get a basic video game up and running fast, letting the developer script in the gameplay, levels, and characters, without needing to touch a single line (or at least, much fewer lines) of C/C++ code or know advanced programming.

This allows the game developer to focus more on the gameplay and the “fun factor”, spending less time on complex math and other mundane boilerplate trying to get everything set up. This is analogous to an automobile designer selecting a ready-made engine from a trusted third-party vendor, eliminating the need to build a custom engine from scratch and therefore saving time, money, and effort.

Read more

A List of Ethical Hacking Tools: Part 2

Well, I decided to respond to part 1 of this series with a little shell script which automatically grabs a suite of ethical (and not-so-ethical) hacking and programming tools freely available on Ubuntu’s software repository listings. This should work fine under Debian or other similar distributions as it uses simple apt-get commands, but I cannot promise anything. I will revise this series of posts periodically to improve the listings and fix scripting bugs as time progresses.

See full source code