Thursday, December 12, 2013

Five ways for IT pros to shine in 2014

When you take stock of your career achievements and failures, be sure to also look ahead and consider forming these good habits. 
the-strange-life-death-and-rebirth-of-the-cio-and-what-it-means-for-the-future-of-it-v1.jpg
In our ever-changing business environment, how do you stand out amongst your IT peers? Below are tips that I hope will help you get started down the right path. If you form these habits properly, they will transcend the workplace and flow into your personal life as well.

1. Evaluate your present position

In Robert Greene's book The 33 Strategies of War, he explains that "…seeing things as they are…" is a key component in any successful strategy. So, the first step in planning for the upcoming year is to assess yourself honestly and make a change where there is weakness, confusion, and self-doubt.

2. Give solutions, not complaints

There are always problems at work; fortunately, problems come with opportunities. You should focus on the problem rather than the hype and then map out solutions as a result of what you see, taking into account all of the circumstances that caused the issue (be sure to integrate tip #1 into this process). When you present your solutions, you'll be perceived as a problem-solver, and this could open more doors for you in the future.

3. Be strategic with project tasks

You should see every task as being part of a larger project or goal -- in short, look beyond your assignment and at the big picture. As you break down projects into manageable parts, try to foresee what could go wrong at each step. If something arises that was not accounted for, respond accordingly, taking into account the present situation and compensating/eliminating the emotional reaction. By seeing things as they are and not just how they appear, you'll separate yourself from those who panic.

4. Serve others

If you're a manager, you should serve employees who report to you by providing them with the resources they need to succeed. This can range from good communication and trust (the antithesis of micromanagement) to actual tools they use in their work. In doing so, you enable each one of them to successful, which in turn leads to your success.
The same concept applies to working with clients; you should serve them in their expectations, and be honest at each stage of their prospective campaigns. When you support others to whom you are dependent, you also empower them and support yourself in the process.

5. Create opportunities for yourself

Every industry has questions that need answering, so you find ways to answer them -- even if it means creating the project for yourself. This will show others where opportunities lie, and it will create a lasting competitive edge for yourself and the company. Contrary to popular, we are all responsible for what we do and don't do, the latter becoming a regret. You can create opportunities, even where none appear to exist.  

refactor a code example using one of the new Android SDKs

there are multiple ways in any development task to solve the problem, but the refactor below takes advantage of the object animator and results in a more than 50% code saving. Since it's been a few weeks, I'm posting both the original and the refactored MainActivity.java file. 
Code Listing #1: Using the Object Animator
public class MainActivity extends Activity implements OnClickListener{

 private boolean isHere;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  isHere = true;
  findViewById(R.id.here_button).setOnClickListener(this);
  findViewById(R.id.there_button).setOnClickListener(this);
 }

 @Override
 public void onClick(View v) {
  View cursor = findViewById(R.id.cursor);
  float diff;
  if (v.getId()==R.id.here_button && !isHere) {
   diff = (float) (cursor.getX() - v.getX() - v.getWidth());
   ObjectAnimator.ofFloat(cursor, "translationX", diff, 0).setDuration(1000).start();
   isHere=true;
  } else if (v.getId()==R.id.there_button && isHere) {
   diff = v.getX() - cursor.getX() - cursor.getWidth();
   ObjectAnimator.ofFloat(cursor, "translationX", 0, diff).setDuration(1000).start();
   isHere=false;
  }
 }
 
}
Code Listing #2: Original MainAcitvity.java
MainActivity extends Activity implements OnClickListener, AnimationListener {

 private final static int HERE = -1;
 private final static int THERE = 1;
 private TranslateAnimation anim;
 private View cursor;
 private int screenWidth;
 private int centerOfScreen;
 private int dest;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  screenWidth = (int) (getWindowManager().getDefaultDisplay().getWidth());
  centerOfScreen = (int) (screenWidth *.5);
  cursor = findViewById(R.id.cursor);
  findViewById(R.id.here_button).setOnClickListener(this);
  findViewById(R.id.there_button).setOnClickListener(this);
 }

 @Override
 public void onClick(View v) {
  if (v.getId()==R.id.here_button) {
   animate(HERE);
  } else {
   animate(THERE);
  }
 }
 
 private void animate(int whichWay) {
  if (anim!=null && !anim.hasEnded()) return;
  float target;
  int currentX = cursor.getLeft();
  if (whichWay==HERE ) {
   if (currentX+cursor.getWidth()<=centerOfScreen) return;
   target = (currentX - 
     (findViewById(R.id.here_button).getLeft() + findViewById(R.id.here_button).getWidth()))*-1;
  } else {
   if (currentX>centerOfScreen) return;
   target = findViewById(R.id.there_button).getLeft() - (currentX + cursor.getWidth());
  }
  anim = new TranslateAnimation( TranslateAnimation.ABSOLUTE,0,
         TranslateAnimation.ABSOLUTE,target,
         TranslateAnimation.ABSOLUTE,0.0f,
         TranslateAnimation.ABSOLUTE,0.0f);
  anim.setDuration(500);
  dest = (int) target+cursor.getLeft()+cursor.getWidth();
        anim.setAnimationListener(this);
        cursor.startAnimation(anim);
 }

 @Override
 public void onAnimationEnd(Animation arg0) {
  RelativeLayout.LayoutParams params = 
    new RelativeLayout.LayoutParams(cursor.getWidth(), cursor.getHeight());
  if (dest >= centerOfScreen) {
   params.addRule(RelativeLayout.LEFT_OF, R.id.there_button);
  } else {
   params.addRule(RelativeLayout.RIGHT_OF, R.id.here_button);
  }
  params.addRule(RelativeLayout.CENTER_VERTICAL);
  cursor.setLayoutParams(params);
 }

 @Override
 public void onAnimationRepeat(Animation arg0) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void onAnimationStart(Animation arg0) {
  // TODO Auto-generated method stub
  
 }
 
}

