Yggdrasil Linux

Recently I changed my hostname, that is, the host name of my desktop machine for something shorter.

I have been using 'yggdrasil' as a hostname for 4 years, I got it from the universal computer in Ah Megami-sama, so I googled to see if anyone else was using or refering to their linux box as yggdrasil, it turns out it is a popular name for a linux machine, so much that there is a distribution named just like that, Yggdrasil Linux, small world indeed.


Object/Relational Mapping is the Vietnam of Computer Science

Let me add myself to the multitude of people who found this enlightening:

"Object/Relational Mapping is the Vietnam of Computer Science. It represents a quagmire which starts well, gets more complicated as time passes, and before long entraps its users in a commitment that has no clear demarcation point, no clear win conditions, and no clear exit strategy." -- Ted Neward


Software Developer Personality Type

Did this one and got this:

Given the choice, The Pragmatist appreciates clear, comprehensive objectives and strategies. However, The Pragmatists accepts that this is not always possible and will accept uncertainty where necessary. The Pragmatist likes to work things out in advance, but only when this planning is legitimate - not just a convenient fiction for the sole purpose of satisfying a manager or sticking to a method.

In a software development project, The Pragmatist expects to make the big decisions up front, but is content to work out the details while writing the code. He or she views methods, models and frameworks as tools to be used as long as they help and abandoned when they cease to be useful. The Pragmatist will say “don’t fix what’s not broken,” but only as long as it’s really not broken! The Pragmatist understands where the project is not only by referring to the plan, but also by considering the project’s goals and feedback from stakeholders (e.g., users, marketing).

The Pragmatist may experience conflict with team members who either 1) want to stick with plans or methods even if they don’t seem to be working, or 2) prefer to jump straight into coding without any planning at all.


Quick template update

Ok I made a quick template update, specifically I removed the atheist bus banner because it felt kinda old, and the sense about science petition because I don't have readers from the UK and the Video Games Live button because I'm never going to get there. I also changed the ubuntu button for an official one hosted at ubuntu.com and switched to the small version of the ubuntu counter.

Getting ready to post some more later...

VGL ticket

free debate


[SOLVED] Compiz window title bars missing.

Yes, orange, got any problems?
Another post I should have made ages ago, a week and a half to be precise. I upgraded to the new Ubuntu 9.10 and I haaaappy, lot's of new software in the repos and a lot of shiny polish and also the first time I actually feel like sticking with the default theme for once!

