Archive for the ‘Web Development’ Category

How To Run a Freelance Business

Wednesday, April 21st, 2010

It’s no secret that I’m a nerd. After all, I work as a professional software developer; being a nerd is a prerequisite job qualification. I studied Computer Science in college; I enjoy astronomy; the History channel gets me excited.

But I’m more than just a nerd – I’m also (technically) a small business owner.

Running a small business has forced me to learn a variety of other skills,  including accounting, sales, and marketing. If I’ve learned anything since starting my freelance web design business it’s that the key to success (i.e. making money) lies in managing your time wisely, and I’ve found a bunch of free software applications that help me stay productive.

I thought I would take a break from my busy schedule to share some of the software tools that help me manage my business. Note-to-self: they’re all free!

Invoicing

One of the drawbacks to building a larger client base is that you need to track who owes you money.

I recently started using Intuit Billing Manager to handle my invoicing. The thing I like the most is that it allows you to customize the look of your invoices! It also sends my invoices via email, saving me precious money on stamps, envelopes and paper.

Client Management

I recently started a handful of marketing campaigns to generate more business. With a dramatic increase in sales leads, it became very clear that I needed a tool to manage my interactions with potential (and current) customers.

A Customer Relationship Management (CRM) tool does exactly that; it tracks your sales leads, clients and projects so that you can efficiently complete tasks and increase productivity. I chose to use Zoho CRM after testing a number of other CRM solutions because it allows me to track sales leads, current clients, active projects and marketing campaigns all from the same tool.

It also has the ability to integrate with any email marketing tool. Speaking of…

Email Marketing

Email marketing is the cheapest and easiest way to maintain customer relationships.

I recently started a monthly eNewsletter (signup here) to keep my clients aware of my recent activity. The benefits? It reminds people that I’m still alive and encourages them to refer my services to people they know.

I use MailChimp because it’s free up to 500 subscribers or 3000 emails per month… which is WAY more than I think I’ll ever need.

Web Conferences

In order to meet with clients who have busy schedules, it can be a huge time-saver to simply meet online.

DimDim is a free online tool for web conferencing – it’s basically the same thing as WebEx, minus some features that I don’t use anyways.

What are you using?

Do you have any suggestions to add to this list? I’d love to hear them!

ExtJS, Flickr and Wordpress

Tuesday, April 13th, 2010

I recently built a website for my sister (Jennifer Kay) to showcase her professional work as a reporter for the Associated Press. The design is simple – but I thought I might share something cool with everyone.

For starters, byJenniferKay.com is built on WordPress so that my sister can make content edits quickly and easily without having to look at HTML code.

I also chose to use ExtCore to display a slideshow of my sister’s photography. The implementation of the slideshow is hardly anything worth noting as it’s basically the standard ExtJS Carousel example.

But here’s the cool part: my sister can edit the slideshow from her Flickr account without touching a single line of HTML or JavaScript!

Now some of you may be asking yourselves, “How is this possible?” I promise you it’s far easier than you might think.

I stumbled across the flickrRSS plugin for WordPress awhile back and noticed it would be perfect for something like this. Using the Flickr API, the plugin simply fetches recent images from a Flickr account (or images with a specific tag) and pastes them into your WordPress blog. Not exactly rocket science; in fact, it’s laughably simple.

Here’s how it works:

  1. Install WordPress (duh!)
  2. Download and install the flickrRSS plugin
  3. Edit your WordPress template to include this code where the slideshow should appear:
    
        <div id="slideshow">
            <?php get_flickrRSS(); ?>
        </div>
    
  4. Edit the settings for flickrRSS so that it outputs the images with this code:
    
    <img src="%image_medium%" alt="%title%" />
    
  5. Download ExtCore and the JS/CSS files for Ext.ux.Carousel (total of 3 files)
  6. FTP the ExtJS files to your server and include them in your template
  7. Add the following JavaScript code to your template:
    
    <script type="text/javascript">
        Ext.onReady(function() {
            new Ext.ux.Carousel('slideshow', {
                itemSelector: 'img',
                interval: 5,
                autoPlay: true,
                showPlayButton: true,
                pauseOnNavigate: true,
                freezeOnHover: false,
                transitionType: 'fade',
                navigationOnHover: false
            });
        });
    </script>
    

Your slideshow should now appear and work without any problems! Best of all, changing the photos is easy – simply login to your Flickr account and add photos.

Top 5 Reasons Your Website Sucks

Friday, February 26th, 2010

Over the past few months, I’ve spoken to a number of small business owners about their websites. As a freelance web designer, I’ve been primarily targeting local small businesses because many of them don’t have websites; the few that do often have an amateur design that hasn’t been updated since 1998.

Believe it or not, the sales process has been relatively tricky. Although many small business owners are keenly aware of the benefits of a professional website, many others don’t seem to care. These people often manage their website themselves and are convinced that they don’t need an upgrade.

The sad truth is that your visitors do form an immediate opinion of your business when they see your website. This first impression can be the difference between gaining or losing a customer!

