logo
468x60-2-495


  • Home
  • Privacy Policy
  • About
search
top
Oct 11, 2011 Posted on Oct 11, 2011 in Hints and Tips | 10 comments

How to Become a Writer for Activetuts+

Are you an RIA developer? Do you make Flash games or Unity games? Do you know some cool tips or techniques that you’re always surprised your colleagues don’t know? You sound like the perfect person to contribute to Activetuts+!

We’re on the lookout for new writers and screencasters, so read on to find out more…


What We’re Looking For

Right now, we’re putting out a general call for Quick Tips.

A Quick Tip is a short article or screencast – we’re talking about a thousand words, five steps, or a few minutes – that covers one bite-size subject.

For example, a Quick Tip could cover a small library, one or two components, or a technique – each a useful topic for which a full tutorial would be overkill.

We’ve also published Quick Tips that cover individual design patterns or error messages. You can see a full list on our Tips page.

As you can see, we’re really low on Unity, Silverlight, and HTML5 Quick Tips, and even our Flash stockpile has dried up over the last few weeks. We pay $50 for every Quick Tip that we publish, and if you submit an idea now there’s a good chance we’ll even be able to publish it this month!


Pitch a Quick Tip

Got an idea? Great! Pitch it to us (in about a paragraph or so) using the following form:

Pitch your Quick Tip idea

You can read more about the sort of topics we cover on Activetuts+ in our Author Guidelines – though if you’ve been reading the site for a while, you’ve probably got a good idea already.

As long as you’ve got an original, useful idea and can string a decent English sentence together, there’s a high chance your Quick Tip pitch will be accepted, so don’t be shy.

(For longer-form tutorial pitches, we do prefer to see some example of your previous work: projects you’ve worked on, blog posts you’ve written, presentations you’ve given, and so on. For Quick Tips, this isn’t necessary – although we’re still interested!)

We’re looking forward to reading your pitches.



View full post on Activetuts+

banner ad

