Main

Web Development Archives

November 4, 2011

Trouble updating Eclipse plugins for PhoneGap or Android?

After watching Ray Camden's show-and-tell session today on using PhoneGap to create his mobile app WTFRU, I was inspired to install some of the same Eclipse plugins that he used so I could create some apps myself. It's been a while since I fiddled with the Android SDK, so a lot of my packages were way out of date.

But I ran into errors while trying to updated the Android plugins; quite a few of the errors in the update log referred to messages such as "No repository found containing org.eclipse.mxunit/osgi..." Most of the messages referred to that osgi library, somehow. I thought that somehow I had some majorly screwed up libraries on my hands.

After searching, it turned out the problem and solution were relatively simple: update URLs should have trailing slashes at the end. Refer to this blog post for the specific solution. If anyone else runs into update issues because you're inspired by Ray's work, I hope this solution is helpful to you.

November 16, 2011

Evaluating online wireframing tools

I've recently found myself evaluating wireframing tools, and I thought I'd share the results of my analysis. First, let's put out a definition of just what a "wireframe" is:

"[a wireframe] is a visualization tool for presenting proposed functions, structure and content of a Web page or Web site. A wireframe separates the graphic elements of a Web site from the functional elements in such a way that Web teams can easily explain how users will interact with the Web site."
From Webopedia

Here are the main criteria I used to compare wireframe tools:

  • I would prefer an online tool, or at least a desktop tool that offers real-time collaboration instead of file fragmentation. This tool should offer the ability to preview or user-test the wireframe over the web.
  • I would love a tool that promotes and supports gradual enhancement of site elements, starting with basic page elements showing relative priority, then adding layout, then adding visual design.
  • I would love functional prototyping, where you can configure clickthroughs from one page in the wireframe to another. In-page functional prototyping (such as drop-downs, popups, overlays, AJAX, etc., would be a bonus).
  • I really want master templates to support global changes to page elements (ie, when you change the header or footer or even the layout of the template, it affects all pages in the wireframe).
  • Export in HTML/CSS is highly preferred since it would save me time, but it's not completely necessary from my perspective.
  • I would love the ability for us to add comments and annotations to individual page elements. This will help us evolve each wireframe, and annotations can serve as valuable notes during development to tell webdevs how each page should function.

I looked at the following tools:

  • Like the snap-to alignment!
  • Drag pages onto page elements to create links
  • I like the ease and simplicity, but there doesn't seem to be a header/footer/page wrapper-- no master templates.
  • Only exports as PNG/PDF.
Summary: I really like the simplistic, easy-to-understand, let's-just-wireframe interface for MockingBird. This product has great potential. But the fact that it doesn't have master templates and doesn't export to HTML makes this tool less useful than I need.

  • Exports as HTML.
  • I don't like the open dialog, but I love the fact they have templates for different devices.
  • Flash-based, and so the interface just isn't as fast as others.
  • Controls for master templates are very hard to find.
Summary: this tool reads as if it offers us everything we want, but I find that the interface just isn't pleasing to use.

  • Requires Flash
  • Has page commenting
  • I like the presence of the drag-n-drop widget list, but it's ordered alphabetically instead of by functional groups, and the drawings look like a pencil sketch.
Summary: This tool also reads as if it offers everything we want, but I don't prefer the user interface.

  • It's a download, but has collaborative access (even SVN, where you can check out individual pages).
  • Can upload files to share.axure.com to generate password-protected prototypes, or can generate local prototypes.
  • You can export all copy
  • You can gather and manage comments
  • You can add annotations/page notes
  • Export HTML
  • Masters make templates for header, footer, etc.
  • Disappointing that you have to publish specs to MS Word
  • Disappointing that it's not a one-step publish to a web-available prototype.
Summary: Even though it's a desktop tool, I really like the Axure interface. Its annotations and comments work really well, and I think the SVN capability would let us work perfectly well in real time. It produces very good documents, and I think we could easily live with the local HTML exports (as opposed to online prototypes).  It is way expensive, though. Worth it, if you ask me. I really like this tool. Of those I've looked at, it has the easiest-to-use interface by far.

  • Has templates and masters
  • Has component/widget palette, but these tend to be richer and more complex than I really want.
  • Has page documentation and annotation
  • Lets you modify CSS and HTML
Summary: Of the pure online tools, I would have to settle on Protoshare. Note that I use the term "settle", because I don't prefer the interface (Mockingbird really has the best one). The widgets and dialogs are intended to be powerful, but really make for just a little bit too many clicks and too much reading. So it seems to me this tool has a learning curve to it, but once over that, I imagine it would be a fast and handy tool.

August 31, 2011

Standford University Technical Style Guide

Check out this technical style guide from Stanford University's IT department. Not only is it a guide to the CSS selectors that Stanford uses, but it helps to enforce consistent HTML code by different developers. One smart technique displayed in the document is the display of styled content right along side of the HTML that produced it.

Via .net magazine

August 2, 2011

Looking to hire junior- to mid-level web developer!

Ping IdentityWould you like to work for a fun, successful, and growing company from either Boston or Denver? Are you a good problem-solver who's not afraid to learn new technologies, APIs, and languages in order to complete a project? Then I'd like to talk to you.

At Ping Identity, our company has been growing non-stop for the last two years, and the scale and number of web projects has grown along with our headcount. So, we need a third web developer to join our team. Bring your current skills, and we'd be happy to teach you new ones as well. Benefits are great, the work environment is fun (though you're able to work from home two to three days a week if you like), and the bonus structure is mighty fine.

If you're interested, please send your resume directly to me so that I can personally promote it to HR. For specifics, please check out our job posting for the web developer position:
https://www.pingidentity.com/about-us/career-detail.cfm?customel_datapageid_1441=53112

August 1, 2011

Easily find images with unspecified width or height

This tip from 37 Signals' Signal vs. Noise blog is so good I have to pass it on: you can find all image tags that are missing a width or height attribute by embedding a simple CSS selector in your development stylesheet:

img:not([width]):not([height]) {
  border: 2px solid red !important;
}

June 24, 2011

Findings from the ALA 2010 Web Design Survey

The results are finally in for the ALA 2010 Web Design Survey. Hopefully some of you who were generous enough to take the time to fill out the survey, which I help promote since A List Apart's survey is the only chance for all of us to examine our own working demographic. It's really fascinating stuff: you can compare yourself to your peers across the metrics of working hours, age, salary, title, etc. Be sure to take a look.

February 3, 2011

Boston CFUG February Meeting - Automated Testing with Selenium

As a web developer who's responsible for finding (and, of course, fixing) his own bugs, the Boston CFUG's next meeting topic is one that's near and dear to my heart: automated testing. If you make frequent updates to your web applications, QA testing can be time-consuming burden if you bother to do it well, if at all. But what if you could just tell your browser to go off on its own, run some tests, and check whether or not your code works? That's exactly what the Selemium plugin does for you. And it's so easy. Once you realize how easier it is to record and run tests instead of reacting to bugs that your customers find in production, you'll fall in love with Selenium.

