Planet Larry

May 06, 2008

Brian Carper

FAT

I had to undelete someone's files from a FAT partition today. My first thought was to use good ol' Windows to do so, given that Windows is the unholy ground which spawned FAT to begin with. I remember there used to be an UNDELETE command of some sort in some old version of DOS. But this doesn't seem to exist in XP any longer.

There are however lots and lots of third-party "shareware" programs which can do this kind of thing, as Google reveals. There is in fact an overwhelming number of such shareware programs. Most of these programs are total crap and cost around $30. One program required me to burn a CD and reboot my computer from the CD before I could run it. Many of the programs "intelligently" scan a partition looking for chunks of things that look like JPEGS or WMVs. I tried a few "demos" before I gave up, not having an hour to waste finding the one program that would work. Thus bringing the current score to Windows: 948, Brian: 0.

Instead I brought the drive home and plugged it into Gentoo and used this post as a guide. I dd'ed the partition to a file, fscked around with it a bit, mounted it via loopback, and had my files back. Took 10 minutes, and worked as expected. And it didn't cost me $30.

The moral of this story: I need to burn a Knoppix disk to take to work with me.

My only quibble is that I can never ever remember what Gentoo package contains fsck.vfat. Note to self, it's dosfstools. I can never think of the search terms even to locate that package. I had to google it.

May 06, 2008 01:13 AM :: Pennsylvania, USA  

Westinghouse: FAIL

My ninth call to Westinghouse today, about my Westinghouse L2410NM 24" LCD monitor which I RMA'ed back in March, revealed that they did in fact shipmy monitor, supposedly to my house, on April 4th or so. A UPS tracking number confirms it. There are are a few things wrong with this.

  1. In spite of the fact that I asked for a phone call to be updated on the status of my monitor whenever it was shipped, I received no such phone call.
  2. During the four phone calls (or was it five?) I made to Westinghouse in April, AFTER my monitor was supposedly shipped to my house, no one at the company had any record that it shipped. I was told that by multiple representatives over the past four weeks that my monitor was "in processing".
  3. I asked for my monitor to be shipped to workplace, not my house. My nice, safe, cozy workplace with human beings who can sign for large expensive packages. Not my empty house in a neighborhood full of drug addicts, in the property theft capital of the west. In addition to telling the phone representative this, I actually taped a 8.5 x 11 inch sheet of paper directly to the monitor itself (as well as the outside of the box) specifying SHIP TO: and my work address. Even such drastic measures were not enough to catch the attention of whatever magical monitor-repair fairies work at Westinghouse, apparently. Perhaps I should've carved that information directly into the monitor screen.
  4. I could possibly overlook the above, except that, as you may have surmised, at the present time, I do not, in fact, have my monitor.

After calling up UPS to ask why their driver left a $450 computer monitor, in a shiny bright blue and white box with pictures of a computer monitor all over it, sitting on my front porch while I was at work without getting my signature, I placed call number ten (yes, I've finally hit double digits!) to Westinghouse, and managed to escalate my issue to the Westinghouse corporate office. Supposedly in 7-10 business days they will send me a brand new monitor.

Oh how I wish I had any confidence that I'm ever going to see that monitor.

In the meantime, this guy was on sale at the local store, so I bought one. Time will tell whether LG brand is any better than Westinghouse. This time, I also bought the extended warranty, having learned my lesson that it can, indeed, be worth an extra $60 to save myself some pain and aggravation later. I'm also going to think twice about buying things like this over the internet in the future. There is something to be said about being able to drive 10 minutes down the road to have your property serviced or replaced by real-life human beings, rather than paying to have things shipped around the world for a month.

May 06, 2008 01:00 AM :: Pennsylvania, USA  

May 05, 2008

Dirk R. Gently

Have fingers, will post...

Hello blogosphere! Dirk has bumped into a mild setback as beasty laptop seems to have failed on him. Actually the laptop is perfectly fine but the network (both ethernet and wifi) have complete gone. Currently obligations hold me liable, obscuring a new beasty, so I reach out to the net so see if any [...]

May 05, 2008 10:15 PM :: WI, USA  

Steve Dibb

planet larry policy update

I’ve made a difficult decision that I hope doesn’t make anyone feel too bad: effective immediately I’ve removed any feeds from Planet Larry / Larry the Universe that were from developers who have retired from the Gentoo project.

I feel like ex-developers carry a lot of weight with their posts and opinions, and I created the planet feeds mainly for users, by users (speaking of which, don’t be shy, and sign up).

That’s all for now.

May 05, 2008 08:41 PM :: Utah, USA  

Jürgen Geuter

Unholy

Unholy is a project that can compile ruby scripts to python bytecode and actually turn it into python source from the bytecode later.

It's a fun idea that would finally make ruby useful ;-)

Neat little project, of course not all that useful: Python's interpreter is a lot faster that ruby's but Sun is throwing so much money a JRuby and the likes that not using the Java VM with ruby sounds rather dumb. On the other hand having Java stuff always sucks so I can understand the creator ;-)

Well, it's basically one of those projects I love: Kinda pointless but still a lot of fun.

May 05, 2008 08:35 PM :: Germany  

Intellectual property is not oil

You might not know who Mark Getty is, but you probably have heard one of his more famous quotes:
"Intellectual Property is the oil of the 21st century"


Just to save you some time reading Wikipedia and getting distracted from this post (it would be interesting to see how many people leave a blog post they are reading to check a random Wikipedia link and never come back ;-) ), Mark Getty is a member of a rich family that made its money from oil, he owns Getty Images, a commercial archive of images of various kinds.

Considering that history, his comparison is not surprising and it feels kinda right: Everyone and their mom has heard how important intellectual property is and the way that certain sectors of the content industry fight for their monopolies or at least market does somewhat compare to the oil business. Let's have a look whether the comparison of intellectual property and oil is a suitable one.

Disclaimer: Just for the sake of the argument we assume here that a thing as "intellectual property" exists. Personally I think that that concept is flawed and does not really work but that would be another blog post (if interested, I might write that one later). So, to summarize: "Intellectual property" exists for the duration of this article. So back to the argument.

Mr Getty's quote obviously hints at the importance that "intellectual property" will gain in the next few years, an importance that he thinks is comparable to the importance of oil nowadays.

Oil fuels our western economies, it allows us to drive cars, to have cheap transportation, to create various plastic crap. Oil is everywhere and we feel how important it is every day since the price of oil is raising every day. The importance of oil is only surpassed by its scarcity: There's only so much oil on this planet, it takes really long to get new oil and more and more people and other entities need oil. The reserves are running low and that process is speeding up. How does that compare to information.

"Intellectual property" is basically just the right to some piece of information, the right to say what happens with that information, who may do what with it.

Information is not what we'd call "scarce", actually we often hear people claiming that there is information overload, that people have the feeling of being bombarded with too much information. But maybe he's not really talking about information in general but about structured information: Searching Google Image search for a random word gives you buttloads of results, but are they good? Are they structured and reviewed? No. You have to find out about the license, about the quality all by yourself. So is structured information like oil? Or is the structure itself the oil?

The amount of structured information is conceivably lower than the amount of information in general but there is one, if not the most significant difference: If more people use the unstructured information we actually create more order, it might be by offering the users a way to tag and structure content or by them just putting images in more contexts (which makes it easier for automated classifications [and that is basically what a search engine does]). So in contrast to oil that gets less faster the more people use it, information actually gets better by more people using it. As do the structure that that information is embedded in. It's a resource that gets better and more plenty the more people participate. And that is why his comparison (whether he meant structured or all information) is wrong.

