Tools of the trade

It’s been awhile since I’ve posted anything overly technical here, but it strikes me that a “snapshot” of what I do (for work) and how I do it (the tech) might be useful to some.

What I do is web development for Smart Solutions here in Bend. Smart Solutions is a web and software development company and the company essentially has three main divisions: custom software development, SEO (search engine optimization—I know, that’s another post), and web development. All these “divisions” work pretty closely with each other—there’s a lot of line-blurring, actually—but for the most part developing websites for clients is what I do.

The platform we develop for is Pixelsilk—the custom Content Management System (CMS) that Smart Solutions developed from the ground up (and is still developing). The marketing pitch is, it’s SEO-optimized, gives you full control of your HTML, gives you all the tools you need to interact with social media, etc. etc. etc. Move past all that and get to the meat of it, and the primary things I really like about Pixelsilk is that you interact with all of your content and data inside of the system (rather that working with offline files that need to be FTP’d to various places), there’s a powerful and comprehensive Javascript API (giving me the capability to extend the system in new ways), it gives you the ability to re-use code and libraries, and that it’s entirely web-based—-meaning I can work on a site from any browser.

I’m also the company’s defacto WordPress developer—yes, we host WordPress blogs in addition to Pixelsilk sites—and a few other PHP applications so I still get a chance to flex my PHP muscles every now and again. (Smart Solutions is otherwise a Microsoft and .NET shop.)

Of course, I use a number of additional tools to develop for the web, and that’s what this post is really about.

What I use is a mishmash of online and offline tools. In the “offline” category I make use of:

  • The GIMP, open-source graphics software. Free to download, and fairly powerful, there’s still a lot I’m learning about it, but I do most of the graphics work I need to accomplish with it. (Photoshop is the standard for the company, but I’m not versed in it.)
  • Microsoft Visual Studio, various flavors. Sometimes moving the HTML/Javascript/CSS into an editing tool is easier to deal with, and I frankly like the Visual Studio editing environment best of the various programs I’ve tried for these types of files.
  • PHP Designer. I actually use the (older) free version because, well, it’s free and does what I need, it’s fairly lightweight, and it has the same kind of keyboard mappings and editing environment as Visual Studio.
  • Notepad. Yes, a stripped-down plain text editor. You’d be amazed at how much I have this open.
  • FileZilla. Yes, sometimes you still need an FTP client, and FileZilla is a good free Windows client.
  • PuTTY. A great free SSH client, because I spend a non-insignificant amount of time on a *nix command line.
  • Apache/PHP/MySQL: Installed on my Windows boxen as test environments. Pretty critical especially when developing WordPress themes.


  • Google Chrome and Mozilla Firefox as my primary browsers. I actually use Chrome as my primary while at work and Firefox while at home; these are both highly standards-compliant web browsers and I know if I can get something to work properly in them, then that is in fact how it should work. Chrome has some great built-in development and inspection tools; in Firefox I employ a number of extensions.
  • Web Developer (Firefox plugin): A variety of pretty essential additions in toolbar format for all aspects of web development.
  • Firebug (Firefox plugin): Probably the #1 plugin I would recommend; it adds code inspection, network information, Javascript debugging and inspection, and all manner of incredibly useful tools—you can’t be a proper web developer without this installed. (Chrome’s built-in tools come pretty close to this.)
  • Page Speed (Firebug add-on): A fantastic add-on to Firebug that analyzes the overall page performance (using Google’s recommended benchmarks/tests) and gives you hints on what you can improve.
  • Header Spy (Firefox plugin): Shows HTTP headers on the status bar, useful for troubleshooting server information.
  • AFOM (Firefox plugin): Incredibly useful plugin for the Windows version of Firefox which fixes the memory leak prone to Windows Firefox.
  • Internet Explorer: Of course, you can’t develop for the web without checking your work in IE, and IE8 has a decent set of developer tools built-in—including the ability to switch between IE7, IE8, and Quirks modes.
  • W3C Validator: Because you want to make sure your site code validates and works properly, right?
  • jQuery: The best Javascript library out there. If I’m doing anything in Javascript these days, 99% of the time it’s using jQuery.

There is of course other tools I use that fall primarily under the heading of “my own sites” and are not necessarily web development per se: Google Analytics and Google AdSense are two examples. That’s probably another post.

This list is likely incomplete—I may have missed an item or two or three, and if I think of any I’ll update it. But this gives an idea of the various tools I’m employing currently and to a large extent what I’d consider the minimum number any good web developer should be using these days.