This talk will tell you how to record and edit tests, run them in your browser as needed or even on a scheduled basis, and generally make your whole life easier.

This presentation will be held on February 16th, 6:00-8:00pm, at Ping Identity's offices in Waltham, right off of 95. After the meeting we'll head a few blocks over for drinks at The Naked Fish or Pizzaria Uno. Please register for the meeting if you plan on attending:
http://www.eventbrite.com/event/1279678553

November 17, 2010

Two developer positions open in Wellesley, MA

Sun Life has a couple of new CF developer positions open at Sun Life in Wellesley, MA. Here are the details:

Job Summary
This is an exciting opportunity to join a team currently working on enterprise level web based applications. The Application Developer Analyst will participate as an individual contributor to create new applications and support existing enterprise level applications developed in ColdFusion and Flex.

We are looking for a highly motivated individual whose specific tasks\responsibilities will include:

  • Creating enterprise level applications using the latest releases of Cold Fusion and Flex.
    • Developing using Adobe ColdFusion MX 7 or 8, specifically MVC framework using CFCs and Custom Tags
    • Developing using Adobe Flex 2, 3, or 4, with Action script 3.0
  • Coding, writing technical documentation, debugging code and unit testing their work.
  • Understanding and demonstrating how written requirements translate into a technical solution.
  • Responsible for major system installations.
  • Maintaining and supporting existing enterprise software applications developed in ColdFusion and Flex.

See https://sunlifefinancial.taleo.net/careersection/10360/jobdetail.ftl?lang=en&job=260089 for more information.

June 25, 2010

You'll need hubris to produce this demo

You've probably heard of Apple's HTML5 showcase by now, but not for the reason that Apple hoped. Instead of showing off the latest capabilities of Apple hardware and software, the site has garnered criticism for promoting HTML5 and web standards while requiring the use of Safari to view the demos.

safarihtml5demos.png

Even though this issue hit the blogosphere last week, I just came across these entries in Apple's own Safari Web Content Guide which show just how hypocritical this move really is:

Follow Good Web Design Practices

You should follow well-established rules of good web design...
  • Be browser independent.
    Avoid using the user agent string to check which browser is currently running. Instead, read Object De- tection to learn how to determine if a browser supports a particular object, property, or method, and read Detecting WebKit with JavaScript to learn how to detect specific WebKit versions. Also use the W3C standard way of accessing page objects--that is, use getElementByID("elementName"). Only as a last resort, use the user agent string...
[Italics mine.]

There are better ways to promote Safari than to make users believe that Safari is the only browser that supports HTML5. I wouldn't blame them if they told users "For the best experience, use Safari", or if they directed users to download Safari without intimating that it was required.

June 9, 2010

Save the date for Google I/O 2011

Christine Tsai of the Google I/O team has posted a note about next year's I/O conference: May 10-11, 2011 at Moscone West. As an attendee of the most recent conference, I can definitely say this conference is well worth going to. It's a great place to learn about the latest technologies such as web fonts, web video, mobile platforms, and HTML5.

May 20, 2010

Notes from the 2010 Google I/O Keynote

It's amazing just how much of what Google does is based on open standards. Even if they retain control over the technology, as they do for GWT or Android, their work is usually open-source and free. It's really evident at this year's Google I/O Conference.

As an example, the first half of the keynote on Tuesday was about the rise of HTML 5. That's not a technology that Google owns or controls; but they profit from its use, since many of the improvements in HTML make the web use more semantic text instead of images or Flash objects (think web fonts, the video and canvas tags).

The first big announcement was an expected one: that Google is making On2's video technology available to everyone as a royalty-free format. Some think it has the same combination of compression with good quality as H.264. The second announcement was that Google is making some web fonts available royalty-free. Both of these are a huge step for the web-- and both will profit Google in the long run.

September 30, 2009

Job postings at Ping Identity: Waltham, MA, and Denver, CO

Two new job postings have come up at my company, Ping Identity. We're a strong, growing company with Fortune 500 clients and venture backing from both coasts. Contact me directly with your resume if you're interested in either of the positions below:

System Administrator, PingConnect
Summary: As a SaaS Systems Administrator at Ping Identity you will provide in-depth technical support and effective complex problem solving for a wide variety of infrastructure and applications related to the PingConnect service offering. VM, VPN, security, and network design is a must. Must be expert with IPsec and SSL VPN technologies. This position entails network and system design, implementation and maintenance. This is an on-call position that requires support and flexibility at a variety of hours.
Reporting to: Senior Director, Operations
Location: Waltham, MA or Denver, CO

Technical Product Manager
Summary: As a Technical Product Manager at Ping Identity, you will engage with customers to understand detailed use cases and drive requirements in to the Ping Identity product planning process for both PingFederate, Ping Identity's flagship on-premise software, and PingConnect, our expanding on-demand server. You will have the opportunity to interact with key stakeholders inside and outside of the company with a primary focus on the technical aspects of Ping Identity's product offering. You will also be one of the primary technical interfaces for third party technology and SaaS partners, understanding key integration points and combined value propositions.
Reporting to: Director of Product Management
Location: Denver, CO

September 21, 2009

Have you requested time for RIA Unleashed: Boston?

I've just gotten approval to go to RIA Unleashed: Boston on November 13th, and if you haven't made up your mind on whether or not to go, I'd suggest you make up your mind to attend. Brian's previous Flex Camp conferences showed off some amazing implementations and hosted some impressive speakers, and this year looks to have an even better agenda for web developers with a track devoted exclusively to ColdFusion developers. The list of speakers include Tim Buntel, Adam Lehman, Jason Delmore, and Ray Camden. I can't wait for this conference.

So make sure you come, too. And by the way, feel free to use my name as the person who referred you. ;)

July 6, 2009

Three methods for password reveal

In my last post, I wrote about whether password fields should be masked or revealed so that users can see the passwords as they type them. One method I mentioned in that post is adding a checkbox to turn password masking on and off depending on the user's preferences.

Since then, I've come across another technique that is worth looking in addition to the first. Let's examine.

Continue reading "Three methods for password reveal" »

February 20, 2009

Watch out for Apache handling of files with multiple extensions

A note for future reference: saving CFML or PHP sample scripts with a .txt extension after the .cfm or .php extension so that they can be displayed as text in the browser doesn't work on Apache servers. Apache doesn't just look at the last extension in the filename, it looks at all of them that have handlers specified, the next matching extension overriding the previous. So if there isn't a .txt handler, a file named like sample.code.php.txt will be parsed by the PHP engine.

There is a way around this issue; you can use the SetHandler directive instead of the AddHandler directive:

<FilesMatch \.cgi$>
   SetHandler cgi-script  
</FilesMatch>

February 6, 2009

Form fields created with JavaScript not posted to Firefox?

