I’m John C Bland II

Husband, Father, Tech Author, Deacon.
Founder of Katapult Media, and full-stack polyglot developer.
Political Free Agents Podcast Host.

I create. I launch.

YouTube Channel

I post regular fun on YouTube like me playing the bass and anything else I find fun. 

Get Something Built

All project work goes through Katapult Media. Business is open. Let’s chat.

Adobe Flash Media Server 4.5 Released

This is awesome news! FMS 4.5 brings a TON of features enabling CDNs and content producers to provide iOS support for live, including DVR, and a slough of other things. Just check the notes here:

Key New Features inside Flash Media Server 4.5

–        Same Source Video delivery to Apple Devices and Adobe Flash (single workflows to reach both platforms)

–        On Demand video packaging / segmenting for HTTP video delivery (no need to pre-package your content)

–        Set-level F4M Manifests and Variant M3u8 playlist support

–        Simple and robust content protection workflows for HTTP streaming (as easy as saying on or off)

–        Live PVR/DVR support for Apple Devices and Adobe Flash with Disk Management (don’t miss that special moment in live)

–        Support for Studio-approved DRM with Adobe Flash Access 3 (robust DRM that exceeds your requirements on Desktop and Android)

–        Multicast SSM and ASM, with Multicast re-broadcast

–        SIP Device support for communication

–        P2P support in Flash Media Interactive Server

Sweet stuff! Read more about it and to all of the CDNs…stop upgrading so slow. Get this puppy in production asap!

iPhone Packager apps are blocked…what next? #331rally?

Aight…Apple’s turned in 3.3.1 and I’ve accepted it. What next?

Adobe has publicly stated they are not removing the iPhone Packager from Flash CS5. This means people will still see the feature. It means they will use the feature. It means apps might still get pushed to the App Store.

The big question for those who are 3.3.1 aware: Should we still build iPhone apps with Flash CS5?

Let’s talk rally for a sec. Oh wait…maybe I should say: Good people of Flash Land…lend me your ears! 😉

(more…)

AIR 2.0: My Wishlist

I’ve been thinking about AIR a lot more lately and it prompted me to think about what 2.0 might provide us in ways of building better AIR apps. So, here is a short list of items I think AIR needs in order to make me happy.

  1. FTP support
    I know…AS3 provides the tools for ftp support and there are a few libraries started but stop depending on the community Adobe, for this one not everything. We need this natively in AIR. Maybe not SWF but AIR for sure needs this.
  2. External executable interaction
    In the simplest form I want to tell ApplicationX.exe or ApplicationX.app to run and pass parameters to it (blah.exe -param value). I know there are security issues and cross-platform compat’ issues but it’d be great if you figured this one out.
  3. Direct database interaction
    At a minimum MySQL, SQL Server, and Oracle. Make the core extensible so we, the community, can grow the available database support but lay the groundwork. You already have a solid sqlite core so build on top of that code-base and allow us to specify a type or something.
    Pseudo code:
    connection = new SQLConnection(SQLConnection.MYSQL, …)

    I know…buy ColdFusion right? Use PHP? .NET? Java? Nix those assumptions. If we want to use them, great, but not in all cases do we have a web server at our disposal. Keep making server integration better but don’t force a desktop app to use a server.

  4. Email Support
    This is just like the FTP support. I know you guys have the tools in place and say it is possible. Well, show us. Provide us with the tools to email directly from AIR. This is a serious need. We don’t need to setup a full web server just to send emails. In some cases, this isn’t possible or is utterly painful and takes forever (especially at big orgs).

    I should be able to use full smtp, pop, and imap. Those features would provide a TON of support for a solid number of AIR apps. In AIR 3.0 extend it to integrate with Exchange, etc. Heck, do it in 2.0 if you have the time. 😉

  5. External library interaction
    This is tricky but would blow my mind if it were possible. Basically let me instantiate a DLL , perl script, etc and have it do something for me. I know DLL isn’t cross-platform and the system may not have perl but those are things we, the developers, will have to account for in our own apps. Give us the rope…let us hang ourselves. 😉 No need to allow separate installs bundled with our app (like the .net framework or install perl) but at least being able to use outside code to fill the gaps where AIR lacks.

    If you provide this one, 1-3 above aren’t as important anymore.

  6. Webkit plugins
    Silverlight and Java at a minimum. It isn’t that I want to build a full blown browser or anything…I just want to be able to support the mass majority of sites out there. Think of the press, “Run Silverlight in AIR” would be all over the blogosphere. 😉 hint hint, wink wink. lol Ok…bad argument but it would still open AIR to a broader audience of sites.
  7. Better installation bundle
    We REALLY need to be able to default files to specific locations on install. Right now I can bundle config files with my app and on Windows they go to the location as bundled (ex – bundle in configs/ and on they are in [app folder]/configs/ on Windows) but on Mac they are embedded in the .app file. Someone has to know to view the package contents to get to it. Let me specify whether I want it bundled in .app or in a specific location.

    Yes, I know I can use AS to write the files or download then save but that shouldn’t be a requirement. We need more control over the installation.

  8. Multi-“version” export
    This one may be pretty specific but I need to export an AIR file pointing to the QA environment. Once it passes QA, I need the same build pushed to production now pointing to production resources. I’d really like a way to, in the export process, specify different builds. So, a QA build bundled with 1 config and a Production build bundled with another. I know I can simply do two exports right now but I’d prefer to have this functionality native to Flex Builder. This also includes 1 -app.xml vs another. QA may have a different app title or something. I’d like to export these builds accordingly without having to manually change things back and forth each time.
    Now, if the Builder option isn’t available, I’d like a way, on the server, to dynamically update an AIR file so the automated processes for pushing to production is seamless. This does not include building the source again, not a valid option. The process, in my case, is completely automated.

