array(2) { ["meta"]=> array(6) { ["name"]=> string(10) "openaq-api" ["license"]=> string(0) "" ["website"]=> string(1) "/" ["page"]=> int(1) ["limit"]=> int(100) ["found"]=> int(0) } ["results"]=> array(0) { } } object(stdClass)#2 (13) { ["coord"]=> object(stdClass)#1 (2) { ["lon"]=> float(125.6081) ["lat"]=> float(9.0125) } ["weather"]=> array(1) { [0]=> object(stdClass)#3 (4) { ["id"]=> int(803) ["main"]=> string(6) "Clouds" ["description"]=> string(13) "broken clouds" ["icon"]=> string(3) "04d" } } ["base"]=> string(8) "stations" ["main"]=> object(stdClass)#4 (8) { ["temp"]=> float(74.93) ["feels_like"]=> float(76.64) ["temp_min"]=> float(74.93) ["temp_max"]=> float(74.93) ["pressure"]=> int(1014) ["humidity"]=> int(96) ["sea_level"]=> int(1014) ["grnd_level"]=> int(1012) } ["visibility"]=> int(10000) ["wind"]=> object(stdClass)#5 (3) { ["speed"]=> float(3.33) ["deg"]=> int(118) ["gust"]=> float(7.81) } ["clouds"]=> object(stdClass)#6 (1) { ["all"]=> int(54) } ["dt"]=> int(1711662103) ["sys"]=> object(stdClass)#7 (5) { ["type"]=> int(2) ["id"]=> int(2093017) ["country"]=> string(2) "PH" ["sunrise"]=> int(1711661800) ["sunset"]=> int(1711705664) } ["timezone"]=> int(28800) ["id"]=> int(1705545) ["name"]=> string(11) "Los Angeles" ["cod"]=> int(200) } DrPunchman

StarGate

After Effects design for VFX

Multi-Domain Operations (MDO)

Lockheed Martin is helping our customers redefine the battle space across all domains - air, land, sea, space and cyber. Our connective Multi-Domain solutions make every warfighter, every platform, every asset - a sensor, a processing node, a weapon.

A Deep Dive
A Deep Dive
A Deep Dive
A Deep Dive

A Deep Dive

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.

After Effects: Design with Code

After Effects: Design with Code

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.


text.js


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 ]

Smarter Dumb Text

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.


text2.js


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 ] ;

Not a lot of code...

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:


3dnode.js


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);
  }
}