Part of my assignment was to review military symbols and to "future-fy" them. So I studied the deeep and extensive library of military symbols, and their meaning, how they stack, when they are used, etc. It gave a me a large amount of respect for what looks like simple design, but is a very complex system of good ideas.

I fell in love with After Effects when I was doing commercials for Yamaha. The program was fairly new and although it wasn't the first program to bring design to video, it was the friendliest. As a programmer and artist, After Effects lets me feed both sides of my brain. I'll place some examples here, but you will find more on my blog.

I needed to create text that looked "military" but wasn't direct jargen, so I created a little script to make words that looked military enough for small buttons and graphics. These were used throughout the video.

```
c = ["b","c","d","f","g","h","l","m","n","o","p","r","s","t"];
```

v = ["a","e","i","o","u","y",".","-"];

o = [" ","b","c","d","f","g","h","l","m","n","o","p","r","s","t","a","e","i","o","u","y",".","-"];

t = c[ Math.floor( random()*c.length ) ] + v[ Math.floor( random()*v.length ) ] + o[ Math.floor( random()*o.length ) ] + c[ Math.floor( random()*c.length ) ];

r = c[ Math.floor( random()*c.length ) ] + v[ Math.floor( random()*v.length ) ] + o[ Math.floor( random()*o.length ) ] + c[ Math.floor( random()*c.length ) ];

[ t+r ]

Sometimes you need to have text large enough to recignize as smart-science-stuff but you aren't going to sit and read it. I brought in Lorem Ipsum from Star Trek the Next Generation and broke out the words so they could be randomly thrown on screen. The code is pretty similar to what I have above, but a lot more fun to read.

```
a = ["elementary","valuable","statement","science","beginning","wisdom","porters","off","manual","sweep","anomalous","airborne","electromagnetic","readings","Radiation","levels","atmosphere","percent","Electro","magnetic","subspace","wave","fronts","approaching","synchronization","deflector","shields","maximum","output","wormhole","size","short","localphenomenon","sufficient","data","compile","holographic","simulation","wormhole","phenomenon","remarkable","bio","electronic","engineering","EM","spectrum","ranging","heat","infrared","radio","waves","interior","heat","geo","thermal","energy"];
```

l = ( a.length - 1);

w = Math.floor( random( )*l );

a[ w ] ;

I know what you are thinking, but in design a little snippit of code can go a long way. A little bit of text that you can place and not worry about what it actually says is a huge time saver. If you really want to see something more invloved... here is what I used to create animated nodes in 3D space:

```
columns = effect("Columns")("Slider"); //number of columns in grid
```

tHold= effect("tHold")("Slider"); //hold time (must be less than tmin)

tMin = effect("tMin")("Slider"); //minimum cycle time (can't be zero)

tMax = effect("tMax")("Slider"); //maximum cycle time

gap = this_comp.width/columns;

origin = [gap,gap];

xGrid = columns - 1;

yGrid = Math.floor(this_comp.height/gap) - 1;

zGrid = Math.floor(this_comp.width/gap) - 1;

start = 0;

end = 0;

j = 1;

while (time >= end){

j += 1;

seedRandom(j,true);

start = end;

end += random(tMin,tMax);

}

targetX = Math.floor(random(0,xGrid));

targetY = Math.floor(random(0,yGrid));

targetZ = Math.floor(random(0,zGrid));

seedRandom(j-1,true);

x = random(); //this is a throw-away value

oldX = Math.floor(random(0,xGrid));

oldY = Math.floor(random(0,yGrid));

oldZ = Math.floor(random(0,zGrid));

if(targetX == oldX && targetY == oldY){

origin + [oldX,oldY,oldZ]*gap;

}else if (time - start < tHold){

origin + [oldX,oldY,oldZ]*gap;

}else{

deltaX = Math.abs(targetX - oldX);

deltaY = Math.abs(targetY - oldY);

deltaZ = Math.abs(targetY - oldZ);

xTime = (end - start - tHold)*(deltaX/(deltaX + deltaY));

yTime = (end - start - tHold)*(deltaY/(deltaX + deltaY));

if (time < start + tHold + xTime){

startPos = origin + [oldX,oldY,oldZ]*gap;

targetPos = origin + [targetX,oldY,oldZ]*gap;

easeOut((time - start - tHold)/xTime, startPos, targetPos);

}else{

startPos = origin + [targetX,oldY,oldZ]*gap;

targetPos = origin + [targetX,targetY,targetZ]*gap

easeIn((time - start - tHold - xTime)/yTime, startPos, targetPos);

}

}