Porked

Every business that has called your residence home has failed.

This is an open letter to the new Pdx Hawaiian establishment that shall remain nameless. A few suggestions to avoid the same fate.

  1. Free Wifi – Your Wifi is private. You are a lunch destination. Lunch destinations are populated by workers who are on their lunch break. Workers need to be connected, or they will not return to your disconnected establishment.
  2. Rice with a Side of Rice – When serving customers a rice dish, one of the sides should not be rice. Unsure why this even has to be explained to you. Instead, give me some nice greens in the form of cabbage.
  3. In & Out ( the fiddlers elbow ) – You have one door to enter and exit. This is a problem when that door leads directly into the ordering line. When your customers get their food they don’t want to walk back through the ordering line. It’s annoying, and not very pleasant for those who are hungrily standing in said line. You need a separate exit. This may even be a matter of safety.
  4. You’re Porked – You are a Hawaiian establishment. Your cache is pork. You serve it on a dry bed of rice. If your pork is dry you’re done, like dinner. Customers want their pork to infuse goodness into the patiently waiting parched rice below. Add some sauce or leave some juice.
  5. Disgusting Slobs – When the three of us left your establishment with a satchel full of pork you included 1 napkin in the to go bag. This left us each with 33% of a paper napkin to clean our pork laden faces with. We were ridiculed.
  6. Price – Your price per item is approximately $1 too high. This is Portland. We expect lunch to be under $9 for to go pig.

We hope you take these under advisement as we truly do want you to succeed where others have failed. We will give you one more chance. We will not announce when this will be.

A Simple Pragmatic Health Insurance Reform Plan

I’m writing this while sitting in a hospital waiting room while my father has a tumor removed. Obama is on the tv discussing the death of Ted Kennedy. So, this topic is heavy on the mind.

I have a simple, yet drastic, plan to solve the health insurance issue. Note, I did not say health care issue. That is a political term meant to fool you into thinking this is about your care. It is not. It’s about how you pay for that care. Stay focused people.

Eliminate The Middle Man

Eliminate all health insurance as we know it whether it be employer based or self insured. It’s an uber waste. Replace the current system with mandatory catastrophic insurance. Put the limit at 8k. Why 8k? This is the amount of money the average family will save per year by eliminating their insurance payment. If you have an unlikely procedure that requires more than 8k it will be covered. The rest of your routine care will be paid for out of pocket. This out of pocket cost is a fraction of what you currently pay per month. Replacing the current system, and preventing Obama’s proposed system, will save billions of dollars. Take this savings and transfer it directly to wellness programs. Stop treating the symptoms of this issue and find a cure. Sound simple? That’s because it is. You’re so used to this being complex. There’s a very good financial reason for that.

What would this do?

It would empower you to be the decision maker about how you pay for your health care. You’d pay for your care the same way you’d pay for anything else, with sound mind and complete freedom of choice. A choice with your best interest in mind. This would create a true free market where Hospitals and Doctors are competing for your business. Cost for care would plummet due to this increased competition. It would also create a direct relationship between you and your care provider without the bureaucracy that currently stands between you. This plan would also keep government from further expanding it’s power and reach into your personal life. It would remove the proposed billion dollar band-aid they plan to throw at the problem. This plan would transform American attitude towards wellness, creating a more mindful responsible America. Even though this plan will save you thousands of dollars per year, attitudes change once you’re pulling out your wallet every time you go for care. This plan would save the taxpayer billions of dollars. These dollars should be transferred into wellness programs that will further reduce the need for out of pocket and catastrophic use. This plan would decimate the wild cost of drugs. Again, the free market would reign in drug companies who charge a premium because they know it is insurance subsidized. People would shop and buy generic. Finally, this plan would eliminate the financial burden on your employer to cover some or all of your insurance. Why would you want to eliminate your boss paying for your care? Simple. It’s a nice thought that your employer is paying for you altruistically, but that’s simply not the case. The money your employer is using to pay for your care comes from somewhere. Eliminate their burden and you’d receive more than the standard cost of living raise. In other words, that money comes out of your paycheck one way or the other. Under this plan, you’d get it back.

