Mar. 6, 2010 at 1:33pmFlash's Last Stand?

The Movement Beyond Flying Text

This article about Virgin America abandoning Flash for it's website popped up late last week and it seems fitting since there seems to be a lot of discussion around Flash and mobile operating systems - specifically Apple and the iPhone and iPad. Actually there has always been a lot of discussion around the effectiveness of Flash and people usually fall into two opposing camps - yeah, big surprise I know. 

My take is that Flash is a good tool when used in applications that could be made way more difficult to accomplish without it. I believe it is a good standard platform for video and some specialty drawing or gaming applications - but that is about it. 
Read more →

Mar. 2, 2010 at 11:48amDisable UAC Windows 7

I was annoyed after a upgrade to Windows 7 on a workstation machine, in order to do anything , you have to "approve the action" because of the UAC (User Account Control) settings are turned on by default.

Just as painful is finding where the UI "checkbox" is to turn it on and off.

Needless to say I ended up having to play around with the command line to turn the UAC Off and On.

To save you the trouble here it is. Read more →

Feb. 16, 2010 at 12:30pmFunction Caching in PHP

Using static variable as a function's cache

Web apps become notoriously slow when running database queries. Often times we find ourselves writing a useful look up as a function, and then forget that it requires a query each time. This is where caching comes in. And PHP has a really clean way to do it.
Read more →

Feb. 16, 2010 at 10:00amLet it Shine

I gotta have more cowbell

I've been reading Linchpin by Seth Godin and one of the things that Linchpin's do is let it shine. Godin says, "if you're going to go to all the trouble of learning the guitar, then SING IT! If you're not going to, why are you wasting your time?"

The famous Saturday Night Live skit says it best according to Godin. In fact, it takes Bruce Dickenson (yes, THE Bruce Dickinson) to convince Will Ferrell to play more cowbell when he is tempted to just fit in. The thing is, not playing the cowbell with gusto is the same as not playing it at all.

more cowbell

You can either fit in or stand out. Not both.

Feb. 15, 2010 at 3:56pmWe All Win

No, this is not a spineless diatribe on why we are all winners. Even though I received a trophy when my 1987 youth soccer team came in last place, I don't share that sentiment. No ... this is about win-win situations. One in particular in fact.

I wrote a while ago about seeing a "To Write Love On Her Arms" t-shirt while at Disneyland while my family was there celebrating my wife's birthday. We love that place. So when we heard about their program this year about getting a day pass for giving a day of service (Give a Day, Get a Disney Day), we jumped at the opportunity.
Read more →

Feb. 15, 2010 at 9:25amThe Rush Toward Faceless Transactions

Time to Reclaim Some Humanity

There was a Bank of America ad a few years back that I believe was in some way trying to make my point with this blog title. The narrator discusses how they have systems in place to take your single check and deposit it in the correct account every time. Furthermore they handle not just yours, but millions just like yours every night and all while there are millions the only one you really care about them getting right is yours. 

Customers don't care how many other things you have going on, they only want to know that their job is the most important thing on your plate - and while you are working on it, or discussing it, it better be. 

So, for that one instant when Bank of America is depositing your check time stands still and yours is the most important one. The fact that they handle millions really is irrelevant as long as when your number is up they get it right. 

Read more →

Feb. 4, 2010 at 1:58pmPresumption of Excellence

The Start of the Death Spiral

I try and run at 5:00am most mornings, and during that time and the cool-down period I do my best to reflect on what's going on in my personal life as well as what's going on in our company. I am constantly looking to challenge the way we do things and look for ways to increase my personal effectiveness and SiteCrafting's effectiveness.

I have learned a lot observing other people and organizations and I've always tried to put myself and our company under the same sort of microscope. You see, ultimately it is not a race against others; there is really no competition except for the competition with ourselves. 
Read more →

Jan. 30, 2010 at 9:55amThe Reason for SHIFT

Celebrating Local Tech Stories

So, there's been a lot of discussion around town as to why we at SiteCrafting felt we needed to create the SHIFT Awards. The answer is actually very simple. We're creating this recognition event to celebrate local business and their utilization of technology.

This event springs from the refrain that was often heard at the South Sound Technology Conference about how we in the South Sound need to get together and create events around technology and collaboration. The reality is that there is a ton of great stuff going on in the South Sound relating to technology, and it's about time we look around and say, "Hey this is a pretty great place to live, work, and innovate." 

I'd like to explain a bit of our vision for this event by first clarifying what the SHIFT Awards are not about, and then what our true purpose has been for this idea, as well as some insight on the honorees and goals for the event this year and beyond. So here goes...

Read more →

Jan. 13, 2010 at 1:28pmSVN Files Since Revision

Need List of File Since a Revision

An SVN command that gives a list of modified files between revisions. It is very useful when uploading files to a live server and when running through quality assurance. Another command to keep in your bag of tricks.
Read more →

Jan. 11, 2010 at 9:23amHoliday Volunteering at the YWCA

On December 22nd, over half the SiteCrafting crew headed down to the Pierce County YWCA to help out in their Christmas gift center. Every December, the YWCA's gym is transformed into a "store" where residents can pick out gifts for their parents/children/siblings.

13 of us volunteered to wrap and label presents during two different shifts. While the first few presents seemed to take an eternity to wrap, we soon got into the swing of things and were cranking them out like nobody's business. Good thing too, as there were lots of presents to go around. Donations come from several sources: individual donations, Girl Scout troops, churches, even Hell's Angels contribute everything from toys and clothes for the kids to housewares and perfume for mom.

YWCA Gift Center
Read more →

Dec. 2, 2009 at 12:15pmSiteCrafting Honored as 3rd Fastest Growing Company

2009 Fastest Growing Companies ShotLast night, myself, Brian, Julie, Mandi, Michael, Nick, and Kirk attended the Business Examiner's Fastest Growing Companies event at the Tacoma Glass Museum. Last year, we were honored to receive the #6 spot out of 10 finalists, but this year we received third place.

Finalists were selected from companies headquartered in the South Sound. The winner of the #1 spot this year was Wichert Electric Inc from Chehalis.

BCRA also won the Longevity Award for the second year running.

Congrats to Wichert Electric, BCRA and all the other finalists. 

Nov. 20, 2009 at 2:20pmNot in the Stars, but in Ourselves

Thoughts on South Sound Technology Conference

I had the privilege of being on a panel discussion this morning at the South Sound Technology Conference. Our panel consisted of Derek Young from Seasonal View, John Dimmer from FIRS Management and Tacoma Angel Network, Mark Briggs of SerraMedia, Graham Evans of the WTC, and myself. Our topic was on Entrepreneurship in the South Sound. 

The panel had input on a variety of topics including mentorship, building connections and the importance of community for companies and start-ups here in the South Sound. After the discussion I enjoyed a bit of networking before heading out for what turned into a very long conference call, but that's how it goes. 
Read more →

Nov. 17, 2009 at 12:43pmVanessa Behan Tour

Last week Michael and I had the opportunity to spend some time with the staff of Spokane's Vanessa Behan Crisis Nursery. As a Gear Grant recipient, we'll be working closely with the crisis nursery on giving their website an overhaul, updating it to better serve their current needs.

Amy Swanson, the nursery's Executive Director, gave us a tour of the location and let us in on both the sad and really positive things that come with running a crisis nursery. Some of the stories make you really feel for the children that can't do anything about the situations that they are in, but the amazing success stories shore up the positive work that they are doing.

Read more →

Nov. 12, 2009 at 11:26amDetecting when self=parent in MySQL

and not letting it ruin your day

Usually, it's a bad idea to allow elements in a tree to be parents of themselves, because that creates problems with trying to add other children to those elements, or even listing out the tree's structure.

But, sometimes things have to be their own parent. For example, if you want to report details of an element's children to the parent element, what happens at the top level of the tree? You can't outright exclude a tree element from the reporting, you can't create a placeholder element because that would skew the tree, and you can't add in a special case in your code base for that single item.

Well, you could, but you don't want to. You'd rather have a simple and elegant solution that doesn't require lots of special cases for tree levels, and that doesn't require maintenance. So what do you do?
Read more →

Nov. 10, 2009 at 11:02amHiding Behind a Maintenance Wall

Using .htaccess and Cookies to manage a maintenance page

A common task in web development is updating a live server. There are many ways to do it, but some of them require downtime. Rather then turn users away, it is best practice to put up a maintenance page. But what if you still need access to the site while you are updating it? .htaccess and Cookies to the rescue!
Read more →

Oct. 23, 2009 at 11:42amStackOverflow DevDay Seattle Conference

On Wednesday, I had the pleasure to attend and volunteer for the StackOverflow DevDays conference in Seattle. StackOverflow is a programming Q&A site, much like Expert's Exchange except without the nagging to register. It boasts over 1 million page views per day and something like 20 thousand active users.

There were many interesting topics covered, from ASP.NET to Qt, and there's a few new ideas that I want to try out now.
Read more →

Oct. 23, 2009 at 8:30amAdobe's BrowserLab Goes Live

Browser testing just got easier, and more shiny!

It is an unfortunate fact of internet life that not all browsers are made equal. Pages viewed in Firefox may look completely different in Internet Explorer or Safari. Most developers consider this a very frustrating part of the development process, and often wish there was an easier way to test things out. Enter Adobe's BrowserLab. Given a publicly accessible URL, BrowserLab will generate full-size images that depict how a given page will appear in various browsers.

Read more →

Oct. 20, 2009 at 4:57pmThere's No Place Like Home

Forget Kansas, It's All About Spokane

During my freshman year at PLU, I woke up to two friends throwing my coat and shoes at me and telling me to get dressed and come outside to see all the snow. I jumped right up and did what they said because I heard it rarely snowed in my new town so there was no time to waste. We ran outside and I couldn't believe my eyes. People were making snowmen, snow angels and dragging sleds in a whopping inch of snow. Talk about disappointment. I mean I realize you've got to work with what you've got (so more power to you west side residents) but this just wasn't doing it for me. In Spokane an inch is no blizzard and it better get 24 inches bad to even think about canceling school. Read more →

Oct. 20, 2009 at 2:32pmSide Project Demo Night

Show off your work that's not for work

Thursday, October 22 from 6-8pm, SiteCrafting will host a Side Project Demo Night in our conference room.

Read more →

Oct. 19, 2009 at 3:40pmPromote from Within

Home Grown Companies Get It

So, it's time to put on our "retention caps" for issue three in our series on how cities can attract and retain businesses. You can review the previous posts, here and here

Here at SiteCrafting we strive to promote from within - it should be the same with cities and small businesses. Today's small business could be tomorrow's major employer. I just attended the 20th Anniversary of BCRA - a firm that began with three people in 1989 and today is 170 strong - most of that growth occurring in Tacoma. My point is that it's one thing to bring new companies to town - but,  true economic development includes helping to cultivate those existing businesses into "the next big thing." 

Read more →

Oct. 15, 2009 at 2:15pmBe the Connector!

Keep it Local - Keep it Simple Part Deux

So in Part One of this "series" I discussed the need for city leadership on down to city staffers to truly want businesses to open up shop in their city.  I challenged them to prove it everyday, to every new business making inquiries. 

This entry will focus on the prove it part, which not only will show these new businesses that you are serious, but will involve existing businesses. They must prove the City is worth investing in themselves. This cross-pollination or connectedness will not only help the new company, but will keep the existing company engaged and invested.

So how do we do it?
Read more →

Oct. 14, 2009 at 9:47amKeep it Local - Keep it Simple

What city governments can do to attract and retain small business - A Series of Posts On Small Business

Recently I was asked to participate on an Economic Development panel in the City of Tacoma. I presented along with three other companies on the strengths, challenges, and opportunities facing small and large businesses in Tacoma. This was particularly timely with the loss of Russell to Seattle. 

Over the next few weeks I plan on issuing short blog articles outlining what I believe is necessary to not only keep companies in our cities, but to make them thrive. Our experience growing in Tacoma and opening a branch office in Spokane this year - as well as our plans for expansion next year - will provide some insight into one small business owner's perspective of what it takes to strengthen our small businesses. I welcome your comments and questions along the way.

Read more →

Oct. 11, 2009 at 7:08amAppreciating Clients

I recently had the pleasure of visiting Disneyland for my wife's birthday. While it is (by my opinion, and many others') the "happiest place on earth," there are certain things that made this trip even more enjoyable. Not only did my wife receive hundreds of "Happy Birthdays" from the cast workers (due to the birthday button you get on your birthday), but I got to see some of our clients' represented as well.

Read more →

Oct. 9, 2009 at 9:06amPHP String Concat vs Array Implode

Which is faster? Does it matter?

When creating large strings a programming axiom has been to create an array, then join all it's pieces together at once. It is suggested this is better for memory and for speed. PHP, however, is optimized for string manipulation. Does this change the axiom? Read on and find out!
Read more →

Sep. 25, 2009 at 10:21amSubversion Checkouts for Live WebApps Can Be Useful, but Dangerous

The web design and development blog Smashing Magazine published an article today about a problem when using a Subversion checkout to deploy files to a live webserver. In short, anyone could browse to a directory on your website, and see all the source code, including database connection information. (Don't worry, at SiteCrafting we don't do this. We have a much better system.)

