June, 2009


29
Jun 09

Bing’s Ballmer Bias (in search of monkey boy)

Searching for Monkey BoyMuch has already been said about the fact that Microsoft’s shiny “new” search engine, Bing.com, happens to have a little bias. I think I just discovered a new example of this bias. Try finding the Monkey Boy video on both Google and Bing, and see which one’s auto-complete is the most helpful.


21
Jun 09

Fighting Juno’s address book lock-in with Python

This week I helped a friend with an OS re-install (XP unfortunately). He used Juno for his email service, which refused to work properly when re-installed. I helped him switch to Gmail, but it turns out that Juno refused to implement an export feature for their contacts. After a little hunting around, I discovered the text file the software used to store contacts, somewhere in it’s Program Files folder. What follows is a quick bit of code I wrote to convert the contacts into a CSV file. Hopefully it will be useful to someone else in their efforts to fight lock-in.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/usr/bin/python
 
# import libraries
import csv
 
class entry():
    """A simple data structure for each contact."""
    Name = ''
    Phone = ''
    Birthday = ''
    Address = ''
 
 
class contacts():
    """This class will contain pure input from the Juno contacts file."""
 
    def __init__(self, input):
        # Open the input file
        readFile = open(input, 'r')
 
        # Put the header into list
        header = entry()
        header.Name = "Name"
        header.Email = 'Email'
        header.Phone = "Phone Number"
        header.Address = "Address"
 
        self.list = [header]
 
        # Put the input file into a list and close file
        self.rawContent = readFile.readlines()
        readFile.close()
 
    def parse(self):
        """Parse everything and put it in the list"""
 
        count = 0
        while(count < = len(self.rawContent) -1):
            person = entry()
            count += 1 # Skips over the field specifying the contact as an entry            
 
            # Get email address
            item = self.rawContent[count][6:-2]
            if (item == ''):
                person.Email = ''
            else:
                person.Email = item
            count += 1
 
            # Throw alias into bit-bucket
            count += 1
 
            # Get first and last name
            item = self.rawContent[count][5:-2]
            if (item == ''):
                person.Name = ''
            else:
                person.Name = item
            count += 1
 
            # Get the phone number
            item = self.rawContent[count][14:-2]
            if (item == ''):
                person.Phone = ''
            else:
                person.Phone = item
            count += 1
 
            # Throw birthday into bit-bucket
            count += 1
 
            # Get the address
            item = self.rawContent[count][8:-2]
            if (item == ''):
                person.Address = ''
            else:
                person.Address = item
 
            # incriment count by four to get to the beginning of next entry
            count += 4
 
            # add person to the list
            self.list += [person]
 
    def output(self):
        """Make a CSV file"""
 
        # Set up the output file
        outFile = open('output.txt', 'w')
        output = csv.writer(outFile, delimiter=',')
 
        # Iterate through self.list and write stuff
        for person in self.list:
            output.writerow([person.Name, person.Email, person.Phone, person.Address])
 
        # Close the file
        outFile.close()

AWSOM Powered