Flash Player on Linux – Installing Native 64bit Flash Player

It seems that installing Flash Player on an Ubuntu desktop is getting easier and easier with every release of the popular Linux operating system. However, its still very apparent that there are still problems pairing the two together in some areas. In the past, it has been less-than-easy to install the 64bit Flash Player plugin in Linux. However, Adobe just released ┬árefresh to the alpha, so let’s see if it has taken care of some of the ease-of-installation problems. Continue reading

Installing Flash Player 10 Debug on 64bit Ubuntu

I just finished installing the Flash Player 10 debugger on my 64bit Ubuntu machine. All props go to “Me and Ubuntu,” with the article located here:
http://meandubuntu.wordpress.com/2008/08/20/flash-10-rc-on-ubuntu-amd64/

It involves using nspluginwrapper and some other libraries to emulate a 32bit environment for Flash Player to run in. Totally rad.

[Linux] Flash Builder 4: Will Adobe Help Us?

The question that has been plaguing me for some time now is this: Will Adobe release Flash Builder 4 for Linux? I don’t think I’m alone on this one. Most every linux-using Flash/Flex developer needs a development environment to use. And up to this point, there really isn’t anything out there.

Sure, there’s Flex Builder 3 for Linux, but it has extremely limited capabilities, and you have to hack it just to get it to work with Eclipse 3.4+. Did I mention that it won’t install in a 64bit JVM? Yes, I was able to get it working, but it’s a huge pain for something that shouldn’t be. It’s been a beta for nearly a year now, and with no real hope in sight. Since Adobe just released Windows and Mac beta editions of the new Flash Builder 4, what does it mean for us? Is there a plan out there for Adobe to save the day?

Yes, there is FDT. Enough said. But the full-flavored version of FDT is like $600+! I don’t know about you guys, but I don’t have that kind of money laying around. However, FDT IS DOING SOMETHING AWESOME and giving their best product away for FREE for open source project teams. I guess I just need to jump on it and get my secret projects (insert evil laugh) into the mainstream. Even so, MXML support is limited, and as far as I know, you can’t visually create Flex applications like you can in Flash/Flex Builder.

So my statement is this: Help us help you Adobe. There ARE people out here that are waiting desperately for a Linux Flash/Flex IDE to come out. We DO have money and we’re willing to spend it. Just please try and meet us halfway :)

If there were any other way, we’d do it. But there isn’t. Wine is a long ways off from being able to virtualize a Windows JVM, so our only real option is to run it natively on Windows or Mac. Hear our cries, Adobe, we’d love to give you money for your product!

Ubuntu 64: Running Flex Builder

I can’t claim any credit on this one, but I got Flex Builder working on my new Jaunty distribution! I initially thought I should get myself a 64bit version of Eclipse and try to install Flex Builder over it, but that didn’t work.

Evidently, the solution is to get a 32bit JRE and get that running, then to modify Eclipse’s startup files to point to the 32bit JRE. Everything works great! I was basically able to copy and paste my old Ganymede from a 32bit OS to a 64bit one, with only a few modifications. Pretty dang cool. Anyway, here’s where the credit is due: http://rachaelandtom.info/content/running-32bit-eclipse-64bit-linux

As far as running a 32bit Flash Debug player, I haven’t given that the time to work on getting that to work. I’m for the moment satisfied to just have Flash Player work regardless. The 64bit standard player is working great for me, I haven’t had too many problems with it. Here’s hoping that I won’t have to get a 32bit Firefox to run the Flash 10 Debug Player :)

Ubuntu Day: Jaunty Jackalope owns my Computer

As you may or may not know. Ubuntu 9.04, Jaunty Jackalope, came out today. And what a release it is! I’ve definitely noticed the faster boot time and significant progress that the Ubuntu distribution has undertaken even since I first installed Ubuntu 8.04 only a few (maybe 6?) months ago.

