Blog

  • Energy Drain – Choosing Opportunities

    There are only 2 things that sap my energy quicker than the natural daily process: fight or flight and choosing a path of employment.

    The most optimal exuberance of energy for me was probably 2 years ago when I was working out regularly, and I had a predictable, full-time job schedule. The technology industry was finally starting on the up and up, prospects were good, and new technology starting flowing back in again.

    I’ve gotten seriously burnt out 4 times since then, and each was fixed by a vacation, camping trip, and spending time with friends online and off.

    Burn out, however, is a state of mind, not an energy level. You can be mildly stressed, have tons of energy, and still be burnt out. It requires a longer period of rejuvenation to recoup your attitude. A mere 6 hours of sleep will have me up and kicking again as good as new, but it takes a 4 day weekend away from my normal environment to fully remove burn out and restore my passion to 100%.

    I’ve been burnt out lately. While most spent their holiday season doing what they should, and rejuvenating themselves, I threw myself at learning more ActionScript 3, and more specifically digging into the new Flex 2 component framework. She started in Flash MX, matured to an actual framework, not just component set in Flash MX 2004, and was mildly seasoned in Flash 8. She was extremely improved in Flex 1, and again in Flex 1.5, and I’m here to say while not completed yet, it’s great in 2.

    With the current opportunity to start building a component set for Flash Lite 2, I need all the frames of reference I can get if I’m going to be able to actually contribute in a positive way.

    That combined with real-world work deadlines, the immense amount of work dealing with growing my business personally, and trying to keep up with the community has really charred my psyche. On a scale of 1 to 5, 1 being not so bad and 5 being I quit the industry, I’d say I’m on a 2. I can work just fine all day, hit the blogs & mailing lists, but at night, I can just can’t really code very long after work.

    I think, however, the catalyst to the burnout has been choosing opportunities. It started about February of last year, and hastened towards the end of summer. I was seriously fried by then, and my anniversary trip to Canada did wonders; I came back feeling awesome. However, the quick return to my present state of mind made me question as to why it happened so quickly.

    Unlike most people, I don’t take breaks like I should. There are numerous reasons to do so, both hourly for re-focusing your eyes on far away objects, stretching your muscles and getting the blood flowing in your joints again, separating yourself from hard problems, etc. I get wrapped up in problems or challenges so much so that I refuse to relinquish my steady rhythm until I reach my goals. This can come at the cost of extended stretches of work lasting 3 hour no breaks to weeks at a time. Still, I’d say the shortest timeframe is about 4 months; almost seasonal and even then the effects are mild. A nightly XBox thrashing, watching some TV or movies with the wife usually cures even the mildest burnout symptoms pretty good.

    I’ve been doing that, so again I attribute the quick return to choosing opportunities.

    In the face of adversity, insane deadlines, or impossible odds, I rise to the challenge. If there is no way to change your current, pathetic predicament, I figure I might as well make the most of it. Those situations actually invigorate me. I work great under pressure, and like to be challenged.

    I think, though, that’s because I believe I actually have a fighting chance. I know where I stand in my coding ability, am aware of my strengths and weaknesses, and know what I can and cannot accomplish in a given timeframe. That self-awareness empowers me, and allows me to be my best and get in the zone.

    Choosing opportunities? No way man. On the Myers Briggs personality test I’m a low D, meaning I need little to no information to make decisions. Most programmers, the good ones, are high D’s, meaning they require an inordinate amount of information to make a decision… if ever. For example:

    “Jesse, which way do we…”

    “NORTH!”

    “…go. Uh, ok. Did you even think about that or just guess?”

    “Sure, I saw lights in that direction, it’s cold, so we need to start moving, and NOW, sucka!”

    Whereas, you ask someone with a low D:

    “Hey Dennis, which way do we go?”

    “What are our options?”

    “Well, north, south, east, and west.”

    “What does each direction offer?”

    “Um… well, Jesse said he saw lights in the north, none of us can confirm. East is blocked by a huge river with no visible ford. South looks just like the north, and west has a bunch of rocky terrain.”

    “When do we need to go? Now? Why not later, or tomorrow? If you say now, I’d say to investigate the river, we should go east and confirm all reports. If you can vouch for Jesse’s claims, I’d say north, but…” blah blah blah.

    In the meantime, I’m 50 miles north. Either A) I save us all, or B) I’m a bear’s lunch.

    Case in point, if I ever have to make a decision, I trust my instincts and past experience. If that decision is challenged, I have no qualms about having an open mind and discussing the ramifications. Combining me with a high D for programming tasks makes for a good team as long as there is a moderator with accountability.

    Choosing opportunities, however, is one of those big decisions. Like, should I get married? Should I have kids? Should I join the circus? Should I support that presidential candidate? I can still answer those questions pretty quickly, but actually making a true decision on them that I move forward with can take a little longer than usual. For those, I challenge my assumptions, and re-analyze, which takes time. This is exacerbated by the fact that I might not have all the facts, done little to no research on what I’m supposed to make a decision on, and know sometimes squat and diddly. Without even a shred of verifiable evidence, making an inference on what is the best alternative is nigh impossible. At that point, it’s “what feels right?”.

    That stresses me out if I don’t even have a feeling on the subject. If I can’t trust myself, the very core element used in pretty much all daily, weekly, and lifetime decisions, then I suddenly get insecure about making a decision, and this continues long after I’ve made one. Her majesty has a philosophy that after you make a decision, you can’t regret it. The one you made at the time was the best decision that could of been made with the information you had, and you have to move on and learn from it. This of course assumes it was good in the moral/ethical sense.

    And that keyword, stress from insecurity on decision making, is what drains me, and drains me quick. It’s crazy, because stress from deadlines feels like someone shoved a ton of coal in my stomach, doused it with kerosene, and lit the mofo. I get excited, pumped, and start typing the keyboard before my computer even boots at such times. Stress is a double-edged sword.

    Should I continue my full-time gig? Should I start a company? Should I do full-time contracting? With who? Should I be their hired muscle? Should I re-negotiate a different type of position with them instead? Should I partner up with a smaller company?

    4 years ago it was, “Can I survive in the technology industry using a modem in the woods?” which thankfully became a yes because of IBM. Now, it’s, “What opportunity do I choose? Can I choose them all? What if I don’t choose one? What if I screw one up?”.

    I know this has nothing to do with my low D being a negative, because those same questions used to apply to programming. Back in 2000, I’d have the same, gut wrenching terror when I couldn’t answer the, now simple, questions like “how in the heck do I code this? How do I debug it? What if they want this changed? Is this the best way to do it?”. Nowadays, those programming questions are cake; extremely easy to answer, and only require minimal warm-up and information.

    Which actually indicates a potential positive prospect. Heck… the accidental use of alliteration is a sign! I’m not superstitious, but also not one to look a gift horse in the mouth. They drool and while a sign of good health for the horse, it’s still gross.

    I guess that means, if over the course of 6 years, I can reach a point of specific and easily identifiable transition, then that bodes well for any learnable skill. Meaning, making coding decisions now feels great whereas years ago, the very same questions gave me ulcers. That must mean that I have the potential to know what is the right career path to take if they are clearly laid out before me, right? I want to look out for me, do what’s best, and leave a trail of happy employers and clients. Right now, I feel like I “make my best guess” and even that takes like a week, sometimes months!

    Maybe it doesn’t get any easier, but I believe it does, even a little. It’s hard when you parents and their parents come from a generation of “high school -> job with pension + guaranteed career path + guaranteed 40 year longevity with a loyal company -> retirement”. That is just not how things work these days. As David Samuel put it, companies have outsourced the 1’s and 2’s… all that’s left is the level 3’s and 4’s. He was illustrating how you need to utilize personal branding now that it’s harder to standout in an already talented crowd within your organization.

    For example, my dad.

    “Dude, you really shouldn’t leave those companies so quickly. People are going to wonder why you don’t stay so long.”

    “Dude, you really should understand the context of each job. Some went out of business, some imploded on themselves, and some were run by crackheads. Not sure how you expect me to stay 40 years at a job that doesn’t exist. 40 years not actually coding, yet preventing said job from being outsourced when I have no viable value to the company, stockholders, or customer by warming a chair. 40 years going nowhere, not growing, becoming stagnant. Shall I continue?”

    “Well… I’m just saying.”

    “Well, I’m just saying too, dammit!”

    In his frame of reference, yeah, he’s correct. In mine, however, I am too. If I were to hire a designer that had 10 companies on her resume and started in the industry in 1998, I’d assume either A, she was a contractor, or B she was just a normal participant in the dot-com bust. The context is the technology industry and the time period we are in.

    Anyway, I guess what’s frustrating is my coding is leveling at a plateau to a point where if I venture off into another discipline or language, I could start from the bottom of the bell curve again, but still carry over a great deal of helpful experience and knowledge. That’s cool.

    My career understanding currently is the equivalent of me and my elementary programming knowledge back in 1999, when I knew enough Lingo in Director to be dangerous, but didn’t know how to return a value in a function. Still, I got a job doing it fulltime because I refused to become a web designer like the rest of my peers. I guess if I apply the same gumption to do what I want, product development, eventually that dream will come true as well. Damn, at this rate, I’ll only be 30! I guess at that point, I’ll be asking maintenance questions. I hope so.

    I dig what I do now, and where I’m going, it’s just not as clear cut and easy to see as my programming is in relation.

  • PopUps in Flash & Flex

    mx.managers.PopUpManager is a utility class in Flash MX 2004, Flash 8, Flex 1.5, and Flex 2 used to create popups. A popup is classified as a component that floats above the main application. Typically, Windows, Alerts, and ComboBox drop downs are used in this fashion. Developers utilize them for creating popup dialogues like preferences, login windows, etc.

    The method createPopUp takes, usually, 3 parameters. The first is which window to pop over, the 2nd is the “thing” to create as a popup, and the 3rd is whether to make it modal or not. Modal being you have to close that popup before you can interact with any other component on the stage. Using alert() in JavaScript will generate a modal dialogue for example. Shutting down your computer on Windows XP shows a modal dialogue; you can only click one of the 4 buttons.

    Typically, the first parameter in Flash is set to _root. While not the best choice, as long as your SWF is never loaded, it’s a satisfactory choice. You are better off using your top level component, typically the one that wraps your entire application. Your main application class can provide a reference to itself for this purpose, or you can only delegate the “power of creating popups” to it, thus it can pass “this” in as the first parameter. Using _root, however, when using the centerPopUp method, it’ll utilize the whole movie to find out where the center is, thus nicely positioning the window in the center.

    _level0 isn’t so hot because if your SWF is loaded into another one, you cannot prevent the popups from “invading” your main movie via _lockroot. This is the common fix for the ComboBox component in Flash when it’s used in a SWF that is loaded. The dropdown no longer works because the PopUpManager digs his way up to find the “one true _root”.

    Seriously, I’m not justifying the use of _root, but if you’re in a rush and aren’t loading movies, it’s an acceptable choice.

    Using the component that launched the PopUpManager isn’t so hot either because centering can get really jacked up if your component you are using is itself off-centered when using centerPopUp. Granted, there are valid use cases.

    Using _root in Flex, however, isn’t such a good idea. Using it in Flash is bad enough; it’s a hardcoded reference to something. While the practice of loading Flex applications into other ones is frowned upon (by me at least), using archaic Flash references in a more Object Orienated codebase will confuse other Flex developers, and there is another way.

    Using MovieClip(mx.core.Application) instead of _root is a more “wow my code doesn’t look hardcoded even though it is” way. You and I know what _root is, but some other Flex developers might not. Additionally, the casting to MovieClip is just so the compiler will leave you alone. Perfect example of where OOP gets in the way.

    …2nd time in this blog entry I’ve been tempted to suggest using _root…

    Do not use mx.core.Application.application, that’ll crash Flex. All that is is a static getter/setter that returns _level0, but for some reason it crashes your SWF.

    In Flex 2, they actually provide a nice new method for us, popUpWindow. A conveinance method much like the Flex 1.5’s alert, which allowed you to easily create alerts with less code.

    Again, popups are not just dialogues and forms-in-your-face, they can be for component GUI controls, as well. Just the other day, I created the popup slider that you have in Photoshop and Fireworks for adjusting alpha values; the actual slider is a popup. On the other end of the spectrum, entire mini-applications can be used as popups as well. They are draggable when using containers like Panel & TitleWindow if you don’t make them modal.

  • Adobe Gets in the Labs Mix

    There is a new Adobe Beta called Adobe Lightroom at the labs. It’s nice to see Adobe so quickly adapt adopt the Macromedia lab mindset.

    The front-page picture is really nice and soothing, but I get nervous when that giant eye stares at me at 1:00am…

  • ColdFusion Contractor Position: Atlanta, GA, USA

    Our company is working toward a deadline for a client and we are in need of a Coldfusion contractor that is familiar with:

    • OOP, CFCs, SQL Server
    • Stored procedures, Flash Forms/Flash Remoting a plus
    • Must be available to work on-site (Atlanta/Chamblee area)

    If your skill set matches or you know someone who does have these qualifications, we could use someone immediately.

    Thanks for your time,

    Dave Jones
    thoughtbox
    p: 404-271-9123