Information is not the oil of the 21st century.

Mr Getty is stuck in the old thought or property, where a resource that's scarce is getting more and more valuable, especially when it is important for society. But information (and therefore intellectual property) is fundamentally different: It's cheap and easy to produce, it's subjective (you cannot just put a meter in it and say whether the quality is high or not), it's getting better and richer, the more it is used and the more people participate (which in Mr. Getty's world would mean competition).

The only way to make intellectual property the oil of the 21st century is the way of the Apples, the MPAA and the RIAAs: Restrict people from participating in culture, in the creation of information. Restrict your right to say what you think, to modify and enrich culture. Block you from entering the content creation world cause you'd just create more of that precious "oil", maybe even give it away for free.

As long as there are Creative Commons, Copyleft and other free subcommunities creating content and information, it will never be new "oil". So whenever someone wants it be be like oil, you know what that person is fighting for and against: Your rights, your rights to say and think and create.

Intellectual property and information was no oil, is not oil and must never be.

May 05, 2008 07:36 PM :: Germany  

Py2exe and (Py)GTK

Just as a hint to save you the pain: Never assume that a normally installed Windows GTK works, it might cough up errors left and right with your Python and (Py)GTK that you have no clue how to debug. Rely on the hint given here and package your version of GTK (by copying the etc, share, bin and lib into your dist folder. You really save buttloads of time tracing bugs that you did not create and that waste your time.

GTK might be ABI stable, but the Windows Version is really weird sometimes.

May 05, 2008 07:15 PM :: Germany  

Brian Carper

Hello again, world

Computers are a love/hate thing for me. I love all things digital, but I desperately need to get away from it sometimes too. So I had a nice vacation away from my computer last week. I couldn't keep myself from reading some mailing lists and hitting Slashdot once a day, but I didn't write a single line of code and didn't give my websites or work projects or anything much thought.

But now my vacation is over, and it's so easy to fall back into old habits, endlessly looking at webcomics and reading articles about Common Lisp unit testing suites and cringing at the latest drama amongst Gentoo devs and minding my message board like a crusty old beat cop making his rounds. It's the life I've chosen, and I do like it, but I do like getting away sometimes too.

I fulfilled one of my dreams last week when I finally caved and ordered a solid glass mousepad. They're pretty cheap on newegg.com, depending on the color you want. I happened to want green, and it happened to be the cheapest, so all is well. It looks very nice, and it's big and hopefully the surface won't degrade over time; I tend to eat through mousepads via a slow yet inexorable process of erosion.

Unfortunately my laser mouse doesn't work on it. However, I have learned that if I upgrade my mouse's firmware, it will magically be able to work on a solid glass mousepad. Who would've thought my mouse had updateable firmware, let alone that updating the firmware would allow it to work on new surfaces? Not I.

The bad thing is that I need freaking Windows XP to upgrade the firmware on my mouse. I don't have any computer that has XP on it and I'm afraid to try anything in a virtual machine that involves something as dangerous as fiddling with the innards of connected peripherals. So I tried to install XP on my laptop, desperate times calling for desperate measures. But of course the install failed because my XP install CD is so old (pre-SP1, received free from my college 7 years ago) that it didn't recognize most of my hardware. In fact, the XP install CD blue-screened, which set a new record for how low Windows could sink in my opinion.

So I tried slipstreaming SP2 into my install CD. But it failed because, get this, the filenames of some drivers on the CD, namely usbehci.sys, ended up in lower case rather than uppercase and the CD's install program couldn't locate them. I kid you not. Since when is anything in Windows case-sensitive? Is it running Linux? I had to burn another CD after renaming all the files into uppercase. Then the CD worked, but it couldn't find my hard drive, probably due to missing SATA drivers. At that point I gave up, and plan to take my mouse to work tomorrow to upgrade the firmware on a work machine that has XP on it.

And so the score up to this point in my life is Windows: 947, Brian: 0. Windows remains undefeated.

Thanks go out to Logitech for not letting me use Vista (or, say, LINUX) to upgrade my mouse's firmware, and of course to Microsoft, for yet another gloriously broken and frustrating computing experience.

May 05, 2008 04:04 AM :: Pennsylvania, USA  

Clete Blackwell

Google SketchUp

Google’s SketchUp is an incredibly easy-to-use architectural and 3D-modeling tool. The Computer Science Club here at Mansfield has been talking about modeling the university for a 3D perspective in Google Earth, similar to what Google Earth provides for New York City and other metropolitan areas. Recently, I have been experimenting with SketchUp. A free version is available from the website and a professional version can be purchased for about $500. People enrolled in Universities can obtain the professional licenses for $50 a year. The $50 counts towards purchasing a full license, so after 10 years, it’s yours forever. Or, you can pay for the educational license for 3 years and pay the rest of the money up front.

At a first glance, SketchUp seems to be too simple to be worth anything. Upon further investigation, the simplicity seems to come from Google’s innovational perspective. Google has outdone themselves with SketchUp. It is amazingly easy to pick up and create simple objects. More complicated objects can be created with some practice. I have spent about an hour and a half working with the program. First, I watched the beginning tutorials. Then, I went straight into making objects and refining them. It’s amazingly simple. Just make a shape, pull it up to give it depth, draw other objects on it, and manipulate them. It’s amazingly simple.

In about twenty minutes, I was able to make the desk that I use here at school. Keep in mind that it isn’t 100% perfect, nor is it 100% to scale. I have never seen a program this simple. With an hour and a half of experience, I was easily able to make this (click to enlarge):

Here is the front of it:

From an angle:

From the side (notice the arches in the drawers):

And here it is next to a person:

May 05, 2008 03:39 AM

May 04, 2008

Martin Matusiak

OLPC about to self destruct?

I consider OLPC to be one of the most exciting initiatives of the last few years. When the idea was first circulated it was such an exciting call to arms to do something about the lack of education in poor regions of the world. And the project has produced what appears to be a pretty incredible product, the research of which is now recycled back into the general hardware industry, so it has brought advances that wouldn’t otherwise have happened (now).

I recall pondering the real purpose of the project, asking what is going to be achieved with these laptops. The OLPC project had a very good answer to this. They said the laptops will promote learning in areas where school books are a luxury. Furthermore, the laptop itself is completely tweakable, you press a special key and the source code of the current program pops up. This will promote learning through tweaking and experimentation, so that eventually an industry can be built on these foundations, in regions where little industry exists today and where perhaps the potential for one (in terms of natural resources) is bleak. A beautiful dream, one that could change the world in big ways.

Now Negroponte has changed his tune. Visionary that he is, he failed to convince the clients of the value of free software. So now he’s humming “forget open source, it’s all about the kids!” while preparing to run Windows on the laptop. There is a new smoke screen being constructed:

Negroponte says that the organization is working to ensure that Sugar can run smoothly on Windows.

Riiiight, running Sugar on Windows. Tell me, what exactly is the value of running Windows with an all free software stack? It’s completely useless, that’s what. The whole value of Windows is as a platform, not merely as an operating system. People buy Windows to run Windows applications, not for Windows itself. Or are we actually buying that Egyptian officials are eager to purchase Windows licenses in order to run the free software suite?

Congratulations, Negroponte, you’ve just become a licensed Windows vendor. The kids will no doubt have fun clicking on the Start menu and playing Solitaire. There is a great deal to learn from that, just nothing about the operating system or the applications, you know, actual learning.

OLPC in its original form was about empowering the users, with Windows that capability is entirely destroyed. The fact you cannot mix learning with trade secrets should be blindly obvious to anyone. Open souce is important, but it’s especially important when you want people to learn something.

Furthermore, learning doesn’t happen in isolation. It’s accelerated when it happens in a community of ideas and impulses that flow freely. Resigning OLPC president gets it when he says:

“What comes part and parcel with open source is a culture, and it’s the culture that I’m interested in,” he says. “It’s a culture of expression and critique, sharing, collaboration, appropriation.” And this culture can and should spill into classrooms, he says.

May 04, 2008 09:08 PM :: Utrecht, Netherlands  

Jan Tönjes

bash-Befehle

Mal eben zum festhalten:

Einfache Schleife
for i in `ls` ; do echo $i ; done

In Dateien suchen und ersetzen
cat filename | sed ’s/suchen/ersetzen/g’ > filename-new

Dateien umbenennen und hinten etwas wegnehmen
mv $i ${i%-new}

May 04, 2008 06:57 PM :: Lower Saxony, Germany  

Alex Bogak

Running tests on Windows.

Hi all

I need a free tool for testing a GUI application. Something in lines with Mercury's WinRunner.
Does anyone knows something like that?

Thanks

May 04, 2008 01:49 PM :: Israel  

May 03, 2008

Andreas Aronsson

Doubleclick links in terminal

For a very long while now, several years actually, I've been a bit annoyed by the behaviour of terminals under X when you doubleclick links. What the UI considers a word is selected. Selection 'starts' at the point that is doubleclicked and 'spreads' in each direction, stopping at a char it considers to be a word delimiter. A space is probably always considered a delimiter. Sometimes a '?' too, and often ',' as well. This has been very annoying for me as I spend quite alot of time in irc (irssi in a screen, its lovely in combination with bitlbee; icq, irc etcetc in the same screen.) and every now and then someone pastes an url which I want to doubleclick and then paste into my browser. Now the selection stops prematurely as it's not uncommon for a hyperlink to contain one of the characters that is in the word delimiter list. I've thought of this as a limitation to the system I use and, although annoyed, never gave it much thought. Maybe I've been to susceptible to propagandaists telling me gnu/linux is user-unfriendly.

A couple of weeks ago I started to think a little about it and the solution is rather simple. I use Eterm more or less exclusively.

In ~/.Eterm/user.cfg I've put this:

<eterm-0.9>
begin misc
cut_chars "\t\\\`\\\"\'() *,;<>[]{|}"
end misc

This might not be perfect but it's certainly served it's purpose this far as I have been able to doubleclick on the links and then middleclick in the address field (or open a new tab) in the browser. My OS is even better =)

May 03, 2008 01:06 PM :: Sweden

Michael Klier

What The Frack, Truecrypt?

Yesterday I've bought myself a new 250GB USB bus powered external hard-disk for my NSLU2. It replaces my bigger 3,5” which lives in a case and requires a separate AC adapter. I hope to safe some energy with this and get rid of the noise the bigger one made during the night.

Because the main purpose of the disk is to keep my backups and my digital audio library I went on to encrypt the disk using truecrypt, just like I did for the one before. I've never used truecrypt for anything else than mounting my old HD on my NSLU2 on which I run a self compiled 4.1 version of the software (at the time I encrypted my old disk there was no truecrypt package for the Debian arm port), so I never experienced the changes they'd made in the 5.1 version.

What should I say, IMHO the new version is a nightmare in terms of usability. It has a new Tcl/Tk GUI which should ease the management of encrypted devices. That might be the case for the Windows port but on Linux it results in just the opposite, especially on a headless machine.

If you want to use the text mode interface you have to explicitly force it on the command line by adding the -t option. Creating new encrypted devices also requires -t, if you omit it you'll get an error :-S. C'mon that really sounds like bad programming to me. The former cli interface of truecrypt was perfect IMO. I really don't know what has caused them to change it so dramatically. OK, there's a trick by putting an alias into your $shellrc to save you from future surprises and the ugly help window.

alias truecrypt='truecrypt -t'

Anyway, assuming that every user wants to use the crappy GUI by default is just plain wrong. Another example, in the old version you could mount the encrypted device without mounting its filesystem, for example if you wanted to format it with a different filesystem than FAT32 by omitting the destination mount point.

% truecrypt /dev/sdb1
Enter passwort:
% ls -1 /dev/mapper/
/dev/mapper/truecrypt0
% mkfs.ext3 /dev/mapper/truecrypt0

The new version isn't as clever. You have to omit the destination mount point and tell truecrypt not to mount it, or in other words tell it not to ask for a destination mount point because you didn't give one. Did they think: OK most users are not that smart, if they forget to provide a destination mount point we just keep asking them until we get one. Oh, and those who know what they do - well - lets add another cli switch so they can tell us that they really don't want to really mount the volume? The question about the missing destination mount point is not the only one. You're also asked for an optional key file and whether or not you like to protect the hidden volume.

To get the same effect as the above example you now have to use this easy to remember combination:

% truecrypt -t --keyfiles="" --protect-hidden=no --filesystem=none /dev/sdb1

As a side note: Since truecrypt uses FUSE now the devices don't appear in /dev/mapper anymore. You can use the following to list them.

% truecrypt -t -l
1: /dev/sdb1 /dev/loop0 - 
% mkfs.ext3 /dev/loop0

But the story doesn't end here, truecrypt now ships with another nifty gimmick.

I also wanted to create a hidden volume on the new hard-disk, the possibility to have hidden containers is what IMHO makes truecrypt a good choice for encryption. I know there are some controversial opinions on this matter, but anyway, check this out:

% truecrypt -t -c /dev/sdb1 
Volume type:
 1) Normal
 2) Hidden
