Flex custom preloader not working
Posted by Dennis in Actionscript 3, Flex on December 23rd, 2009
Lately,
I encountered a problem involving flex custom preloaders.
The context I was using was as follows:
- I created a preloader.swf in flash with a 100 frames to show a progressbar evolution.
- I embedded that preloader.swf in my flex app. Read more about this here
This all worked fine when I ran my application locally.
However, the problem showed itself when deploying my app to my webserver (thus no longer running it locally).
The unintended behavior was that the preloader would not show up until my app was nearly fully loaded, and it then popped up for about a second @ 100% full.
I tried all sorts of different approaches.
- Extending mx.preloaders.DownloadProgressBar
- Creating a new MovieClip that implemented IPreloaderDisplay. More about this here
- Creating a loader .swf that contained the preloader, and loading in my app from there
- Using Charles to monitor request and responses
…
However none of these solutions seemed to work.
After searching a long time for what the fudge could be causing this problem, I stumbled upon the following blog posts:
http://patrickmcd.com/2009/04/20/flash-preloading-errors-turn-off-gzip/
http://www.flash-db.com/Board/index.php?topic=19252.0
As it turns out, the problem isn’t caused by Flash Player or by Flex. It is caused by your server setup.
If you have gzip compression enabled on your server (for speeding up requests and responses), the problem occurs.
What the gzip compression does is compress your already compressed binary .swf file, thus screwing up the loading procedure from an actionscript point of view.
Actually gzip compression doesn’t enhance performance in any way because a .swf is as compressed as it can be.
This also counts for numerous other already compressed files that can’t be compressed any further (.jpg,.gif,.flv,.png,..)
So the solution is rather simple. You can just add a .htaccess file to the root of your public directory to ensure that .swf files (and any other already compressed files) will no longer be compressed.
All that has to be in this file is the following:
1 2 3 | # Don't compress images/flash SetEnvIfNoCase Request_URI \ \.(?:gif|jpe?g|png|swf|flv)$ no-gzip dont-vary |
Et voila, you have disabled the gzip compression and fixed your preloader bug because it’s working now.
This really was a pain in the *ss for me, as I spent 2 days looking for a solution.
I hope this post can save you the trouble I went through
New Job
Posted by Dennis in Random stuff on November 27th, 2009
2 weeks ago, I started working at iDA mediafoundry.
This will allow me to be part of some of the most challenging Flex / Java/ … projects in Belgium.
I must say that these are exciting times for me.
This transition implicates that I will be able to do what I love most.
Livecycle, Merapi, Cairngorm, PureMVC, FlexUnit, …
You name it and I’ll get the chance to be doing this in a professional environment.
Alot mor technical stuff means a lot more blogposts
Youtube video in AS3 FLVPlayback Update(2)
Posted by Dennis in Actionscript 3 on October 22nd, 2009
After the update of yesterday,
Youtube changed the way on how to retreive the video from it’s html page again.
This implies, that the 2 old versions of the proxy no longer worked and that videos could no longer be retreived.
After a quick peek, the solution was rather simple.
Here’s the code for the new and improved proxy:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | <?php $id = trim($_REQUEST['id']); $url = "http://www.youtube.com/watch?v=" . $id . "&fmt=18"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $info = curl_exec($ch); if (!preg_match('#\'SWF_ARGS\': (\{.*?\})#is', $info, $matches)) { echo "Check the YouTube URL : {$url} <br/>\n"; die("Couldnt detect swfArgs"); } if (function_exists(json_decode)) # >= PHP 5.2.0 { $swfArgs = json_decode($matches[1]); $video_id = $swfArgs->video_id; $t = $swfArgs->t; } else { preg_match('#"video_id":.*?"(.*?)"#is', $matches[1], $submatches); $video_id = $submatches[1]; preg_match('#"t":.*?"(.*?)"#is', $matches[1], $submatches); $t = $submatches[1]; } curl_close($ch); $fullPath = "http://www.youtube.com/get_video.php?video_id=" . $video_id . "&t=" . $t; // construct the path to retreive the video from $headers = get_headers($fullPath); // get al headers from the url foreach($headers as $header){ //search the headers for the location url of youtube video if(preg_match("/Location:/i",$header)){ $location = $header; } } header($location); // go to the location specified in the header and get the video ?> |
That’s all there is to it.
This file will also be updated again in the source and files download of the original post.
AS3 Google Weather API lib – Updated
Posted by Dennis in Actionscript 3, Util on April 28th, 2009
A while ago, I needed to integrate a weather forecast into an actionscript application I was developing.
After some initial searching, I quickly stumbled upon the yahoo weather API.
I dug into this some more and even found an AS3 library for getting the weather forecast! But then, the dissapointment came. When implementing this, you could only get a basic forecast for the current date, with a link to go to the full weather forecast. As demonstrated here.
After some more searching for the right API to suit our needs (a very basic one), I found the google weather API.
The use of the API is as follows:
1) you send a http request like the following : http://www.google.com/ig/api?weather=Paris,France&hl=fr to the API
2) you receive an XML response containing weather forecast data for the next 4 days for a given location
So actually you could say it is more like a feed than an API.
But this seemed to be exactly what I needed to get the job done.
The main problem I ran into was that the API was not officially documented, so I had to do some scraping (monitoring requests and responses with charles) to find out how it worked. And of course putting the pieces together reading several blogs / forums etc.
More unofficial documentation can be found here
Also, I never found a proper actionscript library that enables us to retreive this data. That’s why I decided to stop wasting precious time and just make it myself.
Basically all I did was create a wrapper library that does the request, gets the response and handles errors in an easy to use manner.
This resulted in a fully functional AS3 library for use in flash or flex to retreive weather forecast data from google weather.
Note: When loading the xml and images from an external source, make sure to use a proxy in order to avoid flash player security issues.
In some cases, you also need to put a crossdomain.xml on your server in order to enable your swf to acces external content.
I tried to put comments in the example as much as I could to make everything as clear as possible.
Feel free to use this library in your projects / play around with it.
If you have any remarks, additions, request, questions… just post them here.
This is the basic result, just displaying the data received from the api. Nothing less, nothing more:
UPDATE
Google made changes to the API, causing the standard images not to show anymore.
A minor fix in the GoogleWeatherService.as class solved the issue.
Changed
1 | public static const BASE_IMAGE_URL:String = "http://www.google.com/ig"; |
to
1 | public static const BASE_IMAGE_URL:String = "http://www.google.com"; |
View the new example here
Or download the SWC and source files with the above usage example here: AS3 Google Weather lib (836)
Youtube video in AS3 FLVPlayback
Posted by Dennis in Actionscript 3 on April 23rd, 2009
Lately,
I’ve been busy trying to get youtube movies to play in the standard FLVPlayback component.
Getting this to work was really a pain in the butt now and then, especially because while I was working on this,
youtube changed some stuff on their side undoing all my previous work. But hey, stuff happens!
In the end perseverance and a lot of patience finally resulted in a working solution.
I will break up the solution into several pieces, describing the steps that need to be taken in order for this to work.
1) We need to get the video (.flv) from the youtube server.
To achieve this, one must of course understand how to get this video.
To start off, just navigate to a youtube movie. e.g. http://www.youtube.com/watch?v=vE_WqdKbTvY , then right-click anywhere in page and watch the page source code.
In the source code, search for the string “swfArgs”, which will look something like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | var swfArgs = { "q": "top%20gear%20carrera%20gt", "fexp": "903500,900130", "invideo": true, "sourceid": "ys", "video_id":"vE_WqdKbTvY", "l": 478, "fmt_map": "18/512000/9/0/115,34/0/9/0/115,5/0/7/0/0", "sk": "PbB4AIyvqpbLl0DYyCX5rpmXcQe-FEcZC", "is_doubleclick_tracked": "1", "usef": 0, "t": "vjVQa1PpcFO6TnxVA4_nkqbqKN-z4CoWJgWn2Pfu77I=", "hl": "en", "plid": "AARoEenKN8A9FYLn", "vq": null, "ad_module": "http://s.ytimg.com/yt/swf/ad-vfl91517.swf", "cr": "NL", "tk": "j7SixOLxSJ1xxBIwWubnN9sXiu7hrejTmRv4ruMx4N3OaeyhN0xImQ=="}; |
As you can see this is an object, containing data about the swf and thus the .flv played at the youtube html page.
The video_id is the identifier of the movie and t is a token set by youtube that enables you to view / download the video.
This token expires after a given period of time, so I can’t place a permanent download link for the flv file here.
So now that we have the parameters of the video we need to fill them in as follows into a fixed url, used by youtube to retreive the flv video:
http://www.youtube.com/get_video.php?video_id=[id]&t=[t]
In our case:
http://www.youtube.com/get_video.php?video_id=vE_WqdKbTvY&t=vjVQa1PpcFO6TnxVA4_nkqbqKN-z4CoWJgWn2Pfu77I=
When navigating to this url with your browser, the video will start downloading
Don’t bother trying to open this last link, because as stated before, the token will probably have expired by the time you read this.
(Also the token is linked to the IP that first requested it, which in this case would be mine. More about this later)
If you would like to test if and how this works, just follow all the steps described above and see for yourself.
Pretty cool huh?
Now that we know how to get the .flv video of any youtube movie, we need to find a way to automatically do this, without the need to go through all the steps again.
We will use a php proxy script that eliminates all sandbox issues, accepts any youtube url and then returns the physical video (.flv) as if it were present on our own server.
However, this script will be a mere redirect to the location of the video on youtube servers, the file will not be physically downloaded by your server.
To create a script like this, I did some searching and quickly stumbled upon a script I found here.
This worked fine at first, but as I was saying youtube changed some things server side along the way.
That’s why i needed to search for a solution and needed to modify the script in order to getting it to work again.
The problem was caused because youtube changed the token idea.
A token is now linked to an IP address, meaning that the video can only be downloaded by the IP address that first requested the token.
This is a problem when trying to do this in-browser, where the browser is on the localhost, and the script is on a server and thus causing an IP mismatch. The result is that the file cannot be accessed.
After alot of searching around the final solution is to retreive the headers from the youtube download url and extracting the location of the flv that is embedded.
The result for the php proxy script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | <?php $id = trim($_REQUEST['id']); $url = "http://www.youtube.com/watch?v=" . $id; $url = $url . "&fmt=18"; //Gets the movie in High Quality, uncomment this line to get it in normal quality $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $info = curl_exec($ch); if (!preg_match('#var swfArgs = (\{.*?\})#is', $info, $matches)) { echo "Check the YouTube URL : {$url} <br/>\n"; die("Couldnt detect swfArgs"); } if (function_exists(json_decode)) # >= PHP 5.2.0 { $swfArgs = json_decode($matches[1]); $video_id = $swfArgs->video_id; $t = $swfArgs->t; } else { preg_match('#"video_id":.*?"(.*?)"#is', $matches[1], $submatches); $video_id = $submatches[1]; preg_match('#"t":.*?"(.*?)"#is', $matches[1], $submatches); $t = $submatches[1]; } curl_close($ch); $fullPath = "http://www.youtube.com/get_video.php?video_id=" . $video_id . "&t=" . $t; // construct the path to retreive the video from $headers = get_headers($fullPath); // get all headers from the url foreach($headers as $header){ //search the headers for the location url of youtube video if(preg_match("/Location:/i",$header)){ $location = $header; } } header($location); // go to the location specified in the header and get the video ?> |
An example of correct usage:
Navigate to http://www.dennisjaamann.com/demo/youtubeFLVPlayback/php/getYoutubeFLV.php?id=[videoID],
where the videoID is the id from the youtube movie http://www.youtube.com/watch?v=vE_WqdKbTvY
In this case: http://www.dennisjaamann.com/demo/youtubeFLVPlayback/php/getYoutubeFLV.php?id=vE_WqdKbTvY
When navigating to the url above, you will notice that the script will redirect you to the physical location of the .flv file.This will start the download prompt.
Isn’t this exactly what we need?
2) Workaround for FLVPlayback
When we take the url retreived above and try to play it in the standard FLVPlayback component as follows:
1 2 3 4 | var videoPlayer:FLVPlayback = new FLVPlayback(); addChild(videoPlayer); videoPlayer.source = "http://www.dennisjaamann.com/demo/youtubeFLVPlayback/php/getYoutubeFLV.php?id=vE_WqdKbTvY"; videoPlayer.play(); |
The video doesn’t play and we get the following error:
VideoError: 1005: Invalid xml: URL: “http://www.dennisjaamann.com/demo/youtubeFLVPlayback/php/getYoutubeFLV.php?id=vE_WqdKbTvY&FLVPlaybackVersion=2.1″ No root node found; if url is for an flv it must have .flv extension and take no parameters
at fl.video::SMILManager/http://www.adobe.com/2007/flash/flvplayback/internal::xmlLoadEventHandler()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
Which is kind of a suprise, because when we open the source url in our browser there is clearly an .flv file there.
However, when analyzing the error message we can clearly see the problem. The key part here is:
“if url is for an flv it must have .flv extension and take no parameters”
When taking a look at our url http://www.dennisjaamann.com/demo/youtubeFLVPlayback/php/getYoutubeFLV.php?id=vE_WqdKbTvY,
it is obvious that it doesn’t end on .flv and that our url accepts parameters.
This behaviour is caused by a few lines of code in the NCManager class used by the FLVPlayback component.
There, the check is done whether the url ends on .flv and that the url does not accept parameters.
This leaves us 2 options:
- Extend the NCManager, overwrite this behaviour and make the FLVPlayback use this custom class
- Find a way to give the NCManager a correctly formatted url, so that it can stop nagging
I prefer the second option because it leaves the NCManager unmodified and hereby we can eliminate any unwanted behaviour.
Also, since I have a little php experience, I quickly realized that this had the funky smell of url rewriting.
With url rewriting you can take any url and format it to the format required which is exactly what we need here…
So we need to change the original url
http://www.dennisjaamann.com/demo/youtubeFLVPlayback/php/getYoutubeFLV.php?id=vE_WqdKbTvY
to
http://www.dennisjaamann.com/demo/youtubeFLVPlayback/videos/vE_WqdKbTvY.flv
This can be achieved by adding a .htaccess file to your project folder on the web server.
The code below is also included in the source files at the bottom of this post. But please note, not all operating systems show a .htaccess file.
This is because that it sometimes is a hidden file type.
Here’s the code for that:
1 2 3 | Options +FollowSymlinks RewriteEngine on RewriteRule ^videos/([^/]+).flv php/getYoutubeFLV.php?id=$1 [NC] |
And that’s all folks!
When we now execute our code again with the modified url, the NCManager has stopped nagging and the videoplayer plays the wanted video.
1 2 3 4 | var videoPlayer:FLVPlayback = new FLVPlayback(); addChild(videoPlayer); videoPlayer.source = "http://www.dennisjaamann.com/demo/youtubeFLVPlayback/videos/vE_WqdKbTvY.flv"; videoPlayer.play(); |
This workaround took like a minute or so to be succesful, leaves the the NCManager unchanged and does the trick.
That’s why I’ve chosen this solution because it is simple and elegant.
Read more about basic url rewriting here
3) Create the player.
All that is left now is to create our application. I have prepared an example in flex (sdk 3.3)
This is the result:
View the full example with source here
Or download the example source files here: youtubeFLVPlayback (1152)
Flex cumulative Arraycollection.filterfunction
Earlier today I was working on some app @ boulevart
I had a datagrid containing a set of data, which i needed to be able to filter given various parameters.
I quickly found out that i could use the standard Arraycollection.filterfunction on the dataprovider to do so easily…
At least I thought
When applying only one filter on the dataprovider, this worked like a charm
It soon became clear that when you want to apply multiple filters at the same time, the whole dataprovider was passed to the second filter function instead of the already filtered dataprovider. With this, undoing the first filter and showing only the filter results of the last used filter.
I made my own “workaround” which involved some redundant and crappy coding ![]()
So the next step was some basic googling. It didn’t take long to find a solution by Cristian Rotundu. It can be found here
I like this solution because it enables flexibility by simply extending the standard flex Arraycollection and adding the functionality we need.
So it’s rather brilliant in its simplicity.
Two thumbs up for Cristian!
AS3 unit conversion util class
Posted by Dennis in Actionscript 3, Util on January 27th, 2009
As I was developing an application, I needed to convert degrees celcius to fahrenheit and vice versa,
as well as mph to kph and vice versa.
I figured the best way to implement this was in a util class because these calculations aren’t likely to change any time soon
After some googling for a class like this, i didn’t find something alike.
So that’s why I decided to write my own and of course share it with you. I tried to put in the most commonly used conversions.
This class enables you to convert:
- miles to kilometers, kilometers to miles
- celsius to fahrenheit, fahrenheit to celsius
- meters to feet, feet to meters
- … and many more
This is the result:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 | /** * ... * @author Dennis Jaamann * @version 1.0 * Util Class that converts units from one given unit to another * * Copyright (c) 2009 Dennis Jaamann Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package com.dj.util { public class UnitConverter { /** * Length */ public static function kilometersToMiles(kilometers:Number):Number{ return kilometers * 0.621371192; } public static function kilometersToNauticalMiles(kilometers:Number):Number{ return kilometers * 0.539956803; } public static function milesToKilometers(miles:Number):Number{ return miles * 1.609344; } public static function milesToNauticalMiles(miles:Number):Number{ return miles * 0.868976242; } public static function nauticalMilesToKilometers(nauticalMiles:Number):Number{ return nauticalMiles * 1.85200; } public static function nauticalMilesToMiles(nauticalMiles:Number):Number{ return nauticalMiles * 1.15077945; } public static function metersToFeet(meters:Number):Number{ return meters * 3.2808399; } public static function feetToMeters(feet:Number):Number{ return feet * 0.3048; } public static function metersToYards(meters:Number):Number{ return meters * 1.0936133; } public static function yardsToMeters(yards:Number):Number{ return yards * 0.9144; } public static function centimetersToInches(centimeters:Number):Number{ return centimeters * 0.393700787; } public static function inchesToCentimeters(inches:Number):Number{ return inches * 2.54; } /** * Temperature */ public static function fahrenheitToCelsius(degrees:Number):Number{ return (degrees - 32) / 1.8; } public static function fahrenheitToKelvin(degrees:Number):Number{ return (degrees + 459.67) / 1.8; } public static function celsiusToFahrenheit(degrees:Number):Number{ return (degrees * 1.8) + 32; } public static function celsiusToKelvin(degrees:Number):Number{ return degrees + 273.15; } public static function kelvinToCelsius(degrees:Number):Number{ return degrees - 273.15; } public static function kelvinToFahrenheit(degrees:Number):Number{ return (degrees * 1.8) - 459.67; } /** * Weight */ public static function kilogramsToPounds(kilograms:Number):Number{ return kilograms * 2.20462262; } public static function kilogramsToStone(kilograms:Number):Number{ return kilograms * 0.157473044; } public static function poundsToKilograms(pounds:Number):Number{ return pounds * 0.45359237; } public static function poundsToStone(pounds:Number):Number{ return pounds * 0.0714285714; } public static function stoneToPounds(stone:Number):Number{ return stone * 14; } public static function stoneToKilograms(stone:Number):Number{ return stone * 6.35029318; } public static function gramsToOunces(grams:Number):Number{ return grams * 0.0352739619; } public static function ouncesToGrams(ounces:Number):Number{ return ounces * 28.3495231; } /** * Speed */ public static function kilometersPerHourToKnots(kilometersPerHour:Number):Number{ return kilometersPerHour * 0.539956803; } public static function kilometersPerHourToMilesPerHour(kilometersPerHour:Number):Number{ return kilometersPerHour * 0.621371192; } public static function milesPerHourToKnots(milesPerHour:Number):Number{ return milesPerHour * 0.868976242; } public static function milesPerHourToKilometersPerHour(milesPerHour:Number):Number{ return milesPerHour * 1.609344; } public static function knotsToKilometersPerHour(knots:Number):Number{ return knots * 1.85200; } public static function knotsToMilesPerHour(knots:Number):Number{ return knots * 1.15077945; } /** * Volume */ public static function litersToGallons(liters:Number):Number{ return liters * 0.264172052; } public static function gallonsToLiters(gallons:Number):Number{ return gallons * 3.78541178; } public static function cubicFeetToCubicMeters(cubicFeet:Number):Number{ return cubicFeet * 0.0283168466; } public static function cubicMetersToCubicFeet(cubicMeters:Number):Number{ return cubicMeters * 35.3146667; } /** * Power */ public static function kilowattsToHorsepower(kilowatts:Number):Number{ return kilowatts * 1.34102209; } public static function horsepowerToKilowatts(horsepower:Number):Number{ return horsepower * 0.745699872; } } } |
Usage:
1 2 3 4 5 6 7 8 9 10 11 12 | package { public class SomeClass { public function SomeClass() { var kph:Number = UnitConverter.milesPerHourToKilometersPerHour(10); trace("10 miles per hour = " + kph + " kilometers per hour"); } } } |
Copy text or download source: unitconverter (350)
Flash Tracer & FF3
Since I’ve been more busy with flash lately, I almost forgot about flash tracer.
This is a nifty tool I usually use when developing flex. It opens an output panel in your firefox browser window, displaying everything that is outputted by flash / flex in your browser.
This is cool because then you don’t have to shift to your flex IDE’s console panel to see obvious runtime errors (or traces :p)
This can be time saving and just plain handy.
I admit, a logger is a much better way to debug an application, but hey the occasional trace can sometimes do the trick when time is scarce and solutions are needed fast.
As I was saying, I did more flash development lately and didn’t have the need to use this lovely tool.
In the meanwhile, a Firefox update was released. Result => the add-on that firefox has ready for users in the add-on pages is outdated.
Today, my colleague Bart Claessens pointed out that it could be found Here
Happy tracing
My First Post
Posted by Dennis in Random stuff on January 19th, 2009
Hello and welcome to my brand new blog.
As a flash / flex actionscript developer @ Boulevart Belgium,
I come across loads of cool and crazy stuff, as well as the usual problems involved with everyday actionscripting.
Because of the nature of my job, being a developer and all for some time now, I decided it was time for me to get myself out there.
In the community that is
Why?
Just because the actionscript community already saved me tons of times when in dire need of code and workarounds.
I figured that these people are giving me the time they lost fixing bugs, making workarounds, code examples, …
I felt that maybe if I could save somebody else some time, give him the deciding tip or lead to good solution, it was my duty to do so.
With all this said and done, I now own my first blog and will start making actionscript / flash / flex posts and off course other stuff that I run into every day.
