'development' Category

Colle + McVoy Responsive Signage

Tuesday, January 26th, 2010

Located in the beautiful warehouse district of Minneapolis, Colle + McVoy is an integrated advertising agency. Founded on traditional media over 70 years ago, Colle + McVoy was quick to add digital capabilities and has gained a lot of notoriety for its interactive work.

To express our capabilities and make our space speak to what we do, we enhanced our existing plastic logotype with a hidden projector and camera. Mapping our projections to the space, we created sequences of illumination for the lettering and created a play between virtual and physical objects that responds to the activity of people in the space.
(more…)

Post-Flashbelt Experimentation

Wednesday, July 1st, 2009

Flashbelt has come and gone for 2009, and again it was an experience that I feel lucky to have been a part of. It was great to spend 3 days with like-minded designers and developers; and to listen to presenters show where the past year has led them. Presenters demonstrated completed projects, experiments and the new tools they are using. Rather than repeating tidbits I picked up here and there, I want to show some things I have thrown together since Flashbelt. These are just some quick demos, for me they mainly serve as a form of notes to get familiar with some of the new features and also were thrown together as a quick ‘capabilities demo’ for the team.

Below are three demos and source code. These demos use some new features, I wrote these for use with the free Flex 4 SDK, which you can also use with Flash Builder 4 Beta, these classes are all very simple to convert for use with Flash CS4 instead.
(more…)

Advanced Processing in Eclipse

Tuesday, March 24th, 2009

Processing is an excellent framework and is at the top of my list of recommendations when it comes to tools for development, close to it is Eclipse (a very powerful coding IDE). One of the most beneficial assets to Processing is its learning curve. It takes seconds for someone with no programming experience to create their first “sketch” and advanced users tend to segway into more direct java programming. Because Processing was built as a learning tool the IDE leaves something to be desired for advanced users; my biggest complaint is the inability of creating reusable classes without having multiple copies. This is where Eclipse allows you to really take your development to another level. (more…)

The dumbest mistake that I make over and over

Friday, December 5th, 2008

for(var i:uint=0;i < objects.length;i++)
{
	if(objects[i] == o)objects.splice(i,1);
}

plus I could just safe myself the frustration and do this:

var index:int = objects.indexOf(o);
if(index > -1) objects.splice(index,1);

stupid! I want to sleep.

AdvArray for Actionscript 3

Wednesday, October 1st, 2008

I wrote a brief class extending Actionscript 3’s Array class. Each time that I have found myself repeating common array tasks I have tried to add it. The AdvArray Documentation contains a list of the methods I have added. The ones I find the most helpful are probably clone() and rotate().


package com.hapticdata {

	import flash.utils.ByteArray;

	/**
	 * Adds extra methods to arrays for easier manipulation
	 * @class AdvArray
	 * @author Kyle Phillips - http://www.haptic-data.com
	 * @created Jun 29, 2008
	 */
	dynamic public class AdvArray extends Array {
		public function AdvArray(...args) {
			//this = this as Array;
			for each(var i:* in args)
			{
				super.push(i);
			}
			//super(...args);
		}

		 /**
		  * add an array to the end of the existing AdvArray
		  * @param a (Array) the array to append
		  * @return the new length of the array
		  */
		 public function append(a:Array):uint
		 {
		 	for(var i:uint=0;i < a.length;i++)
		 	{
		 		super.push(a[i]);
		 	}
		 	return super.length;
		 }
		 /**
		  * add an array at a given index of the existing AdvArray, defaults to the beginning of the array
		  * @param a (Array) the array to append
		  * @param index (uint) the index of the array to start placing the new array
		  * @return the new length of the array
		  */
		 public function appendAt(a:Array,index:uint=0):uint
		 {
		 	append(a);
		 	rotate(((a.length)+index)*-1);
		 	return super.length;
		 }
		/**
		 * allows you to search the array for a specific value, similar to MovieClip.contains()
		 * @param i (*) the value you are searching the array for
		 * @return returns Boolean
		 * @example
		 * if(myArray.contains("my string"))var myString:String = myArray.pluck(myArray.indexOf("my string"));
		 */
		public function contains(i:*):Boolean
		{
			var index:int = this.indexOf(i);
			return (index != -1) ? true : false;
		}

		/**
		 * pull an item out of the array by its index and re-sort the array
		 * @param index (int) the index of the array to pluck
		 * @return the item that was removed from the array
		 */
		public function pluck(index:int):* {
			return super.splice(index,1);
		}

		/**
		 * allows you to cycle an array one step forward, placing the first item at the end of the array
		 * @return returns the new AdvArray
		 */
		public function rotateForward():Array {
			var firstItem:* = super.shift();
			super.push(firstItem);
			return this;
		}
		/**
		 * allows you to cycle an array one step backwards, placing the last item at the beginning of the array
		 * @return returns the new AdvArray
		 */
		public function rotateBackwards():Array {
			var lastItem:* = super.pop();
			super.unshift(lastItem);
			return this;
		}
		/**
		 * allows you to specify a positive or negative value to cycle the array, 0 will do nothing
		 * @param inc (int) positive or negative value for direction and amount to rotate the array
		 * @return returns the new AdvArray
		 */
		public function rotate(inc:int=1):Array {
			if(inc > 0)
			{
				for(var j:int=0;j < inc;j++) rotateForward();
			}
			else if(inc<0)
			{
				for(var k:int=0;k > inc;k--)rotateBackwards();
			}
			return this;
		}
		/**
		 * makes a shallow copy of the current array
		 * Flex3 LiveDocs: In a shallow copy, if the original array has elements that are objects, only the
		 * references to the objects are copied rather than the objects themselves. The copy points to the same objects as the original does.
		 * Any changes made to the objects are reflected in both arrays.
		 * @return a shallow copy of the current array
		 */
		public function shallowCopy():Array
		{
			return super.concat();
		}

		/**
		 * makes a deep copy of the current array
		 * Flex3 LiveDocs: In a deep copy, any objects found in the original array are also copied
		 * so the the new array does not point to the same objects as does the original array. 
		 * @return a deep copy of the current array
		 */
		public function clone():Array
		{
    		var myBA:ByteArray = new ByteArray();
    		myBA.writeObject(super);
    		myBA.position = 0;
    		return(myBA.readObject());
		}

	}
}

Download the source:
AdvArray.as

Flashbelt

Thursday, June 12th, 2008

Flashbelt ended yesterday, it was a great experience. This was the first year that I have attended and I was very impressed by the program. These were some of the highlights of this years program…
“Emergence” by Jer Thorp, was a very interesting discussing on generative environments and making use of complex systems as a basis. Andre Michelle’s showed some incredible work generating sounds directly in flash with a byte array and showed a preview of his new tool currently titled AudioTools (he said he’ll change that). Robert Hodgin was the last lecture, his presentation was an hour-long display of some of the best generative work I’ve ever seen, the lecture was a very helpful look inside how his applications are working.
The afterparties were also great, the past 3 days have provided me with inspiration for the next several months.