Select [1]: 2
Error: The selected feature is currently not supported on your platform.

Erm what? I mean WHAT!? Are they kidding me? This worked versions ago. Although I bet this has something to do with the switch to FUSE, it seems that they decided to get the new fancy GUI version out in time (along with the added support for bootable encrypted devices on Windows) but also decided to ship the yet obviously unfinished rewrite of the Linux version.

I am sorry, but this just sucks!

Read or add comments to this article

May 03, 2008 12:13 PM :: Germany  

Muhammad Najmi Ahmad Zabidi

Random Heart

Graduate School Information Request


Your request for information has been processed.

Thank you for your interest in the University of Massachusetts Amherst.

Applications directed to addresses within the United States are mailed twice weekly with first class postage; allow 10 days for delivery. Applications directed to non-U.S. addresses are mailed weekly and sent air mail; allow at least 3 weeks for receipt. There is no charge for any of these materials.

The following materials will be sent to you here:

Department of Computer Science
KICT, IIUM
Gombak, 53100 MYS

  • CMPSC program materials

May 03, 2008 10:40 AM :: Kuala Lumpur, Malaysia  

Thomas Keller

Windows Media player doesn’t play all files

I have some strange issues recently with my windows media player - it does not play all video files any more (I have no problems on KDE with kmplayer, though). Turns out that this seems to be quite a common error…. The web-help of Microsoft points to this page, and it says something about iD3 tags [...]

