Importing a Distribution List in Outlook

So I had to send out a notice to about 700 users. I had the list in the users table of my app’s database. I wanted to create a distribution list in Outlook. It’s not as straightfoward as it may sound.

The first step is to generate the csv file. Small complication: although I had access to the database, I did not have access to the server. So any output files MySQL generates are essentially out of my reach. Therefore, I needed to generate the file locally. No problem: MySQL has an –execute option which allows you to run multiple commands from the command line. It gets long and unwieldy, but it works. Here’s what I used:

mysql -u root -p db01 ^
  -e "select distinct concat(first_name, ' ', last_name, ', ', email) as name from users order by last_name, first_name;" ^
  >users_list.csv

(Yes, you can use the caret to continue a command on the next line. But don’t use a tab to indent your continuation. Spaces are cool though.)

OK, step one done.

Step two is creating a new distribution list in Outlook. You do that under Contacts. Click Select Members, to bring up a dialog box.

See the Members-> button near the bottom? The text field next to it is where you can paste your extracted list. (Now might be a good time to send a shout out to the morons who architected this brilliant bit of user experience. On behalf of users everywhere, I entreat you to find another line of work.)

This is great, but there is a caveat. As I said, my list was about 700 users long. Outlook wouldn’t accept that many records in a single DL: it came back with an error message. So I tried 200. Still no go. It did take 100. So I created 7 separate distribution lists, then one more to rule them all. The last distribution list contained the other 7, so I can just send my email to the one DL.

That’s all I have for now on distribution lists in Outlook. Hope this is useful.

When WordPress Goes Wrong

This past weekend I finally sat down to upgrade my WordPress installation. I was at 2.8.4 and heading for 3.1.2. The automatic upgrader wasn’t working (it would start downloading the zip, and freeze), so I had to upgrade manually. (Using the upgrade instructions here.)

But when the dust settled, my admin dashboard was FUBAR. A number of the blocks on the page weren’t appearing. But the worst of it was that I’d select other pages in the admin and would get a 500 Internal Server Error. Yikes! Interestingly, though, the main site was working just fine.
Continue reading

Alfred’s CSS3 Notes – Multi-Column Text

Only supported in Webkit and Gecko, at the moment. Not available in Opera or IE.

section#mysection {
-webkit-column-count: 3;
-moz-column-count: 3;
column-count: 3;
-webkit-column-width: 15em;
-moz-column-width: 15em;
column-width: 15em;
-webkit-column-gap: 5em;
-mox-column-gap: 5em;
column-gap: 5em;
-webkit-column-rule: 2px solid #ff0000;
-mox-column-rule: 2px solid #ff0000;
column-rule: 2px solid #ff0000;
}

Cannot:

  • select a given column
  • size columns differently
  • specify percentages

column-rule property allows for border type effect between columns.

Alfred’s CSS3 Notes – Text Properties

Text Shadow

text-shadow: 1px 1px 5px #BCBCBC, -1px -1px 3px #FF0000;

In this example, we have two shadows separated by commas. The first element is the horizontal offset, the second, the vertical offset; the third is the blur; and finally, the colour.

Text Stroke

Only available in Webkit. Draws a border around the text.

-webkit-text-stroke: 1px #000;

Also comes with text fill:

-webkit-text-fill-color: #fff;

This overrides the color attribute in Webkit.

RGBA Colour Opacity

Same as rgb() colour, but adds a fourth parameter for opacity. The opacity parameter is between 0 and 1, inclusive; where 0 is fully transparent, and 1 is fully opaque.

background-color: rgba(255,255,255, 0.5);

rgba() is available in all standards compliant browsers, and IE 9+. There is a workaround for dealing with the wrong-headed browsers:

color: #aaa;
color: rgba(200, 200, 200, 0.5);

As you can see we declare two values. In the case of standards compliant browsers, the rgba() declaration, which comes second, overwrites the first, and we get the benefit of the transparency. For the ludicrous browsers, the second declaration will be ignored, and they get the first declaration color.

We can also use a transparent png for backgrounds.

background: transparent url(bg.png);
background: rgba(255, 255, 255, 0.5);

This will not work with IE6, but anything after that will be OK. I encourage dropping support for IE6, to motivate individuals and corporations to upgrade, or better yet, switch to standards compliant browsers.

Alfred’s CSS3 Notes – Selectors

Target Selector

Applies styling when the selector is in a target state. Which is to say it is the target of a hash mark in the URL.

#container:target {
  background-color: #f6f6f6;
}

Adjacent Sibling Selector

From CSS2:

h2 + p {}
Will select the second element when it immediately follows the first. (Reference)

General Sibling Selector

From CSS3:

h2 ~ p {}
Selects all p’s that share a parent with the h2. (Reference)

Starting XAMPP Automatically Upon Login on OSX

I was SO getting tired of opening a terminal window to get my web server going when I needed to do some web dev on my MacBook Pro, I finally started looking around for ways to start XAMPP on it’s own when I booted my machine.

I found the answer deep in the forums. It looks like this:

crontab -u root -e
@reboot /Applications/xampp/xamppfiles/mampp start

I didn’t know you could do an @reboot in crontab. It turns out there are a number of these abbreviations, including @hourly, @monthly, @yearly.

Anyhow, it seems to be working, and I’m delighted.

Sitepoint Gives Away Free Book on Building Firefox Extensions

Regular readers of this blog will know I’m a huge fan of Firefox (the ultimate browser for developing web apps) and Sitepoint (a set of wonderful resources for web developers and designers).

What makes Firefox the best tool for web developers (and others)? It’s the extensions. And now, for a limited time, Sitepoint is offering a middlingly useful extension, CodeBurner for Firefox, which gives you access to their wealth of HTML and CSS reference material, right from your browser. This used to be an addon to the awesome Firebug extension, but now is stand-alone.

To celebrate the release of this new version of CodeBurner, Sitepoint are giving away a PDF book on developing Firefox extensions. This is supposed to be a limited time offer (30 days) so hurry up! (On the other hand, once you give away a PDF for free, it’s kinda hard to start charging for it.)

Sitepoint has a tremendous library of books for sale, and they’ve really hit a sweet spot in the market: I’ve purchased nearly every title they’ve ever published. Their books are well written, professionally edited and delivered in a timely fashion. Their customer service is also beyond reproach. I once complained a book had arrived slightly damaged, and received another copy a few days later. Top notch.

OK, gotta go now. I’m keen to get into developing my own FF extension!