How ever I ran into an issues with compiz, either I could not enable it at all or the window decorations ( that's the name of the title bars for you). In order to solve this I had to change a setting in compiz and that means installing Compiz Settings Manager. Just go to the Ubuntu Software Center and install it if you haven't installed it yet.

Now open it and look for "Window Decorations"

There change the command to "compiz --replace"

That solved my problems. Good luck!

New Monitor

I'm not overcompensating for anything, I swear!

I should have posted this a week ago but here it is, this is my new monitor.

Nice isn't it? I've always wanted an LCD monitor and finally got one and a big one to boot!

The weird thing about this monitor is that it is changing the way I use the desktop, which in a way is good. On one hand some applications with a lot of panels that used to be a pain to use now are really easy to use! For instance Filezilla is finally usable with all panels rolled out.

The only way to file! (transfering... protocoling...)

On the other hand I find myself using unmaximized windows most of the time.

Gee thanks and it only took you 4 years...
The only thing I kind of lament is that most of my huge wallpaper collection no longer matches my desktop. Any way I was meaning to delete most of them, except the lame ones I made, here are two of my first wallpapers that didn't involve MS Paint, actually I'm just showing off the GIMP in wide screen.


But I guess now I'm going to start appreciating widescreen walls. A less obvious problem is that I can't hang key-chains on my monitor anymore, nor I can put any plushies on top of it either, which means that I'm storing away some of my toys. For instance, these guys used to hang in the first row, you are out.

Not cool brother, not cool at all
And only one of these is gonna make it.

From right to left, Burro the eevee, Pietrr the giraffe and Kirby the kirby.
Kuro Mokona rules supreme however, I can't dump him or he will tell Yuuko!
Also, bring more sake!
Wait was this a guy or a girl? Actually the official answer is "no".


directhex deleted my comments

I had two long running discussions with Microsoft apologist directhex, one about whether mono should be used for new applications and one about whether the BSD license is really more free than the GPL.

We agreed in some terms and disagreed in others but I respected his honesty, I really though he was being honest and seriously wanted to discuss the matters. Then he deleted my comments.

Way to loose my respect directhex, and yes I respected you even tough I thought you suffered a heavy case of double standarism. Now I know exactly what kind of person you are.


Atheist clubs, where?

Where? Chicago Illinois, USA! Sam Harris reports that the Cardinal Francis George reports that Atheist clubs are appearing in high schools.

The spin is that they call us fundamentalist, evangelical and intolerant. Cool! We managed to turn fundamentalist and evangelical into bad words, a few decades ago they'll be proud of calling themselves fundamentalist or evangelicals.

What we are not is intolerant, we are not putting religious messages in your money, we are not forcing you to pledge "under god" nor are we forcing your kids to pray at what ever you think we worship. We just ask for equal treatment and we ask you to get your religion out of the science classroom.


Miguel de Icaza, Microsoft Apologist

You know I read a lot and I mean a lot on MS corruption and the hypocrisy of Microsoft apologists. And I'm not only reading one side, I try to listen to them, resisting the pain, and it's simply clear they are out there just to spread disinformation in a concerted attempt to prop Microsoft and divert attention from the Free Software movement and if they can diss RMS in they process you can bet they'll try.

In the end it wasn't working so they flip floped and now pretend to be a bastion of idealism (sure...) with a new fake open source foundation/corporation.

I'm not making this up, Miguel himself comments that Microsoft actually founded two organizations with the same name, one comercial, one non-profit, both Microsoft Staffed.

Really I can't gather enough energy to recap all I read so I'll just link to this excelent article which condensates the whole matter in a couple pages of text: On Mono, Miguel, Stallman and Fusion with Microsoft


Class Constructor Decorator

While Python is already very terse there are still some repetition that can be worked out. I'm going to talk about class constructors here. Many a class init method is little else but adding the init parameters as instance attributes, I have written a constructor that takes care of that, this preliminary version dumps everything as public attributes in the instance. IFF I need more customization, I'll write the full implementation I was meaning yesterday:


#!/usr/bin/env python
@author rgz
A decorator for converting the constructor arguments into instance attributes automatically.
import decorator
import inspect
def constructor(init, *args, **kwargs):
"""Converts the constructor arguments into instance attributes automatically"""
names, args_name, kwargs_name, defaults = inspect.getargspec(init)
assert len(names) > 0, "Methods should have at least 1 argument!"
for i, name in enumerate(names):
if i:
setattr(self, name, args[i])
self = args[i]
if args_name:
setattr(self, args_name, args[i + 1:])
if kwargs_name:
setattr(self, kwargs_name, kwargs)
init(*args, **kwargs)
__all__ = ['constructor']
if __name__ == '__main__':
class Spam(object):
def __init__(
default_argument = 'default value',
self.variable_arguments = list(self.variable_arguments) # Attributes already set
spam = Spam(
'first argument',
'second argument',
'non default value',
'first variable value',
'second variable value',
keyword_argument_1 = 'first keyword value',
keyword_argument_2 = 'second keyword value',
assert spam.positional_argument_1 == 'first argument'
assert spam.positional_argument_2 == 'second argument'
assert spam.default_argument == 'non default value'
assert type(spam.variable_arguments) is list
assert spam.variable_arguments[0] == 'first variable value'
assert spam.variable_arguments[1] == 'second variable value'
assert spam.keyword_arguments['keyword_argument_1'] == 'first keyword value'
assert spam.keyword_arguments['keyword_argument_2'] == 'second keyword value'

Update: I posted this on reddit because I wanted to know if someone needed something like that but apparently I must have done something really bad, I've been modded -1 and have received no comments.


Misc stuff and Programmers day.

Today is programmers day! In Russia. Anyway I have not been commenting for a long time so I'm trying to get into it again.

Do you guys remember when I said I spend to much time reading atheist blogs? Well I find now I find myself watching to much atheist channels in youtube, the upside is that I watch them more for the humor than actual debating. Debating creationists is seems more and more with each day.

In the same spirit it feels like I'm always feeding the trolls in slashdot because the posts that deserve to be replied the most are almost always made by irrational people.

One interesting post I wanted to share: Interpolation surprise

And finally let's celebrate the apology from the British government to Alan Turing! This is just great really.


Keep libel laws out of science

Ok this is bad, a scientist, Singh, criticizes the The British Chiropractic Association because they insist they can cure ear infections among many other bogus claims. Those were his words

In the world of science when somebody criticizes the proper response is to show your research. Not for the BCA, they sued him for libel, the most ridiculous part is that right now the Singh is losing because the judge decided that when Singh sayd bogus claims he meant they are knowingly fraudulent, and Singh can't posibliy know that.

Yes that's right the BCA best defense against criticism is that you can't prove you are knowingly fraudulent.

And you kown what it means? It means I'm adding another button to my blog.

There. See ya later!



I like how Python ensures no library messes with my built-ins. The fact that neither I can monkey patch built-ins is however a pain, interestingly while built-ins can't be extended they can be decorated/overriden, and lo I present unto you, ObjectMap.

class ObjectMap(object):
def __init__(self):
"""Did you look what I did there?"""
self.map = map
def __call__(self, *args, **kwargs):
"""The original map call"""
return self.map(*args, **kwargs)
def __getattr__(self, name):
"""map.name(sequence, args) == [item.name(args) for item in sequence]
Here is the fun part"""
def fn(seq, *args, **kwargs):
return self.map(lambda item: getattr(item, name)(*args, **kwargs) , seq )
return fn
map = ObjectMap():
words = "red green blue".split()
WORDS1 = map(lambda word: word.upper(), words)
WORDS2 = [word.upper() for word in words]
WORDS3 = map.upper(words)
assert WORDS1 == WORDS2 == WORDS3

Needless to say, this shouldn't be used in production code (so use it copiously).



Dicese del fenomeno que ocurre cuando un personaje de videojuego al que le queda un punto de vida muere inmediatamente al sufrir el mas minimo daño, pese a que estaba corriendo brincando y peleando perfectamente bien un instante antes...

Metal Gear Solid is legendary for a particular use of this - Solid Snake has cigarettes, which allow him to see hidden laser traps and keep his hands steady while sniping, at the cost of his HP bleeding down slowly. It's impossible for Snake to smoke himself to death - a small blip of health will always remain - but then, if he gets so much as touched, he dies (presumably of spontaneous lung cancer).


The hairy dilemas of SF

 I read an awesome post about SF as a genre, specifically about how the terms Space Opera and Hard SF are often misused.

 The author mentions that Ian M. Banks' The Culture is mislabeled as Hard SF because it seems well written, but fails at teaching you any science.

 I was going to argue but after making an excellent case I now concur with the author.

 There are only a couple points of disagreement. At some point the author suggests that the difference between a Science Fiction story  and a "Space Fantasy" story, like Star Wars is that a real Science Fiction story is one that cannot be told in a different context, actually, I'll quote it:

I submit the critical test of whether a story is Science Fiction is; “Could you tell this same story in another genre?” If the answer is “no,” then it’s Science Fiction.

There, so, this is the part that bugs me, because, Clarke's Third Law implies that any story can be easily ported from one genre to the other. So, it's not that simple. You can replace any SciFi element with a Fantasy analogy. The question is not if you can, but, if you want. That to me is one of the great things about SciFi. SciFi is not different from Fantasy for the way it accomplishes its "magic" but because what particular "magic tricks" it chooses to use.

The thing is, science is a sportspoil. Compared with the infinite flexibility of Fantasy, science will force you to go certain routes that make storitelling awkwards for some writers.

For instance, let's say you preffer swords to guns. Thaks to Clarke's Third Law you can make the laser o magical swords, and you can make contrived explanationsfor why the characters aren't using guns in any setting. But in a SciFi setting, it wouldn't be believeable, it wouldn't be realistic.

SciFi has to be realistic and that puts a huge burden on what you can or have to do. Depending of the time frame and setting, good SciFi forces you to consider bioterrorism or AI or transhumanism, and at the same time prevents you from using cool stuff like swords.

This is to me the key difference between Science Fiction and Space Fantasy.


Ubuntu file renamers

 I was planning to do an in-deep review of file renaming tools for Ubuntu, but instead I'll do a quick review.

 The best opensource file renamer for Gnome is Mètamorphose. It's hosted in Sourceforge, not the Ubuntu repositories, but still open source so it's cool, there is a deb file so it's super easy to install.

 It does, everything. It only lacks an scripting language but then again if you have python (or specially ipython) you have unlimited power, provided you are ready to write your own scripts and do your own rollbacks.

 It even does time  and date based renaming. And has plenty of options for special case selecting/unselecting, sorting, etc...

 It also has the best file browser, it doesn't have a context menu option in nautiulus but you can make your own one with the Nautilus Actions Configuration Tool.

 The only weird thing I've found is that trimming/croping is done with the options Search>Position>Replace>(empty string), but that's all.

 Now if you don't want to use software outside of the repositories (but it's worth it!) use PyRenamer.

 PyRenamer's file browser does use the theme icons but it doesn't show dot files/folders, it doesn't do regex. It has most of the options you could need, really, I do a lot of heavy duty renaming so PyRenamer was not enough for me, but it could be all you need.

 But, just the better file browser is enough to pick Mètamorphose.

 GPRename is a Perl/GTK+ option, but it's inferior to PyRenamer in every way, it doesn't do regexes, doesn't use icons at all, it can't HIDE dot files, this makes the file browser useless, it can't process directories and files at the same time, it has less options. Just no.

 Purr is the cutest of the file renamers here, it uses a little window with drag and drop support, which is cute and actually allows you to do renaming of files in disparate directories.

 But is doesn't provide any dynamic text modification options. It can add indexes without zero pading, it can change all extensions to another one, and it can replace every file name with a fixed string (plus an index number) it's simply not useful.

 So there it goes, after 221 days of delaying it I'm blogging about file renamers in Ubuntu.


Morality Quiz

Your morality is 0% in line with that of the bible.

Damn you heathen! Your book learnin' has done warped your mind. You shall not be invited next time I sacrifice a goat.

Do You Have Biblical Morals?
Take More Quizzes

What can I say, I'm only doing my best.

About men in skirts

 This is a response to an interesting post by Sage. I wrote it many moons ago and forgot about it.

 In short Sage states that, due to sexism, women's occupations, hobbies and wardrobe are considered inferior, ironically imposing limitations in what men can wear.

 As examples she mentions her current husband, who used to wear a long skirt long ago, she though he looked hot. And her son, who liked to imitate his older sister --including wearing dresses-- when he was about 4 years old.

 That's fine and all but these are extremely rare exceptions I think.

 While it's true that sexism, limits men options, in regard to what they can do for a living (male hair dressers, baby sitters or nurses can be bullied for their choice of job), I don't think skirts have that much to do with sexism and a lot to do with female sexuality.

 If you remember, there was a very popular study that claimed that women aren't particularly aroused by men looks. This has profound effects. Simply put, you never find women hunting around for men in miniskirts to jump their bones. If they did, you could bet we would be wearing skirts, high heels, make up, you name it. But no, men wearing skirts are far more likely to attract other men before attracting women. As a sexual reproductive tactic, cross-dressing doesn't work for men, so cross-dressing is naturally selected out by female sexual preferences, more than any male prejudices.

 This is the reason there are more male nurses every year, and more and more male baby sitters, but hardly any men in skirts, there is no push for it.

 The truth is that male and female dressing code serves completely different roles. Feminine dressing aims to attract the gazes. Nowhere is this more obvious than in a formal events where the worst a woman can do is have the same dress than another woman. In contrast men practically wear uniforms, they are also sending a visual message, but it is one of status and rank, they are relatively simple an unremarkable whereas women dresses are elaborate and colorful.

 Now, one could insist that this only applies to flashy skirts and does not explain why men avoid simple long skirts, but its the same story all over, simply by wearing a long skirt a man advertises that he is not interesting in attracting females, so if you want to see men in skirts you have to get girls to like it first, evolution will take care of the rest.

 This was post was written for you and for a friend who actually loves cross-dressing so she is already doing her part. Cheers.

Social networking chores.

  1. I'm ditching Diqus from my template, it doesn't work well and I can't even comment in my own blog, it sucks.
  2. Fucking Facebook has been bugging me recently even tough I tried deactivating my account. I'm reactivating to show facebook some "love".
  3. Also because I learned that I have to untag me from my friends pictures, which also sucks.
  4. I've to write to an old friend to ask WTF is he doing in NY! Hope he's having fun.
  5. Some guy who hates me requested to be my friend in (fucking XD) facebook. There you have the very definition of WTF.
  6. Write a (hopefully short) rant on SciFi.
  7. Write a (hopefully short) rant on gender equality and dress codes for Sage.
  8. Show some other blogger whose name I forgot, who was looking for a pythonic XML writing tool, one little script I made.
  9. Maybe, just maybe, write that software review for file renamers in Ubuntu I had planned since the begining of time (actually 220 days ego, exatcly, creepy uh?)


Lady Hopes Lies

 Purging some links from toBlog list, first comes this: the myth of Darwin turning Christian in his death bed.

 The Lady Hope Story: A Widespread Falsehood

 In summary Lady Hope, a hag that didn't even met Darwin said that she visited Darwin in his last moments, where he confessed to Christ and recanted his scientific research.


 Debunked first by Darwin's daughter who WAS with him in his last moments, then by his son who knew him well. Also in the many letters he wrote to friends, his agnosticism is more than evident.


Blog name change / Cambio de nombre

I bumped into a blog named "cat /dev/random", hey that's my blog! Wait no, a quick google search reveals this is a fairly usual blog name among unix users.

So I decided to change the name of this blog into "import random", to fit my Python bias, it seems there arent any blogs with this name so I'm original and unique again! ...for the time being...


Me topé con otro blog llamado "cat /dev/random", hey ese es mi blog! No, esperen, una rápida busqueda en google revela que este es un nombre para blog común entre usuarios de unix.

Asi que decidi cambiar el nombre de este blog por "import random", adecuado para mi gusto por Python parece que no hay blogs con este nombre asi que soy original y único de nuevo! ...por el momento...


So I try once and again to get into the Python ORM wave, this time with the elegant Elixir library.

The way I see it, Elixir/SqlAlchemy or any of the other ORM libraries can make a lot for you, provided you do the right things from the beginning. Integrating it into my current work flow is just too much work and I'm in constant fear everything will crumble down at some point and I'll have to rewrite everything.

Anyway the problem I had, which I pasted into stackoverflow involved our consistent use of integer columns instead of datetime columns in mysql, if I wanted to make a table wrapper I needed to cover that case so in the end I wrote my own schalchem data type (also pasted at stackoverflow)

import datetime, time
from sqlalchemy.types import TypeDecorator, DateTime
class IntegerDateTime(TypeDecorator):
"""a type that decorates DateTime, converts to unix time on
the way in and to datetime.datetime objects on the way out."""
impl = DateTime
def process_bind_param(self, value, engine):
"""Assumes a datetime.datetime"""
assert isinstance(value, datetime.datetime)
return int(time.mktime(value.timetuple()))
def process_result_value(self, value, engine):
return datetime.datetime.fromtimestamp(float(value))
def copy(self):
return IntegerDateTime(timezone=self.timezone)

In the end tough, it wasn't very useful because I don't have another table to which I can link this one so the main reason to write a wrapper for this class was void. Also, the query syntax was less nice than the SqlSoup auto-generated one so I should probably just use SqlSoup.

I still think Elixir/SqlAlchemy mappers are great, I understand they do a lot of stuff for you, like data definition centralization. But I just can't get a chance to use them where they aren't a hindrance!

So sad...

Batch Iterator and obscure Python details

I love Python generators and iterators, when they aren't making the easy trivial they are making the impossible possible.

I specially like to use iterators in streaming situations, like when reading from very large files or a database, because you don't have to traverse the sequence twice.

However in very large sequences I have had the need to perform some action every n items. I had the idea of using an special iterator that could split a sequence in sub-sequences but then I have to step over every item twice, once to pack it into the sub-sequence and once again to process it. Using islice was my first idea, but I needed to, somehow, comunicate to the "outer" iterator that the sequence has been exhausted or else I'd be stuck in an infinite loop iterating over empty subsequences.

I tough about adding an is_exhausted property to the sub, sequences, then I found out something interesting, you can't stuff properties into standard iterators, including those you get with generator expressions.

>>> i = iter([])
>>> i.is_exhausted = True
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
i.is_exhausted = True
AttributeError: 'listiterator' object has no attribute 'is_exhausted'
>>> def generator():
yield True
>>> g = generator()
>>> g.is_exhausted = True
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
g.is_exhausted = True
AttributeError: 'generator' object has no attribute 'is_exhausted'

No prob, I though, I can make everything inside a single generator! Actually I can't, once a generator raises StopIteration it can't do anything else.

>>> def anotherGenerator():
yield 1
yield 2
raise StopIteration
yield 3
yield 4
>>> a = anotherGenerator()
>>> a.next()
>>> a.next()
>>> a.next()
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
File "<pyshell#12>", line 4, in anotherGenerator
raise StopIteration
>>> a.next()
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
>>> a.next()
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>

Ok, so I thought about using a custom class for the sub-sequences, one that stored a reference to the "parent" iterator, but then I thought, Why making two new classes if the parent is simply returning iterators why don't return self? This lead to the first working implementation:

class ibatch(object):
"""A batch iterator by rgz"""
def __init__(self, sequence, size):
"""ibatch(iterable, size) -> sequence of iterables
splits an iterable into groups of 'size' items lazily"""
self.__sequence = iter(sequence)
self.__size = size
self.__counter = 0
def __repr__(self):
return "<batch iterator at %s>" % hex(id(self))
def __iter__(self):
return self
def next(self):
if self.__counter:
if self.__counter > self.__size:
self.__counter = 0
raise StopIteration
self.__counter += 1
# When this raises StopIteration, it's the end.
return self.__sequence.next()
self.__counter = 1
return self

This one uses two magic constants internally but is overall nice and compact, this is a demonstration of how it runs:

>>> for enum, items in enumerate(ibatch(xrange(10), 3)):
print "Block #%s" % enum
for item in items:
print item,
print '\n--'

Block #0
0 1 2
Block #1
3 4 5
Block #2
6 7 8
Block #3

Pretty nice, as long as the number of items isn't exactly divisible by the size of the sub-sequence, when that happen we get an empy sub-sequence complete with empty header and footer sections:

>>> for enum, items in enumerate(ibatch(xrange(9), 3)): # 9 items intead of 10...
print "Block #%s" % enum
for item in items:
print item,
print '\n--'

Block #0
0 1 2
Block #1
3 4 5
Block #2
6 7 8
Block #3


See that empty block? We can't get rid of it, because we don't know if the current sub-sequence is empty unless we try to get an item from it. This breaks a little of the conceptual cleanness of iterators, if the header depends on the sequence to not be opened first. However most of the time it is not a problem and it is very convenient, what we do is that we preload the first item in the sub-sequence to find out if the sequence is empty or not:

>>> class ibatch(object):
"""A batch iterator by rgz"""
def __init__(self, sequence, size, preloading = False):
"""ibatch(iterable, size) -> sequence of iterables splits an iterable
into groups of 'size' items lazily"""
self.__sequence = iter(sequence)
self.__size = size
self.__counter = 0
if preloading:
self.next = self._next_preloading
self.next = self._next
assert self.next
def __repr__(self):
return "<batch iterator at %s>" % hex(id(self))
def __iter__(self):
return self
def _next(self):
if self.__counter:
if self.__counter > self.__size:
self.__counter = 0
raise StopIteration
self.__counter += 1
# When this raises StopIteration, it's the end.
return self.__sequence.next()
self.__counter = 1
return self
def _next_preloading(self):
if self.__counter == 0:
self.__preloaded = self.__sequence.next()
self.__counter = 1
return self
elif self.__counter == 1:
self.__counter = 2
return self.__preloaded
elif self.__counter <= self.__size:
self.__counter += 1
# When this raises StopIteration, it's the end.
return self.__sequence.next()
self.__counter = 0
raise StopIteration

So this class takes a preloading argument and choses the apropiate next method, I'm soo clever! Except it doesn't work.

>>> for enum, items in enumerate(ibatch(xrange(9), 3)):
print "Block #%s" % enum
for item in items:
print item,
print '\n--'

Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
for enum, items in enumerate(ibatch(xrange(9), 3)):
TypeError: iter() returned non-iterator of type 'ibatch'

Wait what? how is it not an iterator? The minimal requisites for the iteration protocol are the __iter__ and next methods and it has both right? Unless iter() expects the class to have a next method, so I added it to the ibatch class:

def next(self):

This still doesn't work, but for an entirely different reason...

>>> for enum, items in enumerate(ibatch(xrange(9), 3)):
print "Block #%s" % enum
for item in items:
print item,
print '\n--'

Block #0
Traceback (most recent call last):
File "<pyshell#48>", line 3, in <module>
for item in items:
TypeError: 'NoneType' object is not iterable

What NoneType? It is talking about the return of the next method, so it is calling the next method in the class! Now it makes sense that iter() looks for it in the class definition, in other words the for statement doesn't call foo.next(), it calls foo.__class__.next(foo).

I understand why they don't want to use method resolution over and over in each iteration but grabbing a reference to the next method in the instance is the right thing to do, in my opinion. A dirty fix is calling the instance method in the class method like this:

def next(self):
return self.next()

But that's innefficient, the most readable solution seems to be using two clases like this:


class ibatch(object):
"""A batch iterator by rgz that doesn't creates empty batches"""
def __init__(self, sequence, size):
"""ibatch(iterable, size) -> sequence of iterables
splits an iterable into groups of 'size' items lazily"""
self.__sequence = iter(sequence)
self.__size = size
self.__counter = 0
def __iter__(self):
return self
def next(self):
if self.__counter == 0:
self.__preloaded = self.__sequence.next()
self.__counter = 1
return self
elif self.__counter == 1:
self.__counter = 2
return self.__preloaded
elif self.__counter <= self.__size:
self.__counter += 1
# When this raises StopIteration, it's the end.
return self.__sequence.next()
self.__counter = 0
raise StopIteration

class ibatch_strict(object):
"""A batch iterator by rgz"""
def __init__(self, sequence, size, preloading = False):
"""ibatch(iterable, size) -> sequence of iterables
splits an iterable into groups of 'size' items lazily
it is strict because it doesn't open the subsequence
before the header is procesed but in turn it can leave
an empty batch at the end if (len(sequence) % size) == 0"""
self.__sequence = iter(sequence)
self.__size = size
self.__counter = 0
def __iter__(self):
return self
def next(self):
if self.__counter:
if self.__counter > self.__size:
self.__counter = 0
raise StopIteration
self.__counter += 1
# When this raises StopIteration, it's the end.
return self.__sequence.next()
self.__counter = 1
return self

As you can see I removed the __repr__ methods since they have nothing interesting to say, I also decided to make preloading the default class because I like it better ^^. Here is how it runs:

>>> for enum, items in enumerate(ibatch(xrange(9), 3)):
print "Block: %s" % enum
for item in items:
print item,
print "\n--"

Block: 0
0 1 2
Block: 1
3 4 5
Block: 2
6 7 8

So the lesson of today is: "python iterators use foo.__class__.next(foo) not foo.next()"
I'll try not forgetting that.

I hope this class is usefull for someone.


Please don't ruin Taken

 Nuke the Fridge Reports that a sequel to Taken. Now Taken was a bad-ass movie but the plot doesn't let itself to sequels. I can't tell for sure this is gonna suck but I get the impression that Hollywood just can't help but make sequels of anything until it sucks.


Stepping down from the battle field.

 I'm going to stop reading about religion and those BS factories known as apologists. News about old ladies getting beaten by the religious police or about 9 year old rape victims excommunicated from their church and communities for seeking abortion even though the doctors say that giving birth to her twins will surely kill her... are just too depressing.

 And apologists have to be the most stubborn, and cheating liers in the world. You can read them passages straight from the Bible with all needed context and they'll insist this is not what the Bible says completely making shit up as necessary.

 It's just too tiring and I need to concentrate on work and the brighter side of life for a good, long time. I'll pick just one from my very favorite atheist blogs...

 Pharyngula is very fun but very high traffic and lots of noise.
 Debunking Christianity is exactly the kind of stuff I'm trying to avoid.
 Atheist Comics and By the Book Comics are somewhat funny but its fluff and I'm meaning to trim my feeds.
 Evangelical Realism is AWESOME, one of my favorite blogs, its about a guy who's practically making a religion about believing the truth. It's like a masters degreein making sense and being consistent. Yet it is exactly because of these awesome stuff I get lost into the discussion so much.
 Dwindling In Unbelief is hilarious, its a collection of lots of goofy killings made by God, including failed murder attepts by God (no kidding) or fun stuff as when the Bible described God as a redhead by proxy.
 richarddawkins.net is a forum and its news are very derivative, it could be my chosen blog simply because it's low traffic and boring but
 Skeptico is also low traffic and essasay oriented and while it covers good topics they are a little too basic for me.
 Daylight Atheism is also kinda boring (sorry Evangelical Realism has me spoiled) so I'm simply give it up.
 Why wont God heal amputees?: The blog is very good in balance between informative and succintness.
 Atheist Media Blog is excellent! More iinformative and more succint, except because I'm meaning to avoid video blogs, but simply knowing what's goping on is all I care about now.

 In the end the winner is Atheist Media Blog, however something that bothers me is that the page tends to slow my browser, but using Brief the problems are berable.

 Next is the Python blogs, must are nothing but a bother...

Morality takes you a long way

 I was reading about the "deconversion" story of a man who came to doubt his faith when he started reading about history, biology and geology and realized the Bible was wrong. I found it interesting that it was the loss of faith in biblical inerrancy that made him an agnostic, for me it was morality....

 I realized these problems before age 10, I figured out that God made the world in a deceitful way. I also knew of the contradictions in the Bible but again God himself said he wanted smart people to get lost (Mat 11:25).

 For me it was the sheer immorality of God what disgusted me to no end. Reading the Bible was an exercise in outrage, now, the Bible contains ass-covering clauses, but I could see they were cop outs, so I began reading apologetics too, not so much interested in science (I was very interested in science but Christian literature is appalling in that subject).

 Of course the apologetic garbage was a HUGE TANGLE OF COP OUTS some of them incredibly ridiculous like the ontological principle. I realized there was zero sustainable truths in christianity. Then I looked around and found people of many religions buried in the same circularly logical beliefs. Then I simply detached of any belief in Gods.

 Fear of God and belief in souls and afterlife lasted for longer though.

 Fear of God was instilled in me by brainwashing, but I knew it was irrational, for many weeks before going to sleep I found myself wondering "What if...?" but then I remembered "Are you afraid of Allah, Zeus, Quetzalcoatl? Of course no..." You grow out of that fear eventually.

 Belief in souls or afterlife is even more sticky, but my interest in science eventually lead me to neuroscience...

 Knowing enough about your brain shatters many conceptions of "self" let alone souls.

 The last problem was a problem of attitude. I was emotionally attached to the concept of souls, I found my new soulless yet pure model of reality unsatisfactory. It was dualism what was holding me back somehow. The problem is realizing that dualism is pointless.

 It doesn't matter if your soul is made of meat or ectoplasm, it is still a fragile -and malleable- piece of clockwork that can be tampered.

 If dualism doesn't protect your "self" what is the point of holding into it? especially when you consider it is false anyway.

 I'm, now, free :)


Immortal la pelicula

 Immortal es una película aparentemente independiente pero con altos valores de producción. La historia.

 Kenrro me la recomendó hace poco, según dicen será la segunda blade runner, hará historia y será epica.

 No me convenció.

 Este a película tiene 4 puntos relucientes.

 1) El diseño. Es excelente, todo es muy elaborado, no esperen algo agradable, ya que este es un mundo distópico, pero en su afan de ser moustroso o simplemente no-humano, todo ha sido diseño para verse muy diferente al presente, si bien el unico personaje que parece sacado directamente de nuestra epoca, de hecho viene de nuestra epoca.

 2) El mundo futuristico. Es de hecho, nada fuera de lo común, es un futuro distópico megaurbano con aliens, mutantes, cyrborgs/humanos. Pese a las muchas insinuaciones de que este es un mundo muy complejo, y pese a la megacorporacion "Eugenics" aparentemente tramando algo sombrio la historia no desarrolla ese elemento, es simplemente decoracion.

 Lo más relevnte es que hace mucho tiempo, un hombre llamado Nikopol era un caudillo de los no-humanos y como resultado parece haberse convertido en un che guevara, con reveldes esparciendo graffitts holográficos proclamando sus ideales por toda la ciudad. Nikopol regresa a la sociedad y es uno de los personajes principales pero de nuevo, es simplemente decoracion y no llega a nada.

 3) Efectos especiales. Muy buenos, buen uso de la computadora. Pero en el 2009 buenos efectos especiales ya no son una razón para ir a ver una película.

 4) Combinacion de animación y filme. La pelicula tiene secciones enteramente hechas por CG incluyendo a toda la gente y de hecho la mayoría de los personajes son CG es como ver una version futurista de Sherk. Pero una buena parte de los personajes son actores reales.

 No se nos dio ningúna explicaciones de esto, se supone que todo esto ocurre en un mismo universo, en si, quicieron ahorrarse actores con CG, realmente patetico.

 Calificacion final 2.5 extrellas.