For the longest while, I've known that it's possible to create form fields on the fly with JavaScript, say, for the purpose of offering as many file upload fields as a user needs in a form. I could always get the script to work, either with the appendChild() function or by writing to innerHTML. And though posting the dynamic form would work in IE, I could never get the form fields to POST to Firefox. Happily, I've just found out why it didn't work for me while other developers never seemed to mention the problem in their blogs.

It's my coding habits.

The more detailed reason is that because of a quirk of browser style history where form tags caused extra vertical "padding" in a web page, I've always embedded my form tags within table tags:


<table>
<form>
<!-- Table rows and cells -->
</form>
</table>

And the answer to the problem is to take my form tags out from inside the table. Voila! Any dynamic fields created in the form will now be posted correctly in any browser, including Firefox.


<form>
<table>
<!-- Table rows and cells -->
</table>
</form>

So I thought I'd share this in case anyone else shared this same habit. As for the extra whitespace, I'm advised you can just apply CSS to your form tag to get rid of the padding.

February 5, 2009

Boston CFUG meeting: Adam Lehman, Adobe evangelist, talks ColdFusion 9 and Bolt

I'm announcing our next meeting on short notice, but for a very good reason: we've scheduled Adam Lehman as well as the lead engineers for ColdFusion and Bolt for next Wednesday, Feb. 11th, 6:00-8:00pm at Adobe's offices. This is a meeting you will definitely want to attend.

Adam, Adobe's ColdFusion evangelist, will present some of the upcoming changes in ColdFusion 9 (aka Centaur) and Bolt, the new ColdFusion IDE. Ram Kulkarni, who is the lead engineer on Bolt, and Hemant Khandelwal, who is Director of Engineering for ColdFusion, will also be there. They will open this up for a question-and-answer period as well, so this is a great opportunity for you to learn what changes are coming in ColdFusion's future.

Make sure to become a member on the CFUG's new site at: http://groups.adobe.com/groups/14433c4223/summary

And, make sure to register for this particular event with our EventBrite system at: http://www.eventbrite.com/event/275123903


If you're in the Boston area, I hope to see you there!

January 14, 2009

Boston CFUG meeting: Razuna open source digital asset management system

Our next meeting is only a week away, so I'm sorry that I'm not giving you more notice.  Chalk it up to  my scramble to get back to business after a busy holiday season and a first-week-in-January business trip. ;)

We're going to be the hosts to a virtual guest from SixSigns, Nitai Aventaggiato, who will be presenting his company's CFML-based digital asset management system, Razuna.  Razuna not only helps you store, search, and retrieve your assets, but it stores meta-data and helps transform and transcode your assets to other formats on demand (think photos and videos delivered in whatever format you need).

Meeting date: 1/21/09 6:00 PM, Sun Life Financial

You can find out more information about our meeting at the following URL:
http://bostoncfug.org/index.cfm?event=showMeeting&meetingID=D01A22D8-D61B-FA8C-8922DD6FC690A7EA

Please RSVP at the following URL:
http://bostoncfug.org/index.cfm?event=showRSVPForm&meetingID=D01A22D8-D61B-FA8C-8922DD6FC690A7EA

October 24, 2008

Flex Camp Boston 2008!

Brian Rinaldi has announced that Flex Camp Boston is back for 2008 and is now accepting registrations.

Last year's event was fantastic, and this year promised to be just as good. Speakers include Tim Buntel, Christophe Coenraets, Andrew Powell, Jeff Tapper, Brian O'Connor, and Mike Nimer, representing the top companies in the industry such as Adobe, Universal Mind, Digital Primates, IBM, and Brightcove. See the agenda for full details.

The early bird rate of $30 is only available before December 1st, but keep in mind that this event sold out in under a month last year, so I suggest you register as soon as you can.

When: Dec 12, 2008 from 8am - 5pm
Where: Bentley College in Waltham
Website: http://www.flexcampboston.com/
Registration URL: http://flexcampboston2008.eventbrite.com/

September 24, 2008

Advertising jobs in Boston/NYC

My wife's company, advertising firm Hill Holiday, is growing its accounts left and right and has several open positions. Cool office space, too. If you're interested in having your resume referred by an insider, drop me a line.

Boston or New York:
- Senior Developer
- Developer

Boston:
- Tech Lead
- Quality Assurance Manager
- Senior Producer
- Producer
- Art Director
- Flash Developer (responsible for creating and maintaining Flash projects for websites, display advertising and applications)

September 17, 2008

Thanks to Joshua Cyr from the Boston CFUG

I want to thank Joshua Cyr of Savvy Software for his great presentation last night on strategies for building, deploying, and upgrading software-- as someone with a few projects myself, I benefited from his thoughts enormously. If you want to view his presentation slides, just go to Todd Sharp's SlideSix site.

A few thoughts stood out for me during the presentation...

Continue reading "Thanks to Joshua Cyr from the Boston CFUG" »

October 22, 2008

WYSIWYG editor for wikis

Have you ever entered content into a wiki using the Wikitext markup language? Wikitext was created with the goal of being simpler to write than HTML. That may be so, but that still doesn't make it easy, especially the first time you try to use it, and especially if you're a non-technical user. So what should you do if you want your user base, all of whom are decidedly not technical, to actually start using the wiki you created for them instead of ignoring it because they don't want to bother learning a markup language themselves?

That's the question we had to ask ourselves at work as we configured a wiki for our sales team, who, while a nice bunch of folks, isn't going to learn the wikitext markup specification just to make us in the operations team feel happy. Luckily, we found a better way to let sales enter content content into our wiki.

Continue reading "WYSIWYG editor for wikis" »

September 15, 2008

Is it fair to test a candidate during an interview?

A recent posting on Slashdot titled Testing IT Professionals on Job Interviews? was similar to a question posed to me by my manager. After I had forwarded him the test I was planning to use for candidates for our web developer position, he cautioned me that he thought it was possible that someone with years of experience might just be a little insulted at having to take a skills test. I understand that thought completely, and I would never want to insult someone in that manner-- but I just don't think that a test would or should be a problem for a candidate. From my perspective, any smart employer will want to measure just how good of a developer you are, and I would really hope that they've applied the same care in selecting the other developers I'd be working with.

So I want to pose a question to the rest of the community: do you think it's fair to test a candidate during an interview? Oh, and here's the manner in which I apply the test: I always tell the candidate before they come in that I'm going to be testing them; and, I let them browse the web during the test for solutions as long as they're not copying-and-pasting the answers-- after all, I look up other people's tips and solutions myself several times a day. As long as a developer can produce good code in good time during the test, I don't necessarily care whether they wrote it all from scratch or had every answer in their head.

What do you think?

