Online Hotel Booking Engine

Online hotel booking component for a city/country destination travel portal.
Hotel managers have a complete property management interface including
– hotel/rooms/facilities description
– hotel/rooms/facilities photos
– hotel/rooms/facilities amenities
– maps
– setup unlimited room types
– rooms rates/availability
– rooms stay restrictions – minimum stay, close to arrival, close to departure
– special offers create

– on-line credit card processing, Paypal
– commission module
– booking reports, commission reports
– invoicing (verification/approval)

– guest reviews
– rating

As an example check http://www.joomloc.fr.nf/administrator/
– demo
– test

Please contact me for a more detailed description of the project.

Many thanks,
Valerie

Loading Data with Commands

It’s very common to load external data (such as SWF files) during runtime, but only when the data is completely loaded can we read or manipulate its content. Usually we have to listen to the complete event dispatched by a Loader or URLLoader object that loads the data for completion handling. Oftentimes, we write code that loads the data in one function, and write code that handles the completion of the loading in another function, but this can be improved by grouping the whole loading process together..

This tutorial demonstrates how to create a loading extension to the command framework in my previous tutorial, Thinking in Commands part 1 of 2, to pack the loading the completion handling into one place. This loading extension can also be combined with the scene management framework covered in Thinking in Commands part 2 of 2. Many classes used in this tutorial are covered in the previous tutorial, so I highly recommend that you read the previous tutorials before going on.

Additionally, this tutorial introduces the concept of data manager, a central “bank” that stores references to data objects. You can register data to the data manger with a unique key string, and later access the data by providing the corresponding key string. This spares you the trouble of keeping references of data objects and some variable scope issues.

By the way, you’ll need the GreenSock Tweening Platform in order to complete these examples.


Why Load Data with Commands?

Normally, we handle the loaded data inside the complete event listener function. This breaks apart two chunks of code that are logically connected. And by looking at the code, your flow of thought might be interrupted as your sight jumps from the loading function to the complete event listener.

Let’s look at the logic flow of a naive SWF loading approach.

The loader loads a SWF from a URL, and the onComplete() function is invoked by the dispatchEvent() method that dispatches a complete event, where the dispatchEvent() method is invoked internally by the loader. Well, actually, it’s invoked by the LoaderInfo object that belongs to the Loader object, but for simplicity, let’s just say the dispatchEvent() method is invoked by the Loader.

Next, within the onComplete() function, the doMoreStuff() function is invoked after the loading completion handling is done and, as the function’s name suggests, does more stuff.

The high-level logic flow is very linear: invoke the Loader.load() method first, onComplete() second, and doMoreStuff() third. However, as you’ll notice from the diagram, each function’s invocation is embedded within the function body of the previous one, resulting in a “nested” code. In my own opinion, if the logic flow of a certain functionality is linear, the associated code should be written in a linear manner, not nested. Otherwise, the code could sometimes become confusing if the invocation nest level is too high.

This is when the Command approach comes into play. From the diagram below, we can see that the code is pretty linear using commands, in that all the commands are linearly chained together by a serial command. Although the program “diverts” into the setProperties(), addChildLoader(), and doMoreStuff() functions; their invocation is linear.


Data Manager

Alright, before we get down to anything further about loading, let’s first take a look at the DataManager class. A data manager lets you associate a key string with a data object, and you can obtain a reference to this data object everywhere in your code. With the data manager, you don’t have to worry about keeping data references and variable scopes. All you have to do is register a piece of data to the manager with a key string.

The coding is pretty straightforward, as shown below:

package data {
	import flash.utils.Dictionary;

	public class DataManager {

		//a dictionary that maintains the string-data relations
		private static var _data:Dictionary = new Dictionary();

		//returns the data object associated with a key string
		public static function getData(key:String):* {
			return _data[key];
		}

		//registers a data object with a key string
		public static function registerData(key:String, data:*):void {
			_data[key] = data;
		}

		//unregisters a key string
		public static function unregisterData(key:String):void {
			delete _data[key];
		}

		//unregisters all key strings
		public static function clearData():void {
			for (var key:String in _data) {
				delete _data[key];
			}
		}
	}
}

So when we want to register a key string “myData” with a data object – say, a sprite – we could write the code as follows:

var sprite:Sprite = new Sprite();
DataManager.registerData("myData", sprite);

Later, anywhere in the code, we could write the following code to obtain a reference of the sprite and add it to a display list. It’s that simple, no more issues about maintaining object references and variable scopes.

var sprite:Sprite = DataManager.registerData("myData") as Sprite;
container.addChild(sprite);

Naive Loading Approach

Now let’s take a look at how the naive loading approach loads an external image. The loading code lies in one function and the completion handling code lies in another. We are going to load three images and add them to the stage when the loading is complete. Also, we’ll monitor the loading progress by listening to the progress events.


Step 1: Create a Flash Document

Open Flash and create a new Flash Document.

Step 2: Create a Progress Bar

Draw a progress bar on the stage; this is for representing the loading progress. Convert the entire progress bar into a symbol and give it an instance name of “progressBar_mc”. Within the progress bar symbol, convert the inner progress bar into another symbol, and give it an instance name of “innerBar_mc”.


Step 3: Prepare the Images

