Party without Palermo at Tech Ed 2011

I am really sorry to say that there will not be a Party with Palermo at Tech Ed this year.  I have had to make some priority decisions, and I have decided to prioritize my daughter’s tap dance recital over throwing the party.  I want to thank my sponsors and the enthusiastic attendees to always looking forward to and supporting the party. 

Party with Palermo has always been a personal thing, not connected to any business.  The size of the bar tab has always been connected to the amount of sponsorships I’ve been able to get.  I look forward to planning the next one at the next major Microsoft conference I attend.

Party with Palermo started in 2005 the night before Tech Ed in Orlando, FL.  It was held at the hotel restaurant inside the Peabody hotel.  With no budget and no sponsors, 35 people came to have dinner together.  The original purpose was to provide a venue where folks could gather the night before the conference when everyone is getting in to town with no place to go.  Over time, I have been able to bring on sponsors to provide funds to rent a venue, provide food as well as tasty beverages.

In the spirit of this purpose, feel free to use the comments on this blog post to direct people to other social venues available the night before Tech Ed starts on Sunday, May 15, 2011.  The traditional time has been 7PM.

A special shoutout to anyone who wants to plan a “Party without Palermo”.

Applying Sun Tzu’s The Art of War to small business

I’m currently progressing through an MBA program at the Jack Welch Management Institute.  In the current module, we are in a discussion about business leadership, and a classmate brought up the challenges that large multi-national companies pose to small businesses.  With the purchasing power, marketing, and legal resources, how can a small company compete?  How could a small wireless carrier possibly compete with AT&T, Verizon, and Sprint.  How can the mom & pop farm equipment supplier possibly compete with Caterpillar.  I think the answer is to define the battlefield.  Do you choose to compete on the big company’s battle field or yours?

In Sun Tzu’s The Art of War,  the author writes that if you use your army in battle, you may lose it.  Greater power comes from demonstrating the army’s power without having to meet in battle head on.

I think it’s the same in business.  Competing head-to-head with a big company requires choosing a battle field.  The battle field has characteristics that are favorable to one army and not favorable to the other.  If the smaller company/army can find a different battlefield with more favorable conditions, the smaller army can cause the larger army to retreat or just not show up.

I think there are plenty of market segments not being served by big companies.  Large companies tend to focus on volume of some kind.  To focus on volume, you have to neglect complexity to some extend and standardize an offering.  This leave a gap where customers needing a customized solution are underserved.  I see this as a big potential battleground for small companies dealing locally. 

I would appreciate any comments.

Hiring 2 new consultants in Austin, TX. Would you like to be considered?

Our two most recent hires in our programming staff are:

I am conducting another round of interviews during the first week of April.  I am looking for skilled .Net developers at all levels.  I am focused on finding smart, motivated people.  I don’t have a square hole looking for a matching peg.  

If you would like to be considered for a software development position in Austin, TX, please email your resume and cover letter to me.

Consultant

(different levels based on ability & experience)
Here, we are service-minded. To be a consultant, you must have a servant’s heart as well as a drive for excellence. No job description can adequately describe what is needed from a potential candidate. We are a growing company and need smart, motivated people who are motivated to work with other smart, motivated people… all for the benefit of our clients. Our clients are what keep this company going, and our focus is outward to them. With that in mind, scan the items listed below and do some research on our company. If you like what you find, give us a call.

– Jeffrey Palermo, COO

Characteristics

  • Embodies integrity and is committed to continuous improvement
  • Highly intelligent (both technically and emotionally), educated adult
  • Understands computer science and business analysis
  • Educated on the history and lessons of software engineering
  • Able to work in many development environments & with many tools
  • Possesses at least one area of strength and specialization while maintaining broad general skills
  • Motivated and disciplined programmer who knows the .Net development environment well and moves quickly around the computer

Technical Skills/Experience Desired

  • Database normalization/denormalization
  • Architectural modularization
  • Build automation
  • Deployment engineering
  • Managing hosting companies
  • Test automation
  • Functional decomposition
  • Web accessibility standards
  • Performance/Load testing

Tool Experience That Is Applicable

  • C#
  • ASP.NET MVC
  • SQL Server 2008 R2
  • .Net 3.5 SP1, .Net 4
  • NHibernate
  • NServiceBus
  • AutoMapper
  • MvcContrib
  • Tarantino Database Migrations
  • Naak
  • Windows Server 2008
  • Adobe AIR/Flex
  • PHP
  • Java
  • Python/Django
  • jQuery
  • CSS
  • ReSharper
  • Subversion
  • Git
  • Mercurial
Call (512) 459-2260 or send us a résumé

