dev life // dad life


Archive for the 'Web Dev' Category

Looking for Web Contractor (Technical)

Saturday, May 9th, 2009

We (Williams Franklin Creative) are looking for around 5-10 hours a week of web dev help.  Know anyone?

The core skills we’re looking for are LAMP+AJAX: most of the work will consist of creating and customizing WordPress-based sites, plus some other utility scripts and such.  Strong CSS skills, or even some design skills, are a plus but not necessary.  I’d think any good, web-oriented developer could fit the bill.

There are plenty of contractors available on eLance et. al., but we’re looking for someone more focused on quality, than on meeting the minimum specifications.  Toward this end, it’d also be nice if we could meet in person.  San Francisco Bay Area is ideal, but not a requirement.

If you know any good web developers who could use a few extra hours a week, let me know!  Even if you’re not positive it’s a fit, we’re interested in talking with talented people– even if we don’t end up working together right away.

Our Common Web Site Tools and Libraries

Friday, March 13th, 2009

Most of our web sites get anywhere from a little to a lot of custom plugin or script work, but recently, they’ve been sharing more and more tech.

When we build a site right now, there’s a solid chance it’ll include:

  • WordPress.  Thanks to tons of intelligent, progressive developments over the past couple years, it’s transformed from blogging software toin a very nice platform for a small business Content Management System.
  • Carrington, a developer-friendly theme for WordPress.  Functionally, it doesn’t really “do” a lot– but that’s the point.  It organizes your development efforts so that you can customize a site, without losing track of what logic goes where.  Early web dev tends towards the frontier hackery until there’s enough experience with the tools to start cleaning things up (see: Dojo et. al. for Javascript).  Carrington is the next step in taming the WordPress as CMS frontier.
  • WP-Super-Cache.  You always need it, but you REALLY need it with Carrington.
  • Prototype or jQuery.  This really depends on if I’m pulling in any external libraries that use one or the other– if so, my decision’s made up for me.  In the absence of any requirement, I’ve tended towards  Prototype (and Scriptaculous) in the past, but jQuery’s syntax is addictive.  It’s a toss-up now.
  • Minify.  This is pretty specific to your hosting setup, but for now we use Minify to keep Javascript and CSS size from dominating page load times.
  • Custom tools.  We’ve got a few tools that have become standard, but aren’t quite ready for posting to the public.  We use a post-inserter plugin on some sites to enhance editability without going all the way to something like Drupal.  We’ve got some automated backup tools, both for site files as well as content, that we use (supplemented by WP-DB-Backup).  And so on.

I’ll post updates as other tools work their way into the stack.  Customizable Post Listings has become somewhat common.  Text Control used to be standard, but isn’t as essential since WordPress editing got cleaned up.

The WordPress Tag+Category Bug

Friday, January 2nd, 2009

We deploy a lot of WordPress sites for clients.  Tags are a great new tool, beyond the basic blog use.  For example, clients can tag their pages (requires a plugin), allowing us to display related posts in the sidebar.  (Useful note, if you’re doing this: get_the_posts() does accept a post ID, and does work outside of the loop, documentation notwithstanding.)

Tags are still a bit new by WordPress standards, so you may have to deal with some bugs.  In particular, you can’t search for posts that belong to category A and have tag B (more information in WordPress trac).  Luckily for us, the bug was already fixed in August.  Unfortunately, the fix hasn’t been incorporated into release, and somehow this bug has been marked as an “enhancement”.

We all know what “enhancement” means in a bug database, so I’m uploading a fixed query.php for WordPress 2.7.  So far, we haven’t noticed any issues with the fix, and we’re enjoying the new functionality.

The PHPList Experiment

Tuesday, May 13th, 2008

We have a lot of small business clients, so we’re always looking for ways to save them money.  High monthly subscription fees, or expensive software that requires yearly upgrades, can be a major barrier for someone just starting their business.  That’s one reason we use OSCommerce for online stores and WordPress as a mini-CMS.  (Another reason is that these two open source projects have huge, involved communities, who are constantly writing all sorts of useful add-ons.)

With that mindset, we decided to give PHPList a go.  In short, it’s not the right solution for our clients.  WordPress bucks the open source trend in that it has a well-designed, easy to use interface.  We’ve had little problem handing it off to clients and letting them update their own sites.  (They still require some support, but that’s content for another post.)  PHPList, on the other hand, is designed squarely by coders, for… if not coders, at least highly technical people with a patient try and try again attitude.

For example, a green check mark in the “bl l” category means “don’t ever send this person email” (while a red X means, please, send email to this person).  The default for mailing list imports and user sign-ups is to send that user text-only emails– not a multipart “HTML if you can, text if you can’t” email.  Message sent logs are indecipherable: I still don’t know what it means that I sent one newsletter to 82 users, which includes 4 HTML emails and… 134 text emails?  Isn’t 134 greater than 82?

PHPList does some things right.  It’s great about preventing duplicate mailings, for example, which is crucial when you’re sending to a large list that might get cranky if they get a few too many newsletters.  It also makes sending a test email fairly simple, another big plus.