Sucky week

I would’ve blogged this week… but work beat it out of me. (I did manage to keep blogging over on The Brew Site, barely…)

Not just “regular” work, I’ve also been working on a website in my spare time as well. As part of my other, semi-freelancing gig. That’s taking up a lot of my time (and still will this weekend).

So anyway, sucky week. Kind of derailed me.

Intuit Master Builder

Being a construction company, we use Intuit Master Builder pretty extensively at work. It’s basically an all-in-one accounting/construction management package and while it does the job reasonably well—for the average user—I thought I’d relay some of the problems with it from an IT/computer programming standpoint. (Kind of an anti-review.) Which is sure to be amusing (or frightening) for other people in my position.

First of all, it’s a database-driven application, which is fine, but the underlying database format is Visual FoxPro—and not a new version of FoxPro. I’m not even positive it is FoxPro for that matter: the tables are all in DBF format, and the indexes are CDX files. That’s one problem—I mean, it’s 2005, and we’re still having to deal with DBF files? Even worse: each table name and field name inside the tables is constrained to exactly six characters long. No exceptions. So you either have ridiculously-abbreviated field names (like “invttl” for “Invoice total” or “lstupd” for “Last updated”) or short names that are padded out with underscores (“state_”). Uhm, hello? DOS called, and it wants its lame database back.

Second, the relational qualities of such a database are a joke. Sure, there are key fields that build relationships to other tables (foreign keys), but there’s no consistency between them—primary key field names are duplicated, fields in different tables linking to the same foreign key field are named differently, etc. But—and here’s the dealbreaker—you can only have one “company” per database; in other words, if you have multiple companies (or projects), then each one requires its own database in a separate directory. And there’s no inherent way to combine these separate databases to share data among them (like a master list of vendors or cost codes) or to build consolidated reports of any kind. This is probably the single biggest flaw in Master Builder.

So one of my tasks is to build/maintain consolidated reports and software to manage the data among the databases. This, of course, is a huge pain, but I have a variety of tools that I use to do this (which illustrate how hackish this all really is):

  • Crystal Reports. Great application, it’ll hook into just about any data source and build just about any report you can think up, so I’ve built a number of consolidated reports in Crystal. Here’s the problem: I’m stuck using CR version 8 because that was the last version which allowed you to compile the reports into standalone executable files that people can run without needing Crystal Reports installed on their computers. I have to do this because at least half the PCs here are still running Windows 98 and we don’t have a server capable of publishing Crystal’s distributed reports.
  • Microsoft Access. This is like, the hacked method of managing the databases. I connect to a Master Builder database via ODBC, and I can directly access (no pun intended) the data. The drawback is because of ODBC, I can’t connect to more than one database at a time—if I want to copy-and-paste data from the Master Company (the source) to any of the others, I have to close Access completely after each database to sever and then renew the ODBC connection.
  • PHP. Yep, PHP. I’ve built some web form interfaces to the databases (running on the server intranet in-house), one of which is a utility to copy vendors out of the Master Company and paste the new or updated data into each subsequent database. I’ve also done a bunch of consolidated reports via PHP, accessible through a browser—I find it’s much quicker and easier to write the reports in PHP than in Crystal Reports. The drawback? You have to have a web server and PHP running on the intranet. And, have ODBC connections set up for each database on the server as well. And, you have to know PHP.

What really sucks is when a new company/project is added, and I need to go through the existing consolidated reports and update them to include the new database. In the PHP reports, this is pretty much a cinch. In the Crystal reports, though, the pain level ranges from moderate to severe, depending on which report I’m modifying. All of them make extensive use of formulas, so I always have to weed through and update all of those. The worst report is one that uses subreports to break down data from each company, and global variables and formulas to consolidate all this data into the master report; each subreport has to be formatted exactly the same (which is anal retentive beyond words) and I’ve got this daisy chained house of cards of formulas in various sections of the master report relying on an EvaluateAfter cascade to properly calculate certain values… the anxiety levels creep higher and higher just thinking about that damn thing…

The end result is I’ve got a lot of scripts, reports and techniques for handling Master Builder that are only known to me, and would be very hard to explain to someone else. Some might say this is “job security,” but I was talking with someone about this today and we decided it’s much more of a “lock-in” (and not in a good way).

Now, compared to much of the competition out there, Master Builder is a good program. It does accounting voodoo that is a total mystery to me, and seems to do it well. It’s got a low barrier-to-entry user interface that makes it easy to learn and use for non techie types. It’s an open system to the extent that the database schema is available and there’s an API that allows the development of independent software that ties into it (a lot of third party developers have developed PDA modules for it, for instance).

