Grammatical inconsistency at Meijer

My friends and I are lame.  Not in the literal sense, but in the “omg, you’re so lame!” sense.  We find little things to glom on to and then glom away.  Possessive pronouns and recursive acronyms (e.g. ATM machine) are two of our favorites.  It is with great amusement, then, that I wander the clothing section of my local Meijer store.  Let’s take a look…


This is the clothing section for boys. Note that because of the use of the plural form, you can find clothing for not one boy, but multiple.

Young ladies can find their wear here.  As with the boys, there is clothing here for multiple children.

Young ladies can find their wear here. As with the boys, there is clothing here for multiple children.

Once again, we see the use of the plural form of the noun for infants and toddlers.  So far, the store has been very consistent.

Once again, we see the use of the plural form of the noun for infants and toddlers. So far, the store has been very consistent.

Juniors is silly term, in my opinion.  Regardless, it is a plural noun and all is right with the world.

Juniors is silly term, in my opinion. Regardless, it is a plural noun and all is right with the world.

Uh oh.  Here's a change.  Instead of using the plural, like in other sections, they opt for the plural possessive.

Uh oh. Here's a change. Instead of using the plural, like in other sections, they opt for the plural possessive.

Hmm, now we're back to plural.  I'm a little confused by this, maybe the next sign will make everything clear?

Hmm, now we're back to plural. I'm a little confused by this, maybe the next sign will make everything clear?

Here we go.  Oh wait.  What's this?  Singular and not possessive?  It seems more like Meijer is yelling "WOMAN!" like some sexist jerk.  For shame, Meijer, for shame.

Here we go. Oh wait. What's this? Singular and not possessive? It seems more like Meijer is yelling "WOMAN!" like some sexist jerk. For shame, Meijer, for shame.

Black and Gold and Green

I normally leave environmental blogging to my wife, but I have been personally affected by the environment, so I’ll jump in this time.  My employer, being a large university, generates a lot of trash.  Only recently has there been a big push to improve the sustainability of campus.  A while back, the bathrooms switched to those neat foam soaps and paper made from recycled products.  The new addition to the Mechanical Engineering Building is being designed and built to meet LEED certification.  Now my building is one of the first to participate in a new project: no more trash cans.

On Tuesday afternoon, the Building Services staff removed the trash cans from all of the offices in the building.  Instead, each office now has a recycling bin.  There’s a separate compartment for office paper, and mixed recyclables go in the big part.  The janitor will empty the recycling bins twice a week, but everyone’s responsible for taking their own trash to the public cans in the hallways.  The idea is to reduce the trash by 65%.

So far, it seems pretty well received.  I think most people can probably recycle most of the stuff they throw out. I’m totally in favor of this, and frankly I’m a bit surprised that it took so long for campus to make it easy to recycle.

New episode of OSMacTalk tonight

Mario Marathon’s most popular spin-off, OSMacTalk (“Oh-smack-talk”) streams a new episode live tonight at 7:30 PM EDT (2330 UTC).  Hosted on, OSMacTalk stars Mac Guy and Orange Shirt Guy.  The show is primarily an IRC-/Tweet-/Skype-in talk show with random stories and maybe some special guests thrown in along the way.  OSMacTalk provides absolutely no entertainment value at all, and it isn’t clear why people watch in the first place.  Come watch what the excitement isn’t all about tonight!

I may have found my next phone

I fully expect to be in the smartphone market in the not-so-distant future.  My BlackBerry 8700c has served most admirably these past few years, including untold drops onto various surfaces and a 9-hour nap in a snow bank.  Despite it’s faithfulness, it is not the phone it once was.  Aside from some cosmetic problems, it has a tendency to freeze up every so often, which requires me to remove the battery to shut it off.  Not to mention the lack of 3G capability.  That really hurts.

I’ve been eyeing the iPhone since it first came out, and the more I learned about the phone itself, the more I like it (especially the 3G S).  Unfortunately, the more I learn about the way Apple and AT&T rule the network, the more repulsed I am.  That, among other considerations, is a big reason why I still have yet to let the BlackBerry go.  Still, when I look at the features that I want out of a smartphone, the iPhone fares the best.  Until now.

There has been quite the buzz (or at least mild hum) on the Internets since did a preview of the Nokia N900.  Holy crap, this looks like my kind of phone.  From a hardware standpoint, it seems more like the G1, which is a solid-feeling phone.  What really sets it apart is the software side.  The phone runs Maemo, a Debian-derived Linux distro designed for mobiles and tablets.  My knowledge of Maemo is still pretty sketchy, but from the Slashdot discussion I’ve gathered that it is a full-featured Linux distro, capable of running just about anything you want.   Has freedom finally come to the cell phone market?

