Search Results: "nate"

25 October 2005

Sergio Talens-Oliag: Desktop Environments and Window Managers

Last week I began again my classes at the University of Valencia, where I work part time. Since I started there I teach Operating Systems' laboratory lessons of the Second and Fourth years of the Computer Science Degree and fortunately all lessons but two are taught using Linux and the ones that are not given in Linux can be done using a DOS emulator like dosbox, so I don't have to use Windows ;) My fist day at the Lab I found out that the Suse version they are using was updated (it's version 9.3); I noticed something weird when I saw the KDM theme, but it was absolutely obvious that it was a newer version when I logged in using my KDE session, as it was absolutely broken. I was using the KDE session because it was the default one there and I used it only to open terminal windows and sometimes a graphical www browser. As I was not interested in fixing my KDE environment I looked at the session options provided by KDM to see if I could use another desktop environment or a window manager and I found some options available, but neither GNOME (my current desktop) nor icewm (the Window Manager I used before) were between them. After trying the available window managers I've decided to use openbox and I'm seriously thinking about getting rid of GNOME and use it as my default for graphical sessions at home. I understand that users might like Desktop Environments, but I don't use them since I started to use Linux, which is funny because I was mostly a Macintosh user, but since I discovered the power of the command line what I want is a graphical environment that can be run using only the keyboard with minimal configuration, something I was able to do with icewm and I currently do with GNOME (although I under use the desktop facilities) and seems I will be able to do with openbox with the added bonus that the default key bindings are almost the same as the GNOME ones.

Martin F. Krafft: US Geek

John, I am also a total geek, with 28.00789%. But those who know me would have ranked me in the upper fifth. The reason? The test assesses geekiness by US standards. That is, if I had grown up doing much the same as I have done, but in the US, I would have scored ridiculously high. Unfortunately, a European pendant is not known to me. In other news, three doctors now diagnosed three different causes for my tendonitis. Fun fun fun. I'll continue to keep away from the keys as much as possible.

Wouter Verhelst: PARISC

In Oldenburg, Joey gave me a PARISC box, an Apollo 715/50. It wasn't complete—no RAM, no hard disk, no CD-ROM or other media—but the system itself seemed complete and functional. Unfortunately, it isn't. I added some RAM that I took from my parent's old computer (196MB in total, IIRC) and tried power on the box. Didn't work. When I powered it up, the machine powers up its fan for a short while before shutting it down again; then the fan moves to a lower rate, and the machine appears dead. Well, mostly so; there's no output on the VGA port, and the LEDs don't do anything anymore, either. But those LEDs would appear to be helpful, if one would know what they mean. Unfortunately, the box came without manual, so figuring out exactly what they mean all by myself is going to be painful. Google to the rescue. I found an archive of the comp.sys.apollo newsgroup, with loads of postings from 2000. One of them also mentions failure to boot, no output, and mentions that all LEDs except one are on at the end. That's the same as what happens here, except that in my case the one-but-last one are on, rather than the last one. A reply suggests that the machine couldn't find the boot disk, and that therefore the box can't be booted. So, lemme get this straight: if the boot disk is having issues (or not available, as in my case), Apollo machines simply decide to not do anything? Fuck. Update: okay, turns out the HP Website still has a PDF of the model 715 service manual, which contains an explanation of the LED error messages. Turns out it means "No Memory Found". Hm. Watch this space.

24 October 2005

Aigars Mahinovs: Finally. I got the reply from Google - they want m...

Finally. I got the reply from Google - they want me to fly-in for an on-site interview. They will handle the flights, hotels, eating and other relevant issues and all I will have to care about is providing good answers to the questions that their engineers will be bombarding me thorough the day.

Unfortunately this silver lining has a little cloud in the middle - USA is out of H1b visas 'till Oct 2006, so I am asked to work at the Dublin office.

When I analysed the locations they gave me in the beginning, the Dublin office scored just below the Mountain View office. The good things were: being closer to Latvia and being inside EU (no visas, easier to travel), and the bad things were: weather and Irish terrorism.

Well ... let's see what they'll offer me in the end and maybe I will go to the Dublin office and then in a year or two transfer to the new Moffet Field facility or to the Chinese office :D

UPD: I am told that my gut feeling about IRA being a threat in Dublin is very far from reality. I must find out more about this city.

Erich Schubert: Wireless and Linux

Christopher Aillon mentioned that people like NetworkManager a lot. While I agree that NetworkManager is something nice, and especially people really expect "Desktop Linux" to have it, there are a lot of other issues. I've tried netapplet, which is I think a predecessor. It looks just as fancy, but it doesn't really solve my needs. And in fact, I don't think NetworkManager can do that either (yet?). As usual, it's a bit more than just picking the right essid and maybe displaying the network strength (which doesn't work in netapplet for me, the hostap driver lists a quality of 0 for all networks, but the signal level value is fine), but also a lot about setting up VPN, encryption, handling network switches gracefully - and last but not least: saving power by disabling wireless when not needed. Also it didn't give me a proper list of networks. It just picked a random one (interestingly not the strongest, actually one I don't see right now...) and never showed the other 5 access points. That doesn't mean of course that NetworkDaemon wouldn't, it's just not in Debian yet, so I didn't try it yet. Guessnet is a nice tool for detecting your network setup. Using mii-tool it can detect whether my network cable is plugged in, and by doing "ifup eth0 ifup wlan0" I can bring up whatever is available. Well, almost except that guessnet also fails to detect my wireless networks (it probably would just need to wait a second for the scan to run). I agree that this is mostly an issue of the wireless driver. But just about every driver has it's own issues, unfortunately. For example, the vanilla orinoco driver doesn't do scanning. The hostap driver doesn't properly power down (right now I'm using some iwpriv hack to disable radio tx to save some power), the ralink driver has been locking up the laptop every now and then... some drivers don't do WEP, others don't to WPA. The wireless keyboard shortcut obviously didn't work either... So maybe, we right now (once more) need more people working on the drivers. Oh, and there are more issues with drivers - for example Scorched3D still doesn't work properly on radeon. The OSS nvidia drivers still don't have 3D. Some bluetooth headsets don't work yet... and the closed source drivers are even worse (a pain to install since they aren't properly integrated in the distributions etc.). So Linux still needs more support by hardware vendors (especially WRT to specs!) as well as more people actually doing the dirty job in C and not just having fun with PHP, Python and Mono.

23 October 2005

Martin 'Joey' Schulze: Berlinux 2005

On Friday and Saturday this year's Berlinux event took place in Berlin, Germany. It's a regional event with a small exhibition and a conference program. The Debian project took part with three talks and a booth, plus Skolelinux, and two companies that demonstrated their Debian-based distribution. On Friday a lot of students visited the exhibition area since it was built more or less in the middle of the usual university maze. The entire exhibition had to be dismantled during the night if the equipment shouldn't get lost in the morning. That way we had the fortune to see more of the building of the Technical University of Berlin that is quite impressive. The building was old, with huge walls and a very high ceiling, paired with wide and voluminous stairs and hallways. A very classical and very nice building. On Saturday there were more visitors and more parallel tracks. It was a bit unfortunate that the exhibition was split into two levels of the building and that the conference rooms were farer away from the exhibition. Getting there meant to walk through the usual University maze since Berlinux was embedded there and not separated from it.

22 October 2005

Andreas Rottmann: A Guile rant

I began to program in Scheme using the Guile interpreter. While I knew that its not blazingly fast, its the official GNU extension language, and as feeling quite close to the goals of the GNU project and the FSF, I felt confident it was the right choice, also considering the supreme quality of other GNU software, such as the GNU toolchain (GCC, binutils, gas) and the Gimp, to name just a few. So, feeling confident with my choice, I started to crank out code and eventually even took over maintainership over a Guile application, namely G-Wrap, after giving it a complete brush-up code-wise. When Tom Lord, of GNU Arch fame (and coincidently a former Guile maintainer), announced the Pika project (a from-scratch Scheme implementation, with ambitous goals), I decided to get on the mailing list and lurk, and later got opportunities to contribute a bit. Unfortunatly that project stalled due to time constraints on Tom’s side. Anyway it was a very valuable experience, as it opened my eyes to other Scheme implementations, foremost Scheme 48. Looking at its code base was a real eye-opener: as opposed to Guile, it was, except for a tiny amount of glue code, written in Scheme; its virtual machine is written in a subset of Scheme called Pre-Scheme that can be compiled to efficient C code, so you get most of the benefits of Scheme and the speed of C. Around the same time I discovered Scheme 48, I got involved in conjure, a make replacement being written in portable Scheme. I split off the library code from it to form a separate project, spells. As spells is basically a layer above the individual Scheme implementations which hides away their differences and presents their features (foremost the module system, but also hash tables, file system access, …) in a portable way, I gained some experience regarding the different module systems and how they compare, and I honstly must say that Guile’s is basically unusable with macros. Here’s why: A decent module system allows for macro code to refer to bindings in the module they are defined in, without requiring these bindings to be also exported; imagine a macro that expands to a call to some helper procedure that should itself should not be visible from outside the module. A real-life example are the reference implementations of SRFI-34 and SRFI-35, which define the helper procedures guard-aux and type-field-alist->condition, respectively. This deficiency (which is not present in Scheme 48, PLT Scheme, Gauche and probably most other Schemes) is really unfortunate, as it makes modules, when used with macros, a lot less usable. This, besides the total orientation toward interpretation and the codebase that is mostly in C are reasons why I’d recommend Scheme newbies also looking at other options before settling on Guile because it’s the “official GNU extension language”, as I did ;) .

21 October 2005

MJ Ray: Will the last ex-UEA-er to leave Norfolk please switch out the light?

A surprisingly high proportion of ex-UEA people stay in the area after finishing at UEA. Over 40% want to, according to the local chamber of commerce. Eventually, that number falls: with John and Brett leaving, I think I can now count on one hand those from my Norwich years (1994-1998) who I know are still here. Most left some time ago. Why? Small place syndrome? Underpaid work? Both? Possibly. It feels like only in Norfolk could the train station start to expand its car park to cope with demand and the same week most train services to it are cancelled because a Cambridgeshire farmer drove onto the single line stretch, was killed and it takes at least a day for access and safety checks in this sparsely-populated area. From the BBC's picture, the unit involved was one of the commemorative King's Lynn "picture trains". You seldom hear what happens to the damaged trains and injured drivers. I guess the railways and the media doesn't like to worry passengers. Even the Potter's Bar investigation ending only got brief mentions that I saw. Also at the train station, local police put out a picture of people they would "like to interview" about the spate of recent bike thefts. Possibly as a result, they've charged one man. Someone I know had a bike nicked, which meant a long walk to/from work until it was replaced. Very annoying. The sort of petty bike vandalism/theft which annoyed savs is also on the increase here again. I'd've expected nicked bikes to sell better in summer, but maybe the local crims are thick or there are more easy-to-nick bikes in September. At least it's not Fakenham, (which is one of the most boring places on earth, you may remember - original source ) where the headline story is that the kerbs are too high. I'm sorry someone was hurt, but kerbs here seem tiny compared to the ones in Northamptonshire. Probably they've all been lowered for safety there too now. As a result of adding Dave's blog to Planet ALUG, I noticed BritBlog for the first time. I spent a while browsing the other Norfolk-based blogs on it one evening. Unsurprisingly, I knew about most of the ones I found interesting already, apart from Ztroller who links to me... erm, why? Does he read this? Most listings are from blogspot and I still won't add Atom support to my blogging software - I want to read, not edit, so Atom is mostly extra cache filler. I only added Really Simple Syndication as well as RDF Site Summary because it was fairly cheap to do and I didn't know about the obvious way to get RSS 1 from Wordpress. Finally, in local(ish) concerns, Northern Ireland, from Noodles' emptiness:
"while I'm ranting, why is the adjective for someone from the UK "British"? Britain doesn't cover all of the UK. I wasn't born in Britain yet I'm British. Can't I be UKish or something?"
I'd hate to be called UKish. I don't have any particular affection for this Kingdom's political boundaries. If the UK ended tomorrow, would anyone besides its rulers mourn? I'll not thank you if you call me British. I'm English, a midlander and Towcestrian. British nationality is a side-effect. (And why is it so hard to get .gb domains anyway?) It's odd that there's such argument over England's anthem. So there is imagery or irony involved in Jerusalem, depending how you want to view it: who cares? It's rousing (unlike the UK dirge) and mentions England past. Yikes, I've just discovered I'm agreeing with Billy Bragg of all people. As for the UK, why don't we work together with others when we agree and work independently when we don't agree? Unfortunately, few politicians advocate English self-rule, apart from racist bigots and English imperialists. The really depressing thing is that those sort of people would probably easily get a majority in any English legislature, if backed by the mess media. Maybe Britain is diverse enough that it balances the extreme English... diverse we are or de verse it gets... (ouch)

20 October 2005

Uwe Hermann: smashmyipod.com - You donate, we smash!

This has got to be the funniest cause someone has ever requested donations for:
After we collect $400 in donations, we will take that money to a local Apple Store. We will purchase the iPod, open it right inside the store, and destroy it right on the spot. The whole thing will be shot on film, and displayed on this site. This is only a social experiment, for the entertainment of the donors, and visitors of this site.
The $400 are raised, so expect the video anytime soon...

19 October 2005

Scott James Remnant: Parallel Peer Programming

Here at Canonical Towers we have several staff who worship at the altar of Extreme Programming, and as such many of the methodologies and rituals prescribed by that religion find their way into our day-to-day working practices. A few of these came together in an interesting way a few weeks ago, and it was suggested by a cow-orker that I blog about it so he could give the URL to people. The first ritual is that of the sprint, I don’t think this is orthodox XP but rather something inspired from it that we picked up from the Python community. With all of the Canonical developers scattered across the globe mostly working from their own homes, it’s become a useful tool; particularly for the Launchpad team. The basic idea for those that haven’t heard of it is simple, and perhaps obvious; you get a selection of the team together in one place, sit them around the same table with particular goals to complete. In effect it’s highly compressed facetime and high bandwidth interaction to nail those tasks that need it, before you head off again and work at a more sedate pace. The second is directly from XP doctrine and is that peculiar observance known as pair programming, something that is often coupled with sprints. For anybody who hasn’t encountered this before, it’s something I’ve always found rather odd. You get two programmers together, both itching to code, and you take one of them’s laptop away; and you don’t just force them to fight over the keyboard either, the laptop-less soul isn’t allowed to touch it. The theory here is that it frees the deprived individual of the hassle of coding and allows them to direct the programmer in ways that may not be immediately obbious, or alternately think about the next bit of work that needs doing. Another interesting side-effect is it can be an interesting way to learn code you’ve not worked with before, if you’re the one doing the coding and you’re being guided what to do by a sage who already knows it. I have a funny story here, so I’m going to digress from the main stream for a moment to tell it. A few months ago I was working in the London office, Mark had been up all night coding and had then given me responsibility to get his changes landed onto the Launchpad mainline. I’m not that hot on quite a bit of Launchpad, and fade to utterly clueless the nearer the code gets to the web application itself; and when trying to merge the two there were conflicts which I needed Mark’s help to resolve. Now as anybody who’s met Mark knows, he’s a pretty good example of a Type-A personality, yet he suggested that we do a spot of pair programming to get the code in and I’d be the one with the laptop as it’d help me get to grips with the affected parts. This hilighted something I’ve always seen as a problem with pair programming, dealing with it when the a person with the keyboard has a totally different way of working to you. In particular, I’m an emacs user, whereas Mark is a die-hard vim user; but also right down to the working directory I would work from, how I test results, etc. When you’re the one without the laptop, this can be quite infuriating, as you know exactly how to solve a problem and the idiot with the keyboard is dithering about doing things you don’t understand just to get there. If you’re a Type-A personality, you generally snatch the laptop away at this point and do it yourself; or at least you would, if you could drive the strange editor the other person uses. I swear Mark was sulking as he gave the laptop back and let me do it. Anyway, there is some relevance to that and we’ll come to it in a moment. The third and final methodology is the concept of unit tests and more specifically test driven development. For anyone who hasn’t come across this before, I highly recommend it; I was suspicious too when Robert Collins took it upon himself to teach me the true way, but now I’m sold. Simply the idea is that if you have any code that doesn’t have another piece of code in a test suite that checks that it’s working correctly, that code is broken. More particularly unit testing involves checking just one feature or requirement at a time, and stacking them together to test all of the code paths. I’ve actually found that this improves the APIs I design, as I write the code in small blocks and functions to make them easier to test. Test driven development takes it even further, you write the unit tests first, before you write the code they’re supposed to test; usually one or two at a time. Obviously these tests will fail at first, it’s then your job to write as little code as possible to make them pass. If your code isn’t right, you add a unit test that will fail, and modify the code to make it pass. This really comes into its own when you’re fixing bugs later, once you’ve identified the bug you write a test case or two that cause the problem; these will of course fail. You can then modify the code to make them pass, and at the same time be sure you’ve not broken other functionality because of the existing test suite. I’ve also found it really useful for particularly complicated or tricky pieces of code, especially those intricate algorithms that do particularly heavy lifting. So onto the event itself, this was a sprint in our London office to indoctrinate Gustavo Niemeyer with the various projects he’d be working on. The goal for this sprint was decided to start the conversion of HCT to Bazaar-NG, and to do this Gustavo and I would pair program. Now my last experience of pair programming had been that story with Mark (see, it had some relevance) and I knew I’d be just as bad if I wasn’t allowed to have the keyboard. I was also acutely aware that if Gustavo was just sitting by and watching, he wouldn’t get much benefit from it either, so he needed to be actively involved in the coding so he could learn the things he’d be working on. I came to what I thought was a pretty neat, and obvious, solution to these problems. We set up my laptop with the code we’d be working on, and on my display were two side-by-side terminals both running screen sessions. Gustavo then set up two same-sized terminals on his, ssh’d into my laptop from both of them and joined the screen sessions. In the left-hand one he ran vi, and in the right-hand one I ran emacs. Thus we both had keyboards, and both had editors, yet could see each other working and even steal the keyboard without danger of violence. We didn’t just sit side-by-side and code on different things though, that’s not pair programming and is just ordinary programming with a bit of a voyeuristic twist. What we did was: in my terminal I started writing the test cases for the code we needed, it was Gustavo’s job to write the code that would make them pass. We actually added a third terminal in which we could run the test cases themselves; so I could run them when I’d added something that would fail, and Gustavo could run them when he thought he’d made them pass again. This turned out to be a rather fun way to work, and at one point I was almost able to try and convince myself that the code was writing itself to pass the test cases I was writing. It also got me thinking that it’d be really neat to use genetic algorithms to breed code to pass test cases.

Peter Van Eynde: Gains and losses

I've removed the hoary and hoary24 sections of the CL package repository I host on p.d.o.
On the other hand I and David D. Smith will adopt the clisp and libsigsegv packages that Will Newton took good care off up until now. We will coordinate the work through the darcs archives on cl-debian.alioth.debian.org.

16 October 2005

Antti-Juhani Kaijanaho: Debya' leHwI' jIH

I've been a Star Trek fan for a long time, and I have been fascinated with Klingons (especially as portrayed in the movies and afterward) and especially their language. I have known for a long time that there is a real (constructed) Klingon language. I've even known a student of the Klingon language for a few years now, but it only recently came to me: I'll start studying it for real. So I bought Marc Okrand's books The Klingon Dictionary and Klingon for the Galactic Traveler and have been studying them since early this week. I already am able to construct simple sentences, and if I look up every word, I am able to understand written Klingon (the Okrand kind of writing, not the funny symbols). The sentence in the title means "I am a Debian maintainer". The word Debya' is not canon, but it'll have to do. I make no warranties that my tlhIngan Hol (Klingon language) is correct, though :) QIn vIvan – end of message

Anthony Towns: Tiffani

So this week’s project was working on dak, in particular getting the tiffani implemention included. What’s tiffani, you ask? It lets you just download the changes to Sources.gz and Packages.gz files, instead of the whole damn thing – if you have main, contrib, and non-free for unstable in your sources.list, this means your apt-get update only needs to download 27.5 KiB instead of 2.85 MiB (for bz2) or 3.75 MiB (for gz). Two orders of magnitude saving’s not bad. I’ve mentioned this previously a few times if you want to see the history, in January I noted some quick hacks which have now been obsoleted by Michael Vogt’s integration into apt (which is in a personal repository, not uploaded to unstable yet…), back in August last year I did a little promotion of the concept, referring back to my post in December 2003 that summarised the analysis done previously, which takes us back to March and April 2002. The server-side implementation, tiffani, is thus a little python script that groks through the list of suites and components dak knows abouts, looks for Packages, Sources and Contents files, and creates a directory names something like Packages.diff which in turn contains an Index file and a number of gzipped patches, named after the time they were created. The process for updating an existing Packages file is to look for the matching SHA1-History entry in the Index file, download the corresponding patch, apply that patch to your existing Packages file, and repeat until your Packages file matches the one you were looking for (which you can determine by looking at the checksum in either the Release or Index file). Anyway, tiffani’s been co-developed with Andreas Barth (aka Andi) after the following exchange back in November 2003 on the RM channel:
<aba> elmo: If I find some time to take a look at katies TODO-file, what would be most appreciated? Deleting udebs with melanie? “Right” handling of orig.tar.gz when jumping out of NEW / changing of the archive section? Something else?
<elmo> aba: the TODO list is a bit of a mess to be honest
<aba> elmo: So, what should I do if I want to help the ftp-masters with katie?
<elmo> aba: I wouldn’t necessarily do anything based off that unless it’s obviously correct/wanted. none of the really urgent stuff is even on there (e.g. testing-security changes)
<aba> elmo: If you tell me something urgent, I can put some time into it.
<aj> hrm, surely i have some wishlists
<aba> urgent wishlist? :)
<aj> actually, you could critique something for me if you’ve got half an hour free now?
<aba> “critique” means?
<elmo> tell him how crap his ideas are. as brutually as possible
<elmo> ;) … <aj> ooo!
<aj> aba: around?
<aj> aba: one useful thing you could work on that’s kinda katie related is implementing pdiffs into katie/apt-ftparchive/apt/whatever
<Kamion> aj: mvo’s been working on that over the last couple of days, see #128818 logs
<aj> apt side or katie side?
<Kamion> apt side
<aj> cool
<aj> aba: hacking up a katie-side implementation for that would probably be interesting, worthwhile and straightforward
(aj = me, aba = Andi, elmo = James Troup, Kamion = Colin Watson) That ended up with me finding an old script I made up called update.py (from Dec 2003 apparently) that did the core patch and Index generation, Andi updating that to some more sane pythonic style and making it work on an actual archive, then both of us cleaning it up so it would actually work sensibly without handholding. (For those playing along at home, the idea needing critiquing was trying to fix up dak’s idea of what should happen if a new version of a package is uploaded to stable or testing, when it hasn’t changed in unstable. At the time, dak would REJECT it, because it violated the requirement that you can’t downgrade packages between stable and testing or testing and unstable. That’s still somewhat broken, unfortunately) TTBOMK, Tiffani’s named after Tiffani Amber Thiessen, apparently of Saved by the Bell and Beverly Hills 90210 fame. I’m not sure who of aba or elmo is more to blame for that one, though I guess it is at least a little more distinctive than update…