Without further adieu, I give you the five top reasons why your website sucks:

It Gives Me a Seizure

If your website uses more than 3 colors for its text, has animated GIF images, uses scrolling marquees or blinking text… your website sucks!

Let’s be honest here: your visitors are so overwhelmed by color and animation that they don’t know where to look. This isn’t good! If they can’t find the information they’re looking for, they’ll search for your competitors.

Your Website Sucks!

It Uses Frames

If your site uses the HTML tags frame or framesetyour website sucks!

Frames are about the worst thing you could use to build your website. For starters, search engines can’t crawl your content when it’s loaded inside an HTML frame element. Frames aren’t consistently rendered in every browser, so your website might look even worse than it already does. Frames confuse your visitors as the browsers “Back” button now does something different than expected. Frames don’t print as expected. Frames often cause scrollbars to appear. Frames are also a security risk to your browser.

If those weren’t enough reasons to avoid frames, consider this: HTML5 won’t support them.

Browsers Murder It

If your website doesn’t look the same (and work) across all of the Web browsers that (at least) 90% of your visitors use… your website sucks!

This is the hardest thing for do-it-yourself webmasters to understand: building a website is harder than you think. Things that look fine in Internet Explorer often don’t look the same in Firefox, Chrome, Safari or any of the other Web browsers available… and I haven’t even mentioned mobile devices!

It’s important to know what browsers most of your visitors use so that you can test your website and be sure it looks fine. If your customers think your website sucks, what will they think about your business?

It Doesn’t Tell Me Anything

If your website doesn’t give me the information I’m looking for… your website sucks!

Are your business hours listed? What about your address and phone number? What is it your company actually does?

The answers you need to provide may vary, but it’s important to give the public what it wants. Furthermore, your content needs to be well organized so that these answers can be easily found! If your customers can’t find the information they need from you, they’re going to check out your competitors.

It Uses Flash

If your website is heavily reliant on Flash… your website sucks!

Companies often ask about Flash because it looks cool. And it often does… but websites that rely on Flash to display important content have several serious failures.

First of all, many mobile devices can’t display Flash. The iPod and iPhone can’t display Flash at all – a huge problem given how many people use them.

Secondly, Flash isn’t easily indexed by the search engines. Google says it can read text embedded within Flash files, but regular HTML text is far easier for them (and the other search engines) to read and understand.

Lastly, do your visitors actually like having to wait for your Flash animations? Many websites that use Flash go overboard using everything from background music to animated page movements. Your visitors are looking for something specific – do you really want to make them wait for it?

What do you think?

Do you agree or disagree with this list? Did I miss anything?

Ext Scheduler

Monday, February 8th, 2010

A few weeks ago, Mats Bryntse (mankz on the ExtJS forums) asked me if I would be interested in taking a look under the hood of his Ext Scheduler application. There has been a great deal of buzz in the ExtJS community over his tool, so I jumped at the chance to peek into his source code. We’ve never actually met in person, but Mats seems like a good guy and he has a lot of good insight on the ExtJS forums. Apparently Mankz is also a DJ; I did not know that!

Disclaimer: Mats granted me a free license to use the tool in exchange for my review.

After unzipping the source code, I poked through a few of the examples. At first glance I was very impressed! The download came packaged with six demos, each of which utilizes different ExtJS features and gathers data via different sources (eBay, Google Calendar, among others). My only immediate complaint was that the API documentation wasn’t included in the ZIP file. It is however freely available on the Ext Scheduler website here.

Let’s Build Something Fun!

Rather than just saying what the Ext Scheduler does… let’s build something! Since Ext Scheduler’s website already has a handful of examples, I’d like to try building something new — let’s use the Twitter API and map when our tweets are posted.

A quick note: I didn’t realize something important until I was almost done with this application – the Twitter API doesn’t allow you to grab tweets based on a given time frame. You’re only allowed to grab the last X tweets… which I think is pretty lame. Had I know that before starting this application, I would have chosen a better example. *Facepalm!*

My journey through the Ext Scheduler started with a quick look through the API docs. The basis for the entire application is the Sch.SchedulerPanel() class, which is an extension of the Ext.grid.GridPanel(). If you read the API docs for this class, you’ll learn that it depends on two data stores: the first (“Store”) defines the various categories/rows for your application, while the other (“EventStore”) defines the events displayed on our schedule.

For my sample application, the “Store” will consist of a single Twitter user and the “EventStore” will be filled with this user’s 50 most recent Tweets. Thus, my application only has one row on the grid (boring, I know). I chose to display my grid as a 24 hour day so we can see our user’s Twitter activity over the course of a single day. Toolbar buttons allow us to move forward/backward by day. (Since the Twitter API doesn’t take start/end date parameters, this functionality is somewhat pointless.)

Take a moment now and try my sample application. We’ll explore it in more detail below, but see the source code here.

Learning Curve

