Tuesday, December 16, 2014


Pool Service Online is Live!

I just completed a new web site for www.PoolServiceOnline.com . Check it out.   There is great information for pool owners to include informative video tutorials about pool maintenance.The owner is extremely knowledgeable and experienced.

Pool Service Online also has an online Pool Prescription Software  if you create a free profile identifying your pool size, filter type, etc.  

Contact me through my website at www.BlueCanyonSoftware.com if you need a website or custom software to manage your data.

Tuesday, October 21, 2014

Custom Software Is Your Competitive Advantage


Entrepreneurs are a passionate group that love what they're doing.   They use  their skills and ideas to start businesses.  Long hours and intense focus can be the norm.

Pressures rising from competitors and the escalating need to "run" the business  potentially pulls entrepreneurs away from their passion of doing the work and implementing their ideas.

You started your business on an idea that is unique.  Managing the business involves unique processes and data management requirements.   Custom software can be provide the data management advantage you need to run your business and provide unique services to your customers.

Contact Blue Canyon Software to create the custom software data system you need to manage repetitive processes, provide insight into your business, and bring innovative interaction to your customers.

Wednesday, October 15, 2014

Set Cursor To Image From Code Behind

Changing the cursor to something unexpected is not a good idea most of the time because it may confuse your users. However, there may be times when it fits the situation well.

This is how I do it using ASP.NET and C#.   The basic idea is to create a class with the cursor property set to an image and then add that class to a div from code behind.

In this example,  I'm using FormsAuthentication and I want to change the cursor only when "chuck" is logged in.

CSS

Create a class definition for chuck like the following.

 .chuck{ cursor: url(../images/littleChuck.png), auto; }

A couple of things to note here:
  • Use a small image. Don't exceed 32px in length or width
  • Use a url path relative to the page using the image, not relative to the css file.
  • Always follow the url() with auto. Just two values --> cursor: url(), auto;

Identify the div to Apply Cursor

You need something to apply the css class to in the code behind. Let's use a div for this example.

Don't forget to use the runat="server" on the div so we can access the div from the code behind.

<div id="wrapper"   runat="server" > 

</div>

C# in Code Behind

Add the "chuck" class to the wrapper div if the logged in user name is "chuck".

if(HttpContext.Current.User.Identity.Name.ToLower() == "chuck" )
{
       wrapper.Attributes.Add("class", "chuck");
}


Summary

Changing the cursor to image is only one of many values that can be applied.  Check out this link at w3schools to experiment with the 30+ values.

Visit Blue Canyon Software if you need a Senior Software Developer for your custom software project.


Wednesday, July 16, 2014

Choosing the Right Color

There are plenty of tools on the Internet to pick colors. One of my favorites to find a nice pallet of colors is the Adobe Kuler Color Wheel .

Sometimes you would like to find the small variation of shades between two colors. I like the Color Mixer tool at w3Schools for this.

Thursday, July 10, 2014

Avoid Resubmitting Events On Web Page Refresh

Resubmitting events during a web page refresh can be detrimental. For example, you don't want your code to make another add to the database or resubmit a credit card charge. You could redirect your user to a confirmation page when a submit button is pressed. A page refresh will only affect the confirmation page. That may not fit your scenario.

Using ASP.NET ViewState

I ran across a nice piece of code at http://stackoverflow.com/a/8010057/3817299 and repeated below that detects a page refresh using the ViewState.

Add this in your class:
#region Browser Refresh

private bool refreshState;
private bool isRefresh;

protected override void LoadViewState(object savedState)
{
  object[] AllStates = (object[])savedState;
  base.LoadViewState(AllStates[0]);
   refreshState = bool.Parse(AllStates[1].ToString());
   if (Session["ISREFRESH"] != null && Session["ISREFRESH"] != "")
   isRefresh = (refreshState == (bool)Session["ISREFRESH"]);
}

protected override object SaveViewState()
{
   Session["ISREFRESH"] = refreshState;
   object[] AllStates = new object[3];
   AllStates[0] = base.SaveViewState();
   AllStates[1] = !(refreshState);
   return AllStates;
}

#endregion

And in your button click do this:

protected void Button1_Click(object sender, EventArgs e)
{
   if (isRefresh == false)
   {
     Insert Code here
   }
}

Using AJAX

You can also avoid the event re-submission by using AJAX to handle your button events.

Thursday, May 22, 2014

Web Development Resource List

Web Development Resources

It's always nice to have a convenient source of software development information.  I ran across a great list at 
DopeLists.com today.  I definitely bookmarked this site for use in my development at Blue Canyon Software .

Tuesday, April 22, 2014

Social Media Mapping Idea


Visit www.conversationprism.com to read about Brian Solis' interesting idea of visually mapping the social media landscape. Brian keeps the map updated with the dominant social networks.

Tuesday, February 25, 2014

JavaScript Hoisting

JavaScript lets you declare and initialize variables at any location within a function. You can even reference a function variable before you reach the variable declaration – How is that possible?

JavaScript does some work behind the scenes to bring all variable “declarations” to the top of a function. This process of automatically moving the variable declaration to the top is known as “hoisting”.

Variable declaration and assignment are two different things. JavaScript only hoists the declaration and assigns “undefined”.

Moral of the story – Always declare and initialize function variables at the beginning of JavaScript functions.

Thursday, February 20, 2014

Search Exactly What I Asked

Google makes an effort to improve search results by correcting spelling errors, using sites you visited before, and synonyms of search terms. This can be very helpful, but sometimes you want to search for exactly what you entered.

The Verbatim result feature is the solution.

How Do I Enable Verbatim?

  • Visit www.Google.com
  • Enter your search criteria and click the Google Search button
  • After your search results are displayed, click “Search tools”
  • Expand the “All results” dropdown and select “Verbatim”

Wednesday, February 12, 2014

The Truth About Multiple H1 Tags in the HTML5 Era

We've all read the guidance to use only one <h1> tag per page.  That guidance changes using HTML5 sectioning content tags of <section> and <article>

Kezz Bracey has a great article clarifying the use of multiple <h1> tags.

Monday, February 10, 2014

Writing Software is Like Playing Music

Software development has parallels to other creative endeavors like being a musician or an artist.
  • Experience is gained through years of work and mastery of many skills and techniques.
  • Passion for the craft motivates the desire for continuous learning and improvement.
  • It's fun.
  • A complex product is divided into smaller, manageable pieces that integrate well together.
  • Consumers of the product can benefit from the work and find pleasure in it.
Did I mention,that it's fun.

There are only 26 letters, 10 numbers, and a handful of other characters. All you have to do is type the right keys in the right sequence. Is it a coincidence pianos and laptops both have keyboards?

Contact me at Blue Canyon Software to discuss your custom software development needs.