PHPList is certainly powerful enough to run a newsletter.  However, most of our clients don’t have large tech departments– they have a technically inclined  person who’s already overworked, and doesn’t want to spend a lot of time handling a new responsibility.  We’re experimenting with new options now.  Having rejected quite a few programs out of hand simply because their web sites are far too obnoxious (seriously– ask me and I can email you a link), and others for insufficient flexibility, we’re currently browsing MailChimp.  If we have a successful deployment with one of the new programs, I’ll post about it here.

Disabling Comments in Old WordPress Posts

Wednesday, May 7th, 2008

I like leaving comments on for old entries, in case people happen across my site via Google and decide to say something. Some clients prefer to keep discussion on newer posts, though. Plus, given that most of the spam attempts happen to old entries, I can see the logic in shutting down comments on old posts.

There used to be a plugin floating around to do this, but it seems to be gone. I’m not going to make a plugin out of this change (though it would be helpful if you’ve enabled auto-update for WordPress), but here’s how to disable comments on old posts:

  1. Open wp-includes\comment-template.php.
  2. Change this line:
    if ( 'open' == $post->comment_status)
    to this:
    if ( 'open' == $post->comment_status && time() < strtotime($post->post_date)+60*60*24*30 )
  3. Figure out what to do with the rest of your day.

The “60*60*24*30″ math up there is for 30 days (60 seconds times 60 minutes times 24 hours times 30 days), which you can of course change to whatever you’d like.

Like many WordPress tweaks, the coding itself is trivial– you just need to know where to look. Speaking of which, ever want to know how to get a list of all the fields in the $post object? It’s in the documentation for the get_post function.

GoDaddy Hosting (Mini-)Review

Tuesday, December 18th, 2007

A client of ours had their site hosted with GoDaddy, so I took the time to dig through it a bit.  First, the good: it seems reasonably peppy, and you can easily switch between Windows and Linux hosting.

Unfortunately, you only get one database user per database– the admin user.  You cannot create additional users.  GoDaddy’s help documentation is pretty sparse, so it took me an email to support to figure this out, but they confirmed it.  (Actually, they told me that it’s not possible to create multiple users in a “shared hosting environment”, by which I suppose they mean theirs, as every other host I’ve dealt with hasn’t had a problem doing so.)

That’s pretty much the start and end of my experience with GoDaddy web hosting.  I suspect their other advanced features are similarly limited, but until they fix the database user issue there’s no sense in finding out.  GoDaddy web hosting seems perfectly fine if you just want to post a few files, but HostGator is dirt cheap and far more functional.

Quick Google AdWords Tip: Kill the Content Network

Friday, December 14th, 2007

I’ve found that a lot of people want Google AdWords, but they don’t have the time to properly manage them.  It takes a while to understand all the data they throw at you, and hiring someone to manage your campaign is prohibitively expensive for many budgets.  So, whenever I come across a super quick tip to help out with an AdWords campaign, I’ll make sure to post it.

The first one is easy: kill off your content network ads.  If you go into your campaign details in your AdWords management area, you’ll see a check box to enable or disable content network advertising.  Content network ads show up on other sites (not Google search) that have signed up for the program, and which Google thinks are relevant to your ad.  Disable them and save your changes.

Why disable content network ads?  You only pay per click, so even if people are less likely to click on content network ads than normal ads, a click is a click, right?  Not really: in most campaigns I’ve managed, I’ve found that content network clicks are worth considerably less than a search engine ad click.  The visitors spend less time on the site and are less likely to buy.

If you have more time to manage your campaign, you can set separate content network bids that are much lower than your search engine marketing bids, based on your statistics which will show you how valuable a content network visitor is to you.  (Every campaign is different, so your results will vary.)  Keep in mind, though, that Google enables content network advertising by default: meaning that lots of people are unknowingly overpaying for these low-quality ads.  This means that bargains in content network advertising are few and far between.

How to Make Paypal’s Continue Shopping Button Work in Firefox

Wednesday, July 18th, 2007

Just a quickie, since I’ve seen this question around a lot.

If you follow Paypal’s instructions for their basic shopping cart (the one that takes the visitor to Paypal from your site, with their “Add to Cart” button), the “Continue Shopping” button will not work in Firefox.  It also opens the window in a new tab, and may make it full screen height.

The workaround is simple.  In each form tag, put target=”self”.  Add a new input tag, type=”hidden”, name=”shopping_url”, value=”whatever_url_you_want_continue_shopping_to_point_at.html”.

The Joys of an Unspecified Format

Tuesday, May 15th, 2007

I’m currently importing batches of CSV (comma separated value) data into a MySQL database, using phpmyadmin.

As you might expect, phpmyadmin has a default character to “separate” the “values”.  As you might not expect, the default is… a semicolon.

Position:fixed in IE < 7

Wednesday, April 25th, 2007

Continuing in the vein of nothing’s simple in web development, here’s a great writeup on how to get fixed positioning in IE.  One solution requires that you put IE into “quirks” mode, and the other has even more serious drawbacks, but they seem to be the best solutions available.  Either don’t do fixed positioning, or use one of these solutions at your own risk!