Posts in category 'hacking'
In The Hopper
Yes, believe it or not, I have a hopper. I never empty the hopper, but the hopper exists, and there are items in it. Usually the hopper is overridden with work concerns, be it actual, day-job work, or the consulting stuff I do on the side. Or it may be overriden by more immediate, viceral concerns: sleeping, eating, and so forth. But given it’s the Christmas season and things are slowing down a bit, it’s possible… just possible… I might be able to work on some items from the hopper.
First on the list? Earn myself a Blackberry PlayBook. They currently have a very simple developer contest: Get an application approved and published in their app store by February first, and you get a free PlayBook. A free $500 tablet? Sounds good to me! I’ve already got the SDK installed (the first SDK released is based on Adobe’s AIR platform), and the simulator up and running, so now I just need to start coding. The current plan is a recipe manager application… ‘course, I just need to decide how to present such an application on a tablet device. Fun!
And the second item? Update savsender to build against the latest devkitarm. And while I’m at it, get the code up on github. This was triggered by an email I received back at the end of October asking for an update, and given how simple the codebase is, it’s a request I should be able to fulfill during my spare time.
So, here’s hoping this is a productive Christmas! Assuming I don’t just sleep my way through it…
Hacking the PlayBook
So, hopefully here begins a series of posts on coding for the Blackberry PlayBook. In this first post, I’ll talk a bit about the PlayBook itself, and the SDK currently available.
Unlike previous Blackberry hardware, which has traditionally run their custom embedded Blackberry OS, the PlayBook is the first BB device to run their new OS based on QNX, a realtime Unix variant that’s been around for nearly 30 years, now. My guess, based on various reading, is that Blackberry feels this new platform will scale better on the new embedded hardware that’s hitting the market, particularly the multicore devices everyone is anticipating.
As such, they plan to offer three different SDKs:
- A Java SDK, which I presume will offer compatibility with their existing Java kit on BBOS.
- A native QNX SDK, so you can write bare metal applications, such as games.
- An Adobe AIR SDK.
As of this writing, the AIR SDK is the only platform available, a move that, I suspect, reflects a desire, by Blackberry, to migrate developers to that environment (and more importantly, reflects Adobe’s goal of becoming the application development platform for the mobile space).
On Linux, the kit comes as a number of parts:
- Flex Mobile, a cross-platform kit for developing Flex applications running on the AIR runtime.
- Blackberry’s Flex kit, which contains the various Flex libraries needed to build PlayBook applications.
- A simulator, which comes in the form of an ISO which is meant to be coupled with VMWare Player.
Of course, if you live in a Windows or MacOS platform, you also get to take advantage of Flex Builder, but alas, it isn’t available for Linux. That said, since the GUI designer tools in Flex Builder don’t work with the PlayBook GUI elements, it’s utility is far more limited, mainly to providing integrated help, code completion, and so forth, none of which is strictly necessary to developing for the PlayBook.
As for Flex/AIR itself, the language is ECMAScript, which is compiled down to SWF’s, which are then packaged up by the Blackberry toolchain, and can then be installed on the simulator.
In my next post, I’ll cover compiling the venerable HelloWorld sample on Linux, and getting it running on the PlayBook; while this is actually quite easy to do with the command-line tools, it took a little bit of hunting around to find the proper incantations to make it happen.
After that, I’ll do a little work to dissect the HelloWorld app and write a bit about my first impressions on the kit.
Interesting Stuff! Stay tuned for more Tales Of Interest!
As If I Didn't Have Enough Hobbies
People who know me well know I’m rather obsessed with music. I love listening to it, I love singing, and I love playing it (mainly on my accoustic guitar, and badly at that). But my playing has always been of the incredibly amateur, self-taught variety… ie, I can fingerpick a simple song or play a decent set of chords, but dear god don’t ask me to improvise on the spot.
That said, I do sometimes find myself plucking out melodies and playing around a bit with composition. Nothing serious, mind you, and entirely ephemeral, as I never actually record what I’m doing, but I do enjoy the activity, as I find it incredibly organic and instinctive.
Well, recently, on a whim, I decided to see what was available for music composition applications for my Touch. If you’ve actually read anything on this blog (and odds are you haven’t), you may have heard I picked up a 4g iPod Touch recently, and have been having a great time discovering great applications for making my life easier (Appigo Todo, Trunk Notes, and a ton of others). Well, it turns out there’s also an absolutely unbelievable DAW for iDevices: NanoStudio. And by unbelievable, I mean a full-blown music studio sporting:
- A powerful drum machine that supports 2 tracks and 4 buses, with a ton of options for pad configuration.
- 4 full synthesizers with 10 different effects available (and 128 stock presets), X-Y pad controls, a pitch wheel, and a patch panel for tying them all together.
- A complete multitrack sequencer.
- A mixer for adjusting the levels on all these lovely things.
- Support for resampling output, which you can then tie back to the synth or drum machine.
- Probably tons of other stuff.
And because it’s all done via a simple touch-based interface, the workflow is dead simple and incredibly natural. And being portable, it means you can compose wherever and whenever you feel like it.
Suddenly I feel unleashed! Creating music on this thing is unbelievably easy… instead of my clumsy hands limiting my creativity, the only thing stopping me is my brain and my need for sleep (and, I kid you not, killing time with this is way too easy… like, hours disappearing without my noticing).
So if you’re at all interested in music composition, check NanoStudio out. At $15 it’s an absolute steal. And going forward, the author has plenty of enhancements in the hopper, not to mention a full iPad version in the works (quite honestly, this might be the killer app for me that triggers my investment in an iPad).
ColdFusion Tip Of The Day - CFCs Are *Objects*
So I have the “pleasure” of working on a couple ColdFusion projects on the side. The thing about ColdFusion is it’s a lot like Perl: wonky syntax, often used by total amateurs, and can be horribly abused to do really bad things. And guess who primarily uses ColdFusion? Yeah… total amateurs.
As a beautiful example, let’s consider the CFC, or ColdFusion Component. This concept was added to ColdFusion in order to add modularity and object orientation to what was, frankly, a largely procedural programming mish-mash. And it does a pretty good job:
- It provides mechanisms for encapsulation.
- It encourages code reuse.
- It encourages documentation.
Well, assuming it wasn’t being used by amateurs. See, a CFC can, and should, be used like a real object. But let’s say you’re a dumbass who doesn’t understand object oriented programming. Well, in that case, you might do something really stupid, like use a CFC as just a container for a bunch of utility functions that are only loosely related. For example, you might do something stupid like:
<cfcomponent output = "false"> <cffunction name = "init" access = "public" returntype = "myType"> <cfreturn this> </cffunction> <cffunction name = "firstThing" access = "public"> <cfargument name = "Datasource" type = "string" required = "1" /> ... </cffunction> <cffunction name = "secondThing" access = "public"> <cfargument name = "Datasource" type = "string" required = "1" /> ... </cffunction> <cffunction name = "thirdThing" access = "public"> <cfargument name = "Datasource" type = "string" required = "1" /> ... </cffunction> </cfcomponent>
See, because this person is a moron, they don’t understand the concept of instance variables. A smart person would stuff the datasource into an instance variable, and populate it when the object is initialized. A complete moron would just pass the same parameters in over and over again because he or she is a god damned moron who shouldn’t be allowed near a computer, let alone permitted to program one.
Bonus tip: Naming arguments to a function “table1”, “table2”, “table3”, etc, should resulting in the “developer” being dragged into the town square, tarred, and feathered.