Obras canonicas de los infieles

 Acabo de leer el libro de Dawkins "El espejismo de Dios"y de ver dos películas, "El Dios que no estaba" y "Religulous" (Juego de palabras de Religioso y ridículo"

 Todo fue excelente y las recomiendo a aquellos que esten tentados a caer en la supersticion y la religión. Lamentablemente ninguna de estas obras puede penetrar la dura cabeza de alguien que cree ciegamente, aunque El espejismo de Dios, podria, en teoría.

 Al fin de cuentas lo importante es hacer conciencia, la religion triunfa, entre otras muchas cosas, por el concentimiento silencioso de las masas ateas.

 Oh, y fue muy divertido.


Heaten canon works

 I just got th read The God Delusion, an watched two movies, "Religulous" and "The God who wasn't there"

 It all excellent and I recommend them to people who feel tempted by superstition and religion. Sadly none of them can really pierce through the thick skull of a blind believer, although The God Delusion could in theory.

 In the end the important thing is to rise conscientiousness, religion thumps because, among other things, the silent consent of the atheist mases.

 Oh and it was a lot of fun.

Reseña de Quiciera se un millionario (Slumdog Millionaire)

 Es buena, vallan a verla.

 Para ciertas audiencias especializadas, la película no será demasiado original. Es acerca de un niño muy, muy pobre que se vuelve aun más pobre, debido a un trágico evento, pero de alguna manera sobrevive. Sobrevive, no esta ni cerquitas de volverse millonario hasta que se metió en un programa de concursos en la televisión.

 La cosa es que nadie cree que un pobre como el pueda haber contestado tantas respuestas bien, así que el nos relata la historia de su vida, y como aprendió las respuestas a algunas de estas preguntas debido a trágicos eventos.

 Es básicamente otra pelicula sobre crecer en la miseria, y de alguna forma, es cautivadora, tiene accón, drama e incluso romance sin verse forzado en la historia. La mejor parte es conocer sobre la cultura de la India, especialmente los barrios bajos.

 Cinco estrellas.

 Bonus Post: Chai Wallah.

 Esta frase se me pego mucho, lo tradujeron como, chico del té. Viene de:
 Chai: Té
 Wallah: Prestador servicios.

 Reconocí la palabra chai inmediatamente, lei un comentario hace mucho tiempo, que la palabra "cha" para decir "té" es universal en asia. En la india se dice chai, y en algunas partes de china se dice chi, pero en general todo el mundo reconoce "cha" para decir té, eso nos demuestra lo importancia y antiguedad del té en la cultura oriental.

 Más aun, quedé sorprendido al ver el tipo de té que se usa en la india, es cafe claro pero opaco, parecido más al... café, es decir la bebida.

 Sucede que no es cualquier té es Masala Chai, el tipo de té más común en el sur de la India, lleva pimienta negra, clavo, canela, anís y una hierba rara que jamás he probado, cardamomo.

Review of Slumdog Millionaire

It's good, it really is, go watch it.

 For some, very specialized audiences, the movie won't be very original. It's about a very very poor kid who gets even poorer by tragic accidents and some how survives. Surviving, that's it, he actually isn't anywhere near becoming a millionaire until he gets into a Questions & answers TV Show.

 Thing is nobody believes a slumdog like him has gotten so much answers right, so he explains the story of his life, and how he came to know the answers he has got right out of tragic events.

 Its basically yet another movie about growing up in the slums, and its somehow captivating, it has action, tragedy, and even a love story without feeling stuffed. The greatest thing about the movie is taking a peek into the Indian culture, particularly the slums.

 Five stars.

 Bonus Post: Chai Wallah.

 I got really fond of this phrase, translated as "Tea boy", comes from:
 Chai: Tea
 Wallah: Worker

  I recongnozied the world chai immediately, long ago I read a comment about how the word "cha" is universal in Asia. It's prinounced "chai" in India and "chi" in some regions of China, but in Japan and most of asia is "cha", so we get an idea of how important and acient tea is in asian culture.

 I was even more suprised to see that this Indian, it's light brown and opaque, like coffe with milk.

 It happens to be Masala Chai, the most common type of tea in south India, it contains cinnamon, ginger, star anise, peppercorn, cloves and a herv I've never tasted before, cardamom.

Alguien me odia

 Meh, no tiene caso decir quien, pero alguien me escribió para decirme que me odiaba solo omitió los detalles de porque y no se a dignado a decirme porque quiere tumbarme los dientes.


Penn Says but I can't hear him

 For some reason his flash player doesn't work right in ubuntu and his posts aren't as good as his show anyway so I'm unsubscribing to his feed, it's not a bad feed actually pay him some attention: http://crackle.com/c/Penn_Says

 He's Penn famous for the Penn & Teller magic stuns in las Vegas and his show "Bullshit!" which I can't recommend enough.

 By the way, he should tie his hair up, he looks like and old lady like this, and don't look at me like this, the first one to admit it.

Many a thing to blog

 Got so much to blog I made a post about it. Today subject are:

 Somebody hates me
 Penn Says hates linux (not really)
 Slumdog millionaire
 Heathen canon works
 Morality Quiz results.
 Lotsa replies to blogs and stuff, I've beeen collecting losts of feeds and they in turn give lots of cool things to comment about.


Hello Bespin

 Last week Mozilla announced Bespin - the web development environment.

 Bespin is a web-application, you install it on your server. In a private domain I suppose.

 Its entirely written in javascript and instead of writing directly to the DOM it uses the not so-recent-but-not-very-popular-anyway canvas DOM element.

 They actually implemented a canvas/javascript GUI toolkit for this application, namely "Thunderhead"

 What's hot?
 - Portable environment.
 - Real-time collaboration over the net.
 - Project management for free.
 - Streamlined extensibility, extensions are installed with a single click.
 - Ubiquity like commands (i mean Quicksilver/Katapult/Launchbox/Launchy/Do/Krunner style)
 Now, the first concern for a javascript editor is, is it fast? It looks fast in the screencast, in fact they brag a lot about the speed provided by canvas.

 But that was running in a clean Safari, my heavily extended Ubuntu Firefox was sluggish as hell.

 Now Mozilla neglects Fiefox in Linux and I know I'm running too many extensions. I could install Epiphany but being a Mozilla product I can't believe they aren't going to laverage that advantage.

 On the other hand in Windows I have no option but Firefox, except closed source Opera.

 On an slithly unrelated note Epiphany-webkit crashes as soon as I try to visit any website so that's outta question too.

 I can't help but compare it to KomodoEdit. KomodoEdit has been my editor for over 2 years and I love it, but the open source version is stalled on features, and may never grow them as it eats into the market  of its closed source parent KomodoIDE.

 If Bespin gets more of the code inspection features that KomodoEdit is lacking I'll definitively switch, with the amusing implication that I'll have to use either multiple profiles or different browsers for bespin and my web surfing because of sluggishness.
 But with the new that Firefox 4 Will try to use artificial inteligense and natural language processing I think I'll finally leave Firefox after so many years.


import time

Today is a special date, well actually an special UNIX date, according to the UNIX calendar -which is measured in seconds after January 1 1970- we are approaching date 1234567890 at precisely 18:31:30.

So in anticipation, let's write a little clock script:

import time
while True:
print int(time.time())

Or if you prefer a countdown clock like myself:

import time
t = True
while t:
t = 123456789 - int(time.time())
print t
print "Happy valentine ^_^!"


Net Neutrality is good Tinyurl is wrong

 I'm very sad to discover Tinyurl is spreading lies against net neutrality in a site I won't dignify by linking to it.

Net neutrality in an nutshell
 Internet usage can be measured, its unit is the bit/s or bits per second. The companies that built and/or manage the connection are called ISP for Internet Service Provider, everybody else is a user, you, me, Google, Yahoo, etc.
 Of course Google, Yahoo et al pay a lot more to their ISP because they transmit a lot more bit/s.
 The issue is, the ISP want to charge them more for each bit/s and that's the problem.

 ...at least half of it, the other problem is that ISP want to compete with them with their own services and are using their privileged position to slow down the competition, soon you'll find that YouTube is getting much slower than that brand new ISPTube, why could it be?[/sarcasm]
 And that's why net neutrality is so important. I don't care how much Google pays for each bit per second or each bit per month as long as they pay at the same rate than everybody else and specially, at the same rate than the ISP own services as well.


The best questions against atheism

 Creationist Lee Strobel wanting to pretend to be objective made a poll asking what should it take to make them Christians (actually non atheists but i disgress):

"What argument is most convincing to plant the seeds of doubt (or, rather, faith)?"
 Several high profile atheists answered with rather easy to disprove questions, granted, they didn't say they believed it but that they could be used to make an atheist hesitate.

 Personally I find this to be the best argument in favor or christianity:

 "What if you are being deceived by the devil? Maybe all the evidence that dinosaurs lived millions of years ago is fabricated, maybe the stupidity that the universe was necessarily created by a superman ghost that doesn't need to be created actually makes sense, maybe all of God's carnages and slaughtering of innocent  children is actually a pretty cool thing and the only reason you think hurting people is wrong is because you are possessed by Satan?"

 I wish I was kidding, this is the best argument in favor of faith I can come up with.


The Dark Night, review pending...

 I've just seen Batman The Dark Night, the best thing I can say about it is that I can't say anything about it yet, for an amateur cinephile it is a mouth full to analyse!


Melancholy Elephants

This is a truly inspirational story, what better way to get our point across than by writing a fine SciFi story?

Melancholy Elephants by Spider Robinson

The literal version.

I have many random stuff I'd like to share, many are youtube vids, but I don't because I'd like to space out a little so my "readers" can keep up with them, except I don't have any readers any way let me talk you about "literal versions videos".

A literal version video is a music video where the lyrics have been replaced by literal descriptions of the music video itself. Personally I thin it's genius.

Instead of embedding a bunch of videos and make the page lag I'll just link them from here. I'll also add them to my del.icio.us.

Rick Roll: The Literal Version
U2 - I Still Haven't Found What I'm looking For
A-Ha - Take on Me
Head Over Heels: Literal Video Version
Harry Potter and the Order of the Phoenix

That last one is a literal version trailer but it's just as funny.


Garfield Minus Garfield

 I stumbled upon "Garfield minus Garfield" a parody of Garfield that features John talking alone to his imaginary cat. Go figure, even if Garfield was there the truth of the matter is that this guy is talking to his cat as if he was a person, the result is eerily funny. I'll keep on feeding that random tag.


Bye bye Bush!

 Today is the day, today we celebrate.

8 Years Of Bush in 8 Minutes! ~Olbermann


The perfect SCV rush

Gotta feed that random tag here is the acclaimed SCV rush (starcraft).

Don't talk to the police!

This is kinda old but priceless. I wish México had a 5th Amendment analogue, in fact I'm gonna ask a lawyer next time I see one.


Ubuntu fixes Click of Death

 Slashdot reports that Ubuntu has implemented a workaround the manufacturers windows oriented configuration that resulted in dead hard drives, the so called click of death.

 This and the news that Ubuntu 9.04 can boot in about 20 seconds on some systems are taking my hope of running Ubuntu in my netbook much closer.

 Now if only they made it sleep properly I'll be sold.

Let the bus driver alone!! [/emo]

Everybody is making a fuss about the bus driver that refused to drive a bus with a (very positive and polite) atheist banner. Now honestly if I were asked to drive a bus with banner that said...


I'd also refuse to do it. He must be fired, its fair, I'll be fired too if I did that, but I don't question the morality of his reaction, just the rationality (or even the morality) of his faith.

Linux Keyboards

 I found these keyboards made by ZaReason with Ubuntu and Tux logos instead of Windows logos in their Super/Meta keys, personally I think a more conservative and subtle logo is more fit for these keys, the original meta key used a solid diamond. There is no official Super logo, but a star was proposed and I think it would look great.


Christian cowardice

Haven't you noticed that christian blogs rarely have public comments? And that when they do they censor dissent anyway?

Here is a blog post asking why are we atheists, including his list of suspected reasons:

- You read the works of Voltaire and became a convert?

- You are a secret Luciferian posing as an Atheist.

- You are a Communist?

_ You went to church when you were younger but never experienced God?

- You want to make yourself God and do not like competition?

-You are a postmodernisand you believe that that there is no ultimate truth?

-You read the works of Charles Darwin and are writing manuscripts of the next “My Atheist Struggle”?

- A Catholic Priest made a pass at you and you blame God?

- You are secretly in love with Richard Dawkins and have not told your parents that you are not like other men?

- You are not convinced evil exists.

_ You believe the ten commandments are harmful to the well being of human kind.

_ You are following a trend?

Here is my reply which I doubt he will post:
My separation from christianity came in stages, first I rejected God when I read the bible and found God was nonsensical:

...an all mighty omniscient being taking any actions? creating light without stars? embedding spiritual beings into physical bodies when simple spirits suffice? eternally punishing weak and ignorant beings without understanding of evil? Using his magic to stuff billions of species into a tiny boat so his magical flood kills everybody in the planet instead of, you know vanishing them in a microsecond with his magic?...

and evil:

...since he already knew Abraham would accept to kill his son, the total result of the exercise was to make Abraham have a hell of an afternoon, whats up with all the slavery, bigotry, misogynism, homophobia and ultimately all the authoritarianism and insistence in obedience against any ethical concerns one might have? Why does he demands we believe without any doubt that he will answer our prayers while at the same times makes no guarantee that he will actually answer them? and then pretends that taking no action and letting matters take its logical course constitutes an answer?...

and poorly defended:

Lack of evidence? Just believe it!
Makes no sense? Just believe it!
There are better explanations! Don't listen, its the Devil!
But that's not fair! Do you want to discuss that in hell?...

But I didn't became an agnostic until I found that there are many other religions and that their followers are sincere.

I became an atheist when I found out that all of them are based on false claims that must be taken on faith.

Only science make a rigorous attempt to reach truth.

I finally cased believing in my soul and the afterlife when I learned about neurology (and evolutionary psychology, but mostly neurology).

It's simple, the mind is the brain, no brain no mind, we can actually predict what part of your mind you will lose if we remove specific part of your brain, etc.


Unix assumed

I was reading over the documentation for Jinja2 when I realized that they assume you are running a Unix with sudo installed. No instructions for Windows or for installing from tarballs are given.

This means that that every day more and more developers are using unix as a platform.
Now I'm aware that MacOS X also includes sudo, and I suppouse some flavor of BSD does too,
so this doesn't count as a victory for linux, much less Ubuntu, but at least is not a defeat, its progress overall for the future of free desktops.

You know what makes me really happy? And apt line ^_^!

Anyway, shouldn't there be a way to automate the inclusion of a repostory and installation of software? What happened to klick, autopackage and 0install? Those are very good proposals that haven't got enough momentum. However I think whatever default mechanism for installation Ubuntu adopts will become the default for desktop oriented distros, that's the momentum Ubuntu has in the linux community.

Cutest book cover ever!

Prove me wrong.

Middle name

Extracted from from slashdot:

<dotancohen> Yes, we (the nerds) care about such things. Pedantic is our middle name.
<anonymous coward=""> My middle name is Clive, you insensitive clod!
<jmenzes> Anonymous Clive Coward? Your parents didn't like you very much, did they? :P
<daveime> Rincewind always said his middle name was "Luck" ... unfortunately his first name was "Bad".


New google favicon

Google has updated its favicon again!

I think it looks great, anyway, better that the prior favicon. I still don't like that the favicon and the logo have so little in common, perhaps Google is planning on upgrading their main logo as well. However given how strong a brand Google is right now I doubt it.


A la mitad de la noche

Mi gameboy (nombre provisional de mi netbook) desperto de hibernacion y busco la wireless a las 3:00. Será el antivirus? Cuando la forcé a apagarse dijo que otros usuarios tambien estaban conectados, tendra que ver con la carpeta compartida? Todo esto me recuerda que el 75% de los equipos en esta casa corren windows.

Tal vez debería apresurarme a cambiar a linux la netbook pero como dije, su killer app es lo facil que es dormirla y despertarla.

En fin. ahora para algo completamente diferente, decidi borrar 8 archivos (82MB) de los libros (gratuitos) que estaba dispuesto a leer sobre economia. Es simplemente demasiado, Aun me quedan 10 (85MB) los cuales no creo leerlos todos.


The Matrix runs on windows

Bueno pues el titulo es cat /dev/random no? voy a postear cosas más estupidas más seguido. Y depués hanlare de filosofía y programación.

The Matrix Runs on Windows