Party with Palermo tonight: game plan (hashtag #pwp)

This post is for all those signed up to attend Party with Palermo tonight at the MVP Summit in Bellevue, WA.  If you haven’t already RSVP’d, you can do so on the website up until to arrive at the sign-in table.

Red Robin at Bellevue Square at 7PM http://bit.ly/ewEWAS

Because many of you have been to a Party with Palermo before, I wanted to give the rundown because this event is a bit different from previous ones.

  • Name badges are pre-printed.  Please find yours at the sign-in table.  Extra badges will be available if you are a walk-in.
  • All funds are going to the venue.
  • The bar tab will be under my name, “Jeffrey Palermo”.  When it runs out, it runs out.
  • When you are ready to order food, please select a table and pay individually – I don’t have enough funds for food. 
  • Please tip your server – it will make future events here smoother.
  • Red Robin normally closes at 10PM, but they will stay open a bit longer if you want to stay longer.

Finally, I would really like to thank my sponsors.  Without support with funding, Party with Palermo would be an unfunded meet-up without so much as a banner or a single free beer.

Corporate Sponsors:

Individual Sponsors:

Tim Rayburn, Sebastian Holst, Robin Shahan, Peter Kellner, Bonnie Berent, Jeffrey Hadfield, Deborah Kurata, Philip Japikse Bill Wolff, Rob Keiser, Brad Wilson, Andrew Nurse, James Bender,  Joe Healy, Glen Gordon, Kevin Wolf, Betsy Weber, Joacim Andersson, Jonathan Wanagel, Tobin Titus, Nikita Polyakov, Bradley Foley, Steve Andrews

Advanced .Net developer training at Headspring

Since 2008, Headspring has refined and expanded its technical training offerings.  In January of 2008, I sat down and racked my brain for how we could share the knowledge we had acquired building custom business software.  The Agile Boot Camp is what I came up with.  I designed and taught that course throughout that year. 

It continues to be an intense, developer-focused 3-day training course which immersed the developer into the Extreme Programming practices, patterns, architecture, and the Software Configuration Management that is essential on a high-performing agile team.  Leaving the fluffy process training to the Scrum folks, this course continues to immerse .Net developers into an environment where they can move quickly and deliver software fast!

In 2009, we expanded the offering with an ASP.NET MVC Boot Camp to provide a UI-focused developer course for web application developers.   With several ASP.NET MVC book authors on staff, we are able to provide in-depth guidance on how to use the new ASP.NET MVC framework, not just how the API’s function. 

With all of our training offerings, we apply our Headspring worldview, which is rooted in the 12 Agile principles and fine-tuned by the 15 Extreme Programming principles.  Automated developer testing is pervasive, and streamlined build & deployment automation make software changes easy.

Mostly recently, we have begun our Software Craftsman Series, which is aimed at those who have a hard time taking 3 days from the demands of day-to-day work.  At only 1.5 hours per week, we tackle essential topics to software development.  In our opinion, these topics should be mandatory for all .Net developers.  Though it is possible to learn some of this through books and personal research, we efficiently package it into 12 weeks of 1.5-hour sessions.  This gives you time to digest and apply each topic throughout the week until the next class.

We have future plans to offer courses for:

  • Software Architects
  • Software Executives/Managers

We love getting feedback about our training products.  We routinely ask current clients what they’d like to see next, and we would love to have your ideas about what would make these products attractive to _you_.

Take a look at all of our training offerings here: http://www.headspring.com/services/developer-training/

As a side note, Headspring is not a training company.  We build custom business software for small & mid-sized companies.  We also teach our client’s software developers how to do it and do it well.  We have learned so much from the many projects we have completed, and training is a terrific outlet for sharing that knowledge.  We train in our spare time, so we don’t have courses every week.  Remember, we’re busy building software.

MvcConf MVC Q&A call for questions

At MvcConf this Tuesday (2/8/2011), I will be hosting a Q&A session where YOU drive the content.  This is a 100% virtual conference. 

http://www.mvcconf.com/sessions/#palermo

mvcConf Speaker Jeffrey Palermo
Jeffrey Palermo
@jeffreypalermo

MVC Q&A

Most conferences are full of presentations with a little bit of Q&A at the end. This session is 100% Q&A, and YOU drive the content. I’ll take a few questions people have posed through twitter and my blog, but during the session, I will answer questions as you submit them. My hope is to provide real-world contextual advice by accessing ASP.NET experience since 2002 and ASP.NET MVC experience since October, 2007 and my research in ASP.NET MVC in Action.

Please comment on this post to pose a question I can answer during this session.  I will also be taking questions via twitter.

Party with Palermo – MVP Summit 2011 edition registration begins!

RSVP now for Party with Palermo in Bellevue, WA.  Sign up via http://partywithpalermo.eventbrite.com/.

Funds are more limited this year, so if you can help out with an individual sponsorship or rope your company into it, that would be great.  Just purchase a sponsor ticket.  We will stretch the funds to the limit at Red Robin and see how far they go!  Be sure to enter an email address you actually check when registering because I will send out updates at the date comes closer.

When: Sunday, February 27, 2011 from 7:00 PM – 10:00 PM (PT)

Where:

Red Robin
408 Bellevue Way Northeast
Bellevue 98004-5002

PARTY WITH PALERMO

  • Good food
  • Hang out with your friends
  • Awesome PwP blog badge, royalty free:

Don’t forget to sign up for the Party with Palermo newsletter!

    Sponsors:

    If you are interested in sponsoring the event, please contact us.

    Code navigation – quick tip

    When downloading open-source projects, tutorials and other code, there is an initial reaction:

    • This code is really easy to digest
    • Wow, let me dig in and see what is here!

    Obviously, the reader would appreciate the first experience.  Here is one tip on how to turn a bad navigation experience into a good one.  This is not the only factor, but it is one I have experienced. 

    This code is very simple in its own right, and it doesn’t take long to fully digest this class, but there are some improvements that can be made, and this file came from a very useful tutorial.

    Let’s start with a simple class for a GuestBook app:

       1:  // ----------------------------------------------------------------------------------
       2:  // Title, something, something, something
       3:  // 
       4:  // Copyright (c) Some Company. LICENSE TITLE
       5:  // 
       6:  // THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, 
       7:  // EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES 
       8:  // OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
       9:  // ----------------------------------------------------------------------------------
      10:  // The example companies, organizations, products, domain names,
      11:  // e-mail addresses, logos, people, places, and events depicted
      12:  // herein are fictitious.  No association with any real company,
      13:  // organization, product, domain name, email address, logo, person,
      14:  // places, or events is intended or should be inferred.
      15:  // ----------------------------------------------------------------------------------
      16:   
      17:  using System;
      18:  using System.Collections.Generic;
      19:  using System.Linq;
      20:  using System.Text;
      21:   
      22:  namespace GuestBook_Data
      23:  {
      24:      public class GuestBookEntry
      25:          : Microsoft.WindowsAzure.StorageClient.TableServiceEntity
      26:      {
      27:          public GuestBookEntry()
      28:          {
      29:              PartitionKey = DateTime.UtcNow.ToString("MMddyyyy");
      30:   
      31:              // Row key allows sorting, so we make sure the rows come back in time order.
      32:              RowKey = string.Format("{0:10}_{1}", DateTime.MaxValue.Ticks - DateTime.Now.Ticks, Guid.NewGuid());
      33:          }
      34:   
      35:          public string Message { get; set; }
      36:          public string GuestName { get; set; }
      37:          public string PhotoUrl { get; set; }
      38:          public string ThumbnailUrl { get; set; }
      39:      }
      40:  }

    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, “Courier New”, courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }

    I’ll outline some issues with this code file besides my partial violation of the license.

    1. The auto properties are not fully visible without scrolling.  For a class as small as this, the most meaningful information is hidden until the reader scrolls down.
    2. The least important information is at the very top of the file (license information).  The license is at the package level, and the reader already knows the license before diving into each individual file.
    3. The structure of the class is de-emphasized.  The properties of the class are the basic structure, and they are at the end.

    I will refactor this class and present what I believe to be a more easily digestible version.  Here goes:

       1:  using System;
       2:   
       3:  namespace GuestBook_Data
       4:  {
       5:      public class GuestBookEntry
       6:          : Microsoft.WindowsAzure.StorageClient.TableServiceEntity
       7:      {
       8:          public string Message { get; set; }
       9:          public string GuestName { get; set; }
      10:          public string PhotoUrl { get; set; }
      11:          public string ThumbnailUrl { get; set; }
      12:   
      13:          public GuestBookEntry()
      14:          {
      15:              PartitionKey = DateTime.UtcNow.ToString("MMddyyyy");
      16:   
      17:              // Row key allows sorting, so we make sure the rows come back in time order.
      18:              RowKey = string.Format("{0:10}_{1}", DateTime.MaxValue.Ticks - DateTime.Now.Ticks, Guid.NewGuid());
      19:          }
      20:      }
      21:  }
      22:   
      23:  // ----------------------------------------------------------------------------------
      24:  // Title, something, something, something
      25:  // 
      26:  // Copyright (c) Some Company. LICENSE TITLE
      27:  // 
      28:  // THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, 
      29:  // EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES 
      30:  // OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
      31:  // ----------------------------------------------------------------------------------
      32:  // The example companies, organizations, products, domain names,
      33:  // e-mail addresses, logos, people, places, and events depicted
      34:  // herein are fictitious.  No association with any real company,
      35:  // organization, product, domain name, email address, logo, person,
      36:  // places, or events is intended or should be inferred.
      37:  // ----------------------------------------------------------------------------------

    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, “Courier New”, courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }

    Here are the improvements:

    • Using statements have been minimized to remove the unneeded.
    • Properties are first to emphasize class structure.
    • License is at the bottom.
    • The entire class code is visible without scrolling – the license falls off the fold instead.

    This has been a quick tip.  Hopefully you will benefit from this.  I haven’t always thought about factors like this in software, but readability is very important.  Code will be read MANY more times than it is written or modified.

    Web Matrix solution: The call is ambiguous between the following methods or properties

    If you get the following error:

    The call is ambiguous between the following methods or properties: ‘System.IO.TextWriter.Write(string, params object[])’ and ‘System.IO.TextWriter.Write(char[])’

    Check to be sure that the expression being written to your page isn’t null.  If it is null, ASP.NET doesn’t know what method to call.