Math.getRandomNumber = function(min, max)
{
   return Math.random() * (max - min) + min;
}

Math.getRandomInteger = function(min, max)
{
   return Math.floor(Math.random() * (max - min + 1)) + min;
}
Requester = function(path, query, text)
{
   this.path = path;
   this.query = query;
   this.text = text || false;
   this.build();
}

Requester.prototype.build = function()
{
   if (window.XMLHttpRequest)
   {
      this.request = new XMLHttpRequest();
   }
   else
   {
      this.request = new ActiveXObject("Microsoft.XMLHttp");
   }
}

Requester.prototype.execute = function()
{
   var url = this.build_url();
   this.request.open("GET", url, false);
   this.request.send();
   return this.text ? this.request.responseText : this.request.responseXML;
}

Requester.prototype.build_url = function()
{
   var url = this.path + "?" + +new Date;
   if (!!this.query)
   {
      url += "&" + this.query;
   }
   return url;
}

Requester.prototype.toString = function()
{
   return "[object Requester]";
}
PerformanceTest = function(methodName)
{
   var args = arguments;
   this.incomingMethodName = methodName;
   this.incomingArgs = Array.prototype.slice.call(args, 1, args.length);
}

PerformanceTest.prototype.run = function()
{
   var methodName = this.incomingMethodName;
   var args = this.incomingArgs;
   var startTime = Date.now();
   this.response = window[methodName].apply(null, args);
   this.executionTime = Date.now() - startTime;
}

PerformanceTest.prototype.buildResults = function(showResponse)
{
   var results = this.incomingMethodName + "(), " + this.executionTime + "ms";
   if (showResponse)
   {
	 results += ", " + this.response;
   }
   return results;
}
Animation=function(b,a,c){this.rate=b;this.playing=false;this.deviation=0;this.skip_frames=a||false;this.buffer=c||false};Animation.prototype.play=function(b,a){if(b==null){b="sequence"}var c=this.extract_parameters(arguments);var d=this;this.reset_last_ms(a);this.interval=window.setTimeout(function(){d.playing=true;d.loop(b,c)},a)};Animation.prototype.reset_last_ms=function(a){if(this.skip_frames){this.last_ms=+new Date-this.rate;if(a){this.last_ms+=a}}};Animation.prototype.loop=function(a,c){var e=1;if(this.skip_frames){e+=this.measure_deviation()}var d=this;for(var b=0;b<e;b++){d[a].apply(d,c)}if(this.playing){this.interval=window.setTimeout(function(){d.loop(a,c)},this.rate-this.buffer)}};Animation.prototype.measure_deviation=function(){var a=0;var b=+new Date;var d=b-this.last_ms;var c=d-this.rate;this.deviation+=c;this.last_ms=b;if(this.deviation<-this.rate){this.deviation+=this.rate;a--}else{while(this.deviation>this.rate){this.deviation-=this.rate;a++}}return a};Animation.prototype.stop=function(){window.clearInterval(this.interval);this.playing=false};Animation.prototype.extract_parameters=function(a){if(a.length>2){a=Array.prototype.slice.call(a);return a.slice(2)}return[null]};Animation.prototype.toggle=function(){if(this.playing){this.stop()}else{this.play()}};Animation.prototype.toString=function(){return"[object Animation]"};
window.getSize=function(){if(window.innerWidth!=undefined){return{width:window.innerWidth,height:window.innerHeight}}var a=document.body;var b=document.documentElement;return{width:Math.max(a.clientWidth,b.clientWidth),height:Math.max(a.clientHeight,b.clientHeight)}};
Color=function(){this.setRGB.apply(this,arguments)};Color.prototype.setRGB=function(){if(arguments.length>1){this.rgb=[arguments[0],arguments[1],arguments[2]]}else{if(arguments.length>0){var a=arguments[0];if(a instanceof Array){this.rgb=a}else{if(a.slice(0,3)=="rgb"){this.rgb=this.extractRGBFromTuple(a)}else{this.rgb=this.extractRGBFromHexString(a)}}}else{this.randomize()}}};Color.prototype.extractRGBFromTuple=function(a){var b=a.match(/\d+/g);return[+b[0],+b[1],+b[2]]};Color.prototype.extractRGBFromHexString=function(c){var e=parseInt(c.slice(1,3),16);var d=parseInt(c.slice(3,5),16);var a=parseInt(c.slice(5,7),16);return[e,d,a]};Color.prototype.randomize=function(b,a){this.rgb=this.buildRandomRGB(b,a)};Color.prototype.buildRandomRGB=function(d,c){var d=d||0;var c=c||255;var f=this.getRandomInteger(d,c);var e=this.getRandomInteger(d,c);var a=this.getRandomInteger(d,c);return[f,e,a]};Color.prototype.getRandomInteger=function(b,a){return Math.floor(Math.random()*(a-b+1))+b};Color.prototype.getString=function(){var d=parseInt(this.rgb[0]);var c=parseInt(this.rgb[1]);var a=parseInt(this.rgb[2]);return"rgb("+d+","+c+","+a+")"};Color.prototype.changeBrightness=function(a){for(var b=0;b<this.rgb.length;b++){this.rgb[b]+=a}};Color.prototype.toString=function(){return"[object Color]"};
Math.getRandomNumber=function(b,a){return Math.random()*(a-b)+b};Math.getRandomInteger=function(b,a){return Math.floor(Math.random()*(a-b+1))+b};
Requester=function(b,a,c){this.path=b;this.query=a;this.text=c||false;this.build()};Requester.prototype.build=function(){if(window.XMLHttpRequest){this.request=new XMLHttpRequest()}else{this.request=new ActiveXObject("Microsoft.XMLHttp")}};Requester.prototype.execute=function(){var a=this.build_url();this.request.open("GET",a,false);this.request.send();return this.text?this.request.responseText:this.request.responseXML};Requester.prototype.build_url=function(){var a=this.path+"?"+ +new Date;if(!!this.query){a+="&"+this.query}return a};Requester.prototype.toString=function(){return"[object Requester]"};
PerformanceTest=function(b){var a=arguments;this.incomingMethodName=b;this.incomingArgs=Array.prototype.slice.call(a,1,a.length)};PerformanceTest.prototype.run=function(){var c=this.incomingMethodName;var b=this.incomingArgs;var a=Date.now();this.response=window[c].apply(null,b);this.executionTime=Date.now()-a};PerformanceTest.prototype.buildResults=function(b){var a=this.incomingMethodName+"(), "+this.executionTime+"ms";if(b){a+=", "+this.response}return a};
#!/usr/bin/python

