Richard Stallman
This weekend I stumbled across a video posted on http://rt.com/ that made me question everything I believed about modern day computing. Richard Stallman expresses some eye opening views on computing, free software, and the dangers of social networking websites.
Source: Stallman: Facebook IS Mass Surveillance
Free Software
After reading further, I found myself becoming very excited about the ideas of free software (free as in freedom, not as in free beer). I spent quite a bit of time reading up on The GNU Operating System and I am very impressed. I tried out several GNU/Linux distros including Dragora, gNewSense, and the eventual winner Parabola, which is a variant of Arch Linux striving to be purely GNU/Linux-libre. “Linux-libre is a project that aims to publish and maintain modified versions of the Linux kernel that include only free software.” Parabola GNU/Linux-libre is a very clean and pure distro to aide you in your quest to promote and use free software.
The Free Software Foundation
The Free Software Foundation, or FSF, is the not for profit organization that is pushing towards the GNU ideals of free software. According to their website, “The FSF advocates for free software ideals as outlined in the Free Software Definition, works for adoption of free software and free media formats, and organizes activist campaigns against threats to user freedom like Windows 7, Apple’s iPhone and OS X, DRM on ebooks and movies, and software patents.” This is simply amazing!

Recommended Free Software Alternatives
Necessary Sacrifice
Please understand that in order to take the dive into the world of free software and computing freedom that there are sacrifices involved. There are several software packages that you may rely on every day that you don’t realize are non-free. Making the leap to one of the GNU/Linux pure free distros could come as quite a shock to some. Some of the major software I will miss includes flashplayer, Chromium, and I am sure more to come as I use Parabola this week at work. You have been warned! But keep in mind, the sacrifice is for the greater good. Using and promoting purely free software is the only way to go. The user deserves the freedom. You deserve the freedom. If you want to modify a program to do something random that you want it to do, then you should be able to.
Further Resources
I am proud to announce that TechnoGeeks now has it’s own server in Atlanta, GA! I have officially migrated from Ubuntu to Debian in the process. I have finally scrubbed Ubuntu from my life for good!
Operating Systems of Choice
Server: Debian Squeeze
Desktop: Arch Linux
Phone: Android
I am starting to nerd out a lot more lately and will expand TechnoGeeks to be able to magically host several projects of mine. This includes web applications written in PHP, Ruby, and Lua! I started playing around with some of the Kepler Project frameworks (WSAPI, Xavante, and Orbit) and have a fully functioning Code Snippet library called Snippy. Orbit is ULTRA FAST but the documentation and code maintenance is VERY POOR. I really hope these guys clean things up as they have something really nice going here. More updates soon!
Update 12/5/2011:
I have several new projects and services that are now up!
Finding the Right One
Over the past year I have really got around when it comes to Linux distributions and even FreeBSD. This post is going to be a quick run down of my experiences with each and a reflection on my feelings about them. Please keep in mind that I have not touched Red Hat based distros since college so this post may seem quite biased. For this, I apologize in advance. I have not had the desire or need to try them and still had quite a ride without them as well. Please read on and I am sure you will agree.
Also, please keep in mind that these are solely the views of me and me alone. You may or may not agree with me and that is fine. I am simply giving you my opinions and feelings that I have after undertaking this epic journey.
February 2010 – Ubuntu

At this point I just got a new job and my main desktop and server experience was with Ubuntu. The shop mainly uses Ubuntu for their work machines so it was the obvious choice. It was a typical Ubuntu install with the Gnome window manager.
Pros:
Cons:
April 2010 – Arch Linux

A buddy of mine at work was highly influential, and still is. He was constantly raving about Arch Linux and eventually got me overly curious. He helped me struggle through the installation and I read through their absolutely amazing wiki docs and picked everything up quick. It is quite impressive. He also convinced me to try awesome window manager which is amazing once you get the key bindings down. However, I originally got fed up with Arch because it was so different and jumped ship.
Pros:
Cons:
June 2010 – Xubuntu / Lubuntu

After using awesome with Arch I wanted to try something more lightweight than gnome so I went for Xubuntu. XFCE and LXDE basically provide most of the functionality of Gnome without the bloat. After a while I missed awesome and installed it and switched back to it but still was using apt packages. I coasted with the Xubuntu + awesome install for a long time as I had no real urge to switch until I started having the random urges to play with source code again.
Pros:
Cons:
January 2011 – Gentoo

I have had some bad experiences with Gentoo in the past due to lack of understand but I wanted to try a source based distro again. I finally got a sound understand of proper configurations and how to effectively use portage this time, but a little late. I was absolutely terrified to upgrade packages because I originally accepted ~amd64 for the first half of use and was scared what would happen after I started white listing on a package basis. I originally could not get some core needs to work, such as PPP with my USB EVDO card and the Ruby-GTK bindings with some applications I needed for work.
Pros:
Cons:
March 2011 – FreeBSD 8.2

