//

Why You Can’t Work at Work

As agencies get bigger and deadlines shorter it becomes harder to work at work. Some people even opt to work away from the office during crunch time due to the many distractions that are created at work.

//

SMW Part 04 Crowdsourcery Potions 101

//

iPhone applications built with Flash

If the mountain doesn't come to you, then you must go to the mountain. A lot of people talking how Flash is dying but it is nice to see how at least Adobe is helping current Flash Developers to use Flash CS5 to create applications for iPhone, iTouch and iPad.

//

Use SVN with FDT

Quick way to set up a SVN Repositroy in FDT.

Instructions

  1. Open the SVN Repository Exploring Perspective
  2. Add an new SVN Repository
  3. Return to the FDT Perspective
  4. Select the Project within the Flash Explorer that you wish to link to the new Repository
  5. Scroll down to Team and Select Share Project
  6. Choose SVN from the Share Project dialog box
  7. Choose the Repository from the supplied list
  8. Enter the project name you want, and Finish
  9. Tidy up those files with ? marks that you do not want committed, by adding to svn:ignore
  10. Commit the project
  11. You should see each folder with a little ‘database’ symbol, without any white stars which means that that everything is perfectly synchronized
  • The top of my project has a white star, usually a commit and update sorts this out, but not always! (A topic for a new Blog!)
  • source:  http://factornine.wordpress.com
    //

    Boarding Pass Fail from Delta

    Tyler Thompson had a very discomforting experience with the Delta Boarding passes and he went ahead and took the time to make different designs that on his point of view meets the requirements of the customers.

    Here you can see the first design Tyler did:

    And here you can see a Delta boarding pass similar to what Tyler used:


    to see the real pass he was handed visit his site

    I personally haven't done a lot of traveling but on the few flights I have had in the past years i can easily identify the gate and seat number in the boarding pass. At first glance it is difficult to distinguish the numbers in the suggested design since they are aligned one after the other on a black strip and they all look like a continuous line rather than a separate entity.

    Some other things that need to be kept in mind when designed to such a broader audience is

    Languages

    Is the design going to be translated in different languages and and do we have enough room in case they are printed on a different language?
    Is the user at any time have to read the boarding pass left to right, is the design going to fit that requirement?

    Ink

    Will the company have to spend millions of dollars more in order to use color versus only one color ink?

    Training

    How many men hours do we need to train people so they know exactly where the new information will be located on the new boarding passes?
    How long do we expect everyone to get used to it and how long do we expect people to ask why it has changed and how to find the information?

    Legibility

    Is it legible to everyone?
    Can everyone read the numbers?

    Finally

    Don't get me wrong, the suggested design looks "pretty" but how many times after you went through the inspection point the first thing you look at is the Flight Number? This is a boarding pass not a buss ticket. Once you have gone though security and you look at your ticket, What is the first thing you look at? I personally look at the Gate Number so that I can figure out where to go from there. I don't see people walking by the isles trying to see the flight number on the plane to identify it.

    Interestingly enough Tyler's inspiration for his post was the post by Dustin Curtis in regards to the American Airlines website horror experience he had while trying to book a flight which as a consequence one of the UX Designers had his contract terminated due to him taking the time to explain the procedures of large corporations and the reasons behind the "ugly" design though corporate email.

    I say I find this interesting because if you follow the post from Dustin you can learn a lot and understand why things are done the way they are and is not as easy as to turn on and off a switch but it is a lot more involved than that. This is part of the response from the UX Designer

    Let me explain. The group running AA.com consists of at least 200 people spread out amongst many different groups, including, for example, QA, product planning, business analysis, code development, site operations, project planning, and user experience. We have a lot of people touching the site, and a lot more with their own vested interests in how the site presents its content and functionality. Fortunately, much of the public-facing functionality is funneled through UX, so any new features you see on the site should have been vetted through and designed by us before going public.

    However, there are large exceptions. For example, our Interactive Marketing group designs and implements fare sales and specials (and doesn’t go through us to do it), and the Publishing group pushes content without much interaction with us… Oh, and don’t forget the AAdvantage team (which for some reason, runs its own little corner of the site) or the international sites (which have a lot of autonomy in how their domains are run)… Anyway, I guess what I’m saying is that AA.com is a huge corporate undertaking with a lot of tentacles that reach into a lot of interests. It’s not small, by any means.

    So the ideas of revamping a site or updating the way a boarding pass is great but keep in mind it is just more than "I like it this way" call by one person but it is a team and layer of contributors that you have to consult before making the final call.

    //

    From Kohana to ZendFramework in about 30 minutes

    I am pleased to say that it took me only about 30 minutes to transfer a basic site writte on Kohana to the ZendFramework, both frameworks make it easy to switch between each other. For one thing you can use the ZendFramework Library in Kohana (although I haven't done it myself people declare is rather easy)

    The thing I like the most about the ZendFramework is their tool which comes as a part of their library download. I have mainly used the tool to create the controllers and actions and so far it has been a time saver and has helped me to see how the framework works in a few keystrokes.

    After the first site was a success the next step will be to convert a site with a simple CMS built in Kohana to the ZendFramework, I have to admit that there were two things that held me back for a while into using the ZendFramework.

    Speed

    I read in different blogs how slow ZendFramework was compared to other frameworks such as Kohana, CI, CakePHP and even the new framework called Yii. The graphic below is one of my many findings:


    (Source yiiframework.com)

    But it is obvious that as the time goes by the framework is getting better and seems like it is getting faster as well.

    Initial setup

    When I tried the framework for the first time was about a year ago or so, it was brand new and people were still getting their heads around it as well as was very limited content in the subject so my first attempt to try it was a failure but months later I come back and wow, what a difference. Not only that but I stayed away from the full package and downloaded the minimal package and started just with the library and it was a breeze.

    It is nice to have different packages to choose from and that they get better day by day. So far Zend has made it an easy transition and a nice new PHP development start.

    Tags: , ,

    //

    RobotLegs and Flash IDE CS4 Injection

    So you heard of the RobotLegs framework and downloade their demos so you could compile them on your own computer but the only thing that you have available is CS4, not a problem you can still use the framework and I'm going to update the "Hello Flash" demo to show you how. After this article you should be able to update any other demo or create your own with CS4.

    Accordingly to the Knowledge Base we get a good kick start by letting us know that we need the following:

    ActionScript:
      //Initializing the injector with XML is done by adding this line to your context's constructor, before the super() call:

      injector = new SwiftSuspendersInjector(xmlConfiguration);

      //Where xmlConfiguration is your XML object.

    So in our HelloFlashContext file we are going to add our "xmlConfiguration" property that will be passed to the SwiftSuspendersInjector.

    So I am going to borrow the XML_CONFIG from the SwiftSuspendersInjector and use it as a guide for my HelloFlashContext class.

    ActionScript:
      protected static const XML_CONFIG:XML =
               <types>
                  <type name='org.robotlegs.mvcs::Actor'>
                     <field name='eventDispatcher'/>
                  </type>
                  <type name='org.robotlegs.mvcs::Command'>
                     <field name='contextView'/>
                     <field name='mediatorMap'/>
                     <field name='eventDispatcher'/>
                     <field name='injector'/>
                     <field name='mediatorMap'/>
                  </type>
                  <type name='org.robotlegs.mvcs::Mediator'>
                     <field name='contextView'/>
                     <field name='mediatorMap'/>
                     <field name='eventDispatcher'/>
                  </type>
               </types>;

      public function HelloFlashContext(contextView:DisplayObjectContainer)
            {
               injector = new SwiftSuspendersInjector(XML_CONFIG);
               super(contextView);
            }

    Now that we know how our XML has to be formed we can start adding our custom properties that will substitute the [Inject] annotations.

    There are only two locations where the inject annotation is being used.

    ActionScript:
      org.robotlegs.demos.hellowflash.view.BallMediator
      org.robotlegs.demos.hellowflash.view.ReadoutMediator

    and there are only 2 properties used in both instances

    ActionScript:
      view
      statsModel

    So with that information we very easily update our XML_CONFIG constant as follows:

    ActionScript:
      <type name='org.robotlegs.demos.helloflash.view::BallMediator'>
                     <field name='view'/>
                     <field name='statsModel'/>
                  </type>
                  <type name='org.robotlegs.demos.helloflash.view::ReadoutMediator'>
                     <field name='view'/>
                     <field name='statsModel'/>
                  </type>

    And here you have the complete HellowFlashContext class updated:

    ActionScript:
      package org.robotlegs.demos.helloflash
      {
         import flash.display.DisplayObjectContainer;
         
         import org.robotlegs.base.ContextEvent;
         import org.robotlegs.demos.helloflash.controller.CreateBallCommand;
         import org.robotlegs.demos.helloflash.controller.HelloFlashEvent;
         import org.robotlegs.demos.helloflash.model.StatsModel;
         import org.robotlegs.demos.helloflash.view.Ball;
         import org.robotlegs.demos.helloflash.view.BallMediator;
         import org.robotlegs.demos.helloflash.view.Readout;
         import org.robotlegs.demos.helloflash.view.ReadoutMediator;
         import org.robotlegs.mvcs.Context;
         

         import org.robotlegs.adapters.SwiftSuspendersInjector;

         public class HelloFlashContext extends Context
         {
            protected static const XML_CONFIG:XML =
               <types>
                  <type name='org.robotlegs.demos.helloflash.view::BallMediator'>
                     <field name='view'/>
                     <field name='statsModel'/>
                  </type>
                  <type name='org.robotlegs.demos.helloflash.view::ReadoutMediator'>
                     <field name='view'/>
                     <field name='statsModel'/>
                  </type>
                  
               </types>;
               
            public function HelloFlashContext(contextView:DisplayObjectContainer)
            {
               injector = new SwiftSuspendersInjector(XML_CONFIG);
               super(contextView);
            }
            
            override public function startup():void
            {
               // Map some Commands to Events
               commandMap.mapEvent(ContextEvent.STARTUP_COMPLETE, CreateBallCommand, ContextEvent, true);
               commandMap.mapEvent(HelloFlashEvent.BALL_CLICKED, CreateBallCommand, HelloFlashEvent );
               
               // Create a rule for Dependency Injection
               injector.mapSingleton(StatsModel);
               
               // Here we bind Mediator Classes to View Classes:
               // Mediators will be created automatically when
               // view instances arrive on stage (anywhere inside the context view)
               mediatorMap.mapView(Ball, BallMediator);
               mediatorMap.mapView(Readout, ReadoutMediator);
               
               // Manually add something to stage
               contextView.addChild(new Readout());
               
               // And we're done
               super.startup();
            }
         
         }
      }

    This way you should be able to update any demo and compile with the Flash IDE.

    Updated: Thanks to Jos Yule for pointing out that the XML will be concatenated on the existing XML so no need to recreate it all

    //

    Optimizing SWF files with Flex Optimizer

    I found a reference to optimizing SWC files with Flex Optimizer and I figured I would run some tests through SWF files and see what effects it had in it.

    To my surprise the Optimizer tool did optimize the SWF files but just by a few bytes:

    Test 1:
    ..._concept1_v1_alt.swf (56569 bytes)
    ..._concept1_v1_alt_optimized.swf (56456 bytes)

    Test 2:
    ...600_Flash_v1.swf (38164 bytes)
    ...600_Flash_v1_optimized.swf (38127 bytes)

    I also ran a test against a custom SWF file inside a SWC file and this is the result:

    ...DropDown/library.swf (14810 bytes)
    ...DropDown/library_optimized.swf (11723 bytes)

    So the SWC files are bloated with extra information no needed and can be compressed quite a bit but SWF file no love. And it does make sense since the SWF files that I was testing contain a lot of graphics but I still gave it a go.

    Here you can ind more information about Optimizing RSL SWF Files.

    //

    Retweeting private Tweets

    So now that you are part of the "VIP" crowd and you are one of those special friends that is allowed to see your friend's private tweets, let me ask you. Is it acceptable for you to ReTweet something that is has been marked as private? After all it was private to start with but at the same time it could be some nice piece of information that you want to share with the word and you want to give credit to your friend.

    It is as easy as writing "RE" in front of your ReTweet you are passing along or putting a (via @fancyNameGoesHere) at the end of it and it is again out in the open and the "privacy" is out of the window.

    So I say, think accordingly before you ReTweet those private Tweets.

    Tags: ,

    //

    YourPay some common errors and solutions

    When working with YourPay service there some small issues you might run into and so I can remember in the future I am listing them here.

    Fraud issue

    If hit the server several times for testing you might be tempted to hit it with the same amount but remember that even though for you they are different hits, the store is receiving the same "client" hit so they will reject you request by marking it as a fraud.

    Fraud Solution

    Hit the server with different totals, even a minimum of 1 cent in difference between transactions is enough for you to get successful transactions with the store.

    Store not able to process orders

    One common issue is that when you hit the server from a page that is not registered with the application, YourPay will not recognize your store request and thus reject your request and it will break the whole experience.

    Store not able to process orders solution

    Always remember to change the location where YourPay is expecting your request, this could be easily forgotten when you are testing from different points on your servers or you are testing from Dev and then move everything to production.

    Tags: , ,