Blog

  • PodCasting is Hard

    PodCasting is hard… not the recording part, however. I’ve been recording myself on cassette tapes since I was 4, long enough to forget how to spell cassette and being forced to utilize my Firefox Dictionary.com shortcut as brain backup. I’ve been messing with homeade & mouth-made foley my entire life, and put those Larvell Jones wannabe skills to work during college for all kinds of sound effects. I’ve mixed loops into music for a TV commercial professionally. I know how to record audio on the computer.

    No, what I’m talking about is publishing your podcast; allowing the world to hear your mp3 in whatever it is they use to play mp3s. This stuff should take 1 click, Jeff Bezos’ coke-binge-patent be damned.

    Say you decide to forego bungie jumping with a fist-sized fishhook in your mouth with the slack wrapped around ye wrist and attempt instead at getting your PodCast into iTunes. Aye, now there is a valiant endeavor worthy of any geek worth his salt. :: loads gun ::

    First, you’re existing blog software won’t work. LiveJournal? Nope. Blogger? Nadda. MoveableType? Perl ate your baby. Acknowledging that PodCasting is newer than new, as if you knew, you must proceed to force the technology that has already proven itself a fantastic voice for the masses, allowing them to spread and share ideas together in an online community (blogs if the sarcasm went so far over your head to crash into the mars rover… sorry rover-dude!) … must now be tweaked to go in a different direction merely for the sake of a fileformat. In this case MP3 because changing iTunes preferences JUST to republish to AAC is a time consuming process. Besides, I like Germans. …and please don’t tell me Germans had a hand in creating AAC too, the road was long and hard enough just getting here. The last thing I need at this juncture is a fork in the road. :: pops in clip ::

    There happens to be a blog hack website which even offers a copyrighted name, SmartCast. It’s called FeedBurner, and the common theme it shares with the rest of Web 2.0 sites is the utter lack of, “Here’s what the f*** I do and why you should give a s***.” To hades with the pleasantries! This is the social networking revolution, and all of those sites know that 90% of their users are going there because their tech-friends already told them about it, thus negating the basic need for explainging exactly what your site does and why I should care. Yes, we’ve transcended to an internet plane which Jakob Neilsen was the avatar for. Hallowed are Ori! :: pulls back slide ::

    Funny thing about MoveableType, is that every version is a surprise. Like Cracker Jack. Only the prize is free blogging software EVERYTIME with slightly different, unexpected functionality and instead of being packaged with a jolly, ghost-pale blue-clothed sailor it’s the vice Uncle Fester had as a kid, all yellow with a 3 letter name, “ZIP”. While her majesty went on a windowed safari in Safari (What are these “tabs” you speak of?) through the wild world of PodCasting tutorials that assume you juiced up on THC & JD, with such mantra’s as:

    “Repeat after me… you have the capability… not to drool… in public.”

    “Wow man… cool… I can do that… you know, man… I can do that!”

    …I was off to solve it a programmers way; via a plug-in! Past experience has defiled the metaphor, somehow metamorphosed “helpful add-on tool” into “monkey wrench”, but, leave it to parse-mesiter-Perl to parse a cute, harmless little monkey into a :: 10 octaves lower :: MONKEY WRENCH OF DOOM!!! MUAHAHAH!!!!!!!

    Apparently the Enclosures plugin was DOA. No logging of errors, and my RSS 2 file hadn’t even heard of any, “En-clow sur” before. First time for everything… but not today. *click* *click* *train sound* file deleted. :: slide locks into place, bullet enters chamber ::

    So, I dressed up like Eminem, donned my num-chucks, and head to the forum jungle. Quite strange things in the world of forums… such as forums. They’re weird. People use them. They physically go places to utilize smilies and block tags vs. having content pushed to them. Perhaps the effort makes it more worthwhile? The common consensus was, “Use Blogger, Use FeedBurner, Use iTunes”. So, Blogger bloggy weblog setup. Feeling a little randy, so setup an account for FeedBurner too. Still not sure what it does, but it’s just a gateway drug, and I’m here for the adrenochrome. Frustrated by my progress, I scoured the cabinents and found some Blue Agave distilled into a urine colored substance, that tasted even worse. The pain was strong, but Utilarianism shall prevail… with a little help from my hombres.

    Blogger post? Check. FeedBurner SmartCast? Check.

    …iTunes fails to see “episodes”.

    Try MoveableType entry, and register it into FeedBurner.

    …iTunes fails to see “episodes”.

    Download 4 meg MP3 from Dreamhost to my comp, disinfect Dreamhost’s suck, polish, and re-upload to my Atlanta server running on Windows with 10 billion MIME types.

    …iTunes fails to see “episodes”. JesterXL attacks iTunes, rolls a 4. Misses. :: raises gun to head ::

    Re-save MoveableType & Blogger entries. Her majesty forum posts. Motivational Speaker’s son answers, gives recommendations + side suggestion, non-chalant not so important as to appear trivial, yet important enough to give 2 line breaks before it’s inception into post.

    Remove spaces from file name.

    …iTunes gets 500 error from MoveableType feed.
    …iTunes successfully reads Blogger feed.

    By this time, I’m completely inebriated by some 14 year-old squeezed cactus liquid and start giving lewd, suggestive looks at my larger-than-lifesize Halo 2 cut out. It must of been the dual-weilding bullet hoses, but I just started to pass out… later to find out I tripped on one of my sleeping dogs and banged my head on my desk. You should still adopt a Cactuar, though.

    Anyway, at my wits end, and out of pimp juice, I get bored and change the MoveableType feed URL from rss to atom, just like the Blogger one, in FeedBurner.

    …iTunes successfully reads MoveableType feed. Dreamhost attacks iTunes. Rolls 18. Hits. Dreamhost’s sub-domain falls off, and writhes violently upon the dungeon floor. :: puts pressure on trigger ::

    *ding* *dong*

    Email? It’s only been 1 minute since my last 4 spam messages… apparently Apple has accepted the PodCast into iTunes, and is going to approve it. So, you can get into the club, but the bouncers will gang bang you at the coat check. “Whoa… a mink! Soft…”

    There have been 2 reasons blogs were successful. Easy to publish, and easy to read via aggregators. PodCasting needs to be made easier to publish. I’m not the smartest geek on the block, but f’me, that’s just ridiculous. I fail to see why the tech world has to plummet into chaos when someone chooses to publish their words as digital waves vs. digital text. Considering the rate of change, hopefully I’ll only have to wait a year. Just in case, I’m going to get more Blue Agave… and adopting a Cactuar. I hope when I actually decide to try my own hand at a PodCast vs. helping a friend, it is easier to do so.
    :: unloads and disassembles glock ::
    :: no disassemble number 5 ::

  • Flex 2 States: Expanding Pod – ActionScript vs. MXML

    One of the new features of Flex 2 is states. It allows you to declaratively define the state of a component. Flash Developers used to do this by using different frames for MovieClips in Flash. Since the timeline paradigm doesn’t exist in Flex, you had to use copious amounts of Effect ActionScript and/or ViewStacks to have a component have multiple states. Programmers would do the same thing in Flash too, using Tween engines like Animation Package and Laco Tween, abandoning the timeline entirely. Still, it was clear that Flash Developers had the edge.

    The biggest issue here is that MXML offers a way to significantly increase code portability, reduce the amount of code written, and cleanly separate concerns. Once you started to fallback into pure ActionScript, you started to lose those benefits that MXML offered. You didn’t really have a choice before Flex 2.

    For example, the typical ActionScript class has an import statement up top identifying the View control you wish to use. It then has some sort of init function to create the control and assign it default properties and add events. In another area is additional code to size the control based on it’s parent form resizing. Finally, there may be changes to it such as loading a new image into an image control as the result of a button click. This is 4 different places in code each operating on the same control. MXML helps centralize this into 1 tag.

    For example, here is a common ActionScript 3 UIComponent class (psuedo code).

    package
    {
            import mx.controls.Button;
            import mx.containers.Canvas;
            import flash.events.MouseEvent;
            
            public class MyForm extends Canvas
            {
                    
                    protected var my_pb:Button;
                    
                    public function MyForm()
                    {
                    }
                    
                    override protected function createChildren():void
                    {
                            super.createChildren();
                            my_pb = new Button();
                            addChild ( my_pb );
                            my_pb.addEventListener ( MouseEvent.CLICK, onClick );
                    }
                    
                    override protected function updateDisplayList( unscaledWidth:Number,
                                                                                          unscaledHeight:Number):void
                    {
                            super.updateDisplayList(unscaledWidth, unscaledHeight);
                            my_pb.width = width;
                    }
                    
                    protected function onClick ( event : MouseEvent ) :void
                    {
                            // do something
                    }
            }
    }
    

    The thing that I think most ActionScript programmers have gotten their eyes trained to do is all “things used” are up top, defined in the imports. All things created GUI wise are somewhere near the top. All things initialized are usually in the same place as where they are being created. Finally, event handlers to respond to such things are near the bottom, mired with the rest of them.

    MXML enters the picture, and throws a few for a loop. For example, the above, only done in MXML instead:

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Canvas xmlns:mx="http://www.macromedia.com/2005/mxml">
    <mx:Script> <![CDATA[
    protected function onClick ( event : MouseEvent ) :void { // do something }
    ]]> </mx:Script>
    <mx:Button id="my_pb" width="100%" click="onClick(event)" />
    </mx:Canvas>

    Significantly more compact. Additionally, it’s a lot easier to rip out the Button, and replace it with, say, a DateField all in 1 line of code. The only thing I DID keep was my event listener. However, again, the imports are gone… so who’s used? The creation is implied by putting the tag, so suddenly, you don’t have that comfort zone of seeing things clearly created. Finally, there is no sizing code; it’s relative to what container the control is in and what his x, y, width and height properties, if any, say.

    Again, though, it’s really hard to have an appreciation for how much more centralized this model is if you haven’t written it by hand in AS for a long time. Changing the type, id (like an instance name), position, size, and event handlers are all done in the same place. This is a big change.

    However, one thing you’ll notice is it is implied that the button is, forever after “there” and in the same state. Yes, you can apply effects to it, but it never disappears, and unless you bind, say, it’s label property to something, for the most part it never changes. …and that, my friends is what a lot of HTML interfaces do. Rarely if ever changes. They are a lot of times stateless, there for the explicit purpose of gathering data.

    …but this is running atop the Flash Platform, and ultimately the Flash Player. We have room to move, grow, and the ability to change the GUI while keep the data intact and easily attainable. AJAX has helped significantly improve this for HTML without negatively affecting the rest of the HTML page, or app. It can be applied, even gregariously, and still be self-contained to improve certain portions of an app.

    Flex 1.5 and AJAX still both suffer from the need of copious amounts of scripting to handle more than your average GUI change such as toggling DIV visibility or ViewStacks in Flex. To make a certain control / component have multiple states usually involves making it up of other smaller controls… or a lot of code whose intent is immediately apparent.

    Enter states in Flex 2. Now you can significantly reduce the amount of code required to have a GUI control have many states, the intent of the MXML is clear, and centralized enough that it is orthogonally designed. States in MXML are declarative, meaning you write tags that clearly name their state, and what they are based on if any. You have the option of defining transitions, which are like effects, that allow you to more eloquently and clearly change from one state to the other. Taking advantage of the centralized nature of MXML, you can also change the GUI without affecting the states or transitions. You can change the states without affecting your core GUI. You can change your transitions without negatively affecting your GUI or states. Pimp.

    This gives you a lot of flexibility, and lessens the need for in house Flash talent to get those challenging state changes… or hours of Herculean coding.

    There are 4 basic ways to states in Flex allow you to change the component. You can add additional components, remove existing ones, change property values, change styles, and change event handlers. This is included with all the existing abilities to bind controls’ properties to data as well as having control of their creationPolicy. You even get events of when a state has started to change, when it’s done, and while it’s changing. You can use this to make sub-states for complex changes to allow one state change being completed to start the GUI automatically to change to another state. For example, if you minimize a window, you can have your GUI automatically change to the “hidden” state for example.

    Transitions are cool because writing effects to handle the above usually involved registering for completion events, and ignoring the potential race conditions of a Fade maybe finishing after a Resize. While Effects do have the Sequence and Parallel classes to help this, you still have to setup functions to respond in the correct order after a specific state change.

    Transitions are built for the sole purpose of melding state changes and effects easily and flexibly. You can create them explicitly to happen when one specific state changes to another, or when any state changes at all.

    The example I did was re-creating the old Macromedia Central ExpandingPod. I originally did this last December to see how the new Flash 8 effects worked in Flex. You’ll notice there was really no point of me using MXML at all since the entire component is created via code. I redid it this weekend, ExpandingPod2, to utilize states. I originally thought that compared to say, ViewStacks, that it’d actually make MXML verbose and worse than the ActionScript, but in practice, I was wrong. It feels really good to have these things clearly separated; my state change from my transitions. In the ActionScript example they are all intertwined, and not very flexible, nor is it very clear where you can play to tweak things. The MXML version ended up being less code overall, too, which is nice.

    This example also showcases Scale9 usage in Flex 2. The background pod image is 1 bitmap that does not scale the borders nor the corners. That way, I can have 1 bitmap instead of 1 sliced up into 9 pieces. Waldo Smeets has a better image example here.

    All this example shows state wise is the change property state change tag. I did not add any other controls, nor remove them, nor change styles, nor change any event handlers. I think I’ll save the more complex sample for a later week; the most cliché control that every Flex developer tweaks… the Panel. Since everyone views them as windows, I’ll try to build an example that uses a more advanced example of adding and remove children.

    In conclusion, the thing to look at here is the amount of ActionScript used in ExpandingPod.mxml, and compare to the way states are declaratively used in ExpandingPod2.mxml. Same control, different way to get the same result using the new “states” feature in Flex 2. If you click on View, you can also right click and View Source.

    ExpandingPod (Requires Flash Player 8.5 beta)
    View | Source

  • Dungeons & Dragons Online: Stormreach

    I purchased Dungeons & Dragons Online: Stormreach Saturday evening before catching Ultraviolet. Upon creating my account and logging in at midnight, ALL 14 servers went down at the same time. Upon reading the forums the predictable bitching, threats, and sarcasm ensued. The posts grew at a exponential rate in response to the vague “we don’t know why all the servers went down, we’re currently investigating” announcement.

    I figured, however, that this was a good sign. Star Wars Galaxies had a lot of server glitches in their initial 6 months with a scathing forum used as the sole place for customer support, announcements, and feedback. Additionally, I had gotten beta notices months ago about 3 distinct server peak tests so I had assumed it was either a code problem they knew about already (since they were taking them offline Tuesday for half of the day), or that all of the TV advertisting starting from Sci Fi Friday coupled with Spring Break meant they were vastly overwhelmed in the amount of players.

    However, upon logging in, there was a lot to be desired. Some are my opinion but some are fact. For starters, there are no text bubbles. This has been debated since the days of Ultima Online & Everquest. Ultima Online had text that you spoke that would appear over your head. This gave you context to who spoke, and clearly defined (expect in a crowded town) who was saying what, and when. You could view the chatlog if you missed something. Everquest didn’t have this and made the visual part of the game really lacking because you interacted with this horribly ugly chat text window littered with colors to seperate content. For a social game, one would think this was old hat. My guess is they assume parties would be formed by those who know eachother in real life, and would use the built in voice chat.

    Secondly, there really isn’t isn’t much in terms of public information and control. For examle, NPC’s are differentiated by yellow text for their name which appears above their model, whereas player characters have blue text. You have to physyically click on the characters to get information about them, which is a small thing, but it was a lot easier to see stats for someone in SWQ.

    They implemented the concept of world instances. Meaning, if a public town gets too crowded, they’ll spawn a new instance of it. You can even switch between instances if you’re friends happen to be in the “same town, different instance”. Town population is definately a problem that needs to be solved. SWG suffered from this pretty bad. If you went to any main town on Tatooine on a Saturday night, lag was prevalent and and your fps low. However, while this may be a great technological solution, it kills the connectivity aspect. Suddenly, you’re town is meaningless, and the feeling of connectivity is lost. This is excercabated by the “private dungeons”.

    One problem in massively multiplayer online games is if a particular dungeon is popular, suddenly overcrowding becomes a problem. It’s a race to battle over who gets to kill the monsters, usually resulting in hordes of well equiped individuals unleashing hot fury onto any monster or villian unlucky enough to “spawn” in their midst. Since they do, this spawn -> pounce -> process is repeated since most games provide powerful monsters in remote dungeons as gaining a lot of experience and treasure. Since it’s overcrowded you have to work that much longer and harder. Going at remote hours doesn’t help since in this 24 hour world, there is always someone awake in the US, UK, Australia, Korea, or Chinese farmers.

    DDO’s solution is to spawn a unique dungeon just for you and your party if you have one. While this really adds to it, also removes yet another feeling of connectivity for the MMO world. It seems to me that DDO was really aimed at providing a small group of people the ability to play online together vs. creating an online world like other MMO’s. That being the case, they really did it wrong. They should of just spawned an entire world instance for a set group instead of mixing the public worlds to private dungeons. The concept just doesn’t work well, and removes a lot of the flavor. The one success of SWG over Everquest was the “no loading screens” while traveling around. Granted, travelling to a planet did generate one, but one could wanter the entire planet of Tatooine, visit a multiude of towns and enemy bases and not generate a loading screen once. It really helped give the world a feeling of connectivity and being alive and growing.

    This makes the server crashses worse. If you’re game isn’t to that caliber, then I’d expect your hardware to work as good or better… but it doesn’t. And the game itself lacks in a lot of areas, mainly small, but they all add up to make it not fun. SWG set the bar pretty high, and although I haven’t played World of Warcraft, from talking to friends it sounds like they got the “working product” part right. DDO’s server crashes are still acceptable considering we’re 2 weeks into the game… it’s still laughable this stuff isn’t caught in beta, but if SWG was any indication, “good enough software” in the MMO world is finding the bell curve of where those will accept sh** will continue to stay even when you give them the most horrendously piece of junk product that works enough to keep them satiated. If you can keep it at, or slightly above that level, you can ignore the millions of frustrated customers because at the end of the month, they still bought your game for $50 bucks and still pay their $10 a month… all 6 million of ’em.

    The lack of player created content is pretty bad too. Character customization is pretty low, and clothing from what I’ve seen is standard. All items are purchased from NPC’s, providing cliche money sinks. No character houses, shops, or character created economy. Could it be any more processed & pre-fabricated feeling? Eberron the D&D campaign setting has a dark and extremely magical flavor. The near “commodity” of magic provides ample opportunities for Artificers and Alchemists to build player character needed items. It boggles my mind whey they didn’t capitalize on this concept.

    Even crazier sitll is how much of a degeneration this game seems from Never Winter Nights. They were an extreme let down to me since I had high expectations lasting over 2 years waiting for the game. Still, they did a lot of things right. Un-obstrusive interface, awesome tools to allow community created content, and an interesting merging of single and multiplayer servers. Hell, even some of the NPC’s speech was audible (those that were important to the story and justified voice talent money).

    Bottom line, DDO is just boring. I’m cancelling my 2 day old account, and putting the game on Ebay. Damn shame that such a beloved brand couldn’t even save it.

  • Flow – Cool Flash Game

    The music is tranquil, and the setting in a calm sea, but you still get the un-ending urge to feed and dodge predators that it still makes you tense. I got bored after getting to the manta ray and owning him. Maybe you can make it deeper.

    Flow

    Via my man Dave.