Bugs

Google Music

Posted in Bugs on June 17th, 2011 by Ian Ford – Be the first to comment

Dear Google,

I love Music Beta. Please fix this:

It doesn’t break the player, but it is a little annoying. It seems to happen when I pause the song I’m listening to.

Bugs and Quirks: Capabilities.playerType

Posted in Article, Bugs on January 17th, 2011 by Ian Ford – Be the first to comment

This isn’t technically a bug, but it is a strange quirk in ActionScript 3. I’ve discussed the Capabilities class before. I still like it. I still think it’s very useful.

I have one problem.

The Capabilities class has no public string constants. I was looking for an article or document explaining why you should use string constants, but I couldn’t find one so I suppose I’ll write my own later.

Anyway, most every other class that passes string values around uses constants to store those values. The Capabilities class does not. This results in code like the following:

if (pt == "ActiveX" || pt == "PlugIn") {
  //...
} else if (pt == "External" || pt == "StandAlone") {
  //...
}

Remember, it should be “PlugIn,” not “Plugin,” “plugin,” or “plugIn.” If you use any of the latter three your SWF will publish just fine without any compile errors to let you know something is amiss. It won’t be until your conditional fails to select either option that you start scratching your head wondering what went wrong.

I propose that adobe add a PlayerType class to the flash.system package. The class would simply contain four static values:

public static const ACTIVEX:String = “ActiveX”;

public static const PLUGIN:String = “PlugIn”;

public static const EXTERNAL:String = “External”;

public static const STANDALONE:String = “StandAlone”;

The benefit of having such a class is that as long as you used those values, if you committed a typo or some other minor error the compiler would let you know. Wouldn’t that be nice? I’ve submitted this as an issue in the Flash Player Bug management system. Go vote on it.

What The Font?

Posted in Article, Bugs, Flash, Typography, User Experience on November 1st, 2010 by Ian Ford – Be the first to comment

Dear Adobe,

I don’t know how else to say this, but I believe we have a problem. This has been troubling me to the point of, frankly, insanity for some time. I’ve struggled with this issue and tried to hold my chin up. I thought that I could just ignore the issue, or even find ways around it, but now I’ve had enough. We have a serious interface problem.

Consider the following as a general overview of what’s wrong:

The other day I was working on a project that called for some italicized text.

The font my designer chose, unfortunately, had no italic face available.

Of course, the PSD comps I received showed italics. Faux Italics that is. Because Adobe makes both Photoshop and Flash, I figured I could add faux italics to my text just as easily as my designer did.

Hmm….That’s unfortunate. Kerning. Color. Size. Anti-aliasing. Even (Bad) Superscript! No Faux Italics? Sorry Designer. Of course, for legal reasons we had to have italics.

How did we solve this problem? Easy (Tedious)! We exported every block of text from the PSD to a transparent .PNG file.

This was not a small project. We’re talking well over 30 screens of content.

It was only the other day that I discovered this:

Hey! Adobe! What the font!? Really? Why doesn’t this live with the rest of the font controls in the sidebar? Why do you maintain submenus for font family, size, and letter spacing when superior controls are available on the right in the more obvious sidebar location. Are you trying to drive me insane? Do you have any idea how much time has been wasted exporting transparent .PNGs because you decided to hide this obvious text control in the never-used-by-anyone-serious menu bar?

This demands a petition of some kind. I’ve submitted the following feature request to Adobe.

PLEASE PLEASE PLEASE consolidate the controls for Text Fields. I had no idea that Faux Italics and Faux Bold still existed because you buried them away in the menu bar rather than putting them in the sidebar with all of the other font controls. Why even have the text menu bar? Can we please move on?

If you agree, you can also request this change here: https://www.adobe.com/cfusion/mmform/index.cfm?name=wishform

A Tale of Two Agencies

Posted in Advertising, Article, Bugs on August 8th, 2010 by Ian Ford – Be the first to comment

The two images above both depict the “People” sections from their respective agencies websites. Pages like this are generally used, first of all, to name the important players in an agency, and second of all, to humanize the people you will hopefully eventually be paying for creative work.