I decided to give a 64 bit machine ago. This will be my very first 64 bit operating system that I’ve used in all my years (*laugh*) of using computers, so I’m definitely hoping for the best on this one. I read a bunch of mixed responses from a number of different people on whether to use 32bit Ubuntu or 64bit. Many said they installed 64 bit and never looked back, some complained that certain software was buggy, and most were just so-so on the matter. My main areas of concern that I need to address pretty soon are running a Flash Player 10 debug player (which doesn’t exist for 64 bit Linux yet), Java, and Eclipse. If I can make Flash 10 Debug run in browser at all, even if I have to virtualize 32 bit or whatever, that will be a home run for me. A debug player is pretty much mandatory in developing Flash Player applications, regardless of size. I hear that the standard Linux 64 bit Flash Player is amazing and runs extremely well. Here’s hoping that the same can be said of Flash Debug Player 10. I’m fairly confident that Java will run as expected, and I don’t worry too much about Eclipse — again, time will tell — but I do hope that I can find a way to run FlexBuilder.

Flex Builder is pretty much the only free way to effectively develop Flash Player applications on Linux at this point in time. Since it’s an alpha, there are some bugs, but once you get it running right, it’s nothing short of amazing… for Flex Builder. I’d love to get FDT, but until I crank out a really rad open source project and get it for free, I’m not going to be able to shell out $600+ for a development environment.

We’ll just have to see about all of this stuff, in time we’ll know how it all turns out.

But anyway, with the spirit of free software in mind, I wrote a really quick script for transforming your Ubuntu machine into [TK + Ubuntu =] TeekUbuntu, my own distro of Ubuntu :) Yeah, I know, it’s nothing special, just a bunch of packages that are configured and downloaded automatically for you, but it’s a start. Plus, I wanted to post this script somewhere so I’ll have a place to start from if I ever need to start with a new Ubuntu distro.

The script does a few things. It adds the Medibuntu repositories to your source list, it updates and upgrades your system, then it installs a bunch of packages that are really nice to have at hand. This script is meant to be ran as soon as you start Ubuntu for the very first time. Don’t use Update Manager, and don’t worry about it as it’ll keep popping up, this script will get all of the necessary packages for you and get you Teekified in no time.

Here’s a package list describing what each package is and does, so you don’t have to read it all from the script:

  • mysql-server, mysql-admin, mysql-query-browser: The MySQL server itself and a few really useful plugins for administrating the database, you know: adding and removing users, tables, schemas, databases…
  • python: Python… NASA uses it, why not?
  • openjdk-6-jdk, ant: Java JDK and Ant. Two completely necessary tools for Java development :)
  • apache2: Apache’s HTTPD server, pretty important.
  • subversion, libapache2-svn: Tools for using Subversion as well as integrating it with Apache HTTPD.
  • gnomad2: Software for managing Creative media players, adding songs, deleting stuff, using it as a portable hard drive, etc.
  • compiz, compizconfig-settings-manager, compiz-core, compiz-dev, compiz-fusion-plugins-main, compiz-fusion-plugins-unsupported compiz-gnome: If you don’t know what Compiz is, you need to check it out.
  • acroread, acroread-plugins: Adobe Reader for viewing PDF’s.
  • skype: Skype.
  • non-free-codecs: Non-free video codecs for playing encrypted DVDs and videos.
  • banshee: The best music manager program that I’ve found for Linux.
  • envyng-qt: Envy is a program for helping Linux users download and install the correct video card drivers for their hardware. Definitely a plus with compiz.
  • mplayer, vlc: Two awesome video players for Linux.
  • libdvdcss2: Again, more non-free DVD codecs.
  • ffmpeg: Surely you’ve heard of ffmpeg?
  • mencoder: A little bit nicer way to encode and transcode video files.
  • vboxgtk: VirtualBox for virtualizing guest operating systems right inside your host operating system. I’ll probably use it to virtualize XP at some point so I can use my PhatNoise car audio hard drive system… there are tools for Linux, but I haven’t explored them yet.
  • wine: Windows emulator for natively running Windows programs inside of Linux.
  • frozen-bubble: Probably the best game that was ever made to be free software.
  • ardour: Awesome DAW (digital audio workstation) for working with music mastering and production. Closest thing to Sonar that I’ve found for Linux.
  • azureus: Best torrent program for Linux, perfect for seeding Ubuntu releases!
  • gtk-recordMyDesktop: Record your desktop in Linux the easy way.
  • php5, libapache2-mod-php5: I can’t really stand using PHP, but often I have to. It’s dirty, quick, and it works, so PHP did make my list. Also includes the plugin for Apache HTTPD.
  • nautilus-open-terminal: A nifty plugin for Nautilus that allows you to open a terminal from anywhere in your filesystem with a simple right click.