Sounds good, but what about those that can’t afford the 8k?

Though more people will be able to afford the small monthly payment for catastrophic care, some people will still struggle to make the payment. The government should subsidize these families to cover them for catastrophic care thus freeing up their wallets for normal maintenance.

Conclusion

There is a reason insurance companies don’t offer true catastrophic care. It’s not profitable. Catastrophic insurance would cost a fraction of your old premium. The average American never comes close to using the money they pay in to insurance. If they did, insurance companies would cease to exist due to bankruptcy. Insurance is a profit business. We trust ourselves to purchase everything else in this world. Why not trust ourselves with the thing that matters most? Why trust an insurance company to buy your care for you? Finally, why trust the government? They’re a profit business as well. They speak of change in terms of metaphors, not actual pragmatic results based change. The guiding principle of any reform should be to put the consumer, not the insurer or the government, at the center of the system. I urge you to push for a sensible approach to reform.

Multnomah County Does Nothing To Help Lost Dogs

Media_httpwwwchristes_hpbfv

Tonight we found a dog roaming Mt. Tabor. That’s him to the right. He was distressed and obviously lost. Like my two dogs, he had a Multnomah County ID Tag with the appropriate phone number to call. So, I called the number hoping to get some help in locating the dogs owner or someone to come out to shelter him. Instead, I got a young kid who was only willing to do one thing: tell me the owners phone number. I was sitting on the side of Mt. Tabor with my two pooches off leash and a large stray Husky yelping and bucking like a bronco. I didn’t exactly have a free hand to write down the number. I asked why Multnomah County wouldn’t call the owner themselves for me or send a truck out to take the pooch to a shelter. After all, that must be what they do there, right? Help lost dogs find their owner, or a home? The answer I got was “we’d rather you called the owner”. When I asked “what is it you actually do there?” the response was “um, I’m not sure we can do anything to help, there is no funding”. What?! No funding? What about the licensing fee I paid for both of my dogs and their tags? Where does that money go? What about all the off leash fines? Tax money? He didn’t even have a list of shelters for me to call, never mind calling one himself.

I put the dog on a leash and called the owner using the number they gave me. Disconnected. Surprise. Ok, we were going to take him home but first decided to walk him around Tabor a bit. That’s when we thankfully found you. You’d been drinking and lost your dog. We’re glad we found you, but this does not excuse the city’s neglect. At least I don’t pay for your neglect.

Your website says “Licensing helps pay for the care of homeless animals while attempts are made to find them new homes”. Perhaps someone should tell the kid on the phone.

Please spread the word about this to Mayor Sam Adams @MayorSamAdams and Multnomah County @MultCo. I’d like to hope that if my dogs were lost that more something would be done.

Show and Tell PDX

http://www.flickr.com/apps/slideshow/show.swf?v=71649

Last night I presented “Using Interfaces Without Interfaces” at Show and Tell Pdx. I showed off some Flash motion detection, Flash color detection and even demo’d a little voice speech recognition in Flash. Some of you asked for more info on how last one was accomplished. I’ll be posting more on this later.

Thank you to Substance for hosting, and thanks for all that attended and enjoyed the show. I had a lot of you come up to me and say that my work has insipred you to experiment more. Just wanted to say, that kicks ass.

Changes. For The Good.

Media_httpwwwchristes_guqey

http://www.flickr.com/apps/slideshow/show.swf?v=71649

