Search Results: "ema"

21 January 2007

Daniel Burrows: How to Breathe, Functionally (part 2)

In a previous post, I pointed out some ways that you can acheive the "compute this, now save it and compute this, ..." style of coding in a functional language such as Haskell without going mad. This is a continuation of that post.

There's one other purely syntactic feature of Haskell that I rather like for readability: Haskell lets you define variables after you use them.


GoToTheNextTrickyBit someVal
where someVal = DoThisAndThisAndThat...


Although it isn't always appropriate to do this, there are times when I find it extremely intuitive to define my variables after they're used. For instance, to take a "practical" example, compare


mailTo customer =
let customerName = getCustomerName customer
customerAddr = getCustomerAddr customer
in
makeMailingTo customerName customerAddr


with


mailTo customer = makeMailingTo customerName customerAddr
where
customerName = getCustomerName customer
customerAddr = getCustomerAddr customer


I don't know about anyone else, but when I read the first definition I mentally go "huh. Why are we extracting the customer name?", then skip down to where the name gets used, and finally re-parse the name in that context. The "where" form lets me write the code in the same order that I would read it, giving the code a natural flow. It's very important, of course, to keep the number of auxiliary definitions small; otherwise you leave too many "open questions" for the reader of your code to carry around as she works her way down to the definitions.

But it isn't all roses at the low syntactic level. IMO, the biggest practical problem with writing Haskell code is the syntactically significant indentation.

Python, of course, also has significant whitespace -- but it works mainly because it's extremely simple. Any line ending in a ":" introduces a new block, and statements within a block have the same amount of indentation. In contrast, Haskell's rule...well, just read that link above. You can write code that has the same meaning under any indentation, but it's not idiomatic to do so -- and worse, since the statement terminators are not obligatory, a missed terminator might work fine, might change the meaning of your code, or might fail to compile in an obscure way.

A side effect of the complicated indentation rules in Haskell is that the Emacs Haskell mode doesn't work very well at indenting my code. It usually chooses an indentation that I don't want, and often one that doesn't even compile. I'm sure Emacs could do better, but I would be willing to live with a little more punctuation if it meant that the code was easier for programming tools to process correctly. Functional coding advocates assert, correctly IMO, that side-effects are problematic because even smart programmers will write more bugs in their presence. I think the same logic should apply to syntax: making the language harder for humans and machines to parse has negative overall effects, even if it is possible with sufficient effort to parse it correctly.

I think that conceptually, Haskell is a great language -- the problems I see with it are issues of syntax, tool support, libraries and speed (laziness has a high price). Oh, and also the fact that, as with most programming languages that are pleasant to use, you can't get a real paying job writing in it unless you have a PhD. :-(

Daniel Burrows: How to Breathe, Functionally (part 1)

David Welton writes that the problem with functional languages is that you don't get to mentally "catch your breath" between computations; piling function invocations on function invocations makes it hard to understand what's actually being calculated. He has an amusing summary of how functional code can become unreadable:


Do this with the result of this with what this produces when given this input that is derived from this function which takes the result of this other thing after calculating the result of something that is derived from the output of a function that ...


Indeed, I've seen functional code like this (much of it written by myself). Here's a particular gem:


f splitPoints = map fst $ tail $ scanl (flip ($) . snd) ([], toSplit) $
map splitAt splitPoints


I wrote this code a year ago, and I don't know what it does! It's hard to read and hard to understand. So, however, is imperative code that says


Add 5 to A, now if B is not zero we jump to where we subtract one from B and if C is less than 3 we add 4 to C otherwise we divide C by 2 and then add it to A, then we ...


The reason both pieces of pseudocode are hard to understand is that they don't use the abstraction features built into the language. Good imperative code uses meaningful variable names, uses the structured-programming primitives the language provides, and abstracts complex operations into functions.

My rule of thumb (which is, heh, not always religiously followed) is that a piece of program structure that does more than about 3-6 things is probably too complicated; it seems like that's about as much local context as I can hold in my head comfortably (and the number is more 3 than 6 these days, if you get my drift). As David puts it,