Here’s the script:
teekubuntu.installer
Enjoy :)

Even though most things can be automated with Linux with nice and nifty scripts, some things just can’t. (Though I’m sure all I’m going to mention is possible.) Firefox plugins, Flash Player, Eclipse, Flex Builder, AIR, and DropBox are all programs I’ll just have to install manually. Really wish there was an easy terminal-based way to get these, but sadly they don’t exist in any repositories that Ubuntu can get a hold of, as far as I know.

And as for Firefox plugins, you definitely need StumbleUpon, Delicious, AdBlock, FaviconizeTab, and FullScreenHomestarRunner. Also, XMarks is awesome, they used to be Foxmarks. Basically they synchronize your bookmarks across computers running Firefox… OS independent. Nice.

Hope this helps encourage some of you to jump on the ball and get Ubuntu! Long Live Free Software!

-TK

AS3 IOC Containers: Spring Actionscript (Prana) vs Parsley

Today, I decided to bring some good ol’ IOC and dependency injection into my AS3 workflow. I took two of the most popular IOC containers for test drives and compared the features of both, and in this post, I’m going to log my findings.

1. SpiceFactory‘s Parsley (current version 1.0.2)
Download | Documentation

Learning to use Parsley was really easy. The documentation was very concise and yet complete, it didn’t just shove a bunch of examples and ASDocs in your face, it explained in-depth how the various aspects of Parsley work and how they can be extended. It has really interesting features, kind of a little break from just regular IOC and dependency injection.

Some of the things I really liked about Parsley were:

  • The documentation. It rocked. It was so complete and so in-depth that it made it a breeze to get started with Parsley. It showed a lot of examples of how to use Parsley to its fullest, and explained the various API’s well.
  • Localization of messages. Parsley makes it really easy to provide localization to your applications. Localization is one of the things that has always been a pain for developers to implement, but Parsley covers this facet extremely well. Localization can be manually set or automatically interpreted by Parsley. You create message bundles for the various strings required by your application (such as a tooltip for a button: “Opens a file for editing.”) and you create multiple message bundles (which can go in separate XML files) for each locale you’re targeting. It’s super easy and though I haven’t tried it out just yet, one can see how it makes localization a non-issue for application development. The more you take advantage of IOC in Parsley, the more you can incorporate localization. Awesome feature.
  • Event listener tags in XML contexts. You can easily register event listeners in the context with the “listener” tag. This makes life a heck of a lot easier for me at least. I despise typing out “addEventListener” four to ten times for a complicated object with lots of dependencies.
  • Easy to extend. Fo’ sho’.

Some of things I wasn’t so fond of in Parsley:

  • Non Spring-like XML definitions. Parsley breaks away from the Spring XML definitions that I like, and am used to. I’m OCD, so this is basically life-and-death for me ;) Plus the Parsley definition structure is a bit more verbose, so you’ll end up typing more code in your definition files.
  • Inability to simply invoke methods. For the logging framework I’ve developed and use, I need to call functions like “registerOutput” on my objects, and Parsley simply can’t do that yet. Spring Actionscript (Prana) handles this with the “method-invocation” tag, which I like… a lot.
  • More verbose setup in parsing contexts. You need to instantiate a parser and have that load a context into another object. This extra step is kind of useless, at least to me it is.

All in all, Parsley was ok but I found that I prefer Spring Actionscript (Prana) in the day-to-day stuff. Although Parsley has some really cool API’s that I haven’t seen yet, I like a more Spring-like IOC container.

2. Spring‘s “Spring Actionscript“, formerly Prana (current version 0.6)
Download | Documentation

Spring Actionscript (Prana) was a bit more difficult to learn because of lack of documentation, but proved to be far more powerful than Parsley, though it lacks some of the cool features that Parsley has. As far as I know, it lacks the cool localization that Parsley offers standard, and it definitely lacks the “listener” tag that Parsley boasts, though you can achieve the same general result with the Spring Actionscript “method-invocation” node. Plus, since Spring has taken charge of the project, it’s just like Spring! This, for me, is huge. I love Spring. Spring is amazing and easy to use, and their Actionscript IOC container is such as well.