Wednesday, December 11, 2013

10 ways to bulletproof your project execution

By  in 10 ThingsDecember 10, 2013, 2:19 PM PST


IT is project-driven -- and if a project goes off track or fails to deliver, the consequences can be dire. These strategies will help ensure a positive outcome. 


10T_pm_iStock_000002674288Small.jpg

Some areas, like accounting, proceed in daily, weekly, monthly, quarterly, and annual cycles of work. But disciplines like IT are highly project oriented. IT's reputation lives and dies with its projects, which makes it essential to bulletproof your projects with strong checkpoints and practices that ensure their success. Here are 10 strategies that can help.

1: Manage by walking around

There's only so much you'll learn about a project's true health by reviewing project reports and memos. If you are the project manager, make it a point to spend time out in the trenches, visiting with staff. You'll pick up a lot about how a project is really going by reading faces and body language. Visiting with people in person at their workstations also keeps communications channels open.

2: Break projects into phases with checkpoints

It's much easier to manage a project -- especially a complex one -- if you break it into phases that can be incrementally tested and deployed. The project team gets to see some early results, as do end users. In addition, a multi-phase project with periodic checkpoints assures you of review time to confirm that the project remains on course and is on its way to delivering the value it's supposed to.

3: Use prototyping as an early-stage project technique

By engaging end users into early project prototypes so they can kick the tires on the project, you save yourself grief in later project stages. That early involvement reduces the risk of users being unpleasantly surprised because the project didn't turn out as they expected. Prototyping also encourages continuous collaboration between end users and project developers.

4: Identify your critical people as well as the project's critical path

Key project contributors may get sick or take maternity/paternity leave or leave for another job altogether, so it's important to identify early in the project who you can ill afford to lose -- and to have backup provisions in place just in case. Most project managers identify the critical path of project tasks that must absolutely be completed, but they fail to do the same thing with their staff.

5: Secure project backing

No matter how sound your project is, if upper and middle management  -- and your immediate user-beneficiaries -- aren't sold on the project, it is likely to fail. Always secure project commitment before starting any work.

6: Use collaborative project management software

There are still companies that manage projects with spreadsheets. Some even use monolithic project management software that resides on a single workstation that a project administrator painstaking updates on a daily basis. But projects are never sequential in their communications or their workflows, so the software tracking projects shouldn't be, either. Today, projects can to be run in a collaborative environment with a project management solution that runs in the cloud. Each project staff member can update his/her task status in real time, giving visibility of current project work to others who are on the project team.

7: Develop a comprehensive QA and test plan... and don't go live until you're ready

Project managers get nervous when deadline begins to approach. Consequently, quality assurance and thorough check-out of projects may get skipped or cut short. This is a mistake. The last thing you want is a public relations nightmare on the first day a project goes live because end users and customers are calling in with their frustrations. If you're the project manager, a scene like this makes it likely that you'll be called in to someone's office as well -- something you definitely want to avoid!

8: Document

It's a temptation to skimp on documentation when you're working a project and deadlines get tight. Resist temptation. If you include and QA the documentation of project modules, callable routines, etc., you make the project handoff easier for your project maintenance team. More than 60% of the average IT department's time is spent on systems maintenance today. Poorly documented projects are one reason why.

9: Conduct a post-project assessment

Even successful projects come with their share of road bumps along the way. Once the project completes, get the project team together to go over what went well and not so well. Then, take what you learn and apply it to the next project. Your project execution will improve.

10: Celebrate!

Project work is hard and relentless. Once a major phase of a project completes -- or the entire project completes -- take time to celebrate the victory with your staff at lunch or dinner or with an office celebration. People need to celebrate their successes so they can be ready for the next project they're going to succeed at.