At the moment, it appears that most of the discussion on the Internet begins with the Mobile-review article, any other details are hard to find.  One site did suggest that it might be available in the US in September, and since Nokia World is scheduled for Sept 2-3, that’s not unreasonable.  The list price is supposed to be $780 (which compares well to the iPhone 3G S list price) and I expect the carrier (likely T-Mobile) will offer some nice subsidizing.

So for now I will wait and see what develops.  It looks like a great phone, the real deciding factors for me will be the release date, the price and the carrier.  For all the bad things that I’ve noted about AT&T, they’ve been my wireless carrier since back in the Cingular days and I’ve never had any problems.  Plus, they offer a discount because of my employer, which is always a nice incentive.  Will I end up switching carriers so that I can get the N900?  Will the price be such that I can just buy it and bring it onto my existing AT&T account?  Will I chicken out and just try to do everything on my Samsung Sync?  I guess we’ll find out soon.

Why disk utilization matters

Here’s a rare weekend post to help make up for my lack of blogging this week.  Once again it is work related.  My life is boring and uneventful otherwise. 🙂

Unless you plan on sitting around babysitting your servers  every minute of every day, it is probably a good idea to have a monitoring system like Nagios set up.  My department, eternal mooches that we are, opted to not set one up and instead use the service provided by the college-level IT staff.  It worked great, until one day when it didn’t any more.  Some config change hosed the system and the Nagios service no longer ran.  I didn’t consider it much of a big deal until about 7 days ago.

This time last week, I was enjoying a vacation with my beautiful wife in celebration of our 2nd wedding anniversary.  When I got home Sunday evening, I noticed that several people had sent in e-mails complaining that they couldn’t log in to their Linux machines.  Like a fool, I spent the last few hours of my freedom trying to resolve the issue.  We figured out it was a problem with the LDAP server.  Requests went out, but no answers were ever received.  So after a too-long e-mail exchange, we got a workaround set up and I called it good enough.  I went to bed at one o’clock, thoroughly exhausted.

The next day we started working on figuring out what was the problem.  At first it seemed like the issue was entirely with the LDAP server, which is run by the central computing group on campus.  I was pleased that it was not one of my systems.  Then they noticed that there were a lot of open connections from two of my servers: one was our weather data website, and the other was our weather data ingest server.  Both machines work pretty hard, and at first I thought maybe one of the image generation processes just choked and that tripped up everything else.

Further investigation showed that the root cause of the issue was probably that the data partition on the ingest server was full.  This caused the LDM processes to freak out, which resulted in a lot more error messages in the log, which then filled up /var.  Now the system was running so slowly that nothing was behaving right, and since the web server is tightly married to the data server, they both ended up going crazy and murdering the LDAP server.

Now there are scripts that are supposed to run to scour the data server to keep the disks from filling.  I thought perhaps something had kept them from running.  I looked through logs, through cron e-mails, and then ran some find commands by hand.  Everything suggested that the scouring was working as it should.  The more I looked, the more I realized it’s just that the radar data is ever-growing.  I just need to add more disk.

Had I been keeping an eye on the disk usage these past few months, I would have known this sooner, and been able to take care of it before critical services got beaten up.  I think on Monday, I’ll lend a hand getting the Nagios server up and running again.  Learn from my mistakes, readers!

Setting up a print server

Matt made a comment on an earlier post asking if I knew of any good how-to articles about setting up a print server.  I did a little bit of looking, and it seems like most of the good articles assume that the server is already up and running.  I will not pretend this is a good article, and it certainly isn’t comprehensive, but it is what it is.  Basically, I’ll just run down the cupsd.conf file on my print server and point out differences and why I made them different.

Now some people might ask “well, Ben, what about Windows-based print servers?”  That’s a valid question.  It has been my experience that Windows print servers work very well with Windows clients.  In a heterogeneous environment, though, Windows servers don’t perform well.  That’s where the Common Unix Print System (CUPS) comes in.  CUPS runs on pretty much any Unix or Linux system (including Mac OS X, which is part of the reason Apple purchased CUPS in 2007). Most, if not all, Linux distributions ship with CUPS, and the source code is available if you prefer to roll your own.  We are going to assume you’ve already done a yum install cups (or apt-get install cupsys or ./configure;make;make install or whatever).