May 03, 2008 07:55 AM

Zeth

Email Syntax Check in Python

Sometimes you may want to check that an email address is not syntactically invalid, i.e. it looks like a recognisable email address. I use this approach in my zetact contact form processor.

Of course, it does not mean the address actually leads anywhere, but at least you know are dealing with an email address that could exist.

This is the code I have been using, albeit I have changed it from a class method to a simple function to make this post simpler.

"""Email check using regex."""

def invalidreg(emailkey):
    """Email validation, checks for syntactically invalid email             
    courtesy of Mark Nenadov.                                               
    See http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65215"""
    import re
    emailregex = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3\
})(\\]?)$"
    if len(emailkey) > 7:
        if re.match(emailregex, emailkey) != None:
            return False
        return True
    else:
        return True

I decided it would be more Pythonic to try to do this using the built-in string methods, rather than importing the re module and using a monster regular expression. Here was my first attempt.

"""Email checks using string methods - simple version."""
def invalidemail(emailaddress):
    """Checks for a syntactically invalid email address."""
    try:
        emailitems = emailaddress.rsplit('@', 1)
        emailitems.extend(emailitems[1].rsplit('.', 1))
    except IndexError:
        return True

    if [x for x in emailitems if not x.replace(".","").isalnum()] \
            and emailaddress >= 7:
        return True
    else:
        return False

After a bit of testing and playing with this, a friend pointed me towards the relevant RFC on restrictions of email addresses. While the standard allows the use of many different special characters, in practice email addresses have to be much stricter if you actually want people in the real world to be able to send email to you.

For example, if we allow the email address []@commandline.org.uk, will whatever receives the output of this function be able to use it? As pointed out by Jan Goyvaerts, most software won't actually be able to handle obscure special characters.

We also don't want to water down the syntax check and allow junk for the sake of theoretical but non-existent addresses.

My compromise is to allow these special symbols -_.%+. in the local-part of the email address, and -_. in the domain name. I also do sanity checking on the top-level domain, it needs to be either a generic name or two characters long (country codes are all two letters).

So below is my current version, I added lots of comments and white space to make it easy to read.

"""Ditch nonsense email addresses."""

GENERIC_DOMAINS = "aero", "asia", "biz", "cat", "com", "coop", \
    "edu", "gov", "info", "int", "jobs", "mil", "mobi", "museum", \
    "name", "net", "org", "pro", "tel", "travel"

def invalid(emailaddress, domains = GENERIC_DOMAINS):
    """Checks for a syntactically invalid email address."""

    # Email address must be 7 characters in total. 
    if len(emailaddress) < 7:
        return True # Address too short.

    # Split up email address into parts.
    try:
        localpart, domainname = emailaddress.rsplit('@', 1)
        host, toplevel = domainname.rsplit('.', 1)
    except ValueError:
        return True # Address does not have enough parts. 
    
    # Check for Country code or Generic Domain.
    if len(toplevel) != 2 and toplevel not in domains:
        return True # Not a domain name.
    
    for i in '-_.%+.':
        localpart = localpart.replace(i, "")
    for i in '-_.':
        host = host.replace(i, "")
    
    if localpart.isalnum() and host.isalnum():
        return False # Email address is fine.
    else:
        return True # Email address has funny characters.
    
# Start the ball rolling.
if __name__ == "__main__":
    print invalid("warrior@example.com")

Discuss this post - Leave a comment

May 03, 2008 02:00 AM :: West Midlands, England  

May 02, 2008

Thomas Keller

Installing my new Brother MFC-7820N

I bought a Brother MFC-7820N; although I do not currently intend to use the fax capabilities, the device is good in all aspects, I assume. What especially impressed me is the Linux support Brother gives. The device is not attached to my server - instead, it is directly attached to my network via LAN (it comes [...]

May 02, 2008 06:37 AM

May 01, 2008

Nicolas Trangez

Python ‘all’ odity

[update] Question solved, see bottom of post.

Since Python 2.5 the language got a new built-in method ‘all’ (and it’s nephew ‘any’). I wanted to play around with this a little, combined with generators, so I created a little testcase to test performance.

Here’s the test-case: take a list L of X random numbers in a given range [A, B], and check whether

  • all elements in L are >= A
  • all elements in L are >= (A + Z) where Z is a number in [0, (B - A)]

The first test should always result True, the second test could result to False.

Here’s the output of a test-run:

In [1]: import random, sys

In [2]: a = [random.randint(100, sys.maxint) for i in xrange(2000000)]

In [3]: len(a)
Out[3]: 2000000

In [4]: #Check whether all elements are >= 100 

In [5]: %timeit all(i >= 100 for i in a)
10 loops, best of 3: 515 ms per loop

In [6]: %timeit any(i < 100 for i in a)
10 loops, best of 3: 454 ms per loop

In [7]: def f(l):
   ...:     for i in l:
   ...:         if i < 100:
   ...:             return False
   ...:     return True
   ...: 

In [8]: %timeit f(a)
10 loops, best of 3: 292 ms per loop

In [9]: #Same thing for 100000, since now the list shouldn't be completely iterated

In [10]: %timeit all(i >= 100000 for i in a)
100 loops, best of 3: 4.73 ms per loop

In [11]: %timeit any(i < 100000 for i in a)
100 loops, best of 3: 4.29 ms per loop

In [12]: def g(l):
   ....:     for i in l:
   ....:         if i < 100000:
   ....:             return False
   ....:     return True
   ....: 

In [13]: %timeit g(a)
100 loops, best of 3: 2.82 ms per loop

In [14]: #For reference

In [15]: %timeit False in (i >= 100 for i in a)
10 loops, best of 3: 531 ms per loop

In [16]: %timeit False in (i >= 100000 for i in a)
100 loops, best of 3: 5.03 ms per loop

It’s as if ‘all’, ‘any’ or ‘in’ don’t break/return when a first occurence of False (or True, obviously) is found. Is this the desired behaviour, and if it is, why? The calculation time difference between using all/any/in or a custom-made function (which is, unlike all etc, not written in C) which breaks whenever it can, is pretty astonishing.

[update] Question solved. It’s pretty normal the function-based approach performs better, since it combines what ‘all’ and the generator provided to ‘all’ do, taking away the generator function-call overhead. Damn :-)

May 01, 2008 01:57 PM

Martin Matusiak

renaming sequentially

If you’ve been dealing with files for a while you will have noticed that there is a slight semantic gap between how humans see files and how computers do. If you’ve ever seen a file list like this you know what I mean:

Lecture10.pdf
Lecture11.pdf
Lecture12.pdf
Lecture1.pdf
Lecture2.pdf

Numbering these files was done in good faith, and a user understands what it means, but the computer doesn’t get it. Sorting in dictionary order produces the wrong order as far as the user is concerned. The reason is that the digits in these filenames are not treated and compared as integers, merely as strings. (Actually, . comes before 0 in ASCII, what’s going on here?)

While we’re not expecting our computers to wisen up about this anytime soon, there is the obvious fix:

Lecture01.pdf
Lecture02.pdf

Lecture10.pdf
Lecture11.pdf
Lecture12.pdf

You’ve probably done this by hand once or twice, while cursing.

On the upshot, this is very easy to fix with a few lines of code:

