1. Parece que en el MIT han desarrollado una pizarra que entiende de física. Mejor que intentar explicarlo es que vean el vídeo:



    Seguramente la pizarra tendrá más entendederas que muchas de las víctimas de nuestro sistema educativo. Y que algún profesor también.

    Visto en psé Devlog.
    2

    Ver comentarios

  2. Esto que os voy a contar
    Está basado en un hecho real.
    Son cosas que hay que explicar,
    Si no la gente se puede liar.
    Todos somos igual,
    Todos tenemos algo que ocultar,
    Historias prohibidas no aptas para menores de edad.

    Spiderman fuma hash,
    Batman trafica con crack,
    Hulk es una porno star
    Se lo monta con He-Man
    Y todos van a pillar la casa del dealer Jack
    El destripador que pule un buen material.

    Los niños tienen que estar contentos,
    Sus héroes se ponen ciegos, muy ciegos,
    No saben qué es difícil aguantar esa presión,
    No saben qué sus superhéroes en realidad son

    Superjunkies, ahá
    Superjunkies.
    Superjunkies junkies, ahá
    Superjunkies

    Superman se encuentra mal,
    Sin speed no puede volar.
    Flash Gordon está fatal,
    El hombre lobo no le quiere fiar.
    Y todos van a pillar
    Esta noche se la quieren pegar
    Hay fiesta en casa del hombre invisible
    Y todos van a estar.

    Los niños tienen que estar contentos,
    Sus héroes se ponen ciegos, muy ciegos,
    No saben qué es difícil aguantar esa presión,
    No saben qué sus superhéroes en realidad son

    Superjunkies, ahá
    Superjunkies.
    Superjunkies junkies,junkies, ahá
    Superjunkies

    Superjunkies,
    Todos nosotros somos
    Superjunkies,
    Todos vosotros sois unos,
    Superjunkies, junkies
    Britney, Bush, Alejandro Sanz,
    Superjunkies,
    Mi amigo, tu amiga, el tío del gas,
    Superjunkies,
    El DJ que pincha este tema en su bar,
    Superjunkies,
    Los que madrugan para ir a currar,
    Superjunkies, junkiesm
    El Fary, Torrente, David Bisbal,
    Superjunkies,
    Pero sin duda nosotros los más,
    Superjunkies,
    Y todo los que nos van a demandar

    Supercolocado
    Letra del tema "SuperJunkies" de Pereza, en el disco Animales.
    2

    Ver comentarios

  3. El objetivo de la nueva sentencia with es ser utilizada cuando queremos garantizar que un determinado código, normalmente responsable de hacer las operaciones de limpieza, sea ejecutado, sean cuales sean las circunstancias. Se suele usar un bloque try...finally para conseguir el mismo objetivo, pero el nuevo sistema ofrece algunas ventajas. Los detalles de esta mejora se pueden consultar en la PEP 343.

    ¿Cómo es y para que sirve?



    La sentencia with es una nueva estructura de control cuya formulación básica es la siguiente:

    with expresión:
    with-block


    Y funciona así:

    Se evalúa la expresión, y el resultado debe ser un objeto que soporte el protocolo de gestión de contextos (context management protocol). El objeto devuelto por la expresión ejecutará un código de inicialización y preparación, que será anterior al del bloque interno y, de igual manera, ejecutará código inmediatamente después de la finalización del bloque, permitiendo asi realizar operaciones de limpieza y finalización. Este código de finalización se ejecutará incluso en caso de una excepción.

    Hay una segunda forma de uso, que sería la siguiente:

    with expresión as var:
    with-block


    En este caso, el objeto devuelto por la expresión puede retornar un valor, que se almacena en variable var. Obsérvese que en var NO se almacena el objeto resultado de la expresión, sino un valor retornado por dicho objeto.

    La opción de uso de with está por defecto deshabilitada en Python 2.5, de forma que hay que añadir la siguiente directiva para habilitarla:

    from __future__ import with_statement


    Si, en Python podemos importar funcionalidades del futuro. Mola mogollón.

    Esta sentencia pasará a estar habilitada por defecto en la siguiente versión, Python 2.6.

    Ejemplo de uso



    Algunos de los objetos estándar de Python soportan el protocolo de gestión de contextos, lo que significa que pueden ser usados con las expresiones with. Los objetos de tipo archivo (file) son un ejemplo:

    with open('/etc/passwd', 'r') as f:
    for line in f:
    print line
    ... more processing code ...


    Después de la ejecución del código anterior, el fichero abierto en f será cerrado automáticamente, incluso en el caso de que dentro del bucle for se produjera una excepción.

    De igual manera, las variables condicionales (Condition) o de bloqueo (lock) definidas en el módulo threading también pueden usarse con la sentencia with.

    lock = threading.Lock()
    with lock:
    # Critical section of code
    ...


    El bloqueo es automáticamente adquirido antes de la ejecución del bloque, y liberado una vez que el bloque haya finalizado.

    En el módulo decimal también hay una nueva función, localcontext(), que facilita salvar y recuperar el contexto decimal actual. El contexto (un objeto de la clase decimal.Context) encapsula la precisión y caraterísticas de redondeo deseadas para los cálculos decimales.

    from decimal import Decimal, Context, localcontext

    # Displays with default precision of 28 digits
    v = Decimal('578')
    print v.sqrt()

    with localcontext(Context(prec=16)):
    # All code in this block uses a precision of 16 digits.
    # The original context is restored on exiting the block.
    print v.sqrt()


    Cómo crear nuestros propios gestores de contexto



    Aunque su uso es muy sencillo, los mecanismos internos de la sentencia with son más complicados. La mayoría de la gente sólo usará la sentencia with con objetos ya existentes y preparados para ello; si este fuera su caso, puede saltarse tranquilamente el resto del texto. Para los demás, daremos un repaso con mayor detalle a la implementación, que será necesario si queremos declarar clases aptas para ser usadas con with.

    A vista de pájaro, el protocolo de gestión de contexto es el siguiente:



    • Se evalúa la expresión que sigue al with , y el resultado debe de ser un objeto que llamaremos gestor del contexto, o gestor para abreviar. El gestor debe tener dos métodos: __enter__() y __exit__().

    • Se ejecuta el método __enter__ del gestor. El valor retornado, si lo hubiera, es asignado a la variable indicada con la expresión as variable. En caso de que no exista la expresión as, el valor se ignora.

    • Se ejecuta el código del bloque interno.

    • Si durante la ejecución del bloque interno se produjera una excepción, se llama al método __exit__(type, value, traceback) con los valores de la excepción (type es el tipo de excepción, value la excepción propiamente dicha y traceback la traza del programa hasta el momento del error). El valor retornado por el método __exit__ indica si la excepción debe elevarse de nuevo o no. Cualquier valor False eleva de nuevo la excepción, mientras que un resultado de True la suprime. Suprimir la excepción es, en principio, muy poco recomendable, porque privamos al autor del código contenido dentro del with de tratar el mismo la excepción. Las funciones y métodos en python retornan None si no tienen una cláusula return específica, y None es equivalente a False, así que lo habitual es que no haya clausula return.

    • Si no se produjera ninguna excepción, se sigue llamando al método __exit__, pero los parámetros type, value y traceback se pasarán con el valor None.



    Veamos un ejemplo: El esqueleto necesario para gestionar una base de datos con soporte para transacciones.


    Para los que no quieran pinchar en los enlaces: Una transacción es un conjunto de cambios en la base de datos, agrupados como una unidad indivisible o atómica. Las transacciones se pueden confirmar (commit), lo que significa que todos los cambios se aplican a la base de datos, o rechazar (roll back), lo que significa que todos los cambios son descartados (incluso los que ya hubieran sido aplicados).


    Supongamos que disponemos de un objeto que representa la conexión con la base de datos. Nuestro objetivo es escribir código como el siguiente:

    db_connection = DatabaseConnection()
    with db_connection as cursor:
    cursor.execute('insert into ...')
    cursor.execute('delete from ...')
    # ... more operations ...


    La transacción se confirmará (commit) si el código en el bloque interno se ejecuta sin errores, y se rechazará (roll back) si se produjera alguna excepción en el mismo. Supondremos que la conexión a la base de datos implementa la siguiente interfaz:

    class DatabaseConnection:
    # Database interface
    def cursor (self):
    "Returns a cursor object and starts a new transaction"
    def commit (self):
    "Commits current transaction"
    def rollback (self):
    "Rolls back current transaction"


    El método __enter__() es muy fácil, simplemente tenemos que empezar la transacción. En este caso, el objeto de tipo cursor constituye un resultado muy útil, así que el método __enter__() lo retorna como resultado de su ejecución. El programador usuario podrá hacer uso del mismo en la sentencia with asociandolo a una variable con la sentencia as, como ya se ha visto.

    class DatabaseConnection:
    ...
    def __enter__ (self):
    # Code to start a new transaction
    cursor = self.cursor()
    return cursor


    El método __exit__() es más complicado, porque es el encargado de realizar casi todo el trabajo. En primer lugar, debe comprobar si se ha producido alguna excepción. Si no se hubiera producido ninguna, la transacción es confirmada. En caso contrario, es rechazada.


    class DatabaseConnection:
    ...
    def __exit__ (self, type, value, tb):
    if tb is None:
    # No exception, so commit
    self.commit()
    else:
    # Exception occurred, so rollback.
    self.rollback()
    # return False


    El módulo contextlib



    Este módulo proporciona algunas funciones y un decorador que simplifican la creación de nuevos gestores de contexto.

    El decorador se llama contextmanager, y permite definir un nuevo gestor simplemente escribiendo una función generadora, en vez de una clase (Aquí hay una explicación de lo que son las funciones generadoras en Python).

    La función generadora retornará un único valor, usando la sentencia yield. El código hasta la llamada a yield consistirá en el código de inicialización, equivalente al método __enter__ que vimos antes, y el valor retornado equivaldrá al resultado de dicho método. El codigo posterior al yield equivaldrá al método __exit__; cualquier excepción elevada en el código del bloque interno será elevada antes en el yield.

    El ejemplo de base de datos que vimos anteriormente se podría escribir, por tanto, como una función generadora:

    from contextlib import contextmanager

    @contextmanager
    def db_transaction (connection):
    cursor = connection.cursor()
    try:
    yield cursor
    except:
    connection.rollback()
    raise
    else:
    connection.commit()

    db = DatabaseConnection()
    with db_transaction(db) as cursor:
    ...


    El módulo contextlib también proporciona una función, nested(), cuyo objetivo es combinar una serie de gestores de contexto de forma que no sea necesario anidar las sentencias with. Por ejemplo, si quisiéramos empezar una transacción a la base de datos a la vez que adquirimos un bloqueo, podríamos hacerlo así:

    lock = threading.Lock()
    with db_transaction(db) as cursor:
    with threading.Lock() as locked:
    ...


    pero usando la función nested, quedaría así:


    lock = threading.Lock()
    with nested (db_transaction(db), lock) as (cursor, locked):
    ...


    Por último, la función closing(object) retorna el objeto que se le pasa como resultado, permitiendo así que se vincule a una variable con la expresión as, y llama al método object.close() cuando se termina de ejecutar el bloque de código interno. ¿Para quá sirve eso? Se entiende mejor con un ejemplo:


    import urllib, sys
    from contextlib import closing

    with closing(urllib.urlopen('http://www.yahoo.com')) as f:
    for line in f:
    sys.stdout.write(line)


    Esto permite usar el objeto urllib.urlopen dentro de una cláusula with, aunque no sea un gestor de contexto.


    Más información sobre las novedades en Python 2.5



    Actualización (16/Oct/2006)
    Se me ha ocurrido otro ejemplo:


    from __future__ import with_statement

    class Html(object):
    def __init__(self, titulo):
    self.Titulo = titulo
    def __enter__(self):
    print '<html>\n<head>'
    print '<title>%s</title>' % self.Titulo
    print '</head>\n<body>'
    def __exit__(self, tipo, valor, traza):
    print '</Body>\n</html>'

    with Html('Este es el título'):
    print '<p>Hola, mundo.</p>'


    Que produciría el siguiente resultado:

    <html>
    <head>
    <title>Este es el título</title>
    </head>
    <body>
    <p>Hola, mundo.</p>
    </Body>
    </html>
    2

    Ver comentarios


  4. Visto en Microsiervos
    0

    Añadir un comentario

  5. La soberbia es el primero de los pecados capitales, por ella, según la teología cristiana, el hombre fue expulsado del jardín del paraíso.

    Pecados Capitales por el Bosco

    Menos mal que yo sigo a Doraemon, porque si no, ya me habrían expulsado de este paraíso.

    El otro día comentaba el tema de las banderitas, y ahora me encuentro con la siguiente noticia Cae al suelo el paño de la bandera de Gran Canaria en Las Palmas, y claro me acuerdo de la soberbia y me descojono.

    Aunque para demostraciones de soberbia tenemos al tranvía de tenerife, que cumple dos funciones en una, trasladar pasajeros y entretenerlos, si señor el tranvía tendrá la capacidad de divertir cual parque temático, obsérvese el innovador trazado en plan montaña rusa.

    Montaña Rusa, que diver
    1

    Ver comentarios

  6. Vacilando por el Google Analytics, he encontrado la lista de las palabras y frases que han usado algunos en google y que, de forma a veces inexplicable, les han conducido a la guarida de este, su humilde servidor. Ya lo había visto en otras bitácoras; la verdad es que después de ver algunas de las frases, la conclusión es clara: la peña está mal. Muy mal.

    Juzguen ustedes mismos:

    gilipollas - No me lo tomaré como nada personal
    ron armiche - Hola, Edmundo
    como hacer la paja a un hombre - ¿Con cuidado?
    veronica mars emule - Si, yo también tengo asociadas esas palabras en mi cabeza
    me lo trago - A eso lo llamo yo un dato interesante
    consecuencias de la cerveza - Que te voy a decir que no sepas ya...
    fotos de vacas - Hola, Ad Astra
    ornitorrinco+tiempo de vida - ¡Glups!
    precio de ornitorrinco - Tirado, señores, tirado
    colorados desnudos y peludos - Alguna pista más...
    coalición de un ovni en roswell - ¿Lo cualo?
    pastillas para espolones - Ahora mismo no nos quedan
    ornitorrinco es ovíparo - ¿Algún problema con eso?
    episodio house muere paciente - Yo tampoco lo he visto
    contraindicaciones de los polvos de meléndez - Sequedad en la cartera
    que se significa la palabra ornitorrinco - No lo se se
    clítoris vs pene - ¿Que necesidad hay de buscar estos enfrentamientos? Con lo bonita que es la colaboración
    el método científico son siete - Y la respuesta de todo, 42
    síndrome del ornitorrinco - Sus síntomas son muy similares a los de la gilipollez
    pequeños culos - Para gustos hay colores
    foto de perros pinches pequeños - Véase respuesta anterior
    ornitorrinco en la biblia Aparece poco, la verdad
    formas de hacer una paja a un hombre - El tema interesa, por lo que veo
    te voy a dar la del pulpo - ¿pero hombre, qué te he hecho yo?
    hacerse la paja un hombre - Ya vale, tío, se te van a salir los ojos de las cuencas de lo flaco que te vas a quedar
    semejanzas entre humanos y monos - Los dos se hacen pajas (Joder , ya se me pegó)
    información del ornitorrinco en ingles - if, if, between
    mejores series televisión española - Curro Jiménez. A Partir de entonces, todo ha ido degenerando
    decencia del ornitorrinco - mayormente virtual
    bebes ornitorrincos - ¿A que son preciosos?
    culos de suegras - ¡Puag!
    avtomat kalashnikov, modelo 1947 - Tampoco nos quedan
    mamífero ovíparo con pico - ¡Presente!
    mirar las pajas de un hombre - ¿No te cansas nunca?
    amalgamas sucias - Es un rollo limpiarlas, la verdad
    bolas enormes - Me voy a sonrojar
    los ornitorrincos son peligrosos? - Somos los mejores en lo que hacemos
    pene ornitorrinco - Quiquitito, para que nos vamos a engañar
    ver pito de los gorilas - ¿Eres tu, Tarzán?
    ovnis en la antigüedad - Mucho mejores que los de ahora, adonde va a parar
    ver la paja de un hombre - Se acabó. ¡Fuera de la clase!
    catalogo kinder sorpresa 2006 - ¿Pero cómo coño acabaste aquí?
    perdón en guanche - Ñostiolosiento
    siete razones por la que no existe dios - Me sobran seis
    vídeos guarros sin enviar sms ni llamar - Las cosas claras
    fotos de mi suegra la cachonda - Casi que paso
    pasaje de Onán - ¿Tu otra vez? ¡He dicho que fuera de la clase!
    comentarios de gente: la verdad es verdad - Díselo a Losantos
    tubos de ensayo para tragos - La necesidad es la madre de la invención
    el hombre que se paja - ¡A LA PUTA CALLE, HOMBRE; COÑO, YA!
    soy gilipollas y me he dado cuenta hoy - A mi me pasa todos los días
    fotos extremas de ovnis - ¿Qué será lo próximo, ovnis tuneados?
    cuando experimentan contigo como se llama - Putada, hijo, se llama putada
    7

    Ver comentarios

  7. El otro día me dio por hablar de banderitas, propias y ajenas, y esta mañana me he arrepentido, resulta que los americanos del norte quieren supervisar las opiniones del mundo.
    Concretamente, y según el New York Times “Software Being Developed to Monitor Opinions of U.S.”

    ”Varias universidades estadounidenses, con fondos del ministerio del interior de ese país, están desarrollando una aplicación para monitorizar las opiniones negativas sobre los Estados Unidos en la prensa y agencias de noticias de todo el mundo, con el fin de "identificar patrones comunes en numerosas fuentes de información que puedan ser indicio de potenciales amenazas para el país".

    Mi primera reacción fue la de acojonarme, y pensar “la he cagado”, pero después de los primeros instantes de pánico y de pasar por una breve fase paranoica*, me envalentoné y recordé que uno de los pasatiempos preferidos de los europeos es poner a caldo a los estadounidenses de norteamérica.
    ¿pero de qué vas?
    *un tío con pinta sospechosa me estuvo siguiendo, hasta que descubrí que sólo era un concejal de urbanismo.
    1

    Ver comentarios

  8. De antemano, y citando a Pascal, les pido disculpas por la longitud de este comentario. No he tenido tiempo de hacerlo más corto.

    Generadores e Iteradores



    Python 2.5 añade la posibilidad de pasar valores a un generador. Pero antes, recordemos qué es, y para qué sirve, un generador. Los generadores están con nosotros desde Python 2.3 y, básicamente, son funciones cuyo resultado es un iterador.

    ¿Y qué es, y para qué sirve, un iterador, se preguntará el astuto lector?

    Los iteradores son contenedores, capaces de devolver sus elementos de uno en uno. Los iteradores se pueden usar en un bucle for y en otros lugares donde se necesite una secuencia, como por ejemplo, en las funciones zip(), map() o lambda() reduce(). Son iteradores todos los tipos de secuencia (como list, str y tuple), algunos otros tipos, como dict y file, y cualquier objeto cuya clase defina los métodos __iter__() y __getitem__().

    El generador, decíamos, es como una función normal, solo que retorna un iterador. La única diferencia aparente entre una función normal y un generador es que se usa la palabra reservada yield en vez de return. Las funciones generadoras suelen contener uno o más bucles que devuelven (yield) elementos al llamante. La ejecución de la función se para en la palabra clave yield (devolviendo el resultado) y se reanuda cuando se solicita el siguiente elemento llamando al método next() del iterador devuelto.

    Los generadores son, por tanto, una herramienta simple y potente para crear iteradores. Cada vez que se quiere obtener un nuevo elemento, el generador reanuda la ejecución donde se quedó (recordando todos los valores de los datos y la última sentencia en ejecutarse). Este ejemplo muestra lo fácil que es crear generadores:

    def delreves(data):
    for indice in range(len(data)-1, -1, -1):
    yield data[indice]

    >>> for car in delreves('Wanda'):
    ... print car
    ...
    a
    d
    n
    a
    W


    Cualquier cosa que se pueda hacer con generadores se puede hacer también definiendo una clase iterador. Lo único que aportan los generadores es que su métodos __iter__() y next() se crean automáticamente. Además, como las variables locales y el estado de ejecución se guardan automáticamente entre llamadas, la función generadora es más fácil de escribir y no requiere utilizar variables de instancia como self.indice o self.datos. Cuando los generadores terminan su ejecución, hacen saltar la excepción StopIteration automáticamente. La combinación de estas características hace que la creación de iteradores sea tan sencilla como la de una función normal.

    En fin, más información, y más detallada sobre estos temas, se puede consultar aquí: Iteradores y aquí: Generadores.


    Nuevas posibilidades



    Los generadores antes de Python 2.5 sólo producían salidas; una vez realizada la primera llamada, (momento en el cual se crea el iterador), no hay forma de añadir nueva información a la función generadora. En determinados casos, la posibilidad de alterar el comportamiento de la función de una determinada manera durante la secuencia de llamadas puede ser útil. Algunas soluciones para este problema en el momento actual incluyen utilizar variables globales (¡Aurghhh!) o pasarle a la función un objeto mutable, que pueda ser modificado por el llamador de la función.

    Veamos como podremos hacerlo a partir de Python 2.5 con un ejemplo. Supongamos el siguiente generador:

    def counter (maximum):
    i = 0
    while i < maximum:
    yield i
    i += 1


    En este punto, debería estar claro que una llamada a counter(9), por ejemplo, devolvería consecutivamente los valores desde 0 hasta 9.

    A partir de Python 2.5, yield pasa de ser una sentencia a ser una expresión; en otras palabras, yield puede retornar un valor, que puede ser utilizado o asignado a una variable.
    val = (yield i)

    Nota: Es recomendable rodear con paréntesis la expresión yield, siempre que se utiliza para algo, como en el ejemplo anterior en que es asignado a una variable. No son siempre necesarios, pero es más fácil añadirlos siempre que aprenderse los casos especiales en que no son necesarios (De todas formas, si se es lo suficientemente aguerrido, las reglas exactas están explicadas en el PEP 342 - Coroutines via Enhanced Generators)

    Los valores son enviados al generador llamando al método send(value) del generador (Recordemos que en Python, casi todo es un objeto, incluyendo las funciones). Cuando se llama a send, se continua con la ejecución del código del generador, y la expresión yield retorna el valor especificado. Si se llama al método normal, next(), yield retorna None.

    En el siguiente ejemplo, modificamos el código para permitirnos cambiar el valor del contador en medio de las sucesivas llamadas.

    def counter (maximum):
    i = 0
    while i < maximum:
    val = (yield i)
    # If value provided, change counter
    if val is not None:
    i = val
    else:
    i += 1

    Con lo cual podriamos hacer lo siguiente:
    >>> it = counter(10)
    >>> print it.next()
    0
    >>> print it.next()
    1
    >>> print it.send(8)
    8
    >>> print it.next()
    9
    >>> print it.next()
    Traceback (most recent call last):
    File ``t.py'', line 15, in ?
    print it.next()
    StopIteration

    Además de send(value), hay dos nuevos métodos en los generadores:

    • throw(type, value=None, traceback=None) se puede utilizar para elevar una excepción dentro del cuerpo del generador. La expresión yield elevará la excepción en la siguiente ejecución. Podemos utilizar esta llamada y pasarle la interrupción StopIteration, para forzar el fin del generador, pero para eso, mejor usar el siguiente método.


    • close() eleva una excepción de tipo GeneratorExit que obliga a finalizar el generador. Es invocada por el recolector de basura de Python justo antes de liberar el generador. Esto significa que el código del generador obtiene una última oportunidad de ser ejecutado antes de terminar. De esta forma se garantiza que las sentencias try...finally sean ejecutadas. De esta forma se elimina una restricción semántica que se había impuesto en la versión anterior, que impedía mezclar el uso de yield con try...finally. Era necesario eliminar esta restricción para poder implementar la sentencia with, descrita en el PEP 343 - The "with" Statement.


    Ejercicio para el lector



    Modificar el ejemplo del generador counter() para permitirnos modificar el límite máximo, en vez del contador. Las respuestas, en los comentarios. Los que consigan terminar el ejercicio serán obsequiados con una impresión de honda satisfaccion por el trabajo bien realizado.


    Más información sobre las novedades en Python 2.5

    5

    Ver comentarios

  9. Dentro del mundo empresarial se hacen todo tipo de clasificaciones, una de ellas distingue las empresas que venden algo (lo que sea), y las que venden humo.

    Normalmente las que venden humo son empresas prósperas, productivas, dinámicas, y super-guays en general. Siempre me ha llamado la atención la capacidad de vender hielo a esquimales.

    Para vender un producto que nadie necesite, te has de valer de todo tipo de artimañas, quiero decir de técnicas de marketing. En estados unidos de norteamérica, se han montado un negocio impresionante a cuenta de las banderas y de las banderitas. Todo el mundo tiene como mínimo 131 banderas en su casa, en caso contrario se convierte automáticamente en sospechoso.

    No se muy bien cómo empezó el rollito en ese país, pero se cómo está empezando aquí, en la plaza de colón, en madrid, pusieron una bandera española más grande que ha parido madre. El ejemplo cundió, y cundió en la fuente luminosa, en gran canaria, donde se gastaron 350.000 €, en una bandera 300 metros cuadrados con un mástil de 50 metros y ahora le toca a tenerife, donde han propuesto izar una bandera más grande, más alta, más cara y en definitiva más chula que todas las demás.

    El chollo de las banderas, en españa, tiene un matiz diferente que el de los norteamericanos de estados unidos, y es que allí se vuelven locos por una bandera, sólo una, pero aquí acabaremos todos con la bandera de españa, la de la comunidad autónoma, provincia, isla, municipio y barrio correspondiente.


    Lo que dicen en otros sitios:
    - Bandera 2.0 en Ad astra
    - Nuestra bandera en Sildavia
    5

    Ver comentarios

  10. Hoy me ha picado la curiosidad y he instalado el picasa, hace años que sólo uso mi querido irfanview, para visualizar las fotos y algunas cosas más.

    En cualquier caso y como resultado de la catalogación que hizo, me reencontré con una fotografía de hace unos meses, y de la que estoy orgulloso. La foto en cuestión no es que sea muy original, es una foto del teide, si ya se, pero fue mi primera foto panorámica, y en su momento me quedé no solamente autocomplacido y contento conmigo mismo, sino que me entusiasmé, y me dediqué a dar la brasa a los colegas enviándosela para luego chulear con una estupenda y estúpida sonrisa.

    Hasta aquí todo normal, salvo porque mi furor vanidoso me llevó a colgar la foto en cuestión en la wikipedia. Y se me acabó el rollo, en ese momento me caí con todo el equipo, ya que descubro que la habían quitado por auto-bombo, me quedé flipando, evidentemente si pongo la foto es por auto-bombo, y si el artículo sobre el teide en la wikipedia tiene muchas fotos, dónde coño está el problema.

    El caso es que al final la foto desapareció y con ella mi interés por chulear. Por eso mismo he decidido meterme todo este rollo, como justificación, tosca eso sí, para exhibir la jodía foto, y a ver si alguien me pone una medalla.

    Esperemos que al ornitorrinco no le de un ataque censor, y me joda el artículo.


    10

    Ver comentarios

Archivo del blog
Etiquetas
Etiquetas
Enlaces interesantes
Cargando