I’m assuming your CUPS configuration files live in /etc/cups, which is the default on Fedora/Red Hat/CentOS systems.  If it lives somewhere else, adjust accordingly.  There are several files in the configuration directory, but if you’re setting up a server, the one you’re immediately interested in is cupsd.conf.  This is the configuration file for the CUPS server daemon.

There are a lot of options that you can specify, I don’t know what all of them are, but that’s what the documentation is for.  What I do know is that lines that start with ‘#’ are comments, and are there to help you remember later what you did when you set your server up.  The options are mostly in the format “option_name option_value” and some options are grouped into sections with <label> </label> tags, similar to HTML and XML.  So let’s look at what I did, keeping in mind that my options are set for my server, and your needs may be different.

SystemGroup sys root eascomp

The “SystemGroup” option defines who can administer the print server.  In this case, the ‘eascomp’ group contains all of my department’s IT staff.  This allows anyone on the team to do routine tasks on the server (e.g. deleting jobs, restarting a queue, etc) without having to explicitly define each command in /etc/sudoers.  Note that this does not give the specified group(s) permission to edit the config files by hand, that is still controlled by regular Unix file permissions.

#Listen localhost:631
Port 80
Port 631

By default, CUPS is set up to only listen to requests coming from the machine it is running on.  That doesn’t do much good when you’re trying to run a print service for multiple machines, so I commented the line out.  I then added the ‘Port 631’ line to tell CUPS to listen for requests from any host on port 631 (we’ll make the security a bit better later).  631 is the standard port for the Internet Printing Protocol (IPP).  However, Windows does not seem to understand IPP by default, so when you add a CUPS printer to Windows, you have to specify the port (e.g.  In order to remove this pain, I also told CUPS to listen on port 80, the standard http port.  If you plan to run a web server on the same machine, you can’t listen on port 80.

<Location />
 Order deny,allow
  Allow  *
  Allow 10.79.127.*
  Allow 10.79.168.*
  Allow 10.79.169.*
  Deny all

This section controls where clients can access the server from.  In most of the real-world cases I can think of, you’ll want to block all hosts by default and then allow only the specific hosts or networks that need access.  Only bad things can happen if you run a print server for the whole world to use.  The order of allow and deny after the Order command is very important.  Whichever comes first is the default, so you’ll want to make sure you use “deny,allow” unless you’ve got a completely self-contained network.  In my example above, I deny everywhere and then explicitly add the IP addresses and DNS entries for my department.  (It isn’t strictly necessary to do it both ways, one or the other works fine in most cases.  It just so happens that I’ve got a few IPs that don’t have DNS records and I’m too lazy to fix that).

That’s all there is to it.  You’ve now got your own cupsd.conf and you’re ready to start the server (/etc/init.d/cups start, unless you’re Nathan, in which case it’s “go CUPS go!”).  It’s also worth noting that you can do some CUPS configuration through a web browser (http://localhost:631) or through a GUI program that your distro provides.  I prefer to do it by hand, because that’s easier to do remotely and it gives you more control over what you’re actually changing.

So now that you’ve got your server set up, it’s time to add printers.  At this point, I think the rest of the Internet does a good job of explaining things, so I won’t duplicate the effort.  Don’t worry though, I seem to be on a CUPS kick lately, and I doubt this post will be the last on the subject.  I do want to note, however, that just because you have CUPS itself running, that doesn’t mean you’re done.  I strongly suggest modifying your firewall rules to allow only the correct hosts access to the port(s) you’re running CUPS on (you’re doing default deny on your firewall, right?).

The secret to a successful school

Disclaimer: In the year or more since this blog started, I’ve made a concerted effort to avoid political discussion.  I have political opinions, some of them rather strong, but there are plenty of other places on the Internet where one can find barely-knowledgeable idiots ranting on about politics.  I’ve got other things that I’d rather talk about with my ones of readers.  With that in mind, today’s post isn’t intended to be a discussion of the political aspects of school policy, but just a look at what I consider to be interesting numbers.  You can draw whatever conclusions you like from it.

I am a member of the local newspaper’s community advisory board.  Once a month, the self-selected group sits down with the Executive Editor and the Managing Editor and we discuss various topics that help keep the newsroom connected with the community.  A few months ago, as the state legislature was negotiating the budget this year, the topic turned to education.  I knew that anything “for the childrens!” was likely to involve emotion and drama from all sides of the argument.  Arming myself with factual information would not only help me discuss the matter logically, but would give me enough to decide what my opinion even was.

What I did was not a rigorous analysis, it only took me an hour and involved only a few bits of data.  Using the state’s website, I found various statistics on public school districts in Lafayette and the surrounding areas.  The first step is defining what success is.  Success needs to be quantifiable to be useful, but for some reason, the state does not have a metric labeled “success.”  As proxies for the elusive “success” number, I used graduation rate, the percentage of graduates who go to college, and the pass rate for the ISTEP+ exam.

For the contributors to success, I tried to anticipate what would be commonly argued.  Since cutting school funding is a political sin, I looked at the dollars spent per student.  The teacher-to-student ratio is often used to indicate the quality of a particular school, so that data was added in.  Conservatives may argue that the school systems are over-burdened with administrators so I looked at the administrator-to-student ratio.  Liberals might suggest that poor and minority students are set up to fail, so I took a look at the percentage of minority enrollment, and use the percentage of students receiving free or reduced lunches as a proxy for income.  Having forgotten most of what I learned in my “Elementary Statistical Methods” class, I couldn’t do any impressive analysis.  What I did instead was to plot each factor against each measure of success.

Dollars per student

For the school districts I examined, the range of total spending per student ranged from $8,100 to $12,500.  It is interesting to note that there was statistically no effect of spending on the graduation rate or the ISTEP+ pass rate.  Spending and college enrollment rate were weakly related, but the relationship was negative.  That is to say that the more money spent per student, the smaller the percentage who went on to college.  It is important to note, of course, that correlation does not imply causation.  From the data, we cannot tell if spending more per student is likely to decrease those going to college, or if fewer students going to college means a district gets more funding to try to improve that metric.  Either way, you can’t tell how successful a school is by how much money it spends per student.

Teachers per student

The argument often put forth is that small class sizes lead to more individual attention, which allows each child to learn better.  That makes sense.  From my friends and relatives in education, I can say with confidence that larger class sizes hasten teacher frustration.  However, the data suggests that the educational success of a school district is improved by having fewer teachers per student.  Once again, two of the three pairs were meaningless — ISTEP+ and graduation were not statistically linked to the number of teachers.  The collegre rate did show a very weak relationship, but as the number of teachers increased, the percentage of students going to college dropped.  This makes sense in light of the spending, since having more teachers results in a higher cost.

Administrators per student

An increased number of administrators also brings a higher cost, but with arguably less benefit.  The numbers show that there is no benefit, at least as far as our “success” metrics are concerned, to having more administrators per student.  No doubt there are arguments both for and against having a higher number of administrators per student, and either can lead to different successful outcomes, none of which are what we’ve looked at.

Minority enrollment

It was not clear how the Indiana Department of Education defines “minority.”  As a result, it makes coming to conclusions based on the data a bit more difficult.  Fortunately, for ISTEP+ and college attendance, there’s no statistically significant relationship, so there’s no conclusions to make.  There is a weak relationship suggesting that as minority enrollment increases, the percentage of students graduating high school decreases.

Family income

I saved family income for last, because it alone had truly meaningful results.  As I said earlier, income data for each school district was not readily available.  Instead, I had to use the percentage of students on free or reduced-price lunch assistance as a proxy.  The higher the percentage, the poorer the district.  The range for this metric is from 14% (West Lafayette) to 66% (Lafayette and Frankfort).  It is interesting to note that Lafayette and Frankfort schools also have the highest percentage of minorities.  There’s only a weak relationship indicating poorer students are less likely to go to college, perhaps in part because of Indiana’s 21st Century Scholars program.  However, there’s a moderately strong relationship to suggest that wealthier students are more likely to pass ISTEP+ and to graduate high school.

So what is the secret to a successful school?  Don’t have poor students.  As I said above, this is not a rigorous analysis, but it is notable that our income proxy is the only factor that affected the success metrics picked.  I won’t speculate on an explanation.  Here’s some R-squared values for those who are stat geeks:

$/student teachers/student admin/student minority income
grad rate 0.00029 0.01131 0.01415 0.39579 0.68394
ISTEP+ pass rate 0.00705 0.06211 0.02814 0.06409 0.79488
college 0.34121 0.18075 0.07707 0.01112 0.3498

A picture isn’t always worth a thousand words

If a picture was always worth a thousand words, I’d have written the entire collection of the Library of Congress several times over.  I’m not a photography bus in the traditional sense: I don’t keep up on the latest cameras, I don’t spend hours in a digital darkroom enhancing my photos.  I just like to take pictures.  Posed pictures don’t interest me much, I’d much rather capture life as it is.

This life often includes still life.  I often combine my love of roads with my love of taking pictures, with the end result that I have a lot of pictures of signs.  Since my posts of late have been largely technical, I thought I’d take some time to have a bit of fun with some of the pictures I’ve taken.  I’ve got a large stash of photos, so this theme may be repeated in the future when I have nothing else to say.

The Dairy Queen has doors to that are hard to open.

This particular selection begins with a picture taken last week at the Dairy Queen near Meijer in Lafayette.  Brian and I were sent on an ice cream run by our wives.  We were nearly thwarted by the door, which is hard to open.  Instead of fixing the door, the management decided a nice-looking sign was just as well.

Excessive quotation marks amuse me.

The second photo comes courtesy of the Lafayette Menard’s home improvement store.  Apparently, the helpful staff could use some instruction in the proper use of the quotation mark. Improper quotation, possessive pronouns, and recursive acronyms (ATM machine anyone?) are three things that my friends and I tend to get excited about.

Illinois rest stops have no shame.

The third picture was taken at a rest stop somewhere on I-70 in western Illinois.  I understand that the idea is to get motorcycle riders to wear a helmet, but is that really the most appropriate wording?  Maybe so, since if it was worded differently, I wouldn’t be sharing this on the Internet with my ones of readers.  You win this time, Illinois.

Which road is just south of Bloomington?  That Road!

The final picture today is one of my personal favorites.  If I ever move to the Bloomington area, I want to buy a house on That Road.  I imagine most conversations would go something like the legendary “Who’s on first?” sketch done by Abbott and Costello.  This picture means so much to me that it is on the digital picture frame in our living room.

So that’s why the printer won’t print…

A few weeks ago, I thought I’d try to fix some printing problems but upgrading the version of CUPS that was installed on our print server.  Of course, since the print server runs Solaris 9, this wasn’t the easiest of tasks.  My first stop was to look on Sun Freeware for a package.  Unfortunately, CUPS was not among the hundreds of packages available.  So I Googled around a bit and found a package on Sun’s website.  Too bad it was the same version I already have.  Finally, I surrendered and grabbed the source.  Which refused to compile.  Granted, a smarter admin could probably have compiled it no problem, but I couldn’t get it working.  We were now about 2 business days from the outage I had scheduled.

Then I had one of my more brilliant thoughts.  Why not just set up a VM and run a Linux CUPS server?  So I did.  Not to brag or anything, but I had it up and running and the old server is forwarding port 631 to the new so the change is mostly invisible to the users.  Go me.  But there were a few problems.

The morning of the switch, one of the secretaries reported that the main office printers weren’t working.  One of them had a funky job that killed the queue, so I cleared it and restarted the queue.  But the other one looked fine.  My colleague went downstairs and checked it out, but couldn’t find any problem with the printer itself.  Around lunch, I was looking through /etc/cups/printers.conf and I came to a sudden realization.

HP JetDirect cards listen on port 9100 for incoming print jobs.  When setting up that particular printer, I forgot to include the port number.  That would explain why the socket process was still running and the load was so high.  Once that error was fixed, I was back in business.

There was still one more problem to be worked out.  A rather cranky professor let me know a while later that the printers on the 3rd floor weren’t working.  We have two printers there, with a CUPS class that splits the load between them.  The idea being that if one of the printers jams, the other keeps going.  This keeps the users from complaining.  Except when no print jobs finish for several days.

So I took a look at the 3rd floor printers on my way into the office one morning.  One of them had jammed, there was no question about that.  Several sheets were stuck in whatever that doohickey is that sits under the toner cartridge in the LaserJet 8150.  When that was cleared, the printer began catching up.  But the other printer…no jams, no other obvious problems.  I went up to my office to take a look at the server side of things.

Wiser from my previous experience, I checked that the config was correct.  It was.  Because I couldn’t think of anything else to do, I tried to telnet to the printer.  Connection refused.  Well that sounds like a problem.  So I tried from the old server.  Success.  Nosing around in the printer config, I realized that someone had set access controls on the printer so that only the old server could access it.  Once that was updated, all was well.  For now?

I could never get the hang of Thursdays

The e-pocalypse seems to be upon us. This morning I tried to upgrade my MacBook to 10.5.8 and it’s been “booting” for the past 45 minutes or so. The evolution-exchange backend keeps failing on my Linux box so I can’t get to my e-mail (interesting side note, it also crashes Pidgin). Twitter and Facebook were down, although Facebook seems to be back now. I feel so isolated!