#!/usr/bin/env python
#
# Author: Martin Matusiak <numerodix@gmail.com>
# Licensed under the GNU Public License, version 3.
#
# revision 1 - support multiple digit runs in filenames
 
import os, string, glob, re, sys
 
def renseq():
    if (len(sys.argv) != 2):
        print "Usage:\\t" + sys.argv[0] + " <num_digits>"
    else:
        ren_seq_files(sys.argv[1])
 
 
def ren_seq_files(num_digits):
    files = glob.glob("*")
    for filename in files:
        m = re.search("(.*)(\\..*)", filename)
        ext = ""
        if m: (filename, ext) = m.groups()
 
        digit_runs = re.finditer("([0-9]+)", filename)
        spans = [m.span() for m in digit_runs if digit_runs]
        if spans:
            spans.reverse()
            arr = list(filename)
            for (s, e) in spans:
                arr[s:e] = string.zfill(str( int(filename[s:e]) ), int(num_digits))
            os.rename(filename+ext, "".join(arr)+ext)

 
 
if __name__ == "__main__":
    renseq()

Download this code: renseq.py

This works on all the files in the current directory. Pass an integer to renseq.py and it will change all the numbers in a filename (if there are any) to the same numbers, padded with zeros if they have fewer digits than the amount you want. So on the example

renseq.py 2

will turn the first list into the second list.

If say, there are filenames with numbers of three digits and you pass 2 to renseq.py, the numbers will be preserved (so it’s not a destructive rename), you’ll just revert to your incorrect ordering as it was in the beginning.

renseq.py will rewrite all the numbers in a filename, but not the extension. So mp3 won’t become mp03. ;)

May 01, 2008 01:32 PM :: Utrecht, Netherlands  

Dieter Plaetinck

Windows sucks

I had to fix a problem at my dad's company...
"The network was broken."

It was a NetBEUI network connecting some windows stations - it has been running for years - and now suddenly the nodes couldn't find eachother.
One of the boxes (windows 2000 iirc) had 2 network cards, one for the network, the other not used for anything (not even connected). Disabling the latter - not even touching the former - fixed half of the network.

read more

May 01, 2008 12:22 PM :: Belgium  

Brian S. Stephan

Sender Policy Framework

Someone in #lh today told me about Sender Policy Framework, which sounds like a badly-needed enhancement to the Internet’s email protocols. Basically, the idea is to provide a DNS record that informs MTAs “don’t trust emails claiming to be from this domain unless they’re coming from one of my actual servers".

In DNS, this looks like (in my case):

emptymatter.org. IN TXT "v=spf1 a mx ~all"

Some MTAs support SPF but need to be configured, I believe Gentoo’s postfix is one of them. If I’m going to expect other mail servers to support it, I probably should myself. I’ll have to tackle that another day…

May 01, 2008 12:20 AM :: Wisconsin, USA  

April 30, 2008

Steven Oliver

steveno


Do you remember the last time I posted on here? I don’t LOL.

Regardless, this weekend I am planning a Gentoo install party. Sadly I will be the only one attending but since Paludis 0.26.1 is out I see no reason to delay the return of the King. Naturally I am the aforementioned king. No I’m really not that arrogant. I just play that way on the internet.

Enjoy the Penguins!

April 30, 2008 11:58 PM :: West Virginia, USA  

Christoph Bauer

Microsoft Delays Windows XP Service Pack 3

Since Heise announced that Microsoft will release the Windows XP Service Pack 3 on the 29th, I didn’t sleep too well, as I really want to grab it as soon as possible. Sure, I use Linux, but this doesn’t mean that I am not dangling with windows boxes from time to time and I am fed up applying about 100 patches before I can even think of security.

But I was laughing too soon - as just one day after the 29th (today), I have seen a posting on the Washington Post Blog that Microsoft has delayed the start of the service pack again. In a written statement they say:

“In order to make sure customers have the best possible experience we have decided to delay releasing Windows XP SP3 to Windows Update and Microsoft Download Center.”

In other words, there seems to be no release date yet. Well - in the meantime I’m rolling my own update pack using the Heise Offline Update. Thanks a ton, guys.


Copyright © 2007
Please note that this feed is for private use only. All other usage, including the distribution or reproduction of multiple copies, performance or otherwise use in a public way of the images or text require the authorization of the author.
(digitalfingerprint: 0f46ca51d0fa4e6588e24f0bf2b80fed)

April 30, 2008 06:52 AM :: Vorarlberg, Austria  

Brian S. Stephan

Yet another lazy post

Nothing exciting here. Got my tax refunds. Might build a home-made NAS with a couple terabytes of disk and put it in the basement.

On the DS, I’ve been playing Rondo of Swords and The World Ends With You. Rondo is a pleasant find, a difficult but still reasonable strategy RPG that makes one think and plan ahead, unlike games such as Revenant Wings which are much more “bring a healer and just mob everyone at the thing they’re strong against!” Also, I have a crush on Atlus by this point. There’s no denying it now. I draw their name with little hearts all around when I’m in meetings.

The World Ends With You is refreshingly original, one of those games that, even with it being Square Enix, is a bit surprising that it made it to the States. Very Japanese, and the game makes few concessions to the English audience. Sure, long gone are the times of gratitutous name changes, but even the j-pop/j-rock soundtrack remains intact, and that is, to my slightly jaded mind, a bit commendable. Now, if only the main character didn’t suffer from two vile Square Enix staples: unimaginable thinness and nearly sickening teenage angst. Neku is supposed to get better with the latter; I hope it is soon.

My games to beat are now Etrian Odyssey and Rondo of Swords, one I must beat before Etrian Odyssey II (guess which one) is released here, and the other before the Final Fantasy IV remake reaches the States. I’m excited. If I have time before those, Final Fantasy III and The World Ends With You are my RPGs to beat. FF3 is a cakewalk thus far, but its ease and its crude mechanics compared to Final Fantasy V make it hard to stay with for long.

I didn’t really intend this to become all about video games. I’ve been working on a Gentoo Wiki page for the HP 2133 which has kind of slowed down as most of the parts I’m interested in are supported as best they can be without new versions of drivers, I think. There’s some other hardware that I need to try out (the webcam, for example), but I don’t really care that much, so it’s low priority. Notebooky stuff works.

I have a Waterfield Designs bag coming soon, which I’m excited about. Don’t think it will be suitable for gaming books, but I still have that backpack which is going on 5+ years. The little trooper.