The Smashing Magazine article includes tips on how to secure common web servers. Here's another way to secure a site using two simple htaccess rules.

Read more →

Sep. 14, 2009 at 1:31pmDoing Mobile Right

Tips for mobile-izing your site

One great side effect of having no standard way to convert a website for mobile browsing (sorry CSS, it's still not happening) is taking some time to sit down and think what should go on your mobile site.

Read more →

Sep. 9, 2009 at 9:57amSiteCrafting Attends LeMay Auto Show

SiteCrafting attended the 32nd Annual LeMay Car Show & Auction at Marymount Academy in Tacoma, WA on Saturday, August 29th. As the Official Website Provider for LeMay- AMERICA'S CAR MUSEUM®, SiteCrafting set up an informational booth at the event where we showcased sites we developed and made ourselves available to talk about our partnership with LeMay and other community initiatives we take part in.

Read more →

Jul. 29, 2009 at 10:07pmTwitter Takes On Search

With the recent homepage redesign it is clear twitter is out to take a chunk of the search market. Searching the web using twitter is a different type of search though.
twitter
Traditionally search results are presented to a user because the search engine tells them these are the results that are most relevant. The end user really has no connection to that result and really doesn't understand why such a result is ranked and presented to them. Nearly all of the data in these search engines is either crawled by bots or submitted by individual sites.

The twitter search approach is much different. When you search for a topic you are presented with a bit of commentary then a link to an article or blog that relates to the topic you are searching for. The relationship information that you get when searching on twitter is what makes it important. You now have the individual's twitter name, their commentary, as well as when it was "tweeted" so you can take this all into account before you decide if that bit of information is relevant. All of the content you are searching is user submitted so only information that users feel is relevant is added to the search pool.

As usual there are people out there to game these systems but a relationship based search is definitely a smart move and I look forward to the evolution of the real-time web integrating with traditional search.

Right now each type of search has its place but be on the look for a merger of the two types. From a PR perspective its potentially a reputation management nightmare but definitely something to think about.

rtsearch

What are your thoughts on the future of real time search?

Jul. 28, 2009 at 9:11amPHP getCaller?

How to get the calling function in PHP

PHP has great debugging functions. By wrapping one we can find out who the caller of a function is. This blog entry gives a code snippet that returns the name of the function who called the current function by looking at the debug of the stack.

Read more →

Jul. 23, 2009 at 9:38amjQuery 1.3 Closest Function

A quick look at an awesome function

The jQuery function $.closest() is a particularly handy function when doing DOM manipulation. I'll discuss it's power along with an example of it's use.

Read more →

Jul. 21, 2009 at 10:36amjQuery UI Live

Make jQuery UI Widgets Attach Dynamically

jQuery has some awesome widgets, but all of them need to be attached after an element is added to the page. With some quick changes, your widget can be added dynamically to any element using $.live(). Read more →

Jul. 17, 2009 at 3:34pmA New Take on Default Input Values

JQuery Saves The Day

From time to time, we need to put default values into input fields, and have those values go away when a user clicks on that field. There are a few ways to make that happen. I was working on a new project, and came up with a quick way to setup any number of default-able fields. There are two simple steps.

1) Add class="default" and value="Some default text..." to your field. The value can be anything.
2) Include this little jquery function on the page.

$(function() {
    $('.default').each(function () {
        var default_val = $(this).val();

        $(this).focus(
            function() {
                if(default_val == $(this).val()) {
                    $(this).val('');
                }
            }
        ).blur(
            function() {
                if('' == $(this).val()) {
                    $(this).val(default_val);
                }
            }
        );
    });
});

View a demo >

Jul. 1, 2009 at 6:40pmSiteCrafting Tours YWCA Facilities

It's About Time

YWCA Tour Today, SiteCrafting teammates were given a tour of YWCA facilities in downtown Tacoma. We had the pleasure of having our tour led by Executive Director Miriam Barnett and Marketing Manager Kelly McDonald.

Miriam provided some great education on history, purpose and even shared stories of current and past clients. This organization has an amazing history. YWCA of Pierce County was started in 1905 and in 1976 opened the state's first shelter for battered women. It was the largest shelter in western states at the time.

We toured this shelter and learned a lot about the building utilization, client services and the organization's plans for the future. The YWCA of Pierce County is in desperate need of additional shelter space and recently purchased a nearby building that we also toured. This new building provides a lot of potential for the organization as, in the least, it will provide more apartment style shelter space for women and children.

They are currently in the midst of a campaign to raise the funds to fully convert this new building into shelter space, and SiteCrafting is a proud partner in this campaign.

Thanks very much to Miriam and Kelly for this thoughtful and thorough tour of YWCA facilities. You both make it very easy to be inspired and excited to support YWCA initiatives. 

Additional pictures of the tour are available at SiteCrafting's Flickr photostream.

Jun. 30, 2009 at 9:13amFirefox 3.5 and PHP 5.3 Released

Dyslexic Developers Cry Shenanigans

Firefox 3.5 and PHP 5.3 were released today, making a challenge for our lysdextic developers. Read more →

Jun. 20, 2009 at 8:45amLESS is More

Leaner CSS with LESS

A new module for Ruby was recently released which shows a promise for what CSS could be. It expands on the ideas every developer has  Read more →

Jun. 16, 2009 at 8:15amPHP and Connecting to IBM’s AS/400

PHP IBM DB2 iSeries Database Connection

I'm not going to go into details into the hardships I suffered while researching ways to make a PHP database connection to an IBM AS/400 Server and the hundreds of pages and blog postings I read during the process. I'm going to concentrate on what worked for us. Read more →

Jun. 10, 2009 at 10:32amCoast Guard: New Media Mission

The call came in about an hour or so ago from @uscgd13 "Coast Guard is launching on a man overboard off the Ferry Wenatachee on the Bainbridge Island run." The "tweet" was picked up by @King5Seattle which is how I learned about it.

During the next 15 minutes, I learned that the Coast Guard had scrambled a helicopter from Port Angeles as well as a boat from Station Seattle to assist in the search. Eventually, the tweet "@All the Coast Guard is standing down from the search" was posted after learning the report came from someone that thought they saw someone in the water.  Better safe than sorry, I guess.
Read more →

Jun. 8, 2009 at 8:15pmThe Secret to Managing Employee Social Media Activity

SiteCrafting's Common Sense Approach

There's an interesting article in Business Week about how employers are scrambling to develop policies to manage employees, especially those in leadership roles, in the development of their social reputation through social media tools like Twitter and Facebook.

We're often asked by clients and partners to advise on the development of their own social media policies, and we find, more often than not, that most first runs at a social media policy are created from very paranoid perspectives. Unfortunately in this realm, micro-managing often back-fires, which is why we encourage development of policies that stay simple and respect common sense.
Read more →

Jun. 2, 2009 at 5:08pmExploring SPL: Part II

Implementing ArrayAccess

In this installment, we will be exploring one of SPL's frequently used interfaces, the ArrayAccess interface. By implementing this interface, a class can allow its objects to be accessed as if they were arrays. This approach is particularly useful for setting up accessor methods for a class (getters and setters), though it can be used for almost any purpose. Let's dig a little deeper...

Read more →

May. 26, 2009 at 10:44amThings that were cool when IE6 was released

2001 was the year of the snake. People born in the year of the Snake are romantic and deep-thinking, wise and charming, although they tend to dismiss others too quickly and are a bit stingy with money. Ideal jobs for them include teaching or psychiatry. In this entry, we take a quick look at what was cool back in the year of the Snake, 2001.

Read more →

May. 26, 2009 at 8:43amThe US Government 2.0

Is Data.gov the start of a more web-savvy government?

It seems the US Government has finally decided to join the rest of us here in the 21st century. Last Thursday our friends in that other Washington launched Data.gov which suggests a promising future for a transparent government on the web. Read more →

May. 8, 2009 at 12:41pmjQuery Caching Convention

A Way To Name Your jQuery Objects

This blog entry shows you how to cache a jQuery object into a variable for future use. I present a naming convention that I have been using that visually separates jQuery objects from other JavaScript variables. Read more →

Apr. 30, 2009 at 5:03pmBrian Forth Honored at 8th Annual Business Leadership Awards

BLA  ReceptionOn April 29th, Brian was awarded Small Business Leader of the Year by the UW Tacoma Milgard School of Business. The Annual Business Leadership Awards is in its 8th year, and is considered one of the premiere events for businesses in the area.

Read more →

Apr. 29, 2009 at 9:30amHow to create a 3D pie chart in Adobe Illustrator

I'm constantly intrigued by how other designers execute different effects and styles on the web. The other day I figured out a quick way to create a fantastic looking pie chart in Adobe Illustrator.

Read more →

Apr. 27, 2009 at 6:35pmPercentage Width Margin Table IE Bug

Do I win the prize for longest title?

Internet Explorer has its share of bad bugs. IE6 in particular is well known for it laundry list of CSS bugs. While troubleshooting some code for a newsletter I discovered a rather bizarre one. After testing, I found that it affects everything from IE6 to the recently released IE8. It is mostly just for fun because the chances of running into it are pretty slim. Read more →

Apr. 27, 2009 at 10:25amExploring SPL: Part I

The SP-whatnow?

With the advent of PHP 5.0 came a new collection of built in classes and interfaces known as the Standard PHP Library (SPL). The goal of this library is to "solve standard problems and implements some efficient data access interfaces and classes." What gives this library an edge over other third-party offerings is its tight integration into the core of the PHP language and data structures. In this series of blog posts, I will attempt to showcase some of the more useful components of this library.

Read more →

Apr. 27, 2009 at 10:00amMySQL Tidbits: One-shot Page Ordering

The Wonders of the FIELD() Function