(Edit: Someone made the good suggestion that I post the skills test that I use. Here's the web developer skills test that I use.)

September 11, 2008

Why pass query strings to CSS files or script files?

In some applications such as MovableType, WordPress, MediaWiki, or any site using certain JavaScript libraries, I've noticed that query strings are appended to some of the calls to the CSS files or script sources. Most often they just pass the version of the application, but sometimes they pass other information:

<script src="/js/2.0/scripts/scriptaculous.js?load=effects" type="text/javascript"></script>
<link rel="stylesheet" href="/blog/mt-static/css/main.css?v=4.01" type="text/css" />
<script src="/wiki/skins/common/wikibits.js?164" type="text/javascript"></script>

I've searched on this technique, but can't figure out for the life of me what good it does. Does anyone have any idea why information would be passed like this? I understand that maybe the script library could react to the the load=effect variable passed to it, but it baffles me as to why you'd bother to pass a version to an otherwise static file. Anyone have any ideas? Please comment with your thoughts.

September 9, 2008

Single Sign-on to MediaWiki 1.13 using Active Directory and REMOTE_USER

I was tasked with providing a wiki application for the use of the sales team here at Ping Identity. For the sake of a mature solution, we chose to use MediaWiki, which is the open-source PHP application that runs Wikipedia.

MediaWiki is built to support the same editing system that Wikipedia is founded upon: namely, to let anyone create or edit content, and do so via a self-created account or anonymously (with the IP tracked). Now Ping Identity, as a single sign-on and identity management software, is all about easy identity management. Besides the fact that most of our users from sales would balk at having to create yet another user account, I would be breaking faith with the company if I didn't allow automatic provisioning (ie, the automatic creation of new accounts if they've been authorized by our AD server). So, after getting MediaWiki installed, I went off to search the blogosphere for single sign-on solutions to make our Apache web server authenticate against our Active Directory service, then have people automatically recognized and provisioned as necessary by our wiki.

Continue reading "Single Sign-on to MediaWiki 1.13 using Active Directory and REMOTE_USER" »

September 8, 2008

Join the Boston CFUG for Josh Cyr, Sept. 16th

Come join us at our next Boston CFUG meeting on September 16th, 6:00pm, at Bay Cove Human Services in downtown Boston. The topic? Josh Cyr of Savvy Software discusses software releases. Whether you work on commercial software, open source projects, or a software-as-a-service website, you'll find the discussion with your peers to be most valuable. Oh, and make sure to RSVP. We're having another drawing at this meeting; everyone who attends will be in the drawing, and everyone who RSVPs will get an extra ticket. Our prize will be a DXG 5.0MP Digital Camcorder.

So make sure to RSVP: http://www.bostoncfug.org/index.cfm?event=showMeeting&meetingID=CA07FF45-D61B-FA8C-8561F1F06EF4459D

Food and drink will be provided, and I for one will be continuing the festivities at a local bar after the meeting. ;)

August 20, 2008

Web Developer position at Ping Identity, Inc.

I'm glad to say that we're increasing our web development efforts here at Ping Identity's Waltham office, and so are looking for another web developer to join the company. Ping is a fantastic place to work-- we use the latest hardware and software, have VC funds from big names on both coasts, and experienced management. The office, at 1000 Winter Street in Waltham, overlooks the reservoir and is a really fun place to work. For instance, we have lunch brought in every once in a while; stock the fridge with snacks and beer; and a few VPs and I go running twice a week over lunch. We tend to work from home two days a week, which helps to make for a good work/life balance. Most importantly, we're a young firm that's well positioned for major growth in the federated identity and secure single sign-on space.

The person we're looking for can be anywhere from senior to junior level as long as you have some web development skills with ColdFusion. Familiarity with Eloqua (a lead management service) and Salesforce

(customer relationship management) will be bonuses, since we're going to have this developer interact with these systems. Anyone who's interested in finding out more should contact me directly. Here are the details:

Responsibilities

  • Working with the all Ping Identity business units, establish website design standards, information architecture and user interfaces which define the internet presence for Ping Identity.
  • Provide strategic and tactical planning for website investments and development priorities.
  • Maintain and execute against a dynamic queue of web site modifications and change requests.
  • Integrate surrounding applications and technologies including Eloqua, Salesforce.com, Atlas, and Google Adwords.
  • Provide alternative designs for requested changes and enforce design standards through these alternatives.
  • Monitor and provide regular reporting on our websites for performance, stability, quality control and improvement opportunities.
Qualifications
  • 3 to 7+ years industry experience website development and design
  • Minimum 3+ years strong and recent ColdFusion development
  • Minimum 3+ years DHTML/JavaScript/CSS development
  • Strong experience with object oriented design/development.
  • Strong experience with RDBMS systems (SQLServer)
  • Strong experience with Web Services
  • Strong working knowledge of browser-neutral, JavaScript, CSS, ColdFusion, Commonspot, XHTML, HTML, DHTML, XML, XSLT, RSS, Flash, Actionscript Excellent communication skills and general ability to communicate effectively with internal customers
  • Power user knowledge of Eloqua and Salesforce a strong plus.
  • Understanding of AJAX, Web 2.0 concepts, and Server-Side scripting
  • Thorough knowledge of web standards, such as W3C Standards and 508 Compliance.
  • Deep knowledge of website Information Architecture and User Interface design
  • Able to take ownership of a project from start to finish
  • Strong attention to detail and ability to manage multiple simultaneous work streams
  • Ability to assemble business requirements, conduct effective project meetings and project management.

Thanks to Gert and Michael of Railo

I want to thank Gert and Michael for the great presentation last week to the Boston CFUG on their open-source CFML engine, Railo. They were even kind enough to come out with us to Dun Gahaerin's pub with us afterwards.

They've done some very impressive work with Railo, which I'll cover in another post. Suffice it to say that they've not only provided a very robust and feature-complete engine, but they've made some improvements to their administrative interface that should prove advantageous to the CF development and hosting community. Finally, it's obvious they've put a lot of thought into improvements and extensions of the CFML language itself, which I believe should raise CFML's standing with non-CF developer communities.

So as I said, there will be more details of my thoughts on Railo to come in another post (I hope to test it out here at Ping Identity for the next version of our internal licensing service). Thanks again, Gert and Michael, for a great meeting!

July 31, 2008

Upcoming visit from Gert Franz of Railo

I'm getting excited for our next meeting for the Boston CFUG-- we have Gert Franz presenting in person on Railo, a CFML engine that runs on a wide variety of Java servlet engines, and provides a cost-effective, high performance alternative to using Adobe's ColdFusion engine.

With their announcement that they are partnering with JBoss to make their software completely free and open-source, Railo is the latest entrant to the open-source CFML engine category and is getting quite a bit of buzz.

Gert will present an overview of Railo, and what the advantages of using Railo are for CFML developers. He'll also be talking about the upcoming open-source conversion of Railo, and what that means for developers. Gert will have some free versions of the Railo software to hand out, and Brian and I will have some other goodies to give away as well. Make sure to RSVP for the meeting.

June 11, 2008

Getting Windows applications into your MacOSX dock

