Search Results: "xam"

17 August 2007

Andrew McMillan: Hosting on IPv6: autoconfiguration of IPv6 addresses may be harmful

The availability of IPv6 worldwide is surprisingly extensive, nowadays, but over the past years as it has slowly filtered around, people have had bad experiences with it because of poor routing. It seems that, as always, a bad rep travels about 20 times further than a good one, so an automatic response to casual problems that people see when using IPv6 is to blacklist it, without actually investigating the problem. Take today, for an example. Someone said to me "I disabled IPv6 in Firefox because it was slow for one of my favourite sites". OK, so show me this favourite site. Show me the traceroute. Give me some facts! Further investigation showed that although there is an AAAA record for www.crooksandliars.com, there is nothing listening on the other end! Looking at the AAAA record returned, we see that it is an autoconfigured IPv6 address of the form xxxx:xxxx:xxxx:xxxx:xxxx:xxFF:FExx:xxxx and can conjecture that the likely problem is that someone has done a hardware upgrade on their server, so they now have a different MAC, and consequently the autoconfigured IPv6 address has changed. Other scenarios are entirely possible, of course, but this is a likely one. This is the second case I have seen where someone was running publicly available services on IPv6 using a manual DNS record pointing at an automatic IPv6 address, but I doubt that it will be the last. Unless there is infrastructure in place to automatically update your DNS when your address is autoconfigured, you are going to get bitten by this problem at some point if people remotely connect to your system for some service.

Romain Francoise: Debian packages without md5sums

Random testing of my local Debian mirror shows that 644 binary packages out of 20774 (3.1%) are missing the DEBIAN/md5sums control file. This file (used by debsums) is very useful to check for disk corruption, and even though debsums can generate the data on the fly when a package is installed, it's better to have this information computed at build time.