Place three images in the same folder as the FLA file, named “image1.jpg”, “image2.jpg”, and “image3.jpg”. Here’s what the three images look like.


Step 4: Create the Document Class

Create a new AS file for the document class for the FLA file. The code is pretty straightforward, and all the details are explained in the comments. First, three loaders are created and the loading begins. On each progress event, the progress bar is updated. When the loading is complete, the progress bar fades out and the three images fade in one-by-one.

package {
	import com.greensock.TweenMax;
	import flash.display.DisplayObject;
	import flash.display.Loader;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.net.URLRequest;

	public class NaiveLoading extends MovieClip {

		private var loader1:Loader;
		private var loader2:Loader;
		private var loader3:Loader;

		public function NaiveLoading() {

			//shrink progress bar to zero scale
			progressBar_mc.innerBar_mc.scaleX = 0;

			//create loaders
			loader1 = new Loader();
			loader2 = new Loader();
			loader3 = new Loader();

			//add progress listeners
			loader1.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
			loader2.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
			loader3.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);

			//add completion listeners
			loader1.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
			loader2.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
			loader3.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);

			//start loading
			loader1.load(new URLRequest("image1.jpg"));
			loader2.load(new URLRequest("image2.jpg"));
			loader3.load(new URLRequest("image3.jpg"));
		}

		private function onProgress(e:ProgressEvent):void {

			//calculate total bits to load
			var bytesTotal:uint = 0;
			bytesTotal += loader1.contentLoaderInfo.bytesTotal;
			bytesTotal += loader2.contentLoaderInfo.bytesTotal;
			bytesTotal += loader3.contentLoaderInfo.bytesTotal;

			//calculate total bits loaded
			var bytesLoaded:uint = 0;
			bytesLoaded += loader1.contentLoaderInfo.bytesLoaded;
			bytesLoaded += loader2.contentLoaderInfo.bytesLoaded;
			bytesLoaded += loader3.contentLoaderInfo.bytesLoaded;

			//update progress bar scale
			progressBar_mc.innerBar_mc.scaleX = bytesLoaded / bytesTotal;
		}

		private var _completeCount:int = 0;
		private function onComplete(e:Event):void {
			_completeCount++;
			if (_completeCount < 3) return;

			//remove progress listeners
			loader1.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress);
			loader2.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress);
			loader3.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress);

			//remove completion listeners
			loader1.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete);
			loader2.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete);
			loader3.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete);

			var image1:DisplayObject = loader1.content;
			var image2:DisplayObject = loader2.content;
			var image3:DisplayObject = loader3.content;

			//adjust loaded image positions
			image1.x = 30, image1.y = 30;
			image2.x = 230, image2.y = 30;
			image3.x = 430, image3.y = 30;

			//add loaded images to display list
			addChild(image1);
			addChild(image2);
			addChild(image3);

			//fade out progress bar
			TweenMax.to(progressBar_mc, 0.5, {autoAlpha:0, blurFilter:{blurX:20, blurY:20}});

			//fade in loaded images
			TweenMax.from(image1, 0.5, {delay:0.5, alpha:0, blurFilter:{blurX:20, blurY:20}});
			TweenMax.from(image2, 0.5, {delay:0.7, alpha:0, blurFilter:{blurX:20, blurY:20}});
			TweenMax.from(image3, 0.5, {delay:0.9, alpha:0, blurFilter:{blurX:20, blurY:20}});
		}
	}
}

Step 5: Test the Movie

Press CTRL+ENTER to test the movie. You’ll see that the progress bar immediately fades out and the three images fade in. That is because the images are local files, meaning they can be loaded almost immediately. To simulate online download speed, first select the View > Download Settings > DSL as the simulated download speed, and then press CTRL+ENTER again without closing the test window to start simulating online downloading. This time you shall see the progress grow progressively wider before it fades out.

Okay, it’s time to load the images with the command framework.


Utility Commands

Before we proceed, let’s create some utility commands that will be used later in the example. Again, these command classes are based on the command framework presented in my previous tutorial (Part 1), and I highly recommend that you go through them before going on. If you’ve read the tutorial before, you can always head back if you need your memory refreshed.

Data Managers Commands

Here we are going to create two commands for registering and unregistering data for the data manager class. The RegisterData command registers data to the manager, while the UnregisterData command unregisters data.

package commands.data {
	import commands.Command;
	import data.DataManager;

	//this command registers data to the data manager
	public class RegisterData extends Command {

		public var key:String;
		public var data:*;

		public function RegisterData(key:String, data:*) {
			this.key = key;
			this.data = data;
		}

		override protected function execute():void {
			DataManager.registerData(key, data);
			complete();
		}
	}
}
package commands.data {
	import commands.Command;
	import data.DataManager;

	//this command unregisters data from the data manager
	public class UnregisterData extends Command {

		public var key:String;

		public function UnregisterData(key:String) {
			this.key = key;
		}

		override protected function execute():void {
			DataManager.unregisterData(key);
			complete();
		}
	}
}

The LoaderLoad Command

This command encapsulates a Loader instance’s load() method. You may provide an onProgress command that is executed upon each progress event and an onComplete executed when the loading is complete. Note that the complete() method is invoked when the loading is complete. This line of code is extremely crucial. If you do not invoke the method, the command will never be regarded as complete, jamming your entire application in the worst case scenario.