I just discovered a neat little trick with VMWare on my MacBook Pro. I still need to QA against IE/Win, and I still love using Homesite+. Up until now, to use either of them I've launched VMWare, launched those programs, then switched to Unity mode. The next day, I would have to do the same thing all over again. But with less than 5 minutes of work, you can get your favorite old Windows apps to appear on and launch from the Dock. It works like this: if you switch your Windows VM to "Unity" mode so that the applications you have open appear each in their own window, their icons will appear on the right side of the Dock (note the Windows Remote Desktop and Firefox icons):

temporary-doc-icons.jpg

Now if you click-and-drag those icons from the right side of the Dock to the left side, they'll stay there permanently (note the Internet Explorer and Homesite+ icons):

permanent-dock-icons.jpg

And whenever you click on these icons, VMWare will start up and bring up the application for you-- in Unity mode! It's just like... no, it really is having your favorite Windows apps available to you just like any other MacOS app. Awesomeness, no extra charge.

May 27, 2008

Boston CFUG Subversion presentation follow-up

Thanks to everyone who attended tonight's Boston CFUG presentation on using Subversion. If I can help anyone get set up with the server or a client, just let me know.

May 16, 2008

So, you think there's no worthy Subversion client for the Mac?

Wow. Between a new job with Ping Identity and attending the cf.Objective() conference, it's been at least 3 weeks since my last posting. Well, one of the things I learned at the conference came after asking a presenter for his opinion on whether there was any Subversion client for Macintosh that was worth using. The Finder plugin is a great idea, since it's like TortoiseSVN, but it's not full-featured and doesn't always show status overlays correctly; and other clients keep views of working folders and repositories in separate windows. Finally, other clients don't have a built-in diff program. The presenter didn't think that any Mac client was worth using either.

But someone from the end of my row in the audience told me to speak to him after the session was over, and he told me about Syncro SVN. It has everything you could want in a client-- an integrated view of your repositories, working directories, a great diff viewer, and session log. Plus, it has all of the features you might want, such as the ability to relocate working directories between repositories. If you're not satisfied with other Subversion clients on the Macintosh, I'd suggest you give Syncro SVN a look.

April 14, 2008

Spam/RBL lookup added to EmailParse.CFC

I made yet another update to EmailParse.CFC last week while I was working in the code for other reasons: I've added spam lookup on the sender's IP address courtesy of SpamHaus.org.

Continue reading "Spam/RBL lookup added to EmailParse.CFC" »

March 28, 2008

Are You Taking Advantage of Web 2.0?

So asks David Pogue of the New York Times, who describes the benefits of Web 2.0 as offering "a direct, more trusted line of communications than anything that came before it."

Around my office we have discussions about just what "Web 2.0" means. I usually interpret it in a more technical, feature-oriented fashion, saying that it applies to sites that have near-real-time interactivity with a web site, using AJAX to make themselves appear to work more like a desktop application than a page-request-based website. My boss thinks of Web 2.0 as meaning that a site has a user community and user-contributed content. There probably isn't just one meaning to the term, anyway. But Pogue gets the point-- it's no use talking about what Web 2.0 means. You just want to concentrate on what benefits it has to your company:

"When a company embraces the possibilities of Web 2.0, though, ... it [will] gain trust, goodwill and positive attention. You'll put a human face on your company. And you'll learn stuff about your customers that you wouldn't have discovered any other way."

Completely true. And here are other ways that your web site reflects the character of your company:

  • The design: does this company have enough money to afford a good designer?

  • The copywriting and layout: is the company smart and detail-oriented?

  • The server uptime: is this company reliable?

  • Graceful degradation: does the company think about its customers and their needs?

  • Snazzy, cool AJAX features: does the company willing to explore new ideas?

  • Splash page: is this company so into its branding and so clueless about what users really want to know that it throws a useless splash page in their way?

UI: Double-click to search keywords on NYTimes.com

A colleague just brought the coolest feature to my attention: on the NY Times' website, you can bring up search results on any term they use in an article merely by double-clicking on the words in the article itself. You don't have to go typing in a search box, or pull up a contextual menu with a right-click.

Continue reading "UI: Double-click to search keywords on NYTimes.com" »

March 27, 2008

When to create indexes in your database

The discussion over on Ben Nadel's posting on tips for writing better, more-optimized SQL is pretty interesting, with a number of users writing in with good tips on SQL optimization and even db optimization. I suggested that any column used in a WHERE clause should be indexed, which in truth is rather a strong statement; I suppose it's more accurate to say that any column in a WHERE clause should be considered for indexing. The possible drawback to the over-use of indexes, as some people pointed out, is that indexes can possibly slow down your database by taking up too much disk space or by being so large that they take too much overhead for the database to maintain.

While I suppose that's technically possible, and those folks say they've observed it, I have to say that I've never experienced that kind of problem, even on high-traffic tables with several millions of records. In the end, you just have to experiment to see whether an index makes your query run faster. But do consider indexes for more than your foreign keys.

People have been asking for some solid technical rules or advice on when to implement indexes, so I thought I'd post links to the best guides on indexes:

My take: should a web developer know SQL?

There's a pretty good discussion that I've been part of on Andrew Powell's blog and Ben Nadel's blog about whether a web developer should have to write SQL code. Andrew says that developers should concentrate on web code and either leave the SQL in the expert hands of DBAs or should use an ORM that abstracts the SQL code for the developer. Ben thinks that developers should have some understanding of SQL for the sake of writing better applications.

I think that web developers should know SQL because SQL is a great, and sometimes necessary, skill to have throughout your career. Simply put, DBAs (and ORM software) arent' available for every project. While I will glady (eagerly! quickly!) hand over the responsibility for database creation, maintenance, and query input/output to a DBA if one is available, most of the time such a person isn't there. I've worked in medium-sized companies, tiny companies, and by myself, and for most every project I've been the only resource available to manage databases and SQL. I've had to learn it. And even if you, as a developer, currently work at a company that has a DBA, I feel confident in saying that you're not going to find as many opportunities with other companies if you don't know any SQL.

Andrew does make the good point that developers probably aren't going to know SQL as well as a DBA will, because the DBA makes a focus on the SQL language. I would agree. And I also agree with his suggestion that you should never be afraid to ask how to do something, or to do it better. But I disagree with the contention that developers shouldn't need to know SQL. I think that the web industry gets a lot more good out of developers' SQL than bad.

March 26, 2008

Speaking on Subversion at Boston CFUG, May 20th

I'm a big fan of the version-tracking application Subversion (aka, SVN), as it's saved my bacon many a time. It's so easy and so helpful that I wonder why I didn't start using it sooner than two years ago.

I like SVN so much that I'll be speaking on how to use Subversion to the Boston CFUG on May 20th, 6:00pm. If you live in the Boston area, make sure to RSVP-- I'd be thrilled to see you there. Whether you're on a development team and want to avoid overwrite conflicts, or whether you're a solo developer who wants to have a record of coding changes over time, Subversion can save your bacon, too.