What I loved about Spring Actionscript:

  • It’s just like Spring. \m/
  • The “method-invocation” node. This really helps make the framework a heck of a lot more flexible.
  • XML declaration files are less verbose and AS3 instantiation is a less wordy. And it runs just as you’d expect an IOC container to run. If you’ve used Spring, the migration to Spring Actionscript is a no brainer.
  • It’s a huge framework. I guess this is both good and bad, but I like having a lot versus a little, but maybe that’s just me. It has plugins to Cairngorm and PureMVC, which I’m sure a lot of people are grateful for.

What I kind of didn’t like about Spring Actionscript:

  • It doesn’t have the “listener” tag that Parsley has. It’s more of a convenience thing than a lack of a feature, but it’s still really nice to have.
  • It doesn’t have the localization features of Parsley. The message bundle API of Parsley is genius, really powerful and super easy to use.
  • Lack of documentation. Insert sad face here. It was a bit of a challenge to get up and going with it, but in the end it was worth it.
  • Lack of “init-method” and “destroy-method” and “factory-method” subtags of an “object.” It supports the “init-method” and “factory-method” parameters on the “object” tag, but it’s nice to just nest those underneath the “object” tag rather than as a parameter to the base “object” tag. The “destroy-method” is completely left out, though I’m not sure how that would apply in AS3, if at all. I’m really missing the “static-factory-method” tag that Parsley supports though. So maybe this aspect of Parsley is more like Spring than, dare I say, Spring Actionscript?
  • Not so easy to extend. There’s little documentation beyond the ASDocs, so I wouldn’t know if I could implement a preprocessor like in Parsley or anything advanced like that.

Other than that, my choice is pretty much clear: Spring Actionscript takes the TK Cup! Woot! I’m going to start using it in a real-world application and I’ll post again on my findings with working with Spring Actionscript in a real world scenario. Even though I kind of prefer Spring Actionscript, it is definitely missing some of the really awesome Parsley stuff. I, for one, am a huge fan of the localization features of Parsley. So, don’t automatically reject using Parsley because of this post. Parsley is an awesome framework for IOC, and SpiceFactory has done a lot of good work on it. It’s definitely worth your time to check into both projects and choose which is best for each situation you run into. I can definitely see some areas where I’d prefer using Parsley over Spring Actionscript

Until then, here’s my two test projects. They contain basically translations of the same general project, translated to Spring Actionscript and Parsley. The required libraries are included in each projects corresponding lib folder, though I used Arthropod for debugging and I didn’t include that. They’re Flex projects by the way. These are to help you make your informed choice on what to go on, rather than just depending on my glorious madness to make your decisions upon:
uploads/as3ioctesting.zip

Good luck in the wonderful world of IOC!

EDIT**
Here’s a bit of a disclaimer about Parsley. Parsley does have a sort of “method-invocation” tag, though it wasn’t clear to me at first. According to Jens Halm, the project lead, you can have multiple init-method tags to invoke methods when the object is instantiated. So basically, you can achieve the same result without the method invocation tag. So now my choice is more unclear. I like Parsley AND Spring Actionscript. I don’t know what I’m going to do, but you can still make a choice at least :)

What I’m looking for in AS4

Not that you asked, or that you care, but I think somebody needs to post a wish list for AS4 as far as the language construct is concerned. AS3, being a huge step away from scripting and into the world of development, was kind of like man’s first steps on the moon. We did it, now what? It’s time to colonize, conquer, dominate, install weapons systems… now that the moon is ours :)

Anyways, what I’m saying is that AS3 was a deep jump into uncharted territory for most of us in the Flash community and many of us ran dizzily in circles at the release of something so foreign to the Flash Platform (and many of us still are). Now that enough of us have made the jump from scripting to developing, I believe Adobe needs to “solid up” Flash Player with more Java-like constructs. I mean, AS3 is supposed to be an object-oriented language, yet we don’t have abstract methods, abstract classes, and a few general OOP must-haves. Yes, we can create semi-abstract classes by naming conventions and by throwing errors by hand, but come on! Nobody likes to develop abstract classes in AS3, though they’re pretty much a necessity in true OOP.