package commands.loading {
	import commands.Command;
	import flash.display.Loader;
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.net.URLRequest;
	import flash.system.LoaderContext;

	public class LoaderLoad extends Command {

		public var loader:Loader;
		public var url:URLRequest;
		public var context:LoaderContext;

		public var onProgress:Command;
		public var onComplete:Command;

		public function LoaderLoad(loader:Loader, url:URLRequest, context:LoaderContext = null, onProgress:Command = null, onComplete:Command = null) {
			this.loader = loader;
			this.url = url;
			this.context = context;
			this.onProgress = onProgress;
			this.onComplete = onComplete;
		}

		override protected function execute():void {

			//add listeners
			loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressListener);
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeListener);
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadingComplete);

			//start loading
			loader.load(url, context);
		}

		private function loadingComplete(e:Event):void {

			//remove listeners
			loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, progressListener);
			loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, completeListener);
			loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadingComplete);

			complete();
		}

		private function progressListener(e:ProgressEvent):void {

			//execute the onProgress command
			if (onProgress) onProgress.start();
		}

		private function completeListener(e:Event):void {

			//execute the onComplete command
			if (onComplete) onComplete.start();
		}
	}
}

The InvokeFunction Command

This command encapsulates the invocation of another function. It is designed to allow you to provide an extra parameter array for the function to be invoked.

package commands.utils {
	import commands.Command;

	//this command invokes a function
	public class InvokeFunction extends Command{

		public var func:Function;
		public var args:Array;

		public function InvokeFunction(func:Function, args:Array = null) {
			this.func = func;
			this.args = args;
		}

		override protected function execute():void {
			func.apply(null, args);
			complete();
		}
	}
}

That’s it. Time for the example.


Step 1: Copy the Flash Document File

Copy the FLA file from the previous example to a new folder and copy the image files along with it.


Step 2: Create the Document Class

Create a new AS file for the document class of the copied FLA file, named “LoadingDataWithCommands”. Remember to change the document class name in the FLA file to this new one.

The code for the document class is pretty clean. It simply sets the current scene to a LoadingScene with a scene manager. We are using the scene framework presented in my previous tutorial (Part 2). You can check it out if you’ve forgotten how to use it.

package  {
	import flash.display.MovieClip;
	import scenes.SceneManager;

	public class LoadingDataWithCommands extends MovieClip {

		public function LoadingDataWithCommands() {

			var sceneManager:SceneManager = new SceneManager();
			sceneManager.setScene(new LoadingScene(this));
		}
	}
}

There are two scenes in total. The LoadingScene loads the images and updates the progress bar. After the loading is complete, the scene transits to the MainScene, which fades in the loaded images.


Step 3: The Loading Scene

Extend the Scene class to create a new class named LoadingScene. The container property holds a reference to the main sprite. This allows us to access the progress bar later.

package {
	import scenes.Scene;

	public class LoadingScene extends Scene {

		private var container:LoadingDataWithCommands;

		public function LoadingScene(container:LoadingDataWithCommands) {
			this.container = container;
		}
	}
}

Now, create the intro command for the loading scene. The intro will create three loaders and begin the loading process. This is done by overriding the createIntroCommand() method. The following code goes into the class body, same as the constructor.

//the intro command begins the loading of the three images
override public function createIntroCommand():Command {
	var loader1:Loader = new Loader();
	var loader2:Loader = new Loader();
	var loader3:Loader = new Loader();

	var command:Command =
		new ParallelCommand(0,

			//shrink the progress bar to zero scale
			new SetProperties(container.progressBar_mc.innerBar_mc, {scaleX:0}),

			//loading-related commands executed in series
			new SerialCommand(0,

				//registers the three loaders to the data manager
				new ParallelCommand(0,
					new RegisterData("loader1", loader1),
					new RegisterData("loader2", loader2),
					new RegisterData("loader3", loader3)
				),

				//start three loading commands in parallel
				new ParallelCommand(0,
					new LoaderLoad(
						loader1, new URLRequest("image1.jpg"), null,
						new InvokeFunction(onProgress) //onProgress command
					),
					new LoaderLoad(
						loader2, new URLRequest("image2.jpg"), null,
						new InvokeFunction(onProgress) //onProgress command
					),
					new LoaderLoad(
						loader3, new URLRequest("image3.jpg"), null,
						new InvokeFunction(onProgress) //onProgress command
					)
				)
			)
		);

	return command;
}

Next, override the onSceneSet() method. This method is invoked when the intro command is complete, indicating that the loading is complete. Within this method, we tell the scene manager to transit to the main scene. Before the scene transition, the outro command is executed first.

override public function onSceneSet():void {
	sceneManager.setScene(new MainScene(container));
}

And then override the createOutroCommand. This command shall fade out the progress bar.

//the outro command fades out the progress bar
override public function createOutroCommand():Command {
	var command:Command =
		new SerialCommand(0,

			//fade out progress bar
			new TweenMaxTo(container.progressBar_mc, 0.5, {autoAlpha:0, blurFilter:{blurX:20, blurY:20}}),

			//remove progress bar from display list
			new RemoveChild(container, container.progressBar_mc)
		);

	return command;
}