So if your packages use debhelper, make sure that you have the proper dh_md5sums call in debian/rules. If you don't use debhelper, you'll have to generate the DEBIAN/md5sums control file manually (see dh_md5sums's source for inspiration). If you use a high-level build tool like CDBS, you probably don't have to do anything.

Should I file bugs against the 446 affected source packages? A few maintainers apparently exclude some binary packages on purpose; for example the zsh source package generates md5sums for zsh, zsh-static and zsh-doc, but not for zsh-dev and zsh-dbg...

Update: updated statistics with a run on a full amd64+all mirror.

16 August 2007

MJ Ray: Weston-super-Mare Co-op Welcome Closed

Sorry, but I can't see how to make this post anything but a bit negative: Along with a few million others, I own some food shops. I usually try to shop there. I go away for a few weeks and the picture shows what's happened to my nearest food shop... [picture of closed shop] It's closed! Well, that's one less store for the rebranding project, [Cambridge Co-operator] but it's a bit of a pain in the backside. There's no sign on the closed shop and I saw no sign when I last visited it. There's nothing on the membership web news and there was nothing in the last magazines. I've called the regional office to find out what's happening and left a voicemail. I might email one of our committee too, as I think they decide on closures. I'm a bit unhappy about this. Now we're down to two medium/small food shops that have really bizarre stock policies (for example, they sell filter coffee, but no coffee filters) and are unable to order key ethical products. (2007-08-17: 1 comment)

Andrew Pollock: [tech] Hidden gems in the GNU C Library

I should really read the GNU C Library documentation. Even if only 10% of it sinks in, I'll be that much the wiser for it. Today's (re)discovery: libSegfault.so I actually found this with a co-worker a few months ago, and promptly forgot all about it until he reminded me today whilst I was lamenting about Cfengine segfaulting on me. Here's a lovely self-illustrating example:
apollock@icarus:~$ sudo chmod a+x /lib/libSegFault.so
apollock@icarus:~$ /lib/libSegFault.so
Segmentation fault
apollock@icarus:~$ # Aww
apollock@icarus:~$ LD_PRELOAD=/lib/libSegFault.so /lib/libSegFault.so
*** Segmentation fault
Register dump:
 EAX: 80003f00   EBX: b7ff1ff4   ECX: 00000000   EDX: 00000000
 ESI: bf88b97c   EDI: 800008b0   EBP: 00000000   ESP: bf88b974
 EIP: 00000001   EFLAGS: 00010282
 CS: 0073   DS: 007b   ES: 007b   FS: 0000   GS: 0033   SS: 007b
 Trap: 0000000e   Error: 00000004   OldMask: 00000000
 ESP/signal: bf88b974   CR2: 00000001
Backtrace:
/lib/libSegFault.so[0xb7fd004f]
[0xffffe420]
Memory map:
80000000-80003000 r-xp 00000000 08:02 8589       /lib/libSegFault.so
80003000-80005000 rwxp 00002000 08:02 8589       /lib/libSegFault.so
80005000-80026000 rwxp 80005000 00:00 0          [heap]
b7e61000-b7e6b000 r-xp 00000000 08:02 6254       /lib/libgcc_s.so.1
b7e6b000-b7e6c000 rwxp 00009000 08:02 6254       /lib/libgcc_s.so.1
b7e6c000-b7e6d000 rwxp b7e6c000 00:00 0
b7e6d000-b7faf000 r-xp 00000000 08:02 8572       /lib/libc-2.6.so
b7faf000-b7fb0000 r-xp 00141000 08:02 8572       /lib/libc-2.6.so
b7fb0000-b7fb2000 rwxp 00142000 08:02 8572       /lib/libc-2.6.so
b7fb2000-b7fb5000 rwxp b7fb2000 00:00 0
b7fce000-b7fd1000 r-xp 00000000 08:02 8589       /lib/libSegFault.so
b7fd1000-b7fd3000 rwxp 00002000 08:02 8589       /lib/libSegFault.so
b7fd3000-b7fd5000 rwxp b7fd3000 00:00 0
b7fd5000-b7ff1000 r-xp 00000000 08:02 8569       /lib/ld-2.6.so
b7ff1000-b7ff3000 rwxp 0001b000 08:02 8569       /lib/ld-2.6.so
bf879000-bf88f000 rw-p bf879000 00:00 0          [stack]
ffffe000-fffff000 r-xp 00000000 00:00 0          [vdso]
Segmentation fault
This is somewhat similar to Tridge's segv_handler, which used to be what I reached for in these sort of situations, but that was a bit fiddly to get set up. This is significantly easier, and already installed as standard. Of course, interpreting the output is left as an exercise for the reader. Update Or you can just use catchsegv(1)

15 August 2007

Simon Richter: VCS merges

Matthew, the situation you describe can be avoided by creating an explicit relationship between the values that need to change together, either by computing those that can be computed, or by having the build process error out at some point if you did something wrong. For example, I can use either char const *const keywords[] =

    "foo",
    "bar"
;
unsigned int const num_keywords = sizeof keywords / sizeof *keywords;
(for more correctness, use "(&keywords[1] - &keywords[0])" as the divisor), or you can explicitly tell the compiler how many keywords you expect, using unsigned int const num_keywords = 2;
char const *const keywords[num_keywords] =

    "foo",
    "bar"
;
What we lerned in our database courses is true in other places as well: redundant information has a habit of going out-of-sync, so we should avoid it (=> db normalisation), or create a connection between the redundant bits (=> foreign keys).

Stefano Zacchiroli: debcheckout

Introducing debcheckout Cute little tiny teeny new addition to devscripts: debcheckout (not yet uploaded though, in the mean time you can get it from here. It checks out the versioning repository used to maintain a given package. Sample usage:
$ debcheckout devscripts
declared svn repository at svn://svn.debian.org/devscripts/trunk
svn co svn://svn.debian.org/devscripts/trunk ...
A    trunk/debian
A    trunk/debian/control
A    trunk/debian/links
A    trunk/debian/dirs
A    trunk/debian/compat
<snip>
 U   trunk
Checked out revision 749.
$

The information about where to find a repository is extracted parsing (in a rather dumb way actually, but I really can't stand libapt-pkg API!) Vcs-XXX fields. Intended usages:
  1. NMU scenarios: when you're NMUing, please commit your patches (if possible of course: directly to the repository if it has already adhered to the open your VCS campaign I'm sponsoring, or somewhere else if you're using a distributed VCS); with debcheckout the first step it's easy
  2. ease the creation of patches: isn't it better to checkout a repository, fiddle around, and then just invoke svn (or whatever) diff instead of remembering (I always forgot that!) to first create a .orig copy of the debianized source tree?
  3. retrieving the bleeding edge version of a package which includes the patch for a pending bug you have been waiting for ages
RFC Let me know what you think of debcheckout, feature requests, whatever. In particular let me know if I did something wrong using some VCS, since I'm not proficient in all VCSs supported by debcheckout; for example: I'm quite sure the Arch part is not working ... help is appreciated! Vcs-Cvs proposed convention debcheckout can also give the ground for standardizing the VCS-specific meanings of the various Vcs-XXX fields. In writing it I've noticed that almost all VCSs have de facto standards about what to put in the field, with the notable exception of CVS. That's probably because all modern VCSs rely on some URL-like identifier for a repository location, while CVS does not. It needs a pair URL/module to be checkout. The format I'm currently supporting in debcheckout is a pair of space separated values "CVSROOT MODULENAME"; later on I'm using those values as in cvs -d CVSROOT checkout MODULENAME. Also please note that if you do not put the heading ":pserver:" string in the CVSROOT, users won't be able to checkout the repository without providing a password. Tip of the day: Pod::Usage Perl's Pod::Usage module is cool. Finally I can write the usage string only once instead of duplicating it in the manpage and in the string to be printed upon --help. Ruby had something similar, but the output on console was so horrible that I preferred duplicating stuff for Ruby scripts. Update: I've changed the link to debcheckout.pl so that it points to the "live" version in the devscripts repository, since some patches are already flowing in ...

MJ Ray: Protx Updates Broke Shops

Protx, a payment service, installed a major update on 1 August. They'd warned us about this in newsletters and we were prepared. We paid a bit towards another company's development of the protx_form module for OSCommerce to meet the updates and generally clean it up. This went slightly wrong in three ways. Firstly, protx went down for longer than expected, ultimately generating an apology from the MD. Not much we could do about that. Secondly, protx started rejecting commas in amounts. GB uses commas in between thousands, so this meant none of our British-localised shops could process orders over 1000. Ow. The Protx VSP Form docs still shows commas in the Amount examples, so I suspect that change was unintented. I've sent Protx Support an email to ask. I was offline, but Paul installed a fix before I got back. Finally, the mainline protx_form module has updated to v1.17 to include these changes and more (see Payment Modules forum threads), but our developer hasn't uploaded their work yet, so we're stuck up a branch and someone needs to merge. I hope it won't be us, as I can already see conflicting changes. What should I have done differently? Is it time to find a new payment provider? Should I insist that we publish paid developments ourselves as soon as possible? (2007-08-16: 1 comment)

Robert Collins: 15 Aug 2007

When are two identical changes the same, and when aren't they? Theres a little bit of debate started by Andrew Cowie posting about unmixing the paint. Matt Palmer followed up with a claim that a particular technique used by Andrew is dangerous, and finally Andrew Bennetts makes the point that text conflicts are a small subset of merge conflicts. That said, one critical task for a version control system is the merge command. Lets define merge at a human level as "reproduce the changes made in branch A in my branch B". There are a lot of taste choices that can be made without breaking this definition. For instance, merge that combines all the individual changes into one - losing the individual commit deltas meets this description. So does a merge which requires all text conflicts to be resolved during the merge commands execution, or one that does not give a human a chance to review the merged tree before recording it as a commit. So if the goal of merge is to reproduce these other changes, then we are essentially trying to infer what the *change* was. For example, in an ideal world, merging a branch that changes all "log messages of floating points to 6 digit scale." would know enough to catch all new log messages added in my branch, regardless of language, actual api used etc etc. But that is fantasy at the moment. The best we can do today depends on how we capture the change. For instance, Darcs allows some changes to be captured as symbol changing patches, and others as regular textual diffs. So the problem about whether arriving at the same result can be rephrased 'when is arriving at the same result correct or incorrect'. For instance, if I write a patch and put it up as plain text on a website, then two people developing $foo download it and apply it, they have duplicate changes but its clearly correct that a merge between them should not error on this. On the other hand, the example Andrew Bennetts quotes in his post is a valid example of two people making the same change, but the line needing a change during the merge to remain correct. Here's another, example though. If I commit something faulty to my branch, and you pull from me before I fix it. Then while I fix the bug, you also fix it - the same way. That is another example of no-conflict being correct. If its possible for either answer - conflict, or do not conflict - to be correct, then what should a VCS author do? There are several choices here: I think that our job is to assess what the maximum harm from choosing the wrong default is, and the likely hood of that occuring, and then make a choice. Short of fantasy no merge is, in general, definately good or bad - your QA process (such as an automatic test suite) needs to run regardless of the VCS's logic. The risk of a bad merge is relatively low, because you should be testing, and if the merge is wrong you can just not commit it, or roll it back. So our job in merge is to make it likely as possible that your test suite will pass when you have done the merge, without further human work. This is very different to trying to always conflict whenever we cannot be 100% sure that the text is what a human would have created. Its actually harder to take this approach than conflicting - conflicting is easy.

Russell Coker: IT Recruiting Agencies - Advice for Contract Workers

I read an interesting post on Advogato about IT recruiting agencies (along with an interesting preface about medical treatment for broken ribs). Their report closely mirrored my experience in many ways. Here are what I consider to be the main points for a job applicant dealing with recruiters:
  1. Ask more than you believe that you are worth - the worst they can do is say “no” (and you will feel like a fool if the agency pays you less than half what the client pays because you didn’t ask for enough).

  2. Put lots of terms in your CV that will work for grep or other searches. A human who reads your CV will know that if you describe 3 years of Linux sys-admin experience that you can do BASH shell scripting and sys-admin work on other versions of Unix. But if a search doesn’t match it then the typical recruiting agent won’t offer you the position. I have idly considered saying things like “Perl (not Pearl) experience” to catch mis-spelled grep operations.

  3. Recruiting agents will frequently demand that you re-write your CV to match a position that they have open, they will say things such as “you claim 3 years of shell scripting and Perl experience but I don’t see that on your CV” and insist that you re-write it to give more emphasis to that area.

  4. Most recruiting agents are compulsive liars and don’t understand computers, you have to deal with the fact that to get most of the better paying positions you need to have an incompetent liar represent you. Avoid the stupid liars though. For example I once refused to deal with an agent who told me about his plans for stealing the CV database from the agency he worked for and selling it to another agency - not because he was shifty in every possible way, but because he was so stupid as to boast about such things immediately after meeting me on a train.

  5. Expect that recruiting agents won’t understand the technology. If you politely and subtly offer to assist them in writing a letter to a client recommending you then they will often accept. Why would they go to the effort of assessing your skills and writing a short letter to the client describing how good you are when you can do that for them? On one particularly amusing occasion I was applying for a position with IBM and the recruiting agent had been supplied with a short quiz of technical skills to assess all applicants - they gave me the answer sheet and asked me to self-assess (I got 100% - but it was an easy test and I would have got the same result anyway).

  6. Some levels of stupidity are so great that you should avoid dealing with the agent (and possibly the agency that employs them). Being unable to view a HTML file is one criteria I have used since 1999 (every OS since about 1998 came with a web browser built in). Another example is an agent who tried to convince me that “.au” is not a valid suffix for an email address (I was applying for a sys-admin job with an ISP). Job adverts that mis-spell terms (such as Perl spelled at Pearl) are also a warning sign.

  7. Gossip is important to your business! Some agencies will pay you what you earn and merely terminate your contract when things go wrong. Other agencies will refuse to pay you when things go bad, or even demand that paid money be returned and threaten legal action. Talk to other contract workers in your region and learn the goss about the bad agencies. Also track agency name changes, when a bad agency changes name don’t be fooled.

When applying for a position advertised by an agency you will ideally start by seeing an advert with a phone number and an email address. The best strategy in that case seems to be to send your CV with a brief cover letter and then about 5 minutes after your mail server sends the message to their mail server you phone them. I found that I got a significantly higher success rate (in terms of having the agent send my CV to the client) if I phoned them when my CV arrived. Sometimes a fax number is advertised, unless there is some problem that prevents sending a document via email (such as the agency having a broken mail server) then do not FAX them. A faxed document will have to be faxed on to the client and will look bad after the double-fax operation and will prevent the agent from grepping it. Rumor has it that agents will often post fake adverts for the purpose of collecting CVs (so that they can boast to clients In most situations a recruiting agent should insist on meeting you for an interview before sending your CV to a client. The only exception is if you are applying for a job in another country. Meeting an agent at a restaurant or other public place is not uncommon (often they want to meet you while travelling between other locations and sometimes their main office is not in a good location). I suspect that some agencies start with a “virtual office” and perform all their interviews in public places (this doesn’t mean that they will do a worse job than the more established agencies). If an agent is prepared to recommend you to a client without meeting you then they are not doing their job properly. It used to be that there were enough agencies pretending to do their job that you could ignore the agencies that will recommend any unseen candidate. But now an increasing number of agencies do this and if you want a contract you may have to deal with them. When an agency has a fancy office keep in mind that they paid for it by taking money from people like you! For contract work a recruiting agent is not your friend, they make their money by getting you to accept less money than the client pays them - the less they pay you the more money they make. A common claim is “we only take a fixed percentage of what the client pays”, but when you ask what that percentage is they refuse to answer - I guess that the fixed percentage is 50% or as close to it as they can manage.

Russell Coker: IT Recruiting Agencies - Advice for Contract Workers

I read an interesting post on Advogato about IT recruiting agencies (along with an interesting preface about medical treatment for broken ribs). Their report closely mirrored my experience in many ways. Here are what I consider to be the main points for a job applicant dealing with recruiters:
  1. Ask more than you believe that you are worth - the worst they can do is say “no” (and you will feel like a fool if the agency pays you less than half what the client pays because you didn’t ask for enough).

  2. Put lots of terms in your CV that will work for grep or other searches. A human who reads your CV will know that if you describe 3 years of Linux sys-admin experience that you can do BASH shell scripting and sys-admin work on other versions of Unix. But if a search doesn’t match it then the typical recruiting agent won’t offer you the position. I have idly considered saying things like “Perl (not Pearl) experience” to catch mis-spelled grep operations.

  3. Recruiting agents will frequently demand that you re-write your CV to match a position that they have open, they will say things such as “you claim 3 years of shell scripting and Perl experience but I don’t see that on your CV” and insist that you re-write it to give more emphasis to that area.

  4. Most recruiting agents are compulsive liars and don’t understand computers, you have to deal with the fact that to get most of the better paying positions you need to have an incompetent liar represent you. Avoid the stupid liars though. For example I once refused to deal with an agent who told me about his plans for stealing the CV database from the agency he worked for and selling it to another agency - not because he was shifty in every possible way, but because he was so stupid as to boast about such things immediately after meeting me on a train.

  5. Expect that recruiting agents won’t understand the technology. If you politely and subtly offer to assist them in writing a letter to a client recommending you then they will often accept. Why would they go to the effort of assessing your skills and writing a short letter to the client describing how good you are when you can do that for them? On one particularly amusing occasion I was applying for a position with IBM and the recruiting agent had been supplied with a short quiz of technical skills to assess all applicants - they gave me the answer sheet and asked me to self-assess (I got 100% - but it was an easy test and I would have got the same result anyway).

  6. Some levels of stupidity are so great that you should avoid dealing with the agent (and possibly the agency that employs them). Being unable to view a HTML file is one criteria I have used since 1999 (every OS since about 1998 came with a web browser built in). Another example is an agent who tried to convince me that “.au” is not a valid suffix for an email address (I was applying for a sys-admin job with an ISP). Job adverts that mis-spell terms (such as Perl spelled at Pearl) are also a warning sign.

  7. Gossip is important to your business! Some agencies will pay you what you earn and merely terminate your contract when things go wrong. Other agencies will refuse to pay you when things go bad, or even demand that paid money be returned and threaten legal action. Talk to other contract workers in your region and learn the goss about the bad agencies. Also track agency name changes, when a bad agency changes name don’t be fooled.

When applying for a position advertised by an agency you will ideally start by seeing an advert with a phone number and an email address. The best strategy in that case seems to be to send your CV with a brief cover letter and then about 5 minutes after your mail server sends the message to their mail server you phone them. I found that I got a significantly higher success rate (in terms of having the agent send my CV to the client) if I phoned them when my CV arrived. Sometimes a fax number is advertised, unless there is some problem that prevents sending a document via email (such as the agency having a broken mail server) then do not FAX them. A faxed document will have to be faxed on to the client and will look bad after the double-fax operation and will prevent the agent from grepping it. Rumor has it that agents will often post fake adverts for the purpose of collecting CVs (so that they can boast to clients In most situations a recruiting agent should insist on meeting you for an interview before sending your CV to a client. The only exception is if you are applying for a job in another country. Meeting an agent at a restaurant or other public place is not uncommon (often they want to meet you while travelling between other locations and sometimes their main office is not in a good location). I suspect that some agencies start with a “virtual office” and perform all their interviews in public places (this doesn’t mean that they will do a worse job than the more established agencies). If an agent is prepared to recommend you to a client without meeting you then they are not doing their job properly. It used to be that there were enough agencies pretending to do their job that you could ignore the agencies that will recommend any unseen candidate. But now an increasing number of agencies do this and if you want a contract you may have to deal with them. When an agency has a fancy office keep in mind that they paid for it by taking money from people like you! For contract work a recruiting agent is not your friend, they make their money by getting you to accept less money than the client pays them - the less they pay you the more money they make. A common claim is “we only take a fixed percentage of what the client pays”, but when you ask what that percentage is they refuse to answer - I guess that the fixed percentage is 50% or as close to it as they can manage.

14 August 2007

Matthew Palmer: Dangerous Merging

Andrew Cowie, talking about Orthogonal Patches, believes that having your revision control system assume that patches which are the same text is the same is a good thing:
If X = B [in the java equals() sense], and if Z = D..E, it's no problem, because when the day comes that X and Z are merged to some branch which happens to be the public mainline, and you later pull from that public branch, then X and B will "contend" and merge without conflict, and likewise Z will merge without conflict. It's all the same text. Mission accomplished.
If you think this is right, "think about two different patches each adding a new keyword and also changing the line #define NUM_OF_KEYWORDS 17'' to #define NUM_OF_KEYWORDS 18''." (example taken from the darcs manual, because I'm not going to come up with a better example than that).

Antti-Juhani Kaijanaho: Local is global

The world has many wonders. Therefore, to read a newspiece of a man who had his thumbs surgically altered to suit the iPhone better is to think, this guy is crazy. But the story in itself is plausible. Generally, stories published in a straight news category are intended to be taken seriously. There is one exception: any story published on the 1st of April may be a jest, and everybody knows it. But it is not enough, generally, that people know that the day is a jest day: a serious paper litters the April’s Fool story with blatant clues. For example, a Finnish story last April said that the principals of the story enjoyed their traditional herring in muddy water – referring to the traditional Finnish April’s Fool refrain: “April’s Fool, April’s Fool, eat herring and wash it down with muddy water!” (”Aprillia aprillia, sy silli , juo kuravett p lle!”) Perhaps the original story, published by a community newspaper, contains clues that are visible to the local readers. Perhaps there is something about the locale of the story that tells the locals that this is a false story. Or perhaps the names are ridiculous to native speakers of the American language. Certainly, the paper seems to think that the story contains sufficient clues: Careful reading of the piece makes it clear to any critical consumer of information that the piece is pure humor and not news or reported as fact, the editor claims. The original story is in the “news” category. It is written in a flip style, but then again, many “the world is crazy” style stories are. I have now read the story twice, and I find in it no clue that the story is a hoax (or satire, as the newspaper in question likes to style it). The paper made an error in judgment, that the story would only be read in the community where the story is published. They forgot that we all like to read stories of crazy people who live far away. The editor ridicules us for not noticing the satire, but the real joke is on them: they did not have the balls to acknowledge their mistake. I acknowledge mine. I was fooled. Anybody got some muddy water to spice up the herring I’m having for dinner this evening?

Adrian von Bidder: Why I think (and sometimes say) extremely rude things about Dell.

There was a time that a small-ish (ca. 70 office workplaces) company bought almost all of its IT products from Dell, with 3 year on-site warranty to be on the safe side. There was a time when all was well and, in the rare cases that something needed to be replaced, a gentlemen would arrive and magically fix all that needed fixing. There was also a time, a bit later, when this enterprise wishes it could get rid of all the remaining Dell devices immediately (but of course you don't buy 100-odd desktops, servers and printers just because you no longer like the vendor.) One, if I buy a 4h-reaction-time warranty contract and tell them that I have a problem and that probably a part needs replacing, I don't expect to have to play ticket ping pong for a whole week until they agree that there even is a problem. Two, if there is a problem with a range of computers (leaking condensers) and more than half of our workstations are affected, I'd expect Dell to care about this and be at least ready to discuss mass-replacing the faulty motherboards in one go instead of having to send a tech every three days for yet another case of this problem. I'd think it's cheaper for them as well.... Three, not that I really care, since it's covered under warranty so I don't pay for it, but if I have two defective computers at the same site I'd expect one tech to fix them both, not two techs to come out (missing each other by 5 min) to fix one computer each. Again, you'd think they'd do the maths on how much these techs cost. Four, wouldn't it be nice if you could buy two laser printers and the toner cartridges would even be the same? HP, for example, manages to use the same toner cartridges for a whole range of printer models. Dell apparently can't do this. (Admittedly, I've only seen it in the case of the 5100cn/5110cn printers, and sometimes there are reasons to change the toner cartridges. But then I'd expect the printer model to be significantly different. Those two printers look exactly the same from outside, and the innards also look identical at first glance, including the toner cartridges, except for some coded plastic pieces ensuring that the cartridges don't match.) Five, wouldn't it be nice if toner cartridges could be bought at your regular office supply store, where we buy every other brand of cartridges? No, of course nobody but Dell themselves sells Dell supplies. Since supplies are not dealt with by IT stuff, this is really annoying. Especially beacuse Dell has repeatedly, for unclear reasons, disabled our login to the Dell online store (and we can't just create a new login as we have special discounts, so our account needs some special handling.) Six, how long is the usual life expectancy of a Laptop battery? For the Inspiron 9300 80Wh and the 53Wh battery, it's apparently 18 months, after which the battery doesn't charge anymore or only holds power for 2 minutes. Dell customer support confirms this is normal behaviour for these batteries and this is not covered under warranty accordingly. What now? Printers: HP. Desktops, Displays and Laptops: Lenovo. Servers: IBM. Network Switches: D-Link. Not sure if these choices are ok, but so far we've had less problems than with Dell. But of course the Dell stuff is older and so more prone to failure, so probably we'll just have to re-evaluate 3 years from now.

13 August 2007

Russell Coker: Ethernet Bonding on Debian Etch

I have previously blogged about Ethernet bonding on Red Hat Enterprise Linux. Now I have a need to do the same thing on Debian Etch - to have multiple Ethernet links for redundancy so that if one breaks the system keeps working. The first thing to do on Debian is to install the package ifenslave-2.6 which provides the utility to manage the bond device. Then create the file /etc/modprobe.d/aliases-bond with the following contents for a network that has 10.0.0.1 as either a reliable host or important router. Note that this will use ARP to ping the router every 2000ms, you could use a lower value for a faster failover or a higher value
alias bond0 bonding
options bond0 mode=1 arp_interval=2000 arp_ip_target=10.0.0.1 If you want to monitor link status then you can use the following options line instead, however I couldn’t test this because the MII link monitoring doesn’t seem to work correctly on my hardware (there are many Ethernet devices that don’t work well in this regard):
options bond0 mode=0 miimon=100 Then edit the file /etc/network/interfaces and inset something like the following (as a replacement for the configuration of eth0 that you might currently be using). Note that XX:XX:XX:XX:XX:XX must be replaced by the hardware address of one of the interfaces that are being bonded or by a locally administered address (see this Wikipedia page for details). If you don’t specify the Ethernet address then it will default to the address of the first interface that is enslaved. This might not sound like a problem, however if the machine boots and a hardware failure is experienced which makes the primary Ethernet device not visible to the OS (IE the PCI card is dead but not killing the machine) then the hardware address of the bond would change, this might cause problems with other parts of your network infrastructure.
auto bond0
iface bond0 inet static
pre-up modprobe bond0
hwaddress ether XX:XX:XX:XX:XX:XX
address 10.0.0.199
netmask 255.255.255.0
gateway 10.0.0.1
up ifenslave bond0 eth0 eth1
down ifenslave -d bond0 eth0 eth1 There is some special support for bonding in the Debian ifup and ifdown utilities. The following will give the same result as the above in /etc/network/interfaces:
auto bond0
iface bond0 inet static
pre-up modprobe bond0
hwaddress ether 00:02:55:E1:36:32
address 10.0.0.199
netmask 255.255.255.0
gateway 10.0.0.1
slaves eth0 eth1 The special file /proc/net/bonding/bond0 can be used to view the current configuration of the bond0 device. In theory it should be possible to use bonding on a workstation with DHCP, but in my brief attempts I have not got it working - any comments from people who have this working would be appreciated. The first pre-requisite of doing so is to use either MII monitoring or broadcast (mode 3), I experimented with using options bond0 mode=3 in /etc/modprobe.d/aliases-bond but found that it took too long to get the bond working and dhclient timed out. Thanks for the howtoforge.com article and the linuxhorizon.ro article that helped me discover some aspects of this. Update: Thanks to Guus Sliepen on the debian-devel mailing list for giving an example of the slaves directive as part of an example of bridging and bonding in response to this question.

Russell Coker: Ethernet Bonding on Debian Etch

I have previously blogged about Ethernet bonding on Red Hat Enterprise Linux. Now I have a need to do the same thing on Debian Etch - to have multiple Ethernet links for redundancy so that if one breaks the system keeps working. The first thing to do on Debian is to install the package ifenslave-2.6 which provides the utility to manage the bond device. Then create the file /etc/modprobe.d/aliases-bond with the following contents for a network that has 10.0.0.1 as either a reliable host or important router. Note that this will use ARP to ping the router every 2000ms, you could use a lower value for a faster failover or a higher value
alias bond0 bonding
options bond0 mode=1 arp_interval=2000 arp_ip_target=10.0.0.1 If you want to monitor link status then you can use the following options line instead, however I couldn’t test this because the MII link monitoring doesn’t seem to work correctly on my hardware (there are many Ethernet devices that don’t work well in this regard):
options bond0 mode=0 miimon=100 Then edit the file /etc/network/interfaces and inset something like the following (as a replacement for the configuration of eth0 that you might currently be using). Note that XX:XX:XX:XX:XX:XX must be replaced by the hardware address of one of the interfaces that are being bonded or by a locally administered address (see this Wikipedia page for details). If you don’t specify the Ethernet address then it will default to the address of the first interface that is enslaved. This might not sound like a problem, however if the machine boots and a hardware failure is experienced which makes the primary Ethernet device not visible to the OS (IE the PCI card is dead but not killing the machine) then the hardware address of the bond would change, this might cause problems with other parts of your network infrastructure.
auto bond0
iface bond0 inet static
pre-up modprobe bond0
hwaddress ether XX:XX:XX:XX:XX:XX
address 10.0.0.199
netmask 255.255.255.0
gateway 10.0.0.1
up ifenslave bond0 eth0 eth1
down ifenslave -d bond0 eth0 eth1 There is some special support for bonding in the Debian ifup and ifdown utilities. The following will give the same result as the above in /etc/network/interfaces:
auto bond0
iface bond0 inet static
pre-up modprobe bond0
hwaddress ether 00:02:55:E1:36:32
address 10.0.0.199
netmask 255.255.255.0
gateway 10.0.0.1
slaves eth0 eth1 The special file /proc/net/bonding/bond0 can be used to view the current configuration of the bond0 device. In theory it should be possible to use bonding on a workstation with DHCP, but in my brief attempts I have not got it working - any comments from people who have this working would be appreciated. The first pre-requisite of doing so is to use either MII monitoring or broadcast (mode 3), I experimented with using options bond0 mode=3 in /etc/modprobe.d/aliases-bond but found that it took too long to get the bond working and dhclient timed out. Thanks for the howtoforge.com article and the linuxhorizon.ro article that helped me discover some aspects of this. Update: Thanks to Guus Sliepen on the debian-devel mailing list for giving an example of the slaves directive as part of an example of bridging and bonding in response to this question.

Michael Janssen: Don't you (dun dun dun da dun dun) forget about me

Recently I've been using Remember the Milk to remind me to do stuff. In the past I had used the service briefly on my search for an online GTD tool. I discarded it because it was too hard then to add new lists, which I had planned to use for each project. I also was turned off by it because I wasn't keen on requiring the Internet to work.

A couple of events has recently made this decision change. The first thing that happened was my addition of messaging to my cell phone plan. I did it mainly to interact with Twitter while I was on the road. It's something I never saw myself using before, but now that I am, it is really nifty and I can see why people use it from their phones.

However, with their recent introduction of a Twitter bot, it is now much more useful. The bot lets me add things to my Inbox list from anywhere, unchaining me from the Internet. All I have to do is text 'd rtm whatever' to twitter and it automatically adds a item to my inbox, which is where I keep everything I need to do. I have it setup as a template in my phone, so that I can even avoid typing the 'd rtm ' part. Remember The Milk also has notification settings for phones, so at the beginning of the day it will message me with the things due that day. Having it turned on reminds me to do most things, because I check my phone quite often, even though I don't get any calls.

I've stopped trying to use the lists for separate projects. I now use the Inbox as a main list, not caring how long it gets. I also have separate lists for categories of things that I'd like to do, but I don't care what order or when they get done. For example, I have a list for the pizza places that Diana and I might go to on our pizza place tour of the cities. I also have a list of cheaper and more expensive restaurants that we haven't been to, so when we want to go out to eat somewhere but can't decide where, we can just grab one off of the list. Remember the milk is particularly decent for lists like the two described because you can associate a geographical location with any element on a list, so I can see where the restaurants are instead of having to look them up.

There is one special list that I keep which isn't of the two types above - the projects list. This is the list of projects that I have committed myself to. It has one entry for each project, with a note on each entry explaining the past-tense result of the project. It is used in my weekly review, in order to populate the list if I have for some reason marked off a part of the project and not added a task for the next action in the project. I find that it keeps me honest because I can't mark off something from here until the past-tense description has actually come true.

Generally my workflow now goes like this. I add the task to my Inbox list either from the road or from the web interface. Then it gets moved to a special list if it is of a special class like the "Eating out" or "Pizza Places" lists. If it has more than three or four steps, I will put it on the project list instead and create a new task on the Inbox list that is doable and is the logical next action for the list. When I do something, it gets crossed off the list and then I go on to the next item. I know that if I don't have anything left to do on that day in remember the milk, I can just do random stuff from farther down on the list without a due date.

I've been doing this for a couple weeks now and its working out just fine. I was happy to have everything work out together so that I could use Twitter and Remember the milk, and I am being more productive than any other system that I've tried. This may just be an example of Using What Works. I thought I would share just in case it can help someone else find their workflow to get things done.

Comments: (1) Trackbacks: (0)

Comments
  1. ewtikins: Thank you for this! I will definitely look into it. I have been trying to figure out a way to use online list-making and todo-list facilities without being unable to edit when I'm away from internet for a while, and this sounds like it might just do the trick.
Trackbacks
  1. No Trackbacks

Pete Nuttall: Sorry to be an arse

Steve Kemp recently blogged about wanting a blog compiler that would convert a dir full of text files into a collection of RSS feeds, HTML pages, and any other format under the sun. I use Pyblosxom, which does something similar. Its a clone of a perl based system, bosxom. I don't know if either of these support the full feature set that Steve is looking for, but I do know I haven't plumbed the full depths of what is possible. For example, for the debconf blog, Ganneff had a system where people committed posts as text to svn, which had a commit hook to generate the actual html, rss and atom. That had key-value based metadata, which may have included tagging support.

Uwe Hermann: Linux on the Fujitsu Siemens Lifebook S-4572 Subnotebook

I recently bought a Fujitsu-Siemens LIFEBOOK S-4572 (sub)notebook on eBay for less than 150 Euros, a really great little machine. It's a Pentium III, 750 MHz, 256 MB RAM (the chipset cannot handle more than that unfortunately), 12.1" screen, ethernet, 2x USB 1.1, CD-ROM/DVD reader + CD-ROM writer, PCMCIA, IrDA, modem, and a 15 GB hard drive. No floppy, no serial ports, no parallel port. There's no wireless builtin, but I use a cheapo PCMCIA adapter. The greatest feature compared to all other laptops I previously owned is that the battery life is really great, it lasts almost 3 hours (compare that to 45 minutes on my current "main" laptop). I'm running Debian unstable on the box (of course). Here's the Linux support status as far as I have tested things: Networking Works out of the box using the e100 driver. Sound Works out of the box using the snd_intel8x0 driver. X11 Works out of the box, using either the vesa or the ati driver (at a max. resolution of 1024x768). Touchpad Works out of the box. Using the Option "SHMConfig" "on" line in /etc/X11/xorg.conf's InputDevice section (using the synaptics driver) also works fine and allows you to scroll using the touchpad, e.g. in a browser. More info in the SynapticsTouchpad page on the Debian wiki. CDROM, DVD Reading CD-ROMs and DVDs as well as burning CD-ROMs works fine. I don't think the drive is capable of writing DVDs. External VGA Displaying the screen contents on an external VGA monitor (or beamer) works just fine, switching is done using Fn+F10. PCMCIA Works fine, tested using the Sitecom WL-112 wireless card. The driver installation for that is straight-forward, too:
$ apt-get install rt2500-source
$ m-a a-i rt2500-source
$ dpkg -i /usr/src/rt2500*deb
Special keys All the Fn-keys work fine (brightness, volume, etc.). There are five other special keys (for starting a browser or something) which I haven't tested, but I don't really care... USB Works fine, but it's only USB 1.1, so some higher-speed devices will not work (DVB-T USB devices for example; PCMCIA DVB-T adapters might work). IrDA, Modem Untested, I don't care. Powersaving, Suspend to RAM It seems this CPU (Pentium III, Coppermine) doesn't support frequency scaling, so cpufreq-set doesn't work. I'm using laptop-mode-tools to improve battery life a bit more, though. Also, Suspend-to-RAM works fine out of the box:
$ apt-get install hibernate
$ hibernate-ram
I haven't tested Suspend-to-Disk yet, but I'm not sure it'll work anyway, as I'm using a dm-crypt'ed disk (+ LVM), as with all my boxes. lspci
00:00.0 Host bridge [0600]: Intel Corporation 82440MX Host Bridge [8086:7194] (rev 01)
00:00.1 Multimedia audio controller [0401]: Intel Corporation 82440MX AC'97 Audio Controller [8086:7195]
00:00.2 Modem [0703]: Intel Corporation 82440MX AC'97 Modem Controller [8086:7196]
00:07.0 Bridge [0680]: Intel Corporation 82440MX ISA Bridge [8086:7198] (rev 01)
00:07.1 IDE interface [0101]: Intel Corporation 82440MX EIDE Controller [8086:7199]
00:07.2 USB Controller [0c03]: Intel Corporation 82440MX USB Universal Host Controller [8086:719a]
00:07.3 Bridge [0680]: Intel Corporation 82440MX Power Management Controller [8086:719b]
00:12.0 Ethernet controller [0200]: Intel Corporation 82557/8/9 [Ethernet Pro 100] [8086:1229] (rev 09)
00:13.0 CardBus bridge [0607]: O2 Micro, Inc. OZ6933/711E1 CardBus/SmartCardBus Controller [1217:6933] (rev 02)
00:13.1 CardBus bridge [0607]: O2 Micro, Inc. OZ6933/711E1 CardBus/SmartCardBus Controller [1217:6933] (rev 02)
00:14.0 VGA compatible controller [0300]: ATI Technologies Inc Rage Mobility P/M [1002:4c52] (rev 64)
01:00.0 Network controller [0280]: RaLink RT2500 802.11g Cardbus/mini-PCI [1814:0201] (rev 01)
Other resources I'm really considering making this my "main" box even though it's a bit older/slower, as my current laptop with 45 minutes battery life is a major pain when travelling...

12 August 2007

Bernhard R. Link: Using Xephyr

When debugging window managers or testing your X applications in other window managers, running them in an dedicated fake X server can be quite nice. While every reasonable complete window manager (even the old twm and vtwm can, and of course all of fvwm, qvwm, wmaker, ratpoison, ...) can replace itself with any other, running a window manager in a window of its own makes many things easier: single-stepping a window manager within a debugger when that debugger runs in an Xterm on the same server is no fun. And if some testing needs a more complicated setting, switching may destroy that. And it is just more comfortable to have the editor handled by your favorite WM, while you need another WM to test some aspects of an program. (It&aposs hard to see if inital sizes and layouts work well, when your WM does allow windows to choose their size. And if your WM does not have a bug another has, it&aposs easier to test a work around in the other than trying to port the bug ;-> )

So, here is some example invocation I use:
     #!/bin/sh
     Xephyr :2 -reset -terminate -screen 580x724 -nolisten tcp -xkbmap ../../../../../home/brl/.mystuff/dekeymap -auth ~/.Xauthority &
     export DISPLAY=:2
     icewm
     


Which Options are useful depends on what to use it for:

-reset -terminate means to terminate when the last child exited. This is usefull if you want it go away fast. Not usefull if you want to switch window managers without other clients running.

-screen 580x724 tells how big the window should be. This is just the size of one of my working frames, so it integrates well into my workspace. (It would be nice if Xephyr could change its resolution uppon resize of the window, though i fear programs will either be confused when the size of their X server changes unadvertised or because of too many advertisements of its changing).

-nolisten tcp as there i no need to let the world speak to your X server

-xkbmap ../../../../../home/brl/.mystuff/dekeymap I gave up figuring out how to select a German keyboard, so it justs gets 8 lines of fake description only specifing German keyboard.

-auth ~/.Xauthority tells Xephyr to require authentication. Without this everyone is allowed to control your sub X-server and all programs within it. Don&apost forget to create an token before with xauth add, though.

Joey Hess: haskell

I saw the old house on Haskell St. last week for the first time in forver. I could barely pick it out of the other houses on the block, it's so different now. I also, conincidentially, studied the haskell programming language a bit. I watched some talks that John Goerzen linked to, and I read several chapters of the "Gentle Introduction to Haskell". Which wasn't all that gentle. :-) I should have put off reading it until after the talks and after reading some other introductory examples. At least I have some motivation to learn haskell. I could never see any reason to bother learning python or ruby, since there's so few compelling differences between them and perl. I had begun to worry that I wasn't learning any new programming languages, so it's nice to have a new dot on this graph of languages I've learned since 1990: graph

Next.

Previous.