March 19, 2008

Demo now available for Webmail

I want to share the news that there's now a demo available for Webmail, my ColdFusion web-based email client. Oh-- and as always, I'll make a free copy available to anyone who can make a translation file available in their language. I still need German, Portuguese, and many Oriental languages.

March 17, 2008

Joel's got it right; it's about browser-share, not designers

So you've heard about IE8 and how it implements standards mode, right? Unless you add a specific meta tag to your page that indicates to IE8 that it should render pages to its full capability (<meta http-equiv="X-UA-Compatible" content="IE=8" />), it will render them as if it were IE7 instead. And it's set the web industry abuzz with wonder and discussion. Why would you upgrade a browser with new capabilities but have them turned off by default?

Jeffrey Zeldman says that Microsoft is just guaranteeing that future versions of IE (8 and onward) will work with the existing sites of "millions of small business owners, school teachers, pastors, coaches, and so on who create websites every day, armed with crappy software and little else." That could be true, but does Microsoft really care about those millions of small-time content creators? After all, they've never seemed to care too much about all of us professionals.

But I think that Joel Spoelsky put it best in today's article, Martian Headsets (a.k.a., pragmatists versus idealists). Joel points out that it's not the web designers, professional or not, that Microsoft is worried about: it's the end user. He argues that if end users were come down to their desktop computer in the morning after it's been automagically Microsoft Updated to IE8 in the middle of the night, and if IE8 were set to standards mode by default, then most of the sites people viewed would break. And who or what would these end users blame? The creators of the web site which looked so good and worked so well just the previous day? Nope.

They'd blame IE8. And perhaps, just perhaps, IE would lose some market share.

Now I think that makes sense as a reason for Microsoft to be cautious in how IE8 renders sites. They probably don't care too much about making life easy for professional developers-- after all, we all know how to add a meta tag to a site pretty easily, and who knows, some of use will make some money off of it. Microsoft probably doesn't even care about the small business owners and coaches who-- let's face it-- wield little money and even little influense in the technology industry. But I can't blame them for not wanting to "break the web" for users.

Look at Joel's article, it's well worth a read.

March 14, 2008

CF8 tabbed-form layout gotcha in Firefox, Safari

I just found a "gotcha" with using forms that are spread across several tabs in a cflayout area. The form would render properly in all browsers, the tabs worked just fine, and my "Save" and "Apply" buttons submitted properly. Everything worked well, except whenever I submitted the form using Firefox my changes wouldn't be saved. In IE, however, the changes were kept. I checked out the problem in Safari 3, and the problem existed in that browser as well. (I'm referring to a Windows environment, by the way-- I don't know if this circumstance would occur on a Mac, although I tend to think it would.)

So the first thing I did to solve the problem was pretty revealing. I used cfdump to view the contents of the FORM scope after the form was submitted; in IE, obviously, all of the form data was being submitted, but in FireFox, none of it was being passed to the server. Why would this be?

Continue reading "CF8 tabbed-form layout gotcha in Firefox, Safari" »

March 12, 2008

Using MS-SQL's NOLOCK for faster queries

A nice little coincidence just happened for me: right after my boss had emailed me asking if a certain click-tracking report in our site's admin section could run any faster, the developer next to me, who was looking through some of our existing code, asked me what this "NOLOCK" mention in an MS-SQL query meant. Talk about perfect timing! I probably wouldn't have remembered NOLOCK if he hadn't brought it up.

Continue reading "Using MS-SQL's NOLOCK for faster queries" »

March 5, 2008

Want a copy of a ColdFusion-based webmail client?

WebmailI'd like to get some language files translated for my ColdFusion-based webmail client, which reads POP accounts. If anyone would like to provide a translation of a language file for me, I'll give them a free copy of the Webmail application, which normally goes for $29.00. The language file consists of about 250 words and phrases, which shouldn't take much time. Just drop me a line in the comments below or via my contact form.

The folks who help me out with this will also get priority to test my forthcoming ColdFusion-based IMAP client, which is currently in development.

Note that while I've gotten several responses already, you should feel free to offer me a translation even if you think that someone else has likely volunteered one for your language already. I'm perfectly happy to get multiple translations for the same language so that I can account for regional differences. So don't be afraid! Thanks.

February 28, 2008

Click-and-drag resizing of a textarea

In a few applications, I've noticed a relatively new feature (at least, new to me): a "handle", or bar, at the bottom of a textarea that allows you to resize it by clicking-and-dragging. I think this is a great addition to the usability of any site where a user might type in just a little or a lot into a textarea.

There are a number of JavaScript toolkits which can give you this capability, but not everyone wants to add the loadtime of a full toolkit to their site. So I'll point out one script that can give you this capability: Jonathan Leighton's Textarea Resizer.

Continue reading "Click-and-drag resizing of a textarea" »

February 22, 2008

Great ColdFusion 8 article; how about a comparison to PHP/RoR?

Boston's own Brian Rinaldi has just authored an article on SitePoint, ColdFusion 8: Believe The Hype. In it, he tells web developers about why they should consider using ColdFusion 8, with details on increased speed, stability, AJAX integration, server monitoring, debugging, and other items. All in all, the article is a great read. Kudos to Brian for working to publicize the great strides that Adobe has made in an already-fantastic development platform.

One topic that I'd like to see more of in ColdFusion articles, though, is why a developer should switch to ColdFusion from another environment, or what the specific advantages of CF are over other languages. Until this kind of thing is addressed, I don't think that people who have already invested their time in PHP or Ruby on Rails will bother to even consider CF, not to mention bother to read CF articles. Brian quotes a ColdFusion developer at The Economist who recently upgraded to ColdFusion 8, who says, "...the whole thing is ridiculously stable." That's absolutely true, but when we have a former PHP/RoR developer saying that instead of a CF developer saying it, then we'll have reason to really shout about it!

(Sheepish) Yes, I know, I should probably just volunteer to write an article myself... but I want to encourage others to do it as well.

February 15, 2008

Using TortoiseSVN's "diff"(aka TortoiseMerge) to pass updates to new files

Today when I checked a third-party site for updates to the XSLT files I use in Microformats.cfc, I found myself wondering how I'd update the new files so that they contained the minor modifications needed for use in my component. I could have saved the new files in a separate directory, then opened each new file and compared it to my older version, making changes by hand. But I was a little worried that I'd forget to notice a change or two-- these XSLT files aren't exactly easy to read, and I only work with them once every few months. Then I remembered the ever-so-handy "diff" utility from my Subversion client, TortoiseSVN.

Continue reading "Using TortoiseSVN's "diff"(aka TortoiseMerge) to pass updates to new files" »

XSLT style files updated for Microformats.cfc