Finally, create the onProgress method invoked by the InvokeFunction commands.

private function onProgress():void {

	//retrieve loader references from the data manager
	var loader1:Loader = DataManager.getData("loader1") as Loader;
	var loader2:Loader = DataManager.getData("loader2") as Loader;
	var loader3:Loader = DataManager.getData("loader3") as Loader;

	//calculate total bits to load
	var bytesTotal:uint = 0;
	bytesTotal += loader1.contentLoaderInfo.bytesTotal;
	bytesTotal += loader2.contentLoaderInfo.bytesTotal;
	bytesTotal += loader3.contentLoaderInfo.bytesTotal;

	//calculate total bits loaded
	var bytesLoaded:uint = 0;
	bytesLoaded += loader1.contentLoaderInfo.bytesLoaded;
	bytesLoaded += loader2.contentLoaderInfo.bytesLoaded;
	bytesLoaded += loader3.contentLoaderInfo.bytesLoaded;

	//update progress bar scale
	container.progressBar_mc.innerBar_mc.scaleX = bytesLoaded / bytesTotal;
}

Step 4: The Main Scene

Now create a new class for the main scene, extending the Scene class.

package {
	import scenes.Scene;

	public class MainScene extends Scene {

		private var container:LoadingDataWithCommands;

		public function MainScene(container:LoadingDataWithCommands) {
			this.container = container;
		}
	}
}

Override the createIntroCommand() method. This method will add the loaders to the display list, and fade them in one-by-one. In addition, the data key strings are unregistered from the data manager.

override public function createIntroCommand():Command {

	//retrieve loader references from the data manager
	var loader1:Loader = DataManager.getData("loader1") as Loader;
	var loader2:Loader = DataManager.getData("loader2") as Loader;
	var loader3:Loader = DataManager.getData("loader3") as Loader;

	var command:Command =
		new ParallelCommand(0,

			//loaded-image-handling commands
			new SerialCommand(0,

				//adjust loaded image positions
				new ParallelCommand(0,
					new SetProperties(loader1, {x:30, y:30}),
					new SetProperties(loader2, {x:230, y:30}),
					new SetProperties(loader3, {x:430, y:30})
				),

				//add loaded images to display list
				new ParallelCommand(0,
					new AddChild(container, loader1),
					new AddChild(container, loader2),
					new AddChild(container, loader3)
				),

				//fade in loaded images
				new ParallelCommand(0,
					new TweenMaxFrom(loader1, 0.5, {alpha:0, blurFilter:{blurX:20, blurY:20}}),
					new TweenMaxFrom(loader2, 0.5, {delay:0.2, alpha:0, blurFilter:{blurX:20, blurY:20}}),
					new TweenMaxFrom(loader3, 0.5, {delay:0.4, alpha:0, blurFilter:{blurX:20, blurY:20}})
				)
			),

			//unregsiter data from the data manager
			new ParallelCommand(0,
				new UnregisterData("loader1"),
				new UnregisterData("loader2"),
				new UnregisterData("loader3")
			)
		);

	return command;
}

Step 5: Test the Movie

Alright. We’re done! Test the movie and simulate online downloading. You will see the exact same result as in the previous example, but this time it’s all done with the command framework and the scene framework.


Summary

In this tutorial, I’ve shown you how to load external images with the command framework. The LoaderLoad command can be used to load external SWF files, too. Moreover, you can create your own commands to load external data other than images and SWF files, by encapsulating the URLLoader class into your commands.

We’ve written more code in the second example than the first one. Remember, the purpose of using the command framework and the scene framework is not to achieve the same result with less code, but to manage the code in a systematic and modular approach, making your life easier when it comes to future maintenance and modification.

The first example squeezes all the code into one single class, making it difficult for future maintenance if the code amount should grow extremely large. The second example, on the other hand, separates logically independent code into different scenes, making it easier for future modification. Also, by integrating with the command framework and the scene framework, we’ve made room for future extension, where we can add more scenes and intro/outro commands without disrupting irrelevant code.

This is the end of this tutorial. I hope you enjoyed it. Thanks for reading!

Clegg ‘disappointed’ at results

Nick Clegg

Nick Clegg has acknowledged the Liberal Democrats have had a "disappointing night", despite his pre-election poll surge in the wake of the TV debates.

Mr Clegg, who said during the campaign it had turned into a "two-horse race" between his party and the Tories, may end up with fewer seats than 2005.

As he was returned as MP for Sheffield Hallam, Mr Clegg said: "We simply haven’t achieved what we had hoped."

He urged no rushed decisions if, as expected, there is a hung parliament.

Mr Clegg, who retained his seat with an increased majority, but high profile Lib Dem MPs Lembit Opik and Evan Harris lost their seats.

‘Positive campaign’

With most results in, the Lib Dem vote is up 0.9% on 2005, Labour down 6.5% and the Conservatives up 4%.

Mr Clegg said: "This has obviously been a disappointing night for the Liberal Democrats. We simply haven’t achieved what we had hoped. I’m nonetheless proud of the way we conducted the campaign.

"I think we conducted a positive campaign, full of hope, full of optimism, which I think did engage a lot of people in the election campaign, even if they didn’t then go on to vote for the Liberal Democrats."