I’ve been meaning to survey the gaming group and associated friends to see what they’re using for IM these days. I think the answer for some is “nothing", with a couple saying “AIM on occasion” or “I idle on Google Talk", so I’ve not really been motivated to test those waters. I want to get a private Jabber conference room running for the group, since the IRC thing kind of sputtered off and died (I still idle there!), but I know it means getting people to switch to Jabber (or at least Google Talk) and then getting them to use a non-Google Talk client (Pidgin, I bet, but maybe Trillian would work). Sigh. If anyone has interest in switching to one network (I highly suggest a Jabber-like ["XMPP” for the techies]), or trying out conferences, or whatever, email/IM me and we’ll play around.

This really is getting rambly, and people might expect me to write long posts all the time. So I’m wrapping this up by saying that spring is finally here, and that’s why it snowed yesterday.

April 30, 2008 03:31 AM :: Wisconsin, USA  

April 29, 2008

Zeth

Three more tips - use keybindings, scripts and SSH without passwords

Use Readline shortcuts

At the bash prompt, you can use the default readline keybindings, these are similar to Emacs ones. Many of these are also available within other programs that use readline, such as the Python interpreter.

Here are some useful ones:

Ctrl-A Beginning of Line
Ctrl-E End of Line

Ctrl-U Kill (cut) everything left of cursor
Ctrl-K Kill (cut) everything right of cursor
Ctrl-W Kill (cut) the single word before the cursor
Ctrl-Y Yank (paste) the text back

Ctrl-L Clear Screen
Ctrl-D Exit
Ctrl-R Reverse interactive-search, (attempt to complete what is currently being typed using the history file)

SSH without Passwords

If you login to a remote machine often and you get bored of typing the password, then you can use public key cryptography instead.

The way it works is that the remote machine has a copy of your local machine's public key, it can then use that to check that your local machine is really your machine, and so let you in.

To start with, on the local machine, see if you already have a key pair:

ls ~/.ssh/id_?sa.pub

If not, then make one:

ssh-keygen -t dsa

Now you need to copy your public key to the remote host. On the local machine run:

scp ~/.ssh/id_?sa.pub remotehost:

Now we login to the remote server:

ssh remotehost

Append the public key to your authorized keys file

cat id_?sa.pub >> ~/.ssh/authorized_keys

Now you can login without passwords. Make sure the security of your machines is well thought out. Use disk encyption if possible.

Create a script directory in home directory

I often talk about random Python or bash scripts. The easy way to use them on Linux is to make a dedicated script directory for these.

mkdir ~/bin

Add it to your shell's path. Edit ~/.bashrc and add:

export PATH=$HOME/bin:$PATH

Now all the scripts that you add to ~/bin are always available. This makes things a lot more flexible and fun as you can try out various scripts by dropping them in ~/bin and then deleting them when you are bored of them.

Discuss this post - Leave a comment

April 29, 2008 09:00 PM :: West Midlands, England  

Jürgen Geuter

Firefox3 beta4 bug that annoys me

This Firefox3 beta4 bug is really annoying. Whenever I click a link on my email workspace, the browser window is pulled to the window. Really needs fixing (yeah I could write devilspie rules but I shouldn't have to).

April 29, 2008 12:10 PM :: Germany  

April 28, 2008

Jürgen Geuter

Bugmenot Extension for Firefox3 beta

I don't know when it was updated, but the bugmenot extension works with the current betas.

Bugmenot collects logins for those sites that require you to log in to read their content (like for example nytimes.com) and allows you to use those "throw-away" logins when you stumble on a page like that: You just rightclick the form and select "Log in with Bugmenot" and the extension will try the logins bugmenot has to get you into the page.

Terribly useful and didn't use to work with the firefox betas but now it does, which really rocks. If you have not used it so far, do it now.

April 28, 2008 10:08 PM :: Germany  

April 27, 2008

Jürgen Geuter

Git and Windows

The fact that you are tied to a bad proprietary operating system does not mean that you have to live without good version control. I recently had to do some work on Windows (but I ran it in a VirtualBox) and of course I needed to connect to my git repositories.

Msysgit does not just give you access to the power of git but also makes your Windows experience a lot more bearable: It installs ssh and all the necessary GNU tools like rm, ls and others. You even get a functional terminal to replace Windows' clunky cmd.

Even if you don't need git you should probably install it on any Windows box to make sure to stay sane: Typing rm filename and getting an error message feels really weird and that is fixed then ;-)

EDIT: Typo fixed.

April 27, 2008 07:16 PM :: Germany  

Alex Bogak

Cellular Video Calls: reality that never happened?

Hi all

I recently started working for Comverse - the company supplies solutions for telephony providers, mainly cellular ones. Our product lies in the core of the operator's network and manages all or some of the services provided by the operator, such as Voice Mail, SMS, MMS, Video Calls, etc. Our system can provide a complete solution or integrate its parts with other available solutions in the market.

As I'm having an educational process now, I got an interesting thought during the studies. I got an insinuation from some of the cellular operators in last years, that video calls ability was the major drive behind the transition to fast networks, such as 3G, 3.5G and next generations. While it is true for some cases, I am not that sure that it is completely valuable.

Just think about it: would you perform a video call using the modern handset that has a video camera? Of course not - you'd have privacy issues right away. Do you really want the whole world to hear what you are saying? So what the point then in having fast network but not providing any type of service with it? Probably this is one of the reasons that cellular providers have problem: they have the infrastructure, but no services to monetize it. So everything else costs more to cover the losses. And this is something that I as consumer do not like.

I wonder why is it so in my locale that we do not have an unlimited connection cellular plans. We do have various packages, but they all are paid per minutes or MBs of data - just similar to what dial-ups used to be ages ago. It really would be great to have internet everywhere, and I think that cellular companies are not getting something here.

It's not that they make more money on pay per minute/byte basis. It's just me not buying the service at all while this is the payment scheme. So general users of this are business folks that gotta have an access to their email at all times. And even then, better options exist (we have WiFi hotspots almost everywhere now).

Just wonders of the world I guess.

April 27, 2008 03:16 PM :: Israel  

Nirbheek Chauhan

<3 X, PulseAudio, and DAAP

So, right now, I'm sitting at my comp listening to Norah Jones. But this isn't like any other music-listening time. Right now, I'm:


  1. Logged into a lab computer via XDMCP: I could've used VNC, but that would've required someone to be logged-in on the lab comp.

  2. Using my laptop's PulseAudio as the lab computer's default PulseAudio sink: This makes the lab computer's PulseAudio send all sound to my laptop's PulseAudio by default.

  3. Connected to my laptop's DAAP share from the lab computer's Rhythmbox: The music on my laptop becomes accessible from the lab computer's Rhythmbox.



This setup results in me playing Norah Jones on the lab computer, and listening to it here :)

April 27, 2008 01:28 AM :: Uttar Pradesh, India  

April 26, 2008

Martin Matusiak

download all media links on a webpage

This has probably happened to you. You come to a web page that has links to a bunch of pictures, or videos, or documents that you want to download. Not one or two, but all. How do you go about it? Personally, I use wget for anything that will take a while to download. It’s wonderful, accepts http, https, ftp etc, has options to resume and retry, it never fails. I could just use Firefox, and if it’s small files then I do just that, and click all the links in one fell swoop, then let them all download on their own. But if it’s larger files then it’s not practical. You don’t want to download 20 videos of 200mb each in parallel, that’s no good. If Firefox crashes within the next few hours (which it probably will) then you’ll likely end up with not even one file successfully downloaded. And Firefox doesn’t have a resume function (there is a button but it doesn’t do anything :rolleyes: ).

So there is a fallback option: copy all the links from Firefox and queue them up for wget: right click in document, Copy Link Location, right click in terminal window. This is painful and I last about 4-5 links before I get sick of it, download the web page and start parsing it instead. That always works, but I have to rig up a new chain of grep, sed, tr and xargs wget (or a for loop) for every page, I can never reuse that and so the effort doesn’t go a long way.

There is another option. I could use a Firefox extension for this, there are some of them for this purpose. But that too is fraught with pain. Some of them don’t work, some only work for some types of files, some still require some amount of manual effort to pick the right urls and so on, some of them don’t support resuming a download after Firefox crashes. Not to mention that every new extension slows down Firefox and adds another upgrade cycle you have to worry about. Want to run Firefox 3? Oh sorry, your download extension isn’t compatible. wget, in contrast, never stops working. Most limiting of all, these extensions aren’t Unix-y. They assume they know what you want, and they take you from start to end. There’s no way you can plug in grep somewhere in the chain to filter out things you don’t want, for example.

So the problem is eventually reduced to: how can I still use wget? Well, browsers being as lenient as they are, it’s difficult to guarantee that you can parse every page, but you can at least try. spiderfetch, whose name describes its function: spider a page for links and then fetch them, attacks the common scenario. You find a page that links to a bunch of media files. So you feed the url to spiderfetch. It will download the page and find all the links (as best it can). It will then download the files one by one. Internally, it uses wget, so you still get the desired functionality and the familiar output.

If the urls on the page require additional post-processing, say they are .asx files you have to download one by one, grab the mms:// url inside, and mplayer -dumpstream, you at least get the first half of the chain. (Unlikely scenario? If you wanted to download these freely available lectures on compilers from the University of Washington, you have little choice. You could even chain spiderfetch to do both: first spider the index page, download all the .asx files, then spider each .asx file for the mms:// url, print it to the screen and let mplayer take it from there. No more grep or sed. :) )

Features

  • Spiders the page for anything that looks like a url.
  • Ability to filter urls for a regular expression (keep in mind this is still Ruby’s regex, so .* to match any character, not * as in file globbing, (true|false) for choice and so on.)
  • Downloads all the urls serially, or just outputs to screen (with --dump) if you want to filter/sort/etc.
  • Can use an existing index file (with --useindex), but then if there are relative links among the urls, they will need post-processing, because the path of the index page on the server is not known after it has been stored locally.
  • Uses wget internally and relays its output as well. Supports http, https and ftp urls.
  • Semantics consistent with for url in urls; do wget $url… does not re-download completed files, resumes downloads, retries interrupted transfers.

Limitations

  • Not guaranteed to find every last url, although the matching is pretty lenient. If you can’t match a certain url you’re still stuck with grep and sed.
  • If you have to authenticate yourself somehow in the browser to be able to download your media files, spiderfetch won’t be able to download them (as with wget in general). However, all is not lost. If the urls are ftp or the web server uses simple authentication, you can still post-process them to: ftp://username:password@the.rest.of.the.url, same for http.

Download spiderfetch:

Recipes

To make the use a bit clearer, let’s see some concrete examples.

Recipe: Download the 2008 lectures from Fosdem:

spiderfetch.rb http://www.fosdem.org/2008/media/video 2008.*ogg

Here we use the pattern 2008.*ogg. If you first run spiderfetch with --dump, you’ll see that all the urls for the lectures in 2008 contain the string 2008. Further, all the video files have the extension ogg. And whatever characters come in between those two things, we don’t care.

Recipe: Download .asx => mms videos

Like it or not, sometimes you have to deal with ugly proprietary protocols. Video files exposed as .asx files are typically pointers to urls of the mms:// protocol. Microsoft calls them metafiles. This snippet illustrates how you can download them. First you spider for all the .asx urls, using the pattern \.asx$, which means “match on strings containing .asx as the last characters of the string”. Then we spider each of those urls for actual urls to video files, which begin with mms. And for each one we use mplayer -dumpstream to actually download the video.

#!/bin/bash
 
mypath=$(cd $(dirname $0); pwd)
webpage="$1"
 
for url in $($mypath/spiderfetch.rb $webpage "\\.asx$" --dump); do
	video=$($mypath/spiderfetch.rb $url "^mms" --dump)
	mplayer -dumpstream $video -dumpfile $(basename $video)
done
 

Download this code: asx_spiderfetch.sh

April 26, 2008 07:44 PM :: Utrecht, Netherlands  

April 25, 2008

Zeth

Twelve commandments for Beautiful Python code

Living Code

David Parker famously said that texts are living, once they leave the pen of the author then they have a life of their own, you never know where the text will end up or how it will be modified. For Python code that is even more true.

The beauty of Python is that you can write code fast, share code and modify code. For this to work, your code needs to be readable. Writing code is easy, reading other people's code is much harder, or even reading your own code after a few months or years has past.

Therefore the aim is to make code as readable as possible, even if it causes a little more work when you write it. The way to make your Python code most readable is to keep to the Style Guide for Python Code, also known as PEP8.

Pylint for the Win

It is far easier to keep your code valid to PEP8 as you go along, than to try to move a large codebase to PEP8 at the end. I recommend the use of a tool called pylint.

Pylint is available from all Linux distributions' package managers (e.g. apt-get install pylint or emerge pylint). Here are some instructions for Windows.

If you have ever made a webpage you probably know about HTML-tidy or the online W3C Validator tool. These tell you everything wrong with your HTML.

Pylint is similar, it goes through and tells you both syntax errors and also how your code differs from the PEP8 standard.

There are some corner cases in which you will need to give pylint the finger, but doing it consciously for good reason is better than because you are sloppy.

PEP8 is better than your crappy style

People often don't use PEP8. This is for a variety of (bad) reasons.

Firstly, sometimes people are tourists from another programming language, they do not know any better so they write their Python code like it was Java or C code.

Secondly, Sometimes people think their (cl)own style is better than PEP8 in some technical way. Well that does not matter. I might have a better way to design a plug socket, but if I implemented my better plug socket, I would not be able to buy any electrical devices.

There can only be one standard, and PEP8 is that standard. If you want to change that standard then bribe, sleep with or kill Guido Van Rossum.

Not following the standard makes your code less readable to others, this prevents the quick reuse that Python is designed for (see above).

If you are a free-software/open-source project, then you particularly should be ashamed if you write hard to read code, because allowing other people to read, understand and modify your code is the whole point.

Lastly, some people don't use PEP8 because the document is too circular and verbose for them to remember. I feel your pain, below are the main points in 12 easy rules.

The 12 commandments

Guido, who brought you out of the land of Visual Basic, out of the land of slavery, spake all these words to thee:

  • Module names should be in all lowercase - hello.py.
  • Class names should be in CamelCase.
  • Methods and functions should be in lower_with_underscores
  • Implementation-specific 'private' methods _single_underscore_prefix
  • Especially private non-subclassable methods __double_underscore_prefix
  • Top level constants (i.e. those that are not in a function or class) should be in BLOCKCAPITALS. Overuse of these constants may make your code less reusable.
  • If a variable inside a function or method is so temporary and disposable that you cannot give it a name, then use i for the first one, j for the second and k for third.
  • Indentation is four spaces per level. No tabs. If you break this rule then you must be stoned in the village square.
  • Lines are never more that 80 characters wide. Tip, break lines with a backward slash \. You do not need to do this if there are parentheses, brackets or braces. Don't add extra parentheses just to break lines, use \ instead.
  • Spaces after commas, (green, eggs, and, ham)
  • Spaces around operators i = i + 1
  • Write docstrings for all public modules, functions, classes, and methods. Python is an international community, so use English for docstrings, object names and comments. If you want to provide local translations then use a proper localisation library.

Discuss this post - Leave a comment

April 25, 2008 06:00 PM :: West Midlands, England  

April 24, 2008

Michael Klier

The Twitter Blacklist And Another Greasemonkey Script

If you, like me, use twitter on a regular basis, you maybe like this one.

There's a new great site around called The Twitter Blacklist. It was created by Earle Martin and intends to gather a list of all the spammers and morons who either try to use the service to promote their nonsense products/websites or simply just are attention addicts. In both cases, these people are blindly following as much other people as they can. The best indicator to see whether someone is a twitter spammer or not, is the ratio between how many people they follow and how many follow them.

1:5 = twittercaster, 1:2 = notable, 1:1 socially healthy, 2:1 newbie or social climber, 5:1 twitter spammer. - Evan Podromou

Since a couple of days the twitterblacklist has a simple, yet nice API which allows you to check if a certain user is listed or not. This is where Greasemonkey enters the game :-).

I wrote a tiny Greasemonkey script which looks up the username of the visited twitter profile and displays a nice warning message at the top of the page if it's listed at the twitter blacklist.

Blocking the user then, is just one click away 8-).