from distutils.core import setup

SUMMARY="Assign arbitrary order to a directory's contents"
DESCRIPTION = "\n" + file("description").read()
CLASSIFIERS = [
    "Development Status :: 3 - Alpha",
    "Environment :: Console",
    "Intended Audience :: End Users/Desktop",
    "License :: Public Domain",
    "Operating System :: POSIX :: Linux",
    "Programming Language :: Python",
    "Topic :: System :: Filesystems",
    "Topic :: Utilities",
    ]

setup(
    name="Itemize",
    version="0.3",
    description=SUMMARY,
    long_description=DESCRIPTION,
    author="Frank DeMarco",
    author_email="frank.s.demarco@gmail.com",
    url="http://cyclops.asia/",
    packages=["itemize"],
    scripts=["src/itemize"],
    package_dir={"itemize" : "src"},
    classifiers=CLASSIFIERS
    )
import os
import sys
import re
from optparse import OptionParser
from Album import *

class Itemizer:
    
    OPTIONS = [
        ("-d", "destination", "destination directory", "DIR", "./"),
        ("-i", "index", "item index", "INT"),
        ("-f", "file_path", "input file", "PATH"),
        ("-s", "silent", "suppress messages", None, False, "store_true"),
        ("-v", "verbose", "verbose output", None, False, "store_true"),
        ("--delimiter", "delimiter", "field delimiter", "CHAR", "_"),
        ("--copy", "copy", "copy files", None, False, "store_true"),
        ("--deitemize", "deitemize", "deitemize", None, False, "store_true"),
        ("--sim", "simulate", "simulate itemization", None, False,
         "store_true"),
        ("--regroup", "regroup", "order items consecutively", None, False,
         "store_true"),
        ("--no-name", "no_name", "rename file to only item number", None, False,
         "store_true"),
        ]
    USAGE_MESSAGE = "Usage: %prog [options] PATH_1..PATH_n"

    def __init__(self):
        self.init_input()
        if len(sys.argv) > 1:
            self.add_file_contents_to_item_list()
            self.album = Album(self.options.destination, self.options.delimiter,
                               self.options.copy, self.options.simulate,
                               self.verbosity, self.options.regroup,
                               self.options.no_name)
            if self.options.deitemize:
                self.album.remove(self.item_paths)
            else:
                self.album.add_items(self.item_paths, self.options.index)
            self.album.commit()
        else:
            self.parser.print_help()

    def init_input(self):
        self.parser = OptionParser(self.USAGE_MESSAGE)
        self.parse_arguments()

    def parse_arguments(self):
        for option in self.OPTIONS:
            default = option[4] if len(option) > 4 else None
            action = option[5] if len(option) > 5 else None
            self.parser.add_option(
                option[0], dest=option[1], help=option[2],
                metavar=option[3], default=default, action=action)
        self.options, self.item_paths = self.parser.parse_args()
        self.set_verbosity(self.options.silent, self.options.verbose)

    def set_verbosity(self, silent, verbose):
        if verbose:
            self.verbosity = 2
        elif silent:
            self.verbosity = 0
        else:
            self.verbosity = 1

    def add_file_contents_to_item_list(self):
        if self.options.file_path != None:
            for line in file(self.options.file_path):
                line = line.rstrip()
                line = line.strip("\"")
                if line[0] != "#":
                    self.item_paths.append(line)

    @staticmethod
    def is_item(path):
        if os.path.isfile(path):
            file_name = os.path.basename(path)
            if re.match("^[0-9]+.*", file_name):
                return True
        return False

    @staticmethod
    def extract_item_number(path):
        file_name = os.path.basename(path)
        match = re.match("^([0-9]+).*", file_name)
        if match:
            return int(match.group(1))
        return None
216.73.216.164
216.73.216.164
216.73.216.164
 
September 30, 2015


Edge of Life is a form I made with Babycastles and Mouth Arcade for an event in New York called Internet Yami-ichi, a flea market of internet-ish goods. We set up our table to look like a doctor's office and pharmacy and offered free examinations and medication prescriptions, a system described by one person as "a whole pharmacy and medical industrial complex".

Diagnoses were based on responses to the form and observations by our doctor during a short examination. The examination typically involved bizarre questions, toy torpedoes being thrown at people and a plastic bucket over the patient's head. The form combined ideas from Myers-Briggs Type Indicators, Codex Seraphinianus and chain-mail personality tests that tell you which TV show character you are. In our waiting room, we had Lake of Roaches installed in a stuffed bat (GIRP bat). It was really fun!

The icons for the food pyramid are from Maple Story and the gun icons are from the dingbat font Outgunned. I'm also using Outgunned to generate the items in Food Spring.