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