What’s the significance of the juxtaposition of these two images?

The company in the first photo employs almost as many people as are depicted in the second.

Bugs and Quirks – Text Fields in Flash

Posted in Article, Bugs, Flash, Typography, Uncategorized on July 6th, 2010 by Ian Ford – 2 Comments

It’s time to speak about a problem that’s been troubling me for quite a while now. Flash CS4 (and certainly versions that precede it) seems to have major problems consistently and accurately rendering text. I’ve prepared some screen captures that demonstrate the problem.

Text Field Properties

It all begins innocently enough. I’ve created a text field on the stage and I move over to the properties panel to toy with it. In this case, the text field uses Arial Regular at 12 points as its font. It’s anti-aliased for readabilty, and it’s selectable.

Embedded Characters

Although I don’t expect that any of my viewers will be without Arial, I embed the font all the same. I make a broad selection of characters that should cover most if not all of my use cases for this text field, without embedding everything.

Editing Text

Now that I’ve configured my text field, I select it on the stage and put in some standard lorem ipsum to test my application with. Everything up to this point seems fine…

How Text Renders

…until I finish editing the text. Now that I have it selected, but am no longer editing it, everything has changed. Compare this screen capture to the one that precedes it.

This problem is not new. It’s particularly pernicious when you’re trying to align other objects with on-screen text.

Fixing as3syndicationlib

Posted in Article, as3syndicationlib, Bugs, Downloads, Flash, Libraries on July 2nd, 2010 by Ian Ford – Be the first to comment

Perhaps you, like me, have had a need, at some point or another, to parse RSS feeds in Actionscript. If so, then perhaps you’ve also stumbled across the generally wonderful as3syndicationlib developed by Mike Chambers and Christian Cantrell. For those of you who aren’t in the know, allow me to provide the following excerpt from the project’s google code page:

Use the syndication library to parse Atom and all versions of RSS easily. This library hides the differences between the formats so you can parse any type of feed without having to know what kind of feed it is.

These claims actually hold up pretty well…once you get the code running.

The problem is that the codebase was written specifically for development in Flex. While Flex is a great platform for certain projects, many of us still use Flash for a lot of the work we do, so a toolkit that relies on packages that are only available to Flex just doesn’t do it.

This problem is also no secret. It’s listed as an accepted issue on its project page. The problem is that the codebase apparently hasn’t been updated since December of 2006.  That’s no joke kids.

Fortunately, a solution was pushed forth from outside the project by a Mr. Martin Legris in the form of a bare implementation of the missing “DateBase” class that the syndication library looks for, as well as an edit to an import statement buried down in ParsingTools.as.

So if you, like me, have a need to consume RSS/Atom Feeds in Flash and need a solution that works, look no further. I present, to you, an updated version of the as3 syndication library with the necessary changes in place to begin using it out of the box in your flash projects.

The files are all available here.

Feature Request: 4 Digit Dates in RSS Feeds!

Posted in Article, Bugs, Foursquare, Social Media on May 26th, 2010 by Ian Ford – Be the first to comment

Earlier today I posted about a strange bug I was encountering while trying to parse an RSS feed of my foursquare check-ins. I posted a complaint about the issue and received a prompt reply:

bauserdotcom replied 44 minutes ago

The dates in the RSS feed aren’t wrong, technically. They’re just not formatted according to best practices.

Foursquare’s RSS feed is using 2-digit numbers for years (which is valid, but not recommended, according to the RSS 2.0 Specification). How the RSS-reading agent interprets a 2-digit year is up to the agent. Whatever software you’re using decided to interpret it as 1910, which an interesting choice, since RSS didn’t exist in 1910.

So what we have is a case of two legal-but-unwise programming approaches creating a mess. Hard to say who’s most wrong, you know?

Fair enough. This is all well and good, and if I were simply reading the items one by one I would be quite able to understand that a year of “10″ actually means 2010. The problem rears its ugly head when I try to parse these dates in Flash. Consider this selection from the constructor for Flash’s built in Date class:

