Shallow Thoughts : : tech
Akkana's Musings on Open Source, Science, and Nature.
Mon, 05 Jul 2010
We had a server that was still running Debian Etch -- for which
Debian just dropped support.
We would have upgraded that machine to Lenny long ago except for one
impediment: upgrading the live web server from apache 1 to apache 2.2.
Installing etch's apache 2.2.3 package and getting the website running
under it was no problem. Debian has vastly improved their apache2 setup
from years past -- for instance, installing PHP also enables it now,
so you don't need to track down all the places it needs to be turned on.
But when we upgraded to Lenny and its apache 2.2.9, things broke.
Getting it working again was tricky because most of the documentation
is standard Apache documentation, not based on Debian's more complex setup.
Here are the solutions we found.
Enabling virtual hosts
As soon as the new apache 2.2.9 was running, we lost all our
websites, because the virtual hosts that had worked fine on
Etch broke under Lenny's 2.2.9. Plus, every restart complained
[warn] NameVirtualHost *:80 has no VirtualHosts.
All the web documentation said that we had to change the
<VirtualHost *> lines to
<VirtualHost *:80>. But that didn't help.
Most documentation also said we would also need the line:
NameVirtualHost *:80
Usually people seemed to find it worked best to put that in a newly
created file called conf.d/virtualhosts. Our Lenny upgrade had
already created that line and put it in ports.conf, but it
didn't work either there or in conf.d/virtualhosts.
It turned out the key was to remove the NameVirtualHost *:80
line from ports.conf, and add it in sites-available/default.
Removing it from ports was the important step: if it was in ports.conf
at all, then it didn't matter if it was also in the default virtual host.
Enabling CGI scripts
Another problem to track down: CGI scripts had stopped working.
I knew about Options +ExecCGI, but adding it wasn't helping.
Turned out it also needed an AddHandler, which I
don't remember having to add in recent versions on Ubuntu.
I added this in the relevant virtual host file in sites-available:
<Directory />
AddHandler cgi-script .cgi
Options ExecCGI
</Directory>
Enabling .htaccess
We have one enduring mystery: .htaccess files work without needing
a line like AllowOverride FileInfo anywhere. I've
needed to add that directive in Ubuntu-based apache2 installations,
but Lenny seems to allow .htaccess without any override for it.
I'm still not sure why it works. It's not supposed to. But hey,
without a few mysteries, computers would be boring, right?
Tags: web, apache, debian
[
20:46 Jul 05, 2010
More tech/web |
permalink to this entry
]
Fri, 25 Jun 2010
Several groups I'm in insist on using LinkedIn for discussions,
instead of a mailing list. No idea why -- it's so much harder to use
-- but for some reason that's where the community went.
Which is fine except for happens just about every time I try to view
a discussion:
I get a notice of a thread that sounds interesting, click on the link
to view it, read the first posting, hit the space bar to scroll down
... whoops! Focus was in that silly search field at the top right of the page,
so it won't scroll.
It's even more fun if I've already scrolled down a bit with the
mousewheel -- in that case, hitting spacebar jumps back up to the
top of the page, losing any context I have as well as making me
click in the page before I can actually scroll.
Setting focus to search fields is a good thing on some pages.
Google does it, which makes terrific sense -- if you go to
google.com, your main purpose is to type something in that search box.
It doesn't, however, make sense on a page whose purpose is to
let people read through a long discussion thread.
Since I never use that search field anyway, though, I came up with
a solution using Firefox's user css.
It seems there's no way to make an input field un-focusable or
read-only using pure CSS (of course, you could use Javascript and
Greasemonkey for that); but as long as you don't need to use it,
you can make it disappear entirely.
Add this line to chrome/userContent.css inside your Firefox profile
(create it if it doesn't already exist):
form#global-search span#autocomplete-container input#main-search-box {
visibility:hidden;
}
Then restart Firefox and load a discussion page.
The search box should be hidden,
and spacebar should scroll the page just like it does on most web pages.
Of course, this will need to be updated the next time
LinkedIn changes their page layout. And it's vaguely possible that
somewhere else on the web is a page with that hierarchy of element names.
But that's easy enough to fix: run a View Page Source
on the LinkedIn page and add another level or two to the CSS rule.
The concept is the important thing.
Tags: html, web, css, tips, annoyances
[
16:17 Jun 25, 2010
More tech/web |
permalink to this entry
]
Sun, 20 Jun 2010
Regular readers probably know that I use
HTML
for the slides in my talks, and I present them either with Firefox
in fullscreen mode, or with my own Python
preso
tool based on webkit.
Most of the time it works great. But there's one situation that's
always been hard to deal with: low-resolution projectors.
Most modern projectors are 1024x768, and have been for quite a few years,
so that's how I set up my slides. And then I get asked to give a talk
at a school, or local astronomy club, or some other group that
has a 10-year-old projector that can only handle 800x600. Of course,
you never find out about this ahead of time, only when you plug in
right before the talk. Disaster!
Wait -- before you object that HTML pages shouldn't use pixel values and
should work regardless of the user's browser window size: I completely
agree with you. I don't specify absolute font sizes or absolute
positioning on web pages -- no one should.
But presentation slides are different: they're designed for
a controlled environment where everyone sees the same thing using the
same software and hardware.
I can maintain a separate stylesheet -- that works for making the
font size smaller but it doesn't address the problem of pictures too
large to fit (and we all like to use lots of pictures in presentations,
right?) I can maintain two separate copies of the slides for the two sizes,
but that's a lot of extra work and they're bound to get out of sync.
Here's a solution I should have thought of years ago: full-page zoom.
Most major browsers have offered that capability for years, so the
only trick is figuring out how to specify it in the slides.
IE and the Webkit browsers (Safari, Konqueror, etc.) offer a wonderful
CSS property called zoom. It works like this:
body {
zoom: 78.125%;
}
78.125% is the ratio between an 800-pixel projector and a 1024-pixel one.
Just add this line, and your whole page will be scaled down to the
right size. Lovely!
Lovely, except it doesn't work on Firefox
(bug 390936).
Fortunately, Firefox has another solution: the more general and not yet
standardized CSS transform, which Mozilla has implemented as the
Mozilla-specific property
-moz-transform.
So add these lines:
body {
position: absolute; left: 0px; top: 0px;
-moz-transform: scale(.78125, .78125);
}
The position: absolute is needed because when Firefox scales
with -moz-transform, it also centers whatever it scaled, so the
slide ends up in the top center of the screen.
On my laptop, at least, it's the upper left part of the screen that
gets sent to the projector, so slides must start in the upper left corner.
The good news is that these directives don't conflict; you can put
both zoom and -moz-transform in the same rule and things
will work fine. So I've added this to the body rule in my slides.css:
/* If you get stuck on an 800x600 projector, use these:
zoom: 78.125%;
position: absolute; left: 0px; top: 0px;
-moz-transform: scale(.78125, .78125);
*/
Uncomment in case of emergency and all will be well.
(Unless you use Opera, which doesn't seem to understand either version.)
Tags: speaking, html, css, browsers, firefox, mozilla
[
11:14 Jun 20, 2010
More tech/web |
permalink to this entry
]
Tue, 13 Apr 2010
I'm in a Yahoo group where a spammer just posted a message that
looked like it was coming from someone in the group, so Yahoo allowed it.
The list owner posted a message about using good passwords so your
account isn't hacked since that causes problems for everyone.
Of course, that's good advice and using good passwords is always a good idea.
But I though this sounded more like a
Joe-job spam,
in which the spammer forges the From address to look like it's coming
from someone else.
Normal users encounter this in two ways:
- You start getting tons of bounce messages that look as though you
sent spam to hundreds of people and they're refusing it.
- You see spam that looks like it came from a friend of yours,
or spam on a mailing list that looks like it came from a
legitimate member of that list.
Since this sort of attack is so common, I felt the victim didn't
deserve being harangued about not having set up a good password.
So I posted a short note to the list explaining about Joe-jobs.
But to make the point, I forged the From address of the list owner.
Indeed, it got through Yahoo and out to the list just fine:
[ ... ] the spam probably
wasn't from a bad password. It was probably just a spammer forging
the header to look like it's from a legitimate user.
It's called a "joe-job": http://en.wikipedia.org/wiki/Joe-job
To illustrate, I've changed the From address on this message to
look like it's coming from Adam. I have not hacked [listowner]'s account
or guessed his password or anything else. If this works, and looks
like it came from [listowner], then the spam could have been done the same
way -- and there's no need to blame the owner of the account, or
accuse them of having a bad password.
Why does this work? Why doesn't Yahoo just block messages from
user@isp.com if the mail doesn't come from isp.com?
They can't! Many, many people don't send mail from the domains in their
email addresses. In effect, people forge their From header all the time.
Here are some examples:
- You're using you@gmail.com, but you're using Thunderbird or Eudora
or Evolution or something to read and send mail from home.
- You're on your computer at home, but you're sending work-related
email from your work account.
- You're on your laptop, using Thunderbird or whatever, mailing
from you@isp.com, but you're at a friend's house or a hotel or
conference or somewhere.
- You're sending mail from a public terminal somewhere (eek, do
people really type their mail info in to these things?)
- You're reading and sending mail from a mobile phone.
- You're sending mail from your own domain, me@mydomain.com,
but you're at home or somewhere else other than wherever mydomain.com
is hosted.
If mailing lists rejected posts in all these cases, people would be
pretty annoyed. So they don't. But that means that now and then, some
Joe-job spam gets through to mailing lists. Unfortunately.
(Update: The message that inspired this may very
well have been a hacked password after all case, based on the mail
headers. But I found that a lot of people didn't know about
Joe-jobbing, so I thought this was worth writing up anyway.)
Tags: security, email, joe-job, spam
[
21:28 Apr 13, 2010
More tech/email |
permalink to this entry
]
Fri, 19 Mar 2010
I discovered recently that 1067 lines in my Firefox preferences file
(out of 1438 total) were devoted to duplicating default printer settings.
I got a new printer recently.
I needed to set up a preference in user.js so I can
switch
temporarily to landscape mode printing without having landscape
mode become permanent. So I checked in on prefs.js to
see what Firefox called my new printer -- and, well, eek!
For every printer I've ever used on this machine, I had a set
of options that looked like this:
user_pref("print.printer_Epson.print_bgcolor", false);
user_pref("print.printer_Epson.print_bgimages", false);
user_pref("print.printer_Epson.print_colorspace", "default");
user_pref("print.printer_Epson.print_command", "lpr ${MOZ_PRINTER_NAME:+-P\"$MOZ_PRINTER_NAME\"}");
user_pref("print.printer_Epson.print_margin_bottom", "0.500000012107193");
user_pref("print.printer_Epson.print_margin_left", "0.500000012107193");
and so on -- 41 lines, in the case of print.printer_Epson.
But some printers had multiple sets of preferences -- here's the
list of printer names, each of which had those 41 lines, more or less:
- printer_Brother
- printer_CUPS/Brother
- printer_CUPS/Epson
- printer_CUPS/epson
- printer_Epson
- printer_PostScript/default
- printer_Print_to_File
- printer_Deskjet-F4200-series
- printer_HP_Deskjet_F4200_series
In case you're curious, this encompasses three physical printers
I've used with Firefox:
my old Epson C86, my new HP F4280, and Dave's Brother HL 2070N.
None of these values is anything I've ever set myself;
they're all default values.
Why Firefox feels the need to store them for all eternity is anybody's guess.
But wait, you say ... 41 lines times 9 printers is a lot, but it
doesn't come close to equalling 1067 lines. What else is there?
Well, there are another 43 lines that repeat all those same defaults
again but don't specify any particular printer, like
user_pref("print.print_footerleft", "&PT");.
And then, oh wait, what's this? All the preceding prefs
are duplicated all over again, with "tmp" added, like this:
user_pref("print.tmp.printerfeatures.Brother_HL-2070N_series.supports_paper_size
_change", true);
user_pref("print.tmp.printerfeatures.CUPS/Brother.orientation.count", 2);
and so on. 456 lines of that.
Unfortunately, I got a little over-zealous in deleting lines before
I'd made a backup of the original file. So by the time it occurred to
me to write this up, I'd destroyed some of the evidence and had to
work from a backup, which "only" had 813 lines of print preferences.
Part of that is that I didn't have the new printer yet (two entries
times 41 lines times two) but that only gets me up to 977 lines.
I'm not sure what the other 190 lines were.
How many printing preferences do you have?
You can see them by going to about:config and typing print.
Or on Linux, you can count them. First
find your
profile folder, where your prefs.js file lives,
or search for prefs.js directly:
locate prefs.js | grep home
Then use wc on that prefs.js file to count your print preference lines:
grep print yourprofile/prefs.js | wc -l
As to why Firefox uses so many redundant lines in the preference file
for settings that have never been changed from the defaults ... well,
your guess is as good as mine.
Tags: firefox, mozilla, preferences, printing
[
18:59 Mar 19, 2010
More tech/web |
permalink to this entry
]
Fri, 12 Feb 2010
Okay, I know Dave and I are probably the last two people on the face
of the earth who use PalmOS. But we still do, to read news and
ebooks prepared with
Plucker, only
there was one big frustration: none of our Plucker files were
beamable. So if I downloaded a really interesting article and wanted
to share it with Dave, I couldn't (unless we went back to our
desktop machines and transferred it that way.)
The Palm just said
Unhandled exception, error code = 5395.
I tried all sorts of things in the
feedme code that
calls Plucker -- adding --beamable, moving it earlier or later in
the argument list, trying other arguments. --beamable is supposed to
affect the "copy protect bit", but checking on the Palm devices
confirmed the copy protect bit wasn't set, and still beaming didn't work.
And I just stumbled on the answer tonight, and since it's not
documented anywhere, I must document it in case somewhere, there's
someone else who still uses PalmOS and Plucker struggling with this
problem.
It turns out that a document with a colon in the name can't be beamed.
On any PalmOS device we've tried, regardless of generation or
manufacturer. This of course isn't documented anywhere I can find.
So Fri: BBC World News isn't beamable. But simply give it a
colonoscopy -- rename it to Fri BBC World News --
and beaming works great.
Sheesh! Ain't debugging grand?
Tags: palm, plucker
[
19:43 Feb 12, 2010
More tech |
permalink to this entry
]
Tue, 15 Dec 2009
I've been using fetchmail for a couple of years to get mail from the
mail server to my local machine. But it had one disadvantage: it meant
that I had to have postfix (or a similar large and complex MTA)
configured and running on every machine I use, even the lightweight
laptop.
I run procmail to filter my mail into folders -- Linuxchix mail into
one folder, GIMP mailing lists into another, and so forth -- and it
seemed like it ought to be possible for fetchmail to call procmail
directly, without going through postfix.
I found several suggestions on the web -- for instance,
fetchmail-procmail-sendmail
-- but they didn't work for me. fetchmail downloaded each message, passed
it to procmail, and procmail appended it to the relevant mailbox
without the appropriate "From " header that mail programs
need to tell when each new message starts.
Finally, on a tip from bma on #linuxchix and after a little
experimentation, I added this line to ~/.fetchmailrc:
mda /usr/bin/procmail -f %F -m /home/username/.procmailrc
Works great! And it's a lot faster than going through postfix.
Tags: linux, mail, fetchmail, procmail
[
14:07 Dec 15, 2009
More tech/email |
permalink to this entry
]
Sat, 05 Dec 2009
I had been dithering about whether to buy another inkjet to replace
the Epson C86 that died earlier this year. The Epson wasn't all that
old, but its nozzles wouldn't unclog, and reviews of Epson's latest
printers aren't at all complimentary.
HP looked like the best solution, since they're the only printer
manufacturer that supports Linux directly.
I new wasn't going to buy Canon, because their closed protocols mean
that every Linux driver has to be reverse engineered, and I certainly
didn't want a Lexmark (see our last experience with Lexmark in
Cracking the
Lexmark Code).
But which HP? Their array of models is baffling, and no one seems to
know the difference between Deskjets, Officejets and Photosmarts,
or whether the inks fade, or whether the nozzles are built into the
ink cartridges (so a clogged nozzle doesn't mean a dead printer
like it does with Epson). And there's no way to get print samples.
So I dithered and stalled -- until Fry's put the HP Deskjet F4280 on
sale for $20.
The online reviews were fairly positive.
And for that price, and with Linux support, how bad could it be?
Answer: not bad at all.
It set up pretty easily in CUPS, though the CUPS test page didn't work
even after several tries. Fortunately, I don't need to print CUPS test pages.
Printing worked fine from GIMP, Firefox and OpenOffice.
The print quality is surprisingly good.
(Note: the F4280 is not the same printer as the Photosmart C4280,
which caused some confusion at Fry's when I tried to actually buy one).
Text and web page on regular paper come out crisp and sharp.
"High quality" on good photo paper looks like a photo as long as
you don't examine it too closely. It'll be fine for my holiday
greeting cards, business cards and most other tasks involving photos.
"Photo quality" takes a lot longer, and is indeed better
than "High" if you examine it with a loupe. Nobody's going to confuse
it with a real photo print under magnification,
but it'll look fine on the wall.
Here's the part that impressed me most: it can print all the way to
the edge of the paper with no hassle. I could never do that with the
C86: though the hardware was supposedly capable of it, the Gutenprint
drivers -- the reason I'd been sticking with Epson all those years --
never could handle it (and tended to print yellow smears on the
borders if you tried it). Good job, HP!
It's an "All in one" so it has a built-in scanner too (no fax).
SANE (on Ubuntu 9.10) doesn't see the scanner, and I haven't tried to
track that down since I already have a good scanner. I wouldn't have
bought an "all in one" except that dedicated printers are quite a bit
more expensive.
Update: it's the usual Ubuntu permissions problem,
combined with new udev rules. Root sees the scanner, users don't,
unless you add lines to two different udev rules files. In
/lib/udev/rules.d/40-libsane.rules, add:
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="2504", ENV{libsane_matched}="yes"
then create a new file /etc/udev/rules.d/45-libsane.rules and
put in it:
SYSFS{idVendor}=="03f0", SYSFS{idProduct}=="2504", MODE="664", GROUP="scanner"
More details are in
bug
121082.
And wow, the scanner output is really bad. I mean really, really bad.
I'm happy with the printer but I'll definitely keep my old Epson scanner.
Reviews complain that the F4280 is rather ink-hungry and the
ink cartridges are overpriced; but every inkjet printer review says
that (probably with good reason).
I don't print that much, so I'm not too worried.
And of course I know nothing about long term reliability
or how fade-resistant the prints will be.
Ask me in six months. But so far I'm quite pleased.
A nice printer with excellent Linux drivers.
Tags: printing, linux
[
19:47 Dec 05, 2009
More tech |
permalink to this entry
]