Rob Kraft's Software Development Blog

Software Development Insights

Archive for May, 2011

Mastering Software Development

Posted by robkraft on May 31, 2011

To master software development you must know many things more important than writing code.  To get it right, with optimal efficiency, you
must be good at identifying the best solution to your customer’s needs.  You must be good at choosing technologies to use to create the solution.  You must be good at implementing those technologies.  You must be good at identifying what is most important and valuable to work on at every moment.  You must know when to take the time to learn a new skill or new tool instead of using skills and tools you already have mastered.  You
must know how to set customer expectations about the features and the delivery schedule so that will not be surprised at any point or get less than they desired.  You must know how to communicate with clients the estimated cost and value of alternative solutions so the client can make the decisions.  You must know how to estimate closely the cost and benefits of different alternative approaches to a solution.  You must write code that is easy to maintain.  You must be sure your code works as designed, desired, and that it meets requirements.  You must write code that performs well, is free of major defects, is free of security holes, and follows industry standards and government regulations.  Your solution must be easy
for your customer to deploy, understand, and use.  You must master all these things to master software development.  And then, you have
only mastered software development when you are the only person on the team.

When you are a member of a team, or a leader of a team, you must master many more things.  You must understand how to evaluate alternative architectures and guide the team to selecting an acceptable one.  You must know how to evaluate the mood of team members and address emotional issues.  You must know when and how to allow sub-optimal code to enter the solution in order to reduce the stress and anxiety of a team member, or because a team member does not have the skills to complete the code in an optimal fashion in the desired time frame, or because you don’t want to spend the many hours trying to explain why one design is better than the other, or because you need to bring a team member up to speed on certain technologies.  You must know how to help the team identify what is most important to work on.  You must know how to help team members evaluate their own skills and know when to ask for assistance.  You must know how to motivate and lead team members to take ownership of the code and to write quality code.  You must know how to help team members prioritize the work to be done and prioritize features to optimize the work flow process.

Do you get the drift?  To master software development, you must be exceptionally lucky.

Posted in Coding, Project Management | Leave a Comment »

LucidChart.com is your online alternative to Visio

Posted by robkraft on May 24, 2011

I just recently started making use of the online charting tool http://www.LucidChart.com and I highly recommend it as your alternative to Visio.  I used IE9 and found the charting tools to work very much like a Windows desktop application.  It is very easy to click and drag, copy and paste, draw connector lines, change captions and do so many of the core tasks that you can do in Visio.  I believe this product is much better than the open source and free products such as OpenOffice Draw or Dia.  There appears to be no direct print option, but I am 100% happy without that feature because you can save to PDF and print from the nice-looking PDF document.  I am also impressed by the number of templates available at start and that I can use the product for free.  I can even share my diagram with 2 other people under the free model.  LucidChart offers several free priced plans and we are evaluating the tool now to determine a pricing plan to follow, but you can use the free version indefinitely if you would like.  Finally, you can import your existing Visio diagrams into LucidChart, though I did not try this.

If you want to make any diagrams and you don’t own Visio, or even if you do own Visio, you should spend a few minutes to check out LucidChart.com.

Posted in Free tools | Leave a Comment »

How to programmatically make the Windows Phone 7 Keyboard open

Posted by robkraft on May 15, 2011

I wrote a Windows Phone 7 application with a search page.  When a user clicks on the search icon I wanted to take them to the search page, set focus on the text box, and have the on phone keyboard pop open for the TextBox.  Since the TextBox was the only control on the page I figured it would get focus and the keyboard would open up; but it didn’t work that way.  To make it work, I used the Focus event on the TextBox.  The only trick to this is that you can’t call the .Focus on the TextBox in page constructor because the XAML has not all rendered and events are not yet tied to all the page elements.  So, you need to create a load event in the constructor, and have the load event call Focus on your textbox.  This will cause the keyboard to open as soon as someone navigates to the page.

public SearchPage
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(SearchPage_Loaded);
}

void SearchPage_Loaded(object sender, RoutedEventArgs e)
{
SearchBox.Focus();
}

Posted in Code Design, Silverlight, Windows Phone 7 | 1 Comment »

BooleanToVisibility Converter – Yes, you must write your own for your Phone

Posted by robkraft on May 6, 2011

You must code your own BooleanToVisibilityConverter in Windows Phone 7 development as of May 2011.  That may change when Silverlight 4 can be used for Phone 7 development.  Until then, I recommend you write your own, and start with a good example like the ones found here:

http://compiledexperience.com/blog/posts/useful-calue-converters

I spent more time than I expected on this project attempting to use a boolean value in my viewmodel to control the visibility of an error message on the form.  What I learned is that I DO need to write my own Converter class that implements Iconverter.  I had the impression from many blog posts that this was built it, but it is not – at least not in Windows Phone 7 with Visual Studio 2010 after the NoDo updates and all Phone SDK updates available through April of 2010.  I did not have to write my own converter though, I just copied this code I found elsewhere on the net.  Then I had to make 3 entries in my XAML:

  1. xmlns:loc=”clr-namespace:MyAppNamespace” where MyAppNamespace is the namespace over the class containing my converting.  This entry was already in my XAML for other purposes – and of course “loc” is just a variable name that you can replace with anything.
  2. Add this little bit of code in the Xaml after the first big block that imports the namespaces.  The name BooleanToVisibilityConverter needs to be the class name of the class you created for this.
    <phone:PhoneApplicationPage.Resources>

<loc:BooleanToVisibilityConverter x:Key=”BooleanToVisibility” />

</phone:PhoneApplicationPage.Resources>

  1. Then use it on one to many Visibility properties with code like the following.  In this case, I have a property named SearchFactsFound on my ViewModel.

Visibility=”{Binding SearchFactsFound, Converter={StaticResource BooleanToVisibility}}”

Posted in Silverlight, Windows Phone 7 | 1 Comment »