yearOrTimevalue:Object — If other parameters are specified, this number represents a year (such as 1965); otherwise, it represents a time value. If the number represents a year, a value of 0 to 99 indicates 1900 through 1999; otherwise all four digits of the year must be specified. If the number represents a time value (no other parameters are specified), it is the number of milliseconds before or after 0:00:00 GMT January 1, 1970; a negative values represents a time before 0:00:00 GMT January 1, 1970, and a positive value represents a time after.

As you can see, two digit dates in the constructor for Flash’s date class are interpreted as years since 1900, not 2000. The only fix available to me is to inspect every item of the feed I’m loading (since these are being aggregated into one giant list of items) to see if the publication date is sometime in the 20th century. Great.

Of course, I’m not all sour grapes. I just posted an “idea” on Foursquare’s “Get Satisfaction” page.

Bugs and Quirks: Foursquare Weirdness

Posted in Article, Bugs, Foursquare, Social Media on May 26th, 2010 by Ian Ford – Be the first to comment

Today I was working on aggregating some RSS feeds for a project I’m working on using the wonderful (if dated) as3 syndication library when I ran into something very odd. I had just added my foursquare check in feed (I am no longer on foursquare) to the list of feeds to aggregate and was examining the dates and links for each feed item to verify that they were being sorted properly. Within a date sorted list, all of my foursquare check-ins (including ones from the last couple days) were at the bottom of the list.


Thu May 26 08:14:41 GMT-0800 1910 http://foursquare.com/venue/519340
Wed May 25 12:06:31 GMT-0800 1910 http://foursquare.com/venue/519340
Wed May 25 12:03:42 GMT-0800 1910 http://foursquare.com/venue/519340
Tue Mar 29 18:54:29 GMT-0800 1910 http://foursquare.com/venue/128782
Tue Mar 29 18:53:42 GMT-0800 1910 http://foursquare.com/venue/237966
Fri Mar 25 22:39:16 GMT-0800 1910 http://foursquare.com/venue/3540
Fri Mar 25 12:23:59 GMT-0800 1910 http://foursquare.com/venue/119722
Fri Mar 25 12:23:13 GMT-0800 1910 http://foursquare.com/venue/229509
Fri Mar 25 12:22:41 GMT-0800 1910 http://foursquare.com/venue/519340
Wed Mar 9 22:49:25 GMT-0800 1910 http://foursquare.com/venue/629305
Thu Mar 3 12:54:00 GMT-0800 1910 http://foursquare.com/venue/159429
Thu Mar 3 12:53:11 GMT-0800 1910 http://foursquare.com/venue/519340
Sat Feb 12 13:14:31 GMT-0800 1910 http://foursquare.com/venue/519340
Thu Feb 3 12:26:13 GMT-0800 1910 http://foursquare.com/venue/519340
Tue Feb 1 23:24:02 GMT-0800 1910 http://foursquare.com/venue/629305
Sat Jan 29 11:58:25 GMT-0800 1910 http://foursquare.com/venue/519340
Thu Jan 27 13:03:56 GMT-0800 1910 http://foursquare.com/venue/519340
Wed Jan 26 12:03:02 GMT-0800 1910 http://foursquare.com/venue/519340
Sun Jan 23 23:10:22 GMT-0800 1910 http://foursquare.com/venue/429251
Sun Jan 23 13:16:33 GMT-0800 1910 http://foursquare.com/venue/119650
Tue Jan 18 19:09:06 GMT-0800 1910 http://foursquare.com/venue/455620
Fri Jan 14 09:19:11 GMT-0800 1910 http://foursquare.com/venue/519340
Tue Jan 11 13:49:40 GMT-0800 1910 http://foursquare.com/venue/519340
Sat Jan 8 20:51:43 GMT-0800 1910 http://foursquare.com/venue/34011
Sat Jan 8 13:01:02 GMT-0800 1910 http://foursquare.com/venue/519340

Notice anything odd there? Why are all my foursquare feed items dated 1910? Am I really going to have to add an exception to add 100 years for any feed item from foursquare? Really? I reported the issue at Foursquare’s “Get Satisfaction” page. Maybe somebody will respond?

Bugs and Quirks: SWFStudio 3.7 and Windows 7