If you'll bear with a poor comparison, sometimes programming is like a song. You do the tricky section, then you go back to an easier section and catch your breath for a bit.


The problem seems to be that people trained on imperative languages, when they're tossed into the ocean of functional coding, can't find the guideposts and landmarks that would help them impose some structure on the water. Should I put this complicated expression inside a "let", or break it out into another function? When do I use a higher-order function to unify two dissimilar pieces of code? Should I write this code in terms of higher-order library functions or directly? It's easy to wander off down a chain of nested invocations of anonymous higher-order functions, or composed partially applied library functions, just "because you can" and end up forgetting what you were trying to do in the first place.

Luckily, some of the basic rules of keeping your code readable remain more or less the same: assign intermediate results to variables with meaningful names, and abstract complicated operations into separate functions. To tackle David's example:


You get sections with DoThisAndThisAndThatWithTheResultsOfSelectThisFromTableXYZ that you have to slow down to think through.

...

GoToTheNextTrickyBit where ManyThingsHappen.

All in all, you wind up with a sort of ebb and flow that works out pretty well if you're in tune with the code being written, going from intense calculations, to a line or two where you do no more than store things in a variable, take a breather, and prepare for the next important stanza.


The way to "take a breath" in a functional language is generally to assign an intermediate result to a variable, or to extract a complicated operation into a function and give it a meaningful name. One Haskell approximation to David's example is


do DoThis
AndThis
results - SelectThisFromTableXYZ
someVal - AndThat results
GoToTheNextTrickyBit someval


If you're writing pure functional code, you might write


let
results = SelectThisFromTableXYZ
someVal = AndThat results
in
GoToTheNextTrickyBit someVal


Of course, this will become unreadable if you write a huge complicated nested "let" expression in place of "AndThat". For a truly dreadful example of this kind of coding, check out the Gnucash Scheme code that generates the "Cash Flow" report (warning: read this in short bursts, or you WILL go blind). This is exactly analogous to writing too many nested loops and conditionals in imperative code, and the fix is the same: find logically distinct bits of code and extract them into separate functions.

I have a few more thoughts, but this post is getting too long, so I'll inflict them on the world in another post. The rule that short things are easier to understand applies to blog posts as well as code. :-)

20 January 2007

Erich Schubert: The end of the world 2.0 is near.

I'm convinced the Web 2.0 bubble will impact soon. Granted, some will survive, some will struggle - but some will just blow up. Time to sell for these. There are several reasons why I believe this will happen "soon": Many people have been keeping an hungry eye on YouTube, Rapidshare and others. It's just a matter of time until some of these predators goes for the kill. My predictions for the post-web2.0-bubble time:

Bernhard R. Link: please add mime-types

Enrico blogged about translating the mime-types of file to a debtags, stating "I&aposm not sure it&aposs a good idea to encode mime types in debtags".

I just want to throw my two cent in here and state that I only once looked into debtooks and gave up because it does not list mime-types but some obscure other specification.

Getting suggested programs that support formats which have the same type of content like the one I want to show, to convert or to create does not help me. I most of the time do not want to edit "a video" or "a spreadsheet", but I first of all have a very specific file I want to do something with, or a specific set of formats I want to create something in. If I have a AbiWord file, Openoffice.org will not help me, and with video or audio formats it is even worse.

So after turning away disappointetly from debtags, I had to do a full mirror scan for /usr/lib/mime/packages/ files and their contents. Having that data cached in debtags would be something that really makes debtags usefull in my eyes. (And the more direct and verbatim the mime-type is encoded, the more useful it would be for me).

Josselin Mouette: Making upgrades faster