A buddy at work (yes, the same one) convinced me to try FreeBSD. I had issues with the installer and it took a while to figure out that I needed to load a kernel module so it would recognize my drive labels. After that, the install was a breeze and I really liked everything. The deal breakers this time is lack of compatibility with lots of 64 bit apps (virtualbox being a biggie). I also could not use Chromium, AFS, or my USB EVDO card. It was a fun two weeks though!
Pros:
Cons:
April 2011 – Ubuntu 10.10
Went back to Ubuntu on a whim. Everything just works even better than I last tried but Gnome is just as bloated as ever. I also saw that btrfs is now native in Ubuntu and gave it a try. I would recommend holding off as I dont think it is quite ready yet. Extracting a tarball pretty much tanked the box and I noticed that btrfs requires about 20-25 processes to always be running for it to function. WTF? I then started playing with source packages. I wrote a script called snag that made the downloading, building, and extracting trivial. This, however, was not enough. I then pondered for a several days on which operating system is closest to my idea of the most ideal. My requirements were simple.
If you peaked ahead you already know my choice. If you haven’t read ahead, can you guess before moving your eyes below which one I chose?
.
?
.
?
.
?
.
?
.
?
.
?
.
?
.
?
.
?
.
April 2011 to Current – Back to Arch!
You guessed it (I think)! I am heading back to Arch tonight and I can’t wait. It is the only distribution where everything I need has worked in the past. It is also the only one that meets all of the criteria that I have for what I consider an ideal operating system. I hope to make it last. Wish me luck!
While learning Lua for WoW addons, I was lucky enough to discover a neat pure lua app called Sputnik. It is a wiki engine that can be extended to do just about anything you want it to do. For example, I have all of the data storing in git with a git plugin and changed the default auth to hit MySQL instead of a flat file. The possibilities are endless and they have several example plugins for ideas (issue tracker, discussion posts. etc).
I hope one day to get good enough with Sputnik and lua to provide a Postgres auth plugin and a blog plugin as well. Yuri, the project maintainer is really good at answering people that need assistance on their mailing list. It was there that I discovered they have a git repo and a new version: Galaxy.
The bottom line: this project is worth checking out and contributing to people so get to it!
Lua For the Win!
I recently have randomly become quite interested in Lua. The reasoning is due to the fact that I interact with two things on a daily basis that are configured and/or scripted in Lua: World of Warcraft and the Awesome window manager. I have had a blast over the weekend learning the basics of the languages and WoW addons. You can find the entire first edition of a very nice guide to learning Lua on their website. In addition, I found the resources at www.wowprogramming.com to be quite helpful.
Some essentials:
Celistine
The first mod I wrote was called Celistine, and was written to monitor my wife in game
It allowed her to whisper me for auto-invites to a group, monitors her range and informs me if she is far, and spams her with whispers if my health gets lower than 25%.
Deeps
After that, I decided to modify an example I found in the book I am reading (World of Warcraft Programming) and create a simple frame that displays DPS and other facts as I am in combat. I decided to call it Deeps
See below for the screenshots, code, and feel free to try it out yourself.
-- Set up some local variables to track time and damage
local start_time = 0
local end_time = 0
local total_time = 0
local total_damage = 0
local average_dps = 0
local in_combat = false
function CombatTracker_OnLoad(frame)
frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
frame:RegisterEvent("PLAYER_REGEN_ENABLED")
frame:RegisterEvent("PLAYER_REGEN_DISABLED")
frame:RegisterForClicks("RightButtonUp")
frame:RegisterForDrag("LeftButton")
end
function CombatTracker_OnEvent(frame, event, ...)
if event == "PLAYER_REGEN_ENABLED" then
-- This event is called when the player exits combat
end_time = GetTime()
total_time = end_time - start_time
average_dps = total_damage / total_time
CombatTracker_UpdateText()
CombatTracker_ReportDPS()
in_combat = false
elseif event == "PLAYER_REGEN_DISABLED" then
-- This event is called when we enter combat
-- Reset the damage total and start the timer
CombatTrackerFrameText:SetText("In Combat!")
total_damage = 0
start_time = GetTime()
in_combat = true
elseif event == "COMBAT_LOG_EVENT_UNFILTERED" and in_combat then
local timestamp,log_event,source_guid,source_name,source_flags, dest_guid, dest_name, dest_flags, spell_id, spell_name, spell_school, amount = ...
if string.match(log_event, "_DAMAGE") then
if source_name == UnitName("player") or source_name == UnitName("pet") then
--ChatFrame1:AddMessage(source_name .. " is doing teh hurt!")
if amount ~= nil then
total_damage = total_damage + amount
end_time = GetTime()
total_time = end_time - start_time
average_dps = total_damage / total_time
CombatTracker_UpdateText()
end
end
end
end
end
function CombatTracker_UpdateText()
local status = string.format("%ds | %d dmg | %.2f dps", total_time, total_damage, average_dps)
CombatTrackerFrameText:SetText(status)
end
function CombatTracker_ReportDPS()
local msgformat = "Dished out %d damage in %d seconds (%.2f dps)."
local msg = string.format(msgformat, total_damage, total_time, average_dps)
if GetNumPartyMembers() > 0 then
SendChatMessage(msg, "PARTY")
else
ChatFrame1:AddMessage(msg)
end
end