10 Responses to “How to Become a Writer for Activetuts+”

  1. David Appleyard says:
    October 11, 2011 at 7:37 am

    We’re immensely pleased to announce that, after months of waiting, a new member of the AppStorm network has landed: Windows.AppStorm! Read on to find out more about what this fantastic new site has to offer…

    Complimenting Mac.AppStorm, Web.AppStorm, iPhone.AppStorm, iPad.AppStorm, and Android.AppStorm, our new Windows site will be offering reviews and roundups covering the entire Windows ecosystem, including Windows Phone 7, and games, along with tips and tricks to get the most from Windows.

    We know that many Tuts+ readers use Windows devices every day and want to provide you with a fantastic resource for everything Windows related. We’re incredibly excited to bring you excellent Windows content of the high quality you’ve come to expect from AppStorm – daily reviews, how-to’s, roundups, news, and opinion.


    Subscribe and Stay Up-to-Date!

    We have some absolutely fantastic posts lined up over the coming weeks, and we’d hate for you to miss out… There are a few different ways to subscribe to Windows.AppStorm – hopefully one of the following options will work for you!

    • Subscribe to our RSS feed
    • Follow @windowsappstorm on Twitter
    • Sign up for Email Updates
    • Stay up-to-date on Facebook

    Get Stuck In

    Windows Reviews

    As a treat for all newcomers to Windows.AppStorm here are a some links to articles published in the interim, you won’t be disappointed!

    • 90+ Incredibly Useful Windows 7 Apps & Tips
    • 25 Absolutely Gorgeous Windows Phone 7 Apps
    • 12 Fantastic Windows Alternatives to Mac & iLife Apps
    • 25 Beautifully Designed Windows Apps
    • The AppStorm PC Builder’s Guide – Summer 2011

    Head over to Windows.AppStorm…



  2. Activetuts+ Editor says:
    October 11, 2011 at 8:03 am

    Are you an RIA developer? Do you make Flash games or Unity games? Do you know some cool tips or techniques that you’re always surprised your colleagues don’t know? You sound like the perfect person to contribute to Activetuts+!

    We’re on the lookout for new writers and screencasters, so read on to find out more…


    What We’re Looking For

    Right now, we’re putting out a general call for Quick Tips.

    A Quick Tip is a short article or screencast – we’re talking about a thousand words, five steps, or a few minutes – that covers one bite-size subject.

    For example, a Quick Tip could cover a small library, one or two components, or a technique – each a useful topic for which a full tutorial would be overkill.

    We’ve also published Quick Tips that cover individual design patterns or error messages. You can see a full list on our Tips page.

    As you can see, we’re really low on Unity, Silverlight, and HTML5 Quick Tips, and even our Flash stockpile has dried up over the last few weeks. We pay $50 for every Quick Tip that we publish, and if you submit an idea now there’s a good chance we’ll even be able to publish it this month!


    Pitch a Quick Tip

    Got an idea? Great! Pitch it to us (in about a paragraph or so) using the following form:

    Pitch your Quick Tip idea

    You can read more about the sort of topics we cover on Activetuts+ in our Author Guidelines – though if you’ve been reading the site for a while, you’ve probably got a good idea already.

    As long as you’ve got an original, useful idea and can string a decent English sentence together, there’s a high chance your Quick Tip pitch will be accepted, so don’t be shy.

    (For longer-form tutorial pitches, we do prefer to see some example of your previous work: projects you’ve worked on, blog posts you’ve written, presentations you’ve given, and so on. For Quick Tips, this isn’t necessary – although we’re still interested!)

    We’re looking forward to reading your pitches.


  3. Jason McElwaine says:
    October 11, 2011 at 8:36 am

    ActiveDen’s latest community-organised contest has just taken place. The theme was “Widget/Apps” and we had a number of outstanding entries, with $1,450 prize money up for grabs. We had a lot of fun with the contest and are thrilled to be offering the entries for free exclusively here on Activetuts+!


    The Winner: Lion’s NeatList AIR App

    Lion’s NeatList is a cool AIR app to keep track of your daily tasks. It also took home $1,000 for first prize!

    NeatList AIR App
    Download This Entry
    Demo View It Online

    Check out Lion’s ActiveDen Portfolio


    RimV’s Flickr Box AIR App

    Flickr Box is a cross platform AIR mobile app that runs on Android, iOS and RIM Playbook. Built by 3D legend RimV.

    Flickr Box AIR App
    Download This Entry
    Demo View It Online

    Check out RimV’s ActiveDen Portfolio


    FlashEdge’s 3D Flickr Gallery

    Coming in third was this amazing 3D gallery built by FlashEdge.

    3D Flickr Gallery
    Download This Entry
    Demo View It Online

    Check out FlashEdge’s ActiveDen Portfolio


    Kontrast’s Survey/Feedback/Quiz Form

    Build your own interactive form with this great entry from Kontrast.

    Flash Feedback Form
    Download This Entry
    Demo View It Online

    Check out Kontrast’s ActiveDen Portfolio


    RubenBristian’s Media Love Widget

    Create an online YouTube Poll with this awesome widget by RubenBristian.

    Flash Poll Widget
    Download This Entry
    Demo View It Online

    Check out Ruben’s ActiveDen Portfolio


    PezFlash’s Snakes & Apples

    Catch the dreaded Apples with this fun game by PezFlash.

    Flash Game
    Download This Entry
    Demo View It Online

    Check out PezFlash’s ActiveDen Portfolio


    RabidFlash’s YouTube Comment Widget

    Load YouTube comments with this cool widget by RabidFlash.

    Youtube Comments
    Download This Entry
    Demo View It Online

    Check out RabidFlash’s ActiveDen Portfolio


    Zefs’ Envato API AIR App

    View ActiveDen forum threads, the latest featured files and so much more with this awesome AIR app from Zefs.

    Envato API AIR App
    Download This Entry
    Demo View It Online

    Check out Zefs’ ActiveDen Portfolio


    ZoomIt’s Flash Testimonial Rotator

    Create a cool Flash Testimonial Rotator with this XML driven widget from Zoomit.

    Flash Testomonials
    Download This Entry
    Demo View It Online

    Check out ZoomIt’s ActiveDen Portfolio


    Sergibh’s Flash Horoscope Widget

    Present daily horoscopes with this neat component from Sergibh. Mobile App included.

    Flash Horoscope Component
    Download This Entry
    Demo View It Online

    Check out Sergibh’s ActiveDen Portfolio


    CodingJack’s ChangeStar Envato API AIR App

    Track your Envato marketplace file ratings with this easy to use AIR app.

    Envato API AIR App
    Download This Entry
    Demo View It Online

    Check out CodingJack’s ActiveDen Portfolio


    More Info

    Some entries do not include ActionScript source. Feel free to use the entries in your client projects but resale of any kind is not permitted.

    Want to read more about the fun we had? Check out the competition threads over on the ActiveDen forums here and here.


    The Competition Sponsors

    Big thanks to all of these guys for sponsoring the competition:

    Envato

    BitFade   PezFlash   ZoomIt

    LGLab   FlashEdge   Parker and Kent

    Special thanks to Zefs and PatrickJansen for their amazing work on the competition banner!


  4. Michael James Williams says:
    October 11, 2011 at 8:53 am

    Last reminder: These courses start tomorrow!

    Artificial intelligence is a popular programming topic, with obvious applications in game development, and machine learning is a branch of AI focused on creating code that can learn based on past experiences. Databases are perhaps not as stereotypically cool to study, but still very important for any programmer. Stanford University is offering free, online, undergraduate-level courses in each subject. Read on to find out how you can enroll…


    Are These Proper University Courses?

    Yes and no. The courses are online versions of those which actual Stanford students will take (other than being delayed by a couple of weeks), and so will be taught and graded at university level – but studying online won’t get you a Stanford certificate or university credit, so you won’t be able to put “attended Stanford university” on your CV.

    Still, you’ll get the lectures (in video format) and the homework and exams (which you can submit and have graded electronically), so you’ll be learning the same material as the Stanford students!


    What’s Being Taught?

    Three courses are on offer:

    Introduction to Artificial Intelligence

    You’ll need to brush up on your probability and linear algebra skills (perhaps you could try Khan Academy).

    For more information, and to enroll, visit ai-class.com.

    Machine Learning

    Again, you’ll need to be familiar with basic probability theory and linear algebra.

    For more information, and to enroll, visit ml-class.com.

    Introduction to Databases

    This isn’t just about relational databases and SQL; it also covers XML (including XPath, XQuery and XSLT), UML, and “NoSQL” systems.

    For more information, and to enroll, visit db-class.com.


    Is There a Deadline?

    Yes. This isn’t like Tuts+ Premium, where you sign up and have access to courses and tutorials to read at your leisure; everybody taking the online course starts at the same time, with new lectures released each week and homework assignments due in on certain dates.

    The courses all start on the 10th of October, and end in mid-December, so you should enroll today if you are interested at all.

    If you don’t have time, or simply don’t want, to do the homework assignments, you can opt to take the “basic track” – in the AI course at least – which has the same material, but without the homework or exams. You can downgrade to this at any time, so there’s no harm in signing up to the “advanced track” for now.

    If you’re interested in programming, I hope you’ll sign up to at least one of the courses – not just because of the content, but because this should be a really interesting experiment in online learning.


  5. John Reyes says:
    October 11, 2011 at 9:52 am
    This entry is part 2 of 2 in the series The Power of Finite State Machines

    Here’s the concluding part of our tutorial about creating a multi-state car using a finite state machine. In this part, you will see how easy it is to add more states as well as new features to the car. When finished, you’ll know exactly how to structure control for your FSM Object, which will be demonstrated when we add animation and sound.


    Final Result Preview

    Check out the final result we’ll be working towards:


    Step 1: Continuing Where We Left Off – Additional States

    Here’s the State Transition Table (STT) we drew in the first part of the tutorial:

    Finite state machine design pattern in AS3

    When you need to add more states, always start with your STT. Here are the new states we’ll be working towards, with room to add the new actions required:

    Finite state machine design pattern in AS3

    Try putting in the right actions for the newly added states.

    I assume it’s been a while since you read the first part of this tutorial, so take your time. Once you finish, compare your STT with the image shown below.

    Finite state machine design pattern in AS3

    Step 2: Retouching the IState Interface

    The very next thing you need to do is add the two new state actions to your IState interface.

    Open IState.as in FD and include the code below. I would add it just after the driveForward() method.

    
    
    function driveBackward ():void;
    function driveReallyFast ():void;
    

    Now run the application and see what happens next.

    Finite state machine design pattern in AS3

    Any modification to the IState inteface needs to be reflected in all the classes that implement it. This is the great advantage of using an interface; I really like how it reminds you to add them for each existing state class.

    Add the following code to all the existing state classes. Put it right below the driveForward() method. Let’s have them call print(this + "apply action here") to remind us that we need to get back to them after creating the other two state classes.

    
    
    public function driveBackward ():void
    {
    	_car.print (this + " apply action here");
    }
    
    public function driveReallyFast ():void
    {
    	_car.print (this + " apply action here");
    }
    

    You shouldn’t get anymore errors when you run the application again.


    Step 3: Creating the Two State Classes

    Open the Car class, navigate to the initializeStates() method and add the code below.

    
    
    _engineDriveBackwardState = new EngineDriveBackward (this);
    _engineDriveReallyFastState = new EngineDriveReallyFast (this);
    

    Neither the variables nor the classes exist but we’ll fix that. First, get inside the word “EngineDriveBackward”, then press “CTRL + SHIFT + 1″; highlight “Create new class” then press “ENTER”.

    Finite state machine design pattern in AS3

    Make sure to match all the info above before you click “OK”. You should have something similar to the code below. Don’t forget to add the _car variable before the constructor and add that “$” symbol for the parameter. Then do the assignment inside the constructor.

    
    
    package com.activeTuts.fsm
    {
    	public class EngineDriveBackward implements IState
    	{
    
    		private var _car:Car;
    
    		public function EngineDriveBackward($car:Car)
    		{
    			_car = $car;
    		}
    
    		/* INTERFACE com.activeTuts.fsm.IState */
    
    		public function turnKeyOff():void
    		{
    
    		}
    
    		public function turnKeyOn():void
    		{
    
    		}
    
    		public function driveForward():void
    		{
    
    		}
    
    		public function driveBackward():void
    		{
    
    		}
    
    		public function driveReallyFast():void
    		{
    
    		}
    
    		public function reFuel():void
    		{
    
    		}
    
    		public function update($tick:Number):void
    		{
    
    		}
    
    		public function toString():String
    		{
    
    		}
    
    	}
    
    }
    

    Okay. Now go back to the Car class where we left off and put your cursor inside the _engineDriveBackwardState variable and press “CTRL + SHIFT + 1″; choose “Declare private variable” then hit “ENTER”. This will add it as the last variable before the constructor. Change its type to “IState”. I would move it to where the other state variables are but that’s optional.

    Follow the same procedure to create the EngineDriveReallyFast class.

    You’ll get an error if you run the application about the toString() method for the two new classes not returning a value.

    The Car will also need to provide external access to control for the two new actions. Add the code below after the driveForward() method.

    
    
    public function driveBackward (e:Event = null):void
    {
    	_currentState.driveBackward ();
    }
    
    public function driveReallyFast (e:Event = null):void
    {
    	_currentState.driveReallyFast ();
    }
    

    Lastly, add the explicit getters at the lower section of your Car class just above the changeState() method.

    
    
    public function getEngineDriveBackwardState ():IState { return _engineDriveBackwardState; }
    
    public function getEngineDriveReallyFastState ():IState { return _engineDriveReallyFastState; }
    

    Step 4: The EngineDriveBackward State

    Refer back to your STT and start adding code from the top of the IState method implementations. You’ll run into a snag somewhere but try to do it anyway. You may also use your own words for the print() method. Once you finish, compare your code with the class listing below.

    
    
    package com.activeTuts.fsm
    {
    	public class EngineDriveBackward implements IState
    	{
    		private var _car:Car;
    
    		public function EngineDriveBackward($car:Car)
    		{
    			_car = $car;
    		}
    
    		/* INTERFACE com.activeTuts.fsm.IState */
    
    		public function turnKeyOff ():void
    		{
    			_car.print ("click... rolling to a stop in reverse...the engine has been turned off.");
    			_car.changeState (_car.getEngineOffState ());
    		}
    
    		public function turnKeyOn ():void
    		{
    			_car.print ("you're driving in reverse, no need to crank the ignition!");
    		}
    
    		public function driveForward ():void
    		{
    			_car.print ("click, switching from reverse to drive...");
    			_car.changeState (_car.getEngineDriveForwardState ());
    		}
    
    		public function driveBackward ():void
    		{
    			_car.print ("...already driving in reverse.");
    		}
    
    		public function driveReallyFast ():void
    		{
    			_car.print ("click, changing gears from reverse to turbo!!!");
    			_car.changeState (_car.getEngineDriveReallyFastState ());
    		}
    
    		public function reFuel ():void
    		{
    			if (_car.hasFullTank () == false)
    			{
    				_car.print ("stopping the car from driving in reverse, changing gear to park, turning the key to the off position, getting out of the car and adding "
    				+ Number (_car.refillWithFuel ()).toFixed (2) + " gallon(s) of fuel.");
    				_car.changeState (_car.getEngineOffState ());
    			}
    		}
    
    		public function update ($tick:Number):void
    		{
    			_car.engineTimer += $tick;
    
    			if (_car.engineTimer >= Car.ONE_SIXTH_SECONDS)
    			{
    				_car.engineTimer -= Car.ONE_SIXTH_SECONDS;
    
    				_car.consumeFuel (Car.REVERSE_FUEL_CONSUMPTION);///25 seconds gas supply
    			}
    		}
    
    		public function toString ():String
    		{
    			return 'driving backward';
    		}
    
    	}
    
    }
    

    The update() method requires an additional property for the Car. Place your cursor inside the REVERSE_FUEL_CONSUMPTION, press “CTRL + SHIFT + 1″, choose “Declare constant”, then hit “ENTER”. This adds the constant at the top of the Car class with the default type of String. Change its type to Number and assign it a value of .0066. This gives 25 seconds of driving in reverse with a full tank of one gallon. You may move it to be with the other fuel consumption constants.

    While you’re there, you might as well add the TURBO_FUEL_CONSUMPTION constant with the value of .016 (10 seconds on turbo for one gallon). We’ll use that later for the EngineDriveReallyFast state class.

    It’s that simple. Go ahead and finish up the EngineDriveReallyFast class. If you get stuck, go back and check with your STT. Or you can just open the completed class inside the “StatePatternPartial2″ folder included with the source download and see what you missed.


    Step 5: More Testing

    Add the new state actions (_car.driveBackward() and _car.driveReallyFast() into the test sections in your “Main” class then run the app.

    Check your print out against the test actions if they match.

    Notice where it says “off apply action here”? That tells us we forgot to get back and add behavior for the newly added Car functions of the other state classes. Go back to each of them and apply the behavior based on your STT.

    The app should run perfectly now. If you like, you can still match your work with the classes included with the source download. As mentioned earlier, they’re inside the “StatePatternPartial2″ folder.


    Step 6: Adding Media Assets

    With the source download is a folder named “media”, drag that into the “bin” folder of your CarFSM project. It contains all the sound effects and graphics.

    Next, also with the source download, you’ll find a folder named “code”, get inside that and into the “StatePatternComplete” folder. Don’t touch anything except the “Media.as” class. Drag it into your “com.activeTuts.fsm” folder together with the rest of the classes you’ve made.

    It’s important you know how this class works so you can add to it later should you choose to try the homework of adding one other car functionality of returning back to park. So go over it at least once; I’ll also explain its responsibilities:

    It takes care of pretty much everything media-wise, from embedding media assets to allowing control over them. The first thing it does is embed all graphic and sound files inside the “media” folder. Animation, visual output, and sound are all controlled by the different state classes through the car instance which in turn passes the request to the media instance. When instantiated, this class does five things – It adds itself as a child of the car, it creates the car’s visual assets, sounds, buttons, and then visual output.

    Sound manipulation is usually handled with two functions; for example, when the car is running, if you select the “drive” radio button, the car calls playParkToDrive() which plays the sound of the car increasing power, then playPeakDrive() when the sound finishes for constant speed driving sound.


    Step 7: Extending the Car’s Responsibilities – Variables

    Starting at the top of the Car class, add the following code after the _currentState variable declaration. These properties came up as features were added to the Car. For example, I wanted to bring back the gear to park after one second when the car is either off or out of fuel so there it is. Another example would be cleaning up the visual output display after 10 seconds of printing a statement.

    
    
    public static const ONE_SECOND:int = 1; //used to reposition the gear to park when off/out of fuel after one second
    
    private static const TEN_SECONDS:int = 10; //triggers clean up for visual output
    
    private var _cleanUpTimer:Number = 0; //visual output clean up timer
    
    private var _angle:Number = 0; //for the car body animation when engine is on and parked
    
    private var _reallyFastRollSpeed:Number = 63; //roll speed when on turbo
    private var _driveRollSpeed:Number = 35; //roll speed when on drive
    private var _reverseRollSpeed:Number = -15; //roll speed when on reverse
    private var _currentRollSpeed:Number = 0; //changes based on target roll speed see last three properties above, used for wheel rotation animation
    
    private var _carBlurEffect:Sprite; //turbo speed blur effect
    
    private var _media:Media; //reference to the Media class for visual/output/sound manipulation
    

    Be sure to add _media = new Media (this); inside the init() method right after the initializeStates() method call.


    Step 8: Extending the Car’s Responsibilities – Car Functions

    Now get inside the update() method and change it to match the code that follows.

    
    
    public function update ($tick:Number):void
    {
    	_currentState.update ($tick);
    
    	_media.setTitle (_currentState.toString ());
    
    	if (_currentState == _engineOutOfFuelState || _currentState == _engineOffState)
    	{
    		if (_currentRollSpeed == 0) //or add this test for the update method of the two states
    		{
    			_media.stopRollSound ();
    		}
    	}
    
    	//clean up the output panel after 10 seconds
    	if ((_cleanUpTimer += $tick) >= TEN_SECONDS)
    	{
    		_cleanUpTimer -= TEN_SECONDS;
    		_media.cleanUp ();
    	}
    }
    

    Remember – the changes in the methods, however complex, only manipulate sound and animation. If you plan on doing the homework later (allowing the car to return to park from any of the drive states), here’s the method you need to work on. Paste it before the turnKeyOn() method. This method gets called when the “park” radio button is clicked (if enabled). See addButtons() in the Media class.

    
    
    public function returnToPark (e:Event = null):void
    {
    	//homework
    }
    

    From turnKeyOn() all the way down to reFuel() add _cleanUpTimer = 0 before the current state delegation. And that’s how the visual output panel gets cleared after 10 seconds.

    consumeFuel() and refillWithFuel() also need to be updated, as shown here:

    
    
    public function consumeFuel ($consumption:Number):void
    {
    	if ((_fuelSupply -= $consumption) <= 0)
    	{
    		_fuelSupply = 0;
    		_cleanUpTimer = 0;
    
    		stopEngine ();
    
    		if (currentRollSpeed != 0)
    		{
    			playRoll ();
    			print ("the engine has stopped, no more fuel to run...rolling to a stop.");
    		}
    		else print ("the engine has stopped, no more fuel to run...");
    
    		_media.setColor (0xFF0000);
    
    		changeState (_engineOutOfFuelState);
    	}
    }
    
    public function refillWithFuel ():Number
    {
    	if (_currentRollSpeed != 0) playRoll ();
    
    	var neededSupply:Number = _fuelCapacity - _fuelSupply;
    	_fuelSupply += neededSupply;
    	_media.setColor ();
    	return neededSupply;
    }
    

    I just kept adding whatever feature I could think of to show the State Pattern’s flexibility.

    Replace what’s inside the print() method with _media.print ($text);.


    Step 9: Extending the Car’s Responsibilities – Sound Control

    Go one line after the toString() method at the bottom of the class and paste the list below.

    
    
    ///Sound control
    public function startEngine ():void
    {
    	_media.startEngine ();
    }
    
    public function startEngineNoFuel ():void
    {
    	_media.startEngineNoFuel ();
    }
    
    public function startEngineWhileRunning ():void
    {
    	_media.startEngineWhileRunning ();
    }
    
    public function keyOffClick ():void { _media.keyOffClick (); }
    
    public function stopEngine ():void
    {
    	_media.stopEngine ();
    }
    
    public function playParkToDrive (e:Event = null):void
    {
    	_media.playParkToDrive (e);
    }
    
    public function playDriveToTurbo (e:Event = null):void
    {
    	_media.playDriveToTurbo (e);
    }
    
    public function playParkToReverse (e:Event = null):void
    {
    	_media.playParkToReverse (e);
    }
    
    public function playReverseToDrive ():void
    {
    	_media.playReverseToDrive ();
    }
    
    public function playDriveToReverse ():void
    {
    	_media.playDriveToReverse ();
    }
    
    public function playReverseToTurbo ():void
    {
    	_media.playReverseToTurbo ();
    }
    
    public function playTurboToReverse ():void
    {
    	_media.playTurboToReverse ();
    }
    
    public function playTurboToDrive ():void
    {
    	_media.playTurboToDrive ();
    }
    
    public function playRoll ():void
    {
    	_media.playRoll ();
    }
    

    Since properties don’t change when playing sound, we just delegate the work from car to media. For animation, the properties are manipulated inside the state classes which is then applied via access of the media through the car.

    It might start to get a little confusing but just think of it this way – the Car is your central control hub with its logic contained inside the state classes. The current state has its own specific behavior for the called action, in response, it then calls specific functions in the Car to accomplish the required result.

    Next comes control for the “park” radio button. We need these methods to automatically return the gear to park if the engine is either off or out of fuel (after one second). Don’t get it confused with the returnToPark() method which is triggered by the radio button (see Step 29). Paste the code next. You’ll see how these methods were conceived when we start adding to the state classes.

    
    
    public function switchToPark ():void
    {
    	_media.parked = true;
    }
    
    public function isParked ():Boolean
    {
    	return _media.parked;
    }
    

    Step 10: Extending the Car’s Responsibilities – Animation Control

    The code below completes the class. Add it at the end and save your work.

    
    
    ///Animation control
    public function get currentRollSpeed ():Number { return _currentRollSpeed; }
    
    public function set currentRollSpeed ($value:Number):void
    {
    	_currentRollSpeed = $value;
    }
    
    public function get carFrontWheel ():Sprite { return _media.carFrontWheel; }
    
    public function get carRearWheel ():Sprite { return _media.carRearWheel; }
    
    public function get carBody ():Sprite { return _media.carBody; }
    
    public function get carBlurEffect ():Sprite { return _media.carBlurEffect; }
    
    public function get angle ():Number { return _angle; }
    
    public function set angle (value:Number):void { _angle = value; }
    
    public function get reallyFastRollSpeed ():Number { return _reallyFastRollSpeed; }
    
    public function get reverseRollSpeed ():Number { return _reverseRollSpeed; }
    
    public function get driveRollSpeed ():Number { return _driveRollSpeed; }
    

    That was a lot of added code. Compare your classes with the ones included with the source download if you run into errors when testing the app later.


    Step 11: Controlling Media From EngineDriveReallyFast

    For adding effects (in this case, handling visual manipulation), I’ve learned to always start where things change most. We could start working on the default state EngineOff – but then how do we know what animation should happen there unless we know what animation it might be coming back from? If we start there, we only know that the wheels shouldn’t be rolling at all. But the Car may be coming from turbo.

    Review and compare the IState method implementations for your current EngineDriveReallyFast version with the code below.

    
    
    public function turnKeyOff ():void
    {
    	_car.print ("click... rolling to a stop from turbo...the engine has been turned off.");
    	_car.stopEngine ();
    	_car.keyOffClick ();
    	if (_car.currentRollSpeed != 0) _car.playRoll ();
    	_car.changeState (_car.getEngineOffState ());
    }
    
    public function turnKeyOn ():void
    {
    	_car.print ("man, we're on turbo, don't crank the ignition!");
    	_car.startEngineWhileRunning ();
    }
    
    public function driveForward ():void
    {
    	_car.print ("slowing down to regular driving speed...");
    	_car.playTurboToDrive ();
    	_car.changeState (_car.getEngineDriveForwardState ());
    }
    
    public function driveBackward():void
    {
    	_car.print ("click, switching the gears from turbo to reverse...");
    	_car.playTurboToReverse ();
    	_car.changeState (_car.getEngineDriveBackwardState ());
    }
    
    public function driveReallyFast ():void
    {
    	_car.print ("We can't drive any faster than this, no changes...");
    }
    
    public function reFuel ():void
    {
    	if (_car.hasFullTank () == false)
    	{
        	_car.stopEngine ();
    		_car.print ("hitting the brakes!, stopping the car, switching gear to park, turning the key to the off position, getting out of the car and adding "
    		+ Number (_car.refillWithFuel ()).toFixed (2) + " gallon(s) of fuel.");
    		_car.changeState (_car.getEngineOffState ());
    	}
    }
    
    public function update ($tick:Number):void
    {
    	_car.engineTimer += $tick;
    
        //if the speed goes over regular driving speed, show the turbo blur effect
    	if (_car.currentRollSpeed > _car.driveRollSpeed)
    	{
    		if (_car.carBlurEffect.alpha < .6) _car.carBlurEffect.alpha += .01;
    		if (_car.carBlurEffect.x > -30) _car.carBlurEffect.x += -.01;
    
            //rotate the car body clockwise a little
    		if (_car.carBody.rotation < 7) _car.carBody.rotation += .05;
    
            //move the car body a little to the left
    		if (_car.carBody.x > -5) _car.carBody.x += -.02;
    	}			
    
        //slowly increase speed if not maxed
    	if (_car.currentRollSpeed < _car.reallyFastRollSpeed) _car.currentRollSpeed += .2;
    	else _car.currentRollSpeed = _car.reallyFastRollSpeed;
    
    	_car.carFrontWheel.rotation += _car.currentRollSpeed;
    	_car.carRearWheel.rotation += _car.currentRollSpeed;
    
        //bobbing motion
    	_car.carBody.y = Math.sin (_car.angle += .05) * 2;
    
    	if (_car.engineTimer >= Car.ONE_SIXTH_SECONDS)
    	{
    		_car.engineTimer -= Car.ONE_SIXTH_SECONDS;
    
    		_car.consumeFuel (Car.TURBO_FUEL_CONSUMPTION);
    	}
    }
    

    I’ve excluded the constructor as well as the toString() method since they’re not doing anything with the media.

    We’re not making any changes to the state classes, we’re only adding features for controlling sound and animation. You can copy the listing and replace all those methods in your EngineDriveReallyFast state or you can just add the missing pieces. It’s up to you. The important part is we’ve abstracted the logic away from the Car object. Now we can make it as complex as we want. The focus is sharp. We know what we’re working on and there’s no mix-up.

    Animation is handled through the update() method. The rest just takes care of playing sound.


    Step 12: Animation for EngineDriveBackward

    Now for the opposite end.

    Review, compare then make changes just like we did for the EngineDriveReallyFast state.

    
    
    public function turnKeyOff ():void
    {
    	_car.print ("click... rolling to a stop in reverse...the engine has been turned off.");
    	_car.stopEngine ();
    	_car.keyOffClick ();
    	if (_car.currentRollSpeed != 0) _car.playRoll ();
    	_car.changeState (_car.getEngineOffState ());
    }
    
    public function turnKeyOn ():void
    {
    	_car.print ("you're driving in reverse, no need to crank the ignition!");
    	_car.startEngineWhileRunning ();
    }
    
    public function driveForward ():void
    {
    	_car.print ("click, switching from reverse to drive...");
    	_car.playReverseToDrive ();
    	_car.changeState (_car.getEngineDriveForwardState ());
    }
    
    public function driveBackward ():void
    {
    	_car.print ("...already driving in reverse.");
    }
    
    public function driveReallyFast ():void
    {
    	_car.print ("click, changing gears from reverse to turbo!!!");
    	_car.playReverseToTurbo ();
    	_car.changeState (_car.getEngineDriveReallyFastState ());
    }
    
    public function reFuel ():void
    {
    	if (_car.hasFullTank () == false)
    	{
        	_car.stopEngine ();
    		_car.print ("stopping the car from driving in reverse, changing gear to park, turning the key to the off position, getting out of the car and adding "
    		+ Number (_car.refillWithFuel ()).toFixed (2) + " gallon(s) of fuel.");
    		_car.changeState (_car.getEngineOffState ());
    	}
    }
    
    public function update ($tick:Number):void
    {
    	_car.engineTimer += $tick;
    
    	///visual
    	if (_car.carBlurEffect.alpha > 0) _car.carBlurEffect.alpha += -.01;
    	if (_car.carBlurEffect.x < 0) _car.carBlurEffect.x += .01;
    
    	if (_car.carBody.rotation > -5) _car.carBody.rotation += -.03;
    	if (_car.carBody.x < 3) _car.carBody.x += .02;
    
    	if (_car.currentRollSpeed > _car.reverseRollSpeed) _car.currentRollSpeed += -.4;
    	else _car.currentRollSpeed = _car.reverseRollSpeed;
    
    	_car.carFrontWheel.rotation += _car.currentRollSpeed;
    	_car.carRearWheel.rotation += _car.currentRollSpeed;
    
    	_car.carBody.y = Math.sin (_car.angle += .1) * 1;
    
    	if (_car.engineTimer >= Car.ONE_SIXTH_SECONDS)
    	{
    		_car.engineTimer -= Car.ONE_SIXTH_SECONDS;
    
    		_car.consumeFuel (Car.REVERSE_FUEL_CONSUMPTION);
    	}
    }
    

    Nothing fancy, we’re just making it seem like the car’s going in reverse. Since the previous state could be EngineDriveReallyFast, we have to make sure that the turbo blur effect is taken away (lines 51-52).


    Step 13: The EngineDriveForward State

    
    
    public function turnKeyOff ():void
    {
    	_car.print ("click... rolling to a stop...the engine has been turned off.");
    	_car.stopEngine ();
    	_car.keyOffClick ();
    	if (_car.currentRollSpeed != 0) _car.playRoll ();
    	_car.changeState (_car.getEngineOffState ());
    }
    
    public function turnKeyOn ():void
    {
    	_car.print ("you're driving so don't crank the ignition!");
    	_car.startEngineWhileRunning ();
    }
    
    public function driveForward ():void
    {
    	_car.print ("already driving - no need to change anything...");
    }
    
    public function driveBackward():void
    {
    	_car.print ("click, changing the gear from drive to reverse...");
    	_car.playDriveToReverse ();
    	_car.changeState (_car.getEngineDriveBackwardState ());
    }
    
    public function driveReallyFast ():void
    {
    	_car.print ("switching from drive to turbo!!!");
    	_car.playDriveToTurbo ();
    	_car.changeState (_car.getEngineDriveReallyFastState ());
    }
    
    public function reFuel ():void
    {
    	if (_car.hasFullTank () == false)
    	{
        	_car.stopEngine ();
    		_car.print ("stopping the car, changing gears to park, turning the key to the off position, getting out of the car and adding "
    		+ Number (_car.refillWithFuel ()).toFixed (2) + " gallon(s) of fuel.");
    		_car.changeState (_car.getEngineOffState ());
    	}
    }
    
    public function update ($tick:Number):void
    {
    	_car.engineTimer += $tick;
    
    	///visual
    	if (_car.carBlurEffect.alpha > 0) _car.carBlurEffect.alpha += -.01; //if coming from turbo, remove blur effect
    	if (_car.carBlurEffect.x < 0) _car.carBlurEffect.x += .01;
    
    	if (_car.carBody.rotation < 5) _car.carBody.rotation += .01;
    	else if (_car.carBody.rotation > 5) _car.carBody.rotation += -.01;
    
    	if (_car.carBody.x > -3) _car.carBody.x += -.01;
    	else if (_car.carBody.x < -3) _car.carBody.x += .01;
    
    	if (_car.currentRollSpeed < _car.driveRollSpeed) _car.currentRollSpeed += .2; //from reverse or park
        else if (_car.currentRollSpeed > _car.driveRollSpeed) _car.currentRollSpeed += -.2; //from turbo
    	else _car.currentRollSpeed = _car.driveRollSpeed;
    
    	_car.carFrontWheel.rotation += _car.currentRollSpeed;
    	_car.carRearWheel.rotation += _car.currentRollSpeed;
    
    	_car.carBody.y = Math.sin (_car.angle += .1) * 2;
    
    	if (_car.engineTimer >= Car.ONE_SIXTH_SECONDS)
    	{
    		_car.engineTimer -= Car.ONE_SIXTH_SECONDS;
    
    		_car.consumeFuel (Car.DRIVE_FUEL_CONSUMPTION);
    	}
    }
    

    Here, we check whether the Car came from the reverse, park, or turbo state and adjust the rolling of the wheels appropriately. The rest of the changes are similar to the other states.


    Step 14: The EngineOn State

    
    
    public function turnKeyOff ():void
    {
    	_car.print ("click... the engine has been turned off from park.");
    
    	///visual
    	_car.carBody.rotation = 0;
    	_car.carBody.x = 0;
    
    	_car.stopEngine ();
    	_car.keyOffClick ();
    	_car.changeState (_car.getEngineOffState ());
    }
    
    public function turnKeyOn ():void
    {
    	_car.print ("the engine's already running you didn't have to crank the ignition!");
    	_car.startEngineWhileRunning ();
    }
    
    public function driveForward ():void
    {
    	_car.print ("click, changing gears to drive ...now were going somewhere...");
    	_car.playParkToDrive ();
    	_car.changeState (_car.getEngineDriveForwardState ());
    }
    
    public function driveBackward():void
    {
    	_car.print ("click, changing gears from park to reverse...");
    	_car.playParkToReverse ();
    	_car.changeState (_car.getEngineDriveBackwardState ());
    }
    
    public function driveReallyFast ():void
    {
    	_car.print ("click, going on turbo...woohoo!!!");
    	_car.playDriveToTurbo ();
    	_car.changeState (_car.getEngineDriveReallyFastState ());
    }
    
    public function reFuel ():void
    {
    	if (_car.hasFullTank () == false)
    	{
        	_car.stopEngine ();
    		_car.print ("turning the car off, getting out and adding " + Number (_car.refillWithFuel ()).toFixed (2) + " gallon(s) of fuel.");
    		_car.changeState (_car.getEngineOffState ());
    	}
    }
    
    public function update ($tick:Number):void
    {
    	_car.engineTimer += $tick;
    
    	///visual
    	_car.angle += 2;
    
        //vibration effect
    	_car.carBody.rotation = Math.cos (_car.angle) * .8; 
    
    	if (_car.carBlurEffect.alpha > 0) _car.carBlurEffect.alpha += -.005;
    	if (_car.carBlurEffect.x < 0) _car.carBlurEffect.x += .01;
    
    	if (_car.currentRollSpeed > .3) _car.currentRollSpeed += -.3;
    	else if (_car.currentRollSpeed < -.3) _car.currentRollSpeed += .3;
    	else _car.currentRollSpeed = 0;
    
    	if (_car.currentRollSpeed == 0) _car.switchToPark ();
    
    	_car.carFrontWheel.rotation += _car.currentRollSpeed;
    	_car.carRearWheel.rotation += _car.currentRollSpeed;
    
    	if (_car.engineTimer >= Car.ONE_SIXTH_SECONDS)
    	{
    		_car.engineTimer -= Car.ONE_SIXTH_SECONDS;
    
    		_car.consumeFuel (Car.IDLE_FUEL_CONSUMPTION);
    	}
    }
    

    A pattern’s starting to show. Get to know the changes then apply them to your class.


    Step 15: Out of Fuel Animation

    
    
    public function turnKeyOff ():void
    {
    	_car.print ("you already did this when the fuel ran out earlier...");
    }
    
    public function turnKeyOn ():void
    {
    	_car.print ("no fuel - the car will not start, get some fuel before anything. Returning the key to the off position.");
    	_car.startEngineNoFuel ();
    }
    
    public function driveForward ():void
    {
    	_car.engineTimer = 0;
    	_car.print ("click, changing the gear to drive doesn't do anything...the car has no fuel, returning the gear to park...");
    }
    
    public function driveBackward ():void
    {
    	_car.engineTimer = 0;
    	_car.print ("click, changing the gear to reverse won't do anything either...the car has no fuel, returning the gear to park...");
    }
    
    public function driveReallyFast ():void
    {
    	_car.engineTimer = 0;
    	_car.print ("click, changed gear to turbo, no change, the car is not running, try to get som fuel, returning the gear to park.");
    }
    
    public function reFuel ():void
    {
    	if (_car.hasFullTank () == false)
    	{
    		_car.print ("getting out of the car and adding " + _car.refillWithFuel () + " gallon(s) of fuel.\n");
    		_car.changeState (_car.getEngineOffState ());
    	}
    }
    
    public function update ($tick:Number):void
    {
    	if (_car.currentRollSpeed == 0)
    	{
    		if (! _car.isParked ())
    		{
    			_car.engineTimer += $tick;
    
    			if (_car.engineTimer >= Car.ONE_SECOND)
    	 		{
    				_car.switchToPark ();
    			}
    		}
    	}
    
    	if (_car.carBlurEffect.alpha > 0) _car.carBlurEffect.alpha += -.005;
    	if (_car.carBlurEffect.x < 0) _car.carBlurEffect.x += .01;
    
    	if (_car.carBody.rotation > 0) _car.carBody.rotation += -.02;
    	else if (_car.carBody.rotation < 0) _car.carBody.rotation += .02;
    
    	if (_car.carBody.x < 0) _car.carBody.x += .02;
    	else if (_car.carBody.x > 0) _car.carBody.x += -.02;
    
    	if (_car.currentRollSpeed > 0.3) _car.currentRollSpeed += -.3;
    	else if (_car.currentRollSpeed < -0.3) _car.currentRollSpeed += .3;
    	else _car.currentRollSpeed = 0;
    
    	_car.carFrontWheel.rotation += _car.currentRollSpeed;
    	_car.carRearWheel.rotation += _car.currentRollSpeed;;
    
    }
    

    One more State… =)


    Step 16: Animation When the Car Is Turned Off

    
    
    public function turnKeyOff ():void
    {
    	_car.print ("The car's already off, you can't turn the key counter-clockwise any further...");
    }
    
    public function turnKeyOn ():void
    {
    	_car.print ("Turning the car on...the engine is now running!");
    	_car.startEngine ();
    	_car.changeState (_car.getEngineOnState ());
    
    }
    
    public function driveForward ():void
    {
    	_car.engineTimer = 0;
    	_car.print ("click, changing the gear to drive doesn't do anything...the car is not running, returning the gear to park...");
    }
    
    public function driveBackward ():void
    {
    	_car.engineTimer = 0;
    	_car.print ("click, changing the gear to reverse does nothing, the car is not running, returning the gear to park...");
    }
    
    public function driveReallyFast ():void
    {
    	_car.engineTimer = 0;
    	_car.print ("click, changing the gear to turbo, nothing happens, the engine's off, returning the gear to park...");
    }
    
    public function reFuel ():void
    {
    	if (_car.hasFullTank () == false)
    	{
    		_car.print ("getting out of the car and adding " + Number (_car.refillWithFuel ()).toFixed (2) + " gallon(s) of fuel.");
    	}
    }
    
    public function update ($tick:Number):void
    {
    	if (_car.currentRollSpeed == 0)
    	{
    		if (! _car.isParked ())
    		{
    			_car.engineTimer += $tick;
    
    			if (_car.engineTimer >= Car.ONE_SECOND)
    	 		{
    				_car.switchToPark ();
    			}
    		}
    	}
    
    	if (_car.carBlurEffect.alpha > 0) _car.carBlurEffect.alpha += -.005;
    	if (_car.carBlurEffect.x < 0) _car.carBlurEffect.x += .01;
    
    	if (_car.carBody.rotation > 0) _car.carBody.rotation += -.02;
    	else if (_car.carBody.rotation < 0) _car.carBody.rotation += .02;
    
    	if (_car.carBody.x < 0) _car.carBody.x += .02;
    	else if (_car.carBody.x > 0) _car.carBody.x += -.02;
    
    	if (_car.currentRollSpeed > 0.3) _car.currentRollSpeed += -.3;
    	else if (_car.currentRollSpeed < -0.3) _car.currentRollSpeed += .3;
    	else _car.currentRollSpeed = 0;
    
    	_car.carFrontWheel.rotation += _car.currentRollSpeed;
    	_car.carRearWheel.rotation += _car.currentRollSpeed;
    }
    

    The last two state classes have the same response when you try to switch gears. Also, you know what possible animation it could be coming from and apply adjustment for it.


    Step 17: Final Changes to Main

    Replace the contents of your Main.as class with the code below.

    
    
    package  com.activeTuts.fsm
    {
    
    	import flash.display.Sprite;
    	import flash.events.Event;
    	import flash.utils.getTimer;
    
    	[SWF (width = 500, height = 350, frameRate = 60, backgroundColor = 0xFFFFFF)]
    
    	public class Main extends Sprite
    	{
    		private var _past:Number;
    		private var _present:Number;
    		private var _tick:Number;
    		private var _car:Car;
    
    		public function Main ()
    		{
    			init ();
    		}		
    
    		private function init():void
    		{
    			_present = getTimer ();
    			_past = _present;
    
    			addCar ();
    
    			addEventListener (Event.ENTER_FRAME, update);
    		}
    
    		private function addCar ():void
    		{
    			_car = new Car;
    			_car.x = stage.stageWidth * .5;
    			_car.y = stage.stageHeight * .5;
    			addChild (_car);
    		}
    
    		private function update (e:Event):void
    		{
    			_present = getTimer ();
    			_tick = (_present - _past) * .001; ///converted to 1/1000
    			_past = _present;
    
    			_car.update (_tick);
    		}
    
    	}
    
    }
    

    All we do is add the car and call its update() method at every enter frame event. You should see the car and the visual output when you run the application.

    You’ll notice the Car runs out of gas too soon. Change the value of _fuelCapacity to 3 inside Car (variable declaration), and then test the Car thoroughly.

    Congratulations! You finished the tutorial.


    Summary

    Let’s now go over the whole procedure of creating a full featured FSM object from scratch.

    1. Sketch up the State Transition Table for your object.
    2. Create your Procedural FSM object.
    3. Once Procedural FSM works, if you need to add a lot more features and/or states, convert it to the State Pattern.
    4. Build your IState Interface first.
    5. Create the first/default state class (consult State Transition Table and Procedural FSM actions).
    6. Duplicate a copy of your Procedural FSM object, then allow public access to all properties the state classes need to control.
    7. Create the rest of the state classes.
    8. Add features/states as per your requirements. These usually present themselves while you’re working on your State actions.
    9. When adding new state/s, start with your State Transition Table.
    10. Program the state/s action/s into the IState interface first, then create the state/s.
    11. Add the new action/s to the already existing states manually.
    12. When adding effects (logic) start with the state with biggest change. Then work on the opposite end so you can expect what could happen in the states between.
    13. Polish until logic for all the states meet your specifications.

    Care to do the homework? Hint: You won’t need to create another state.

    Until next time! Thank you so much for reading!! =)

    Comments are always welcome. Please post them below.


  6. Franci Zidar says:
    October 11, 2011 at 10:35 am

    MAX is Adobe’s annual conference, where they announce their new products and acquisitions, and give us all an idea of their current strategy. Last year they announced Flash’s 3D API, codenamed Molehill (now called Stage3D); AIR for TV; Edge, their new HTML5 animation tool; and more. There were also puppets. This year, long-time Activetuts+ writer Franci Zidar is at the event and will be filling us in on the details and sharing lots of photos. The second day’s keynote was aimed at developers – that means Flash and HTML5 news. Read on to find out more…


    The Future of Flash

    Flash is taking on a whole new life. With new technologies like HTML5 and CSS3 and advances in JavaScript, a lot of rich media delivery is going to be taken over by these standards. Adobe unveiled a demo of Unreal Tournament 3 working in Flash inside the browser (see below) and talked extensively about Flash as a gaming platform on all devices in 2D and 3D. The idea is to make Flash platform the “gaming console for the web”.

    Adobe MAX 2011
    Adobe MAX 2011
    Editor’s note: Mouse-lock at last, hooray!

    Flash’s Stage3D (previously codenamed Molehill – check out an introductory tutorial here) provides GPU acceleration for 3D and now through Starling Framework for 2D graphics within Flash Player.

    Adobe MAX 2011

    The next iteration of Flash Professional (codenamed Ruben) will also let you create sprite sheets from vector animations to get GPU accelerated animations and provide some other GPU acceleration focused improvements.


    Check out Unreal Tournament running in the Flash Player (sadly not ported to AS3!)

    Other Technologies

    A lot of the focus at MAX this year was on alternative technologies to Flash for rich media delivery. My guess is that you are already better off building sites requiring simple multimedia experiences with these other web standards since you’ll have a much easier job deploying them for mobile devices or they might, to some extent, work on them by default.

    Adobe MAX 2011

    Adobe has also proposed two new features for CSS called CSS Regions and CSS Shaders. Regions allow the creation of scalable text regions of any shape that let text flow through or around them depending on screen size and Shaders create great looking effects and transitions for HTML elements.

    Here’s some more info on CSS Shaders, including videos of them in action: http://www.adobe.com/devnet/html5/articles/css-shaders.html

    Adobe MAX 2011

    While visually more intensive web experiences would still require Flash to be built in reasonable time, since the workflows are already established, and perform well at runtime, with software like Adobe Edge and HTML5 and JavaScript rendering getting better each month this could also be changing soon. Having played a bit with Edge and seeing some demonstrations it really seems this software is currently heading in the direction of a mix between After Effects and Flash. It’s still in preview stage and has limited scripting capabilities but in some ways it is quite similar to Flash.


    The Future

    The web is shifting again. New devices are changing the landscape for web deployment and there are a bunch of new solutions to deliver the content across all of them. HTML5 has been the buzz word for quite a while now, and while it does provide some welcome improvements and new features what is really helping developers deliver content across devices either online or offline is a combination of CSS, JavaScript and HTML. There are now many solutions for creating online content and offline apps and websites but the combination of CSS, JavaScript and HTML allows you to apply an already mastered set of skills to any of these methods of deployment. You could learn native development for Android, iOS, Windows Phone and all the other mobile platforms but that is unrealistic from the perspective of a freelance developer and hard even for a medium sized company.

    Adobe MAX 2011

    So for anyone who finds this fragmented solution too much to handle, you can resort to new technologies like jQuery Mobile, PhoneGap, jQTouch, CSS3, HTML5 and others. All of these are incorporated in the new Dreamweaver so you can build websites for multiple platforms test them at different resolutions and orientations (landscape and portrait) and even deploy applications directly to Android or iOS.

    Adobe MAX 2011

    PhoneGap is especially interesting since it allows developers to tap into native extensions of all major mobile platforms giving you access to things like geolocation, accelerometer, camera, dialer and many other phone features that were until now only available to native applications. Using PhoneGap it’s now easier than ever to build cross platform apps and websites that take full advantage of the mobile capabilities all with JavaScript, CSS and HTML.


    Get Your Hands on the New Toys

    Adobe MAX 2011

    For more information about everything announced on Day Two – as well as download links for AIR 3 and Flex 4.6 pre-release – head to http://adobe.com/go/maxday2


  7. Eugene Potapenko says:
    October 11, 2011 at 10:57 am

    Good news, everyone. Everybody who works with arrays and vectors – so, all developers – will enjoy the new opportunities: since the late August 2011 build of Flash, Realaxy ActionScript Editor (RASE) supports the new Collections AS3 language extension. In this post we’ll show you what it can do.

    Realaxy logo

    A collection is a general term that means, roughly, “a bunch of similarly typed objects that are grouped together”. Building a collection in ActionScript 3.0 can be done by using arrays, vectors, dictionaries, or objects; they each have some of the makings of a perfect concept. However, if you have even a basic acquaintance with any modern and trendy language like Scala, Groovy or Ruby, you’ll definitely feel the lack of a functional approach in the pure AS3-way of processing Collections.


    The Collections Language

    Well, let’s introduce the Collections AS3 language extension that is available in RASE Beta 10, build 8177+.

    A complete vocabulary of methods supplemented with samples is available here: one for lists and another one for maps (these are images; scroll them down, they are really HUGE).

    In order to not get lost in this jungle, let’s take a look at some simple use cases. The first true-life sample demonstrates the conciseness of collection code:

    We create a list, which can contain only int values.

    1. Then, we select only those that fulfil a condition (“where”).
    2. We do something with every picked element (“select”).
    3. We convert them to Strings (“select”).
    4. Finally, we cycle through the list and trace the result.

    Where, select, selectMany – these operations are easy to use when you’re building a query.

    Operations like all, any, containsAll, and contains work perfectly in conditional phrases (“if” statements, etc).

    To modify a list, we have a wide range of weapons: remove, removeAll, removeWhere, removeHead, removeTail, etc.

    For those persons who definitely have an eye for perversion we have prepared a bunch of operations like foldLeft/foldRight, reduceLeft/reduceRight, intersect, etc.

    Simply said, there are plenty of operations suited to every fancy and almost every task. In some operations you just transmit one or more values to it, in some other ones you add a closure.


    Lists and Maps

    The collection language is intentionally simple. It supports two types: List and Map. Map is quite similar to a trivial Dictionary that holds some useful methods – keys, values, containsKey, containsValue (useful for checks and conditions), pushMap (to merge values), removeKey, removeValue, etc.

    Maps are smart and fail-safe. They won’t let you add an incorrect key or value:

    Maps work well with any lists and queries.

    There are also conversion operations that can be utilized to facilitate embedding the new Collections extensions to your actual pure-ActionScript project. Just take a trivial array (or vector) and apply the .toList operation. After processing a list (or a map) you can always convert it back to the old-school AS3 style using .toArray or .toVector.


    A Real World Example

    To demonstrate how to get started with these collections, here’s a step-by-step guide based on a trivial situation. Suppose your task is to create a “suggested users” list for a Twitter account. We have to process a very long collection of hundreds or thousands of objects, to retrieve a short list (that match a number of criteria) and to apply some operation on every item in that short list.

    We’ll not turn our attention to interacting with Twitter API, since our goal is only to show how to get started with the Collections language and to show advantages of a functional approach in working with collections in AS3.


    Step 1: Creating a Project

    Create a new project from scratch and name it Collections. If this is your first experience with the editor, we recommend you to read the Realaxy HelloWord Tutorial and/or Realaxy Overview For Beginners.


    Step 2: Creating a Class (Beginning)

    Now we need to create three classes to store the data structure: User, TwitterAccount and Message. We can do it from the Generate menu, which is available through right-clicking the code or pressing Ctrl+N.


    Step 3: Creating a Class (In Progress)

    Type the class name in a pop-up box.


    Step 4: Creating a Class (Adding Fields)

    Jump to the <<Field>> position and hit Enter.


    Step 5: Creating a Class (More Fields)

    Add the following fields: username, surname and id. The code will look like this:


    Step 6: Adding Getters and Setters

    Invoke the Ctrl+N menu again.


    Step 7: Still Adding Getters and Setters

    A new pop-up window will appear. Select all newly created fields and press OK.


    Step 8: Adding a .toString() Method

    Don’t forget to add a text presentation to the User class. Add .toString() method — item 5 from the Ctrl-N menu (same as on screenshot to Step 2 and 6).


    Step 9: Code Overview

    The User class is ready. Its code will look like this:


    Step 10: TwitterAccount and Message Classes

    Using the same process as Steps 2-9 you have to create TwitterAccount and Message classes.

     

    NB: To avoid a type error (like the one shown in the image above), you must import the Collections language from the Ctrl+L menu:

    NB2: The TwitterAccount and Message classes should be cross-linked. In order for this to happen, after importing the Collections language, you have to create the Message class, jump back to the TwitterAccount class and complete the line that caused an error.

    NB3: Don’t forget to add getters, setters and a .toString() method.


    Step 11: Main()

    Now it’s time to write some code in Main(). First, we need to add some fields. 

    NB: Use the Smart Complete keyboard shortcut (Ctrl-Shift-Space) to save a little time while typing these phrases:

    Since our tutorial is just a demo that shows a how to work with collections in AS3, we’ll skip the part that refers how to get this data from Twitter API.

    Let’s just imagine that we already have:

    1. a list of our followers, 
    2. a list of users followedBefore,
    3. a very long list of potential candidates for following — candidatesLongList,
    4. and, of course, a candidatesShortList, which is empty at the moment.

    The third collection can be extremly large, containing hundreds or even thousands of items. Our goal is to apply some sophisticated query and thus to cut off the needless items according to Buonarotti’s principle “I saw the angel in the marble and carved until I set him free.”


    Step 12: Building the Query

    Jump to Main() constructor, and enter the candidatesLongList with its method “where” (hit Ctrl-Space to use autocompletion like in the screenshot below):

    The following phrase will appear:

    Don’t be surprised, it’s just a Closure, and “it” is just its parameter.


    Closures (a small lyrical digression)

    A closure is, in fact, the same anonymous function, but with a number of small differences.

    First, the Closure has a very concise syntax. Parameters don’t have a type declaration (to be more precise, they have it, but such declarations are hidden). The Closure has a special behavior – “the last statement is a return value&rdquo – which means you should use “1;” (in the last line) instead of “return 1;”

    Second, it has a special view for single-line closures – in such a closure a semi-colon on the end is omitted (for two reasons: readability and brevity).

    Unlike an anonymous function (and also as a counter to the aforementioned Arrays and Vectors), a closure is type safe. That means that autocomplete and type-checking will work in closures.

    To conclude, a Closure is a kind of function on steroids. It has a lot of tasty features that helps us to write everything quick and concise.


    Step 13: Building the Query

    Let’s return to our unfinished closure. Add some code that will implement our “rules”. This code will return a cut-down version of candidatesLongList that doesn’t include any of our followers:

    Then add another criterion:

    Theoretically, the Collections language allows you to nest a lot of different conditions one by one. Let’s add one more criterion (include users that have “Flash”, “ActionScript” or “Adobe” in their Biography field) using a regular expression:


    Step 14: Obtaining the Result

    Select the whole query and press Ctrl-Alt-V. A new variable will be introduced.

    Now we are able to do whatever we want:

    We would then copy the contents of result into candidatesShortList.


    Step 15: Generating Pure AS3 Code

    Build a module with Ctrl-F9 and take a look at the Output window. The generated pure AS3 code of Main() will look like this:

    
    
    package com.example{
    
      import com.realaxy.actionScript.collections.util.CollectionsLanguageUtil;
      import flash.display.Sprite;
    
      public class Main extends Sprite {
    
        private var followers : Array = new Array() ;
        private var followedBefore : Array = new Array() ;
        private var candidatesLongList : Array = new Array() ;
        private var candidatesShortList : Array = new Array() ;
    
        public function Main(){
    
          //exclude our followers and users followed by us before
          //include people with "Flash", "ActionScript" and "Adobe" in their bio
          //add them all to the recommendations shortlist
    
          this.candidatesShortList = CollectionsLanguageUtil.where(CollectionsLanguageUtil.where(candidatesLongList,  
    
            function ( n : TwitterAccount, stops : Object ) : Boolean {
    
              return !CollectionsLanguageUtil.any(followers,      
    
                function ( f : TwitterAccount, stops : Object ) : Boolean {
                  return f.user.id != n.user.id ;
                },
    
                this, false) && 
    
              !CollectionsLanguageUtil.any(followedBefore,     
    
                function ( f : TwitterAccount, stops : Object ) : Boolean {
                  return f.user.id != n.user.id ;
                }, 
    
                this, false);
            }, 
    
            this, false),   
    
              function ( it : TwitterAccount, stops : Object ) : Boolean {
                return /Flash|ActionScript|Adobe/.test(it.bio) ;
              }, 
    
            this, false);
    
          var names : Array = CollectionsLanguageUtil.select(candidatesShortList,       
    
            function ( it : TwitterAccount, stops : Object ) : String {
              return it.user.username + ", " + it.user.surname ;
            }, 
    
            this, false);
    
          CollectionsLanguageUtil.forEach(names,
    
            function ( m : String, stops : Object ) : void {
            //TODO: do something with 'm'
            }, 
    
            this, false);
        }
      }
    }

    Seems a little bit unreadable, eh? Especially comparing with our DSL code:


    Conclusion

    The new Collections language extension allows you to:

    • improve your AS3 code making it more concise,
    • make your code more human-readable, and
    • facilitate turning your sequential code into parallel code.


  8. Franci Zidar says:
    October 11, 2011 at 11:09 am

    MAX is Adobe’s annual conference, where they announce their new products and acquisitions, and give us all an idea of their current strategy. Last year they announced Flash’s 3D API, codenamed Molehill (now called Stage3D); AIR for TV; Edge, their new HTML5 animation tool; and more. There were also puppets. This year, long-time Activetuts+ writer Franci Zidar is at the event and will be filling us in on the details and sharing lots of photos. The first day’s keynote was all about the Creative side of things. Read on to find out more…


    Creative Cloud and Touch Apps

    This year Adobe is shifting its focus to mobile and cloud solutions. The first and the main Adobe keynote address was absent of any mention of Flash and very little if anything was mentioned about its other desktop web authoring software solutions. In fact, yesterday’s main focus was on Adobe’s new Creative Cloud and its new mobile touch applications.

    The big news was that Adobe had just acquired TypeKit and PhoneGap and integrated TypeKit into its online service as a part of the Creative Cloud. This will allow its users to license any font from TypeKit library and use it in their projects by embedding the font from their server; to do this, you’ll pay an annual fee instead of having to buy each font for your project. Adobe applications will also be a part of the Creative Cloud service and you will be able to download and use the applications by buying the annual subscription early next year, which is supposed to be “very reasonable”. The applications will be updated directly in the cloud, so you’ll no longer have to wait for (and buy) the full release to receive any bigger updates, as the software will be directly updated through the cloud.

    Adobe is now focusing on cloud solutions where all your work and applications can be gathered in one place. The creative community part of the cloud services will offer some interesting features, like sharing your work, including working files which can be previewed, with extracted Kuler color palettes, displayed and hidden layers in Photoshop files, identified fonts from InDesign files and so on. We’ll have to wait and see but the cloud services do seem promising.

    Mobile touch applications were another focus of yesterday’s keynote. New applications presented were Photoshop Touch, Proto, Debut, Collage, Carousel and Kuler, all for tablet or mobile. You can check their features at Adobe mobile apps site. Proto was the only one I felt could be actually useful; it’s an application for prototyping websites, with a range of supported gestures. I could easily see myself sitting with a client prototyping the website on the fly on my tablet device. Using Photoshop, Kuler or any other design tool on the tablet… not so much, although the news that Adobe is collaborating with Samsung on creating pressure-sensitive stylus capable tablets is also quite interesting.


    What About Flash?

    There was a general sense after the keynote address that Adobe is not willing to commit to Flash as its platform of choice and is avoiding the issue while turning to alternative solutions for mobile deployment through PhoneGap and its other digital publishing solutions.


    The Community Lounge at MAX

    Flash and Molehill are going to be a part of today’s keynote, but is it too little too late. Molehill, with its Stage3D API that takes advantage of the GPU, could allow better 3D graphics inside the browser without installing another plugin (like Unity), but it won’t solve Flash’s performance problems on mobile devices. Flash is going to have a hard time staying in the game without a bigger commitment from Adobe; it could become a niche platform for gaming if the tools to create immersive experiences in CSS3, JavaScript and HTML like Adobe Edge continue to become more accessible, and Flash’s performance and accessibility issues for mobile and low CPU devices are not solved.

    Come back tomorrow to find out what’s announced in this keynote, or tune in to it live at 10am PDT on the MAX website.


  9. David Appleyard says:
    October 11, 2011 at 11:52 am

    Each month, we bring together a selection of the best tutorials and articles from across the whole Tuts+ network. Whether you’d like to read the top posts from your favourite site, or would like to start learning something completely new, this is the best place to start!


      Psdtuts+ — Photoshop Tutorials

    • Create Animal Textured Typography

      Create Animal Textured Typography

      In this tutorial we are going to create fun, realistic, animal textured, 3D typography in Photoshop using CS5′s Repousse tool. Let’s get started!

      Visit Article

    • Create a Detailed User Interface for an iPad Application

      Create a Detailed User Interface for an iPad Application

      In this tutorial we will show you how to design a detailed user interface for an audio-themed iPad application. We will design this application using a retina display resolution and will make use of Photoshop’s shape layers and layer styles. Let’s get started!

      Visit Article

    • How to Apply Light, Shading, and Shadow to Round Objects

      How to Apply Light, Shading, and Shadow to Round Objects

      Photoshop is an excellent tool for manipulating photographs but it can also be used as a means to create stunning digital art. This tutorial is part of a 25-part video tutorial series demonstrating everything you will need to know to start producing digital art in Photoshop. Digital Art for Beginners, by Adobe Certified Expert and Instructor, Martin Perhiniak will begin by teaching you how to draw in Photoshop. At the conclusion of this series you will know all you need to produce your own concept art and matte paintings in Photoshop.

      Visit Article


    • Nettuts+ — Web Development Tutorials

    • 14 Ways you can be Sure you’ve Married a Geek

      Ways you can be Sure you’ve Married a Geek

      Everyone knows that when you get married, your life changes. When Jeffrey and I recently tied the knot, we were advised by the older and wiser that the first year of marriage is the hardest. But so far, it has been fantastic. Dont get me wrong; just because married life is proving to be bliss does not mean there havent been any of those aforementioned changes. Recently, I realized that the ’married life changes” that I am adjusting to are all coincidentally related to the fact that Jeffrey is a web developer, a.k.a Geek.

      Visit Article

    • Is Conference Pricing Out of Control?

      Is Conference Pricing Out of Control?

      You’ve surely experienced the letdown of registering for a conference, only to find that it costs $1,000 (or more) to attend (not including travel expenses). Isn’t that a bit extreme for two days worth of training? Then again, is that the only way the conference organizers can cover the high cost of planning such an event? Let’s see…

      Visit Article

    • The Best Way to Learn JavaScript

      The Best Way to Learn JavaScript

      Learning something new is scary. For me, the biggest issue with picking up a new skill is that I don’t know what I don’t know. Given that, it’s often useful to find a plan for learning whatever you’re interested in. That’s what this post is: your blueprint, your roadmap, your plan of action for learning JavaScript! You don’t have to worry about finding the best resources, sorting out the bad ones, and figuring out what to learn next. It’s all here. Just follow it, step by step.

      Visit Article


    • Vectortuts+ — Illustrator Tutorials

    • 150+ Free, Vintage Vector, Medieval Heraldry Graphics

      Free, Vintage Vector, Medieval Heraldry Graphics

      It’s free vector graphics time, my favorite hour of the day! We’ve roundup up a truckload of heraldry graphics available in EPS, SVG, AI and other vector formats for free download. These medieval packs are composed of emblems, crests, shields, dragons, knights, helms, armor, swords, flourishes, banners, and all sorts of vintage design elements. Whether you’re designing a stylish brochure for your favorite client or your personal portfolio website, these graphics could add the perfect stylish touch your project is needing.

      Visit Article

    • Top Tips and Secrets from Talented Vector Artists

      Top Tips and Secrets from Talented Vector Artists

      Today we share top tips and secrets from talented vector artists, which can help add insight into their processes and can give us the advice we need to improve in our own artwork.

      Visit Article

    • Playing with Stationery Art Brushes and the Live Paint Bucket

      Playing with Stationery Art Brushes and the Live Paint Bucket

      In today’s tutorial I’m going to show you how to create some line art style stationery art brushes. You’ll then learn to combine them with the Live Paint Bucket to create a typography piece.

      Visit Article


    • Webdesigntuts+ — Web Design Tutorials

    • A Beginner’s Guide to Successful Conversion

      A Beginner’s Guide to Successful Conversion

      Converting visitors into valuable users is arguably the most fundamental element of managing a website. We’re going to take a closer look at conversion, discuss what it is, cover some common pitfalls, and tackle improving your site’s conversion rates.

      Visit Article

    • Sign-in or Register: Form Design From Scratch (Day 1)

      Sign-in or Register: Form Design From Scratch (Day 1)

      We deal with web forms all the time; when we log in to YouTube, Facebook, or any other web service, we have to get through a login or sign up process. Often this can be difficult because some forms are too long, or too cluttered. We’re going to build a stylish, straightforward login form, and today we’ll be looking at the Photoshop side of things.

      Visit Article

    • Weekend Freebie! The Aureus Landing Page (PSD)

      Weekend Freebie! The Aureus Landing Page (PSD)

      I originally designed the Aureus Landing Page for ThemeForest. However, I changed my mind and decided to share it with all of you guys instead – I love giving back to the design community!

      Visit Article


    • Phototuts+ — Photography Tutorials

    • More than 60 Amazing Examples of Black & White Portraiture

      More than 60 Amazing Examples of Black & White Portraiture

      The life of the monochrome portrait contains a rich history dating back to the birth of photography itself. Upon the invention of the camera, it was the portrait that took precedence. The opportunity to capture fellow man in a moment in time on film was finally a reality. So when put into context, appreciating the continued importance and wide scale exploitation of black and white portraiture today, it’s clear that the art is not lost and has survived the test of time.

      Visit Article

    • Travel Portraits: Methods for Making a Connection

      Travel Portraits: Methods for Making a Connection

      If you love to travel and take photographs, you have likely come across the dilemma of what to do when photographing people. Most see it as a catch 22. If you ask permission (as I believe is proper) then the person is not being ‘natural’ as they were before you asked, doing whatever it was that caught your eye. If you snap away, you risk being seen as rude and offending your subject which, for one reason or another, you thought of highly enough to take a photo. So what to do?

      Visit Article

    • FlashMasters: Off-Camera Flash

      FlashMasters: Off-Camera Flash

      Off-camera flash holds a tremendous amount of potential. With the ability to remove the flash from the same axis as the camera, off-camera lighting gives a photographer more creative options than ever before. Today, we’re going to learn about getting started with off-camera flash.

      Visit Article


    • Cgtuts+ — Computer Graphics Tutorials

    • “The Warrior” – Part 1

      The Warrior” – Part 1

      In this tutorial you’ll go through the entire character creation pipeline using Zbrush, Maya, UVLayout and Photoshop. We’ll go through the whole process of creating the “Warrior” character including texturing and rendering with Metalray. This tutorial is divided into 8 parts and in the first part, we’ll start blocking out the character in Zbrush using Zspheres.

      Visit Article

    • Create A Realistic Candle & Flame In 3D Studio Max

      Create A Realistic Candle & Flame In 3D Studio Max

      In this tutorial, regular author Chandan Kumar will show you how to create a realistic candle and flame in 3d Studio Max. The candle’s flame will be made entirely in 3dsmax using built-in tools, rather then expensive third-party plugins! Let’s take a look!

      Visit Article

    • An Introduction To Vue 9 xStream – Day 1

      An Introduction To Vue 9 xStream – Day 1

      When you first start using a new software package, you’re a little bit lost. As you don’t really know where to start, what the options and parameters stand for, what the buttons do, etc… This tutorial series was made to introduce you to the best software for creating Natural 3D Environments, that software is: Vue 9 xStream. We’ll take a in-depth look of every aspect of Vue 9, starting with the user interface and working up to very complex environments!

      Visit Article


    • Aetuts+ — After Effects Tutorials

    • Kaleidoscope Of Dancing Veggies Using Echospace – Day 1

      Kaleidoscope Of Dancing Veggies Using Echospace – Day 1

      Today’s tutorial is on how to create a colorful motion graphic piece meant for a food show or cooking program. With the often forgotten Trapcode Echospace you can turn as many photos as you want into one cheerful looking animation. I feel this two part tutorial has principles that could carry over into endless unique results. I hope you enjoy the tut!

      Visit Article

    • A Look At Hollywood’s Biggest VFX – Part 1

      A Look At Hollywood’s Biggest VFX – Part 1

      This is a brief introduction of some of the most unbelievable Visual Effects in Hollywood’s biggest movies. This “Part 1″ will describe the making of movies: 2012, Avatar, Alice in Wonderland and The Lord of the Rings.

      Visit Article

    • Walking Through 3d Text – AE Premium

      Walking Through 3d Text – AE Premium

      In today’s tutorial we’re going show how to create the super popular effect of having a person walk right through a 3d logo or text. We’ll cover shooting tips, matchmoving principles, and a whole lot of other helpful info to pull this shot off right! We’ll also show you a way to create this effect without using ANY expensive 3rd party plug-ins!

      Visit Article


    • Audiotuts+ — Audio & Production Tutorials

    • Dubstep for Beginners – Part 1: The Drums

      Dubstep for Beginners – Part 1: The Drums

      With three equally important focal points, this tutorial series will initiate you each of these areas of dubstep and how to start producing your own grooves. This first tutorial will focus around the drum beats and what makes the dubstep beats unique. Get ready for some head nodding grooves!

      Visit Article

    • How to Get The Most Out of Your Drum Loops

      How to Get The Most Out of Your Drum Loops

      I’m really bad at creating beats. I prefer to use a real drummer, and when that isn’t an option, I try to use loops. When I’m sketching ideas for a song, trying to create an arrangement and such, I like to throw a few loops into the DAW and play over that. I’m really bad at using a metronome or a click track so a drum loop is a much more comfortable option for me.

      After I’ve recorded the rough chords and arrangement into my audio program I like spicing up the drum tracks a little bit. Logic Pro makes this easy for me as they have all sorts of different loops and corresponding fills I can use. I usually throw some loops together to create a somewhat fluid arrangement and then create from there. I don’t really end up using those drum loops because I always want to record some actual drums instead, but during the creation process, using loops can really help.

      Visit Article

    • Do Artists Really Need Managers Anymore?

      Do Artists Really Need Managers Anymore?

      Over time the music industry has been constantly evolving and managers have continued to play a pivotal role in the accomplishments of the artist they represent. But do artists really need managers anymore?

      Visit Article


    • Activetuts+ — Flash, Flex & ActionScript Tutorials

    • Learn HTML5 With This Simple Avoider Game Tutorial

      Learn HTML5 With This Simple Avoider Game Tutorial

      In this tutorial (the first of a series), you’ll learn the basics of HTML5 game development with JavaScript and the <canvas> element. You don’t need to have any programming experience, or even any HTML experience (apart from this one article). Let’s get started!

      Visit Article

    • Exclusive Freebie: Tr.ace(), an Excellent AS3 Debugging Utility

      Exclusive Freebie: Tr.ace(), an Excellent AS3 Debugging Utility

      We’ve got another Activetuts+ Exclusive Freebie for you! This time, Matt Stuttard (aka MSFX) is offering you his brand new debugging utility, Tr.ace(), which adds some very useful extra features to Flash’s trace() function. Read on to find out more, and to download your copy.

      Visit Article

    • An Introduction to FlashPunk: The Basics

      An Introduction to FlashPunk: The Basics

      Learn the basics of how FlashPunk works – an amazing library to save you time and help you create the perfect game!

      Visit Article


    • Wptuts+ — WordPress Tutorials

    • Customizing the WordPress Dashboard For Your Clients

      Customizing the WordPress Dashboard For Your Clients

      Have you recently started using WordPress for your client’s project and want to further impress your client with better packaging? This article will focus on packaging WordPress so that, in just few minutes after completion of a project, it will feel more unique to the client and not have the generic feel.

      Visit Article

    • Developing BuddyPress Themes – Part 1 : Working with the BuddyPress API and Loops

      Developing BuddyPress Themes – Part 1 : Working with the BuddyPress API and Loops

      Last month, we looked at the basics of BuddyPress and how you can use it to increase social networking in your projects. The response was great and many requested theming tutorials. So, in this three part series, we’ll explain some core elements of the BuddyPress API and unpack how to create a custom child theme that will survive both BuddyPress and WordPress updates.

      Visit Article

    • 10 Steps to Securing Your WordPress Installation

      Steps to Securing Your WordPress Installation

      WordPress is open source which means that everyone, including hackers with a malicious intent, can scour the source code looking for holes in its security. That is why I’m going to show you some good precautionary steps to take to protect you, your WordPress and most importantly, your users.

      Visit Article


    • Mobiletuts+ — Mobile Development Tutorials

    • Android Futures: Preparing For Ice Cream Sandwich

      Android Futures: Preparing For Ice Cream Sandwich

      The next major version of the Android SDK, codenamed Ice Cream Sandwich, is due out within the next couple of months. While were waiting for the release, here are some quick tips to future-proof your applications.

      Visit Article

    • Full Screen Web Apps

      Full Screen Web Apps

      One of the first problems encountered when building a mobile web app from scratch is the amount of space consumed by the browser’s address bar. This tutorial will demonstrate how to reclaim the screen real estate otherwise lost to the address bar while accounting for orientation changes, content height problems, and internal document links.

      Visit Article

    • iOS SDK: Adding a Table of Contents to an iPad Reader

      iOS SDK: Adding a Table of Contents to an iPad Reader

      This is the third installment in a series on creating an iPad PDF reader for the book The War of the Worlds. In today’s tutorial, I will demonstrate how to add a Table of Contents to the project. In doing so, I’ll cover working with plist files, layering subviews, basic UIView animations, and manually creating interface components.

      Visit Article


    • FreelanceSwitch — News, Tutorials & Jobs for Freelancers

    • Top 10 Free Online Storage Apps

      Cloud computing oppens new opportunities for freelancers. One of them is free online file synchronization and storage. Nowadays you can sync your PC files and manage your documents on the go. Share files with your employer or other freelancers. Make an online backup or roll back to previous file version. All these actions are possible with modern online file sharing applications.

      Visit Article

    • 5 Ways to Find Freelancing Virtual Assistants

      As a freelancer, I’m not really in a position to hire someone as a full-time employee and pay all the payroll taxes and other expenses that go along with such an arrangement. Hiring someone on a contract basis, like a virtual assistant, for just those hours that I need her, is the simplest solution. From there, it becomes a matter of finding the right virtual assistant.

      Visit Article

    • 7 Sins of Website Copywriting That Send Prospects Fleeing

      Remember: your website is your virtual salesperson. The design is the way that salesperson is dressed. It makes the first impression. But the copy are the words coming out of that salesperson’s mouth: that’s what will make or break the sale.

      When a prospect is looking at your site, they have a question in their mind: “Do I want to hire this person?” Your copy’s job is to make sure the answer is “Yes!” as often as possible.

      Visit Article


    Thanks for Reading!

    We love bringing you the latest and greatest tutorials each month, and would like to take this opportunity to say thanks for reading, subscribing, and offering your feedback. If you have any suggestions for tutorials, or Tuts+ in general, feel free to leave them below in the comments!

    As ever, the best way to support the sites (and get your hands on superb, industry-leading tutorials) is to join our Premium program. It costs just $9 per month, and will be the best few dollars you ever spend! There’s also no risk, thanks to our 100% money-back guarantee.


  10. Matt Stuttard says:
    October 11, 2011 at 12:34 pm

    Yes, the ‘F’ in FOTB stands for Flash, but Flash on the Beach is so much more than a conference solely about the Flash Platform – or even one aimed specifically at Flash Developers. It is a rollercoaster of inspiration, education and downright good fun. Here are a few of my highlights from the latest and greatest FOTB. I’d love to write about everything I went to and experienced but it would take days; come next year and you’ll see what I mean…

    This was my fourth consecutive year making the tweet-filled train journey to sunny Brighton for FOTB and John Davey (organiser) sure knows how to throw an awesome conference that brings you back year after year. The lineup over the three days was crammed with award-winning designers, developers, and people that just make you go WOW. With three separate theatres hosting three awesome speakers at a time it really is a headache deciding which session to attend, but there is no doubt that whichever way you go, something will make your eyes widen, your jaw drop and your brain question reality.


    Carlos Ulloa – Love the Future

    I’m a huge fan of Carlos and his work and this is the third time I’ve seen him speak at FOTB and he didn’t disappoint. Following the Adobe keynote he spoke of two projects, the first of which was an iPod/iPhone/iPad application named ‘HelloFlower’ built using Unity3D.

    FOTB 2011
    Credit: profaniti on Flickr

    HelloFlower is available free on the App Store and I seriously recommend you download and have a play since it’s a gorgeous app where you can design your own flower by manipulating the petal outlines and colours. You can then share your result in their online gallery or on Facebook etc.

    He then went on to mesmerize the entire theatre with a yet-to-be-released interactive experience titled ‘Lights’ for the UK singer/songwriter Ellie Goulding, built using WebGL. I am a huge fan of music visualization and this was simply awesome, particularly since it was built without the aid of a plugin. I can’t wait to see it again when released and would put money on an FWA heading their way. Keep your eyes peeled for this one!

    FOTB 2011
    Credit: profaniti on Flickr

    To summarise the session, session sketch extraordinaire James Whiteley posted this on Twitter shortly afterwards and he hit the nail on the head:

    FOTB 2011
    Credit: @planetpush on Twitpic

    Truly awesome.


    GMUNK (Bradley G Munkowitz) – TRON GFX and FOTB Opening Titles

    For me this was an amazing session getting a glimpse at how Bradley directed and was involved within the visual effects for last year’s blockbuster film, TRON: Legacy.

    FOTB 2011
    Credit: oyvindnordhagen on Flickr

    He gave a great insight into how his ultra-cool team was constructed and how important it is to have such a thorough and detailed resource library at your disposal for any project you undertake. It’s incredible to see the original raw shot footage and then the final cut giving an idea of the blood, sweat and tears that goes into post production for those several seconds of film. You can see the final clips here.

    Bradley also produced the titles for this years FOTB which he also briefly went into the making off. Have a watch below and then checkout the credits list – he called in a life’s worth of favours to make this and when it came on before the keynote we were all rather blown away.


    Seb Lee-Delisle – Pixels for the People

    This is the fifth time I’ve seen Seb speak and he always puts on an awesome show that’s full of interaction with the audience and this session was no exception. Using the audience’s phones, Seb pushed waves of colour across the room simply by having us all connect to a webpage within the browser. We then played Nyan Cat and the guy sat next to me won with a ridiculously fast reflex time! This was a really cool demo of what I’m sure will be an awesome installation somewhere in the future!

    You can read more about the process here on Seb’s blog. Long live Seb!


    Cyriak – Destroying My Laptop With AfterEffects

    I remember seeing Cyriak a few years ago at FOTB and found his work highly entertaining as well as technically very impressive. A piece I found particularly fascinating was a music video constructed with only a few seconds’ footage of a street somewhere in the US.

    After demoing several other rather entertaining animations – some more serious than others – he started working on a piece live in front of us, sharing an insight into how his workflow and wild imagination piece together these crazy concoctions. Awesome.


    Jared Ficklin – Visions From the Man Cave

    I love this guy. Having seen him make a music visualizer hooked up to a modified BBQ a couple of years ago I knew we’d be in for a treat this time around. Pushing visualisation into the physical domain there was fire, smoke and moustache history from the man cave. Such an entertainer!

    FOTB 2011
    Credit: oyvindnordhagen on Flickr

    I’m already buzzing about next year’s event which looks to be titled slightly differently to reflect the fact that the conference is not all about Flash; however, I’m sure John won’t let us down, whatever happens.

    Hope to see you there.