For you microformats buffs out there who use my microformats CFC, I have an FYI: I've updated the XSLT stylesheets with the latest from hg.microformats.org. The updated files include:

  • hAtom2Atom.xsl
  • hreview2rdfxml.xsl
  • mf-templates.xsl
  • xhtml2vcal.xsl
  • xhtml2vcard.xsl
There were no updates available for datetime.xsl and uri.xsl.

January 31, 2008

"How do you pronounce URL?" Techrepublic, who cares?!?

The subject line of today's email newsletter from Techrepublic asks "How do you pronounce URL?" The body goes on to say '[a user] asks: "Is it common practice to pronounce URL as 'Earl,' or is it more common for people to spell it out as U-R-L when they talk about a URL?" Find out what TechRepublic members say about pronouncing URL, SQL, and more...'

They really must have been scraping the bottom of their idea barrel when they sent this one out. What a waste of space in my inbox! C'mon, TechRepublic, I really don't care how your editors pronounce "URL", I don't care what your readers think on the question, and I'm willing to bet that most other readers don't really care either. You can do better than that.

January 16, 2008

A nice-to-have developer extension: MRI bookmarklet from Westciv

MRI will highlight all elements which match the selector you enter in the MRI dialogRob Wilkerson reminded me in yesterday's post regarding XRAY to mention the MRI bookmarklet from Westciv as well. From WestCiv's site: "MRI is a free cross browser tool that lets you test selectors with any web page. Selectors, particularly complex ones can be difficult to get exactly right - MRI lets you experiment with them on any web page (local or online, static or dynamic).

Essentially, MRI lets you search and identify specific selectors on your web page. Selectors are the names or tags that you specify in your CSS so that you can "select" which elements to style. So MRI will help you find all anchor tags within a list item (li > a), or all elements with a certain class or ID.

I put this as a "nice to have" since I don't think it's as useful as XRAY is. It's more often that I'm wondering "why on earth is this particular element styled/not styled this way?", which XRAY will tell me, than I wonder "which elements have this certain selector?"

January 15, 2008

Another must-have developer extension: XRAY bookmarklet from Westciv

I've got to add to my list of must-have developer tools:

  • XRAY in action, showing the CSS inheritance of the posting titles on my blogXRAY: XRAY is a JavaScript bookmarklet which allows you to "see the box model for any element on any web page". That doesn't sound very sexy, but it is-- when activated, this bookmarklet brings up a modal dialog box that will show you the nested parents for whatever element you click on, and you can even traverse up. Whichever element you click on or is in focus will be outlined. It's fantastic for determining an element's exact height, width, nesting, and CSS inheritance.

January 11, 2008

What would happen if Apple bought Adobe?

Robert X. Cringely wonders in today's column about a possible purchase of Adobe by Apple. I wonder how this would affect ColdFusion? Any thoughts out there?

Two must-have web developer extensions for Firefox

In case other developers aren't aware of two of the handiest extensions for Firefox:

  • MeasureIt: This puts a small widget in the left side of your status bar; when you click on the widget, your cursor turns into a crosshair which you can then click-and-drag to get a to-the-pixel measurement of any area of the page. Perfect for the times that you're wondering just how much room you have for a graphic or table.

  • ColorZilla: This puts a small widget in the left side of your status bar; when you click on the widget, your cursor turns into an eyedropper which you can then use to color sample any area of the page-- and you can then copy the color value to your clipboard in RGB or hex. Great when you're wondering what nice color some other site is using, or when you need to pick one color as the matte for a transparent GIF that's going over a gradient.

January 7, 2008

How to get dynamic content on static HTML pages

When I first started my blog, I was using an old version of Coldfusion that couldn't support any of the modern blog projects. So, I installed MovableType instead, which publishes my blog as static HTML pages. Static code makes it kinda hard to put in all of those nice, dynamic touches that web developers are used to including in their pages, especially of the subject of the blog is often ColdFusion.

But I got it in my head that I wanted to put interesting and ever-changing quotes at the bottom of my blog entries, as I've seen on a few other major sites (you may have noticed the pithy quote at the bottom of this page). More experienced developers will be able to guess right away how I got it to work, but if you're curious about how I did it exactly, please read on.

Continue reading "How to get dynamic content on static HTML pages" »

December 21, 2007

Removing ".svn" folders from zip archives

I use Subversion for all of my projects. While it's a life-saver for keeping records of all changes to your source code, it can be more than a little annoying to deal with the ubiquitous ".svn" folders that get put into every directory of your project. If you want to create a zip archive to publish your project, you don't want to publish those .svn folders along with it-- but up until now I haven't known of any other way to get rid of them other than to go into the zip file and delete the unwanted folders one by one. But today I found out that there's a better way (at least on Windows) by creating a new registry entry.

From John Galloway's blog:

[This] REG file adds "Delete SVN Folders" to the context menu for folders. When you select it, it removes all folders named .svn inside the folder and it's children (it does nothing if the project's not under Subversion source control.

John doesn't tell you how to get the new registry entry imported into your own registry, but I will: just copy the lines from his blog and save them in a text file with a ".reg" extension. Then open RegEdit, choose File -> Import..., and then import the file.

December 20, 2007

Beta testers needed for Webmail

I'm nearly finished with a new version of Webmail, my web-based POP email client which is written in Coldfusion. But to make sure that it works well in many different environments and with many different POP servers, I'm looking for people to serve as beta testers. Those who are selected as testers and who provide feedback will get a free copy of the code.

webmail-screenshot-login-sm.pngAs a quick introduction, Webmail provides web-based access to any POP account. It's not intended to be your main email client-- instead, it's intended to be used to read and respond to your emails when you're away from your main client (such as when you're away at a conference, at a client's office, or in a friend's house). Webmail will not delete any of your emails from your POP account unless you specify that certain emails should be deleted.

webmail-screenshot-messagelist-sm.pngWebmail now offers the ability to save user preferences including a timezone setting so that all dates are displayed properly, spam keyword recognition, an address book, and even a search function. This new version of Webmail requires ColdFusion 8.