One of the common needs for a content management system (hey, that's what we make!) is some form of page ordering. Clients need to be able to manually order pages to suit their fancy, rather than relying on something arbitrary like update time or alphabetical order. For this we use a simple numeric field. On any given given page in the admin center, the user can shuffle around all that page's siblings, which are then posted and have their ordernum fields reset. Typically this is done with a query apiece, as one would expect when trying to update multiple rows with multiple different values on multiple keys. Wouldn't it be nice, though, if there were an easy way to perform this same entire action with a single query? Read more →

Apr. 20, 2009 at 11:09amLeMay - America's Car Museum Visit

It's always fun to visit the places we do business with. It's even more fun when you go as a team and you go as an actual visitor and not as a vendor to a meeting. Such was the case Friday afternoon, when we decided to caravan out to Marymount to visit the LeMay Museum. 

The museum offers guided tours and our group was led by the personable Pierce. He escorted us around the grounds through several buildings and answered our questions in a way that made even the least car-knowledgeable person feel at ease. 
Read more →

Apr. 10, 2009 at 1:23pmHow to Center a Div

Finally, a pure CSS solution!

Centering a div horizontally and vertically has always been a pain for CSS. Not any more! With this trick, you can create a centered block in no time.

Read more →

Apr. 2, 2009 at 12:39pmThe Multiple Interval JavaScript Problem

The Phantom Menace

Using intervals in JavaScript for pausing/unpausing events can sometimes cause a phantom interval which you can't control. Learn how to stop that phantom in it's tracks with one line of code. Read more →

Mar. 25, 2009 at 9:58amIntroducing Digital File Nuke

Delete files forever

Today, Paul and I were kicking around the idea of secure file deletion. Being able to totally delete/destroy a file is pretty essential when you've got personal information such as credit card numbers or social security numbers.

However, there aren't a lot of easy programs that will do that for Macs. Paul found a Dashboard widget, and I idly remarked that coding up a custom program wouldn't be too hard. Well, he called me on it. So, about an hour later, I came up with Digital File Nuke, a Mac app to securely delete any file.

Read more →

Mar. 16, 2009 at 3:28pmWorking in your Pajamas

Not that hard to do these days

Video chats been around awhile now and its something I now take for granted. I'm constantly catching up with friends using my camera on my macbook when meeting up with them isn't easy anymore.

Today at the office I was shocked though. Looking over in the office at a team of our rockstar developers I saw them all huddled around a workstation talking with their team leader Kevin. Kevin was running his weekly morning meeting with his team from Scotland! The picture quality and sound had very little lag and it was almost like he was here.

Working remotely in an industry like ours is getting more and more common. Our office makes heavy use of instant messaging, VoIP, SiteCrafting internal management system, and email allowing us to constantly be in contact and available whenever and wherever.

The amazing thing about these technologies is how easy they are to get going with them. It was painless for our team to talk and within minutes everyone was back to their jobs at hand. Communication is key for a team when individuals are working remotely. I constantly hear people from other companies complain about when a coworker is working from home since it often delays their deliverables, here not so much.

Mar. 16, 2009 at 1:54pmMaking Legalese Easy to Understand

As I was checking out the consumerist.com today, I noticed an article about Aviary.com and their Terms of Use. Normally, Terms documents are terrifically difficult to understand. This one, however, includes plain English explanations alongside the legal-jargon.

This is a fantastic little step forward to a better web, and one that I would love to see become more popular.

aviary-tou.png

Mar. 12, 2009 at 7:51amGoogle Voice to the Rescue

It's no secret that nearly everyone in the web industry has some level of entrepreneurial spirit in them. Side projects are constantly being worked on and thought about. I, myself, run three community sites on the side. I have 4 Myspace profiles, 5 emails addresses, 2 Facebook accounts, 3 Twitter accounts, 1 Linkedin, 1 Friendster, 2 AIM accounts, 1 MSN account... now your probably thinking I'm nuts and wondering why...

Because so many of my projects are in different niches, having a way to manage the image and voice of that project is key. Many people are familiar with business incubators where when a client calls in on a number a shared receptionist answers the phone a certain way... same idea. By having a way to file people into different accounts it helps me manage all of the people trying to contact me and allows me to prioritize responses much easier.

This all works fine except with one type of contact. My phone number. When out and about, people have asked for my cell. If I have a personal connection with them I'll give it to them but if they are more of a business contact I tell them to just email me. Out of all of the ways to contact me my cell is definitely the "bat phone" so sharing the details are much more private since it is much harder to filter out the noise.

There is a solution just around the corner that I'm extremely excited about. In 2007, many of my friends turned me onto Grand Central, but they were quickly swallowed up by Google and I was unable to get an account. Well, news just came out about it, stating that it might becoming out of closed doors soon as Google Voice.

Google Voice allows you to get an alias phone number that is then routed to your phone. Also, all voicemail becomes digitized, allowing you to play via web interface!

Check out the video:




This solution will now make it extremely easy to give out a number that you can cancel at any point, all while keeping your personal number available and private. Another great advantage is if you are working on a site targeted at a certain state or city you can get a local number that gives you the image of being local.

Mar. 11, 2009 at 12:59pmjQuery.live()

A new way to setup events

jQuery 1.3 has added support for live events, and it makes developing a breeze. Before, you'd have to wait until the page is completely loaded to add events to elements. And if you added new elements to the page, they would need special attention to have events added. Not anymore! Read more →

Mar. 10, 2009 at 9:01amKindle for iPhone

Is that a library in your pocket...?

I downloaded the new Kindle application for the iPhone last week and I love it. Prior to the download, my arguments against eBooks have often followed the same ones you've already heard - 

What about the emotional attachment to paper - the texture the smell of books?

Who wants to read a book on a tiny screen?

My new question: "Have you ever tried it?"
Read more →

Mar. 2, 2009 at 11:30amMapping folders to Asp.net

IIS tips and tricks

If you need to have an extensionless URL map to ASP.net 2.0, here are three options.
  1. Add a Wildcard mapping in Internet Information Services for your website
  2. 3rd party software, such as ISAPI 2.7 or higher
  3. Redirect 404 errors to 404.aspx and use Global.asax to capture the URL that caused the 404 error
Example:
Have http://www.mywebsite.com/calendar/ map to http://www.mywebsite.com/calendar.aspx


Read more →

Feb. 25, 2009 at 8:11pmSafari 4.0 Beta

Game Changer?

So at the risk of unleashing the wrath of my own team members against me I am going to have to say this...Safari is better than Firefox. So what if there are several different browsers? All you need is this one. This will be true until the ante is upped yet again by Mozilla, Opera, Google or Microsoft. But today, Safari 4 is king.

Now I'm not going to go into all the technical reasons, as I don't pretend to know all the ins and outs of why one is faster, more compliant, etc. I'll leave that to the comments and the input from our team. I will say, however, that as a user I love it.


Read more →

Feb. 9, 2009 at 10:00amCSS Animations in WebKit

See what's new in the latest build...

WebKit, the muscle behind both Safari and Google Chrome has recently added CSS animation support to its nightly build. While a long way from being supported in any widely used browser, this does give a bit of a preview for what we can expect in the future. It's hard to say whether these new animations will be widely adopted, and if they simply become the new "blink tags" of the modern web world.

Read more →

Jan. 22, 2009 at 11:21amGiving Actions to Classes

Actions without JavaScript!

A concept of how to define actions using classes. Best part is, there's no need to know JavaScript!

Read more →

Jan. 20, 2009 at 4:17pmObama's New Home (on the Internet)

WhiteHouse.gov overhaul

At 12:00 PM, Eastern Standard Time, most eyes were on the swearing in of Barack Obama, 44th President of the United States. But at the same time, a total redesign of the President's official website, whitehouse.gov, was being launched.

Read more →

Jan. 19, 2009 at 2:35pmStyling Inputs is Hard

jQuery to the rescue!

Internet Explorer 6 is just too old to support all the fun CSS tricks of the modern web. The Input Type selector is one of the most problematic. I suggest a quick jQuery function to get around this.

Read more →

Jan. 7, 2009 at 7:07pmE-Cycle Washington

Have a bunch of old computers sitting around at home? As of January 1st this year, there are 200 locations in Washington State that recycles desktop and laptop computers, monitors and TVs for no charge (just remember to destroy anything with memory in it.)

The project is called "E-Cycle Washington" and more information and locations can be found here .

Jan. 6, 2009 at 4:20pmBuckle Up!

With a little help from a client...

Our logo (the gear) lends itself to many-a-unique uses. It's been used to depict Rudolph on last year's Christmas card, a throwing star held by a ninja on some company t-shirts, and even used as a knock-off of the good 'ol Jolly Roger. We're always trying to come up with new ways to use and new things to put it on.

Read more →

Jan. 2, 2009 at 10:43amVisual Studio 2005 and Crystal Reports

Adding/Deploying Crystal Reports to the Web Server

When you install Visual Studio 2005 Professional on your development computer, you get everything you need for adding Crystal Reports to your ASP.net 2.0 project or web site. However, your web server does not have Visual Studio 2005 Professional installed on it, which it shouldn't, which means your nice new reports will not work. What should you do? Read more →

Dec. 2, 2008 at 10:08pmFastest Growing Companies

Thank You!

I have a seven year old who loves boxes. He loves building playhouses, cars, and hideouts using as many raw materials and all the imagination he has, and he does it everyday. He has faith in me and depends on me.

 I have a five year old, who loves her daddy more than just about anything and who loves princesses and dress up. She is learning to read and is getting better at it every day. She counts on me to be there, to support her and to love her.

Read more →

Dec. 1, 2008 at 8:26amASP.net 2.0 and .htm or .html files

Methods for page redirects

We have a CMS that generates static html files and some of those pages redirect to a different web page. When that occurs the static page has a combination of meta-refresh, javascript, and a paragraph with a link to the redirected page to handle all possible scenarios. Unfortunately, this combination poses some issues, such as a blank page being displayed while the redirection is occurring, if the page is slow loading the user will see the paragraph text, and once the redirection is completed, the back-button will not work in IE. To avoid these issues, here are a couple of solutions for handling those redirects, the first is to have ASP.net serve .htm files, the second is to install ISAPI Rewrite version 2 or 3.
Read more →

Nov. 25, 2008 at 10:41amVolunteering For the Emergency Food Network

I may never eat carrots again.

There's something extremely satisfying about doing for others.  It's not very hard, doesn't take very long, yet makes a huge difference for those in need.  Saturday, November 15, some co-workers and I headed over to the Emergency Food Network's Distribution Center for their monthly Repack Project.  Giant bins of frozen vegetables are repacked into 1-2 pound bags for distribution to over 70 food banks, hot meal sites, and shelters throughout Pierce County.

Read more →

Oct. 31, 2008 at 9:52amHappy Halloween

You hungry?

Happy Halloween from SiteCrafting! Today we found a chicken in our office. Feel free to order him around.

Free video streaming by Ustream

Oct. 27, 2008 at 12:01pmHow to use jQuery in a Prototype world

jQuery Namespace Workarounds

Prototype and jQuery conflict over the $ function. In the entry, I will show you how you can start to include jQuery code in the an environment that is already Prototype heavy.  Read more →

Oct. 13, 2008 at 8:45pmVariable Resolution In Server Side Cursors

Or: Things you don't know until you do them on accident

I was working on a content retrieval procedure recently, and hit a snag. I needed to retrieve the content of one field, do some other processing, then compare that content to a field in another table. That middle processing step was preventing me from just doing a JOIN between the two.

Logically, what I wanted to do was this:
BEGIN
    -- set up variable to store name of table
    DECLARE storedValue VARCHAR(64);
    
    -- query to grab the value used later
    SELECT firstValue
    INTO storedValue
    FROM FirstTable
    WHERE id = 1;

    -- other stuff happens here

    DECLARE tableCur CURSOR FOR
    SELECT *
    FROM SecondTable
    WHERE secondValue = storedValue;

    OPEN tableCur;
    tableLoop: LOOP

        -- process results

    END LOOP tableLoop;
    CLOSE tableCur;
END
Read more →

Oct. 10, 2008 at 10:43amGoto Code in PHP

It's not as bad as you'd think

Sometimes, you just need a way to GOTO. Here is a little trick that will duck out of a section of code using break

Read more →

Oct. 6, 2008 at 4:43pmStats In MySQL Pt. III: Alphabetical Distribution

Not as snazzy-looking as my last two, but a useful query nonetheless. One the applications we built over the years, among other things, takes a list of names and addresses (currently a little over 2600), and selects around 200 of them at random. The client has been keeping track of the alphabetical distribution of last names with each random batch, and was concerned that the apparent weighting of the list toward the beginning of the alphabet was evidence that the lists were not truly random.

Fortunately I was able to get a quick statistical breakdown of the overall list, using the following:

Read more →

Sep. 25, 2008 at 4:43pmJSCommandlet Released

JavaScript Development Made Easier

We're happy to announce a new bookmarklet called JSCommandlet. It is a JavaScript console developed for use within SiteCrafting. If you do any kind of JavaScript development, especially working with Internet Explorer, JSCommandlet is for you.

Read more →

Sep. 19, 2008 at 9:20amDisney PhotoPass

Real World to Web Done Right

Leave it to Disney to get it right. We've all heard the stories. We all know about the legendary service, cleanliness, and fun. This story is a bit different as it is about all of those things, but more in my area of interest.

Here's the set up. I spent a week at Disneyland with my family. Fun was had by all. I enjoyed seeing my kids enjoy the rides, the characters and the fun that is Disneyland. All in all, I took over a thousand photos and a lot of video. Where the story gets interesting is in the photos I didn't take.

Read more →

Sep. 16, 2008 at 11:18amStack Overflow: Liftoff!

A handy developer community launched yesterday.

Today marks the first day Stack Overflow opens its doors to the public. In case you're not in the know, Stack Overflow is essentially a Q&A site geared towards developers of all kinds. It takes a language/technology agnostic approach and simply provides a framework within which the community can ask and answer techincal questions. Think of it as ExpertsExchange.com except free and much more community driven.

Read more →

Sep. 5, 2008 at 4:01pmThe New .phar PHP Package

PHP now comes with a carry-on!

Today I discovered a very powerful addition to the PHP world. Phar is an archive extension for PHP that allows an entire PHP application to be packaged into a single file. It's basically PHP's answer to Java's .jar archive format. Don't get excited yet, it gets better...

Read more →

Sep. 2, 2008 at 1:43pmFirst Look at Google's Chrome Browser

The Browser Wars Expandeth

Though adding another browser to our already rigorous bevvy of website testing doesn't appeal to me, having new such programs help drive web innovation is always welcome. Case in point: today's beta release of Google Chrome.

Read more →

Aug. 27, 2008 at 9:51amStats in MySQL Pt. II: Histograms

Fun with ASCII graphs!

(Author's note: not necessarily actually a practical idea. But fun!)

So pictured here is a histogram of a moderately large set of random integers. Each vertical line represents the total number of entries at each particular integer. Since each number is made up of multiple random factors (10 different random numbers, each between 0 and 100, added together), the distribution tends toward a bell curve.

So how did I build the graph? Excel? PHP? Nope. Just a MySQL query.

Read more →

Aug. 26, 2008 at 8:45amStats in MySQL Pt. I: Outliers

Finding spikes in your normal data

With most large sets of data, especially numerical data, statistical analysis plays a key role. You can't be bothered to look at every record yourself; that's what computers are for.

One useful tool in any statistical analysis is the identification of outliers. Assuming you have a normally distributed set of data, outliers can help to identify user error in the data entry process, or genuine spikes in the data. Once found, these numbers can be set aside for closer analysis or eliminated to normalize the data set.

There are many different methods for identifying outliers, with varying levels of rigor. Here I'll just demonstrate one of the simplest definitions: an outlier is any value greater than three standard deviations away from the mean. Read more →

Aug. 26, 2008 at 6:44amiPhone Goggles

See how iPhones view your websites with iPhoney.

As mobile access to the web increases, it is becoming more and more important to ensure sites are usable on mobile devices. iPhoney attempts to address the iPhone camp with a desktop application that renders web pages within a virtual iPhone.

Read more →

Aug. 25, 2008 at 11:11pmLet's get Sirius

Subscription Renewal Chaos

So I have a new car. Well three months old and I've been taking advantage of the FREE installed satellite radio. I have to say I was pretty certain that I'd let the system expire once the trial was over, but after commercial free radio with good music, I have to say I'm hooked.

So, when the extend your service email arrived in my Inbox Saturday, you bet I clicked to extend my service.

Read more →

Aug. 21, 2008 at 4:48pmThe Company Email Signature

No Animated Gifs here

As a company brand evolves, it's often easy to forget about little things such as the email signature. The email signature, which appears at the close of a message, is usually where contact information exists, consisting of info like your name, title, dept, website, address, and phone number. I say "usually" because many people feel this is a spot to showcase a little bit about themselves. They do this with such things as banners, animated gifs, inspirational quotes, and even their photo.
Read more →

Aug. 21, 2008 at 2:14pmThey Don't Build 'em Like They Used To

Websites have sure grown up

As one of the "older" employees at SiteCrafting, and as I get ever closer to the birth of my first child, I find myself mirroring my father's sentimentality by reminiscing about the "good 'ol days". Sometimes the "they don't build 'em like they used to" adage can be a wistful lament, whereas other times it can be joyful proclamation. Gone are the days of the sturdy, craftsman house with rough-cut timber and spacious attics, as we now build with prefabricated trusses, foam-filled roof sections, and 4x2 lumber that's really 3 1/2 x 1 1/2.

Read more →

Aug. 20, 2008 at 5:32pmWebsite Innovation Profile #1

Lettermans Club

Changing the way an entire industry works is never easy. It can take a lot of time to get people used to doing things in a new way. Fortunately, during the past few years we have witnessed entire industries become disrupted by innovation. The Internet has changed the rules in so many industries - digital music, travel, banking - the list goes on and on. So one of our customers asked, why not Letterman jackets?

We all remember (at least those of us that were jocks) receiving our letter and going to the nearest sporting goods store and ordering our jackets. Typically, we chose from a limited set of styles, got measured, paid some money, and then waited 4-6 weeks for delivery. It's a process that still plays itself out in most of the country. Enter Lettermansclub.com...
Read more →

Aug. 20, 2008 at 3:57pmInnovation

Why are we doing this?

So I came across a great blog post on innovation posted by Peter Dixon - When Super is Just Plain Superfluous and I have to say he just nailed it.

So much has been made of the need for innovation that people have lost track of what the word even means, they just know they need to do it. Which I guess is good if you are in the business of providing solutions that help people "innovate". 

Unfortunately, every day people are "selling" innovations that ultimately serve no purpose or are just enormous time wasters.
Read more →

Aug. 20, 2008 at 11:20amMySQL Login Truncation

Why yes, you can log in with an invalid username

Stefan over at Suspekt brought up some interesting security vulnerabilities based on MySQL's column truncation tendencies (when not in strict mode), so I thought I'd add my own to the pile, this one right in the grant tables.

MySQL's user table restricts user names to 16 characters (and hosts to 60). Any attempt to create a user with a longer login results in an error. However, unlike Stefan's example where a field is compared, then truncated and then inserted, MySQL actually truncates a login attempt before processing it.
Read more →

Aug. 19, 2008 at 5:00pmFinding the Needle in your MySQL Haystack

Fun with stored procedures pt. I

(First in what will probably be a series of blogs as we move all our projects to a replicated, MySQL 5.0 environment, and I finally get to start playing with all the useful features that come with it)

Say you've got a client, Mystery Client A. Mystery Client A has hired a marketing consultant. As a part of their rebranding efforts, they have decided to refactor their company spelling convention to MysteryClientA!, for whatever reason. That's fine for replacing a few logos, but MCA has a database-driven content management system, and their name is riddled throughout the database in page content, event description, news headlines and so forth. Your job is now to sift through the entire system and apply the newly crafted spelling to the entire database. So what do you do?

Read more →

Aug. 18, 2008 at 2:48pmQuick Lost Content Recovery Option

Google cache as quick fix backup

No matter how protected your website may be, sometimes you still need a helping hand when an accident happens. Delete a page while fumbling with FTP? Someone else in your office write over your work on a webpage? Heck, maybe your entire site is down! Google Cache may be able to help.

Read more →

Aug. 15, 2008 at 11:24amWindow.Name experiment

Does anyone use it yet?

I am starting an experiment to see whether the recent blog chatter about window.name is actually being used. Included is some JavaScript that you can put in GreaseMonkey to help me in my search. Read more →

Aug. 12, 2008 at 4:39pmWeb Semantics of a Blog Comment

Yes we are that nerdy

So, whenever I meet up with good friend of mine, Scott Schiller from Flickr, we often talk about geeky things such as Web Semantics and the "proper" way to mark up different things. I know there are a few of you out there who enjoy this topic so here is my question to you.

What do you think is the "proper" way to markup a blog comment in this image?

Aug. 11, 2008 at 5:28pmSEO

Stop the Insanity!

I am amazed how many people are willing to ignore email solicitations from some mysterious contact in Nigeria that needs your help to get access to $15,000.000. All they need from you is for you to help. Your reward, you may keep two-thirds of the money. Yet these same people receive an email or phone call from someone they've never met promising search engine nirvana and they take it, hook line and sinker. Do these same people buy the stock picks recommended when they get an unsolicited FAX or email?

Look, we all want to be noticed. If we didn't we'd never buy flashy car rims that spin, add exhaust pipes that sound like F-16s, or wear perfume. Your website is no different, it wants to be seen and you want it be seen. Which is exactly what most Search Engine Optimization firms are counting on.
Read more →

Jul. 22, 2008 at 4:41pmOnload Collisions and How to Fix them

Harry Potter and the Onload Collisions

There is no other variable more fought over then the coveted window.onload. Its job is to run a function after a page has been loaded. The problem is that there is only one variable, and therefore only one function can run. Once you have set this you would think you are in the clear. That is until another script comes in and overwrites onload.

But all can be made well in JavaScript land once one of four choices is made. I give four ways to get around this problem, and suggest a way for modern browsers to be rid of this problem once and for all.
Read more →

Jul. 11, 2008 at 4:33pmMySQL Tidbits: The XOR Toggle

Fun with bitwise logic!

A web app full of data is often going to be full of tables (at least on the administration end). A listing of users here, all the recently created events there. Often for readability we will alternate rows between two slightly different background colors.

This can be handled on the PHP end with a bit of math and a counter, like so:

$count = 0;
while( $row = mysql_fetch_assoc($res) ) {
    if( $count % 2 == 0 )
        $background_color = 'white';
    else
        $background_color = 'gray';

    /* OUTPUT TABLE CONTENTS WITH GIVEN BACKGROUND */

    $count++;
}


However, it can also be done entirely in-database, via creative use of the XOR operator: Read more →

Jul. 10, 2008 at 3:36pmCoding Fonts

Not just an endeavor in aesthetics!

Having recently discovered the plethora of coding fonts available online, it occurred to me that quite a bit of thought has been put into something I have always seen as rather trivial. The more I read about it, the more I have come to realize that using a font specifically designed for software development can be extremely beneficial.

Read more →

Jun. 30, 2008 at 8:00amFaux Paw in the Footer

Why do we put a copyright in the footer? Why not a publish date?

In web design we commonly put footers in the bottom of the page which include links, legal information, and usually a copyright date. But why? And is there something else we should include?
Read on and I promise not to use any more bad puns.

Read more →

Jun. 16, 2008 at 8:56amWrite .NET Applications in PHP

Say what?!

That's right, you heard me! It's all thanks to a fantastic project called Phalanger, which adds a super-fast execution environment for a very large portion of the PHP scripting language. Certainly this was only a matter of time, combining one of the most popular open-source languages of the web with one of the most powerful enterprise-grade frameworks.
Read more →

Jun. 5, 2008 at 9:43am'M' is for Model, 'V' is for View . . .

Four hilarious programming videos!

During my morning blog-scan I came across four videos that really set my day off on the right foot. And that song! Oh that song! As much as I can't stand it, I'll be humming it all afternoon today. If you're familiar with the MVC model, then these videos were made for you.

Read more →

Jun. 4, 2008 at 10:50amGoogle's Search Appliance

The Mini in a Nutshell

I recently had the opportunity to work with one of Google's latest search applances, the Mini. Having no previous experience with any of Google's search hardware, this seems an excellent opportunity to offer a newcomer's first impressions.

Read more →

May. 19, 2008 at 10:23pmJay Ray Think Lab

A Place to Think - For Health Care

I was honored to be asked to present at Jay Ray's Think Lab earlier this month. The day long event was focused on marketing / technology solutions for regional health care providers and was held at The Inn at Gig Harbor.

The program included practical tips and discussion on a variety of topics, including my presentation, How to Wow! Website Innovation. Other presenters included Andrew Fry and JayRay staff.

My presentation,  of course begged the question...How does one wow with the web?
Read more →

May. 14, 2008 at 4:15pmDumping Duplicates

Deleting all semi-matching rows in MySQL

One of the more recent additions to the SiteCrafting CMS arsenal is a comprehensive error logger, tracking all PHP and MySQL errors (by default... other error types can be created on a case by case basis) that occur in new sites we build. Errors are stored in our own intranet system with a timestamp, error body and a site ID (assigned to each client at a different stage of our project workflow). The table looks something like this:

+----+---------------------+---------------+---------+
| id | logTime             | text          | project |
+----+---------------------+---------------+---------+
|  2 | 2008-05-14 14:42:15 | A PHP Error   |       1 |
|  3 | 2008-05-14 14:42:26 | A PHP Error   |       1 |
|  4 | 2008-05-14 14:42:34 | A PHP Error   |       1 |
|  5 | 2008-05-14 14:42:47 | A MySQL Error |       1 |
|  6 | 2008-05-14 14:42:56 | A MySQL Error |       1 |
|  7 | 2008-05-14 14:43:05 | A PHP Error   |       2 |
|  8 | 2008-05-14 14:43:10 | A PHP Error   |       2 |
|  9 | 2008-05-14 14:43:21 | A MySQL Error |       2 |
+----+---------------------+---------------+---------+
8 rows in set (0.00 sec)

Obviously sometimes we get duplicate errors coming through. Aside from being mere mortals who aren't always fast enough to correct an error before it recurs, one of the first stages of debugging is to try and replicate the error. These are often pretty easy to manage. It's pretty trivial to search for all matching errors, check them all, and delete them. Sometimes, though, this just doesn't cut it. Like when there are a few different errors with 10,000 occurrences apiece.

Read more →

Apr. 25, 2008 at 9:25amAppreciation

An Honor and a Challenge...

What an honor and at the same time, what a challenge. SiteCrafting is thrilled to be named by The Business Examiner as the Top Place to Work in the category of Employee Appreciation, but --- and here's the big but --- it means we have to live up that honor. A challenge I am glad to take on, given the dedication, commitment, and selflessness shown on a daily basis by our people who truly make SiteCrafting a top place to work.

Sure, we have a lot of very smart, technically minded people working here, but what's more important and worthy of recognition is the fact that we have incredible human beings working here. We have individuals committed to our customers, to our vision, to our community and to each other.

So how did this happen?  And how do I live up to the challenge?
Read more →

Apr. 1, 2008 at 9:48amSiteCrafting to Expand into New Markets

Find out what's next for the high-growth company...

Seeing the time as ripe for expansion, SiteCrafting has launched a new venture in an effort to expand into prescription eyewear. SightCrafters, LLC will bring to the eyewear world what SiteCrafting has brought to the web development business.

Read more →

Mar. 31, 2008 at 11:40amGot API?

An API reference does a method's body good...

gotAPI.com is one of the most useful online resources I've come across, primarily because it places resources spread all over the internet into one simple site. I've been using this for quite some time, and have for the most part I have taken its usefulness for granted. Then it occurred to me that I might not be the only one that could find this tool useful (I know, it was a big 'DUH!' moment). So now I will share this gem with others...

Read more →

Mar. 28, 2008 at 5:40pmChange is Good

Normally government websites tend to be pretty dry and information-oriented, so I was expecting more of the same when I checked the Snoqualmie Pass traffic cameras from the WSDOT this morning. All the standard stuff that I've come to expect from years of checking the site before driving across the pass was there. However, there was one part of the site that gave me a good laugh this morning. Camera 2 was wiped out in an avalanche over the winter, but rather than a simple "Camera Unavailable" message that I've seen in the past, I saw this:

Read more →

Mar. 26, 2008 at 12:41pmMake PHP Growl

. . . but in a good way!

I stumbled upon a fantastic PHP class today and felt compelled to comment on it. Originally written by Tyler Hall, this class allows you to send notifications to any system running Growl from a PHP script. For those of you that don't know, Growl is an application written for Mac OS X that is intended to act as a universal notification tool (much like the taskbar notification bubbles we've all come to know and love in Windows XP/Vista).


Read more →

Mar. 12, 2008 at 4:34pmPHP 5.3 - A Heavy Hitter in Training

PHP's next major release is just that, major!

The evolution of PHP into an object-oriented programming language has been a very exciting process to watch. I'll admit its advancement seems to move at a glacial pace at times, but looking back we certainly have come a long way. With the release of 5.0 we saw PHP leave its childhood and enter its awkward adolescent stage. At this point there is evidence of a mature and complex object-oriented language while stilll exhibiting many of its younger habits.

So what's in store for us next? Find out after the jump . . .

Read more →

Feb. 14, 2008 at 4:29pmTouch the Vote

Rock it as well, if you must

This time of year you either get hooked or get sick of everything politics. That's right, it's a Presidential election season and the 24-hour news cable channels are firing out tons of info both via your TV and online. Some worthy strides in web development practices have also come about on one news site in particular that may help political junkies get their fix anytime, anywhere.

Read more →

Jan. 29, 2008 at 3:15pmPHP Patterns, Part III

The TO Pattern

The Template Object (or TO) is a design pattern of my own that I developed to fill the role of the View layer in the MVC model. As you have probably figured out, the purpose of the TO is to handle everything related to the user interface. The idea here is to separate the interface as much as possible from the rest of the application, so that we could do a complete rewrite of an application without ever touching (or accidentally "breaking") the view portion. Read more →

Jan. 22, 2008 at 7:41pmThere is Nothing Small About Everything

So this is a post I've been working on in my mind for a very long time. I only recently realized that it needed to be written. You see, small business is anything but small. The services and products that businesses like SiteCrafting provide add value to their customers in such a way that small business has become, essentially, everything.

Read more →

Jan. 18, 2008 at 11:29amThoughts On Creating Website Advertising Guidelines

Let's say you've got a website, and you're considering whether or not to advertise on it. Or maybe you've already got a website with advertising, and you're wondering if a particular kind of ad is appropriate to display on your site. The only problem is, you don't have a concrete set of guidelines to filter out what is acceptable, and what isn't. These are the kinds of questions you should ask yourself to resolve this dilemma.


Read more →

Jan. 9, 2008 at 3:51pmPHP Passes Homeland Security Test

Use open-source with more confidence

When meeting with prospective new clients, we tell them that SiteCrafting uses PHP and MySQL as the development platform. Invariably this leads some of them to ask us what PHP and MySQL are and if they are safe and fast. Sometimes, this can lead to interesting conversations, where we explain to them why we think PHP and MySQL are safe and fast.

Occasionally, there's a client who remembers reading an article 4 or 5 years ago about PHP 3 having some security issues. We refer them to current articles on PHP and mention our own experiences, but the latter argument can come across as "Because we say so," which isn't a good way to get the point across.
Read more →

Jan. 4, 2008 at 3:21pmAnonymous Recursion with JavaScript

A new way of solving an old problem

A nice feature of JavaScript is that functions are objects. As such, they do not need a name if they are used right away. But what if you need a short anonymous recursive function? arguments.callee becomes your new best friend.

Read more →

Dec. 21, 2007 at 10:19amTechnical Debt

What the heck am I talking about?

The concept of technical debt (first coined by Ward Cunningham) has been something that has wandered about my head without a name for quite some time. The other day I read an article that finally put it into words. It is what I have always seen as the reason writing beautiful code is not just an endeavor in aesthetics. At this point you're probably wondering what the heck I'm rambling on about. Don't give up on me yet, I'm about to explain . . .

Read more →

Dec. 18, 2007 at 11:03amUnderstanding Web Design at Alistapart = Holiday Joy

Being very fond of the analogy of web design/development-as-architecture, I was overjoyed with this article, by Jeffrey Zeldman, on Alistapart: Understanding web design.

There isn't much more to say; it's the usual web-design-isn't-just-looks,-guys, but very eloquently and effectively worded. The kind of stuff to put on the wall.

Dec. 17, 2007 at 2:56pmFree Buttons

Depending on how well of a response I get I might be doing this more. Figured since the holidays are right around the corner and you all have been pretty good lately I could give you a free mini button set. :) Enjoy