Improving the speed of upgrades is a never-ending process. Last year, I worked on GConf schema registration which was painfully slow. Today, the introduction of apt-delay, which compensates for the absence of hooks in dpkg, paves the way for further improvement: single call for gconf-schemas (although we wouldn't gain much now), but also more recently widespread dog-slow stuff like update-mkinitrd and fc-cache. However this approach doesn't work for ldconfig, as this command must be launched before considering the package as configured. Therefore, you can't hook it into apt-delay and hope everything installs fine before running ldconfig. The ldconfig case can be solved by itself, as it is possible to use the simplest caching method by simply looking at the timestamps of the directories it scans. This patch (for glibc 2.5) adds simple checks to see whether the directories actually need to be rescanned before regenerating the cache. The improvement is visible as soon as you upgrade two libraries together - and generally, unstable users upgrade them by packs of ten, if not more. As Aur lien Jarno seemed to agree with the approach, I hope to see it included soon, at least in experimental.

19 January 2007

Enrico Zini: tagminer

Cute things one could do with debtags While answering to a long message in the debtags-devel mailing list I accidentally put together the pieces of a fun idea. This is the bit of message I was answering:
  • It would be very useful if the means for indicating the supported
    data formats was more comprehensive. This could mean a lot of
    expanding in the "works-with-format" section of the vocabulary, which
    doesn't even include formats such as gif or mpg at the moment. I don't
    know how feasible it is to alter underlying debtags functionality, but
    perhaps it would be the easiest to make "works-with-format" a special
    case tag which allows for formats not listed in the vocabulary.
This is my answer:
Good point. The idea has popped up in the past to list supported mime types among the package metadata, so that one could point to a file and get a list of all the packages that can work with it. I'm not sure it's a good idea to encode mime types in debtags and I'd like to see something ad-hoc for it. In the meantime works-with-format is the best we can do, but we should limit it to the most common formats.
This is the fun idea: if works-with-format is the best we can do, what can we do with it? Earlier today I worked on resurrecting some old code of mine to expand Zack's ls2rss with Dublin Core metadata extracted from the files. The mime type scanner was ready for action. Some imports:
import sys
# Requires python-extractor, python-magic, python-apt
# and an unreleased python-debtags from http://bzr.debian.org/bzr/pkg-python-debian/trunk/
import extractor
import magic
from debian_bundle import debtags
import re
from optparse import OptionParser
import apt
A tenative mapping between mime types and debtags tags:
mime_map = (
        ( r'text/html\b', ("works-with::text","works-with-format::html") ),
        ( r'text/plain\b', ("works-with::text","works-with-format::plaintext") ),
        ( r'text/troff\b', ("works-with::text", "works-with-format::man") ),
        ( r'image/', ("works-with::image",) ),
        ( r'image/jpeg\b', ("works-with::image:raster","works-with-format::jpg") ),
        ( r'image/png\b', ("works-with::image:raster","works-with-format::png") ),
        ( r'application/pdf\b', ("works-with::text","works-with-format::pdf")),
        ( r'application/postscript\b', ("works-with::text","works-with-format::postscript")),
        ( r'application/x-iso9660\b', ('works-with-format::iso9660',)),
        ( r'application/zip\b', ('works-with::archive', 'works-with-format::zip')),
        ( r'application/x-tar\b', ('works-with::archive', 'works-with-format::tar')),
        ( r'audio/', ("works-with::audio",) ),
        ( r'audio/mpeg\b', ("works-with-format::mp3",) ),
        ( r'audio/x-wav\b', ("works-with-format::wav",) ),
        ( r'message/rfc822\b', ("works-with::mail",) ),
        ( r'video/', ("works-with::video",)),
        ( r'application/x-debian-package\b', ("works-with::software:package",)),
        ( r'application/vnd.oasis.opendocument.text\b', ("works-with::text",)),
        ( r'application/vnd.oasis.opendocument.graphics\b', ("works-with::image:vector",)),
        ( r'application/vnd.oasis.opendocument.spreadsheet\b', ("works-with::spreadsheet",)),
        ( r'application/vnd.sun.xml.base\b', ("works-with::db",)),
        ( r'application/rtf\b', ("works-with::text",)),
        ( r'application/x-dbm\b', ("works-with::db",)),
)
Code that does its best to extract a mime type:
extractor = extractor.Extractor()
magic = magic.open(magic.MAGIC_MIME)
magic.load()
def mimetype(fname):
    keys = extractor.extract(fname)
    xkeys =  
    for k, v in keys:
        if xkeys.has_key(k):
            xkeys[k].append(v)
        else:
            xkeys[k] = [v]
    namemagic =  magic.file(fname)
    contentmagic = magic.buffer(file(fname, "r").read(4096))
    return xkeys.has_key("mimetype") and xkeys['mimetype'][0] or contentmagic or namemagic
Command line parser:
parser = OptionParser(usage="usage: %prog [options] filename",
        version="%prog "+ VERSION,
        description="search Debian packages that can handle a given file")
parser.add_option("--tagdb", default="/var/lib/debtags/package-tags", help="Tag database to use (default: %default)")
parser.add_option("--action", default=None, help="Show the packages that allow the given action on the file (default: %default)")
(options, args) = parser.parse_args()
if len(args) == 0:
    parser.error("Please provide the name of a file to scan")
And here starts the fun: first we load the debtags data:
# Read full database 
fullcoll = debtags.DB()
tagFilter = re.compile(r"^special::.+$ ^.+::TODO$")
fullcoll.read(open(options.tagdb, "r"), lambda x: not tagFilter.match(x))
Then we scan the mime type and look up tags in the mime_map above:
type = mimetype(args[0])
#print >>sys.stderr, "Mime type:", type
found = set()
for match, tags in mime_map:
    match = re.compile(match)
    if match.match(type):
        for t in tags:
            found.add(t)
if len(found) == 0:
    print >>sys.stderr, "Unhandled mime type:", type
else:
If the user only gave the file name, let's show what Debian can do with that file:
    if options.action == None:
        print "Debtags query:", " && ".join(found)
        query = found.copy()
        query.add("role::program")
        subcoll = fullcoll.filterPackagesTags(lambda pt: query.issubset(pt[1]))
        uses = map(lambda x:x[5:], filter(lambda x:x.startswith("use::"), subcoll.iterTags()))
        print "Available actions:", ", ".join(uses)
If the user picked one of the available actions, let's show the packages that do it:
    else:
        aptCache = apt.Cache()
        query = found.copy()
        query.add("role::program")
        query.add("use::"+options.action)
        print "Debtags query:", " && ".join(query)
        subcoll = fullcoll.filterPackagesTags(lambda pt: query.issubset(pt[1]))
        for i in subcoll.iterPackages():
            aptpkg = aptCache[i]
            desc = aptpkg.rawDescription.split("\n")[0]
            print i, "-", desc
\o/ The morale of the story:

Biella Coleman: Internet Radio Under Threat

Probably one of my favorite things about the Internet (and high speed connections) is Internet Radio. My favorite stations are: Space Station, Secret Agent and Tag’s Trance Trip on soma fm out of SF, John in the (weekday) morning on kexp out of Seattle and the The Terrordome and
Asiko Africa Phantom Pyramid
hosted by the simply amazing (really, check out his shows) Minister Faust out of Edmonton. But thanks to witless senators, all this awesomeness is under threat (and most of your probably already know). So support the effort to stop the shenanigans and let’s keep Internet Radio alive… And if you know of any other awesome radio shows or music, please do pass along. I am looking for a good salsa station, classical music and more dance music.

Adam Rosi-Kessel: Streaming Netflix

Via DRM Watch, Netflix to Offer Streaming Movies Online. My initial reaction: eh.
Netflix’s streaming service will differ from existing online movie services like those from Amazon, Movielink, and Apple iTunes. Those services offer rentals of movies for a fixed time period (e.g., 24 hours) or downloads-to-own, known in Hollywood jargon as ESL for Electronic Sell-Through. In contrast, Netflix will let users pick from a catalog of available films and let users watch any of them for up to a fixed number of hours per month, according to their subscriber level, such as six hours per month for entry-level subscribers. The service will launch with a catalog of about 1,000 titles, the same number as are available on Movielink’s rental service. The video delivery scheme that Netflix is using is a streaming-only technology that senses the user’s Internet bandwidth and adjusts the video quality accordingly; thus it is analogous to RealNetworks’s Rhapsody music service.
Limiting the catalog to 1,000 titles undermines Netflix’s key selling point: enormous selection and a long-tail business model. I could probably find those same 1,000 titles at any Blockbuster Video. So all I’m saving is a trip down the street? In return, I get something I can only watch on my computer (with Windows) for a limited number of hours? Apparently, if I want to watch the same scene a few times, or with the director’s commentary (is that even available?), I’m using up my six hours per month.Even cable movies-on-demand is a better service. Don’t get me wrong — I love Netflix as a DVDs-by-mail service. I also think the Netflix web interface and collaborative filter is pretty great, although the third-party Netflix Queue Manager Bookmarklet is a definite improvement. Based on this initial announcement, I can’t think of a single reason why I would prefer the online streaming version of Netflix. Usually I have the foresight to figure out what I want to say 24 hours in advance (the delivery time for Netflix-by-mail) and having three DVDs at once gives me sufficient options in case I’m unsure. Ultimately, I suspect Netflix just wants to send the message that it’s in the Internet-delivery market, which ultimately of course will decimate its existing business model. I just wish it had a more impressive first offering.

MJ Ray: The storm: how was it for you?

niq commented:
"FWIW, in the real westcountry (West Devon, near the cornish border) we've missed the storms. A bit of wind in the morning, and some drizzle, but nothing substantial."
Yes, seeing what happened further north - roofs ripped up in Manchester - and east - house collapse in King's Lynn (pic 9) - then it seems we got off lightly this time. I hear that Germany declared it a hurricane, but I haven't confirmed that online. Euronews coverage. As far as I can see, there's snapped aerials and all the windows look like someone has sneezed over them, but damage mostly stopped after the fences were ripped to bits. I heard that the sea overtopped the wall in Weston, but I can't find pictures. I'll see myself what town is like later today. Update: niq, you didn't get an email notice because your mailserver is cocked-up:
"550 Error: 23Your subject line looks like spam"
Damnit, it's your phrase in the subject line!

18 January 2007

Biella Coleman: Got them

Thanks! A number of folks have sent me the Science articles. Many many many thanks. Now I am on hold from hell with earthlink trying to cancel the create dialup I had in PR. They just proudly announced that the current hold time is less than 15 minutes (and I already had waited 15 minutes, got through, and was disconnected mysteriously).

Clint Adams: Things that did not happen at Google last night

I was en route to an event by myself, when I received an invitation to accompany some people to a movie. Rather than simply declining, I asserted that there was no way in hell I'd cancel my plans to go see some inferior film with that particular crowd. So, what did they do? They cancelled their plans and followed me. Now one of them was apparently in heat, for instead of trying to enjoy the event, she decided that it was some kind of speed dating event and before long she was coveting one of the event staffers. This offends me on so many levels, I won't even bother to explain. Eventually she managed to discourage herself so much that she went home, but the sanctity of the event was still spoiled. Some random person came up to me and asked me to explain dynamic DNS to him. Do I look like the type of person who would have and give the answers to such questions? I opted to not beat him down with a chair or steal his Treo and slit his throat with it. Instead, I sat down and began explaining. Now some girl, who had marked me as her prey, spotted me sitting there next to this guy who bore a resemblance to Andrew Suffield. Seeing his long, flowing hair, she immediately concluded that he was a girl, and therefore a threat to our marriage or whatever she had concocted for us in her dreamworld. So she swooped down out of the sky, ready to claw his eyes out, realized that he was probably male, and breathed a sigh of relief. I concluded my exposition, and the young lad rewarded me for my daily good deed with a thank-you and a shake from his slimy, sweaty hand. Ew. Ew. Ew. EW! He departed, but the girl did not. She had with her about seven wingmen. I am told that they are wingirls (and not winggirls) because most of them are female. I am not sure that I agree, so I will call them wingnuts as a compromise. Now I have to wonder why one would need seven wingnuts. It seems to me that if one is planning ahead to require the assistance of seven, one must be hunting prey that will pay a high cost to escape. Furthermore, if one is fixin' to (or fi't'n't'a in Alabama) ensnare and entrap such an unwilling quarry, what are one's motives? What is the underlying scheme? The possibilities are horrifying. It was difficult to have a good time, but I did it anyway.

Erich Schubert: A major storm is heading our way, according to weather forecasts

This is the first time I can remember, that the university is recommending to not hold lectures and go home early. They are expecting the ministerials to formally close the university, like they did with schools at noon. This will be the strongest storm we've had in years, apparently (well, others have been similarly strong I think, but not as big). It's now 15:18, and when I look out of the window it's still surprisingly quiet. The trees are moving, but only slightly. But it's the wind protected side of the building. The university warning email said that they expect public transport - and Munich has a huge public transport system - to stop service at 18:00 "the latest". Guess I won't be able to go dancing tonight then. It would start at 19:00, and I need about 30-40 Minutes by subway to go there. I guess they will shut down subway to make sure noone gets stuck in the tunnels if there is a power loss. Such huge storms are a threat to power supply. [Update: 21:08 you can tell now it's a storm, but it's not bad here. But all train traffic is stopped in bavaria, grounding a few hundred people who didn't make it home in time. They've been taken care of. In Munich, busses and the subway are supposedly still in service. I went to go dancing, but there was a note on the door it's closed tonight; same for the karate training of a friend. From what I heard in the radio there were only few fatalities so far and limited damage, but we havn't reached the peak of the hurricane yet. Few reports of blackouts in some small towns. Schools remain closed tomorrow.] [Update: 19. Jan, noon - trains apparently still aren't back to schedule everywhere, but the system is recovering. Not many major damages reported in the media and not many fatalities. It's still windy. IMHO it was "typically german" how we handled the hurricane, urging people to stay at home and not risk much...]

MJ Ray: sxw2text en python

I wrote sxw2text as a 5-minute email-helper hack some years ago. Now I notice that there's also a version of sxw2txt in python on a French site, but it doesn't seem to do any checking at all, not even the minimal bit of my script. Update: following more links, I found odt2txt.py which outputs markdown and is probably a better choice if you have python installed.

Biella Coleman: 5 year moving wall

Despite my claim that I would post the Science articles on money once I got access via the U of A library, well, they have a 5 year moving wall, so I won’t be doing that anytime soon. If anyone does have access to the article because they are subscribed to the magazine or are a member of AASS, please feel free to pass along copies to me. My contact info can be found on my CV.

Russell Coker: new release of postal

Today I have released a significant new version of my mail server benchmark Postal! The list of changes is below:
Thanks to Inumbers for sponsoring the development of Postal.

I presented a paper on mail server performance at OSDC 2006 that was based on the now-released version of Postal.

I've been replying to a number of email messages in my Postal backlog, some dating back to 2001. Some of the people had changed email address during that time so I'll answer their questions in my blog instead.

/usr/include/openssl/kssl.h:72:18: krb5.h: No such file or directory
In file included from /usr/include/openssl/ssl.h:179

One problem reported by a couple of people is having the above error when compiling on an older Red Hat release (RHL or RHEL3). Running ./configure --disable-ssl should work-around that problem (at the cost
of losing SSL support). As RHEL3 is still in support I plan to fix this bug eventually.

There was a question about how to get detailed information on what Postal does. All three programs support the options -z and -Z to log details of what they do. This isn't convenient if you only want a small portion of the data but can be used to obtain any information you desire.

One user reported that options such as -p5 were not accepted. Apparently their system had a broken implementation of the getopt(3) library call used to parse command-line parameters.

Rodrigo Gallardo: Sexism

I have a pretty thin voice for a male. Thus, it’s not rare that people will take me for a female when on the phone. I’ve rather gotten used to it, and it no longer bothers me that much, specially since it usually happens with people I’ll never speak to again anyways (such as telemarketers). But, today, this guy called asking for info on an apartment we’re selling. I gave him the price, he said something about calling back later, called me “Ma’am”. So far, business as usual. He then reiterated he’d call back and ended by saying something like “thanks, cutie”! He actually hit on me! And it’s just so upseting! I mean, what could posibly make him think I want total strangers to call me that? So now, I just try to think about how it must be to be a woman, and have random strangers hitting on you all the time and on top of that thinking you’ll like it, and I think I just could not bear it. Most of us males really are just pigs. Ugh.

Biella Coleman: Science on the Money Effect

Within 36 hours of my return to Edmonton, from the blowing Caribbean winds to the still calm of white snow, I have fallen sick with a cold, that while not a flu (at least not 24 hrs later), is still a severe cold, knocking on flu’s door. But ever since I had various horrible experiences having to work with horrible colds (like during my qualifying exams), I don’t mind colds so long as I can stay at home and let the cold run its course, which at least is my current predicament. Because I have been parked at home, I have spent a fair amount of time on the computer today playing catching up with blog entries and emails and I came across a few potentially interesting articles about the effects of money on tieguy’s blog (run law student who knows a heck of a lot about tech, law, and free software but his blog seems to be down at the moment). He linked to pair of articles on the psychological effects of money. I have not read the articles yet (and will post them, hopefully tomorrow once I get access to them via my U of A account), but I bet this will be of interest to some Debianista’s given the recent debates and controversies over the injection of money into Debian via the Dunc-Tanc project. Now a disclaimer: I don’t have a position on Dunc-Tanc, and this is so for many reasons–the primary being I have not delved deeply into the issues an all of the debate and discussion and well, I also experience the ethical issues somewhat more of an outsider, though I do want to see Debian survive well into the future. So I have keep mostly mum on the topic but later I may have more to say. I also have yet to read the articles and am usually a little suspect of psychological experiments that purport to have universal applicability (and am not sure if these fall into this class) so I am not sure how relevant these will be to this particular case. But nonetheless, here they are, and hopefully someone will find some use in them (and sorry if they have been posted here, I am very behind on planet, thanks to dial-up for a month). On a somewhat related though different note, check out Joseph Reagle’s excellent summary of how online communities work well. Now time for much needed sleep.

Erich Schubert: Putting a CV on the homepage

Dear Lazyweb, what is you opinion to having a CV on your homepage? There are definitely privacy issues associated with this. Even having your birthday there makes abuse easier. On the other hand, many people will write a blog posting on their brithday and thus expose it anyway. I'd never put a full CV on the homepage (a good CV is adopted to the audience anyway), just with the bare minimum such as the university graduation and such. Having some project and research information there might get you some interesting job offers; putting a mini CV there as "teaser" along with the offer of a full CV on request could prove beneficial. On the other hand, such as CV could be a dangerous source material for "social engineering [wikipedia]" attacks. The maiden name of your mother used to be a suggested backup password for many websites, and is found in some CVs; people tend to trust people more that claim to have been on the same school or university (even if they can't remember them; especially if they are made feel embarassed by not remembering...). Where is your privacy limit? How much of your privacy did you expose on the web already anyway? Do you still avoid having a one-stop download of that data? Do you think there is a way back, with all the indexing, caching and archiving of web pages? My blog does intentionally not have comments; to reply please post in your own blog or email me at erich@debian.org; I read a couple of OSS planets and I'll also notice if you link to this blog entry and ping technorati.