Today is my last day at North. I’ve decided to leave my current position as Interactive Director to start my own business. The new business, an Interactive think tank with a focus on the experimental, is being developed and formed by myself and two other partners. In one short month we’ve gone from barely knowing each other to formally signing papers, creating our brand identity, designing our website, organizing business processes, locating and acquiring office space as well as the acquisition of new business. In short, it appears that we know how to get shit done. Instead of a long winded paragraph about our plans I’ve decided to break it down into some handy faqs. I’ll certainly be posting more as more developments occur, and as I can get some free time away from the madness that is the initial steps of creating a business. I’d like to thank the talented folks at North for the opportunities they afforded me, and moving me to the amazing city that Portland is. I wish them the best of luck and hope to work together in the future on a project basis.

Why would you start a new business with people I barley know, are you insane?
I’ve started a business before with close friends. I feel that a business can succeed or fail in either scenario. Each has it’s advantages and it’s disadvantages. Previous personal baggage vs. not knowing how to properly convey opinion to complete strangers. Therefore, the decision to dive into a business with strangers seems as logical to me as the alternative. That said, I indeed just may be insane. However, I seem to have found partners who fit the same diagnosis.

Where is your new space?
We are going to be located on the first floor of this building in the Pearl. Coming from Boston, where I lived and worked downtown, I’m excited to get back to a bit of my roots and the industrial feel of the location.

What is the name of your new venture?
We shall be called “The Good”.

What do you mean by experimental?
Interactive concepts that may not currently be widespread that we see as ubiquitous in the future. Some of my experiments here lean in that direction. We will also be focused on more ‘traditional’ interactive production such as mini sites, content management systems, development, design, online branding, social media and applications. Finally, time given, we’ll be creating our own software and applications which we hope to release to the public.

What new business have you closed?
These shall be revealed using traditional communications means. Meaning, we’ll be showing off the work on our site and across the many social media outlets we pepper.

What’s your url, let’s see the new site!
We have not completely settled on a domain and are in negotiations for one possibility that has been previously taken by a third party. The website has been partially designed but not developed. The Good is coming soon.

Who are these other two partners?
Jon MacDonald and partnerX*. Like myself, both have extensive experience and knowledge in the interactive domain. Both are also seemingly clean upstanding earthlings.

Why are you calling yourself a think tank?
We’ve gone with think tank in a response to industry changes. We feel it’s not ‘alright’ to call ourselves just a development shop, or just an agency, anymore. The industry has grown up a bit and people should take notice. People are taking notice. Interactive projects require more than just production. They require strategy, brand insight, technology chops blended with creative thinking. To use a political reference, they require someone to guide policy. We feel we are best suited to be the drivers of interactive policy.

More FAQ’s will be added here as I see fit. Thanks for reading!

*parnterX identity protected until he is free from his current position.

WordPress Flash Navigation

Consider this beta, and not heavily tested. Just wanted to get it out there while I’m still working on it.

For a recent project a client wanted more control over the display of their WordPress navigation. They wanted to be able to use any font. They also wanted a dynamic fold-able navigation that enables access to all categories without re-loading the page. This was a perfect project for me since I use WordPress all over the mofo place. For example, you can see the navigation in use over there to the right. Also, as I’ve stated previously, I’m a big fan of leveraging the many publishing outlets I already use. So, I buit the nav in Flash connecting to WordPress via XMLRPC using some classes from http://mattism.com/. This essentially allows me to use WordPress as a content management system for Flash. You could obviously see how this could be applied to entire sites, like I have with my homepage. I’ve thought about building this a WordPress plugin, and maybe down the road I will, but I doubt it as I’ll probably jump ship and start another project per usual. Besides, everyone knows you can’t make money writing WordPress plugins.

How It Works:
Flash calls _rpc.call(“wp.getCategories”) to xmlrpc.php which returns an array of categories. I use this array to create a bunch of MovieClip()s. These clips add TextFields as children, are sorted and have events applied to them that enable the interactions. Two fonts reside in the library. One for the top node and one for the child and grandchildren nodes.