Download Buttons

Dec. 4, 2007 at 11:41amFacebook Beacon: Social Media Becomes Spyware

Advertising Gone Wrong

I've been a Facebook user for quite some time - even before they had the facebook.com domain. One thing that I absolutely love about it is the control they give you to limit what other people see about you. I've adopted a very serious set of controlls that limits only people I actually know to see anything about me. However, this is a false sense of security. Everything I post online that anyone besides me can access is inherently public. This is what initially drew myself and countless other people to Facebook.

However, their new advertising platform - Beacon - throws all this out the window. Beacon is a system that allows Facebook to track what you do on other websites. Let me reiterate that: Facebook tracks what you do online. They don't just track what you say you like on your profile, for example what movies you like; with Beacon they can track what movies you're actually renting.

Read more →

Nov. 30, 2007 at 1:05pmWhy is AOL denying email?

Try adding a parameter to the mail() function

Email debugging is often frustrating and time consuming. There could be numerous reasons why the email you attempted to send out through your code fails: routing issues, firewalls, company servers blacklisting or blocking incoming emails, spam filters, bad DNS records, and email header requirements. The last one can definetely lead to infinite frustration, as I have experienced in the past, and was recently the cause of why AOL was denying emails generated by the php mail() function.

Read more →

Nov. 28, 2007 at 4:16pmStar Wars IV Animated ASCII Art

