As somebody who’s followed Aaron Swartz technologically and personally for many years now, it saddens me to hear about his recent passing.

I’ve lost friends to suicide, it’s no joke. There is grievance, there is sorrow, there is curiosity. We can never put ourselves in the shoes of that individual and truly empathize. We try to blame and criticize to help cope with the loss, but it’s never quite enough.

What makes it worse is that I know people have/will label him as a sort of “martyr” in regards to freedom of information, net neutrality, along with countless other initiatives he took part in. Now I’m not undermining his accomplishments at all, don’t get me wrong.

People will naturally take advantage of the situation to run a soap box campaign against whoever they feel is responsible for this and part of that sickens me. Nobody knows for certain why he did it, but in that same aspect, it’s hard to discredit the quick and easy assumption that the prosecutors involved in recent cases were namely to blame.

This has obviously already started to happen, fingers are being pointed. While I hate when tragedies are exploited for political/personal gain, I think it would be a bit disrespectful to Aaron to not look at this with a bit of skepticism.

You can’t tell me that a looming 35 year prison sentence combined with a 1 million dollar fine doesn’t make you consider taking a route like this.

While we won’t ever be able to truly understand what Aaron was thinking at the time, if it was indeed a result of tremendous legal pressure, all I can say is that this country has disappointed me once again. While I’m not going to justify or criminalize Aaron’s actions, it’s quite sad that a white-collar crime like this fetches a heavier sentence than one who rapes or murders.

While this post doesn’t do Aaron justice for everything that he’s done, I know he’s made an impact on countless individuals who will hopefully carry on his ideologies, both in spirit and in practice.

Rest easy Aaron and know that you’ve inspired the hearts of many.

Here are some interesting links pertaining to Aarons’ death:

Lawrence Lessig:

http://lessig.tumblr.com/post/40347463044/prosecutor-as-bully

Alex Stamos:

http://unhandled.com/2013/01/12/the-truth-about-aaron-swartzs-crime

Nothing major, just figured somebody might be able to use it. A basic INI reader/writer utility.

using System.Globalization;
using System.Runtime.InteropServices;
using System.Text;
 
namespace INI
{
    public class INIReader
    {
        private readonly string _filePath;
 
        private Encoding _encoding = Encoding.ASCII;
 
        public INIReader(string filePath)
        {
            _filePath = filePath;
        }
 
        public Encoding Encoding
        {
            get { return _encoding; }
            set { _encoding = value; }
        }
 
        [DllImport("kernel32")]
        private static extern int GetPrivateProfileString(string section, string Key,
                                                          string value, StringBuilder result, int size, string filePath);
 
        public string ReadString(string section, string key, string defaultValue = null)
        {
            var temp = new StringBuilder(500);
            GetPrivateProfileString(section, key, "", temp, 500, _filePath);
            var strValue = temp.ToString();
            return string.IsNullOrEmpty(strValue) && defaultValue != null ? defaultValue : strValue;
        }
 
        public int ReadInt(string section, string key, NumberStyles style, int defaultValue = 0)
        {
            int i;
            return int.TryParse(ReadString(section, key).Replace("0x", ""), style, null, out i) ? i : defaultValue;
        }
 
        public float ReadFloat(string section, string key, float defaultValue = 0)
        {
            float f;
            return float.TryParse(ReadString(section, key), out f) ? f : defaultValue;
        }
 
        public double ReadDouble(string section, string key, double defaultValue = 0)
        {
            double d;
            return double.TryParse(ReadString(section, key), out d) ? d : defaultValue;
        }
 
        public decimal ReadDecimal(string section, string key, decimal defaultValue = 0)
        {
            decimal d;
            return decimal.TryParse(ReadString(section, key), out d) ? d : defaultValue;
        }
 
        public bool ReadBoolean(string section, string key, bool defaultValue = false)
        {
            bool b;
            return bool.TryParse(ReadString(section, key), out b) ? b : defaultValue;
        }
    }
 
    public class INIWriter
    {
        private readonly string _filePath;
 
        public INIWriter(string filePath)
        {
            _filePath = filePath;
        }
 
        [DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string section, string key,
                                                             string val, string filePath);
 
        public void WriteString(string section, string key, string value, string comment = null)
        {
            var concatValue = comment != null ? string.Format("{0} ; {1}", value, comment) : value;
            WritePrivateProfileString(section, key, concatValue, _filePath);
        }
 
        public void WriteInt(string section, string key, int value, string comment = null)
        {
            WriteString(section, key, value.ToString(), comment);
        }
 
        public void WriteFloat(string section, string key, float value, string comment = null)
        {
            WriteString(section, key, value.ToString(), comment);
        }
 
        public void WriteDouble(string section, string key, double value, string comment = null)
        {
            WriteString(section, key, value.ToString(), comment);
        }
 
        public void WriteDecimal(string section, string key, decimal value, string comment = null)
        {
            WriteString(section, key, value.ToString(), comment);
        }
 
        public void WriteBoolean(string section, string key, bool value, bool useNumeric = false, string comment = null)
        {
            if (useNumeric)
                WriteString(section, key, value ? "1" : "0", comment);
            else
                WriteString(section, key, value.ToString(), comment);
        }
    }
}

This is just a small guide on how to setup PySnip on Linux. If you want to set it up on Windows, there is already a featured server here.

This guide assumes basic experience with a terminal and your distro’s package manager.

Since Ubuntu seems to be the most common distro, I’ll provide instructions that use apt-get. If you use a different distro/manager, please refer to your package-manager documentation for the appropriate commands.

First, install the dependencies:

sudo apt-get install python2.7 python2.7-dev python-setuptools python-twisted mercurial gcc g++ zope.interface
sudo python -m easy_install cython
sudo python -m easy_install pil
sudo python -m easy_install jinja2

Next, you can install screen if you’d like:

sudo apt-get install screen

Another optional feature is pygeoip, which will allow you to use the /from command, showing you where individual players are located geographically.

Next you need to either clone the repository using Mercurial.

hg clone https://code.google.com/p/pysnip/
cd pysnip
sh build.sh

If you don’t want to clone the repo, you can download an up-to-date zipped archive of the source here. Just download and extract as normal.

Next you need to edit the configuration:

cd feature_server
nano config.txt

Make sure you change your admin password from the default one.

Finally, run the server:

sh run_server.sh

Or if you are using screen:

screen sh run_server.sh

For help, please refer to the Google Code page or visit the Build and Shoot forums.

7