Posted in Article, Bugs, Downloads, SWF Studio on March 27th, 2010 by Ian Ford – 3 Comments

I spent the last week or so developing a kiosk application for a client that had to prevent users from exiting the application using ctrl+alt+delete, alt+f4, or any other such method.

Because I had worked with it in the past for a similar project, I advised the client that we could use Northcode’s SWFStudio to lock the application down and to record registration data without requiring an internet connection. This should have all been very simple. Create the application, load up SWFStudio, and convert my final SWF to an EXE with all the parameters configured.

In practice things weren’t so simple. You wouldn’t know this unless you dug around, but SWFStudio 3.7 doesn’t play nicely with Windows 7, and for the $300 licensing fee you’d hope they would take the trouble to make this point more prominent. To give you an idea of this problem, I’d like to demonstrate the sequence of steps you need to complete to figure out why your perfectly functional kiosk craps out after you push it through SWFStudio.


Step 1

First, you have to go to Northcode’s website. When you get there, click on the “swf studio” link at the top of the page. Don’t click “blog” and whatever you do, don’t click “support.”


Step 2

Once you get to the “swf studio” page, click to continue reading the article on making your applications work with Windows 7. Don’t bother with the “Known Problems” link in the side bar, as even though they thought to post an article about the issue (separate from their blog and their support page no less), it’s not a problem they’re aware of.


Step 3

You’re almost done! You’ve found the document explaining how to fix your problems in Windows 7. Of course, there’s no patch or software update. You have to copy the grayed out text above into a panel in SWF Studio to get everything functioning properly.

What makes me even angrier about this is the text of the article. The summary, shown in step 2, contains the following text:

Windows 7 adds support for a new section in your application manifests called Compatibility and if you want your SWF Studio applications to behave properly on Windows 7 then you’d better pay attention!

They even use an exclamation mark! I’d better pay attention if I expect their $300 application to function correctly. That might even be ok if they displayed the information prominently on their homepage, or in any of the sections you’d expect it to be in. To give you an idea of how poorly placed this content is, as I was sitting down to write this post it took me 15 minutes digging around their site to find the document in question again.

For my own satisfaction, and for the sake of anybody else who runs into problems with this software, I’ve taken the following liberties:

  1. I’m offering this code to you below so there’s a second place to find it if anybody ever needs it.
  2. I’m offering this code for download so you can keep your own copy if need be.
  3. I’m recommending a slight redesign to Northcode’s home page.

The code looks like this.

<br><br>&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;<br><br>&lt;assembly  xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"&gt;<br><br> &lt;assemblyIdentity  version="1.0.0.0" processorArchitecture="X86" name="stub.exe"  type="win32" /&gt;<br><br> &lt;description&gt;stub&lt;/description&gt;<br><br> &lt;dependency&gt;<br> &lt;dependentAssembly&gt;<br> &lt;assemblyIdentity<br> type="win32"<br> name="Microsoft.Windows.Common-Controls"<br> version="6.0.0.0"<br> processorArchitecture="X86"<br> publicKeyToken="6595b64144ccf1df"<br> language="*" /&gt;<br> &lt;/dependentAssembly&gt;<br> &lt;/dependency&gt;<br><br> &lt;trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"&gt;<br> &lt;security&gt;<br> &lt;requestedPrivileges&gt;<br> &lt;requestedExecutionLevel  level="asInvoker" uiAccess="false"/&gt;<br> &lt;/requestedPrivileges&gt;<br> &lt;/security&gt;<br> &lt;/trustInfo&gt;<br><br> &lt;compatibility  xmlns="urn:schemas-microsoft-com:compatibility.v1"&gt;<br> &lt;application&gt;<br> &lt;!-- the ID below indicates the application supports Windows 7  --&gt;<br> &lt;supportedOS  Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/&gt;<br> &lt;/application&gt;<br> &lt;/compatibility&gt;<br><br>&lt;/assembly&gt;<br><br>

You can download a file with this information here: SWF Studio Manifest for Windows 7 Projects

And my suggestion for a redesign of Northcode’s homepage is below.


The Corrected Northcode.com!

Bugs and Quirks – RichFLV Metadata