A blast from the past

In a recent The Code Project Insider email newsletter, there was a link to an animated ASCII art for Star Wars IV, A New Hope. This brought back fond memories of a bygone era, where I cruised the ASCII based bulletin boards on my trusty Color Computer, the CoCo, and played ASCII art games, such as Voyage of the Valkyries (a game written by my Keithley Jr HS teacher Mr. Leo Christopherson*) and Star Trek, on my school's TRS-80 Model 4, trash 80. I also had the experience of entering the code for several ASCII art games from a book, where I learned that the GOTO statement is very dangerous, especially if you put in the wrong line number.

Read more →

Nov. 28, 2007 at 2:02pmRescueTime: Find out where all your time is going...

(but don't tell your boss!)

Having stumbled upon RescueTime, I feel compelled to share my discovery as this concept is just too useful to keep to myself. The basic idea behind this website is to make it easier to keep track of where you spend your time while at your computer. If you find yourself filling out your timesheet at the end of the week only to realize you can't remember what you were doing all that time, this tool was made for you!
Read more →

Nov. 27, 2007 at 7:18amOffice Star Trek: TNG marathon

To nerdly go...

That's what we did a couple Fridays ago here in the office. Brian's wife Julie is an avid Trekker and was excited to plan a Next Generation marathon with us. And we definitely put her complete series DVD collection to good use. From about 5:30pm on we watched episode after favorite episode. After a pile of snacks, some great pizza, sharing Star Trek memories, 7 episodes, it was half past midnight and time to wrap it up.

Thanks to Julie for making the trek (ha!) up and for those killer communicator cookies. We'll definitely have to do it again sometime.

Pics after the break.

Read more →

Nov. 15, 2007 at 6:50amDNS Propagation Explained

There's always plenty of tech-speak flying around among developers in the office. I certainly try to keep such language at a minimum when working with clients but sometimes it just works its way in there. DNS and other domain-related processes can be pretty confusing, period, let alone to someone anxious for their website to go live. So how to explain DNS propagation?

Read more →

Nov. 14, 2007 at 3:48pmPHP Patterns, Part II

The DAO and VO Patterns

In this installment, we will be looking at two patterns that have been 'borrrowed' from Java. If you've had any development experience with J2EE, you are probably well aware of how handy Data Access Objects and Value Objects can be. If you haven't, don't fret! This article was written especially for you!

If you've never heard these terms before, you may be wondering why I have chosen to group them together within one article. The simple explanation is ... well you'll see. For now just accept that they go hand-in-hand, much like salt and pepper or peanut butter and jelly or .

Excited? Let's dig deeper...

Read more →

Nov. 14, 2007 at 12:01amAndroid: The REAL Next Gen of Web Apps

If the iPhone is web apps to go, Google and the Open Handset Alliance's new open source mobile phone API, dubbed Android, is The Joy Of Cooking Webapps. Once again Google has seen a good idea (packing a cell phone full of convenient little apps and widgets that sync with websites and external systems) and figured out a way to make it a great one.

Read more →

Nov. 8, 2007 at 5:49pmWindows Live - The Next Generation of Web Apps?

More like turn back the clock

So, I'm pretty much online all the time. I'm constantly looking for innovative applications and web services. I thought, "I'm going to have a look at what the 'big guys' are doing."

We all know Google is creating some pretty great web applications like their maps or spreadsheet apps. Seems decision makers at the big "G" have squarely set their sites on building innovative tools for web users. Surely, I thought, Microsoft has its plan and it's called Windows Live.

Read more →

Nov. 1, 2007 at 9:28amConfessions of a n00b: Part 1

*web developers really like snacks*

Ahh.. where to begin?  Greetings everyone.  I'm Mandi and I'm wrapping up week 2 at SiteCrafting.  I was informed that it might be interesting to get a new hire's perspective posted on the blog, and now that I'm here, Paul is no longer the new guy so it's all on me.

Read more →

Oct. 31, 2007 at 2:48pmOffice Halloween costume contest

Fully one-third of the staff at SiteCrafting participated in our office Halloween contest today. Though we dressed up to win today's prize a few of us even wandered about the streets of Tacoma on our way to and from a party at local design and architectural firm BCRA. A software pirate, blogging ninja, head-crab zombie, and "J" blockhead walking down Pacific Ave. certainly drew a bit of attention.

Read more →

Oct. 29, 2007 at 10:48amPowered by Coffee

We all know that design and development firms are really run on caffeine. Coffee, energy drinks, tea, and even energy beers now. I usually can be found with 2-3 coffee cups on my desk throughout the week but I will never forget about one developer who I worked with. Each day he would purchase 3-4 drip coffees from Starbucks and then would stack the cups creating a wall about 5 layers high creating his own cubical wall.  It was all fine until one day when a few of them turned sour and his office buddy/management put an end to it.

What do you prefer to drink while working? I'm usually a fan of mochas or red bull. Have any ridiculous stories about coworkers caffeine habits?

Oct. 26, 2007 at 2:05pmApache, MySQL, and PHP on Leopard (Mac OS 10.5)

I just finished installing Leopard on my computer, and my first impressions are that it's very slick and well thought out. One of my necessities as a developer is that I must have a webserver running on my personal computer, so I was dismayed when it wasn't functional after the upgrade. The main reason is that Leopard uses a different version of Apache than 10.4 did, and so some things get wonky. But it's easy to fix. Apache and PHP are included in Leopard, so the only thing missing is MySQL. To install that, go to MySQL's site, and download the latest copy for OS X. It's incredibly simple to install.

After that comes setting up Apache. Open up a terminal window, and type in "sudo pico /etc/apache2/httpd.conf". (Note that you must be a computer administrator to access the files in etc/) OS X 10.4 had Apache in /etc/httpd/, and that's part of why it didn't work after the upgrade. Find the line in httpd.conf that looks like "#LoadModule php5_module        libexec/apache2/libphp5.so", and remove the # sign at the beginning. Then search for AddType, and put the following somewhere around it.

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

Save the file, and exit. Then open up System Preferences in Finder, and click on Sharing. Then turn on Web Sharing. That's all you need do to to setup a webserver on Leopard, or upgrade from OS 10.4. You should be able to open up a browser, and enter http://localhost/YOUR_USERNAME/ and see that the server is running.

Oct. 12, 2007 at 1:23pm2007 SiteCrafting Company Retreat

No One's Missing the Trust Falls & Human Pyramids

The SiteCrafting team spent the first weekend in October enjoying the Hood Canal area as part of this year's company retreat. Being as we suffer from a distinct lack of petty office politics and other Dilbert-esque characteristics,  "company retreat" is not synonymous with "endless torture" for us here.

The getaway was designed to allow the team to take a break from the office routine and gain capacity to review and offer input on company strategy, successes and our roadmap for sustaining growth. As usual, our collective wit, insight and sarcastic humor made these discussions interesting, informative, motivating and memorable.

Read more →

Oct. 12, 2007 at 11:38amSiteCrafting Culture Very Similar to Flickr

Two weeks ago I had a chance to fly down to San Francisco and check out the Flickr HQ. What I found was a team and office culture that was extremely similar to what we have at SiteCrafting. If you have ever had a chance to visit our office I'm sure the first thing you noticed was how quiet it is. Just as in our office the flickr team rocks out with their headphones on too.

Here is a quick little Venn diagram comparing the two companies:



It was really cool seeing that all of the perks which make our company what it is comparable to the Yahoo funded Flickr group.


Oct. 10, 2007 at 10:28amLions and Tigers and Blogs! Oh My!

Are You Sure You Really Need That?

For the last 3 years I've worked on less and less "Brochure Sites" and more and more web applications. Clients have really taken it for granted as to what features a website should now have. Tag Clouds, CMS, Social Bookmarking, Send to Friend, Add as Friend, Digg It, Wiki and Blog are all things constantly being chanted by clients.

Don't get me wrong, there is a place for these features, but why do you need it all? How will a feature like this affect your company? What's the value add?  Luckily, I've worked for ethical companies that have helped mentor clients through the process to help determine what a client really needs.

We could charge a client an arm and a leg for things they don't need, but what good is that? We are not in the business to have our clients fall. In no way is that beneficial to our Partnership. Read more →

Oct. 8, 2007 at 9:52amPirates != Web Developers

Unless they work here

Unless there's a Seahawks, Huskies, or Mariners game going on, it's pretty rare that I listen to the radio in my car, let alone anything on the AM band. Saturday was the exception as I was driving toward Seattle right after the Atlas Foundry explosion. I kept flipping between the local AM news stations, hoping to hear of any updates as I was just down the street visiting some friends about 10 minutes before the explosion.  Hearing any updates required sitting through weather and traffic reports, as well as what seemed like an endless parade of commercials.  One of those commercials hit upon one of my pet peeves.

Read more →

Oct. 3, 2007 at 3:59pmA GUI Mess, or a Productivity Booster?

What's your take on the database admin debate?

While writing up a review on a database tool I discovered today, I was inspired to spark a discussion about database GUIs in general. The value of GUI tools for administering database systems like MySQL has been a topic of much debate.


Read more →

Sep. 27, 2007 at 3:17pmPHP Patterns, Part I

The Registry Pattern

This is the first in a planned series of articles discussing the application of various PHP patterns. If you're still getting your feet wet developing in PHP (or programming languages in general), you may be wondering what a "pattern" is in the first place. The best place to find a quick explanation is over in Wikipedia's article (which does a much better job than I could hope to do within the scope of this article).

Now, let's move on to the fun part . . .



Read more →

Sep. 24, 2007 at 1:43pmSiteCrafting outed for being awesome

Current clients not surprised

Dan Voelpel begs the following question in yesterday's Tacoma News Tribune: "If I asked you to name the most underrated business in Tacoma, what would you say?"

First on Voelpel's list was SiteCrafting. The article defined "underrated" by those local firms that are either well-known but who's contributions are deeper than at first glance or others, like us, who fly somewhat under the radar but do great business.

Read more →

Sep. 20, 2007 at 9:32pmInteract

What's the big deal?

We want to stay connected with our customers. We want customers to meet other customers.  We want our potential customers to see just how easy it is to take control of their website and make it more successful. We want to give you the chance to meet others that are using our tools, that is why we have created "Interact".

We realize that people are busy. In fact, most people, when they get to the office, don't have time to even think about much of anything other than the hottest potato that has been thrown in their lap on that particular day. Rarely do they have time to get a few minutes to update their websites, even more rare, the time to strategize ways to make their website make their lives easier.  That is why we believe Interact is so important.

Read more →

Sep. 18, 2007 at 4:02pmFriday office creativity gets out of hand

Maybe next we'll break into song

Who knew a seemingly innocuous internal email would make for some good laughs and groans? I sure didn't when I invited folks from the office to join in a Friday after work pseudo-tradition.

Read more →

Sep. 13, 2007 at 11:45amif (date('z') == 256) echo("It's Programmers Day")

Translation: It's Programmers Day!

For those that aren't aware, Programmers' Day is today and marks the 256th day of the year. If you just thought to yourself "wow, that's 1111 1111 in binary!" then consider today to be a day in your honor. In case you're wondering why this particular day was chosen, consider this: 1111 1111 is the last of the 256 possible values of a byte. Read more →

Sep. 12, 2007 at 4:52pmAJAX & IE Caching Issues

I've been working on a project that involves using the jQuery javascript library and the Ajax methods. I've been happily using the Ajax jQuery.get() method to handle simple calls, such as a link that allows a user to view a list of words based on their selection, getting the contents of a tab when the user selects a tab, and finally getting the current weather after the person enters a new zip code, which is then saved to the database.

For the last operation, I got the JavaScript working great on Firefox and I thought it was working in Internet Explorer. However, after some testing, I noticed that the same weather data was being returned, even after a new zip code on the opposite coast was selected. Mmmm, I was rather baffled, especially since I've been using this jQuery.get() on the other functions, and encountered no problems like this.

Read more →

Sep. 6, 2007 at 4:45pmAdventures in Database Migration Pt. I

Fie on commas! Fie!

SiteCrafting is in the process of phasing out some of our older servers, and as an added bonus, the clients hosted on those servers are getting a MySQL jumpstart, leapfrogging over 4.1 to go straight from 4.0.24 to 5.0.32. Tragically, it's not quite as simple as dump | import. This is what I get for bothering my bosses for a few weeks not long after coming aboard about how nice stored procedures, updatable views, and triggers could be.

"The wonderful thing about standards," a wiser person than me once said, "is that there are so many of them." That's not the whole of it, though. One good thing about standards is that there are certain features one can generally rely upon to work, translate, port, etc. Assuming one works within them, rather than taking advantage of loopholes allowed by their not-entirely-compliant-but-we're-getting-there-and-anyway-isn't-this-way- easier-and-faster software. When people don't (and I'm not entirely innocent here), you run the risk of turning your simple upgrade into a serious project when your favorite software decides it's time to comply a bit more.

Read more →

Aug. 10, 2007 at 2:19pmLong URLs create interesting wrap-effect in Firefox

In the process of trying to figure out what in the world was wrong with my stylesheet, I went to W3 to validate it (and, although it is irrelevant to this post, I found my problem in a typo. Isn't it always a typo?) Since I am lazy about these kinds of things, I did the validation by direct input rather than finding and uploading the actual file, and something entirely odd happened: the URL bar contained something that looked like a solid black mess. After one forced shutdown due to being worried that something had gone wrong, I copied and pasted the content of the bar into a text document and lo and behold! It was the URL (a 34 000 word one, no less, due to the direct-input validation's method of incorporating all the CSS into the URL) and because of its length, it had wrapped over itself.

Read more →

Aug. 9, 2007 at 4:14pmGetting the Client’s IP Address

There are a number of reasons why you may want to capture a web user's IP address. You may want to only allow certain IP addresses to view your website, to allow only one vote per IP address, track unique clicks on links and buttons, a location of web users on Google Maps using MASHUP, and whatever else you can think of.

Below are a couple of examples to get the client's IP address in PHP and ASP.net, along with a couple of things to watch for.

Read more →

Aug. 7, 2007 at 8:03pmAnswer: Adaptability, Belief, Connectedness, Ideation, Activator

Question: What are my strengths?

So I mentioned earlier that I was reading the book Now Discover Your Strengths, and I have discovered mine, or at least mine as are determined by a 30 minute profile. What's strange is I never do well on these tests, I always find myself answering the questions the way I think they want me to and I wonder what that says about me...

Anyway, this is what my profile tells me. I am adaptable, have strong beliefs, believe everything is connected, thrive on coming up with ideas, and value action. My strengths are below:

Read more →

Jul. 27, 2007 at 2:56pmPHP Code in The Background Part 2

Passing Arguments To Command Line

The blog entry How To Run PHP Code In The Background discussed how to run a php file through the command line using php's exec() command.  Recently, I needed to pass a querystring to the php file, but this is not possible through the command line. If you try to pass a querystring, the exec() command will fail.

Fortunately, after some googling, I came across a forum post that mentioned how the global array $_SERVER["argv"] can be used to get arguments being passed through php. I then followed the link on that page to Chapter 43. Using PHP from the command line on  the php.net website. Under the user contributed notes, I found a nice little function for getting the arguments and placing them into an array, similar to $_GET, $_POST, and $_REQUEST.

Read more →

Jul. 23, 2007 at 5:29pmASP.net 2.0 Gridview vs. Custom Coding

A balance of needs and time

I recently decided to try the Gridview control in asp.net 2.0. I read some documentation and decided that it would be very easy to implement. I started by following a step-by-step tutorial on creating a table using the Gridview control, which uses the SqlDataSource control. This step-by-step tutorial included details on how to add paging, column sorting, updating a record, and deleting a record. The tutorial can be found here.

I was actually excited when I got this to work and how easy it was to do. It would only take a few minutes to create a simple, paged, sortable table where a user can delete and update records right on the page. Please note that simple is the operative word here.
Read more →

Jul. 19, 2007 at 12:03pmOne iPhone = Web Apps to Go!

Feeding the Hype

OK, so I promised myself that I would wait until the second generation iPhone so I could let them work out the bugs and lower the price. Then I played with one and realized I had to retire my RAZR for one of these. Aesthetically, it is a knock out, but I can assure you it's beauty is way more than skin deep.

I have a hectic life, kids, business, and homebrew. All add up to a lot of demands and juggling. I've tried organizational tricks, Palm Pilot, Windows CE, Blackberry, and nothing, I mean nothing is even close to this. I'll stop gushing so that I can give you some practical examples.  

Read more →

Jul. 17, 2007 at 8:06pmWhat I'm Reading

So, some people are interested in what others are reading at the current moment. So I thought I'd give you a view into the sorts of things that I focus on when I'm not working on conquering the web universe.

The fact is, I am always looking for new books and new things to learn. I recently finished a book that was recommended by a client called Indomitable Spirit by Chuck Ferguson which calls itself "The essential guidebook for a lifelong journey of leadership  and the rewards of meeting them".

Read more →

Jun. 20, 2007 at 9:56amOur clients on the road

With all the different companies and organizations we work with, I'm bound to run into them in the "real world". Seeing people around is one thing. Seeing ads is another pretty common one. Lately, however, the signs of our clients I've been seeing are mobile ones.
Read more →

Jun. 14, 2007 at 5:26pmThe Usual [browser] Suspects

My search for the perfect web app testing environment yielded what I though would be a pretty ingenious setup. Stack up a couple Mac Mini's with a KVM and we could cover everything from XP to Vista and IE 6 to 7. The perfect solution, however, ended up being one Mini cheaper.
Read more →

Jun. 13, 2007 at 11:49amSiteCrafting'er burns it up at Hell's Kitchen

SiteCrafting'er Joe and his band This Shirt Is Pants had a gig last Friday here in Tacoma at Hell's Kitchen. A gaggle of co-workers and friends showed up and had a great time playing some pool and listening to the band.

Read more →

Jun. 4, 2007 at 11:31amASP.NET 2.0 Tips - Shared Functions

Visual Basic for ASP.NET 2.0

When developing a recent project for ASP.NET, there was a need to migrate a large number of generic functions that were created in PHP into the .net web project. For .net 1.0, you were able to add a code page that could be used for creating a bunch of functions. However, in .net 2.0, you still had the ability to add a code page, but it had to be a class. This meant placing all of our migrated functions as methods inside a class. To use a generic function, such as generateNewPassword(), you would have to first create a new object for the class and then call the method. Read more →

May. 24, 2007 at 5:32pmExceptional Service Personified

Why Les Schwab will never go out of business

I know, I know. We all know how great Les Schwab is (which is ultimately the point of this entry). Where else do you pull into a parking lot and have a guy (or girl) throw their tools down and sprint to your car to see how they can help you?

Before I begin, I should set the stage. I get home from work Wednesday, and my wife tells me that the check tire pressure light is still on in the car. I've been "solving" this problem by continually adding air to the tire - not a great long term solution, I'll admit. It's kinda like adding water to a lake with a leaking dam. Anyway, we are scheduled for a vacation tomorrow that involves driving, so I decide it's better to take care of it for real at this point.
Read more →

May. 14, 2007 at 8:02amCentering Content with CSS

It's been quiet on the SiteCrafting blog lately, mostly because we've been very busy making websites for out great clients. I've been swamped for the last two weeks with one project, and I know Kevin, Ken, Reena, and... well, everyone has a full load.

My latest few projects have all been sites that have a defined content width, say 850px, but centered in the browser window. The usual way to accomplish centering with CSS is to make the margins of the content to automatically adjust to the window (margin: 0 auto;). Usually, that happens on the specific areas, so if you have three content areas to center, you either need a container for all of those areas, or set margins three times. The first option has problems with backgrounds, and the second results in more code than is needed.

Read more →

Apr. 18, 2007 at 1:08pmPHP PEAR and include_path

When attempting to use the SMTP library from PEAR for a project, I was having problems with including the file. I kept getting a file stream error for this code:

require 'Net/SMTP.php';

I figured the problem had to be related to the include_path setting in the configuration file.

Read more →

Apr. 13, 2007 at 2:19pmHow To Run PHP Code In The Background

PHP Asynchronous Programming

If you have php code that would take longer than 5 minutes to run, what would you do?

You could update the configuration file for apache, or whatever web server you're running, to increase the amount of time a script page is allowed to run  and then use php's ini_set("max_execution_time", seconds) to increase the amount of time php will allow a script to run.

Or you could use a session variable to mark the last position of the script and then use meta-refresh to start the script at the last position.

Or you could try an asynchronous call by using php's exec command.
Read more →

Apr. 9, 2007 at 4:36pmPrinting without the Dialog

One day, one of our clients came to us with a very unusual request - they wanted to be able to print something directly from the browser, but without displaying the usual print dialog box. I don't have much time in the webdev business, but I've never heard of this kind of request, and neither had anyone else in the office.
Read more →

Apr. 2, 2007 at 2:36pmPHP cURL and SSL Connection Timeout

I've been working on a web site that uses cURL for request/response transactions and I was encountering a number of problems with empty responses from the server. This caused some frustrations, since these empty responses caused entire sections of a web page to be empty, especially on searches. Well, I couldn't have that, since people using the website would be confused on why a search for an item only worked occasionally. Trust in the web application would drop dramatically. Read more →

Mar. 28, 2007 at 3:24pmBack in the USSR

It's not a huge secret that I'm a rugby fan. There's a mystique about the rugby culture here in America. It's a lesser known sport in the US, and so when one rugby fan bumps into another fan, as they are prone to do, they usually spend a few moments swooning over the fact that someone else likes their sport. Just last night, I was out at JazzBones in my All Blacks jersey, and someone who I'd never met before started talking about rubgy with me. It was fantastic.
Read more →

Mar. 20, 2007 at 4:55pmCharacter Set Troubleshooting

Over the past few weeks, Reena has been building a new website off and on for a local Jesuit parish.  Everything was going along smoothly until we hit a bump in the road when dealing with a particular page with some Vietnamese text.  After some small (but not obvious) changes in configuration and more research than I cared to do on the subject of character sets, it's all working properly.

Read more →

Mar. 16, 2007 at 10:48amSafari and PNG Headaches

I just finished coding a new photography contest application for a client, and our graphic designer alerted me to some weirdness that Safari has with PNG images. To make a long story quite short, Safari doesn't translate PNG colors to match CSS colors reliably; it darkens them just a bit. The details are beyond me, so instead check out this article for those, and you can see an example in this image. The example labeled "Your Version" is the Safari rendering, and the box labeled "Our Version" is the Firefox rendering.

For you, this means that you shouldn't use PNG images where color matching is important, use GIF instead. However, if PNG use becomes more widespread, hopefully the treatment of PNG images by browsers and OSs will become more standard and can replace GIFs - which have fewer colors and larger filesizes.

Mar. 12, 2007 at 10:27amCleaner forms through collapsible textareas

More form, less space

Some really large forms can be a bit of an eyesore especially to the people filling them out. One thing that always bothered me was how bulbous most textareas had to be just to make enough room for a user to feel they could type what they needed. So I set out to figure a good way to clean up my forms a bit while still allowing the multi-line input of textareas.

Read more →

Feb. 28, 2007 at 1:25pmPHP Strings - Gotcha!

Yesterday I was working with a script that saves an uploaded image to a database. If you've ever seen a binary file as a string, there's a ton of gobbelty-gook that is unreadable to people. For some very odd and inexplicible reason, my script only saved the first four character's worth of data to the database, and that's not very helpful. I did some digging, and revealed a weird gotcha in the way PHP treats strings.
Read more →

Feb. 20, 2007 at 2:53pmOptimizing GROUP BY with Multiple LEFT JOINS

Creative use of temporary tables

At SiteCrafting, I enjoy working with a large number of different projects, each with their own requirements, technology, and problems to be solved, unfortunately, I sometimes forget about past solutions, until after I have finished writing a piece of code. Such is the case with a query that was eating up some serious processing time.

The problem was with a GROUP BY query with LEFT JOINs to several other tables and summing up totals from those joined tables. This query was taking about 4 minutes 45 seconds to run, and worse yet, it was affecting searches which had nothing to do with that query, and probably also eating up precious memory and cpu resources.

Read more →

Feb. 16, 2007 at 11:02amA little thought goes a long way

Why it's important to listen

Here at SiteCrafting, we are quite busy with new projects. As such, we have realized that additional staff is necessary to meet the demands for our services. With the addition of new staff members comes the need for more furniture. We also decided that this would be a great time to rearrange the office, and create 3-4 person "pods" for team collaborative purposes. So, we headed off to the furniture store that supplied us with our current desks and chairs, hoping to place an order for 14 new tables.

Read more →

Feb. 15, 2007 at 4:15pmDesign is Not Art

and neither is your website

When I was back in school, I would often tell people how my combined Art and Computer Science majors did not mean that I was doing graphic design, web design, or any other kind of mix of computers and art. To them, it was obvious that I would combine two usually separate majors into the usual combination. To me, however, art and computer science are totally separate. The purpose of art is in my mind to either 1) evoke an emotional response in your viewer or 2) create something beautiful. Computers are a communication medium, and the purpose of communication is to deliver information.