Erich Schubert: Putting a CV on the homepage

Dear Lazyweb, what is you opinion to having a CV on your homepage? There are definitely privacy issues associated with this. Even having your birthday there makes abuse easier. On the other hand, many people will write a blog posting on their brithday and thus expose it anyway. I'd never put a full CV on the homepage (a good CV is adopted to the audience anyway), just with the bare minimum such as the university graduation and such. Having some project and research information there might get you some interesting job offers; putting a mini CV there as "teaser" along with the offer of a full CV on request could prove beneficial. On the other hand, such as CV could be a dangerous source material for "social engineering [wikipedia]" attacks. The maiden name of your mother used to be a suggested backup password for many websites, and is found in some CVs; people tend to trust people more that claim to have been on the same school or university (even if they can't remember them; especially if they are made feel embarassed by not remembering...). Where is your privacy limit? How much of your privacy did you expose on the web already anyway? Do you still avoid having a one-stop download of that data? Do you think there is a way back, with all the indexing, caching and archiving of web pages? My blog does intentionally not have comments; to reply please post in your own blog or email me at erich@debian.org; I read a couple of OSS planets and I'll also notice if you link to this blog entry and ping technorati. [Update: first interesting replies coming in - let me quote:
If I do get a call from someone who spotted it (rare, once every 3 months), the recruiter is 99/100 an asshole he isn't going to ask you to do something you want. Really!
Yeah, I can imagine that. One of the reasons I've put up a mini CV is that every few months I'm asked some of these basics usually found on CVs because of my art - I have some poetry on my page that is very popular, and every now and then someone wants to use it in school; teachers always want people to be able to tell something about the author. In such cases, I find it actually worth to highlight that I'm a math and computer science guy, to make people see that it isn't an either-or thing, language and science.]