Posted in Article, Bugs, FLV, Tips, Video on March 1st, 2010 by Ian Ford – 4 Comments

If you’ve been reading things around here recently, you may recall that I posted an entry filled with glowing praise for RichFLV. I had been aware of the application for some time (it was one of the first AIR apps I saw receiving significant praise/attention), but had only started using it several weeks prior in my own development efforts.

In the time since then, my company began making heavy use of RichFLV for a large project I’ve been developing. The project required tons of external video and animation, and I had decided that the best way to synchronize the two was to use FLV embedded cuepoints as controllers for external SWF content (FLV, SWF, cuepoint -> frame label). Because of the volume of video we’ve been dealing with (around 2gb), the idea of being able to dynamically modify cuepoints without having to rebuild video seemed like an obvious win for us.

To say the least, there have been complications. I have three complaints with RichFLV at this point. One of them is a minor inconvenience and the other two are potential deal breakers.


Really? No Native Drag and Drop?



The first problem is quite simple and amounts to more of an inattention to detail than anything. RichFLV doesn’t support native drag and drop for playing video files. It may sound like I’m nitpicking, but when you’re dealing with several hundred video files buried in a complex folder structure, having to go to the “file -> open” dialogue to change files becomes a quick annoyance.


Cuepoint Confusion?



The second problem is that, once in a while, RichFLV completely screws up your cuepoints. On the one hand, it will often duplicate cuepoints at incorrect time codes (see cue12, appearing twice, the first of which has the same timecode as cue 11), and on the other hand it frequently refuses to designate cuepoints correctly as event or navigation points (see the final cue12). Generally we give our cuepoints distinct, meaningful names so that when they fire we can respond to them intelligently. It’s easy to see how the problems highlighted above prevent that.


Funky Metadata?



The final problem has to do with the metadata that RichFLV generates. There’s a little bit of backstory required for this one.

At the same time that this project was starting, I and my colleagues had taken an interest in the Open Source Media Framework and had planned to build a new video player around it to use with projects in the future. The inclusion, specifically, of Parallel and Serial media elements built into OSMF seemed like a great fit for the needs of this project. We decided to proceed with development of our video player and to deploy it in this project as it reached a usable state.

It didn’t take long before we were having major problems (with our Video Player!). We were consistently unable to get the OSMF to play videos with embedded cuepoints, even though we’d seen plenty of examples of it doing just that. The specific error we were receiving was as follows:

Error #2044: Unhandled AsyncErrorEvent:. text=Error #2095: org.osmf.net.dynamicstreaming.DynamicNetStream was unable to invoke callback onMetaData. error=TypeError: Error #1034: Type Coercion failed: cannot convert Object@3ca86769 to Array.

You’ll notice that the framework was unable to correctly invoke it’s “onMetaData” handler. Generally when you deploy video in Flash, you first wait for metadata to be made available so you can scan it for important information about the file, and for information about cuepoints. When attempting to playback FLV files in which cuepoints had been embedded with RichFLV, we received this error every single time. In fact, it didn’t even matter if we went back and stripped all of the cuepoints from the video. Once RichFLV touched the metadata, the video was effectively “broken.” We struggled with this error for days before eventually dropping the idea of moving forward with OSMF. Instead we had to fall back on another (self-created but very outdated) video player to complete the project.

Now, I have little (if any) experience with generating or encoding video, but I was so frustrated by all of this that I spent some time today digging  through the flv file format specification. The first thing I noticed was that RichFLV was providing incorrect values for the CodecID property of the FLV file format (specifically 4 for On2 VP6 rather than 5 for On2VP6 with alpha). Furthermore, I discovered that if I reencoded my FLVs using Adobe Media Encoder (which should understand the FLV format) rather than RichFLV, all of my problems disappeared. Go figure.

None of the above is necessarily meant to dissuade you from using RichFLV if you find it useful. As far as I can tell, the original developer hasn’t released a new version of it in well over a year, and this thing has been around since AIR was still called Apollo. Hopefully these bugs will get more public attention and the developer will be prompted to update the app or disseminate the source code so somebody else can pick up development on what otherwise has been a great and useful application.