Sound, Motion, Notation
Computation
- Alan Turing's On Computable Numbers, with an Application to the Entscheidungsproblem (1936): Turing Machine can compute anything computable 
- Claude Shannon's A Mathematical Theory of Communication (1948): information can systematically be encoded 
Information → Computation ⇒ Result
Abstraction
- Computation is an abstraction of process ❔ 
- Information is an abstraction of meaning 
Generalized concepts:
- Model complex systems 
- Compress time and distance 
- The nature of intelligence itself 
Art
Channa Horwitz's Sonakinatography series (1968-2012)

Encoding Information

The key to my work is simplicity and complexity. I have been working with the premise that any complexity can be understood in it's simplest form. In my notations I am interested in breaking through the barrier of the different arts, because they all have a common language. In these notations I am searching for some connecting link to establish a clearer reality.
~ Channa Horwitz (1974)

Algorithm

Quantitative Art
John F. Simon, Jr.'s Every Icon (1997-present)
- Running since January 14, 1997, 9:00:00 pm. 
- Every Icon will make every black and white computer icon possible on a 32x32 grid within the next several trillion years. 
{:nextjournal/viewer "html" :nextjournal.viewer/value "  <div id='header' style='background-color:#FFFFFF;text-align:center'>	<h1 style='margin-bottom:10px;'>Every Icon</h1></div><div id='iconCanvas' style='background-color:#FFFFFF;height:500px;width:500px;float:left;'>	<p id='EveryIcon'>    <canvas id='myCanvas' width='500' height='450'></canvas>  </p></div><script>  var canvas = document.getElementById('myCanvas');  var context = canvas.getContext('2d');  var	Icon_Size = 32;  var Icon_wid = 12;  var Icon_hgt = 12;  var	canvas_x_offset = 50;  var canvas_y_offset = 0;  var Icon_State = new Array(Icon_Size*Icon_Size);  var id = 0;  var	max_id = 1;  var starting_date  	= 	 Date.UTC( 1997, 00, 14, 21, 00, 00 );      var	current_date	= 	 new Date();  current_date = current_date.getTime();  var elapsed_time_millisecs = current_date - starting_date;  var iconsPerMilliSecond;  var	start_timer, end_timer;  var setup_counter = 0;  var Num_Tested = 500;  setup_animation();  init_icon();  setup_icon(0);    start_timer = 	new Date();    start_timer = start_timer.getTime();  context.fillStyle = 'red';  context.font = 'bold 16px Arial';  context.fillText('Measuring Display Speed and Updating Icon', 75, 420);  time_circuit();  function time_circuit()  {    if( setup_counter <= Num_Tested )    {      Increment_Icon();        paintIcon();        draw_grid();        setup_counter++;          requestAnimFrame(function() {          time_circuit();        });    }    else    {      context.fillStyle = '#ffffff';      context.fillRect( 50, 400, 400, 75);      end_timer = 	new Date();      end_timer = 	end_timer.getTime();      millisecs_elapsed = end_timer -  start_timer;      iconsPerMilliSecond = Num_Tested/millisecs_elapsed;    if(elapsed_time_millisecs > 0 )    setup_icon(elapsed_time_millisecs * iconsPerMilliSecond);    animateIcon();    }  }  function animateIcon()    {        Increment_Icon();        paintIcon();        draw_grid();     requestAnimFrame(function() {          animateIcon();        }); }  function init_icon()  {    for( var m=0; m<Icon_Size; m++)    {      for( var n=0; n<Icon_Size; n++)      {        Icon_State[ (m*Icon_Size) + n ] 	= 0;        }    }  } <!-- Given a decimal number (usually the starting position) -->  <!-- Setup the icon to reflect that number and start counting from there-->  function  setup_icon( decimal_num )  {    var	remainder;    <!-- beo is the binary_exponential_order  -->    var  beo = 0;    <!-- Start with order 0 - the least significant digit-->    <!-- is the number odd? Then that pixle goes on-->    <!-- Shift the number right (divide by two...the >> operator did not work here on long types )-->    <!-- Check again on the new digit at one order up-->    <!-- Repeat until every digit is checked  - number is divided away-->    while( decimal_num >= 1 )    {      decimal_num = Math.floor(decimal_num);      remainder = decimal_num % 2.000000000;      if( Math.abs(remainder) == 1)      {        Icon_State[ beo ] = 1;      }      decimal_num /= 2.0;      beo++;    }    max_id = beo;    id = beo;  }  function draw_grid()  {      var m = 0;      context.lineWidth = 1;  context.strokeStyle = '#000000';  for( m=0; m<=Icon_Size; m++)  {      context.beginPath();        context.moveTo(canvas_x_offset + (m*Icon_wid), canvas_y_offset);        context.lineTo(canvas_x_offset +(m*Icon_wid),  canvas_y_offset +(Icon_Size*Icon_wid));        context.stroke();        context.beginPath();    context.moveTo(canvas_x_offset,canvas_y_offset + (m*Icon_hgt));    context.lineTo(canvas_x_offset+(Icon_Size*Icon_hgt),canvas_y_offset +(m*Icon_hgt));    context.stroke();     }   }function paintIcon()  {  var temp_counter = 0;  var m=0;  var n=0;  context.lineWidth = 1;  out:  for(  m=0; m<Icon_Size ; m++)    {      for(  n=0; n<Icon_Size ; n++)      {        if( Icon_State[(m*Icon_Size) + n ] == 1 )      {        context.strokeStyle = '#000000';        context.fillStyle = '#000000';        context.fillRect(canvas_x_offset+((n*Icon_wid)+1),canvas_y_offset+((m*Icon_hgt)+1), Icon_wid-1, Icon_hgt-1);      }      else      {        context.strokeStyle = '#000000';        context.fillStyle = '#ffffff';        context.fillRect(canvas_x_offset + ((n*Icon_wid)+1),canvas_y_offset+((m*Icon_hgt)+1), Icon_wid-1, Icon_hgt-1);      }      if( temp_counter >= max_id ) break out;      temp_counter++;    }      }  }function Increment_Icon()  {    var carry_bit  = 0;    id 		= 1;    if ( Icon_State[ 0 ] 	== 0 )       Icon_State[ 0 ]  	= 1;    else    {      Icon_State[ 0 ]  = 0;      carry_bit = 1;      <!-- Propogate numbers  -->      while ( carry_bit == 1 )      {        if( Icon_State[ id ] == 1 )        {          Icon_State[ id ] = 0;          id++;        }        else        {          Icon_State[ id ] = 1;          carry_bit = 0;        }      }    }    if( id > max_id ) max_id = id;  }  function setup_animation()  {    window.requestAnimFrame = (function(callback) {      return window.requestAnimationFrame ||      window.webkitRequestAnimationFrame ||      window.mozRequestAnimationFrame ||      window.oRequestAnimationFrame ||      window.msRequestAnimationFrame ||      function(callback) {        window.setTimeout(callback, 1000 / 60);        };      })();  }</script> "}Tools