You can see examples of this every day - in websites of art schools that are impossible to divine information out of, or in strictly information websites that have no graphical content whatsoever. In the case of these two ideas, the graphic-less sites win out in function and usability, but the art school sites look better. The problem is, that the art school sites are impossible to use, and so it doesn't matter how good they look. The clear winner here is the plain, yet content centric site. And the lesson to learn is that content is king, and communicating that information well and effectively is the key to building a good website.
Read more →

Feb. 2, 2007 at 10:53amQuery conservationist

The fewer the queries the better

I always enjoy trying to do my work creating web applications using the fewest number of database queries possible. It's kind of a pride thing, I guess. That and I suppose it makes to improve an app's performance and reduce the load on a server. If you're into that kind of thing. ;)

A technique I use subtitutes the temptation of using queries whose results call queries and instead uses only two.

Read more →

Feb. 2, 2007 at 10:11amScript Timing, v2

Making the timer look better

Last time, I outlined a way to create a simple PHP script timer. I use this timer in many of the projects that I work on, and it's really helpful to nail down trouble spots in scripts. The thing that it lacks, however, is a decent display. When you call the elapsed() function, it only gives you a number. Creating a decent display for each timer call is tedious and boring. So I simplified it. Now, I'm going to extend the existing Timer class and add some new functionality - make it look better and make it easier to call and display the information.