Features [the current goods]:

  • Dynamic – Works dynamically with WordPress categories. You update your categories in WordPress, they show properly in Flash
  • Sorting – Dynamically sorts top nodes. Controlled by WordPress plugin my category order. For this to work I had to make a small addition to the WordPress xmlrpc.php, located in your WordPress root folder, to return the category term order. Added line 2776 – $struct['order'] = $cat->term_order;
  • Page recognition – Recognizes the page you’re on and dynamically opens navigation to the parent node of said page onload. I could have used XMLRPC tomake this call, I’m sure. However, I opted to pass in the page url via Flashvars and run a check to find a match. When a match is found the nav opens to it’s parent node.
  • Folding – Uses Grant Skinner GTween for interactions.
  • Multiple – Allows posts to live under multiple category nodes.

Wish List [the future goods]:

  • Multiline – Currently only supports single line category titles, so you’re limited in char length
  • Scrolling – Currently the length of your category list is limited to the length of the swf. I plan to add functions to enable scrolling of the list based on mouseY. This will free up the nav to be as long as you desire.
  • Post count – Do people really use this though? Probably not as its annoying.
  • Levels – Currently the nav only supports 3 levels. It would be nice to be infinite.
  • Build in the rest of WordPress feature support for tag cloud, recent comments etc.

Total devel time: 2 days, or about 12 hours.

I’d love to see where other people take the code and what people build with it.

Source Code:
wpNavMain.as

/**
* wpNavMain by Chris Teso. Mar 19, 2009
* Visit www.christeso.com/blog for documentation, updates and more free code.
*
*
* Copyright (c) 2009 Chris Teso
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
**/
package
{
        import flash.display.*;

        public class wpNavMain extends Sprite
        {

                /*
                ========================================================
                | Constructor
                ========================================================
                */

                public function wpNavMain ()
                {
                        stage.align = StageAlign.TOP_LEFT;

                        // add nav
                        var wp:Wp = new Wp()
                        addChild( wp )
                }
        }
}

Wp.as

/**
* Wp by Chris Teso. Mar 19, 2009
* Visit www.christeso.com/blog for documentation, updates and more free code.
*
*
* Copyright (c) 2009 Chris Teso
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
**/