I made the script available at the userscript website, you can fetch it here.

I hope this also finds its way into some of the available twitter clients. If the twitter blacklist grows (which it does almost daily) it will make twitter a even nicer place to stay.

And last not least: If you know other twitter spammers which aren't listed at the twitter blacklist yet, remember to report them (details about how you can report a spammer can be found http://twitterblacklist.com).

Read or add comments to this article

April 24, 2008 08:01 PM :: Germany  

Nirbheek Chauhan

Google Summer of Code, Gentoo

Right after the GSoC results were announced, Anant Narayanan sent an email to the gentoo-soc ML welcoming the students with lots of good advice about how to proceed, what all they can expect, and what all they're expected to do. Thanks Anant!

The only thing about that email that irked me was that third party source code management systems such as code.google.com, sf.net, and repo.or.cz were recommended for hosting the source code. Now, for a small project that does not have much in the name of Infra, this would be acceptable, but for a full-fledged organisation with a dedicated infra team, this looks quite shoddy (this probably happened due to insufficient communication between gentoo-soc and gentoo-infra). And on top of that, projects getting distributed across several repositories makes it impossible to find the code during and after SoC is finished. For instance, I am completely unable to find the code for a lot of the SoC 2007 projects.

Now, I understand that Gentoo Infra is very short-staffed and overworked at the moment, and hosting dedicated Trac setups for all the students is not an easy task. So I poked my mentor Patrick Lauer and asked him if he could host Redmine at gentooexperimental which could then be used as a central place for tracking/hosting all the Gentoo SoC projects. He agreed, but his dislike of Rails meant that I would have to do the setup and manage it.