Read more →

Jan. 26, 2007 at 4:14pmMaking a PHP Script Timer

I've been ranting about a lot of things lately, but not many of them are related to my job description. I want to take a bit of time, and go back to good old PHP, CSS, and Javascript. Today, I'm going to go over how to create a execution timer that will let you know how much time has passed since it started. There are a number of benefits to using one of these things, for example to track down why a script would take 77 seconds to complete rather than 3 or less. (It was a bloated SQL query)
Read more →

Jan. 19, 2007 at 4:52pmEmulating Form POST in PHP

There's small choice in rotten apples.

Recently, I had a need to POST a form, using PHP script, to a remote url.  As I started to research a solution, I soon realized there were very few limited options.

Read more →

Jan. 19, 2007 at 10:03amPrototype Documentation

Finally...

One of the most popular javascript libraries, Prototype, has finally released a decent set of documentation. I'm really pleased, because it was a little difficult to work with not knowing what was available, and how to use all the tools.

Their website is very simple and easy to use, and will quickly become one of my most visited sites. If you haven't used Prototype, I highly reccomend taking a look at its features. It makes javascript development very fast and simple, even for complex problems. I've used it to great success. I don't know how it matches up with some other javascript libraries yet, but I'm planning on reviewing all of them.

Jan. 18, 2007 at 12:03pmEmail newsletters in Outlook 2007

One thing that we frequently build in conjunction with new websites is a tool for sending out email newsletters.  For the most part, we stick to XHTML/CSS and try to stay away from using "old" layout techniques (i.e. tables) for the newsletters.  This allows the greatest flexibility between the large number of email clients (e.g. Outlook, AOL, Yahoo!, Eudora, Thunderbird, Pine, etc.).  Businesses love being able to quickly communicate with their customers, and email newsletters are a great way to do this.  But things are changing, and if you use HTML newsletters, you'll need to make some changes too.

Read more →

Jan. 16, 2007 at 11:23amDiary of a Developing Developer

Learning by Doing

I never had any idea how complicated, confusing, and involved the development of web sites and web-based applications can truly be. When I was younger, every once in a while I would look at a web page and click the "view source" option and think, "Wow, that really doesn't look too difficult to learn."

Little did I know there is so much more behind the code than what is seen in that one snapshot of HTML.

Read more →

Jan. 11, 2007 at 9:35amFlexibility in foul weather

I'm working from home today mostly because Ma Nature dumped about six inches of snow on my house. In an area where an inch will shut down the city, this is a bit more serious. It really pays, however, to have a flexible employer so I don't have to brave the hills around town. The beauty of the web and digital communication is that it allows for these kinds of opportunities whether the weather, saving some fossil fuels, or even emergencies are concerned.

Read more →

Jan. 10, 2007 at 10:22amThe Dependability Challenge

Striving to be Exceptional

The gauntlet has been thrown down. We can't hide now...we must be exceptional.

While it is nice that we were recently recognized for dependabilty, I see it as more of a challenge. A challenge for us to do more, perform better, and have more satisfied customers.
Read more →

Jan. 8, 2007 at 2:44pmLet me know you care

One of my biggest soapboxes is the communication soapbox. Everyone has had times when communication broke down, and something went horribly wrong as a result. I don't mind saying I've had more than a few, but each time I took the effort to figure out why the breakdown occurrred so that I can fix it in the future.

One of the biggest, most beneficial means of communication is meeting with people face to face. There is mountains of data, information, and communication that goes on with facial gestures alone, and body language and tone of voice are equally important. Unfortunately working in a consulting agency, I don't get to meet many of the people that I'm building software for.

As a result, I have to fall back on more technical, yet less personal means of communication such as phone calls, email, and instant messaging. Here's some tips I've compiled about effectively communicating with out seeing the person you're talking to.
Read more →

Jan. 4, 2007 at 3:35pmWhy the Best Advertising Just Might Be Free

or how you too can find a reliable professional who doesn't advertise

Last month, I was doing some major work on a house when I ran into a problem I couldn't handle. I needed a plumber, so I did what a lot of people do -- I turned to the nearest telephone directory. At the top of the PLUMBING section, I saw the name AAA++ Plumbing*, and promptly skipped right over it. (More about why I did that later). Read more →

Dec. 18, 2006 at 10:37amThe Right People For Your Job

I'm in a band. Well, two of them, but only one that matters for this discussion. I've noticed that the progression of a musical group that wants to be professional on some scale in many ways closely mirrors that of any product-based business.  You start out spending a certain amount of time in development. You come up with ideas, assemble the best team available to execute those ideas, and then do your level best to refine and perfect your product before you release it to the public.

Read more →

Dec. 15, 2006 at 3:15pmService in the storm

With all the storm-induced power problems in the Puget Sound area a few of us were able to make it into the office today. The area is a patch work of service availability -- I know of houses with power and phone but no internet access, some with no power but the phones work, and yet others with power but no phones. A stroke of service my co-worker Ken displayed today was brilliant in its simplicity but it probably meant the world to one of our clients.

Read more →

Dec. 13, 2006 at 4:12pmThe <select> Tag and innerHTML

While I was working on a recent project, I ran into a weird bug with IE 6. I was using some AJAX to dynamically fill a <select> tag with options depending on what element was selected from the tag's parent. It worked fine, and quite seamlessly in Firefox, but broke for inexplicable reasons in IE. Read more →

Dec. 11, 2006 at 4:36pmNames 1, IDs 0

I never enjoy finding quirks in something so seemingly simple when I'm coding but it certainly happens. The following is a tale of how I ran into trouble with a couple attributes that should be worlds apart.

Read more →

Dec. 7, 2006 at 11:36amHow My New Car Can Help Your Website

I just got a new car - a Volvo 240 Wagon. I can't wait to take it on a road trip. This is the first time I've gotten my own car, and so I've been dealing with all the licensing, emissions, and insurance paperwork that goes along with buying a car. I've learned two important things from buying the car, and I want to share. Read more →

Dec. 1, 2006 at 8:41amUse Functions for Readable Code

Code Soup versus Short Stories

On my way to meeting with a client, I got into a conversation about using functions in your code. One of the guys learned to write assembly first, and so his stance was that creating functions was only feasible when you used the same code more than (about) three times. That view makes a certain sense - don't deal with the overhead of creating tons of functions for stuff you'll seldom use.

I argue that you should use functions where ever possible, first because it makes code easier to generalize (and thus re-use), but also because it makes code much more readable.

Read more →

Nov. 30, 2006 at 9:52amGoing Old School

As with most people with an email account, I receive a fair amount of spam each day. Most of it is caught by our spam filters and sent to Never-Never-Land where I won't see it. One piece of spam managed to sneak its way through last week that was just too good to ignore.  With all the advancements in technology to filter out spam, how do you get your message out to thousands of email accounts? You go old school.

Read more →

Nov. 29, 2006 at 10:35amGoing to Boise

Do you know why you have a website?

Got up at 3:11 to drive through the ice to Sea-Tac for an early flight to Boise, Idaho. I was asked to present to the Idaho Pest Control Environmental Care Association at their annual conference on the need or non-need of a website for their businesses. The group was welcoming, the bagels fresh and the coffee warm. I think the presentation a success.

Now I'm off to the Boise Airport for my return trip to Seattle. As promised to the group...the pdf of the presentation and a copy of the handout.

Nov. 20, 2006 at 11:55amTwo Dollars - Follow up

In response to my last post, one reader mentioned that sometimes clients take advantage of a developer's generosity, and that it seemed like I wanted the developers to grin and bear it to keep their clients happy. This is actually quite different from what I wanted to say, and so I want to expand on that a little, and why it's very important for both developers and clients to have a written set of guidelines to keep projects on track.

In my last article, I wanted to tell developers that creating something that works perfectly is almost the only acceptable outcome of a job. For example: do you notice how the gas gauge in your car (or someone's car, if you don't have one) changes depending on the angle the car is sitting on? If the car is perfectly level, the gauge reads correctly, but on hills the level may be deceptively low or high, depending on where the sensor is in the tank. This is hardly a problem when it comes to using the car; it'll keep driving as long as there is some amount of gas in the tank, but it bugs me.