Leave a Reply

Click here to cancel reply.

search search search search search
Find an Article
Categories
  • Flash Video Training
  • Hints and Tips
  • Recommended
Please Support Our Sponsors
Recent Posts
  • Tuts+ Community Meetup in New York!
  • HTML5 Canvas Optimization: A Practical Example
  • Recreate the Cover Flow Effect Using Flash and AS3
  • Drawing Activetuts+ to a Close
  • Intro to Dart: Creating a Marquee
Tag Cloud
2011 ActionScript Active Activetuts+ Adobe animation Basic Basix Best Build Button Character Code Create Creating Critique Custom design Effect Effects Files Flash from Game Guide HTML5 Introduction Macromedia Motion Muzzle part Player Premium Professional Quick Silverlight Simple Text Tool Tutorial Tuts+ Using Video website Workshop
About Our Site:

Hey there and welcome to "Flash Video Training Source", a resource for anybody interested in learning more about Adobe's great tool. We feature educational videos, which will help you master Adobe Flash and help you get to know all of its features. We at "Flash Video Training Source" believe that video training and video... more

Why don't you follow us on Twitter and get the latest video tutorials twitted to your account. Just click on the floating twitter bar to your right!

Go Back In Time
May 2013
M T W T F S S
« Jul    
 12345
6789101112
13141516171819
20212223242526
2728293031  
Pretty Blank Box
top

Blogroll

  • Development Blog
  • Documentation
  • Plugins
  • Suggest Ideas
  • Support Forum
  • Themes
  • WordPress Planet

Meta

  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org

Archives

  • July 2012
  • June 2012
  • May 2012
  • April 2012
  • March 2012
  • February 2012
  • January 2012
  • December 2011
  • November 2011
  • October 2011
  • September 2011
  • August 2011
  • July 2011
  • June 2011
  • May 2011
  • April 2011
  • March 2011
  • February 2011
  • January 2011
  • December 2010
  • November 2010
  • October 2010
  • September 2010
  • August 2010
  • July 2010
  • June 2010
  • May 2010
  • April 2010
Powered by WordPress  |  Designed by Elegant Themes  |  Lightning Fast Hosting by Site 5 Hosting