And so it was done, and an email sent to the list. soc.gentooexperimental.org now hosts Redmine for project management.

After a small chat with Donnie Berkholz on IRC, we agreed that hosting the source code under Gentoo Infra and using Redmine for the rest of the stuff would be best. OTOH, Alec Warner was in favour of giving the students full freedom with hosting their projects as long as the place of their choice was usable. I replied to his email suggesting that in the interest of keeping the projects accessible from one place, people who want to do their development somewhere else be asked to create a dummy project at soc.ge.o which points to the place where the actual development is taking place.

Let's see how things turn out.

April 24, 2008 11:39 AM :: Uttar Pradesh, India  

April 23, 2008

Alex Bogak

Oh Gentoo, what had become of thee?

Dear friends

Yesterday was an important day for me. I stumbled into a very important issue, albeit small, which made me to come to the following decision: I am leaving Gentoo as a desktop platform.

It does not come as an easy decision. I've been using Gentoo and quasi-actively participating in the community for about 5 years. I have it installed currently on 3 out of 4 computers I have (the last one being mac mini, which I keep with Mac OS X). So why would I take this decision?

It all began with a one simple thing. You may have read my previous posts on various WINE installations, and I use some Windows applications with WINE. But recently Internet Explorer stopped working. I've tried to reinstall it (and it is easy in Gentoo, just as in any other Linux distribution with decent package manager), but to no avail.

Next step was slightly more complicated, but still quite simple: I've used VMWare to install complete Window XP environment. It worked fine for awhile, until I couldn't use VM images between different computers I have. It just stopped working. Besides that, the performance of VMWare on my AMD Athlon 1.8 with 1G of memory was, to say the least, appalling. Next came Innotek (now Sun) VirtualBox. This is the best emulation environment I could find to work on my computer. It works fine, and I use it for all my Windows-related projects.

But as a side effect of all installations, system began breaking. I started noticing various weird things, such as sudden applications freezing at times, etc. Couple of days ago, when there were no applications running, I've seen CPU usage at ~80%, I did what most Windows users do. I rebooted the machine.

And then, system just broke. System utilities seemed nowhere to be found. Some init scripts seemed to be incorrect, etc. I somehow fixed the situation by copying old versions from other projects, and updating the system. But now, GNOME has problems with graphics and themes, and most applets do not work and even do not exist. It just never ends, does it?

So, as a normal user of Gentoo, I went to emerge my world. I haven't done that for a couple of months, so there were almost 1G of updates waiting for me. I've downloaded all the packages, and began the emerge.

The thing that broke the last straw was a simple apache update. The system update failed because I had an old version. Not because compile didn't work. Just because it needed me to manually do something!! It redirected me to a Gentoo doc site, which has 2 lines of code that fixed the problem, and emerge now runs again.

Why in the heavens name wasn't this done automatically? Why did I loose half a day, during which my system could be updated? I lost this time because update procedure stopped. I had to fix the Apache configuration, so my GNOME desktop could continue updating. I understand that this specific issue with Apache may be serious, and that not many ordinary people run it on their computer, it still bugs me. I don't like it when I have to do this sort of manual intervention in update procedure.

So what is the problem here? Daniel Robbins created a Gentoo moto once: The goal of Gentoo is to design tools and systems that allow a user to do his or her work as pleasantly and efficiently as possible, as they see fit....If the tool forces the user to do things a particular way, then the tool is working against, rather than for, the user. (cited from Gentoo Philosophy)

The problem is that I spent too much time caring for the computer with Gentoo. I don't have that luxury anymore. There was time, when geeking with the machine and fixing problems was cool. Today, its a burden. I value time, and I only have 24 hours a day of it.

I believe that this may be one of the general problems with Gentoo. When it began, most folks using Linux were techies, who cared about all the bits on their computers. Gentoo fit very well in this community, so it flourished and became very popular. It provided tools that noone had (and used to compile anything manually anyway), and community of a good will and lot of friendship. It had the best documentation (and maybe still do) among brothers, and best team of engineers.

But nowadays, many users want word processor, web browser, email program and video player. They want it now, and not wait 20 minutes when compilation will finish. They don't care about technicalities. And as Gentoo haven't changed its nature, it doesn't fit for majority anymore. Sabayon anyone?

Gentoo distro has proven over the years, that it will stay the way it is. And that's why it won't be back on my desktop soon.

So, Gentoo, stay on server.

Ubuntu, CentOS - my desktop is waiting.

April 23, 2008 02:19 PM :: Israel  

April 22, 2008

Clete Blackwell

On the Ignorance of People

The USA’s 2008 election is the first governmental election of any kind that I will have an opportunity to vote in. This is a very important election for everyone. We face major decisions about the war in Iraq and on many major issues. A lot is at stake in this year’s general election. I have followed this election more than any other. I have been involved in a lot of conversations with people who come from very different cultures and backgrounds. Many of these people support my vie