 
          
        
        Just another Matrix display, but a bit more true-to-form than the others I see here already. Glyphs are hiragana, katakana, and maybe some other junk.
d=document,c=d.getElementById('c'),x=c.getContext('2d'),o=u=v=0,m=Math,t=m.random,y=m.floor;d.body.setAttribute('style','margin:0;padding:0;overflow:hidden');function i(){u=innerWidth,v=innerHeight,c.width=u;c.height=v;x.fillRect(0,0,u,v);x.font='30px sans-serif';l=[];p=[];s=[];e=30;w=u/e;h=v/e;for(i=0;i<w;i++){for(j=0;j<h;j++)l.push(String.fromCharCode(y(t()*300+12354)));s.push(t()*v/150+v/400);p.push(t()*v)}}window.onresize=i;i();setInterval(function(){r=t();if(o)x.drawImage(c,-1*r+.5,-2*r,u+1*r-.5,v+6*r);x.fillStyle='rgba(0,0,0,0.07)';x.fillRect(0,0,u,v);for(i=0;i<w;i+=1+!o*(r>.5)){x.fillStyle='#0F0';for(j=1;j<10;j+=1+!o*(r>.5)){x.fillText(l[m.max(0,y(i*h+p[i]/e-j))],i*e,y(p[i]/e)*e-j*e)}x.fillStyle='#EFE';x.fillText(l[y(i*h+p[i]/e)],i*e,p[i]);p[i]+=p[i]>v?-v:s[i]}},100);d.onclick=function(){o=!o}ZD1kb2N1bWVudCxjPWQuZ2V0RWxlbWVudEJ5SWQoJ2MnKSx4PWMuZ2V0Q29udGV4dCgnMmQnKSxvPXU9dj0wLG09TWF0aCx0PW0ucmFuZG9tLHk9bS5mbG9vcjtkLmJvZHkuc2V0QXR0cmlidXRlKCdzdHlsZScsJ21hcmdpbjowO3BhZGRpbmc6MDtvdmVyZmxvdzpoaWRkZW4nKTtmdW5jdGlvbiBpKCl7dT1pbm5lcldpZHRoLHY9aW5uZXJIZWlnaHQsYy53aWR0aD11O2MuaGVpZ2h0PXY7eC5maWxsUmVjdCgwLDAsdSx2KTt4LmZvbnQ9JzMwcHggc2Fucy1zZXJpZic7bD1bXTtwPVtdO3M9W107ZT0zMDt3PXUvZTtoPXYvZTtmb3IoaT0wO2k8dztpKyspe2ZvcihqPTA7ajxoO2orKylsLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh5KHQoKSozMDArMTIzNTQpKSk7cy5wdXNoKHQoKSp2LzE1MCt2LzQwMCk7cC5wdXNoKHQoKSp2KX19d2luZG93Lm9ucmVzaXplPWk7aSgpO3NldEludGVydmFsKGZ1bmN0aW9uKCl7cj10KCk7aWYobyl4LmRyYXdJbWFnZShjLC0xKnIrLjUsLTIqcix1KzEqci0uNSx2KzYqcik7eC5maWxsU3R5bGU9J3JnYmEoMCwwLDAsMC4wNyknO3guZmlsbFJlY3QoMCwwLHUsdik7Zm9yKGk9MDtpPHc7aSs9MSshbyoocj4uNSkpe3guZmlsbFN0eWxlPScjMEYwJztmb3Ioaj0xO2o8MTA7ais9MSshbyoocj4uNSkpe3guZmlsbFRleHQobFttLm1heCgwLHkoaSpoK3BbaV0vZS1qKSldLGkqZSx5KHBbaV0vZSkqZS1qKmUpfXguZmlsbFN0eWxlPScjRUZFJzt4LmZpbGxUZXh0KGxbeShpKmgrcFtpXS9lKV0saSplLHBbaV0pO3BbaV0rPXBbaV0+dj8tdjpzW2ldfX0sMTAwKTtkLm9uY2xpY2s9ZnVuY3Rpb24oKXtvPSFvfQ==//Matrix Script by John Drake (foxox)
//drake[youARENTaROBOT]seas upenn edu
/*DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 
                    Version 2, December 2004 
 Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
 Everyone is permitted to copy and distribute verbatim or modified 
 copies of this license document, and changing it is allowed as long 
 as the name is changed.
            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 
  0. You just DO WHAT THE FUCK YOU WANT TO.*/
