C++11 provides us with a ton of new tools for expressing complex ideas in an efficient way. C++11 is unique among modern languages in that it provides a productive syntax, while also generating exceptionally fast code. For the first time ever, software engineers are responsible for increasing the performance of software systems. For decades we’ve been standing on the shoulders of hardware engineers. Hardware engineers have been increasing the clock speeds of our processors, but we’ve hit a physical limit. It’s our turn to pick up the baton in this relay race and get to the finish line. C++11 provides a number of tools to help us get there, and smart pointers are one such tool.
Continue reading »
Black-Hat hacking in an controlled environment, like this, is an important skill for software developers. The Art of War describes knowing one’s enemy, and with the prevalence of internet-enabled applications today, it has never been more critical to know how the “enemy” can take down a system. While capture-the-flag is a fun, and exciting intellectual game, it is serious training for software engineers of all types, and skill levels. I recently setup a small capture the flag event for the Arizona Linux User’s Group, and it was very fun.
To setup a catpure the flag event, here are a few guidelines I found useful:
- Brute-force attacks are no fun. There is no intellect involved, and while one brute forces the box, no one else can have a try.
- Setup a box to provide services to the rest of the network. Clearly define this box as off limits.
- Use virtual machines for target systems. This allows one to restore the system from an image if someone goes too far.
- Physically separate the game from any other networks.
- Provide ISOs of Backtrack Linux
The French government dismantled and destroyed the Mona Lisa, along with a number of other masterpiece paintings today after courts decided that paintbrushes are copyrighted. Furthermore their derivative works, i.e. items creating using paintbrushes, are subject to copyright infringement. This of course is a fabrication, but this is exactly the point Oracle is trying to make when trying to copyright programming languages. Programming languages are tools for programmers to create the world we live in. Everything we do in modern society is influenced by software. Software’s ubiquity is directly correlated to the continued innovation in compilers, and software technology. If we allow the tools to be copyrighted, we relegate ourselves to a world further fraught with lawyers, licensing and stagnated innovation.
C# has a wonderfully flexible delegate system capable of multicast events. This simple tool makes event driven software easier to write, and reduces coupling between objects. In 2003 Herb Sutter implemented a general form of the Observer pattern [1]. He called this the multi_function. It uses a mixture of TR1 and boost components to build a multi-cast delegate similar to C#’s. Fast-forward 9 years, and we now have variadic-templates thanks to C++11. Variadic-Templates allow us to patch a missing component in Sutter’s multi_function.
Continue reading »
