... loading ...
2010
02.16

After my beloved Franklin Covey PlanPlus software put its foot down and declared that it would not play nicely with Windows 7, I was really at a loss. I’d been using it for years and didn’t realize how dependent I was on it…

I spent some time looking around at task management tools and even tried a few, including Remember the Milk, Todoist, and taskTome.

TaskTome is the one I’ve been using for the past two weeks, and it’s not at all bad, but it just wasn’t, well, right. Yesterday I opened it and saw all those tasks listed, and I was like, ‘what in the world am I supposed to do today?’ I couldn’t answer that immediately. So in desperation, I went Googling again.

Last night I found HiTask. So very happy!

HiTask is an online tool that quickly caught my attention because of one main thing – I can look at it and tell immediately what I need to do today vs. tomorrow vs. later this week (HiTask is shown at lower right, TaskTome at upper left).

HiTask has a clean, bright interface and it has a calendar right on the same page with your task list. Tasks can be grouped by Date, Color (priority for me), MyView (which is whatever you want it to be) and Project. My favorite is Date because of my aforementioned need to see exactly what needs to be done and not have to think about it too much.

A very neat feature is the ability to create Projects and then drag tasks into them, so you can see all the things that need to be done for that particular project or client.

HiTask also has a tagging feature so you can search by tag at any time, plus it has time tracking and reporting tools.

I’m using the free version and I’m very happy with it, but there is a business version available that will let you share HiTask among team members. The business account is $29.00 per month and includes 5 user accounts.

More Resources

Here are a few of the useful articles I used in my own research – maybe one of them will lead you to your own little Holy Grail:

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • StumbleUpon
  • email
  • PDF
  • Print
  • Twitter
  • MySpace
  • Technorati
  • RSS
  • Tumblr
2010
02.13

Issues with slow or nearly nonexistent email services for my hosting clients during a RAID rebuild earlier this week scared me – enough to start investigating some new ways of managing and growing NOCO Hosting. This was only the second time in almost 3 1/4 years that I’ve had a problem that couldn’t be fixed very quickly, and it was a really frustrating few days (both for me and my clients).

A few changes I’ve already implemented:

  • Compiling an offsite contact list that I can use to reach clients in the event of an emergency. I already had this in place, but many clients had never responded to my requests for an offsite email address – they’re still using ‘me@mydomain.com’ for their account ‘www.mydomain.com.’
  • Creating a new Gmail address for NOCO, primarily for sending out notifications.
  • Compiling a list of SMS/text message contacts for clients who prefer to receive their notifications that way.

And some other things upcoming:

  • I’ll be adding some dialogue and changes to the hosting registration form that require an offsite email address as the primary contact address for any account.
  • I’ll be splitting client accounts between several servers to reduce by 50% the chance that any one client will b affected by a server issue.
  • I’m investigating DNS failover services now, and will be putting together a pricing package to offer to all my clients. I want to see who might be interested in such a service before I formally get it, but I think it might be a good additional offering for NOCO even if no one wants it now.
  • I’ll definitely be implementing one of the DNS failover services for my own business sites; I’ll probably try ZoneEdit because they offer their services for free for the first 5 domains

I’m also connecting with other hosting resellers and hosting providers in the Meetup group I co-founded, Fort Collins Internet Pros. Brainstorming with those guys might lead me to some other ideas I haven’t even considered yet.

Frustrations like the one this week make me take a step back and consider whether it’s really worth it to even offer hosting. But I think that it’s a value-added proposition for my clients (one-stop shopping, so to speak), and it’s nicely profitable. Until that changes, I just need to continue what I’m doing – communicating early and often with clients when the extremely rare server issue does come up, and doing what I can to lessen the impact.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • StumbleUpon
  • email
  • PDF
  • Print
  • Twitter
  • MySpace
  • Technorati
  • RSS
  • Tumblr
2010
02.07

Very happy to report that the new site for Loveland Habitat for Humanity launched this week. A pro bono project, I’ve been working closely with Habitat and Rob Advertising to ensure that the final result is easy to use (both for visitors and the Habitat staff that will be managing and editing the site), attractive, and focused on delivering the organization’s message with clarity.

I chose WordPress as the development platform because of its flexibility and low learning curve for the admin users. The new site integrates a custom theme, blog, Google events calendar, donation forms and Success Stories slideshow. WordPress will enable the Habitat staff to grow the website as needed in the future, and add new functionality without much fuss.

I’m also adding another custom WordPress site to the portfolio today, Front Range Factoring. FRF stretched my WordPress capabilities; the project’s intent at the beginning was adjusting a purchased theme for a live site, but in the interest of time and efficiency the client and I decided to create a new custom theme that would be easier for him to manage after relaunch.

Using the WP Framework  I worked with FRF to come up with a fresh design for his existing site. I incorporated a tabset plugin and column plugin for some of the internal pages, and learned how to add widgets wherever one might be needed in the page.