17 January 2007

Martin F. Krafft: Stuff I forgot to pack

After an amazingly stressless journey [0], I've arrived yesterday evening in Limerick and met Daren and Mel, two alumni of UL who let me move into a spare room in the house they're renting. To be exact, Mel actually lives next door, but who cares about details. After a bit of unpacking, we headed for the pub and returned for an extensive session of Guitar Hero on the Playstation II, which is a truly fun and excellent game.
[0]

I brought my bike along, for transport and exploring. This involved packing a bit of extra stuff, borrowing a friend's Tranzbag, arriving early at the airport to get it boxed to ensure a safer journey, picking it up in Dublin, and somehow getting it to Limerick, where I'd have to reassemble it. I wasn't really looking forward to the trip. It turned out to be stressless, as I said. The boxing cost me 10 Franks at the airport and was completed in less than 5 minutes, nobody at the check-in counter said anything, as if it was the most normal thing for them to check in bikes, some dude retrieved the box in Dublin and placed it on my cart, and while I was waiting, I found out that I wouldn't have to hop on a coach (bus) to go to the Dublin train station, catch a train to Limerick, and then finish the last mile in a taxi: a bus operates fairly regularly directly from Dublin airport to Limerick, taking four hours for the journey. That's about how long it would have taken me via the train station, but I only had to pay 19 the train itself would have been 25 , plus the taxi charges.