I'm also looking for people who can provide language translations for Webmail (it's about 240 words or phrases, which might take you an hour or two). So if you can test and/or provide a translation, please post a comment below and put your email address in the comment form (I'll be the only one who has access to your email address).

Note: as per Nick's comment, please let me know your web server and email server specifications in your comment. If you have something unique, I'm more likely to include you as a tester.

November 1, 2007

Get in high gear with Flex Camp Boston

Flex Camp BostonBrian Rinaldi, the ColdFusion CFUG manager for the Boston area, announced today that registration is open for Flex Camp Boston. Kudos to Brian for arranging this seminar-- he's rounded up a fantastic list of speakers, including Peter Farland and Tom Jordahl from Adobe.

October 31, 2007

Safari browser now available for Windows

For those of us who don't have immediate access to a Mac for testing our code, there's now a tool to help. Apple has released a version of its Safari (Beta 3) browser for Windows. It uses the same rendering engine, WebKit, on both Mac and Windows (as well as on the iPhone, for that matter), so you can be reasonably confident that web sites tested in Safari on Windows will render and behave similarly on the Mac. (I am not advocating that anyone completely skip testing on non-Windows platforms, just saying that there's a quick "cheat" available.)

JavaScript for centering a popup window to the screen

Ever wondered how to get your popup windows to center themselves on screen instead of appearing wherever your browser wants to put them? Just measure window.screen.width and window.screen.height. Divide each of them in half to get the center point of your screen. Then subtract from those numbers half of the width and height of your popup window. The result is the X,Y coordinates of where you should place the upper left corner of your popup to make it centered:
function newWindow(windowName, URL, width, height, scrolling) {
	width = width || 400;
	height = height || 360;
	scrolling = scrolling || 0;
	
	var topX = (window.screen.width / 2) - ( width / 2);
	var topY = (window.screen.height / 2) - ( height / 2);
	
	window.open(URL, windowName, 'width=' + width + ',height=' + height +
 ',location=no,resizable=yes,scrollbars=' + scrolling + 
',screenX=' + topX + ',screenY=' + topY);
}

September 26, 2007

Creating database indexes on single columns

I have to admit that when I posted an entry a few days ago on creating indexes to make your database queries run faster, I made a small error of omission when I suggested that indexes be created for every two columns that are used in a join. The fact is that you should create indexes even for single columns if they're the main lookup in the query. From the MySQL documentation:

Without an index, MySQL must begin with the first row and then read through the entire table to find the relevant rows. The larger the table, the more this costs. If the table has an index for the columns in question, MySQL can quickly determine the position to seek to in the middle of the data file without having to look at all the data. If a table has 1,000 rows, this is at least 100 times faster than reading sequentially.

September 17, 2007

A simple lesson on using indexes in your database

I was taught a simple lesson in the power of database indexes today. Here's how it happened: for a while, one of the sites I'm responsible for seemed to become slower and slower over time, even to the point of timing out during a database query. I always figured that it was because the web server was over 5 years old and needed a re-install or something like that. So, I switched to a new server and migrated the database to the new machine, which has more RAM and an has a more modern version of MySQL.

But guess what occurred on the new server when I started testing on it? The site and its database were as slow as ever. At that point I could no longer blame the problem on the machine, so that left... me. I had to figure that code optimization and/or database optimization were the only issues that could be at fault. So, I fired up a browser and looked at the MySQL docs. I knew enough to start investigating indexes to get things working a little faster, so one of the first lines I saw was this:

Use of indexes on the relevant columns is the best way to improve the performance of SELECT operations.
That was enough to convince me I was in the right place. I looked up the CREATE INDEX syntax, and started to create indexes for the columns that showed up in my most common joins. Bingo! After the first index was created, the query that used it sped up by an embarrassing 20 seconds. I'm ashamed that I didn't create these indexes sooner.

I'm definitely no database administrator, but my suggestion would be to create a two-column index for each join that you perform in your application. One column would contain the primary key of the table that you're indexing, and the other column would be the foreign key in that same table.

For instance, to create an index on a table of users that you join to a table of accounts via a foreign key in the users table, you'd write a MySQL index like so:

CREATE INDEX users_accounts ON users (userID, accountID)

Do this for each of your joins and your database should be nice and speedy for a good, long while.

June 4, 2007

What do you show users while you're upgrading a site?

If you're lucky enough to be performing a major site upgrade by switching to a new server, then your migration path is pretty simple: develop on the new server, test until the new application is stable, and then switch over to the new IP address. But if you don't have the luxury of a new server, you're probably going to have some downtime on the site while you upgrade to new code. So what code do you show your users in the meantime?

Since there could always be application-level problems during an upgrade (perhaps you're altering database tables, changing session defaults, or site-wide layouts), you probably want to stick with a static HTML page to show your message. So what I do is create a redirect in the application code, practically in the first few lines, which sends all users to a static HTML page. That page tells the user that the site us undergoing planned maintenance and will be back up shortly. The page also contains a 10-minute refresh back to the application. If you are still upgrading or testing and have the application redirect in place, users will be returned to the static page for another 10 minutes; if you're done upgrading and testing and have removed the application redirect, users will see your new, upgraded application.

May 2, 2007

Best Practices for Online Credit Card Security

After several years of coding applications that needed to process credit cards in real time as well as perform autorenewals at specified intervals, I've come up with a few best practices that I use as a habit.

Continue reading "Best Practices for Online Credit Card Security" »

April 24, 2007

A List Apart 2007 Web Design Survey

i-took-the-2007-survey.gifI just finished responding to A List Apart's Web Design Survey 2007 (their first in an annual series, they say), and I encourage you to do the same. If you don't read A List Apart, you should-- it's a fantastic resource on coding and publishing. From their site:
People who make websites have been at it for more than a dozen years, yet almost nothing is known, statistically, about our profession. Who are we? Where do we live? What are our titles, our skills, our educational backgrounds? Where and with whom do we work? What do we earn? What do we value?

Itís time we learned the answers to these and other questions about web design.

April 11, 2007

Have You Ever Desperately Wanted a Previous Version of Your Web Page?

I'm willing to bet that like me, you've at some point in the past desperately wanted to undo a change that's happened to a web site you're working on. Perhaps you've made a text edit, saved the change, and then wanted the old version of the text back; perhaps you've uploaded your own version of a document up to the server and unknowingly overwritten changes that someone else made to the same file. We've all been there.

After having this happen to me several times, I finally woke up and smelled the coffee-- I went and set up Subversion as a version-control system for all of our web files. What a lifesaver! I will never, ever do web work without saving changes to Subversion (SVN) again.

If you've never used a version control system before, I can't encourage you enough to start. There's no longer any valid excuse not to use it:

  • Using version control will be too hard to do, with checking files out, checking them in, and resolving conflicts.
    That may be what it's like to use Microsoft's Visual SourceSafe product, but SVN solves all of those problems, and makes it so easy to save changes. With SVN, you check out a copy of all of the files in the project, then edit them as you wish and save changes as you wish. There are no locks-- you can save your changes any time you like. If another developer happens to have saved changes to the same file, SVN will automatically merge the changes for you. If your changes directly conflict with those of the other developer (meaning that you've changed the same lines), SVN will let you know that you need to perform the merge yourself.
  • I'm the only developer working with these files. Why would I need version control if I can't overwrite my own changes?
    True, you can't unknowingly overwrite your own changes. But certainly there have been and will be times that you wish you could revert to an earlier version of a page that had a better layout or lacked a certain bug. Unless you're using version control, you can't get those versions back.
  • My web site just isn't important enough to merit version control-- it's only HTML, after all.
    When Subversion is easy to use and free, there's no good reason not to use it. And there's no site that's not going to run into the issue of needing to revert to a previous version of one page or another. Even with an HTML-only site, you may want to revert to an earlier version of your design, your CSS, your HTML, or most likely, your content.