<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8822016195546282219</id><updated>2011-08-17T04:03:39.463+02:00</updated><category term='ruby'/><category term='falles'/><category term='pictures'/><category term='Tenerife'/><category term='media'/><category term='gema'/><category term='granda'/><category term='Mayte'/><category term='extinction'/><category term='trips'/><category term='ControllerMate'/><category term='declarative authorization'/><category term='AppleScript'/><category term='vacations'/><category term='apple'/><category term='zeitgeist: addendum'/><category term='sphinx'/><category term='iris'/><category term='mexico'/><category term='human rights'/><category term='updates'/><category term='osx'/><category term='skatig'/><category term='noche blanca'/><category term='mobileme'/><category term='python'/><category term='Finland'/><category term='rails'/><category term='madrid'/><category term='apps'/><category term='el escoreal'/><category term='conil'/><category term='sugarsync'/><category term='flu'/><category term='movida'/><category term='Canada'/><category term='unicode'/><category term='eclipse'/><category term='Jesus'/><category term='work'/><category term='hospitals'/><category term='friends'/><category term='AuthLogic'/><category term='andy'/><category term='jungle'/><category term='mysql'/><category term='cordoba'/><category term='keyboard mapping'/><category term='jonathan'/><category term='programming'/><category term='MTB'/><category term='Logitech mouse'/><category term='michi'/><category term='great nerds'/><category term='pigs'/><category term='Gonzalo'/><category term='django'/><category term='weekend dance'/><category term='widgets'/><category term='brazil'/><category term='renditions'/><category term='xmas'/><category term='jquery'/><category term='rspec'/><category term='blogger'/><category term='administrative'/><category term='the venus project'/><category term='retreat'/><category term='dropbox'/><category term='fnl.es'/><category term='GEO'/><category term='roberto'/><category term='hockey'/><category term='humanity'/><category term='creamfields'/><category term='swine'/><category term='spanish health system'/><category term='requirements'/><category term='skiing'/><category term='Columbia'/><category term='the accident'/><category term='salobrena'/><title type='text'>fnl en españa</title><subtitle type='html'>"about me and my life in Spain"</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.fnl.es/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default'/><link rel='alternate' type='text/html' href='http://www.fnl.es/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default?start-index=26&amp;max-results=25'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>37</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-1555301534794062213</id><published>2010-03-12T21:39:00.004+01:00</published><updated>2010-03-12T22:04:38.355+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rspec'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative authorization'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='AuthLogic'/><title type='text'>Rails: RSpec'ing controllers when you use declarative authorization AND AuthLogic</title><content type='html'>I just had a rough time figuring out how to bypass all the security features of the Rails project I am developing to write decent controller specs with RSpec. I am using AuthLogic as authentication module and declarative authorization (DA) for exactly that. However, when I started to write controller specs that would simulate (HTTP) GET requests, I ran into a wall: I simply could not digg what the cleanest way would be to bypass &lt;span style="font-style:italic;"&gt;both&lt;/span&gt; AuthLogic &lt;span style="font-weight:bold;"&gt;and&lt;/span&gt; DA. Finally, after finding the right queries in Google, I managed to get the necessary snippets. To avoid that the same tedious task might befall you, here's what you need to add, e.g., to your spec_helpers directory - I called the file "controller_helpers.rb":&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;module SessionHelper&lt;br /&gt;  def current_user(stubs = {})&lt;br /&gt;    @current_user ||= mock_model(User, stubs)&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def user_session(stubs = {}, user_stubs = {})&lt;br /&gt;    @current_user_session ||= mock_model(&lt;br /&gt;      UserSession, { :user =&gt; current_user(user_stubs) }.merge(stubs)&lt;br /&gt;    )&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def login(session_stubs = {}, user_stubs = {})&lt;br /&gt;    UserSession.stub!(:find).and_return(&lt;br /&gt;      user_session(session_stubs, user_stubs)&lt;br /&gt;    )&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def logout() &lt;br /&gt;    @user_session = nil&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def disable_authorization()&lt;br /&gt;    Authorization.ignore_access_control(true)&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The trick is that, for AuthLogic, you can now "authenticate" the user by the stubbed UserSession that returns a mocked User model. DA is less complicated: the &lt;code&gt;disable_authorization()&lt;/code&gt; method is all that is needed. Now, in your "spec_helper.rb", you add this line to the top:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;require File.dirname(__FILE__) + '/spec_helpers/controller_helpers'&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And this line somewhere in the &lt;code&gt;Spec::Runner.configure&lt;/code&gt; loop:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;config.include(SessionHelper)&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Now, in your controller specs, it is more than trivial to disable authorization and authentication at once - simply add the following line, e.g., to your &lt;code&gt;before(:each)&lt;/code&gt; definitions:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;disable_authorization &amp;&amp; login&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Voilá - your GET requests pass; and you can even add stubs to your User model, if needed, by adding them as key-value pairs to the &lt;code&gt;login()&lt;/code&gt; call above! So now you can get back to make your specs pass...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-1555301534794062213?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/1555301534794062213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/1555301534794062213'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2010/03/rails-rspecing-controllers-when-you-use.html' title='Rails: RSpec&apos;ing controllers when you use declarative authorization AND AuthLogic'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-831450033923924855</id><published>2009-05-26T23:46:00.001+02:00</published><updated>2009-05-26T23:50:41.197+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dropbox'/><category scheme='http://www.blogger.com/atom/ns#' term='sugarsync'/><category scheme='http://www.blogger.com/atom/ns#' term='mobileme'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>MobileMe vs. SugarSync vs. DropBox</title><content type='html'>&lt;p&gt;I now have tested MobileMe, SugarSync, and DropBox for quite a while to decide which service to buy for syncing my “electronic life” between my Macs (soon I’ll be managing two OSX Server blades, one Mini, and two MBPs!). After this period, there is no doubt to me: I’m syncing my iCal calendars and Address Book content via Google, my bookmarks with XMarks, and everything else via DropBox.&lt;/p&gt;  &lt;p&gt;MobileMe’s iDisk is nothing more than a pain and a piece of junk, which I honestly did not expect. After all the problems they had last year launching Me.com, I thought they would have by now created a working service. But the iDisk and syncing my PIM (Personal Information Manager - I still use Yojimbo, as Evernote’s and Together’s handling of encryption are pure patched add-ons) was just a [bad] joke: You even need to buy extra software if you want to do file syncing, as iDisk’s “offline” sync is so slow and error prone I could not believe Apple dares to offer something like that. So you need to either use Lingon and rsync to sync to your online mode iDisk which doesn’t win a medal for simplicity, or buy something like ChronoSync - and that takes hours (!!!) to ensure 10 GB of data in about 30-40k Files are synced, &lt;strong&gt;every time&lt;/strong&gt;. All the more, ChronoSync may be the fastest and safest syncer in the wild! What finally got me mad was the sync agent using 90% CPU all of the time, at times virtually locking you out of your own machine, while performing almost nothing. Finally, if you ever try to navigate that online iDisk, get yourself a cup of tea, you will have plenty of time to drink it up until that file is open…&lt;/p&gt;  &lt;p&gt;Compared to SugarSync, DropBox with its simplicity and real versioning of files is significantly better performing than SugarSync, espcially if we talk upload and real volume, and if you ever tried SugarSync, it is a resource hugger (not as bad as iDisk, but it will stop your workflow). So in the end the choice for me was based on “mutual exclusion”, there is simply still no service that can hold the candle to DropBox - and just got me Pro account. As I am writing this, I am syncing up dozens of gigs of data to my 50 GB DropBox, and I hardly notice it happening!&lt;/p&gt;  &lt;p&gt;Oh, if you get yourself an account for DropBox, either the free 2 GB or a full Pro account, I would appreciate if you register via &lt;a href="https://www.getdropbox.com/referrals/NTE0NTA0OTk" title="DropBox referral"&gt;this link&lt;/a&gt;, as it creates me some 500 MB extra space for referring you :o).&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-831450033923924855?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/831450033923924855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/831450033923924855'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2009/05/mobileme-vs-sugarsync-vs-dropbox.html' title='MobileMe vs. SugarSync vs. DropBox'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-3718590979443043572</id><published>2009-04-30T13:55:00.002+02:00</published><updated>2009-05-01T05:47:55.558+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mexico'/><category scheme='http://www.blogger.com/atom/ns#' term='flu'/><category scheme='http://www.blogger.com/atom/ns#' term='swine'/><category scheme='http://www.blogger.com/atom/ns#' term='pigs'/><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>News, Swines &amp; Pigs</title><content type='html'>&lt;p style="clear: both"&gt;Usually, I prefer to steer free from the day-to-day news reporting, yet even I have to accept a low level of "noise" if I want to know at least something about the most significant things going on. However, currently I get the overwhelming feeling that the whole news world is grunting and snorting like a pigsty. You guessed it, I am concerned about all this "swine flu" reporting going on. As can be easily demonstrated, this whole "pandemic alert" and panic-making has gone completely out of proportion. It is yet another example of how ridiculous news agencies exaggerate or even blur the facts, and this attitude might be much more lethal than most biological illnesses if measured by its indirect impact.&lt;/p&gt;&lt;span class="fullpost"&gt;&lt;p style="clear: both"&gt;First of, some flu virus classification: There are three types of influenza virus: A, B, and C. B and C play only very minor roles as they mutate slower, are less virulent, and affect far less species. Usually, when talking about a flu virus, type A is implied. Type A influenza then is further categorized by the HxNx nomenclature. The H refers to the hemagglutinin (HA) lectin and the N to the neuroaminidase (NA) glycoprotein. Both are found on the outside coat of the virus particle. HA mediates the virus' binding to target cells, while NA is responsible for the release of progeny virus from infected host cells. The numbers denote the antibody response of the virus, ordered by historic discovery - meaning, a virus with the same H/N number is identified by the same &lt;em&gt;type&lt;/em&gt; of antibodies, which form part of your immune system/defense. HA and NA are essential for the virulence (the relative ability to cause disease) in terms of infectiveness and the epidemic capabilities of the strain. H1N1 denotes the class of flu virus HA/NA proteins that is the most commonly found form in human influenza. Our immune system defends us by recognizing mainly those two proteins (the "antigenes") through our antibodies. This means, from a pure immuno-defense point of view, this kind of strain is the most well known to the human body and immune system. This is one of the reasons why the new Hong Kong avian flu, with its H5N1 composition, is much more virulent than the current H1N1 swine flu or any other "regular" flu.&lt;/p&gt;&lt;p style="clear: both"&gt;Endemic states and lethal properties: H1N1 most deadly appearance and the worst pandemic in modern human history was what we now know as the "Spanish Flu" in 1918; This specific influenza virus transformed its endemic properties (the ability to propagate within one kind of species, in this case birds) to a panzootic state (affecting animals including humans - epizootic would be the intermediate state that does not affect humans). Note that this pandemic occurred during WW I, largely facilitating its spread. In general, any kind of virus capable of overcoming the species barrier is potentially more dangerous, as it is likely to carry genetic material and protein structures the newly infected species has never seen before, therefor being much more virulent and lethal than the existing endemic strains. However, the Spanish Flu killed somewhere around 20 million people (taking conservative, low estimates), and its symptoms were so strong it was often misdiagnosed as some much more severe infection. Apart from the HA/NA properties already mentioned, there is the actual RNA (viruses commonly use RNA instead of DNA to carry their genetic information) that a virus uses to encode its proteins and other functions that are important to the survival and impact of a virus. Our immune defense looks for RNA sequences those are different to any sequence found in our body and "destroys" those foreign sequences by cleaving the strands into non-functional pieces with the help of so-called RNases. For this to work, the immune system therefor has to identify the RNA [as foreign]. But a strand of RNA coming from another species might actually contain nucleotide base sequences our immune system does not recognize (because it only recognizes already &lt;em&gt;known&lt;/em&gt; foreign sequences), making the virus much more lethal. This process of changing the RNA and protein configuration is amplified by two related mechanisms called "genetic drift" and "antigenic shift". In the case of the Spanish flu, the RNA was very "new" to the human's immune system and had a very high mutation rate: how often the RNA sequence changes, roughly the meaning of the aforementioned genetic drift and antigenic shift. On the contrary, the new "Mexican" swine flu virus has a very similar RNA composition to regular virus strains found in humans, i.e. it does not appear to be significantly more leathal than any other flu. The only known difference to the regular flu circulating in humans is that it seems to affect more younger than older people, possibly due to the fact that older people's immune systems already have "seen" a similar version of this virus some time ago and therefor have antibodies that recognize the HA/NA glycoproteins.&lt;/p&gt;&lt;p style="clear: both"&gt;Now compare this swine flu against any regular flu by numbers: The regular flu kills about 250,000 to &lt;em&gt;half a million&lt;/em&gt; people &lt;em&gt;per year&lt;/em&gt;. This overhyped swine flu managed to kill &lt;em&gt;eight&lt;/em&gt; (8!) humans so far and it has been confirmed to have infected about 150 people worldwide (WHO data, 29th of April, 2009). I.e., on a daily average about a &lt;strong&gt;thousand &lt;/strong&gt;&lt;strong&gt;times more&lt;/strong&gt; people die from the regular flu than this new strain. Regular flu is almost continuously spreading somewhere in the world, i.e., if the WHO took this into account, we would be living in a nearly constant influenza pandemic. The swine flu just now made it to the last stage before &lt;em&gt;even being defined&lt;/em&gt; as a WHO "pandemic": There must be a few known infections in at least two countries. Recall this definition and check the real numbers when somebody is talking about a new "pandemic". The infection with swine flu seems to be no more lethal than with any other flu, so your chances of dying from the swine flu outside of Mexico are so marginal it makes no sense to take them into account, while if you do go to Mexico, all you seriously need to do is make sure your current health state is good enough to survive any flu anywhere, which is much more prevalent and 1,000 times more likely to kill you by a global statistic&lt;em&gt;.&lt;/em&gt; But the main point is: there is nothing dangerous or wrong about going to Mexico, at least concerning the flu. I would be much more worried about drug gangsters and hijackers there if I were you: They managed to kill several thousands of people this year alone already. In other words, the WHO rulings and suggestions, that are close to ridiculous given the circumstances, combined with the media hype are about to isolate Mexico from the world, which leads me to my final and most important point.&lt;/p&gt;&lt;p style="clear: both"&gt;In general, this "pig-hyped" flu without any review of its background, no factual content, and exclusively based on beliefs and propaganda has only one really worrisome influence: it is weakening and isolating Mexico, both socially and economically. Our ignorance to real facts are estimated to cost Mexico &lt;em&gt;City&lt;/em&gt; ("D.F.") alone around $88 million &lt;em&gt;per day&lt;/em&gt;, and this figure will need huge updates for the crash Mexico's main (legal) economic sector, tourism, will suffer, plus the costs incurred on the country as a whole. This number will be similar to or more likely even exceed the daily cost of the U.S. oil war in Irak (estimated to about $250 million, in case you didn't know) - the only good news being that instead of about 100 (direct, not counting the indirect toll, which is estimated to be around five times higher) deaths per day, the swine flu's daily death toll is still below one. In other words, the combined direct and indirect negative impact of this insubstantial media hype on a close to imaginary "Mexican Flu" will cost and destroy much more lives than the virus itself most likely ever will have been capable of. Media propaganda crusades against a country nowadays have the same socioeconomic impact as the largest "real" war in decades if measured by the daily cost. Keep this in mind the next time you read news about swines from pigs.&lt;/p&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-3718590979443043572?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/3718590979443043572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/3718590979443043572'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2009/04/news-swines-pigs.html' title='News, Swines &amp;amp; Pigs'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-6994233412050033998</id><published>2009-04-27T23:23:00.076+02:00</published><updated>2009-05-01T06:13:20.714+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unicode'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Why I love Python 3.0: Unicode + UTF-8</title><content type='html'>&lt;p style="clear: both"&gt;Sorry if this is a nerdy topic, but it might be more than useful for anybody intending to write programs that use more than the ASCII characters (A-z, 0-9, and some symbols), which, given how i18n'ed most applications are today, is rather the norm than the exception. I also hope to encourage my fellow Pythoneers to update to 3.0 as soon as humanly possible, not only because of this change, but because of the general advantages of Python 3.0 (aka "no-where near 3000"...).&lt;/p&gt;&lt;span class="fullpost"&gt;  &lt;p style="clear: both"&gt;In case you do not understand the difference between Unicode and String arrays, here is a short paragraph to get you started. A String (str in pre-3.0 Python, bytes/bytearray in Python 3.x+) is a byte-array already &lt;em&gt;bound&lt;/em&gt; to a specific character-lookup table (e.g. ASCII, Latin-1, UTF-8, etc.) to find the correct representation for that String. Note that this is not the &lt;em&gt;glyph&lt;/em&gt; itself you see on-screen, as this depends on, e.g., what font you are using, and is handled by the GUI toolkit or the terminal. A Unicode array (unicode in pre-3.0, str in 3.x+) on the other hand is an array of "universal" bytes, so-called &lt;strong&gt;code-points&lt;/strong&gt; usually managed as two-byte arrays, but has no native representation. Therefore, to create something readable from an Unicode object, you have to &lt;em&gt;encode&lt;/em&gt; its bytes by using a codetable, such as ASCII or UTF-16, to the correct String representation ("&lt;em&gt;bind&lt;/em&gt; the Unicode array to a code table"). On the contrary, to create a Unicode array from a String array, you need to &lt;em&gt;decode&lt;/em&gt; ("unbind") the String's coding to get the "universal" (in quotation marks as not all programming langues have to use base 16 integers (aka hex, or two bytes)) Unicode. If you are not used to thinking in these terms, a general tip for pre-3.0 Python: your program should, when handling String input (SAX parsers for example already do the conversion for you), convert it to Unicode (decode the Strings), and when outputing your Unicode arrays, convert them back to the desired String representation (encode them) - while working with Unicode internally to avoid bugs and possible exploits. A (rather stupid, but you can interpolate the danger, I hope) snippet from Python's Unicode HOWTO might exemplify this:&lt;/p&gt;  &lt;pre&gt;&lt;code&gt;&lt;br /&gt;def read_file(filename, encoding):&lt;br /&gt;    if '/' in filename:&lt;br /&gt;        raise ValueError(u"'/' not allowed in filename")&lt;br /&gt;    else:&lt;br /&gt;        return open(filename.decode(encoding), 'r')&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;p style="clear: both"&gt;&lt;br /&gt;Looks good at first, but what about sending that function a String not in any standard encoding? For example, the UTF-7 encoding for u"/etc/passwd" is "+AC8-etc+AC8-passwd" - a nasty mistake if that file is presented to a user... (the work-around in this trivial example is obvious: just decode before the if-clause - or, even better, when the string enters your program - and compare to u'/'). To summarize, in Python (not so in C, for example!) a Unicode array consists of two-byte elements (base 16 integers) called code-points, Strings are arrays of bytes which are bound to a codetable that helps the Python interpreter look up the bytes' character representations and send them to your terminal or GUI. Unicode to String conversion is called encoding ("binding"), String to Unicode conversion is decoding ("unbinding"). The fact that, when using the Python shell, you see "real" characters for a String or Unicode object is pure convenience and should not distract you from how they truly work internally.&lt;/p&gt;  &lt;p style="clear: both"&gt;After this lengthy Unicode vs. String intro, the best news first: if you can allow yourself the luxury to program with any Python version and are not dependent on external libraries, Python 3.0 is just made for you: The new native String object is always a Unicode representation, and the default encoding chosen for representing your strings is UTF-8. In other words, if you use Python 3.0 and are happy with UTF-8, you no longer have to worry about decoding your (byte) strings to Unicode arrays or binding your Unicode code-points to the right (byte-) string representations. While this might seem like something that should have been done long ago, for historic reasons older programming languages (plus Python pre-3.0) use ASCII as the default encoding, meaning you had to look after de-/encoding the whole time when working with input/output functionality of your programs and using most other languages other than English - and even there you might want to have special characters (don't be so naïve...). Sad side to this: what I am talking about here is standard in Java... &lt;/p&gt;  &lt;p style="clear: both"&gt;However, you no longer need to worry with 3.0: First, the totally useless old String object (str) has been removed (to be exact, it could be said it is now "integrated" into the bytes and bytearray objects), including the even more ridiculous "encode" method for old str objects: bytes and bytearray only support a "decode" message (to the new Unicode str objects), while the intended use of str.encode, transforming Byte objects that were represented as str objects in pre-3.0, like zip or base64, now has to be done through a new method called "translate" on the new bytes and bytearray objects in 3.0, or via encode on the new str object. This was a dangerous duck typing strategy to have str.encode in pre-3.0: as Unicode objects can and should have this method, too, but as you could not tell if you were calling encode on a Unicode object or a String object (without something like writing &lt;/p&gt;  &lt;p style="clear: both"&gt;&lt;code&gt;assert isinstance(my_obj, unicode)&lt;/code&gt;&lt;/p&gt;  &lt;p style="clear: both"&gt; before every call to encode, at least), you could have been decoding Unicode and encoding Strings - and because Python was (yes, was (!) - see below) as "nice" as to do auto-coercion for you, without very thorough testing libraries such a bug could go unnoticed for a long time in pre-3.0. So, my praise to whomever was responsible for that decision!&lt;/p&gt;  &lt;p style="clear: both"&gt;On the other hand, the unicode object is now the new str object, sans the even more useless and dangerous "decode" functionality: the new (Unicode) str object only supports str.encode (for cases where you want something else than UTF-8), while str.decode is finally dropped from the Python Standarad Library. Obviously, you might have a system that does not want UTF-8, and encoding your Unicode str to whatever schema you need with str.encode the whole time would be a pain; To define a different encoding globally, Python uses your "coding" declaration in the first lines of your program as the default encoding schema for all your new, shiny Unicode str objects. I.e., writing &lt;/p&gt;  &lt;p style="clear: both"&gt;&lt;code&gt;# -*- coding: funny-arab-dialect -*-&lt;/code&gt;&lt;/p&gt;  &lt;p style="clear: both"&gt; will be enough if you have some strange language sporting glyphs that require characters not found in the Unicode consortium's codetables, or you might want to set it back to ASCII (the default in pre-3.0) if you really need to ensure nothing other than good, old "7-bit" is output by your program. On a side note: UTF-8 is compatible with ASCII, while UTF-16 is not; i.e., an ASCII string encoded using the UTF-8 codetable still gives the right characters, trying this with UTF-16 encoding does not - and a good explanation why we have still not moved to UTF-16 in general.&lt;/p&gt;  &lt;p style="clear: both"&gt;Finally, the really dangerous auto-coercion of Python between Strings, Unicode representations, and Byte arrays is gone for good. Your message's argument types must now match the receiving object's type and comparisons between the different types always evaluate to false. This last change might sound drastic if seen from a purely rapid prototyping view, but everybody with some intent on not going crazy while programming will greatly appreciate this change. The bugs and exploits stemming from wrong (en/de-) coding, or, let's say, too much duck typing the str and unicode objects in pre-3.0 Python (yeah, I love to put the fault on somebody else...) are finally gone! Also, as all Strings are now represented as Unicode str objects, you no longer need to worry if, while comparing two str objects, they are using the same encoding - which was another fountain of bugs in pre-3.0 Python - as any String is internally managed as universal Unicode.&lt;/p&gt;  &lt;p style="clear: both"&gt;What is left to say? These changes are dramatic (even if they should have been made already long ago with 2.0), and it will take a while until Python 3.0 will have replaced 2.7 (the final, upcoming stable 2.x release, which will warn you about code that will break with 3.0). But the message should be clear: the effort of converting your libraries to the next generation of Python is more than worth it, and the 2to3 converter should help if you had your encoding/decoding correct. If not, converting to 3.0 might help you uncover some nasty bugs you were not even aware of! Other reasons to "convert" would be: &lt;/p&gt;  &lt;ul style="clear: both"&gt;&lt;li&gt;no more longs, which are now ints and unlimited in size (think of what happend when reaching maxint before...),&lt;/li&gt;&lt;li&gt;generator/views from most operations formerly returning lists (think: time used for creating and garbage collecting those temporary lists),&lt;/li&gt;&lt;li&gt;function annotations for metaclassing and advanced decorators,&lt;/li&gt;&lt;li&gt;nonlocal scope (similar to LISPs lexical scope),&lt;/li&gt;&lt;li&gt;dictionary comprehensions ("{k: v for k, v in my_dict}") and set literals ("my_set = {1, 2}"),&lt;/li&gt;&lt;li&gt;and tons of streamlining the syntax and Standard Library.&lt;/li&gt;&lt;/ul&gt;  &lt;p style="clear: both"&gt;Exec Summary:&lt;/p&gt;  &lt;p style="clear: both"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th align="left"&gt;Python pre-3.0&lt;/th&gt;&lt;th align="left"&gt;Python post-3.0&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;str&lt;/td&gt;&lt;td&gt;bytes/bytearray&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;str.encode&lt;/td&gt;&lt;td&gt;bytes.translate or (new) str.encode&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;str.decode&lt;/td&gt;&lt;td&gt;bytes.decode&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;unicode&lt;/td&gt;&lt;td&gt;str&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;unicode.encode&lt;/td&gt;&lt;td&gt;str.encode&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;unicode.decode&lt;/td&gt;&lt;td&gt;&lt;em&gt;n/a&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;str("x") == unicode("x")&lt;/td&gt;&lt;td&gt;bytes("x") != str("x")&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;  &lt;p style="clear: both"&gt;&lt;/p&gt;  &lt;br class="final-break" style="clear: both" /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-6994233412050033998?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/6994233412050033998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/6994233412050033998'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2009/04/why-i-love-python-30-unicode-utf-8.html' title='Why I love Python 3.0: Unicode + UTF-8'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-2179236109599466399</id><published>2009-04-01T23:23:00.004+02:00</published><updated>2009-04-03T12:09:52.369+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vacations'/><category scheme='http://www.blogger.com/atom/ns#' term='pictures'/><category scheme='http://www.blogger.com/atom/ns#' term='Mayte'/><title type='text'>Pictures of our Argentina-trip</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/36975541@N03/sets/72157616231170298/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3449/3404264801_8bfc4f6854_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/36975541@N03/sets/72157616231170298/"&gt;Houses of la Boca II&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/36975541@N03/"&gt;fnl.es&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;Here are the pictures of Mayte's and my trip to Argentina. We went to Buenos Aires, Iguazu, and the La Rioja region, which boasts two national parks and several national reserves, a wonderful region. Fotos are now hosted on Flickr, as I do not like that face-recognition stuff from Google coming up and want to keep my private data as decentralized as possible (email and this blog is far more than enough already). Hope you do not mind!&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-2179236109599466399?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/2179236109599466399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/2179236109599466399'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2009/04/pictures-of-our-argentina-trip.html' title='Pictures of our Argentina-trip'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3449/3404264801_8bfc4f6854_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-1444607023959138557</id><published>2008-10-19T20:36:00.005+02:00</published><updated>2009-05-01T06:17:14.601+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='widgets'/><title type='text'>Shoutbox</title><content type='html'>&lt;p&gt;While checking out the new countdown widget, I also came across this &lt;a href="http://www.shoutmix.com/"&gt; Shoutbox&lt;/a&gt; thing. Anybody can (more or less) anonymously leave me a short message, to which everybody then can reply. Nice little add-on if you just want to say hi, but not post to a specific blog entry, I believe. (The chat window is to the right if you have not seen it.)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-1444607023959138557?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/1444607023959138557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/1444607023959138557'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2008/10/shoutbox.html' title='Shoutbox'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-8069487138095945509</id><published>2008-10-19T19:26:00.005+02:00</published><updated>2009-05-01T06:17:57.301+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='widgets'/><category scheme='http://www.blogger.com/atom/ns#' term='Mayte'/><title type='text'>Countdown timer widget for Mayte</title><content type='html'>&lt;p&gt;After much searching around, I finally found a cool widget for the countdown to my next reunions with Mayte. In case you want something like it, its easy to create. You can even copy this (or any version) around to all sorts of sites, like Facebook, etc.. Nice! You can create your own &lt;a href="http://www.yourminis.com/details_mini.aspx?uri=yourminis/yourminis/mini:countdown&amp;ac=1"&gt;here&lt;/a&gt;. My version is in the top right corner, duh…&lt;/p&gt;&lt;br /&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-8069487138095945509?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/8069487138095945509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/8069487138095945509'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2008/10/blog-post.html' title='Countdown timer widget for Mayte'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-781480535200923905</id><published>2008-10-05T04:36:00.007+02:00</published><updated>2009-05-01T06:21:29.044+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='the venus project'/><category scheme='http://www.blogger.com/atom/ns#' term='zeitgeist: addendum'/><title type='text'>Zeitgeist Addendum: The Venus Project</title><content type='html'>&lt;p&gt;I just sent a mail to some of my friends of whom I hope they might be interested in this subject. I am sure this will be a very hot topic in certain circles very soon; So I was giving this some thought if I should publish this entry on my blog or not. My final conclusion is that I give a damn if anybody can, will, must, etc. associate me with the content of this documentary I am describing and linking to here. I just think it is to important for humanity - and much more than 10to100 if you allow me this joke and understand it because you followed the news lately - than that it should be a question of my personal integrity needing protection, as the content is &lt;strong&gt;highly controversial&lt;/strong&gt; and more anarchistic in its nature than anything I have encountered in my life so far.&lt;/p&gt;  &lt;span class="fullpost"&gt;  &lt;p&gt;However, before reading on, I want to remind you that you are a free person and as such are free to stop reading this blog or watching the documentary to which I will be linking you at any time - I think it is awesome, but I can well imagine you may not. Also, I saw the first Zeitgeist movie and thought it was rather extreme and not offering any solutions, just another of these “everything is bad” documentaries we have out there already, but no real content. Well, this second release just starts out the same again, and in the first twenty minutes (sorry, it will take two hours of your time, but if you like what I write here, I promise you, it’s worth every second) I was very tempted to turn it down had there not been the financial disaster in the US and my feeling that this documentary might give me some answers. I promise you, watching this movie will do way more than letting you understand what just has happened the last two weeks. Enough blabla, let’s see what you might be into and if you want to see it.&lt;br /&gt;&lt;br /&gt;First, Zeitgeist: Addendum (which I think should be called revelation…) will explain the current situation of the world and how things tie up to the situation we are in. If you do not understand this part, you might want to look at the first Zeitgeist, but it is actually irrelevant to the cause. The second part speaks straight from my heart, and what I, too, believe is true: we - as in humanity - now have the technology to create a self-sustainable, free, and, most importantly, equal society. It will also explain you why there is no long-term need for the military, the police, the government, laws, economy, and many other things we were trained/taught to believe are unrelenting (de:unbeugsam, es:irreductible), essential, and necessary elements of human society. This leads into the third part, showing you something I have never seen before: a possible future, and - this is why I stated that I have never seen this before - as a more beautiful vision than I had imagined even in my wildest dreams. This is probably the most crucial part of the whole movie: you can accept it or not, and I - obviously - cannot promise you (for now) that it all will become reality one day. But allow me to dream… Finally, and this is what makes this movie so exceptional, it explains you something I was missing in all these documentaries I have watched so far, even better than just a possible future: it gives you five very simple tasks to accomplish which will be more than sufficient to make this future our reality if we reach a, what they call, “critical mass” - although I still believe it is not a question of if we do it, just when (as in before we eradicate ourselves from this universe). OK, enough from me, I think the movie will either disgust you or whatever, or you will have the feeling I am just now having: my eyes were never that wide open (and no, I’m not on any drugs ;-)).&lt;br /&gt;&lt;br /&gt;The second and maybe much more important link is the one to the Venus Project itself, which is the core element of this movie. You will much better understand its extraordinary implications after watching the movie, but are free (…) to give it a look right away.&lt;br /&gt;&lt;br /&gt;Yours - never more - truly, flo&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zeitgeistmovie.com/"&gt;Zeitgeist Movie Site&lt;/a&gt; (download - or buy - Addendum - or both, hell)&lt;br /&gt;&lt;a href="http://www.thevenusproject.com/"&gt;The Venus Project&lt;/a&gt;&lt;/p&gt;  &lt;/span&gt;  &lt;br /&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-781480535200923905?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/781480535200923905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/781480535200923905'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2008/10/zeitgeist-addendum-venus-project.html' title='Zeitgeist Addendum: The Venus Project'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-2445537408709105728</id><published>2008-09-12T23:35:00.006+02:00</published><updated>2009-05-01T06:23:00.217+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Canada'/><category scheme='http://www.blogger.com/atom/ns#' term='Gonzalo'/><category scheme='http://www.blogger.com/atom/ns#' term='trips'/><category scheme='http://www.blogger.com/atom/ns#' term='Finland'/><category scheme='http://www.blogger.com/atom/ns#' term='Mayte'/><category scheme='http://www.blogger.com/atom/ns#' term='iris'/><title type='text'>What were you up to this summer?</title><content type='html'>&lt;p&gt;Obviously, from the huge gap between this and my last post you probably already have imagined, mine was quite busy. To sum it up: I went to Canada, then Mayte - that is my gorgeous girlfriend in case you still don’t know! - was in Madrid for a whole month (happy me!!!) ad we went to Tarragona, a city to the south of Barcelona, and to Bilbao. Finally, I had to prepare for a talk in Turku, Finland, which was the last “station” for me this summer. Well, here are some experiences and pictures for you to share.&lt;/p&gt;  &lt;span class="fullpost"&gt;&lt;br /&gt;&lt;p&gt;First things first, I’ll start with the Canada trip. This was more or less all payed by my institute because I went to the world’s largest bioinformatics conference, the ISMB in Toronto, to present my &lt;a href="http://bcms.bioinfo.cnio.es" target="_blank"&gt;BioCreative MetaServer&lt;/a&gt; project the first time. Reception was quite good, and my boss and I were both quite happy. The hotel we stayed at, although expensive, was rather crappy: The second day we got back, a colleague of mine found another guy in his room, just taking a shower! After some inquiries at the desk, they could not “determine” how the mistake happend and the manager went up with my friend to clear the matters up. The guy there the even refused to change the room! So my friend finally decided to do the only logic thing and moved to another room… Nice hotel, especially considering we were paying almost Can$ 200 a night! The city of Toronto itself is very US-like, with skyscrapers and a downtown that gets all crappy and full of homeless people during the night. I also was kind of annoyed by the way people act there - everyone is just a bit too friendly for my taste, it seems more like a show than for real. Finally, the city surely is cosy in winter: all the center is connected with tunnels so you do never have to go outside - brr, that makes me freeze just thinking of it! Another funny thing: while we were there, the largest bike theft ever was going on; later the police caught a bike seller stealing most of them - they found a whole 2,800 (!!!) bikes in his home, his shop, and in various garages he had to rent to store all those bikes!&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" type="application/x-shockwave-flash" flashvars="host=picasaweb.google.com&amp;amp;captions=1&amp;amp;noautoplay=1&amp;amp;RGB=0x000000&amp;amp;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fflorian.leitner%2Falbumid%2F5245259114494135713%3Fkind%3Dphoto%26alt%3Drss" height="267" width="400"&gt;&lt;/embed&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Mayte’s stay here without doubt was my personal highlight this summer, and maybe even this year: she found a way to be here a whole month, which we spent together almost every day (well, at least the nights…). It will be a while before we can spend that much time together in a row again! Anyways, apart from some good going out to “terrazas”, bars and fancy night clubs here in Madrid, getting some even better dancing done and listening to the latest electronic beats, we also did two trips to the north of Spain and had a nice afternoon one weekend getting out of the city sprawl and enjoying the great countryside - of which you can ascertain yourself in the photos below. We went to Tarragona together with Iris and Gonzalo to a Spa-Hotel with all sorts nice luxury like Saunas, swimming pools, baths, massages, golf course, etc. and had a very nice and relaxed weekend while celebrating Iris’ birthday. Actually this is a really special occasion, as Iris usually loves to be with many people and gives great parties with very many people (and nice Spanish and Mexican girls … not that it would be any of my business nowadays!). The second trip we made to Bilbao, enjoying the great landscape there, making the obligatory - and worth while! - visit to the Guggenheim, as well as having a heavy night out during the opening of the Semana Grande, which had spectacular fireworks. While we were sitting in the grass watching the fireworks, a group standing next to us with two guys and a girl was watching just as delighted - when suddenly a really huge explosion filled the whole sky above us in a startling view of little stars falling down from the sky. The girl got rather frightened, jumped, and ran a bit, when she finally just ducked “for cover” on the grass. I admit it was not nice of us, but we had to laugh. Then her boyfriend turned his head toward her and with a very nonchalant voice asked: “Que tienes?” (“What’s up with you?” - “Was hast’n?”). The somewhat frightened girlfriend returned to his side, while we keept giggling every other time a huge rocket exploded and she started to make leeway… Well, apart from that we had a great breakfast, too, with champagne and caviar, of which I am sorry to say, I cannot give details. So, this city is really worth a visit, especially if you have a person along who knows her way around town, the bars, and the beaches. One day the time was ripe for Mayte to go back, and I finally gave up my plans of taking here hostage and let her go back - and now she is happy and far away from all the bourgeois western world in South America… Man, do I miss her company!&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" type="application/x-shockwave-flash" flashvars="host=picasaweb.google.com&amp;amp;captions=1&amp;amp;noautoplay=1&amp;amp;RGB=0x000000&amp;amp;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fflorian.leitner%2Falbumid%2F5245254210965365825%3Fkind%3Dphoto%26alt%3Drss" height="267" width="400"&gt;&lt;/embed&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;The third and final trip this summer was going to Turku. What, you really do not know what or where Turku is? No worries, I didn’t either. To be honest, it took me some time to find an acceptable travel route to that place… But every Turku inhabitant will quickly assure you that you missed out on history: it was, until about a hundred years ago, the capital of Finland, and is also the oldest town to be found in that part of the world. So, you might be asking yourself quite rightfully, what-the-hell was I doing in such a remote location? Well, I was attending a text-mining conference there: the SMBM’08 (Semantic Mining in Biomedicine) and was giving an almost one hour long presentation about my platform. So you can imagine it took my quite some time to prepare the talk and the data to present, and, as I never had given a talk of that length, quite some cups of tea (thanks to a tip from Mayte!) before the talk to keep me calm. As a result, I had the feeling the presentation was quite some success and the response from the audience more than good. Anyhow, the “real” success will have to be measured when seeing how many new participants I could attract to the platform with this presentation - time will tell! Apart from work, we had a great boat tour through the hundreds of tiny islands along the coast, went to a Finish smoke Sauna with heated baths - you cool yourself of by jumping into the (very cold) sea! - and a great dinner. This had a rather funny ending, when the organizers fooled around with me: there was a quiz about Finish wildlife, which I apparently won. They gave me a bottle filled with transparent liquid and some finish text explaining the contents. Without much thought I assumed it was vodka and immediately got some shot glasses and shared the bottle with the conference attendants. Much to our surprise, it did not have the taste of vodka, but was a special kind of water extracted from birch trees… I guess, I have to rethink my attitude about alcohol! As for the Finish people themselves, there are some quite notable things: first of, it really is true, they are blond, almost all of them! Second, and I really was quite astonished, I never met that many friendly - and really friendly, not that artificial stuff you find in the US and Canada - people in any country before. The only thing why I think they are slightly crazy occurred to me when, while walking through town at about 15 ˚C, with jackets and long pants, we passed by an outdoor, public swimming pool: it was full of Fins “simulating” that it still was summer!&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" type="application/x-shockwave-flash" flashvars="host=picasaweb.google.com&amp;amp;captions=1&amp;amp;noautoplay=1&amp;amp;RGB=0x000000&amp;amp;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fflorian.leitner%2Falbumid%2F5245263296170460561%3Fkind%3Dphoto%26alt%3Drss" height="267" width="400"&gt;&lt;/embed&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Well, I am sure I forgot to cover some stuff, but then the post is already long enough as it is. To all of you, have a nice autumn, enjoying the last rays of sun - if you do not live in Spain!&lt;/p&gt;  &lt;/span&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-2445537408709105728?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/2445537408709105728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/2445537408709105728'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2008/09/what-were-you-up-to-this-summer.html' title='What were you up to this summer?'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-4113858006772064557</id><published>2008-06-24T12:44:00.005+02:00</published><updated>2009-05-01T06:28:32.102+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='renditions'/><category scheme='http://www.blogger.com/atom/ns#' term='human rights'/><category scheme='http://www.blogger.com/atom/ns#' term='humanity'/><title type='text'>Are we going back to the early middle ages?</title><content type='html'>&lt;p&gt;The recent reports on renditions of terrorism suspects have reached an alarming rate. Compare what happened during the middle ages and what is occurring now again with slightly different circumstances:&lt;/p&gt;  &lt;p&gt;If you have one of these characteristics, you might be a witch/&lt;em&gt;terrorist&lt;/em&gt;:&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;Red/&lt;em&gt;Dark&lt;/em&gt; hair,&lt;/li&gt;&lt;li&gt;green/&lt;em&gt;dark&lt;/em&gt; eyes,&lt;/li&gt;&lt;li&gt;female/&lt;em&gt;non-caucasian&lt;/em&gt;.&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;If you are considered a “target” by these traits, you can be “rightfully” tortured by the inquisition/government.&lt;/p&gt;  &lt;span class="fullpost"&gt;&lt;p&gt;Governments worldwide, including most likely yours, are actively ignoring our most basic rights in the name of “safety”. More and more people are disappearing into “black sites”, tortured and ill-treated for years and years - at levels where even the inquisition was not as bad as compared to what is happening here and now, today. On the other hand, we Japanese, EU, and US citizens have fought for so many centuries to arrive at a status where everybody should understand the necessity for human rights, free speech, etc.. It took two world wars and millions of deaths to realize these trivial facts. Now governments are openly taking away your rights from you again, trying to tell you they are “protecting” you from a threat that virtually does not exist. And even if it would exist, it does not give anybody the right to destroy the life of any living person at their very foundations. If you do not act now, you are either yourself approving that anybody, including you, may be tortured for the sake of “security”, or are ignorant enough to believe this will simply “go away” again some day.&lt;/p&gt;  &lt;p&gt;Please, do not let this continue; do not let humanity fall back into a state that is even worse than the middle ages. Any day you spend not protesting against these inhuman and useless acts of random force against humanity you are indirectly killing and torturing, too. Any day this continues, your rights will deteriorate&lt;/p&gt;  &lt;p&gt; more and more. If you do not protest, you are leaving the governments of this world with the right to kill and torture people at will. If you do not raise your voice, you, too, are part of this machinery, killing and torturing because your silence is equal to agreement in a democratic world. Act now, and raise your voice against this madness - while we still have the right of freedom of speech (or do we?).&lt;/p&gt;  &lt;p&gt;POST-EDIT: On an interesting side note, the only &lt;a href="http://www.petitiononline.com/stoper/petition.html"&gt;petition where anybody worldwide can sign&lt;/a&gt;, has exactly 139 signees at the time of this writing. How sad…&lt;/p&gt;  &lt;p&gt;POST-POST-EDIT: At least, there is an Amnesty International page against Guantanamo Bay and illegal US torture &lt;a href="http://www.tearitdown.org/"&gt;here&lt;/a&gt;, which almost 140,000 people have signed so far - even though I think it should be dozens of millions if humans were capable of using their head…&lt;/p&gt;  &lt;p&gt;POST-3-EDIT: And another very good video from AI published yesterday on the subject: &lt;a href="http://www.amnesty.org/en/news-and-updates/video-and-audio/no-justification-for-torture-20080626"&gt;Torture can never be justified&lt;/a&gt;.&lt;/p&gt;&lt;/span&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-4113858006772064557?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/4113858006772064557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/4113858006772064557'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2008/06/are-we-going-back-to-early-middle-ages.html' title='Are we going back to the early middle ages?'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-7500165846606172674</id><published>2008-06-03T16:53:00.014+02:00</published><updated>2009-05-01T06:29:23.006+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='sphinx'/><title type='text'>Creating a full-text indexed, ajaxian website - part 1</title><content type='html'>To my dismay, there is no complete guide how to get a nice, full-text indexed website up and running easily with some of my favorite tools. Therefore, I am giving you a guide here how to use the &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; IDE to create a nice &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt; WDF-based site on top of a &lt;a href="http://mysql.com/"&gt;MySQL&lt;/a&gt; DB engine together with the &lt;a href="http://www.sphinxsearch.com/"&gt;Sphinx&lt;/a&gt; full-text indexing and search engine and some simple AJAX calls using the &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; JavaScript library to have autocompletion on the searches. I am using Apple OS X Leopard, so my examples might be slightly biased towards that system, but I will keep the OS-specific parts to a minimum.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;h3&gt;1. Installation&lt;/h3&gt;&lt;br /&gt;I will not walk you through the installation procedures of these things (most stuff is easy and straightforward) except if there is some special attention to be payed; &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; 2.5 should be installed on OS X 10.5 already.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://easyeclipse.org/site/distributions/index.html"&gt;EasyEclipse&lt;/a&gt; (much quicker to install and maintain than the "real" Eclipse); &lt;a href="http://easyeclipse.org/site/plugins/index.html"&gt;Plugins&lt;/a&gt; you will need are: "Eclipse Web tools editors", "Eclipse Data Tools", and "PyDev". Additionally, choose any other tools you might deem necessary. Note that not all plugins are available for EasyEclipse 1.3 still, so you might want to use 1.2.2 if you need plugins not available for 1.3 (available ones are marked with a *) and/or check that first.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.djangoproject.com/download/"&gt;Django&lt;/a&gt; (check out the SVN version, it provides much more functionality than 0.96 stable; see &lt;a href="http://www.djangoproject.com/documentation/install/"&gt;installation instructions&lt;/a&gt;)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://dev.mysql.com/downloads/mysql/5.0.html"&gt;MySQL&lt;/a&gt; (get version 5.0, last stable - if you want a newer version, make sure MySQLdb and Sphinx work nicely with it; this is tricky, follow the &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/installing-cs.html"&gt;installation instructions&lt;/a&gt; for your OS closely)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.sphinxsearch.com/downloads.html"&gt;Sphinx&lt;/a&gt; (get version 0.9.7 to work nicely with &lt;a href="http://code.google.com/p/django-sphinx/"&gt;django-sphinx&lt;/a&gt; or check the latest supported Sphinx version)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://docs.jquery.com/Downloading_jQuery"&gt;jQuery&lt;/a&gt; (latest available version &lt;span class="Apple-style-span" style="font-style: italic;"&gt;usually&lt;/span&gt; works best, no guarantees...)&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Next, you will have to get the "glue" between Django and Sphinx, Django and SQL, and the jQuery Autocompletion plugin:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/django-sphinx/source/checkout"&gt;django-sphinx&lt;/a&gt; - a Django module to create search interfaces for your Django object models.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=22307"&gt;MySQLdb&lt;/a&gt; - the Python DB client for MySQL; Important: installing this library on OS X Leopard will cause troubles, you need to edit some lines in the code - see below.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/"&gt;jQuery Autocomplete&lt;/a&gt; - used to do autocompletion with AJAX calls in jQuery&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;1.1. Some hints&lt;/h4&gt;&lt;br /&gt;Installing Django, MySQL and MySQLdb on Leopard can be a bit of a hassle, at least the MySQLdb part. &lt;a href="http://projectmouse.org/2013/InstallingDjangoforLeopardwithMySQLSupport"&gt;Here is a complete setup guide&lt;/a&gt;. Also, Python installations (specifically, site-packages) on Leopard can choose one of two possible locations:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;/Library/Python/2.5/&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The first is just an ancient artifact, the real place for your Python stuff is the second. I got so annoyed by this, that I finally moved everything in the fist path to the real location, deleted the directory "2.5" and then did:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;ln -s /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5 /Library/Python/2.5&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Voila, everything always goes to the same place.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;1.2. Tutorials you might want to look at&lt;/h4&gt;&lt;br /&gt;If you are new to the world of databases or need a short introduction to MySQL, work through &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/tutorial.html"&gt;this tutorial&lt;/a&gt; to get you up and running.&lt;br /&gt;&lt;br /&gt;There are &lt;a href="http://www.fabioz.com/pydev/manual_101_root.html"&gt;some guides&lt;/a&gt; by the PyDev developer which you should read to get Python to work in Eclipse:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.fabioz.com/pydev/manual_101_interpreter.html"&gt;Configuring the Python interpreter in Eclipse&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.fabioz.com/pydev/manual_101_project_conf.html"&gt;Creating a Python project in Eclipse&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;You might want to read through some other tutorials to, but these two are essential.&lt;br /&gt;&lt;br /&gt;Finally, if you are completely new to Django or even the whole world of WDF (web development frameworks), I strongly advise you to work through the four pages of the &lt;a href="http://www.djangoproject.com/documentation/tutorial01/"&gt;Django tutorial&lt;/a&gt;. Also, there is an excellent Eclipse/PyDev/Django &lt;a href="http://pydev.blogspot.com/2006/09/configuring-pydev-to-work-with-django.html"&gt;tutorial here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;2. Setting up a Django project in Eclipse&lt;/h3&gt;&lt;br /&gt;Following those guides, set up a new PyDev project, say "Django Sandbox", together with the source folder ('&lt;code&gt;src&lt;/code&gt;') for Python 2.5. Now we will create the Django base files in the project using the terminal. Change to your Workspace folder you set up for Eclipse and go into the src folder of the project (&lt;code&gt;ECLIPSE_WORKSPACE/Django\ Sandbox/src&lt;/code&gt;). For the next command to work, you should have the files in &lt;code&gt;$PYTHONPATH/django/bin/&lt;/code&gt; in your &lt;code&gt;$PATH&lt;/code&gt; variable (see the Django installation instructions), or call the command directly.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;django-admin.py startproject sandbox&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;To see the newly created files in Eclipse, right-click on the &lt;code&gt;src&lt;/code&gt; folder and choose "Refresh". Check in the terminal everything is working:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;python manage.py runserver&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;should produce:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Validating models...&lt;br /&gt;&lt;br /&gt;0 errors found&lt;br /&gt;Django version 0.97-pre-SVN-7568, using settings 'sandbox.settings'&lt;br /&gt;Development server is running at http://127.0.0.1:8000/&lt;br /&gt;Quit the server with CONTROL-C.&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Next, we get the development server running in Eclipse. Choose "Run-&gt;Run..." from the menu, and select "Python Run" in the Run window, then press the "New" button. Name it "Django Sandbox default", associate it with the project and choose &lt;code&gt;manage.py&lt;/code&gt; in the &lt;code&gt;src/sandbox&lt;/code&gt; folder as the main module. Change to the Arguments tab and add &lt;code&gt;runserver --noreload&lt;/code&gt; as the program arguments. If you now press the "Run" button, you should get just the same output in the Eclipse Console as we saw before in the terminal. If this is working, you basically have just managed to set up your IDE to develop Django sites in Eclipse. If not, have a look at the Django tutorial and the PyDev/Eclipse/Django tutorial linked above for more detailed information. Next we need to tell Django where our database backend is py editing &lt;code&gt;settings.py&lt;/code&gt; in Eclipse:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;DATABASE ENGINE = 'mysql'&lt;br /&gt;DATABASE_NAME = 'django_sandbox'&lt;br /&gt;DATABASE_USER = '`echo $USER`'&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Password, host and port can stay empty usually, if we have set up a user on localhost with no required password and the default MySQL port. Also, as this is a nice little test system, we will disable all default Django apps, by commenting the array values in the &lt;code&gt;INSTALLED_APPS&lt;/code&gt; variable in &lt;code&gt;settings.py&lt;/code&gt; we do not need (all of them). Next we actually need to create the database in MySQL (start MySQL up in you System Preferences if you did the default installation without autostarting MySQL). You could log into your database on the terminal and run:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;me@home:~[1]$ mysql -u $USER&lt;br /&gt;mysql&amp;gt; CREATE DATABASE django_sandbox CHARACTER SET 'utf8';&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;But, we are using Eclipse, so we will be doing all our database work from Eclipse, too. In case you so far have never connected to your database from Eclipse, see &lt;a href="http://dev.eclipse.org/newslists/news.eclipse.newcomer/msg10175.html"&gt;this post&lt;/a&gt; on how to quickly set up a "&lt;span style="font-style: italic;"&gt;connector&lt;/span&gt;" (probably you will have to download the appropriate JDBC driver for MySQL).&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Change to the database view in Eclipse ("Window-&gt;Open Perspective-&gt;Other..."). In the "Data Source Explorer" navigator window to the left you can now see your connector from the submenu "Databases" (I called my connector "MySQL localhost").&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Go into properties (right-click the new connector and choose "Properties") and make sure you are connecting as a user with the ability to created databases and make sure it connects to the database "mysql". Finish by connecting to your "mysql" database in the server by right-clicking on the connector back in the navigator window.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Next, we create a simple SQL file to create databases from the menu "File-&gt;New-&gt;Other...", select "SQL-Development-&gt;SQL File" and associate it with our project ("Django Sandbox"). I named the file "Create Database", using connection profile type "Generic JDBC_1.x", name "MySQL localhost" (or whatever you called your connector). Choose "mysql" as the database.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Now copy the &lt;code&gt;CREATE DATABASE&lt;/code&gt; statement from above into the new SQL file editor view (without the "mysql&amp;gt;" part, obviously...) and save. If you are connected to the mysql database, all you need to do now is right-click in the editor and select "Execute All".&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;If all went well, in the lower part of the pane, you should see a nice success message in the "SQL Results" window. I do understand this sounds slightly overblown to create a database, but it should give you a good feeling how to do all you database work from inside Eclipse. (screenshot will follow). Finally, you can create a new database connector in the Database view to your newly created django_sandbox database which you will use later on to inspect your database, etc..&lt;br /&gt;&lt;br /&gt;That is it! You have started and set up a new Django project in Eclipse, created the database, and connected to the database from inside Eclipse. Not much maybe, but this is quite a milestone. Congratulations! In the next part we will create a Django application, add some dummy models and fill the database with data to index.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-7500165846606172674?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/7500165846606172674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/7500165846606172674'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2008/06/creating-full-text-indexed-ajaxian.html' title='Creating a full-text indexed, ajaxian website - part 1'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-4040557865656542906</id><published>2008-05-24T15:04:00.004+02:00</published><updated>2008-05-24T15:39:20.290+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pictures'/><title type='text'>New Photos added!</title><content type='html'>Finally, I managed to take some time to upload the photos to my &lt;a href="http://picasaweb.google.com/florian.leitner"&gt;Picasa albums&lt;/a&gt; I promised long ago in previous blogs and added a dozen new ones to the Madrid Snippets album. Enjoy!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://picasaweb.google.com/florian.leitner/MadridSnippets"&gt;Madrid Snippets&lt;/a&gt; (continuos)&lt;/div&gt;&lt;div&gt;&lt;a href="http://picasaweb.google.com/florian.leitner/SierraNevada"&gt;Sierra Nevada&lt;/a&gt; (March 2007)&lt;/div&gt;&lt;div&gt;&lt;a href="http://picasaweb.google.com/florian.leitner/SalobreAWithGema"&gt;Salobreña&lt;/a&gt; (May 2007)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-4040557865656542906?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/4040557865656542906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/4040557865656542906'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2008/05/new-photos-added.html' title='New Photos added!'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-6228741237803274642</id><published>2008-05-24T01:37:00.006+02:00</published><updated>2009-05-01T06:35:15.758+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vacations'/><category scheme='http://www.blogger.com/atom/ns#' term='Mayte'/><category scheme='http://www.blogger.com/atom/ns#' term='Tenerife'/><title type='text'>My first visit to a volcano</title><content type='html'>Actually, I already was considering myself very lucky this year visiting the jungle in the Amazons. I would have not thought I could repeat such an experience that soon again, but was proven wrong shortly after. A few weeks ago, my girlfriend spent some weeks in Spain and we used the last long weekend we had together to go to Tenerife, Canary islands. There I had the pleasure to visit yet another really strange and amazing place in our world: a volcano! My girlfriend, who grew up in Mexico, thought it was quite funny I had not seen a volcano before... Well, she has not been on a glacier so far :-P. I can only recommend this place - if you do not know where to go for a short trip for a few days, you just have found it. We rented a very romantic small house on the north-eastern tip of the island, far away from all the tourist places. The owner renting it to us (Juan Ramón) is a very kind and friendly guy, and he even went into the trouble to send me my keys and a whole load of money I forgot in the house - without even taking a cent for the troubles, although I kept insisting! (Anybody knowing me don't laugh! Okay, I know, typically Flo...) The house itself is built into the cliffs, with a marvelous view over the sea and the beach below, and a great terrace. Mayte, my girlfriend, found it and I can only say this was a great choice. If you feel like renting it, find the link [&lt;a href="http://www.casas-turismo-rural.com/alojamiento.phtml?alojamiento=2740"&gt;here&lt;/a&gt;].&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;We spent five days there, which is just enough time to visit the island in a hurry - time flew by like nothing. You have to ask permission to access the volcano in the capital city, Santa Cruz, which will then be granted to you for a following day at a certain hour. Naturally, we managed to be there too late the next day, but arrived again the day after and the friendly guys guarding the entrance let us up anyways. Oh, and pleeease dress appropriately: you can't imagine the scores of stupid girls trying to walk a volcano in high heels and with almost nothing on - freezing to death at 3.700 m ASL and not able to walk in the rocky area... Well, at least this allowed us to be completely alone at the top of the crater! Another great feat of the park is, as it's at 2000+ m ASL, that even if it's cloudy down on the beach, it might be a gorgeous day in the park!&lt;br /&gt;&lt;br /&gt;Enjoy the pictures below and get an impression of what it's like there. Otherwise, one last word of warning: do not take residence on the south side of the island except if you like artificial touristic sprawls: the whole area is one urban block of concrete and completely hideous. As far as I can tell, the north-east tip is best, maybe the (north-)western areas may have some nice hideaways from the touristic towns, too. As for the climate: just expect 20-25 ˚C in winter, 20-30 ˚C in summer - great! One final recommendation if you like driving on narrow, curvy mountain roads: rent a powerful car - I haven't had so much fun riding a car in a long time!&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="400" height="267" flashvars="host=picasaweb.google.com&amp;amp;RGB=0x000000&amp;amp;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fflorian.leitner%2Falbumid%2F5203709646458249825%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;/center&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-6228741237803274642?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/6228741237803274642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/6228741237803274642'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2008/05/my-first-visit-to-volcano.html' title='My first visit to a volcano'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-6118230900353372667</id><published>2008-04-14T00:06:00.012+02:00</published><updated>2009-05-01T06:37:28.115+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vacations'/><category scheme='http://www.blogger.com/atom/ns#' term='Columbia'/><category scheme='http://www.blogger.com/atom/ns#' term='jungle'/><category scheme='http://www.blogger.com/atom/ns#' term='Mayte'/><title type='text'>Amazons 101</title><content type='html'>Colombia is one of the most magnificent countries I have been so far. If you know a tiny bit of its history with all the bloody civil wars which have been almost continuously tormenting the country since the 40s, it is more than astonishing to find that the people themselves are very open and friendly. The lush green on the countryside and the amazing beaches on the coasts, mixed with some really high mountain peaks allow for a variety you will not find in many other countries. Finally, as it is next to the equator, the climate is almost all year round the same: warm and mostly sunny (well, Bogotá is at 2,600 ASL, so bring a warm jacket for that city...).&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;The current president, Uribe, is sending military forces everywhere in the country to protect the civilians and tourists from attacks from guerilla and paramilitary groups. Although you might not agree that this is the best solution to the problem, you have to admit that he so far is probably the most successful president in terms of restoring relative security  - at the great price of sacrificing the peoples personal freedom, obviously; Colombia probably never has been as safe in the past few decades as it is now - and it has by far less hostage-takings per year as most uninformed people would make you believe (by now, something below 600 per year). In my travels, I never felt more unsafe than in any place in Europe - at least if you learn to ignore that at every second corner you see a small group of military personnel or police.&lt;br /&gt;&lt;br /&gt;Both major cities I visited, Bogotá and Cartagena, are really nice cities - although the crazy traffic and taxi drivers in Bogotá can make you feel a little ill to you stomach... Especially Cartagena is really worth the visit, the old town being built in a style slightly similar to the houses here in Extremadura, Spain - and not without reason probably, as most Conquistadores came from this region of Spain. Yet, the bright colors and plenty of flowers and green give the town a very unique and lovely look. Last but not least, Cartagena is on the Caribbean coast and therefor you have plenty of wonderful beaches to choose to spend your day. On a general advice: usually, you take boats to get to those beaches, which leave from the town center. Insist, really, to be taken there by a tiny private boat (not more than 20 or so passengers) and do not take one of the big ships: it cuts your beach stay in half, you are dumped at a super-touristic aquarium nobody seemed interested in anyway, and spend the boat time with hundreds of Colombian families (including everything from grandmother to great-grand child). Not that it was my worst experience ever, but there are more fun ways to waste your time...&lt;br /&gt;&lt;br /&gt;The major part of our travels - with my [now (*kiss*)] girlfriend Mayte and two of her friends from Portugal and Spain, Xana and Ivan - we spent in the Amazons. It is hard to describe the experience of visiting the jungle, but if you have been to a real desert, on top of high mountains or glaciers, or other really strange places, you know what I am talking about. The biodiversity is so amazing you will never be able to go back to a zoo or botanic garden without a knowing smile on your face. I have no idea how many different plants I saw - including the Victoria amazonica, the largest lotus in the world - but when one of our guides was telling us about which plant heals what while in the jungle, I got the impression of walking though a pharmacy... The animal life is just as amazing: alligators, snakes, birds in all varieties and kinds, spiders, sloths, insects of all sizes, piranhas (we even caught our own - but as far as I can tell, it takes more chicken meat to catch them than they yield :-)), even dolphins (which get a pink tint when they hunt because of their circulation - a really unique view) - plus all the ones I now missed to list.&lt;br /&gt;&lt;br /&gt;Moving around the jungle might seem tough and dangerous at first - and I make a bet it is, if you try to move cross-country straight through the jungle for days. We were not intending to do that - we were moving along the Amazonas river only - and always had at least a hut to sleep in, with beds and mosquito nets in the most "extreme" cases. Most of the time we spent in villages and towns (Leticia -&gt; Puerto Nariño [a little jewel in the Colombian Amazons and a must visit] -&gt; Leticia/Tabatinga -&gt; and Manaus) in hotels, where you do not even need to use mosquito nets. The greatest danger is you doing something stupid on your own. The interested might want an advice on what to bring, so I'd pack:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;lots of insect repellent (we used Relec extra fuerte, about 1 bottle [100 mL each] per person and week),&lt;/li&gt;&lt;li&gt;a light rain protection (if it rains really heavy - which it does more or less every morning - just forget  protection... this is more for windy times and such),&lt;/li&gt;&lt;li&gt;some long-sleeves and long pants (protection against sun and/or while hiking in the jungle),&lt;/li&gt;&lt;li&gt;decent (!) hiking shoes,&lt;/li&gt;&lt;li&gt;very strong sun protection (factor 40 or more - I used 60!),&lt;/li&gt;&lt;li&gt;a towel (no, this is no Hitchhikers Guide joke :-) - preferentially, one of those micro-towels to save space and weight),&lt;/li&gt;&lt;li&gt;a flashlight,&lt;/li&gt;&lt;li&gt;a small first aid kit with antibiotics against diarrhea, pills to dampen fever and Malaria effects (Ibuprofen 600, Malaron - just in case - I strongly advise against taking those Malaria pills on the trip as prevention if you do not go jungle-trekking for many days! The side effects are rather ugly, and actually the pills only reduce the effects of Malaria, they do not really help prevent it.),&lt;/li&gt;&lt;li&gt;a very light (I used silk) sleeping bag, and&lt;/li&gt;&lt;li&gt;something to pass time (books, card games, etc. - hey, it's Colombia, no need to hurry :-)).&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Well, instead of boring you with ever more details of my trip, I'd say have a look at some of the pictures, and I might bet you will be calling your travel agent...&lt;br /&gt;&lt;center&gt;&lt;embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="400" height="267" flashvars="host=picasaweb.google.com&amp;captions=1&amp;RGB=0x000000&amp;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fflorian.leitner%2Falbumid%2F5186463606877000385%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;/center&gt;&lt;br /&gt;On a final shout-out: many thanks to my amazing travel companions (aka "los pendejos/tottos"...) and some very special ones to the most gorgeous girl in the world I am more than just happy to have become close with during this trip: You provided me with one of the most exciting travels I ever have made!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-6118230900353372667?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/6118230900353372667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/6118230900353372667'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2008/04/amazons-101.html' title='Amazons 101'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-2156024593515247485</id><published>2008-03-22T14:05:00.003+01:00</published><updated>2008-03-22T14:15:08.758+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vacations'/><category scheme='http://www.blogger.com/atom/ns#' term='Columbia'/><title type='text'>Amazonas experience</title><content type='html'>My first week here is over and we will be moving from Columbia into Brazil for the second part of the trip. All my mates and me are fine, and things are running very nicely. I will not spend much time writing now, but I can promise you this is one of the strangest, most beautiful, hot and damp places I ever have been to. People are great, for some odd reason food is delicious (everybody keeps assuring me that the Columbian kitchen is very booring...), and the less visited sites in the Jungle just feel like being in paradise. The most unusual thing is that I acustomed to the sleeping times here: you go to bed after 9 or so, and get up early, before 6 - and I do not even feel strange about it! I am taking tons of pictures (forgot the cable, so I can't upload atm) and my next post most likely will be when I am back in Spain, together with a ton of pictures of amazing places and wildlife.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-2156024593515247485?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/2156024593515247485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/2156024593515247485'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2008/03/amazonas-experience.html' title='Amazonas experience'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-7329085534750923945</id><published>2008-03-06T20:15:00.007+01:00</published><updated>2009-05-01T06:47:23.403+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vacations'/><category scheme='http://www.blogger.com/atom/ns#' term='Columbia'/><category scheme='http://www.blogger.com/atom/ns#' term='jungle'/><category scheme='http://www.blogger.com/atom/ns#' term='Mayte'/><title type='text'>Preparing for the Jungle</title><content type='html'>After some busy weeks implementing my first project, the &lt;a href="http://bcms.bioinfo.cnio.es"&gt;BioCreative MetaServer&lt;/a&gt;, I am finally getting close to some big vacations after a few years without! The plan is to go to Columbia, first a few days enjoying beach life in the Caribbean, Cartagena, to acclimatize to the heat, and then moving on to Leticia, in the south-east corner of the country, and in the middle of the Amazons. There we will have a few trips around the place, getting acquainted to the jungle. Then, the plan is to take a boat down the river to Manaus in Brazil, enjoying real wilderness detached from civilization (a bit, at least). From Manaus we will have another four-day trip into the jungle. Finally, it all rewinds going back to Spain by plane. I will be accompanied by Mayte, the Mexican girl who introduced me to Madrid when I arrived here, plus four other pals from Columbia, Spain, Italy and, I think, South Africa - so we will be quite an international group! Mayte has become a very good friend of mine and as she constantly works in very remote locations I am really looking forward to see here again after such a long time only communicating via chat.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;So what to take? Well, I packed some light equipment, most clothes are made of thin cotton with long sleeves, tons of DEET (anti-mosquito spray), a serious medical and first-aid-kit, and some nifty little extras I do not want to miss like soft, European toilet paper, bite relief, iodine-based water purifier, a Leatherman, orange-redish sunglasses (contrasting to the jungle's green!), or a headlamp and candles. All that stuff is contained in dry bags, which are then stowed in a water resistant rucksack/bag. I hope I will not need every last piece of stuff, but I just want to bet on the safe side rather - yet, after some discussions with Mayte, I did remove some hardcore survival gear from the list (like a water filtration system, an epinephrine-pen, or the Sawyer pump (for snake bites)). Actually, the most annoying part so far was getting all the vaccinations, six injections in total. As I had five of them at once, I was feeling rather dizzy for a few days after - so don't believe the doc if he tells you it does not matter if you take them all at once or not! And then you're not even protected from Malaria, the most severe problem in the jungle...&lt;br /&gt;&lt;br /&gt;Well, I'll be leaving on friday next week, and will be back in April, when I will let you know what it was like and what is really important (and what I forgot...)!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-7329085534750923945?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/7329085534750923945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/7329085534750923945'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2008/03/preparing-for-jungle.html' title='Preparing for the Jungle'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-2922421712601128271</id><published>2007-12-15T16:20:00.002+01:00</published><updated>2009-05-01T06:48:23.349+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spanish health system'/><category scheme='http://www.blogger.com/atom/ns#' term='hospitals'/><category scheme='http://www.blogger.com/atom/ns#' term='xmas'/><category scheme='http://www.blogger.com/atom/ns#' term='skatig'/><title type='text'>Homecoming</title><content type='html'>Well, after some time with way too much work, I decided I'd use this hour to update my blog a bit. As for the title, I'll be in Innsbruck (brr, I'm already feeling the cold...) a few days for christmas, from the 22nd to the 25th, so I am looking forward to my first New Years eve here in Madrid, eating the traditional twelve grapes... Sorry for anybody at home!&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Finally, I'm back on my feet again and walking around without those damn crutches since the first of december. Yesterday, I even was trying on some new hockey skates and do hope to be on the game again by January - you can't imagine how much I miss it. For now, I'm compensating the missing sports component with some nights out and realized yesterday that I actually even have no problem shaking around the dancefloor a bit - at the cost of a huge whisky hangover I'm suffering from just now...&lt;br /&gt;&lt;br /&gt;So about this whole health system here in Spain - as I said, my experiences are very bad with it, and after talking to some people here, it seems I even was lucky: they "only" lost my diagnosis and needed a few days to redo all the stuff, but I've heard of people which might have cancer where their blood sample went missing - it took them two months just to realize that the sample was gone! Anyways, there is so much bad stuff going on, I'll just give you one advice: if you have a stay in a spanish hospital, make sure you have somebody talking spanish look after you, best every day. And make sure that person is very good at telling others what to do. I was asked several times if I do not have any relatives here - and looked at very puzzled faces when I told them that I was on my own... However, the best solution is, if you are severely injured, to get back to a first world country, at least health-wise. As for all the glory details, I decided not to write about it, because it just makes me feel bad to even think about it, so just take this as a word of warning.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-2922421712601128271?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/2922421712601128271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/2922421712601128271'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2007/12/homecoming.html' title='Homecoming'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-3670810481177025781</id><published>2007-11-12T21:26:00.001+01:00</published><updated>2009-05-01T06:48:48.004+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='the accident'/><category scheme='http://www.blogger.com/atom/ns#' term='MTB'/><category scheme='http://www.blogger.com/atom/ns#' term='Jesus'/><title type='text'>Mountainbiking in town is dangerous...</title><content type='html'>Recently (about 3 weeks ago), I bought myself a mountainbike (MTB for now) to have some more sports apart from our regular street hockey club. Jesus, a team mate, offered to take me with him on his next Sunday excursion. So we went to the north of Madrid, to Cercedilla, where you can find mountains as high as 2,400-and-something meters, while Cercedilla itself is at about 1,100. Quite impressive, as I did not imagine to find such heights close to Madrid (1/2 h ride from the outskirts in a car). Jesus, having a Specialized Stumpjumper (if you know MTBs, you probably just had a cool breeze running down your spine reading this), and that's not any version - he has the absolute pro stuff with about the best component for each part you can have (i.e., you better use 5 digits if you wanna estimate its price...), so I knew this would be a tough one for me. Well, Jesus prove to be very patient and a good motivator, as he kept chatting to me even on the last, really tough 300 m like we were going flatlands... So, finally I made it to a lower peak if 2,000-and-something, which I think is still OK - more than 800 m on my first tour - proved to Jesus I'm tyrolean... Below see some pics of the tour.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Yet, what happened during my second tour probably is not as fun... The next time, I was (actually, am, but... well, read on) covered in work, so on a holiday Thursday, instead of leaving Madrid, we went to the local park, Casa de Campo (about as big as my hometown, Innsbruck), which has a few hills and especially some interesting trials - it is even a fixed point in the MTB world championships! So looking forward to some technical fun and some jumping around, of we went. Yet, at a particular difficult passage with several successive jumps I probably over-estimated my abilities (after all, I had not been biking anything serious for 8 years now, or so) and did not land back into the trail but slightly next to it - enough for a fullstop, anyways. So I and the bike went crashing into the last jump, and while I was rolling over it, the bike luckily wasn't. ...and thus ended my trip to the city park in pain... My friend called the ambulance - yet, the police arrived first (...) - and they transported me off to a hospital. What I think is really ridiculous although is, in all my MTB-life, I never had a bad accident going down crazy slopes and being on high mountains; but once I go to a damn city park, I almost disable myself. So that's life, eh?&lt;br /&gt;&lt;br /&gt;&lt;embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="400" height="267" flashvars="host=picasaweb.google.com&amp;captions=1&amp;RGB=0x000000&amp;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fflorian.leitner%2Falbumid%2F5132052930289169537%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;So I had been in the hospital a tenday (which in itself is a story to tell, and a weird one, too - just to give you an advice: make sure you never have to go to a Spanish hospital (or three, like me...); blog will follow ;P) and now am back home and will be fine again in 3-4 weeks according to my (last) doc - back to hockey in December maybe even - or so I hope! Therefore, I'm working from home, but can't move. So I have PLENTY of time to work on my blog, watch unwatched movies, etc. etc. etc..&lt;br /&gt;&lt;br /&gt;One last shoutout: THANKS, JESUS AND IRIS, FOR ALL YOUR HELP DURING MY HOSPITAL STAY!!!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-3670810481177025781?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/3670810481177025781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/3670810481177025781'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2007/11/mountainbiking-in-town-is-dangerous.html' title='Mountainbiking in town is dangerous...'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-5750152734409259007</id><published>2007-11-12T16:22:00.001+01:00</published><updated>2007-11-12T20:59:57.468+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Logitech mouse'/><category scheme='http://www.blogger.com/atom/ns#' term='keyboard mapping'/><category scheme='http://www.blogger.com/atom/ns#' term='ControllerMate'/><category scheme='http://www.blogger.com/atom/ns#' term='AppleScript'/><title type='text'>AppleScript, ControllerMate and Microsoft keyboard/mouse configuration</title><content type='html'>Sometimes, not having a Windoze system can be a pain if you wish to use all these nifty peripherals available, which come only configured for the Micro$soft &lt;del&gt;operating&lt;/del&gt; crashing system. So being educated computer users, we set out on the trip to get things to work. Well, if you are on Linux, you will start hacking away with vi in a terminal, while reading out system key events in another term and then changing the xkbdmap etc.. But, being sophisticated Apple users, we snort at such excessive hacking and want something clean and easy. Want no longer, it is doable in a short number of clicks and (with my code here) copy-pastes, but (yeah, I know...) costs you 15 bucks - if you don't want to spend that money, you can always go back to hacking the keyboard mapping - after all, it's a Unix system! OK, so if you are willing to spend this money (and hey, it's more than worth it!), read along. One last word of warning: you should have a fair amount of computer savvy, I will not explain every last single step and ControllerMate has a learning curve of about 1/2 to two hours (deps on your INT stat...) if you need to understand what we are doing here.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Prerequisites&lt;/em&gt;: download/purchase &lt;a href="http://www.orderedbytes.com/controllermate/"&gt;ControllerMate from OrderedBytes&lt;/a&gt; for the said $ 15 and get it installed (requires a restart). Open the application (ControllerMate). Oh, and maybe do read up a bit about the app you are buying (RTFM).&lt;br /&gt;&lt;br /&gt;First we will create a new controller page by pressing the green P button in the bottom left of the main window. In the Inspector Window, you can change the name of the page to something appropriate - like in the screen shot, to MX_Revolutions, as this is the base setup for the Logitech MX Revolution mouse. This will be the final result (exclusive sneak preview!):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j4t4_9dOtNM/RziAJQZjdGI/AAAAAAAAAdM/jD7r20gFwVQ/s1600-h/Screenshot_1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_j4t4_9dOtNM/RziAJQZjdGI/AAAAAAAAAdM/jD7r20gFwVQ/s320/Screenshot_1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5131992671898006626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_j4t4_9dOtNM/Rzh0IwZjdEI/AAAAAAAAAc8/JOtQA4QLOb0/s1600-h/MX_Controllers.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_j4t4_9dOtNM/Rzh0IwZjdEI/AAAAAAAAAc8/JOtQA4QLOb0/s320/MX_Controllers.jpg" alt="" id="BLOGGER_PHOTO_ID_5131979469168538690" border="0" /&gt;&lt;/a&gt;Next, in the Palette, where Controllers should be selected from the drop-down menu, click (! - don't drag it into the main window) on the input device you want to remap (in our case, the "USB Receiver Logitech Mouse"), which should bring you to the following view in the Palette seen to the left.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here it gets interesting - if you click a mouse button or do anything with your mouse (or whatever input device you're mapping), the view scrolls to that element and the corresponding element gets highlighted for the duration of its activity. Drag all controls you want to modify into the main window; in the case of the Logitech MX Revolution, without changing the behavior of the left and right mouse button and the scroll wheel, we need the following controllers:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Button #9 - side-wheel forward motion&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Button #11 - side-wheel backward motion&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Button #13 - side-wheel click/press&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Button #5 - forward button&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Button #4 - backward button&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The little button beneath the MX Revolution scroll wheel is tricky: it's not in this list! To get it, we need yet another controller set; go back to the main controller view (click on the Controllers button...) in the Palette and select "USB Receiver Logitech Consumer Control". Here are tons of controllers listed - we need "AC Search", which is mapped to the little button. Nice - just press the button, and the view brings you directly to what you're looking for! Drag this "AC Search" building block into your main window, too.&lt;br /&gt;&lt;br /&gt;A &lt;b&gt;hint&lt;/b&gt;: the auto-scrolling feature in the Palette view is cool, but if you have a mouse mapping in there too, it gets impossible to select anything, because it scrolls to the mouse X- and Y-axis controllers each time you use the mouse of that input device. This happened to me with my wireless keyboard with a built-in trackball mouse. To deactivate auto-scrolling for certain elements, select "Controller Types" in the main window menu and choose your controller type (e.g. "Wireless Keyboard/Mouse" for my trackball keyboard), then select the controller which is getting you mad (X-Axis, Y-Axis and the Buttons #1-3 for me) and "un-tick" (hey, is there a valid English word for this?) the "Automatically scroll in Palette window" check box, just as in this example, where I disabled auto-scroll for the X-Axis:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_j4t4_9dOtNM/Rzh6qwZjdFI/AAAAAAAAAdE/-Nw78O1BbCc/s1600-h/Controller_Types.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_j4t4_9dOtNM/Rzh6qwZjdFI/AAAAAAAAAdE/-Nw78O1BbCc/s320/Controller_Types.jpg" alt="" id="BLOGGER_PHOTO_ID_5131986650353857618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Well, assuming you have all controllers you want to manipulate back on your main view, it is time to tell them what they should be doing. In my example, I am enabling horizontal scrolling for the side-wheel, Firefox back/forward for the back and forward buttons, mapping a middle mouse button click to the click of the side-wheel (the click of the scroll-wheel on the MX Revolution only makes the wheel go from "rasterized" scrolling to something I would call "freewheeling" but has no system event, this is hard to explain if you don't know the mouse...), and finally I set the small button below the scroll-wheel to simulate a press of the F6 key (I have Yojimbo installed and F6 opens the search in Yojimbo system wide; these are btw the only two other apps I really encourage you to consider worth their money: Yojimbo and TextMate).  Well, to get the sideways scrolling to work on the side-wheel, we have to auto-repeat the clicks (moving the "side-wheel", which is actually a button, not a wheel, only produces a single-press signal - well, because it IS a button...), so we attach an Auto-Repeater from the Timers Palette to the two Button #9 and #11 controllers and change their repeat rate to 30 per second in the Inspector window (while having the Auto-Repeater selected in the main window, naturally). To the Auto-Repeater we then attach a Scroll Wheel action from the Outputs Palette. In the Inspector view of the Scroll Wheel action, we change the action to a Horizontal Wheel and in Left and Right Direction, respectively. Finally, adjust the Steps count to 5 (the default, 1, tends to be kind of "slowish", but see yourself...). Voilá, go to a window with a side-scroll bar and check. Should be working just nicely. Mapping all other buttons is rather simple: we only need the Outputs Palette: Attach a Mouse Button output to Button #13 (the click of the side-wheel) and change its Inspector property to "Middle Button"; Attach a Keystrokes output to all others (Button #4, Button #6, and the AC Search) and record the keystrokes for each in the respective Inspector window: "CMD-[" for Firefox' history back, "CMD-]" for history forward, "F6" for the Yojimbo search. Done! Your result should look something like this:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j4t4_9dOtNM/RziAJQZjdGI/AAAAAAAAAdM/jD7r20gFwVQ/s1600-h/Screenshot_1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_j4t4_9dOtNM/RziAJQZjdGI/AAAAAAAAAdM/jD7r20gFwVQ/s320/Screenshot_1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5131992671898006626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OK, now for the second part, mapping Microsoft keys for a M$ keyboard (back/forward in browser history, Internet, e-Mail, Home, and the music controls) to actually do something on a Mac, create a new Page which should end up looking something like this with all controllers and setup:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j4t4_9dOtNM/RziBoQZjdHI/AAAAAAAAAdU/jOn4gzA-Qk0/s1600-h/screen-capture.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_j4t4_9dOtNM/RziBoQZjdHI/AAAAAAAAAdU/jOn4gzA-Qk0/s320/screen-capture.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5131994303985579122" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I will not go into a stepwise detail of creating this layout, as it is basically the same as for the mouse above. You attach Keystroke Outputs to the browser history back and forward buttons and record them to "CMD-[" and "CMD-]", just as above. The other buttons are a bit more tricky: you need to attach AppleScript "Runs an AppleScript" Palette building blocks to them and then, in the Inspector window of each building block, store AppleScript commands to each block as appropriate. I will here post the necessary AppleScript, but I assume you either understand the script or just copy-paste it and are happy that it works; OK, here's the magic:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Activate Firefox&lt;/b&gt;&lt;pre&gt;&lt;br /&gt;tell application "Firefox"&lt;br /&gt;  activate&lt;br /&gt;  set open_windows to (count of every window)&lt;br /&gt;  if (open_windows is 0) then&lt;br /&gt;    OpenURL "http://example.com"&lt;br /&gt;  end if&lt;br /&gt;end tell&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This is so slightly awkward semantics, because Firefox does not comply to the default AppleScript API, but with this trick only if no window is already open, a new browser window is created.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Activate Mail&lt;/b&gt;&lt;pre&gt;&lt;br /&gt;tell application "Mail"&lt;br /&gt;  activate&lt;br /&gt;  if not (exists window 1) then&lt;br /&gt;    make new message viewer&lt;br /&gt;  end if&lt;br /&gt;end tell&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Activate Finder&lt;/b&gt;&lt;pre&gt;&lt;br /&gt;tell application "Finder"&lt;br /&gt;  activate&lt;br /&gt;  if not (exists Finder window 1) then&lt;br /&gt;    make new Finder window&lt;br /&gt;  end if&lt;br /&gt;end tell&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;iTunes back track/next track/stop&lt;/b&gt;&lt;pre&gt;&lt;br /&gt;tell application "iTunes" to back track&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Exhange "back track" for "next track" and "stop" - duh...&lt;br /&gt;&lt;br /&gt;OK, so you're done! You have a fully functional Microsoft Keyboard (I am only spelling M$ correctly here and once so that the Google bots have at least a single chance... have mercy :P) and a nice Logitech MX Revolution set up and working. So, why in the devils - or whatever deity you believe in - name did I not just download and buy a program that can do the same thing for e.g. the mouse with a much simpler preconfigured interface? Very simple:&lt;br /&gt;&lt;ol&gt;&lt;li/&gt;You need to buy an app for the keyboard AND for the mouse each.&lt;br /&gt;&lt;li/&gt;If you want to tune your joypad or joystick, that's even another investment (ControllerMate can do all those, too!).&lt;br /&gt;&lt;li/&gt;These apps usually cost 20-30 $, not just 15 bucks!&lt;br /&gt;&lt;li/&gt;You only can set up what the app developer allows you to do, not the freedom of choice you have with ControllerMate.&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;About the last point: what I really have set up is e.g. for one of the mouse buttons to do the following - so you get a faint idea what ControllerMate lets you do:&lt;br /&gt;&lt;ul&gt;&lt;li/&gt;If a single button is pressed and an item is selected, copy it to the clipboard and paste the items string representation to a Growl event.&lt;br /&gt;&lt;li/&gt;If no passage was selected, paste the latest Clipboard to the cursor position.&lt;br /&gt;&lt;li/&gt;If a double click event was registered, not only paste the item, but also delete it from the clipboard (so I can e.g. first copy 5 items and then sequentially paste them back again!) and send a message to Growl about the removal.&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Pretty cool, eh? Yeah, if you still use Vista, just cry - never seen anything like ControllerMate for this junk system *very, very evil grin*. How to do it? I'll let you be creative here *even more evil grin*... Any other questions? This should be pretty self-explanatory, no? Want to say I am not very precise? Huh? *eg, third* No, seriously, please feel free to post!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-5750152734409259007?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/5750152734409259007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/5750152734409259007'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2007/11/applescript-controllermate-and.html' title='AppleScript, ControllerMate and Microsoft keyboard/mouse configuration'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_j4t4_9dOtNM/RziAJQZjdGI/AAAAAAAAAdM/jD7r20gFwVQ/s72-c/Screenshot_1.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-583915398924543293</id><published>2007-10-28T13:12:00.001+01:00</published><updated>2007-10-28T13:18:31.511+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GEO'/><category scheme='http://www.blogger.com/atom/ns#' term='extinction'/><category scheme='http://www.blogger.com/atom/ns#' term='humanity'/><title type='text'>GEO-4</title><content type='html'>If you don't know what GEO-4 (4th Global Environment Outlook) is, it is about high time you get informed. This is a recent publication by the United Nations, explaining why this planet's ecosystem and the human race is close to the point of no return, facing (unavoidable) extinction. Let's hope this is what the authors (390 scientist backed by another 1000 reviewers) intend it to be: the final "wake up call" for &lt;b&gt;all&lt;/b&gt; of us.&lt;br /&gt;Link: &lt;a href"http://www.unep.org/geo/geo4/media/index.asp"=""&gt;GEO-4&lt;/a&gt;.&lt;br /&gt;To give you a few facts:&lt;br /&gt;We are currently, on a total, using 30 % more resources than earth can provide for us; water contamination is the number 1 cause of death worldwide; we are overfishing at a rate of 250 %; major regions of the world's oceans having become oxygen dead zones (i.e. lifeless); in Africa, food production over the past 20 years has declined by more than 10 %; somewhere between today and 2100 we will have reached a global warming level which will lead to inevitable ("point of no return") extinction of the ecosystem (i.e. incl. humanity) - oh well, I could go on... this report is approx. 400 pages! The only positive news I could mine: at least the ozone layer will be recovering - although currently, the Antarctic hole is still growing, being larger today than ever before. The real message behind all this:&lt;br /&gt;&lt;b&gt;We have to act &lt;i&gt;now&lt;/i&gt;!&lt;/b&gt; (and not tomorrow...)&lt;br /&gt;One last warning: this might be the most depressing news you ever encountered, yet also the most important if you were not aware of these facts (I surely wasnt aware of that many....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-583915398924543293?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.unep.org/geo/geo4/media/index.asp' title='GEO-4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/583915398924543293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/583915398924543293'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2007/10/geo-4.html' title='GEO-4'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-1663439192860567614</id><published>2007-09-30T20:27:00.001+02:00</published><updated>2007-09-30T20:42:26.651+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='retreat'/><category scheme='http://www.blogger.com/atom/ns#' term='roberto'/><category scheme='http://www.blogger.com/atom/ns#' term='el escoreal'/><category scheme='http://www.blogger.com/atom/ns#' term='noche blanca'/><title type='text'>El Escoreal and La Noche Blanca</title><content type='html'>The last week and -end I was very occupied with two things: the annual CNIO Retreat in El Escoreal (25 (!!) talks about cancer...) and the White Night in Madrid (all museums, theaters, etc. are open all night round).&lt;br /&gt;&lt;br /&gt;El Escoreal was more of a "cultural &amp;amp; social" event: apart from having some drinks the first night with my workmates (no, I did not go out 'till 6 in the morining again - last year was enough for me!), I also watched the Vuelta (the spanish "Tour de España"). After seeing it, I can happily confirm: visiting bike races is probably the most boring sport event to attend to - 5 min of action (uh, which action?). Also, I went with Martin and Carlos to the El Escoreal monastery, where basically all the spanish Habsburgs are burried - i.e. a "must" for an Austrian, monarchist, or a republican who wishes to release his anger (we were wondering why Carlos, a Mexican Republican, did not piss on the graves - just kidding in case you read this, Carlos ;-]). Anyway, a quite impressive place, but not what you would expect from a King who pretends to live a modest monk life (well, Phillip II probably thought it was...).&lt;br /&gt;&lt;center&gt;&lt;embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="288" height="192" flashvars="host=picasaweb.google.com&amp;captions=1&amp;RGB=0x000000&amp;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fflorian.leitner%2Falbumid%2F5116055389315420097%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;The second event, La Noche Blanca, was quite fun - and very long, until about 11 am in the morning. We tried to visit some of the performances and attractions, but stopped this quite soon: You just can't imagine how many people are out on the streets, it seems all of Madrid is there at once. My modest estimate is one million, really - I never have seen something like this (and I thought Madrid is crowded at night quite regularly... well, this beats everything). So after fighting through the masses, we went to a party place on the southern rim of the center, which proved to be just as crowded. In the end, at about 7 am, we decided to "retreat" to my place and have some copas (drinks) with good music at my place. There somebody showed me "Testimonios" on youtube.com: if you understand a bit of spanish, very funny comedies of Björk et al.!&lt;br /&gt;&lt;center&gt;&lt;embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="288" height="192" flashvars="host=picasaweb.google.com&amp;captions=1&amp;RGB=0x000000&amp;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fflorian.leitner%2Falbumid%2F5116058528936513617%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-1663439192860567614?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/1663439192860567614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/1663439192860567614'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2007/09/el-escoreal-and-la-noche-blanca.html' title='El Escoreal and La Noche Blanca'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-8602940837706803156</id><published>2007-09-17T23:59:00.001+02:00</published><updated>2007-09-30T20:43:08.162+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='madrid'/><category scheme='http://www.blogger.com/atom/ns#' term='andy'/><category scheme='http://www.blogger.com/atom/ns#' term='weekend dance'/><category scheme='http://www.blogger.com/atom/ns#' term='roberto'/><title type='text'>Weekend Dance</title><content type='html'>As it is still summer time here in Madrid (well, at least for us northern foreigners), I just enjoyed a all-night open air DJing event in t-shirt and short pants this weekend. Remember this is Madrid, so nothing ended before the sun chased us away! It also was the first time I saw Massive Attack live, which turned out to be quite cool. They're not so much bout an energetic performance, but you could imagine them as a mixture of Pink Floyd-ish showcasing and a De Phazz-like Mary Jane atmosphere... Anyway, great concert with about 50k visitors in a full arena. I even liked Sven Väth - but only only because I was standing next to a wall for his performance, so his BPMs were doubled by the echo :)=)... Oh, and if you like slightly harder beats (they had tons of good old hardcore samples in their mixes), put you ears on Vitalic, at least live they rock! Another unknown tip and quite impressive was Digitalism. Have phun listening!&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="400" height="267" flashvars="host=picasaweb.google.com&amp;captions=1&amp;RGB=0x000000&amp;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fflorian.leitner%2Falbumid%2F5111318073005674849%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-8602940837706803156?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/8602940837706803156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/8602940837706803156'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2007/09/weekend-dance.html' title='Weekend Dance'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-8473887964697878737</id><published>2007-09-07T22:04:00.001+02:00</published><updated>2007-09-07T22:25:21.662+02:00</updated><title type='text'>Why I like Apple</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j4t4_9dOtNM/RuGvRGTr1xI/AAAAAAAAAVY/o7fJATvlTO4/s1600-h/applefunnycomparisons.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_j4t4_9dOtNM/RuGvRGTr1xI/AAAAAAAAAVY/o7fJATvlTO4/s320/applefunnycomparisons.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107556160700667666" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-8473887964697878737?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/8473887964697878737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/8473887964697878737'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2007/09/why-i-like-apple.html' title='Why I like Apple'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_j4t4_9dOtNM/RuGvRGTr1xI/AAAAAAAAAVY/o7fJATvlTO4/s72-c/applefunnycomparisons.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-1088911873906366393</id><published>2007-09-07T16:59:00.001+02:00</published><updated>2009-05-01T06:41:27.099+02:00</updated><title type='text'>TextMate Python and Django cheat sheet</title><content type='html'>After not finding anything appropriate, I decided to do my own reference card (aka cheat sheet) for the pythonic and django commands you can use in TextMate. If you want to have it, download it from &lt;a href="http://www.scribd.com/doc/7759743/TextMate-PythonDjango-Cheat-Sheet" type="application/pdf" target="_blank"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-1088911873906366393?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/1088911873906366393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/1088911873906366393'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2007/09/textmate-python-and-django-cheat-sheet.html' title='TextMate Python and Django cheat sheet'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8822016195546282219.post-7565119818824235576</id><published>2007-09-03T19:57:00.000+02:00</published><updated>2007-09-03T20:24:28.907+02:00</updated><title type='text'>Another reason why Java looses big</title><content type='html'>&lt;span style="font-weight: bold;"&gt;WARNING&lt;/span&gt;: this is a pure geek post - don't read if you are not into programming or (lucky you) never have to touch Java.&lt;br /&gt;&lt;br /&gt;Because of a certain library and some other reasons, I recently was forced to program in Java. In this course, I had to make a command line call (to dump flatfiles into my PostgreSQL database). Knowing many languages, I though this would be pretty straightforward with Java, too - nada! Here's the code to do a command line call in Java as safe as I can get it:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/**executes &lt;code&gt;cmd&lt;/code&gt; on the Runtime&lt;br /&gt;*&lt;br /&gt;* This method throws a RuntimeException if any output&lt;br /&gt;* is found on STDERR - so catch it if your program&lt;br /&gt;* does so to log only. The content of STDERR is&lt;br /&gt;* sans newlines in the message of the RE.&lt;br /&gt;*&lt;br /&gt;* @return exitVal - anything else than 0 is invalid */&lt;br /&gt;private int runtimeExec(String cmd)&lt;br /&gt;   throws InterruptedException, IOException {&lt;br /&gt;&lt;br /&gt; // execute the command&lt;br /&gt; Process child = Runtime.getRuntime().exec(cmd);&lt;br /&gt; int exitVal = child.waitFor();&lt;br /&gt;&lt;br /&gt; // check STDERR&lt;br /&gt; InputStream stderr = child.getErrorStream();&lt;br /&gt; InputStreamReader isr = new InputStreamReader(stderr);&lt;br /&gt; BufferedReader br = new BufferedReader(isr);&lt;br /&gt; String line = null;&lt;br /&gt; while ( (line = br.readLine()) != null)&lt;br /&gt;   error.append(line + " ");&lt;br /&gt;&lt;br /&gt; // close the streams&lt;br /&gt; stderr.close();&lt;br /&gt; child.getInputStream().close();&lt;br /&gt; child.getOutputStream().close();&lt;br /&gt;&lt;br /&gt; // throw RE on STDERR output&lt;br /&gt; if (error.length() &gt; 0)&lt;br /&gt;   throw new RuntimeException(error.toString());&lt;br /&gt;&lt;br /&gt; return exitVal;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Pretty nasty, eh?! So which precautions are required? Here's the explanation of above code:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Although a program should terminate with exit value non-zero on error, I found that the postgres dumping using &lt;code&gt;psql -d mydb -f mydump.pg&lt;/code&gt; actually does terminate with 0 when an encoding error is encountered. This means your program happily continues while your database has been abrogated. The only means to find this situation is to throw a RE on any text found on STDERR.&lt;/li&gt;&lt;li&gt;The second really bad thing is if you call this code say a few thousand times, you will run into a "too many open filehandles" error. Why? Because you have to close all three streams (IN, OUT, ERR), as the Java GC just sucks - my process runs over days, going into this segment about 1000 times. So on about the last day, this program crashes. Nice, just love garbage collection...&lt;/li&gt;&lt;/ul&gt;Oh, and it actually still ain't completely safe: you would have to do a try...catch...finally to close the streams, if you'd want to be perfect!&lt;br /&gt;&lt;br /&gt;So my advice, again, is: keep away from this hideous language and develop something real! I hope this was my last "me vs. Java"-encounter for a long time!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8822016195546282219-7565119818824235576?l=www.fnl.es' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/7565119818824235576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8822016195546282219/posts/default/7565119818824235576'/><link rel='alternate' type='text/html' href='http://www.fnl.es/2007/09/another-reason-why-java-looses-big.html' title='Another reason why Java looses big'/><author><name>fnl</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-eu6WZhHvMXw/Thd_3glD7RI/AAAAAAAACec/95C55sEpDSQ/s220/avatar-1908.gif'/></author></entry></feed>