The coach driver was curious when he saw the box, but I didn't have to pay extra, and after watching Airport on my laptop and listening to the new Katatonia album, I found myself with my bag and the bike next to the university's main entrance, with Mel and Daren on the way to pick me up. Five minutes later, I was in my home-to-be-for-five-weeks.

I dropped into bed at around 4am and promptly overslept the next morning, then decided to use the day for errands, hitched a ride from Laura (the stressed-out Skynet president and Skycon organiser) to an excellent nearby bike store where I reassembled the bike, got myself a lock (see below) and a mud guard for the front wheel, then headed off for the campus bank to open an account, rode back and forth between the Lero building and the bank to satisfy their bureaucratic thirsts and finally obtained the details for my very own Irish bank account. And I squeezed a bit of grocery shopping in between. Meeting Brian (my supervisor) in the hallway, we agreed on a meeting on Monday, so the remainder of this week is for finishing the various proposals and papers on my to-do list, preparing for the meeting by getting back to speed with my research, as well as getting to know the local party crowd exams are about to end in Limerick and I've been told to have picked quite an excellent time of year for my visit because the university will become a mad house this weekend. We'll see how compatible those tasks are, but boy am I glad that I am not living anywhere near the student villages, or as I put it last night: I don't mind going to parties, but if the party comes to where I am, I'd rather not have it be every night. So this would bring me to the title of this post: stuff that I forgot to pack:
  • A second sweater, it's pretty cold here and I don't want to be wearing the same sweater every day (even though it's merino wool and thus woudn't start to smell).
  • A pair of windcheater gloves, the thin wool ones I have aren't exactly made for cycling.
  • Rain trousers to wear over my regular pants. It's raining and wet and the light colours of the pants I am wearing are a high-contrast basis for the mud.
  • My bike's lock key. Fortunately I left it unlocked, but still had to go out and buy a new lock (which was more painless than having the key sent here).
  • Comfy sneakers for home use, as it's too cold to just be wearing socks.
Due to popular request, I shall be back here with pictures of my surroundings one of these days. NP: I Love You but I've Chosen Darkness / Fear Is on Our Side

Next.

Previous.