Read more →

Nov. 15, 2006 at 9:12pmMaster of Your Domain

Take control from domain slammers and scammers

It begins with a letter or maybe even an "invoice". It ends with the transfer of your domain to another registrar and in some cases even the loss of your domain entirely.  The term for this is Domain Slamming.

The practice preys upon unsuspecting people who want to pay their bills and keep their domain names current. After all, we have our domain name printed on every invoice, business cards, painted on our trucks, and we advertise with Google Adwords, we don't want our domain to expire. This is exactly what they count on. 

Read more →

Nov. 15, 2006 at 10:39amTwo Dollars

Why going the extra mile always pays off

Two dollars is a small amount, but two is a magical number. Despite it's seeming insignificance, two represents the difference between doing a job, and doing it right.

One summer while I was still in college, I worked in a brewery in Colorado waiting tables. I recommend that everyone work in a restaurant at some time in their life. It teaches you a lot about life and service. While I was working there, I began to understand the value of such a small amount, and how much good work is worth.

Read more →

Nov. 8, 2006 at 1:36pmThe Joys of Object Oriented PHP

It's pretty common for PHP developers to make complex and difficult to maintain scripts, and I am no exception. I write my code in two distinctly different ways: scripts that do a whole bunch of things depending on input, and classes that do a bunch of things depending on how they are called, but from lots of different scripts. But which is better?

It's a nice ego boost for any prrogrammer to know they created a script/function/class that is really useful, and well designed, but at some point the code stops being well designed, and becomes gross. I think that point is when you have one script that displays an entire (SQL) table of data, views a particular row, edits that row, can delete that row, or can add new row to the table.

If my Software Engineering professor sees me doing that, I imagine that he'll reevalute my grade in his class.
Read more →

Nov. 3, 2006 at 10:51amHow To Full-Text Search

Inspired by Joe's MySQL Cross Table Content Search


Here's a quick how-to on implementing Full-Text Searching using Microsoft SQL Server 2005. Originally, I planned on just using LIKE statements in the WHERE clause of an sql query, however, this would not be possible since, as I posted earlier in MS SQL Server 2005 text and ntext, that string functions do not work on text and ntext data types.

That's when I remembered Joe's blog entry about Cross Table Content Search, which he also mentioned in the office a couple of times before his entry. After that, I've been wanting to implement the Cross Table Content Search, and did not get the opportunity until developing the search page for the Pierce County Library.
Read more →

Nov. 2, 2006 at 1:45pmEasy to Use Web Tools

Teach them to fish.

Give a man a fish he eats for a day, teach a man to fish he eats for a lifetime. - Chinese Proverb

As a flyfisherman, I can say this proverb does not mean a lot to me. I've been taught, but rarely catch fish, and those I do catch, I release. However, this entry is not so much about fishing or learning to fish,  it is about sharing knowledge and giving customers tools for success.
Read more →

Nov. 2, 2006 at 10:21amThe Web is not a Field of Dreams.

How to succeed on the Web by really, really trying

With apologies to the fine classic baseball movie…We can build it, but it doesn't mean "they" will come! I was having a conversation about this with a few people from SiteCrafting, who asked that I contribute my thoughts to the Blog.

Read more →

Nov. 1, 2006 at 9:16amBulletproof HTML Critique

I ran across a neat article from Sitepoint via Stylegala that you all should read on how to make your HTML 'perfect'. In the world of design, the concept of perfect is non-existant. There is no solution that will work for solving every problem, and there are exceptions to every rule. This article is no different. Read the full article, and then check out my comments.
Read more →

Oct. 30, 2006 at 1:04pmWhy We Build Our Stuff from Scratch

It's never the same twice.

I had an interesting conversation with a potential client last Friday and it prompted me to think or at least explain our development rational.  He was looking to hire SiteCrafting to assemble a robust application for his client consisting of a design he came up with as well as some "open-source" technologies, and a few custom scripts generated by us. Long and the short of it...it seemed a disaster in the making.

I mentioned to him that SiteCrafting builds our Web applications from the ground up, for each customer as an individual. We do not offer one-size fits all solutions, because just like anything one-size fits all it never fits anyone quite right.
Read more →

Oct. 27, 2006 at 11:34amCross Table Content Search

One of the more interesting adventures working with data storage is trying to aggregate information meaningfully from multiple very different data structures. Imagine you've got a website filled with content (say, a few hundred pages). All the content is stored and output dynamically - who wants to create and maintain 500 static html pages, anyway? And of course, you need a bit of variety, so all this content is spread across five different page designs, each requiring its own template and data structure.

Now you say you want to search your site? All the content? And you want the results all together in one big happy sorted-by-relevancy list? How on earth am I going to do that?

Well... like this.
Read more →

Oct. 27, 2006 at 11:25amMS SQL Server 2005 text and ntext

text, ntext, and image data types have been deprecated

How I discovered that text, ntext, and image data types have been deprecated and replaced by varchar(max), ntext(max), and varbinary(max).

Recently, I needed to perform a query to update a number of links for the Pierce Count Library website. I thought I could use a simple REPLACE() string function, unfortunately, this turned out not to be the case. In order to update text and ntext datatypes using a query you're limited to a few functions, in my case I would be forced to use SUBSTRING() or UPDATETEXT().

Read more →

Oct. 24, 2006 at 9:41amGroup By Queries for MS SQL Server

Applying MySQL Wizardry to MS SQL Server

Back in the day, we worked on developing a specialty application that was basically a lead generation system with a database that stored over 200,000 records, with a potential for a lot more. The web application displayed numerous reports that calculated totals from disparate sources. We discovered that once our client began adding all their data that those reports were running slower and slower and slower.

The problem was that we had one primary query to pull the records out, then, as the code looped through each record, several other queries were needed to calculate the disparate totals. That resulted in numerous database calls that slowed the entire web application. That's when Mike discovered MySQL Wizardry, that used the SUM(IF()) and the GROUP BY clause, problem solved.
Read more →

Oct. 23, 2006 at 10:50amFirefox 2.0

Mozilla releases new browser when it's good and ready.

Hot on the heels of the Internet Explorer 7 release, Mozilla Firefox 2.0 is slated for official release tomorrow, but, as often happens, they have posted the full release version up on the mirrors already, so you can find what you're looking for at ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/2.0

Read more →

Oct. 20, 2006 at 9:17amWhat Customer Service Should be Like

I recently received a gift certificate to a popular online merchant, aka Company. I'm not telling who Company is, because I like them, and I don't want my comments to be taken the wrong way. The entire thing was a fiasco, but I ended up with a nice warm and fuzzy feeling, simply because the merchant actually cared about my experience.

Here's the important parts:
  • If something goes wrong, tell the customer why
  • Never have an action with out a success or error message
  • If you can reasonably accomodate the customer's request, do so
  • Respect your customer's schedule
  • If the customer isn't happy, ask them why
Read more →

Oct. 18, 2006 at 10:57pmIE 7 Out and About

Seems like the cat's out of the bag. Well, IE 7 is now available for download, anyway. Good to see Microsoft update their browser software after five years away from the party. Can't say I'm personally looking forward to this install but even if the only thing better about IE 7 is PNG support, I'm all for it.

Download IE 7 and let us know what you think! You can be sure we'll be doing extensive client testing and will post our thoughts as they solidify.

Oct. 18, 2006 at 10:46amNavigation Nightmare pt. 1

Something no developer wants to see...

foreach ($left_elements AS $le) {
    ?>
    <table class="leftnav_<?=$le['class']?>">
        <tr>
            <td class="leftnav_<?=$le['class']?>">
                <a href="<?=$le['target']?>" class="<?=$le['theme']?>"><?=$le['name']?></a>
            </td>
        </tr>
    </table>
    <?
}


Nobody wants to see that. Especially not seven different times with seven tiny variants covering seven different if conditions.

Each higher 'class' number is a deeper indentation. Apparently it's necessary for this class identification to be repeated for the table, table cell and link. Converting this to a nested list format (part of my current task) is going to be an adventure.

Well... at least it's indented nicely.

Oct. 17, 2006 at 11:33amSmart Keyword Searching

Earlier this week the brand new Pierce County Library website officially launched. It was a pretty complex build that took a lot of effort between ourselves and the library's staff to make sure that everything worked right for the site's users. One of the more important features on any website with a large amount of content is a solid search function, and this site was no different. With over 300 pages (and still growing), a user could easily have some difficulty tracking down the information that they are looking for. So what can you do to make finding information easier? Read more →

Oct. 16, 2006 at 12:57pmFile Extensions

I've been using a fairly complicated function to grab the extension of an uploaded file. I have run across many instances where I have wanted to split up the file name from the file extension, or just find the file type. Since MIME types are not reliable enough for grabbing a true extension, I have been using this aforementioned function.
Read more →

Oct. 13, 2006 at 4:56pmInto the Nested Table Abyss

At least it's clean code!

While I was taking some time to evaluate a 3rd-party application for a customer I took a peak at their site's HTML. I was pretty shocked when I found some very strictly organized code that contained gobs of nested tables. At one count I found a structure that was 10 tables deep! I suppose since enjoying creating clean mark-up and mostly table-less designs for the last few years I've forgotten my roots.
Read more →

Oct. 13, 2006 at 10:59amA Piece of Query Cake

Making Inserts Sucks

If you've ever created SQL queries with PHP, you probably know what a pain it can be to create insert and update statements. I really, really (really) don't like it. As I was working on my personal site, and exploring possible frameworks to use, I came across CodeIgniter. They have a great database interaction library, especially the function for creating the insert queries.

Today, armed with only the descriptions of CodeIgniter's query helper functions, I spent 20 minutes trying to duplicate some the effect of the insert and update functions. I've never seen the code, or even used it, but I didn't have to see the code to write a similar function. Both functions take a table name and an associative array of column names and values. The update function also requires a WHERE statement, and it can't be blank. This is different from CodeIgniter, and that's so you don't accidentally reset all of the passwords in the mysql users table, or any table for that matter. And then, *poof*, the function gives you a nice sql statement.

I'll never have to write another "INSERT blah blah blah" again. Yay!
Read more →

Oct. 12, 2006 at 11:13pmUsing What We Build

AKA Avoiding Lines at the Health Department

It's not often that I use the stuff we build. It's not that I don't support the businesses we do business with, it's more that I spend so much time online thinking of how we build things for our customers that I don't generally get a chance to actually use the websites we build in the way a customer would.
Read more →

Oct. 11, 2006 at 7:29pmThe Three 'M'-igos

Why butter fingers break apps

Happens all the time, right? One minute you're cranking out line after line of quality code then the next it all comes to a screeching halt for no apparent reason. I immediately go into troubleshooting mode. A quick and simple redirect using a header("Location: ...") function should pose no danger of messing up my app -- but today it did.
Read more →

Oct. 11, 2006 at 12:24pmWelcome to Our Blog!

Welcome, and thanks for coming to the long-anticipated Blah Blah Blog! What you're going to find here is a rare peek behind the curtain at the inner workings of a leading Website and Web Application Development company. Our aim is to make this Blog different than the billions of other Blogs you could be reading. So start by expecting the unexpected.

For starters, we won't be afraid to reveal secrets or point out how we've learned from our mistakes. The main focus will be technology – but we'll also include proprietary Web tips & tricks, relevant business news, stories from the workbench, and more. Use the navigation on the right to get around, and check back regularly. Your category choices will grow as we add posts. And you never know what you'll find from day to day.

Oct. 9, 2006 at 11:31amStrange Behavior with Opera 9 and Safari

While I was working on the latest site for Airstream, I came on some extremely weird behavior concerning the navigation. First off, the designers did an extremely good job with the visuals. On the other hand, I had to be really creative to figure out how to make various parts of the site work.

Here's some background for how the navigation was supposed to work: there are five sections to the site, and each section has sub sections that show up in the navigation bar, depending on what your current location is. Navigation and sub-navigation. Also, the navigation area has a graphical background that can't change. Since the PNG spec isn't fully supported by IE yet, we had to go with GIF or JPG graphics.

Here's what it is supposed to look like (and what we ended up with):

Airstream - Intended

Read more →

Oct. 9, 2006 at 9:51amBaby Congrats Lunch and Bowling

Hey bowler, bowler!

So last Friday was a great afternoon. After visiting our customer  Primo Grill for a celebration lunch, we proceeded to Chalet Bowl for a couple games of bowling.

It was good to get out of the office for a bit to celebrate the upcoming birth of Hiromi's baby (no, we don't know if it is a boy or a girl yet, but will soon). We all pitched in and purchased a Baby Bjorn and a baby wipe warmer. Kevin claims that a happy baby is a baby with warm wipes. Speaking from experience, I'm not so sure. Sometimes nothing, not even promises of hundred dollar bills will silence a crying newborn.

We had a fantastic time, complete with an out of body bowling experience by SiteCrafting's own David Poole. Dave's penchant for turkeys (three strikes in a row) allowed our team to coast to victory in both games.

To view more pics, have a look at Kevin's blog