The Conservatives look set to be the biggest party but short of an overall majority – and Britain’s first hung parliament in Britain for more than three decades is predicted.

Downing Street sources have indicated Gordon Brown will seek to open coalition talks with the Lib Dems. But Mr Clegg said everyone should "take a little time so that people get the good government that they deserve in these very difficult and uncertain times".

"Clearly the final election result is still a little unpredictable, people have voted but no one appears to have won emphatically," said Mr Clegg.

"I don’t think anyone should rush into making claims or taking decisions which don’t stand the test of time. I think it would be best if everybody were just to take a little time, so that people get the good government that they deserve in these very difficult and uncertain times."

But he said his party would be "guided by the values and the principles on which we fought this election" – fairness, responsibility in providing stability and growth to an economy and "real change to the way we do politics".

He also expressed dismay at voters who were turned away from polling stations which could not cope with increased turnout: "That should never, ever happen again in our democracy."

This article is from the BBC News website. © British Broadcasting Corporation, The BBC is not responsible for the content of external internet sites.

First hung parliament for decades

David Cameron

The Conservatives have won the most MPs in the UK general election but fallen short of a majority, leading to the first hung parliament since 1974.

As counting continues the Tories have gained 92 seats, Labour have lost 86 and the Lib Dems six, despite hopes of a breakthrough for the third party.

The battle is now under way to see which leader can form a government.

Lib Dem leader Nick Clegg said the situation was "fluid" but the Tories had the first right to seek to govern.

Arriving back at Lib Dem headquarters in London, he said: "It is vital that all parties, all political leaders, act in the national interest and not out of narrow party political advantage."

He said he "stuck by" his view that the party with the biggest mandate – in terms of votes and seats – should have the right to seek to govern first. "It seems this morning, that it’s the Conservative Party that has more votes and more seats though not an absolute majority.

"I think it’s now for the Conservative Party to prove that it’s capable of seeking to govern in the national interest."

David Cameron has said Gordon Brown had "lost his mandate". Mr Brown said "stable, strong" government was needed.

The Tories have won 290 seats so far but it is now not possible for them to reach the 326 seats needed to win an overall majority.

Civil service

Mr Brown, whose party has 247 seats so far, has returned to Downing Street with aides and may turn to Nick Clegg’s Lib Dems, who have so far won 51 seats, to try to form a coalition government.

Downing Street has authorised the civil service to support other parties in hung parliament negotiations – essentially giving the go-ahead for talks to begin.

It means the Conservatives and the Lib Dems will be able to call on support from the civil service on policy or logistics.

The BBC projection suggests David Cameron’s Conservatives will have 306 seats. If there are 10 Unionists elected in Northern Ireland then Mr Cameron might be able to command 316 – probably still slightly too few for him to be sure of winning a Queen’s Speech.

But Labour and the Lib Dems together would have 317 seats, according to the BBC figures, which even with three SDLP MPs would still leave them at 320 – again a few votes short of a majority

In other election night news:

Northern Ireland’s first minister and DUP leaderinEast Belfastby the Alliance party TheGreens gained their first MPat Westminster – party leader Caroline Lucas inBrighton PavillionEducation secretary Ed Balls hung on inMorley and Outwoodby just over 100 votes but former Home Secretary Charles Clarke narrowly lost to the Lib Dem candidate inNorwich SouthJacqui Smith, who stood down as home secretary over her expenses,lost her Redditch seat to the Conservativebut Hazel Blears retained her seat in Salford Labour’s Margaret Hodge beat the BNP’s Nick GriffinMargaret Hodge beat the BNP’s Nick GriffininBarking and Dagenham,with a 5% increase in her vote Esther Rantzen came fourth in Luton South, which went to the Labour candidate Lib Dem frontbencher Lembit Opik has lost his Montgomeryshire seat after suffering a 13.2% swing to the Conservatives There were angry scenes and calls for an inquiry after people wereturned away from polling stationsas long queues formed ahead of the 2200 BST voting deadline.

Senior Labour figures have said that under the rules of Britain’s constitution, the sitting prime minister in a hung parliament makes the first attempt at forming a ruling coalition.

Business Secretary Lord Mandelson said Mr Brown had returned to Number 10, and was going to rest and "catch his breath" adding: "We have to be patient for some time more."

"It’s not possible to make definite claims or reach final conclusions about the outcome of the election because there are results still to come in," he said.

"You could say the electorate have voted for change but what they haven’t done is voted decisively in favour of the Conservatives."

Asked if it would be "inconceivable" to have a Labour minority or coalition government which did not have Gordon Brown as prime minister, Lord Mandelson said: "Frankly there are quite a number of permutations."

But he added it was "premature" to "start getting into hypotheses".

Shadow schools secretary Michael Gove said voters would not be "entirely happy" if Mr Brown "after a defeat like this, were to try to cling on and try to form some sort of coalition of the defeated, some sort of alliance of the dispossessed".

He said: "David Cameron has secure a larger number of votes and a larger share of the votes than Tony Blair secured in 2005 when he became prime minister. The logical next step is for David Cameron to form a Conservative-led government."

Gordon Brown