Finally, Kontour is the third new project going into the portfolio today. Kontour’s owner is a graphic designer and typographer, and she approached Red Kite to create a clean, well-commented XHTML/CSS template set that she could apply to the rest of her site redesign. I created a slideshow for the home page and a gallery template as well.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • StumbleUpon
  • email
  • PDF
  • Print
  • Twitter
  • MySpace
  • Technorati
  • RSS
  • Tumblr
2010
01.24

This is a followup to my previous post on adding scripts only to the WordPress pages that need them. Please read that first, or this might not make much sense…

To cleanup the dynamically generated head section even more, you can disable the styles associated with scripts that aren’t loaded on every page.

The easy way to do this is very similar to what I talked about last time – add this code to your functions.php file (or custom-functions.php if your theme supports it):

add_action( 'wp_print_styles', 'my_deregister_styles', 100 );
function my_deregister_styles() {
if ( !is_page('about-us') ) {
wp_deregister_style( thickbox' );
wp_deregister_style( 'style' );
}
}

The plugin I’m working on is WPNG Calendar, which displays a stream of events from Google Calendar. I want to show it, in this case, only on the site’s About Us page. I’ve already deregistered the scripts associated with WPNG Calendar on most pages, so now I want to hide the styles on the same pages (why load them if you don’t need them?).

So now you’ll do the same thing as in the previous post with a twist:

  1. View the source for a page on your site and find the CSS stylesheet links associated with the plugin that you’ve already deregistered on most pages;
  2. Open up the file that calls that stylesheet – in my case I’m looking at wpng-calendar.php.
  3. Search for wp_enqueue_style within the PHP file and find the handle for the stylesheet you want to deregister. The handle is the first element in parentheses after the wp_enqueue_style element – in the snippet above they are thickbox and style.

A Problem That You Can Fix Yourself!

What happens if you can’t find a ‘wp_enqueue_style’ in your PHP file? This is unfortunate; it means that the plugin creator isn’t making easy for you. Using wp_enqueue_script and wp_enqueue_style makes it simple to work with the tools WordPress has built-in, but there’s a way around this.

Look for a link that calls a stylesheet – something like this:

echo ‘<link type=”text/css” rel=”stylesheet” href=”‘ . get_bloginfo(‘wpurl’) . ‘/wp-content/plugins/wpng-calendar/css/style.css” />’;

Comment that line out and add your own wp_enqueue_style line, replacing the handle with the stylesheet name and editing the source link as needed (refer to this reference for parameters, I didn’t include what I wasn’t sure about):

wp_enqueue_style(’style’, get_bloginfo(‘wpurl’) . ‘/wp-content/plugins/wpng-calendar/css/style.css’, false, ”, ’screen’);

Now you have a stylesheet being loaded in the way WP intended it to happen and you have a handle (’style’) that you can plug into the deregister function.

Do the same thing for any other stylesheets being called, add those handles to the function and you should be good to go. This is the final version of my function:

add_action( 'wp_print_styles', 'my_deregister_styles', 100 );
function my_deregister_styles() {
if ( !is_page(array(2,'events','about-us')) ) {
wp_deregister_style( 'thickbox' );
wp_deregister_style( 'style' );
}
}

You can see that I’m hiding the styles from the head section on all but three pages:

if ( !is_page(array(2,'events','about-us')) ) {

I hope this is helpful – please let me know if you find these two posts on restricting plugin loading useful and understandable.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • StumbleUpon
  • email
  • PDF
  • Print
  • Twitter
  • MySpace
  • Technorati
  • RSS
  • Tumblr
2010
01.24

The WordPress site I’m working on now (WP 2.9.1) has gotten very slow – in part I’m sure that’s because of the large number of plugins that are now loading every single time. I looked around for a bit to find some resources online for restricting plugin loading by page, so I’ll summarize what I did here (not being a PHP coder I didn’t understand at first how to accomplish it, but this is the less-techie version).

This is the snippet of code that got me started, from Justin Tadlock’s blog post; it will disable Contact Form 7’s loading site-wide:

add_action( 'wp_print_scripts', 'my_deregister_javascript', 100 );
function my_deregister_javascript() {
wp_deregister_script( 'contact-form-7' );
}

This snippet goes in the functions.php file (or custom-functions.php if your theme uses that).

But if you want Contact Form 7 to show up only on your contact page, how do you allow it to do that? By using an if statement, like one of the commentors on Justin’s post suggested:

add_action( 'wp_print_scripts', 'my_deregister_javascript', 100 );
function my_deregister_javascript() {
if ( !is_page('Contact') ) {
wp_deregister_script( 'contact-form-7' );
}
}

This snippet will disable Contact Form 7’s loading on all pages except Contact. So now, how to use this for other scripts?

Disabling Scripts on a Page-by-Page Basis

First thing you’ll need to do is find out what’s loading that shouldn’t be. View the source code for one of your site’s pages and make a list of which plugins are loading that aren’t needed site-wide. For example, in my site I’m using WPNG Calendar plugin on my Events page but nowhere else, so that’s one I need to restrict.

Next, you need to find the handle for each script. To do this, you’ll need to open up the main PHP file for each plugin that’s on your list. I did this for WPNG Calendar by going into the plugins folder in FTP and opening wpng-calendar.php in an editor, then doing a search for wp_enqueue_script, which loads JavaScripts into generated pages in WordPress. The handle is the first element in parentheses in each wp_enqueue_script line.

wp_enqueue_script(‘wpng-calendar‘, get_bloginfo(‘wpurl’) . ‘/wp-content/plugins/wpng-calendar/js/functions.js’, array(‘date-js’), ‘0.85′);

In this case the handle is ‘wpng-calendar’ but I found that there were a number of other scripts being called into play by wp_enqueue_script – date-js, jquery-js, thickbox-js and wiky-js. I’ll also add those to my deregister function so that they’re only called on the Events page.

Potential Problems

As Justin Tadlock stated – not all plugins use the wp_enqueue method for calling scripts (and styles too) because they’re not aware of it. Using wp_enqueue makes it really easy to use WordPress’ built-in tools for managing scripts and styles. If you can’t find that in the particular plugin you want to hide, I’m not sure how you should proceed yet – I’ve encountered the same problem and don’t have a fix now.

Forward…

This is the snippet I added to functions.php to restrict loading of the calendar on all pages except Events:

add_action( 'wp_print_scripts', 'my_deregister_javascript', 100 );
if ( !is_page('Events') ) {
wp_deregister_script( 'wpng-calendar' );
wp_deregister_script( 'date-js' );
wp_deregister_script( 'thickbox-js' );
wp_deregister_script( 'jquery-js' );
wp_deregister_script( 'wiky-js' );
}
}

This worked perfectly. And you can do the same with any other plugin scripts that aren’t needed site-wide. If you need to show the plugin on multiple pages, change the if line to this:

if ( !is_page(array(2,'events','about-us')) ) {

Check out the conditional tags page in the WordPress Codex for more information on selecting multiple pages.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • StumbleUpon
  • email
  • PDF
  • Print
  • Twitter
  • MySpace
  • Technorati
  • RSS
  • Tumblr
2010
01.24

sidebarwidgetApplying CSS styles to a particular widget in WordPress (2.9.1 is my current version at the time of this posting) is surprisingly easy.

I’m using the WPNG Calendar widget to pull in events from Google Calendar. I wanted to apply special styling to it that matches the styling of one other key widget on the home page, so here’s what I did. I found the id for the calendar widget (wpng-calendar) and then went into my CSS file to add this:

div#wpng-calendar {
position: relative;
width: 301px;
padding: 0 0 5px 0;
margin: 12px auto 10px;
background: url(../images/teaser.png) no-repeat bottom left;
}
div#wpng-calendar h3 {
position: relative;
top: 0;
margin: 0;
padding: 0.5em 0 0 1em;
background: url(../images/teaser-top.jpg) no-repeat top left;
}
div#wpng-cal-widget-events {
padding: 0.5em 1em 1em 1.2em;
}
div#wpng-cal-widget-events ul {
margin: 0 1em 0 1.5em;
list-style-type: disc;
}
div#wpng-cal-widget-events ul li {
padding: 0 0 0.2em 0;
line-height: 1.4em;
font-size: 13px;
}