package
{
        import com.gskinner.motion.*
        import com.mattism.http.xmlrpc.*;
        import com.mattism.http.xmlrpc.util.*;
        import flash.filters.*;
        import flash.media.*;
        import flash.ui.*;
        import flash.display.*;
        import flash.events.*;
        import flash.net.*;
        import flash.utils.*;
        import flash.geom.*;
        import flash.text.*;
        import fl.transitions.*;
        import fl.transitions.easing.*;
        import flash.system.SecurityPanel;
        import flash.system.Security;

        public class Wp extends Sprite
        {

                /*
                ========================================================
                | Private Variables                         | Data Type
                ========================================================
                */
                private var _navArray:Array = new Array();
                private var _rpc:Connection;
                private var _topFont:Font = new topFont();
                private var _roadSign:Font = new roadSign();
                private var _topFmt:TextFormat = new TextFormat()
                private var _currUrl:String = ""
                private var _hideTimer:Timer

                private var _textYPad:int = 16
                private var _navSpeed:Number = .2
                /*
                ========================================================
                | Constructor
                ========================================================
                */

                public function Wp ()
                {
                        loadRpc()
                }

                private function checkPage()
                {
                        // load in title
                        var paramList:Object = this.root.loaderInfo.parameters;

                        // set var to hold text
                        var _currUrl:String = paramList["url"]

                        //_currUrl = "http://www.christeso.com/index.php/category/portfolio/truth/truth-found/"

                        // scan through array and open nav to that one
                        for( var i=0;i MovieClip(mc.parent).origY )
                                        {
                                                yLeap = _navArray[i].mc.origY + ( _totOpen*_textYPad )
                                                new GTween( _navArray[i].mc, _navSpeed, {y:yLeap} )
                                        }
                                        else
                                        {
                                                yLeap = _navArray[i].mc.origY
                                                new GTween( _navArray[i].mc, _navSpeed, {y:yLeap} )
                                        }
                                }

                                // push down child nodes as long as they are below the node you're on and are a child of the node you're on
                                if( _navArray[i].childMc != null )
                                {
                                        if( _navArray[i].childMc.parent == mc.parent )
                                        {
                                                if( _navArray[i].childMc.origY > mc.origY )
                                                {
                                                        yLeap = _navArray[i].childMc.origY + ( _totOpen*_textYPad )
                                                        new GTween( _navArray[i].childMc, _navSpeed, {y:yLeap} )
                                                }
                                                else
                                                {
                                                        yLeap = _navArray[i].childMc.origY
                                                        new GTween( _navArray[i].childMc, _navSpeed, {y:yLeap} )
                                                }
                                        }
                                }

                                // make grandchildren visible
                                if( _navArray[i].grandChildMc != null )
                                {
                                        if( _navArray[i].grandChildMc.parent == mc )
                                        {
                                                _navArray[i].grandChildMc.visible = true
                                                new GTween( _navArray[i].grandChildMc, _navSpeed, {alpha:1} )
                                        }
                                        else
                                        {
                                                new GTween( _navArray[i].grandChildMc, _navSpeed/2, {alpha:0, autoHide:true} )
                                        }
                                }
                        }
                }

                private function hideGrandChildren( e:Event )
                {
                        // amount to go down
                        var yLeap:Number;                        

                        // ok we can prob do this in one big loop
                        for( var i=0;i

Download CS4 AS3 FLA and Classes

Enjoy.

Flickr – The Democratization of Photography and Other Creative Mediums

I’m a novice. I joined Flickr 3 years ago not to learn how to take photographs, I would have learned that regardless of participation, but to display the fruits of my learning. I went through many stages of post processing tricks, camera hacks, and pure photographic techniques. As this Times article poignantly states, I became a typical Flickr user delving in typical Flickr styles. I learned how to use the Flickr interestingness algorithm to acquire more views, make explore, and spread the display of my learned lessons. As with most online forums, I learned how to use their features to my advantage. After all, I know how to build these systems, I certainly know how to exploit them. To my moral credit I did not exploit it as much as I could. There are some on Flickr who have gone the distance. After 3 years of doing this I still find myself advancing very slowly through the level of novicity [merriam webster inclusion recommendation] on the verge of potential decency. However, I am still a novice.

Yet, as a novice, I’m able to sell my services and prints to the entire world, and have. I’ve sold prints to publishers, been commissioned for projects, been invited by Getty Images to sell stock, and made various other business connections via Flickr.

And now for the ironic portion of this blog… As I try and transition past novicity and become more of a professional, however subjective that term is, I find I now hate myself and Flickr. I don’t really hate either of those two things but hyperbole makes for a more interesting read, agree? yes, you do. I’ve recently been contacted, via flickr, about the purchase of a few more of my images. One from a Holland magazine, the other a French magazine. Upon further investigation and email correspondence I’ve found that lo and behold, they have little to no budget, but would ‘love to purchase my art’ for their campaign. Since I work in advertising, this is not a new concept to me. We do the same thing at our shop. When budgets are low we scrap, and find quality on the cheap. This is what Flickr has to offer. I disagree with the Times article in some ways. I believe there is quality, in advertising terms, on Flickr. It’s one reason Getty has partnered with them. However, since this quality exists in abundance it has simultaneously made millions of professional photographers that earn next to nothing for their work. Again, this is not a new internet concept. You can see the same trend happening across various other creative mediums. Anyone can be a designer these days. Traditional professional designers will argue that these people are not true designers, and as in the movie Helvetica, you’ll hear Mr. Carson say that ‘just because they have the tools doesn’t mean they are designers’ or something like that. What he doesn’t mention is that in the industry he works in, that doesn’t matter. All that matters is what will sell and what the industry will buy. And more and more, the playing field is leveling and ‘novice’ talent is producing actual work for unreasonably cheap flow.

The same can be said for my native medium, interactive design and development. Tools are making it easier for the masses to join and compete. It’s the reason I was livid at Macromedia when it came out with its Dreamweaver product allowing non coders to build websites. It’s one more step towards not needing to know a craft to actually produce the results of said craft. Go on Craigslist and post a web development or design project. The majority of the responses will be appallingly inexpensive and equally shameful in portfolio quality. However, there will be a couple that come close enough to make the grade. The result is a lowering of the industry wage and the promotion of marginal quality. I’m forced to lower my rates to compete. Again, I wasn’t complaining about this when I was a novice web designer in 1999, but it kicks me in the boo boo now.

The book The World is Flat explains these processes in detail. I tend to agree with the synopsis of the book that the overall result of this process is actually for the global good. India is able to compete which drives US innovation, and so on. Globally this is great. I know that I need to think globally, but personally, at this moment, it is bad.

I could go on and write about this topic for hours, but It’d just be more novice writing garnering page views. Oh wait, I forgot to mention, anyone can be a published writer. Anyone want to hire me to write for their blog?

Portland Photographer – Chris Teso

Media_httpwwwchristes_hfkyb

Over the last couple of years my addiction to taking pictures every day has grown in intensity. More recently this addiction has heightened my curiosity to a point of seriousity. You do realize that seriousity should have inclusion confirmation from Merriam-Webster. If truthiness can make in, seriousity should. Seriously. Ok, back to the point. I’m getting more serious about photography. I even purchased a serious camera. Along with this serious camera, and an overabundance of seriousity about it’s use, I’ve gone and constructed myself a website dedicated to my photography. It is my hope that this will inspire and urge potential clients to contact me about my services.

The concept of the site is to take as much distraction out of the interface as possible to allow all focus on the content, the photography. I decided the entire site could be controlled by a small non intrusive control. I also wanted users to be able to interact with the photography by zoom and panning. Users also have the option to zoom out to see the full photo. Finally, I wanted a super easy way to content manage the site. Since I’m an avid Flickr user, its API was a natural CMS choice. I merely have to tag my photos in Flickr and they show up categorized on my site. I’m a big fan of leveraging the many publishing outlets I already use.

If you are a photographer, and are interested in owning a site similar to this one, chirp me.

Chris Teso – Portland Photographer

AS3 Polar Coordinates and Radians

/flash/radians.swf

Many times I’ve set up interfaces where I need to place different objects equidistant around a central object. The solution to this problem is to first calculate the angle of each object by converting Radians to Degrees. This can be expressed by the following formula

Media_httpuploadwikim_idwbg

So, you simply need to loop through your collection of objects and assign each a different angle. After that you plug that angle into a new Polar Point.

for(var i=0;i

Here’s the complete source: radians.zip

package
{
        import flash.ui.*;
        import flash.display.*;
        import flash.events.*;
        import flash.geom.*;

        public class Main extends Sprite
        {

                /*
                ========================================================
                | Private Variables                         | Data Type
                ========================================================
                */

                private var array:Array = new Array()
                private var circumference:int;

                /*
                ========================================================
                | Constructor
                ========================================================
                */

                public function Main ()
                {
                        stage.align = StageAlign.TOP_LEFT;

                        // make some balls
                        addParticle( 100 )

                        menu.txtParticles.text = 'Particles: 100';

                        stage.addEventListener( Event.ENTER_FRAME, runParticle )

                        menu.slideCircumference.addEventListener( Event.CHANGE, changeCircumference );
                        menu.particles.addEventListener( Event.CHANGE, changeParticles );

                }

                private function addParticle( num )
                {
                        stage.removeEventListener( Event.ENTER_FRAME, runParticle )

                        var tot:Number = array.length

                        // kill mc's
                        for( var t=0;t

Permalink: http://www.christeso.com/index.php/lab/as3-polar-coordinates-and-radians