Mr Clegg – whose party have not performed as well as expected after a poll surge for the Lib Dems after the first live TV debate – cautioned other leaders against "rushing into making claims or taking decisions" which did not stand the test of time.

He urged everyone involved to "take a little time" to ensure people got the government they deserved during these "difficult times".

But he admitted it had been a "disappointing night" for the Lib Dems.

The Conservatives are predicted to take 297 seats in England, with Labour on 194 and the Lib Dems on 41. The Tories have also made significant gains in Wales – where Labour also regained their former stronghold Blaenau Gwent – but the Lib Dems and Plaid Cymru failed to gain target seats.

But in Scotland the Tories failed to make a significant breakthrough, while the Labour vote held up, with the party re-taking two seats it lost in by-elections – Glasgow East and Dunfermline and West Fife. The SNP and Lib Dems fell short of their targets.

Northern Ireland’s First Minister, DUP leader Peter Robinson lost his seat in the first shock result of the night. The other main unionist leader – the UUP’s Sir Reg Empey, was also defeated in South Antrim.

With 17 of 18 Westminster seats declared – the DUP have eight, Sinn Fein have four, the SDLP have three, the Alliance Party has one and one has gone to an independent.

This article is from the BBC News website. © British Broadcasting Corporation, The BBC is not responsible for the content of external internet sites.

BA cabin crew reject ‘new offer’

BA planes at Heathrow

British Airways will learn later whether it faces a renewed threat of industrial action by cabin crew as fresh ballot results are announced.

Thousands of Unite union members have voted on a new offer aimed at ending a long-running row over pay and conditions, which BA says is "fair".

But Unite has "strongly recommended" its members reject the offer, raising the possibility of more strikes.

Cabin crew strikes in March led to widespread disruption for passengers.

Costly delays

The airline said the seven days of industrial action had cost it up to £45m.

Further disruption to flights caused by ash from the Icelandic volcano in April cost it an additional £180m.

Tony Woodley, joint leader of Unite, said in a letter to cabin crew that BA was treating staff like second-class citizens who had been "branded" for going on strike.

He said the union was urging rejection of the new offer because BA had failed to restore travel perks taken away from those who went on strike and disciplinary action was being taken against more than 50 union members.

"The charges in the great majority of cases are entirely trivial and barely worthy of a slap on the wrist, let alone the sack," he said.

He added that he had made it clear to members that rejecting the offer could mean them having to "take a stand" against BA again.

Mr Woodley also said Unite had lost trust in BA’s commitment to finding a solution to the dispute.

"By their actions and behaviour throughout the dispute, and continuing to this day, it is impossible to take BA management’s words at their face value," he said.

‘Gross misconduct’

BA said it had put a "fair offer" to Unite that addressed all the concerns raised during the past 14 months of negotiations.

"It offers our cabin crew the assurances they have been asking for, and so we are asking them to accept the proposal and put this dispute behind us," its spokesman said.

The ballot result comes a day after Duncan Holley, a leading union official at BA, claimed he was sacked for gross misconduct for taking time off work before Christmas to carry out union duties.

The Unite branch secretary said his dismissal after 12 years was "politically motivated". BA said it would not comment on individual disciplinary cases.

This article is from the BBC News website. © British Broadcasting Corporation, The BBC is not responsible for the content of external internet sites.

How to Create a Morphing Multi FX With the Audio Effect Rack in Ableton Live

The racks introduced in Live 6 give you unique tools for creating effects, synths, and drum machines. This very simple interface offers very complex processing for any kind of data. We will learn to use it to create complex morphing multi-effects using racks concepts like Chain, Macro Control, Zone and Fade.


Step 1

For this tutorial take a clip from Ableton. I chose addSnare located in library/clips/drums/destructo97/1-Kit-largeness. Remove few notes to get a simple loop and you can also delete or switch off the Beat Repeat and the PingPong Delay which we don’t use here.

Download audio file (MP3a step 1 original sample.mp3)


Step 2

Insert an Audio Effect Rack on the track.

You can find it in Live Device / Audio Effect / Audio Effect Rack.


Step 3

Highlight the three shortcuts on the left to see the Macro Control and the Chain List.


Step 4

In most DAWs the insert channel effects works in serial – the effects output goes to the input of the next effect. The Audio Effect Rack introduces another concept: it works in parallel. Each band is called a Chain . All chains receive the same input signal at the same time. You can insert into a chain as many FX as you want. You can insert into a rack as many chains as you want. You can also insert a rack into a chain. For this tut we’re going to need five chains.

Create a chain by right clicking on the chain list and selecting Create Chain.


Step 5

Now it’s time to add the effects. For this tut I’m only using Live’s effects, though many plugins are available.

The first chain will be used to keep the signal dry, or in other words to bypass the FX. So just rename it (cmd/ctr R) to Bypass. You can also change the color.

Select the second chain and drag an Auto filter on it. Solo the chain to edit the filter, rename, color.

On the third chain drag another Auto Filter. Tweak it and rename…

On the fourth chain drag a Beat Repeat

On the last chain drag a PingPong Delay

Now we have four FX and one bypass chain. You can switch them with the solos buttons.

Download audio file (MP3b step 5 switch with solo button.mp3)


Step 6

It will be better to have another way to listen the chains individually. You can do that by creating a Zone.