But good god, I pity the poor fool who has to administer the system…

Walla Walla

I’m in Walla Walla tonight, on the road for work. My company purchased a house up here and needed to get a computer and WiFi set up. It’s kind of a cool deal, the house is available to employees spending time up here—business takes a priority, but it’s open to anyone who wants to take a weekend in Walla Walla also.

So, in addition to getting the stuff done I came to do, I also stopped at Three Rivers Winery and bought some wine to take home, and had dinner at the Mill Creek Brewpub (and wrote a review of it on The Brew Site).

Back home tomorrow. In case anyone’s wondering, it was a five hour drive from Bend, counting a few reststops. I’ll have more to write about the drive and Walla Walla tomorrow night, probably.

Still no internet at work

Okay, that’s not exactly true: we got our internet service back at work around 3:30pm or so. But that still means we spent the better part of a day without.

The problem, as it turned out, was a dead SAS unit. (I have no idea what “SAS” actually stands for; it’s basically like a cable modem for the wireless broadband nonsense.) Not the cranes at all. What’s truly irritating is that it took OneEighty two days to figure this out, and most of today for the tech to “prep” the new unit. What, are they stored in a vault under guard somewhere? Seems to me techs should have spare SAS units in their trucks, ready to swap out at a moment’s notice.

So I spent the better part of the day in a bad mood at work, continuously fielding the inevitable “Is it fixed yet?” and “Why aren’t we up yet?” questions and basically spinning my wheels. Ridiculous. Now we’ve lost two days of productivity and I just know I’m gonna be in a bad mood at work for the rest of the week.

Needless to say, I plan on switching us over to a hard line as soon as possible; I’ve already got some paperwork in motion. What a pain in the ass.

Sucks when there’s no internet

At work, that is. Our internet connection was down the entire day. And there wasn’t a thing I could do about it except wait for the tech from OneEighty Networks (née HighSpeed Communications née EmpireNet) to try to fix it. With no luck.

The problem? Well, for starters we have OneEighty’s goofy LMDS “wireless broadband” service, which, instead of an actual T1 or DSL or other hard line, employs a line of sight microwave relay system to connect to the internet. “Line of sight” means that anything getting between the roof antenna and the transmitter on Awbrey Butte will block the signal and put you out of commission. Oh, and really foggy/rainy/snowy/etc. days can interfere with the signal too.

(This was all set up well before I started with the company; I just inherited the problems.)

So today it was offline, and the tech can’t figure out why, but his favorite theory is that one of the new giant metal construction cranes that went up last week is blocking the signal. Sounds reasonable, except the crane went up last week and we didn’t start experiencing any problem until today (or possibly yesterday but no one was in the office to tell for sure).

So work sucks when there’s no internet, because it really drives home just how much we rely on having a live connection. Probably 90% of what I do requires internet access. Stupid crappy “wireless broadband.” I think I’m calling around tomorrow for quotes for a real connection.

This week

Yes, I’m finally back posting. It’s been a week.

The eye surgery went very well, as good as it could have gone, and except for red eyes, you wouldn’t even know our son had surgery. The only real issue we’ve had is a bit of a struggle when we give him his eye medicine (topical ointment). Other than that, everything went through with flying colors.

Coming back from Portland Wednesday we ran into some snow and a short delay on the Santiam Pass. Right about at the summit, in the worst of the snow, traffic was backed up on a corner because somewhere up ahead (out of sight) a truck or snowplow or something had apparently spun out. Otherwise it was a fairly uneventful drive.

Thursday and Friday were catch-up days at work, and it didn’t help that I had my employee review Thursday morning (nearly two hours shot) and the annual company meeting Friday (the entire first half of the day gone). So I’m still behind on some stuff and that won’t go away as I have six more days off this month (three holiday days and three vacation days). Incidentally, my review went fine.

Did some Christmas shopping today. Picked up a few things, need to get more. We have “Secret Santa” at work next week and I have two of five gifts so far.

And to top it all off, my right wrist is hurting like a son-of-a-bitch. All going blind jokes aside, it’s been sore all week and since yesterday it’s just killing me; I don’t know if it’s onset carpal tunnel or a pinched nerve or what, but the source of the pain seems to be the base of the thumb joint at the wrist, and I can’t make much of a fist nor grip anything with any strength. Nor is there really a full range of motion without it being painful. Typing is not terrible, but not great. Gah. Must be getting old.