Blog

  • Design Atrophy

    My team will complete Phase 0 of our app in a couple weeks. I wanted to help the human factors guy out and bring some funk to the table so our first deploy to QA and others would be mad-sexy. The whole hiring of graphic designers has been all over the map because of my seperation distance from the decision makers, which is fine. I just took it as an opportunity to do some design work for a change.

    I was surprised, while at SIS, that when spending about a week with a pad of paper, Fireworks, and After Effects, I got back into a design groove pretty easily. It wasn’t fantastic, but I definately felt I was earning my paycheck via design vs. programming. It was tough adjusting things to my manager’s suggestions, but I attribute 90% of that to the fact that I was in a development department vs. a design/creative/marketing one.

    I tried, twice, this week to get into the groove for laying some funk down for some designs to propose today to my team. Hit some major brick walls, though. I think the pressure of having a human factors guy here who’s so talented and knowledgable, submitted the first design in the first place, the imminent arrival of 1-3 graphic designers (maybe), and the target audience not necessarely digging my design style… it’s tough both mentally and in execution.

    Really, though, I’ve noticed that over the course of the past 4 years, while my eyes have learned to appreciate good and bad design, it hasn’t worked both ways. Flawless execution of an idea doesn’t just come from talent; part of the reason Flash development for me is so easy to talk about is the actual process of idea to workable prototype is extremely streamlined. Not only does the tool make it very easy to help bring my ideas to fruition very quickly, but my grasp of how to use it does what any good manager should: remove boundaries. I have none.

    You would think the same holds true on the design front, but that just isn’t the case. I think it comes down to what her majesty said about one of my designs: “It doesn’t look like you do it everyday.” I’m guessing the reverse holds true about my appz I develop (here’s to hoping anyway). There is a mountain of frustration I go through each time I start getting back into design mode. I’ll throw together a few layouts, and just as quickly toss them as they are repetitive styles, aren’t going anywhere, or don’t solve the problem I’m trying to solve. Eventually, I latch onto a theme and go with it. Same with trying to find an efficient tile based game approach in Flash. Requires an extensive amount of throw away code/FLA’s.

    Really, I’m attributing it to working out. I haven’t worked out since November. Once the house purchasing became quickly to the forefront, combined with school and contract, I really started to need every second I could get and bigger pecs wasn’t helping me keep tabs on everything. Now, I’m sure if I head to the gym, the first 2 weeks will hurt pretty bad, both physically and mentally because my body has suffered atrophy from lack of use. I know the benefits, so it’s worth it, but I can see how my design challenges relate. I have the will and the technical capability to utilize the tools (Fireworks/Photoshop/Paper/AfterEffects), but I think a couple things are lacking. First off, it is hard for me to see the benefits. I realize that there are more capable individuals to complete the design tasks we have. Second, it’ll take a few go arounds for me to again attain the level I want to be at. The latter won’t happen in the timeframe I want.

    Another interesting issue is the amount of work put into my design esque projects seem to generate little return. Not just monetarely, but emotionally. I think, too, it is because as a hobby, it is best done for myself vs. clients. However, coding has become both hobby and fulltime gig, so I’ve had little opportunity to really need a design for myself aside from the occasional icon. I wish there was some way to “work out”. I have some small side projects I need to finish for her majesty, so maybe that’ll help. Maybe I should just go mix audio this weekend… something.

  • Chafic’s Ultrashock V2 Article Additions & Comments

    Chafic wrote this phat article (that he shoulda let me tech edit) on Ultrashock. He took a monumental task in writing it, so I congratulate him.

    I wanted to add a few things that the V2 framework doesn’t take into account as far as Flash goes.

    Authortime Components

    This is the bane of the mixed group of developers we have in the Flash community and on the help lists. Some of us use authortime components, others dynamic, and some both. I try to attach everything dynamically myself, but for those gigantor forms, or intricate layout times, it?s just quicker & easier to drag and drop. The difference is, if a component is an authortime component, it is initialized (methods, not properties) a frame afterwards. The exclusion to this rule is if you drop it on _root, but even then, if your SWF is then loaded into a movie clip, you have the same problem again.

    The way I typically solve this is just to implement an onLoad in my class. Thus:

    public function init(Void):Void
    {
            super.init();
            
            setSize(320, 240); // set a default width and height
    }
    
    public function onLoad(Void):Void
    {
            my_pb.addEventListener(?click?, this);
            my_pb.label = ?Sup?;
    }
    

    Same holds true for Central components. I think Flex handles this transparently. Now, technically, one could argue you should be using createChildren to attach everything? but to me, that is not realistic to do every time. It violates OOP purism, but I?ve got deadlines to meet, and I know some of you do, too.

    createClassObject/createObject prefix

    This is more of an opinion because I haven?t looked at the FLASM output, but I consider it a best practice to call removeMovieClip before ever creating anything (createEmptyMovieClip/attachMovie/createClassObject, etc.). It may just so happen that the bytecode is the same for creating a movie clip in the same depth as another one (even if the same movie clip), thus deleting whatever is there, but there is one distinct case I can argue: corrupted movie clips. Sometimes, when loadMovie fails on loading JPEGS (not sure about SWFs), it?ll corrupt the movie clip. This is mega lame if you authortime dropped it because now your foobarred? unless you swap it to a positive depth and then removeMovieClip on it which is hackish… but necessarey I guess in the case of deadPreivew (talk about this later). Thus, removing a movie clip before attaching it, to me, should have been added to the createObject method (since createClassObject calls it anyway). I haven?t, however, had this problem with text fields, so I don?t call removeTextField before creating them.

    Finally, and I don?t really know about a fix for this, sometimes onEnterFrame?s that are dynamically attached I believe hang around via the activation object. So, even if you delete the onEnterFrame before calling removeMovieClip, and even get a true returned value from the delete call, your onEnterFrame will still get called. I don?t really know how to fix that, even if it could, but it really just confirms you should be using doLater vs. rolling your own onEnterFrames, unless of course they are on process only movie clips (mc?s created specifically and only to generate that event for your use).

    Width & Height, deadPreview, and LivePreview

    You?ll notice above I called setSize in my init. I did this because, by default, __width and __height are based on _width and _height. Now, if your creating the ideal component, there really isn?t anything to base a valid _width and _height value off of, is there? Well maybe? depends on how you make things.

    Back in MX, width and height were getter/setters for width and height. That is, they were NOT pointers to _width and _height values, which to me, is a failure, again, for the V2 framework to make allowances (yes, they are allowances, that?s why frameworks rock) for Flash. For example, an image is 1000×1000, however, your masking it off at 320×240. Know what width reports? 1000. Stupid. Thus, that?s why MX rocked, because no matter what you did via setSize, it always correctly reported the ?true? or ?visual? width and height; if for some odd reason you needed the true _width, you can just access it. That?s why in MX it was integral to default to something because the base class, FUIComponent, did not.

    Typically, you?d put your components your using on frame 2, with a stop action on frame 1, thus having a nicely packaged component, reading for SWC exportation. However, this causes 2 problems. First, there is nothing on frame 1, therefore, width and height won?t be jack (well? 0, 0) because there is no physical element on frame 1 for it to get bearings on what _width and _height will be. Second, because there is nothing on frame 1 (aside from a stop action), your LivePreview for your component won?t work. LivePreview?s, since MX, have needed SOMETHING on their stage (separate SWF in MX, frame 1 in 2004) so they can have a rect in which to draw in. Thus, in MX, deadPreview was born. If you turned off LivePreview in MX, you?d see this sketchy, or non-live component. Typically this was just the pieces of the component put together in a semblance of what the component would look like? or what you saw when you did an edit in place on components. This was done for those who turned LivePreview off in the IDE. Additionally, an automatic unloadMovie was called on deadPreview (you typically named your movie clip that) so it was removed when your component was run. However the V2 framework has removed this? as mistake in my eyes.

    Because of deadPreview’s new role in as the frame 1 rect creator for SWC LivePreviews, it now has 2 roles (first here, 2nd below this paragraph). I?ll typically still use deadPreview, and call swapDepths(0), and then removeMovieClip (since removeMovieClip doesn?t work on negative depth movie clips a.k.a. authortime movie clips). I have my own base class which uses Grant Skinner?s GDispatcher, and extends UIComponent, so I put the deadPreview stuff in there since everyone uses it. Still, I shouldn?t have to, but that?s a case where inheritance rox da hizz-ouse!

    Finally, a deadPreview gives your component a _width and _height that UIObject can work with, thus negating the need to give it a default width and height by calling setSize in your init. I still do so anyway, though.

    Conclusion

    I love Chafic?s article as I learned a lot (and now all of my classes need to be rewritten) and I love the V2 framework as well. It?s a lot easier to make my modifications without it breaking via another Flash IDE update, or some other addition since it?s nicely encapsulated. I?m a guy that likes to use frameworks, not create them, so it saves me a ton of time. Hopefully the above will help you navigate the Flash nuances that the V2 doesn?t solve.

  • $2.00+

    No, I’m not talking about Fraunch Bread, Fraunch Dressing… Maybe it happened yesterday and I just didn’t see it. I was already ticked that it cost me $19.00 fuggin dollars for 10.5 gallons of gas on Monday.

    Today, I saw for the first time in my life, gas prices at or above $2.00 dollars. In short, this blowz. I hear it’s supposed to be $3.00 by the end of the year…

  • Multiple Vibes: Vibration Studies?

    Intro

    The way in which devices interact all are bound by the 5 senses we humans have to interact with our world. Screens display things visually for our eyes, speakers emit audio alerts as do phones for our ears, and keyboards and force feedback joysticks for our sense of touch. Our sense of smell and taste, somewhat intertwined, are not utilized much.

    I think in the main 3, we’ve gotten pretty good and knowing how to best utilize the senses via our various technological devices. The screen shows text so we can clearly see it, we can adjust the brightness to compensate for lighting levels, and image compression technologies take advantage of the fact that there are thousands (millions?) of colors we cannot see, therefore, they are removed from the image to save in file size.

    Audio

    Audio is the same way; speakers have volume controls, sub-woofers not only help enhance realism, but also have evolved to help the deaf. I even saw a Flash site once that with audio told you where to click to navigate… the whole site was just a blank, black Flash movie. Certain sounds have become a part of our lifestyle, and from them, we know what they are, what they mean, all by their distinct sounds. Some forms of pitch and intonation are used to evoke emotions and or illicit a response. Just like a crescendo in a song builds, so to can a simple, 2 syllable sound song invoke a feeling that the computer is asking a question, or has completed a task.

    Touch

    Touch is getting there. I think there are a lot of neat boundaries we are pushing. The whole virtual games are getting cooler and cooler. From the adult world, those “sensation suits” will hopefully be adopted to the gaming world, so like force feedback joysticks, when you get hit in game, you’ll “feel the punch”, or “experience the rush of the explosion”… things like that.

    The whole point of this post

    I feel a vibration at my hip. I grab my Cingular Text Pager. No new message. It’s my phone instead telling me I have a voicemail. They are in the same vicinity, and thus, it is very easy for me to get confused on which one it is vibrating.

    Couple that with the proximity to my actual skin; loose pockets, or a thicket leather jacket I wear in winter, it makes it difficult for me to actually “feel” the phone ringing; to feel someone is calling me.

    Given some of the studies done on touch I learned about in college, some people’s sensitivity to touch is based on their experiences with it growing up. This was psychology, so they were mostly talking about Freud’s theories, and how much people were comfortable with touch. If you didn’t experience a lot of affection as a child, then later in life, you were more likely to feel uncomfortable with people touching you vs. if you had a lot of affection. This is cultural, too, because some families are just not affectionate, while others are. Some touches have associations built that are positive, whilst others negative. It’s pretty complex, but to me, you can easily find the sources/causes.

    Therefore, I’m not really sure you could quantify a stereotype/generality about what vibrations imply what. Therefore, I just look to music. For instance, something fast and quick implies urgency. Something constant, and then building up intensity implies someone/something wants your attention. I guess I’m not sure, if I were an engineer, how would I differentiate the vibrations between devices as well as ensure the experience is correct… enough so to be marketable and/or have a real business use. For example, ring tones do make money, thus, there is a reason to invest time in their effect on users.

    Conclusion

    …all I know is, via vibration, I’d like to know which device is telling me it has a message; my phone or my text pager. Vibrations are quiet, but get my attention more than anything since they are so personal.