First: show the chain select editor. Click the green chain button.

Select all chains (cmd/ctr A). Drag the zone edges to 96, right-click and choose Distribute Ranges Equally.

Now you can select your FX with the little blue sky bar: The Chain Select Ruler. Don’t forget to unsolo the chains.


Step 7

To make things easy we are going to map The Chain Ruler to macro 1. To do that, right-click the Chain Ruler and choose Map to macro 1.

You can rename and color macro 1.

If you have a MIDI controller it’s a good idea to assign it to one knob. Press cmd/ctr M, select the macro, move your knob, and press cmd/ctr M again.

Download audio file (MP3c step 7 chain play.mp3)


Step 8

As you can hear, the transition between the FX is a little bit brutal. So let’s add some fades and morphing.

Each zone is split in two sections: The Zone Range (the big dark blue part used for resizing and moving the zone), and The Fade Range (the little blue sky upper section). To edit them just drag the left or the right edges.

First, expand the Zones Ranges. Then drag the right and left Fade Range edges to create fades.

Start playback and play with the Chain Ruler. You can hear a smoother transition between the FX.

Download audio file (MP3d step 8 smooth.mp3)


Step 9

Tweak your Rack with the Macro Control.

Assign the Interval knob of the Beat Repeat FX and the LFO amount of the second Auto Filter to the macro controls 2 and 3 by right-clicking like we mapped The Chain Ruler in Step 7.

Download audio file (MP3e step 9 macro play.mp3)


Step 10

Save your work. You can save your rack setting as a Preset to use anywhere you want, as an insert, in a return track, on the master bus, or like a chain in a rack. We will save it as an insert.

Click the little green floppy disk icon on the right.

Rename it to My FX Rack in the Live Devices browser.


Step 11

As you can see in Step 8, the PingPong Delay zone range stops at 112. This allows you to hear the tails of the delay without the dry signal when you go over 112 with the Chain Selector.

Let s try this effect in detail with another simple rack composed with one bypass and two different delays and some blank zone.

Download audio file (MP3f step 11 delay fx.mp3)


Step 12

We’re going to build another rack for create a morphing FX. As we did in the earlier steps, create a rack with four chains, the first as the Bypass, the next three as Auto Filters with three different presets. I’ve used Cut o Move H, Follow Me and Swirl, which you can find in Live Devices / Audio Effect / Auto Filter. Draw some fades and play with the Chain Ruler to listen the morph.

Now we will map different parameters to the same macro control to create a complex assignation controlled with only one knob. Rename Macro 1 to Multi Map, and switch on the Map Mode

Right-click the Chain Ruler and Cutoff of each Auto Filter, and select Multi Map.

And in the Macro Mappings pool try differently ranges values. You can also invert the range with a right click.

Download audio file (MP3g step 12 Morphing Filter.mp3)


Step 13

We’ve left the best till the end. We will Automate the control with the Clip Envelope Editor. Turn the Multi Map Macro command knob to 127 (remember the clip envelope works with relative values).

Duplicate the Add Snare clip (cmd/ctr D), color the new clip and double-click on it.

Show the Envelope Editor by clicking the little green arrow on the right. In the device chooser (the first box), select your audio FX rack, and in the second box (the control chooser) select multi map.

Draw an envelope in the Envelope Editor.

Download audio file (MP3h step 13 enveloped.mp3)


Step 14

Now it’s time to experiment with differents settings for the plugins, macros, and all you can imagine. Don’t forgot to have a look to the others racks like the Instrument Rack. You can do the same things, but with MIDI instruments instead.

To keep this tutorial simple, I’ve only used Live effects, but I strongly recommend you use third-party VST/AU instruments and effects inside the rack to obtain an higher quality sound.

Download the Play Pack for this tutorial (135 KB)

Contents

  • Ableton Live Source Files


Squeeze & Sales Page Creation

I need someone that can create the sales & squeeze page that will be located at www.turbochargesecrets.com. This site will need to be set up as a wordpress modification using the same wordpress modified template on www.turbochargesecrets.co.cc.

Please read all of the project details below very carefully, and ask any questions before bidding. Someone experienced in wordpress will have no problem completing this project.

•When visitors come to the site, they first need to be presented with a squeeze page that includes a video, arrows, and a customized aweber form that the bid winner will style, and a header(described below that has no top navigation). The same WordPress theme that is used for the training site, www.turbochargesecrets.co.cc will be used. You will also need to model this site… www.your30dayblueprint.com . The squeeze page will need to be integrated with the sales page to be completed by you as well.

•You will need to style a custom header for the squeeze page and sales page.

•The header, will say TurboCharge Marketing Secrets in the center, and under it say “Your Compass to Prosperity”. It will have an image of a compass on one side, and on the other side… A compass that says N-Webucation, E- Self Development, W- Success Strategies S- Time & Financial Freedom… (basically you will need to manipulate the middle part of the training site www.turbochargesecrets.co.cc theme to achieve the results desired for the squeeze/sales page).

•After successful submission of information in the optin box on the squeeze page, a visitor is forwarded to the Sales page. The sales page uses the same template as the training site, and squeeze page. Content for the sales page is 1 video, a 500 word block of text, a collage image of ebooks, dvd’s, cd’s like this, http://www.your30dayblueprint.com/bp/wp-content/uploads/2010/04/video-library1.jpg (not the exact collage, but similar, you can decide) the ecover image will be provided, (5) thumbnails of bonus products to be given away for purchasing the ecourse with short descriptions will be provided like on the your30dayblueprint site, and a buy button.