/* This program is free software. It comes without any warranty, to
 * the extent permitted by applicable law. You can redistribute it
 * and/or modify it under the terms of the Do What The Fuck You Want
 * To Public License, Version 2, as published by Sam Hocevar. See
 * http://sam.zoy.org/wtfpl/COPYING for more details. */
//knowing this will be compressed, I get a head start here:
d=document, b=d.body, c=d.getElementById("c"), x=c.getContext("2d"), bluron=0;
//bluron is just a bool that tracks whether the blur feature is on or not
b.setAttribute("style","margin:0;padding:0;overflow:hidden");
//make the canvas fill the whole space and kill any scrollbars
//initialize settings (for window resize)
function init()
{
  c.width=innerWidth;
  c.height=innerHeight;
  
  //wipe the screen (default color is black, so it doesn't need to be set before running this)
  x.fillRect(0,0,innerWidth,innerHeight);
  //set up font size for glyphs
  x.font = "30px sans-serif";
  //lets make some arrays for the character grid
  letters = new Array();  //linear array, but holds entire grid of glyps
  positions = new Array();  //falling positions
  speeds = new Array(); //falling speeds
  //let these be configured to change the spacing of the grid
  charw = 30;
  charh = 30;
  //grid dimensions
  letterw = innerWidth/charw;
  letterh = innerHeight/charh;
  //fill grid with stuff
  for (i = 0; i < letterw; i++)
  {
    //first, random characters
    for (j = 0; j < letterh; j++)
      letters.push(String.fromCharCode(Math.floor(Math.random()*300+12354)));
    //then some random speeds (don't change) and positions (do change, obviously)
    speeds.push(Math.random()*innerHeight/150+innerHeight/400);
    positions.push(Math.random()*innerHeight);
  }
}
//make stuff re-initialize on resize
window.onresize = init;
//actually initialize the first time here
init();
//main program loop
setInterval(
  function()
  {
    //again, getting a headstart on compression
    vr = Math.random();
    //if blurry feature turned on, do the blur
    if (bluron)
      x.drawImage(c,-1*vr+.5,-2*vr,innerWidth+1*vr-.5,innerHeight+6*vr);  //basically just writes the screen over itself, but stretched out a little and jittered a little for more attractive random appearance... this code hopes that the browser does some sample interpolation in its raster scale-up system and doesn't just sample nearest-neighbor/point-sampling 
    //draw a transparent black rect over the screen to fade out BG
    x.fillStyle="rgba(0,0,0,0.07)";
    x.fillRect(0,0,innerWidth,innerHeight);
    //and now draw the letters
    //the +=1+!bluron*(vr>.5) parts cut 1/2 computation time for non-blur mode (non-blur mode is most low-performance-friendly, which is also why I have it set as the initial mode)
    //that skipping is not done in blur mode, as it gets jittery if it's done there
    for (i = 0; i < letterw; i+=1+!bluron*(vr>.5))
    {
      //first draw the green part
      x.fillStyle="#0F0";
      for (j = 1; j < 10; j+=1+!bluron*(vr>.5))
      {
        x.fillText(letters[Math.max(0, Math.floor(i*letterh + positions[i]/charh - j))], i*charw, Math.floor(positions[i]/charh)*charh-j*charh);
      }
      //then draw the white part
      x.fillStyle="#EFE";
      x.fillText(letters[Math.floor(i*letterh+positions[i]/charh)], i*charw, positions[i]);
      positions[i] += positions[i]>innerHeight?-innerHeight:speeds[i];
    }
  }
,100);
//and respond to clicks
document.onclick = function(){bluron=bluron?0:1}