Easy, and I now have a nicely-styled events listing in my sidebar.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • StumbleUpon
  • email
  • PDF
  • Print
  • Twitter
  • MySpace
  • Technorati
  • RSS
  • Tumblr
2010
01.23

I just started a free Google Sites website that I’m going to use as a company wiki. I’ve been thinking about doing this for awhile and now that I have a part time intern, figured it would be a good time to get some of the documents and procedures in a place where I can share them easily (only with people I allow access, of course).

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • StumbleUpon
  • email
  • PDF
  • Print
  • Twitter
  • MySpace
  • Technorati
  • RSS
  • Tumblr
2010
01.20

Today was super-busy.

I dreamed about being cold for several hours before finally waking up (with a 40-lb Springer spaniel laying on us) to find that it really was cold – the pilot light in the furnace had gone out and it was 58 F when we checked the temperature. Thankfully it doesn’t seem like it needs a repair, it’s fine tonight.

After breakfast, I finished up a proposal, packed up my project folders and notebook and went to spin class. I really like the group ride classes better than the ones that don’t even pretend to have anything to do with actual road riding. The class was full, but happily I got there early enough to get a pass (people without passes get booted).

Then I had three meetings in a row – first with a current client to discuss the SEO research my partner has completed; the second with a prospective client for whom we’re submitting a joint proposal; and the third for a current web design client who’s decided he wants his logo updated.

I went by the bookstore to look around for some inspiration about the logo, but didn’t really find what I was looking for. No problem; I’ll do some more Googling on the topic tomorrow. But I’m kind of glad today is over, work-wise…

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • StumbleUpon
  • email
  • PDF
  • Print
  • Twitter
  • MySpace
  • Technorati
  • RSS
  • Tumblr