•Copy for the squeeze and sales page will be provided.

•The sales and squeeze page will model the www.your30dayblueprint.com and www.your30dayblueprint.com/home.

•The sales page is to be integrated with 1 shopping cart. I will provide you with whatever you need to do this.

•You must test the squeeze and sales to assure that it is fully functional before payment will be completed.

•Communication is important, and you must provide me with updates daily.

Time is of the essence, and I need this completed as soon as possible. Please do not bid, if you are not able to handle this project. You must use the code word crazychicken to be considered for this project. Please read over this project and ask any questions prior to bidding.

•I have had a major problem with people bidding on projects, and when I email them questions, they don’t reply or they are very slow in replying, and people bidding and when I accept, they don’t accept the bid. If you do this. You will be banned from further bidding on my projects. It is not professional nor ethical to bid on a project you have no intentions in doing. Serious bidders Only Please.

•Make sure to put an accurate time-line for completion.

Php Dynamic Link Script #2

I need a simple PHP script created.

What I wan´t to do is place some kind of PHP code in the footer of several PHP (WP, Joomla etc.) websites. The script will then fetch code from a PHP file on a remote server containing HTML and PHP code to display links and other information on several sites.

Need this done quickly. Project has been re-posted because the I didn’t get replies to my messages in the old project posting.

Regards
B.

Joomla Expert / Security Check

We have a site that is using Joomla 1.5.14, recently after a server move we are experiencing hack attacks, adding psyBNC script to site, adding other malicious files that appeared to contain a virus.

So we need someones help to find a security hole, maybe an ethical hacker.

We have taken site completely down and removed all files at the moment

Please contact asap.

Thanks John

Design Graphics 4 Web + Paper

Hi,

I need you to design the graphics in Photoshop for a physical course (which comes in a ringbinder with 5 DVDs and 1 CD) + the website side of things. (header plus banner-ads)

– the cover for a DVD. The DVDs have the DVD symbol on it. There is one piece of text (layer in photoshop) which indicates which module of the course it is. (you set it to “module X”, I then replace the X by 1..5)
– the cover for 1 CD (same as above, except an audio-CD symbol instead of DVD symbol). The text “module X” is replaced by “audio-files” (again, I can easily do this, you just make sure the text is in a layer I can modify)

The dimensions for the CDs/DVDs are: 4.75″x4.75″ (1425px x 1425px) where the CD diameter is 116mm outside and 23mm inside. Please do NOT put the 116mm/23mm markers in there, the fulfillment house will do this, i.e. the artwork needs to go slightly beyond those boundaries)

– the front, spine and back of a physical folder. The dimensions are:
10.75″ x 11″ front and back, spine 2.25″ x 11″

– the header for a website, dimensions 800px x 175 px

– 3 web-banners (give me quotes for static and animated): 468 x 60, 125 x 125, 120×600

the graphics are all the same theme, you just have to make adapt them for the individual context.

The title of the project is “Resolution Repair” (will be on resolutionrepair.com, so the website should appear on pretty much all pieces of content)and it is a productivity course. My name is “Dr Veit U.B. Schenk” which should appear as well where appropriate
(Dr Veit U.B. Schenk’s ResolutionRepair) — the focus is obviously on the product name.

The target audience is people who are into energy healing/spirituality/connection — they suffer from the fact that they have access to all kinds of healing techniques, but they’re not using them on a regular basis and as a result don’t get healed. Please do not make it too specific to energy healing, as this also appeals to others who may be into life-coaching, hypnosis etc.

But the overall theme going on is probably one of harmony, wanting to achieve great things/help others/connect BUT having that frustration of having habits that are stopping them from going forward, taking massive action and reaching a large audience.

just think of all those New Year’s resolutions and then the frustration when not achieving them once again….

The physical folder can be black or white, so you can design the folder covers around that.

I’ll leave the design up to you, however if you decide to bid for it, I’d like to get an idea of *roughly* what you have in mind, possibly point me to some pieces of your work (or what others have done) so I can decide whether your style fits with what I have in mind. I’m not asking you to create the design, but I need an idea of what direction you’re going to take.

the deliverable is photoshop PSD files (in a format I can open in CS, not CS2, not sure if there’s a difference)

any questions, fire away

Veit

Header Banner For Getresults

I require a header banner that can be used in wordpress and standard html websites.
The Company is Called : GetResultsOnline.com.au and has its website at www.getresultsonline.com.au the header is to be used for a series of sales pages and blogs inviting small to medium businesses to come to a free seminar on how to create leads and get their small business on the first page of google. The end result is we sell them a 1 day workshop.
You can use the orange “Fresh ideas” banner if you want as part fof it http://www.getresultsonline.com.au/index-2.html but it need to have our company name as well. I dont mind if you want to use a picture of me, can be provided. One that I like is www.expertsacademy.com as another simple alternative.
Its main bits must be teh Name of teh company GetResultsOnline and teach you how to create endless leads bydominate page 1 of Google.