written for CODeDOC + also published on its website
http://www.whitney.org/arport/commissions/codedoc/Levin/index.html
http://www.whitney.org/arport/commissions/codedoc/Levin/axis.html
/*
AxisApplet by Golan Levin
http://www.flong.com/
15 August 2002.
-------------------------
"An Axis can't have more than three countries," explained Iraqi President
Saddam Hussein. "This is not my rule, it's tradition. In World War II you
had Germany, Italy, and Japan in the evil Axis. So you can only have three.
And a secret handshake. Ours is wicked cool."[1]
President Bush's recent assertion that North Korea, Iraq and Iran form an
"Axis of Evil"[2] was more than a calculated political act -- it was also
an imaginatively formal, geometric one, which had the effect of erecting a
monumental, virtual, globe-spanning triangle.
Axis is an online tool intended to broaden opportunities for similar kinds
of Axis creation. It allows its participant to connect any three points in
space [countries] into a new Axis of his or her own design. With the help
of multidimensional statistical metrics culled from international public
databases[3], the commonalities amongst the user's choices are revealed.
In this manner, Axis presents an inversion of Bush's praxis, obtaining
lexico-political meaning from the formal act of spatial selection.
-------------------------
References:
[1] "Angered by Snubbing, Libya, China, Syria Form 'Axis of Just as Evil'".
SatireWire, 1/30/2002. http://www.satirewire.com/news/jan02/axis.shtml
[2] "In Speech, Bush Calls Iraq, Iran and North Korea 'Axis of Evil'".
State of the Union Address, 1/29/2002.
[3] The databases referenced in this project are listed at the
end of this document.
-------------------------
Acknowledgements:
Thanks to Christiane Paul and the Whitney Museum for initiating and
sponsoring Axis. Andrea Boykowycz generously researched and prepared the
database materials for this project. Additional thanks to Tanya Bezreh
and Zachary Lieberman for enjoyable brainstorming. The map used in Axis
was created with Tony Steinke's excellent online MapMaker.
-------------------------
Caveats:
For practical reasons of display, some countries whose areas are less than
50000 square km do not appear in Axis. The boundaries and names shown and
the designations used in Axis do not imply the expression of any opinion
whatsoever on the part of the author or publisher concerning the legal
status of any country or territory of its authorities, or concerning the
delimitation of its frontiers or boundaries.
Although we have tried our best to document all possible Axes, our data
indicates that not all threesomes of countries have yet completed their
Axis registration form. Thus only approximately half of the 6 million
possible Axes are displayable at this time.
*/
import java.awt.*;
import java.applet.*;
import java.awt.image.*;
public class AxisApplet extends Applet implements Runnable {
//-----------------
// Declaration of variables.
// See end of document for inlined database.
Thread appletThread = null;
boolean stopThreadP = false;
int csrX, csrY;
int iter = 0;
FontMetrics fm,fa;
String axisStr = "";
String ctryStr = "";
String liteStr = "";
String axisStr2= "";
char iCh[] = new char[3];
boolean doText = true;
Font axisFont = new Font("Arial", Font.PLAIN, 11);
Font ctryFont = new Font("Helvetica", Font.BOLD, 14);
Font liteFont = new Font("Arial", Font.BOLD, 12);
Color colb = new Color(102,102,102);
Color col1 = new Color(72,72,72);
Color col2 = new Color(60,60,60);
Color colu;
final int FF = 255;
final int BASE = 72;
final int PDEC = 8;
final int MIN_SLEEP = 11;
final int MAX_PLAY_TIME = 19;
final int NCOL = 256;
final int NBIT = 8;
final int IW = 919;
final int IH = 476;
final int IY = 64;
final int APP_W = 919;
final int APP_H = IH+IY;
final int NPELS = IW*IH;
final int AXI_W = APP_W*2/3;
final int GC_FREQ = 120;
Image displayArea, srcImg, dstImg;
MediaTracker tracker;
PixelGrabber grabber;
MemoryImageSource mis;
IndexColorModel pal;
boolean loadedSrc = false;
boolean filtered = false;
byte srcArray[];
int csrIndex = 0;
byte palr[]; byte palg[]; byte palb[];
byte curr[]; byte curg[]; byte curb[];
int whichSel[];
int highlites[];
int curCtryID;
int bx,by,bw,bh;
float bxf,byf,bxa,bxb,bya,byb;
//-----------------
// Initialization of variables.
public void init(){
resize (APP_W, APP_H);
displayArea = createImage (APP_W, APP_H);
srcImg = createImage (APP_W, APP_H);
dstImg = createImage (APP_W, APP_H);
srcArray = new byte[APP_W*APP_H];
tracker = new MediaTracker(this);
prepareImaging("world.gif");
fm = this.getFontMetrics(liteFont);
fa = this.getFontMetrics(axisFont);
curCtryID = 0;
whichSel = new int[3];
highlites = new int[nCountries];
for (int i=0; i<3; i++){ whichSel[i]=-1;}
for (int i=0; i
bxf=APP_W/2; byf=APP_H/2;
bxa=0.36f; bxb=1.0f-bxa;
bya=0.29f; byb=1.0f-bya;
bh=20;
}
//-----------------
// Generic threaded Applet plumbing.
public void start(){
stopThreadP = false;
requestFocus();
if (appletThread == null){
appletThread = new Thread (this);
appletThread.start();
}
}
public void stop(){
stopThreadP = true;
if (appletThread != null){
appletThread.stop();
appletThread = null;
}
}
public void destroy(){;}
public void update(Graphics g) { paint(g);}
public void update(){ paint(this.getGraphics());}
public void run(){
while (appletThread != null) {
long then = System.currentTimeMillis();
compute();
update();
try{ if (!stopThreadP) {
try {Thread.sleep(MIN_SLEEP);}
catch(InterruptedException e){}
long now = System.currentTimeMillis();
int napTime = (int) (MAX_PLAY_TIME - (now-then));
if (napTime > 0) {
try { Thread.sleep(napTime);}
catch (InterruptedException e) {}
}
} else {
if (appletThread != null) {
appletThread.stop();
appletThread = null;
break;
}
}
} catch (Exception e) { break;}
}
}
//-----------------
// Imaging and palette plumbing.
void prepareImaging(String imageName) {
// load in the background image
boolean allLoaded = false;
if (!allLoaded) {
srcImg = getImage (getDocumentBase(),imageName);
tracker.addImage (srcImg, 0);
try { tracker.waitForAll(); allLoaded = !tracker.isErrorAny();
} catch (InterruptedException e){};
if(!allLoaded){stop();}
}
// store the image's pixel values for later testing
grabber = new PixelGrabber(srcImg,0,0,APP_W,APP_H,false);
try { grabber.grabPixels(); }
catch (InterruptedException e){;}
if ((grabber.status() & ImageObserver.ABORT)!=0){;}
srcArray = (byte[])(grabber.getPixels());
loadedSrc = true;
grabber = null;
// construct an interpolated color palette
palr = new byte[NCOL]; palg = new byte[NCOL]; palb = new byte[NCOL];
curr = new byte[NCOL]; curg = new byte[NCOL]; curb = new byte[NCOL];
for (int i=0; i
float fi = (float)i/(float)(NCOL-1);
curr[i] = curg[i] = curb[i] = (byte)0;
palr[i]=(byte)(BASE+40.0*Math.pow(fi,9.0));
palg[i]=(byte)(BASE+80.0*Math.pow(fi,6.0));
palb[i]=(byte)(BASE+120.0*Math.pow(fi,3.0));
}
// create a new image which uses the palette
colu = new Color(FF&palr[NCOL-1],FF&palg[NCOL-1],FF&palb[NCOL-1]);
pal = new IndexColorModel(NBIT,NCOL,curr,curg,curb);
mis = new MemoryImageSource(IW,IH,pal,srcArray,0,IW);
mis.setAnimated(false);
dstImg = createImage(mis);
}
//------------------
// Central computation method.
synchronized void compute(){
if (loadedSrc){
highlightCountryAtCursor(csrX, csrY);
// Update the current palette
for (int i=0; i
int vali = highlites[i] = Math.max(0, highlites[i]-PDEC);
curr[i]=palr[vali]; curg[i]=palg[vali]; curb[i]=palb[vali];
}
// Flash the selected countries
int which, nSelected = 0;
for (int i=0; i<3; i++){
which = whichSel[i];
if ((which >= 0)&&(which
curr[which]=curg[which]=(byte)FF;
curb[which]=0;
nSelected++;
}
}
// Construct the displayed texts:
// Fetch and assemble the list of countries
ctryStr = "";
nSelectedCountries = nSelected;
if (nSelected > 0){
long comProp1 = Long.MAX_VALUE;
long comProp2 = Long.MAX_VALUE;
for (int i=(nSelected-1);i>=0;i--){
which = whichSel[i];
if ((which>=0)&&(which
ctryStr += countryNames[which]+((i>0)?", ":" : ");
comProp1 &= countryProp1[which];
comProp2 &= countryProp2[which];
iCh[i]=countryNames[which].charAt(0);
}
}
// Assemble the axis string
if(doText){
// intersect the properties
int nCommonProp1 = 0;
int nCommonProp2 = 0;
for (int b=0;b<63;b++){ if(((comProp1>>>b)&1)>0){nCommonProp1++;}}
for (int b=0;b
int nProps = nCommonProp1+nCommonProp2;
// Use various grammatical rules to make something sensible
axisStr2 = axisStr = "";
if (nSelected == 3){
boolean initial=((iCh[0]==iCh[1])&&(iCh[1]==iCh[2]));
if (nProps>0){
axisStr="Axis of ";
int prop=0;
long common;
int bit,strw;
boolean wordy=false;
for (int b=0;b
common = (b<63)?comProp1:comProp2;
bit = (b<63)?b:(b-63);
if (((common>>>bit)&1)>0){
String pnb=propNames[b];
if((nProps==1)&&(propAdjs[b]>0)){
axisStr+="the "+pnb;
if(initial){axisStr+=letStr+iCh[0];}
axisStr+=".";
} else {
strw=fa.stringWidth(axisStr+pnb);
if((++prop)
if(wordy||(strw>AXI_W)){
axisStr2+=pnb;
if(propVerbs[b]>0){axisStr2+="ing";}
axisStr2+=(nProps>2)?", ":" ";
wordy=true;
} else {
axisStr+=pnb;
if(propVerbs[b]>0){axisStr+="ing";}
axisStr+=(nProps>2)?", ":" ";
}
} else {
if(wordy||(strw>AXI_W)){
axisStr2+=pnb;
axisStr2+=(propVerbs[b]>0)?"ers":" countries";
if(initial){axisStr2+=letStr+iCh[0];}
axisStr2+=".";
wordy=true;
} else {
axisStr+=pnb;
axisStr+=(propVerbs[b]>0)?"ers":" countries";
if(initial){axisStr+=letStr+iCh[0];}
axisStr+=".";
}
}
}
}
}
} else {
if(initial){axisStr="Axis of countries"+letStr+iCh[0]+".";}
else{axisStr="These countries have not yet registered their Axis.";}
}
}
}
doText=false;
}
// Construct the floating indicator box
bw = Math.max(fm.stringWidth(liteStr)+12,24);
bx = (int)Math.round(bxf=bxa*bxf+bxb*((csrX>(bw+20))?(csrX-bw-20):(csrX+20)));
by = (int)Math.round(byf=bya*byf+byb*(csrY-bh/2));
// Update the world
pal = null; pal = new IndexColorModel(NBIT,NCOL,curr,curg,curb);
mis = null; mis = new MemoryImageSource(IW,IH,pal,srcArray,0,IW);
mis.setAnimated(false);
dstImg.flush();
dstImg = null;
dstImg = createImage(mis);
if(((++iter)%GC_FREQ)==0){System.gc();}
filtered = true;
}
}
//-----------------
// User interaction methods.
public boolean mouseDown (Event evt, int x, int y){
csrX = x; csrY = y; selectCountryAtCursor(x,y); return true;}
public boolean mouseMove (Event evt, int x, int y){
csrX = x; csrY = y; highlightCountryAtCursor(x,y); return true;}
public boolean mouseDrag (Event evt, int x, int y){
csrX = x; csrY = y; highlightCountryAtCursor(x,y); return true;}
void selectCountryAtCursor(int x, int y){
if ((x>=0)&&(x
(y>=IY)&&(y
csrIndex = (y-IY)*IW + x;
if ((csrIndex < NPELS)&&(csrIndex>=0)){
int ctryID = 0xFF & srcArray[csrIndex];
if ((ctryID >=0) && (ctryID < nCountries)){
if ((ctryID!=whichSel[0])&&
(ctryID!=whichSel[1])&&
(ctryID!=whichSel[2])){
whichSel[2]=whichSel[1];
whichSel[1]=whichSel[0];
whichSel[0]=(curCtryID = ctryID);
}
} else {
ctryStr = axisStr2 = axisStr = liteStr = "";
if (whichSel[0]>-1){highlites[whichSel[0]]=FF;}
if (whichSel[1]>-1){highlites[whichSel[1]]=FF;}
if (whichSel[2]>-1){highlites[whichSel[2]]=FF;}
whichSel[0]=whichSel[1]=whichSel[2]=-1;
}
}
}
}
void highlightCountryAtCursor(int x, int y){
doText=true;
csrIndex = -1;
if ((x>=0)&&(x
(y>=IY)&&(y
csrIndex = (y-IY)*IW + x;
if ((csrIndex < NPELS)&&(csrIndex>=0)){
int ctryID = 0xFF & srcArray[csrIndex];
if ((ctryID >=0) && (ctryID < nCountries)){
highlites[curCtryID=ctryID] = FF;
liteStr = ""+countryNames[curCtryID];
} else {
liteStr="";
}
}
}
}
//-----------------
// Double-buffered rendering; the main drawing method
public synchronized void paint(Graphics g) {
try {
// Get a nice fresh rectangle
Graphics gr = displayArea.getGraphics();
gr.setColor(colb);
gr.fillRect(0,0, APP_W, IY);
gr.setColor(Color.black);
if (filtered){ gr.drawImage(dstImg, 0,IY,this);}
else { gr.fillRect(0,0, APP_W, APP_H);}
gr.drawRect(0,IY-1, IW-1, IH);
// Draw the list of countries
gr.setFont(ctryFont);
gr.setColor(col2);
gr.drawString(ctryStr, 11, 22);
gr.setColor((nSelectedCountries==3)?Color.yellow:Color.gray);
gr.drawString(ctryStr, 10, 21);
// Draw the axis string
gr.setFont(axisFont);
gr.setColor(col2);
gr.drawString(axisStr, 11, 38);
gr.drawString(axisStr2,11, 54);
gr.setColor(Color.yellow);
gr.drawString(axisStr, 10, 37);
gr.drawString(axisStr2,10, 53);
// Draw the floating indicator box
if ((liteStr!="")&&(csrY>=IY)){
gr.setColor(colb);
gr.fillRect(bx,by,bw,bh);
gr.setColor(Color.black);
gr.drawRect(bx,by,bw,bh);
if ((whichSel[0]==curCtryID)||
(whichSel[1]==curCtryID)||
(whichSel[2]==curCtryID)){
gr.setColor(Color.yellow);
} else { gr.setColor(colu);}
gr.setFont(liteFont);
gr.drawString(liteStr,bx+6,by+bh-5);
}
// Swap the buffers and blit to screen
g.drawImage(displayArea, 0, 0, this);
gr.dispose();
}
catch (NullPointerException e) {
System.out.println("Error: " + e.getMessage());
}
}
//-----------------
// The database tables of countries and their properties.
static final String countryNames[] = {
"United States of America","Canada","Mexico","Guatemala","Cuba","Haiti","Dominican Republic","Belize",
"Honduras","Nicaragua","Costa Rica","Panama","Colombia","Venezuela","Guyana","Suriname",
"French Guyana","Ecuador","Peru","Bolivia","Chile","Argentina","Uruguay","Andorra",
"Paraguay","Brazil","Morocco","Armenia","Mauritania","Senegal","Gambia","Guinea-Bissau",
"Guinea","Sierra Leone","Liberia","Cote d'Ivoire","Ghana","Togo","Benin","Nigeria",
"Cameroon","Equatorial Guinea","Gabon","Republic of the Congo",
"Democratic Republic of Congo","Angola","Namibia","South Africa",
"Mozambique","Tanzania","Kenya","Somalia","Ethiopia","Sudan","Egypt","Libya",
"Tunisia","Algeria","Mali","Burkina Faso","Niger","Chad","Central African Republic","Uganda",
"Rwanda","Burundi","Zambia","Malawi","Zimbabwe","Botswana","Swaziland","Lesotho",
"Madagascar","Greece","Albania","Yugoslavia","Italy","Spain","Portugal","France",
"United Kingdom","Ireland","Azerbaijan","Belgium","Netherlands","Denmark","Germany","Switzerland",
"Austria","Hungary","Czech Republic","Poland","Sweden","Norway","Finland","Romania",
"Bulgaria","Turkey","Syria","Israel","Jordan","Iraq","Bahrain","Kuwait",
"Saudi Arabia","Belarus","Yemen","Oman","United Arab Emirates","Iran","Afghanistan","Pakistan",
"India","Sri Lanka","Nepal","Bosnia and Herzegovina","Bhutan","Bangladesh","Croatia","Cyprus",
"Burma","Thailand","Laos","Cambodia","Vietnam","Off-By-One Error","Malaysia","Singapore",
"Indonesia","Djibouti","Brunei","El Salvador","Hong Kong","Eritrea","Estonia","Philippines",
"Georgia","Papua New Guinea","Australia","Gibraltar","New Zealand","China","North Korea","South Korea",
"Mongolia","Japan","Russia","Greenland","Iceland","Kazakhstan","Kyrgyzstan","Latvia",
"Lebanon","Liechtenstein","Lithuania","Luxembourg","Macedonia","Moldova",
"Monaco","Qatar","Slovak Republic","Slovenia","Taiwan","Tajikistan","Turkmenistan",
"Ukraine","Uzbekistan","Antigua and Barbuda","Bahamas","Barbados","Bermuda","Cape Verde",
"Dominica","Grenada","Guadeloupe","Guam","Jamaica","Malta","Mauritius","New Caledonia","Palau",
"Puerto Rico","Reunion","Seychelles","Trinidad and Tobago"
};
static final String letStr = " whose names start with the letter ";
// The set of properties a country can have.
static final String propNames[] = {
"itsy-bitsy","small","huge","densely-populated",
"sparsely-populated","long and skinny","peninsular","island-dwell",
"landlocked","rainy","arid","cloudy",
"earthquake-prone","officially polylingual","officially Anglophone","Portuguese-speak",
"politically or territorially dependent","largely illiterate","heavily-indebted and poor","monarchic",
"dictatorially autocratic","communist","Slavic","predominantly Muslim",
"predominantly Catholic","predominantly Orthodox","predominantly Buddhist","Scandinavian",
"Baltic","Mediterranean","South Asian","Southeast Asian",
"Sub-Saharan African","Southern African","South American","Central American",
"South Pacific","East Asian","Middle Eastern","Central European",
"North African","Balkan","former Soviet","China-neighboring",
"camel-driv","tiger-roamed","pachyderm-keep","Olympic badminton medal winn",
"oil-produc","vodka-export","nuclear-powered","juvenile-offender execut",
"tourism-dependent","Olympic judo Silver medal winn","violence-ravaged","pepper-produc",
"cricket-play","oil-guzzl","cannabis-cultivat","bug-eat",
"least corrupt","insufficiently-reproducing","fermented mare's milk drink","orange-white-and-green flag-wav",
"US visa-waiver pilot-program participat","US bullet-buy","ancient pyramid-maintain","hydroelectric",
"border-disput","AIDS crisis-stricken","perceived as egregiously corrupt","undersexed",
"heavily landmined","person-traffick","shark-infested","Simpsons' travel destination",
"former French colony","comparatively depressed","comparatively happy","former Ottoman",
"former Sassanid","former Habsburg","former Roman","frequently lightning-struck",
"Australopithecus fossil-hous","population-skyrocket","EU","UN Security Council Permanent Member",
"G7","Fishery Committee for the Eastern Central Atlantic member"
};
int nSelectedCountries = 0;
static final int nCountries = countryNames.length;
static final int nProperties = propNames.length;
static final int nProperties2 = nProperties-63;
// Codes for the syntactic combination of properties:
// which properties are verbs, adjectives, etc.
static final int propVerbs[] = {
0,0,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,1,
0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
0,0,0,0, 0,0,0,0, 0,0,0,0, 1,0,1,1,
1,1,0,1, 0,1,0,1, 1,1,1,1, 0,0,1,1,
1,1,1,0, 1,0,0,0, 0,1,0,0, 0,0,0,0,
0,0,0,0, 1,1,0,0, 0,0,0,0, 0,1};
static final int propAdjs[] = {
1,1,1,1, 1,1,0,0, 1,1,1,1, 1,1,1,0,
1,1,1,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
0,0,0,0, 0,0,0,0, 0,0,0,0, 0,1,0,0,
0,0,0,0, 0,0,0,0, 0,0,0,0, 1,1,0,0,
0,0,0,0, 0,0,0,1, 1,0,1,0, 0,1,1,0,
0,0,0,1, 0,0,0,0, 0,0,0,0, 0,0};
// Binary property subscriptions, per country,
// represented compactly as decimal Longs.
// We have more property descriptors than bits in a Long,
// so we split the property annotations across two arrays.
static final long countryProp1[] = {
481603685151961092L,1668302186964082692L,907193884314963968L,869476237435731968L,
9288674250326176L,4503599644160128L,4785074620858496L,293296960109035522L,
864691162831917056L,576460786680205568L,292734010155602432L,4785108980597248L,
883549969091400192L,576742244476780544L,864691145635282944L,576742244460003344L,
288230393348424192L,576742244476787200L,576742244476792832L,576742244477042944L,
576742244476784672L,74027936071553024L,17196646400L,148618787720012033L,
882705544161263872L,875668669743530500L,329062940018218016L,2613798624001265920L,
18691706455056L,288318341385691648L,4521191822213666L,18084767254086144L,
18084767262318592L,18084771557294592L,18084767253938688L,288582219872862208L,
288582224167845888L,70373039415328L,281479272071200L,110690038886457344L,
576812600320614912L,351848033681410L,576812600319279104L,576812600319549440L,
883057374981791744L,594827003124023296L,648606315861525520L,938789424664174592L,
882775904299024384L,648588719380758528L,941604170136576000L,18102359448380416L,
18103458951753984L,18384933937742848L,49840037998629888L,300167220691984L,
40832563865977856L,54343362748093440L,89060450510080L,70373039546624L,
89060450641152L,18103458951603456L,576531125342839040L,666603117890257152L,
18084771566215426L,18014402821497090L,576531129637814528L,576531129637822720L,
666603122184962304L,576531129637560592L,70377334661378L,4503608217854210L,
869194736672710784L,185492010222751808L,283674008358912L,2342718430223798272L,
266556803498651712L,195625109368086528L,149463212650172416L,231653906386518016L,
1235956622737041536L,217017207060719744L,306548239878849536L,155092712184883202L,
1407093408577103872L,1369938711785515008L,227150855961313280L,1307451266821005568L,
5348574330093824L,2352849880096964864L,2307813883810676992L,9852173961658368L,
1299007017654421504L,1297881117747587168L,1298725542677194752L,2343842131103191040L,
2352851529385381888L,36310272540938304L,299342585922560L,99660009356420098L,
5084416653657088L,299342050239488L,4802666799039627L,299067171667970L,
146666329939117056L,2594922208379797760L,2551141862999040L,299342049575936L,
72356936087502848L,2551141862740992L,4917948385283028224L,75743158097572864L,
938850989799141376L,94645960986067072L,364905920100573472L,18016597536944128L,
114350350663938L,72444623213166600L,22801672157802496L,22517998707290242L,
18410225985131008L,869581758390599680L,292848327205323552L,869300283413889024L,
576856578706377248L,0L,649046114070692352L,1225260575836102793L,
905751292838679168L,18691706065922L,281477133131779L,288793360481652738L,
76569989758402561L,18033090207170560L,2306691832458772480L,288511853292712064L,
2599425808002985984L,653303491812946560L,1946417124859724948L,76561193682157569L,
1374442379997638784L,614723894391083012L,325592883920896L,767160186463850560L,
4621282555981725968L,767582398996545664L,2605099288006494212L,75920L,
1302103242397718672L,4900774013648769280L,4900211063703732480L,2306410357482061824L,
18032266118702082L,4503599644672257L,2307818282138206208L,1153484454577578241L,
36030996079972610L,288797724185198848L,4503600181542921L,299342049576002L,
1970874613760256L,1128098951081984L,145522700465475720L,4918225462213214464L,
4611989483645043712L,2596048108286640128L,4621559632854254848L,4503599627911297L,
4785074604097664L,581245826907521161L,76561193665380481L,45185L,
2594073385382199425L,2598576985010094209L,4503599644213377L,4503599644237953L,
869757678035943554L,4503600181043337L,869194736672456841L,68736319616L,
4503601774878849L,4785074620948608L,8606777473L,4503599644172417L,
3175882179406217345L
};
static final long countryProp2[] = {
117479460L,33558580L,268437516L,60L,67108864L,8224L,4L,134217764L,
4194364L,164L,4194356L,536870932L,1048628L,4227120L,36L,48L,
4202528L,148L,536870932L,134217892L,36L,36L,22L,524294L,
537919504L,134223892L,336077344L,82976L,335552512L,67117056L,67108864L,68157440L,
68165680L,68157440L,67108864L,71311489L,68157456L,68165632L,201334800L,67109024L,
67117296L,67108896L,67117104L,68165680L,68157488L,528L,84L,2099300L,
268438096L,2103472L,6291696L,4196384L,2097712L,1115184L,590376L,4784160L,
598016L,598048L,268443664L,134225920L,8225L,2105344L,8272L,1048752L,
48L,134225936L,80L,268435552L,4194884L,134217792L,96L,64L,
269492272L,76088356L,589840L,524320L,109576198L,76283942L,545783814L,126357542L,
59248678L,8421415L,131232L,143130630L,76316678L,8421414L,41943046L,524310L,
9175062L,852004L,262180L,603979780L,8421382L,67108918L,8388614L,67960832L,
134758404L,590884L,4718624L,4784164L,4718596L,4390944L,134218752L,196612L,
4262916L,134235136L,0L,4194304L,4195364L,4326432L,132624L,538050720L,
289L,16L,16L,135071248L,134217744L,134217888L,786996L,589856L,
134218784L,1049124L,8208L,1058336L,1057328L,0L,269484064L,1048614L,
1049760L,10240L,134217762L,2060L,2304L,544L,0L,536870948L,
606224L,536872960L,38918L,524288L,22L,16777512L,48L,67108896L,
268435456L,100669734L,16794784L,16L,32822L,32L,1072L,16L,
599044L,524322L,32L,8912914L,269025280L,268517408L,268959746L,4195328L,
262144L,786470L,288L,1072L,131105L,82048L,0L,0L,
134217732L,134217732L,134217728L,67108864L,8208L,0L,8192L,0L,
4L,268959744L,268443680L,10244L,536870912L,32768L,8192L,8224L,4L
};
}
/*
-------------------------------------------------------------------------
Databases referenced in this project:
http://www.cia.gov/cia/publications/factbook/
http://www.fao.org/WAICENT/FAOINFO/SUSTDEV/EIdirect/climate/EIsp0007.htm
http://www.fao.org/WAICENT/FAOINFO/SUSTDEV/EIdirect/climate/EIsp0056.htm
http://www.fao.org/WAICENT/FAOINFO/SUSTDEV/EIdirect/climate/EIsp0009.htm
http://www.ethnologue.com/country_index.asp?place=all
http://www.ethnologue.com/show_language.asp?code=POR
http://unstats.un.org/unsd/mi/mi_results.asp?row_ID=656&fID=r5
http://www.worldbank.org/hipc/about/map/map.html
http://www.panda.org/species/tiger/distribution.cfm
http://www.olympic.org/uk/athletes/results/search_r_uk.asp
http://www.eia.doe.gov/emeu/iea/tableg2.html
http://www.ivodka.com/vodka-by-country.html
http://www.eia.doe.gov/oiaf/ieo/figure_62.html
http://www.deathpenaltyinfo.org/juvchar.html
http://www.olympic.org/uk/athletes/results/search_r_uk.asp
http://www.hotnsaucey.com/countries.html
http://www.cricket.org/link_to_database/NATIONAL/ICC/
http://www.bp.com/centres/energy2002/oil/consumption.asp#
http://www.food-insects.com/book7_31/
http://www.transparency.org/cpi/2001/cpi2001.html#cpi
http://138.251.140.21/~josh/flags/alpha.html
http://www.foreignborn.com/visas_imm/other_visas/11pilot_program.htm
http://www.unaids.org/barcelona/presskit/barcelona%20report/table.html
http://www.boston.com/news/daily/27/sex_chart.htm
http://www.landmines.org/glc/index-glc.asp
http://www.state.gov/g/tip/rls/tiprpt/2002/10678.htm
http://www.flmnh.ufl.edu/fish/Sharks/statistics/GAttack/World.htm
http://www.snpp.com/episodeguide.html
http://www.eur.nl/fsw/research/happiness
http://www.fsmitha.com/h3/map21-ot.html
http://www.fsmitha.com/h1/map20per.htm
http://www.fsmitha.com/h1/map19rm.htm
http://faculty.vassar.edu/piketay/evolution/SiteMap.html
http://users.erols.com/mwhite28/20c-pop3.htm
http://www.fao.org/fi/body/rfb/cecaf/cecaf_mapandmem.htm
"In the Line of Fire," National Geographic, August 2002
*/
Plain text code
To view Axis properly, please widen your browser window to encompass this line:
<< preface
this blog is nina wenhart's collection of resources on the various histories of new media art. it consists mainly of non or very little edited material i found flaneuring on the net, sometimes with my own annotations and comments, sometimes it's also textparts i retyped from books that are out of print.
it is also meant to be an additional resource of information and recommended reading for my students of the prehystories of new media class that i teach at the school of the art institute of chicago in fall 2008.
the focus is on the time period from the beginning of the 20th century up to today.
it is also meant to be an additional resource of information and recommended reading for my students of the prehystories of new media class that i teach at the school of the art institute of chicago in fall 2008.
the focus is on the time period from the beginning of the 20th century up to today.
>> search this blog
2008-07-13
>> Golan Levin, "AxisApplet", 2002
Gepostet von Nina Wenhart ... hh:mm 6:07 PM tags - artistic software, code art, exhibitions, programming
Bookmark this post:blogger tutorials
Social Bookmarking Blogger Widget | I'm reading: >> Golan Levin, "AxisApplet", 2002 ~ |
Subscribe to:
Post Comments (Atom)
>> additional class blogs
>> labels
- Alan Turing (2)
- animation (1)
- AR (1)
- archive (14)
- Ars Electronica (4)
- art (3)
- art + technology (6)
- art + science (1)
- artificial intelligence (2)
- artificial life (3)
- artistic molecules (1)
- artistic software (21)
- artists (68)
- ASCII-Art (1)
- atom (2)
- atomium (1)
- audiofiles (4)
- augmented reality (1)
- Baby (1)
- basics (1)
- body (1)
- catalogue (3)
- CAVE (1)
- code art (23)
- cold war (2)
- collaboration (7)
- collection (1)
- computer (12)
- computer animation (15)
- computer graphics (22)
- computer history (21)
- computer programming language (11)
- computer sculpture (2)
- concept art (3)
- conceptual art (2)
- concrete poetry (1)
- conference (3)
- conferences (2)
- copy-it-right (1)
- Critical Theory (5)
- culture industry (1)
- culture jamming (1)
- curating (2)
- cut up (3)
- cybernetic art (9)
- cybernetics (10)
- cyberpunk (1)
- cyberspace (1)
- Cyborg (4)
- data mining (1)
- data visualization (1)
- definitions (7)
- dictionary (2)
- dream machine (1)
- E.A.T. (2)
- early exhibitions (22)
- early new media (42)
- engineers (3)
- exhibitions (14)
- expanded cinema (1)
- experimental music (2)
- female artists and digital media (1)
- festivals (3)
- film (3)
- fluxus (1)
- for alyor (1)
- full text (1)
- game (1)
- generative art (4)
- genetic art (3)
- glitch (1)
- glossary (1)
- GPS (1)
- graffiti (2)
- GUI (1)
- hackers and painters (1)
- hacking (7)
- hacktivism (5)
- HCI (2)
- history (23)
- hypermedia (1)
- hypertext (2)
- information theory (3)
- instructions (2)
- interactive art (9)
- internet (10)
- interview (3)
- kinetic sculpture (2)
- Labs (8)
- lecture (1)
- list (1)
- live visuals (1)
- magic (1)
- Manchester Mark 1 (1)
- manifesto (6)
- mapping (1)
- media (2)
- media archeology (1)
- media art (38)
- media theory (1)
- minimalism (3)
- mother of all demos (1)
- mouse (1)
- movie (1)
- musical scores (1)
- netart (10)
- open source (6)
- open source - against (1)
- open space (2)
- particle systems (2)
- Paul Graham (1)
- performance (4)
- phonesthesia (1)
- playlist (1)
- poetry (2)
- politics (1)
- processing (4)
- programming (9)
- projects (1)
- psychogeography (2)
- publications (36)
- quotes (2)
- radio art (1)
- re:place (1)
- real time (1)
- review (2)
- ridiculous (1)
- rotten + forgotten (8)
- sandin image processor (1)
- scientific visualization (2)
- screen-based (4)
- siggraph (1)
- situationists (4)
- slide projector (1)
- slit scan (1)
- software (5)
- software studies (2)
- Stewart Brand (1)
- surveillance (3)
- systems (1)
- tactical media (11)
- tagging (2)
- technique (1)
- technology (2)
- telecommunication (4)
- telematic art (4)
- text (58)
- theory (23)
- timeline (4)
- Turing Test (1)
- ubiquitious computing (1)
- unabomber (1)
- video (14)
- video art (5)
- video synthesizer (1)
- virtual reality (7)
- visual music (6)
- VR (1)
- Walter Benjamin (1)
- wearable computing (2)
- what is? (1)
- William's Tube (1)
- world fair (5)
- world machine (1)
- Xerox PARC (2)
>> timetravel
-
▼
08
(252)
-
▼
7
(141)
-
▼
13
(26)
- >> jodi.org
- >> Golan Levin, "AxisApplet", 2002
- >> timeline of hacker history
- >> The Mentor, "The Conscience of a Hacker", 1986
- >> McKenzie Wark, "A Hacker Manifesto [version 4.0]"
- >> La Monte Young, "Composition 1960 #10"
- >> definition: systems
- >> Douglas Davis, "The World's First Collaborative...
- >> Cornelia Sollfrank, "Women Hackers", 1999
- >> interview: Florian Cramer, Cornelia Sollfrank, ...
- >> CrimethInc., "Recipes for Disaster", 2004
- >> Cut Ups
- >> Brion Gysin, "Cut-Ups Self-Explained", 1970
- >> William S. Burroughs, "The Cut-Up Method of Bri...
- >> Roman Verostko, "Epigenetic Art Revisited: Soft...
- >> Erkki Huhtamo, "WEB STALKER SEEK AARON Reflecti...
- >> Christiane Paul, "Public CulturalProduction Art...
- >> Casey Reas, "Programming Media", 2003
- >> Christiane Paul, "CODeDOC", 2002
- >> Christiane Paul, "CODeDOC II", 2003
- >> Olga Goriunova, Alexei Shulgin , "Artistic Soft...
- >> runme.org
- >> Florian Cramer + Ulrike Gabriel, "Software Art"...
- >> Florian Cramer, "words made flesh: code, cultur...
- >> Florian Cramer, mez, ,,Re(ad.htm" , 2002
- >> Florian Cramer, "Exe.cut[up]able statements: Th...
-
▼
13
(26)
-
▼
7
(141)
>> cloudy with a chance of tags
followers
.........
- Nina Wenhart ...
- ... is a Media Art historian and researcher. She holds a PhD from the University of Art and Design Linz where she works as an associate professor. Her PhD-thesis is on "Speculative Archiving and Digital Art", focusing on facial recognition and algorithmic bias. Her Master Thesis "The Grammar of New Media" was on Descriptive Metadata for Media Arts. For many years, she has been working in the field of archiving/documenting Media Art, recently at the Ludwig Boltzmann Institute for Media.Art.Research and before as the head of the Ars Electronica Futurelab's videostudio, where she created their archives and primarily worked with the archival material. She was teaching the Prehystories of New Media Class at the School of the Art Institute of Chicago (SAIC) and in the Media Art Histories program at the Danube University Krems.
No comments:
Post a Comment