I digress, there’s just so much on my mind. I’ll now get started on what this post is really about, AS4 and what we need from it.

  1. Language Addition – Generics:
    Generics, or parameterized types, are one of the coolest things to ever happen. Even Flash Player 10 is going to support some form of generics through the Vector type. Adobe has noted that when using the Vector over an Array, there is a 40%+ performance increase. Though we now, or soon, have this kewl ‘generic-ish’ type, we’re only seeing the tip of the iceberg. We need a “java.collections.*” equivalent for Flash Player. The Java Collection implementations are some of the coolest thing in all languages, allowing for extremely efficient and simple manipulation of groups of values. It also forces even greater strict-typing, rather than the Array and Object classes. While I totally understand the need to have intrisnic classes like Object and Array, we greatly sacrifice type-saftey with them. A collections API would eliminate the lack of type-safety within Flash Player for the most part. If we don’t see this in AS4, we have every reason to be upset. I also feel the need to mention this: though FP10 has Vector&ltObject>, there are no means by which to develop your own parameterized types as in Java. Now, I don’t know of too many developers that create their own parameterized types just for kicks, and I myself have never had the need to create my own generic class, but we need this ability. Who knows, somebody in the community could come up with something extremely useful in a generics class, maybe for a 3D engine or a framework.

  2. Language Addition – Abstract Classes/Methods
    WE NEED ABSTRACT CLASSES! As an OOP/Design Pattern enthusiast, I am really feeling the need for abstract types. I can’t vouch for performance or any other benefits to abstract classes, but in design patterns, abstract classes are key. As it stands in AS3, the creation of abstract types is pretty limited. There are workarounds to doing it, of course, but still. We greatly need abstract types. Even if it won’t affect you on a day to day basis as a developer, this is core to an OOP language.
  3. Language Addition – Memory Management
    Now I’m no C/C++ guy (yet) but AS3 and FP9 definitely have some problems with memory management that make it excruciatingly difficult to manage memory, make sure objects are REALLY deleted, etc. I know that AS3, like Java, run off of a VM and have a garbage collector, and by definition, the VM should take care of itself. However, that doesn’t mean memory optimization has to be painful if not a downright nightmare as it is currently! I don’t know how it would work or what exactly to suggest that Adobe should do, but we need some tools to track event listeners and object references, as well as add a finalize() method to the Object class and its descendants as per Java. The event system in FP should be optimized to be weaker as well. *Note: Yes, I know about the useWeakReference field in addEventListener. I nearly always set it to true, and yet I have noticed that some objects simply won’t let go and be destroyed.
  4. Language Addition – Annotations
    Yeah, FP does have compiler meta-tags, but we as developers should be able to develop our own. I mean, Flex is a framework right? A framework should basically just run off of a platform and have no special requirements, yet Flex requires a special unique compiler and defines its own meta tags such as [Bindable]. If Flex can bind data that easily, why can’t we do it in strict AS3 without the Flex compiler?
  5. Player Standard – Ubiquity
    With the advent of FP10, we now have a bunch of GPU effects, Pixel Bender, 3D drawTriangles functionality, etc. However, these features are only supported on certain processors with certain graphics cards. Isn’t the purpose of Flash to provide a platform-independent runtime? This sounds an awful lot like Adobe is pushing Flash away from being the same on every OS and configuration to being a specialty runtime for certain CPUs and GPUs. This doesn’t make any sense, why enable a feature that’s not consistent on every computer? How do we use Pixel Bender? How do we know our target audience will have X processor and Y video card? Does anyone else see the problem in this?
  6. API Rework – Text API
    The flash.text package serves as a great starting point, but definitely leaves one wanting for more. The HTML reading capabilities of Flash Player have always been pretty weak. I think that Flash Player should have default support for reading all standard HTML tags the way that a browser would read them. What I’m hinting at is cross HTML/FP tag reading. If <img> does one thing in a browser, it should do the same thing in Flash. In FP9, <img> inserts a new Loader object with the url ready to load, but it inserts it on a new line. In a browser, this isn’t so, it only puts it on a new line if necessary. I’ve built a few chat applications where I had to use smilies and this makes it a nightmare. Whenever a user inserts a smiley, it automatically puts it on a new line. Text-wrapping around images has also been problematic.

Well, these are just a few things I’d love to see in AS4. Oh, by the way, does anyone know the status on AS4? I know that Tamarin was abandoned by Mozilla, but do we know what Adobe’s up to? FP10 is being released soon and we’re all stoked about it, but there is definitely a future for Flash beyond 10, and we should start pushing for features now rather than later!