My only real complaint with the Ext Scheduler code is the fact that there’s a slight learning curve. The examples provided in my ZIP folder are great, but there’s so much going on in each demo that it’s hard to figure out the basics. It took me the better part of a day to get my application working, so be prepared for a little bit of frustration.

Don’t get me wrong – this is an awesome tool, and I had the same complaints about ExtJS when I first started too. As such, I’m hoping this review can be a step-by-step demonstration on how to get started.

Step One: Define Your Categories

The “CategoryStore” is used for our left-hand grid labels – the entities to which the events are associated. In some of the other Ext Scheduler examples, the “Categories” were often people; the “Events” were often meetings or other appointments.

I started my application by prompting the user for their Twitter username. If you open my source file, you’ll see that I take the user’s input and insert it as a new data record into my TwitterApp.Scheduler.categoryStore (an Ext.data.JsonStore()). That was easy!

Next, I call the init() method on my TwitterApp.Scheduler object (a generic literal), which calls a series of other methods. In essence, here’s what they do:

  • Set this.start and this.end (values needed to properly display data in our schedule)
  • Create and load our “EventStore” (we’ll come back to this in a moment)
  • Create the scheduler grid and render it to the UI

Step Two: Define Your Events

As I just mentioned, we need to create and load the event data to display on our schedule. See the following code:

Ext Scheduler Demo

Our “EventStore” is another simple Ext.data.JsonStore() object; however, I’m pulling the data for this store from the Twitter API (based on the supplied username).

Take note of the “start” and “end” base parameters on this store. Although Twitter doesn’t really need them (which is why this example kinda sucks), the Ext Scheduler classes do! If you don’t add these parameters you’ll get an error!

When this store finishes loading (see my LOAD event), I manually set the “EndDate” property for each record because Ext Scheduler needs this information.

Step Three: Create the UI

Once we have our categories and events defined, we have the data we need to display the Ext Scheduler UI.

The Sch.SchedulerPanel() class is an extension of the ExtJS GridPanel(). The only things we really need to be aware of are the autoViews property and the eventTemplate since they’re the two things which really affect the appearance of our tool.

For the autoViews, you have your choice of displaying the grid by days/week, hours/day and a few other options. Since we’re using Twitter, I thought hours/day was most appropriate.

For the eventTemplate, it’s important to create an Ext.Template() object that means something to your users. Looking at the other examples of Ext Scheduler, you might see the name of the event, its start/end times, or other descriptive information. My example isn’t as cool… but you get the idea.

The only other thing I should point out is that your users will probably want a way to change the date range displayed by our scheduler grid. I added “Previous” and “Next” buttons which essentially alter the start/end date and reload our “event” data.

Step Four: Brag about your tool!

As I already pointed out, the Twitter API was a terrible choice for this demo because it doesn’t allow me to search for tweets by a selected date range. It was also a bad example because tweets don’t have start/end dates. Note to self: choose better examples next time!

Overall, my impression is that the Ext Scheduler will be an invaluable tool for most developers working with “events”. It’s easy to work with, offers an impressive set of features and should impress a lot of end-users. I would encourage everyone to check out the other Ext Scheduler examples and see for yourself!

WordPress Automatic Upgrades on GoDaddy

Saturday, January 30th, 2010

It’s been a while since I moved this blog over to WordPress, and my only complaint since the move has been the periodic upgrades needed for WordPress and its plugins.

Why is that a big deal? After all, there’s this prominent link saying “Upgrade” when WordPress (or any of the plugins) detect a new version.

Well… for starters, I’m hosting this blog on a Windows IIS7 machine. To complicate matters, I’m also using GoDaddy. Rather than diving into why either of these factors is complicated (if you’re interested, do yourself a favor and Google it) I’ll simply jump into the solution for automatically updating WordPress on a GoDaddy IIS7 hosting plan.

Step One: Login to GoDaddy

Login to your GoDaddy hosting control center.

See those tabs at the top? Hover over the “Content” tab, then click on the “File Manager” option.

Step Two: Set the Correct Permissions

Using the file manager, find the directory containing your WordPress blog and check the box next to that folder. (For example: if your blog is installed at /(root)/mysite/myblog/, then  navigate to /(root)/mysite/ and click the box next to myblog).

Click the “Permissions” button from the toolbar.

When the dialogue box opens, set the permissions for this folder to “Read/Write”. Be sure to also “reset all children to inherit” these permissions.

Click “OK”.

Step Three: Click the Automatic Upgrade links

Now, login to your WordPress dashboard. Click the “Upgrade” links for WordPress and any plugins which have new versions.

Be sure to properly backup your database and other files as needed!

Step Four: Reset the Permissions

Technically, you probably don’t have to do this — but it’s good practice to never allow applications extra security clearance when they don’t need it.

Simply follow steps 1 and 2 again, only uncheck the “Write” option. Be sure to “reset all children to inherit”.

Any Questions?

This worked perfectly for me, moving from v2.8.6 to v2.9.1. I’d love to know how this works for you!