I’ll leave it at that. If AIR beefed up to provide most of these there would be an uproar of praise. If no one else uproared with me, you’d still have an army of 1 supporting you. 😉

Let’s see what 2.0 brings. 1.x has been great and I’ve enjoyed working with it but it is time to “beef up” in 2.0. We need much more than what AIR currently offers for true enterprise applications, heck even some small to robust apps need the above.

AS3: Converting Date() to the Epoch

The Flash Player uses the same epoch as Unix (January 1, 1970). An epoch is “a particular period of time marked by distinctive features, events, etc.” (source: Dictionary.com)

One thing to note is the date pertains to the UTC (univeral time coordinated: “Universal time, taking into account the addition or omission of leap seconds by atomic clocks each year to compensate for changes in the rotation of the earth.” [source: Dictionary.com]). Flash can handle this just fine. Let’s get to the code (starting to itch with all of these definitions).

One option to get the UTC date:

var now:Date = new Date();
var epoch:Number = Date.UTC(now.fullYear, now.month, now.date, now.hours, now.minutes, now.seconds, now.milliseconds);
trace(now, epoch/1000, Math.round(epoch/1000));

The only real thing to note is the epoch/1000 is there because Flash uses milliseconds and epoch is in seconds so we divide by 1000 to get the seconds since the epoch. Now, that is how I first did it until I RTFM (read the freaking manual). It felt so dirty and unnecessary. Here is the easiest way to do it.

var now:Date = new Date();
var epoch:Number = Math.round(now.valueOf()/1000);
trace(now.valueOf(), epoch); //1238595716133 1238595716

Notice the first trace shows a lot more numbers since it is milliseconds since the epoch. The second number is the epoch/1000 and rounded. Don’t forget to round or you’ll get three decimal places. Date.value() is the trick here. By definition: “Returns the number of milliseconds since midnight January 1, 1970, universal time, for a Date object.” (source: Adobe LiveDocs)

Anyways…that’s it. No need to pontificate (been wanting to use that word; lol) anymore about such a simple task.

UPDATE

Since someone on Twitter made the statement about getTime() I guess I wasn’t clear. Let me clarify.

The above is NOT the only way to do it. Yes, you can use new Date().getTime() or new Date().time (preferred over getTime() since it really is a property). They both yield the same result as new Date().value(). Dividing by 1000 and rounding is still required since we’re still fooling with milliseconds since epoch.

Thanks.

Accepted in Adobe Community Expert program

Yep, I’m accepted and STOKED! 🙂 I won’t get long winded but…

4 score and 7 years…{hrmm, clears throat}…wrong speech. 😉

Seriously, I’m excited and happy to be accepted in such a great program. I look forward to learning more about it and continuing my “community service” as I did when I was a UG manager.

Special thanks to Rachel Luxemburg and Sarge.