Axel Beckert: Galeon, GNOME and all the rest

I feel that I still owe a few answers on the recent Galeon discussion on Planet Debian and apparently also other planets, so here they are… (But I try to keep them short. :-) First, Erich’s question Why are not-gnome users complaining about Gnome? — Because some people do not use GNOME but do use GNOME applications like Galeon. They don’t use them because GNOME is cool, useful, user-friendly or what else — they use them because these applications are cool, useful, user-friendly or so. They would also use them if they were plain GTK or maybe even KDE applications. For example, I also use Gnumeric or AbiWord, because I like them and not because I like GNOME. (Which — in general — I do btw.) I also use KDE applications although I don’t like KDE in general. (I don’t like KDE for much more emotional reasons compared to Galeon 1.3 btw., so I won’t rant about that. ;-) ark is a nice example for a KDE application I like. Unfortunately some distributions seem to have dropped it. At least I missed it recently on some box. Then there was Gunnar Wolf’s question if it wasn’t Galeon 1.2 which went off the path. He maybe right, since I’ve never seen a Galeon version before 1.2 and the fact that the former Galeon lead developer dropped Galeon for the very spartanic Epiphany also suggests that. But since Galeon 1.2 took the right path in my eyes, Galeon 1.3 seemed at least to change (back) again to some wrong path from that point of view. We’ll see if Kazehakase really keeps following the “right” path. JFTR: Interesting to read were also the discussion between Og, Erich and some more in Og’s journal as well as Wouter’s postings on the subject. Oh, and in general: Thanks for the really nice discussion. Rants seem always to get more constructive responses than just asking for them. That’s one reason why I like to rant. ;-) Another reason is that it frees your mind if you know that people have read about what bothers or annoys you. So also thanks to all who followed the discussion (or still are following it if it hasn’t ended yet ;-).

Now playing: Roxette — The Look

Next.

Previous.