San Cayetano: Momentos del SanCa

¡Y dale con el mismo título! ¿No tenés otro para ponerle?
Lo importante es el momento, no el título.😄

 

Cada jornada que pasa va poniendo más interesante al curso. Ahora estamos en receso vacacional y por la gripe A nos tocó un mes completo. Cada uno en nuestras casas estamos realizando tareas para no perder el ritmo y seguir caminando hacia la meta que se va acercando un poquito más.

Hace poquito dejamos a un costado la CLI y empezamos a programar ventanitas, también conocida como GUI con la ayuda de wxpython.

Dos fotos que ilustran un momento de la merienda colectiva donde festejamos el cumpleaños de un compañero.

Cumpleaños en el SanCa

Cumpleaños en el SanCa


Cumpleaños en el SanCa

Cumpleaños en el SanCa


Francisco Malbrán: Cuchillas en las sienes

Llueve a pedradas la hipocresía
En este desierto sin sombra
Va haciendo trizas la carne
Sin pudor ni refreno

Ruge ya el sismo entre las certezas
Cuchillas nadando en las sienes
Sangra la fe de los creyentes
Aúlla el poder del pederasta

¿Quién será el gran afortunado
que reciba hoy tu infortunio?
Tu ofrenda de ojos vendados
Tu delirio humano más puro

La paradoja del sacrificio
Por una causa especulada
Fluye como si no entendiera
Lo incoherente de su esencia

Ay, corazón inocente
Cómo esquivar la locura
De ver tu construcción gentil
Fermentada de sarcasmo

Ay, corazón imbécil
Admirable hasta el desprecio
Loable hasta la traición
Inconciente hasta la muerte

Toma la aguja espinada
Y otra vez cría suturas
Toma el líquido sediento
Y otra vez
Cierra una herida con fuego

San Cayetano: WIDGETS

Estos son los Widgets que venimos aprendiendo hasta el momento.
Le saque foto a cada cosa para qe qede mas lindo..
espero ke les guste..

WX.FRAME


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        self.ventana.Show()
        return True
aplicacion = App()
aplicacion.MainLoop()

wxFrame

WX.PANEL


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        panel = wx.Panel(self.ventana, -1)
        self.ventana.Show()
        return True
aplicacion = App()
aplicacion.MainLoop()

wxPanel

WX.STATICTEXT


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        panel = wx.Panel(self.ventana, -1)
        datos = wx.StaticText(panel, -1, u'Datos del empleado: ', pos = (20,20))
        apellido = wx.StaticText(panel, -1, u'Apellido: ', pos = (20,50))
        self.ventana.Show()
        return True
aplicacion = App()
aplicacion.MainLoop()

wxStaticText

WX.TEXTCTRL


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        panel = wx.Panel(self.ventana, -1)
        datos = wx.StaticText(panel, -1, u'Datos del empleado: ', pos = (20,20))
        apellido = wx.StaticText(panel, -1, u'Apellido: ', pos = (20,50))
        self.cuadro_apellido = wx.TextCtrl(panel, -1, '', pos = (90 , 45), size = (150,-1))
        ventana.Show()
        return True

aplicacion = App()
aplicacion.MainLoop()

wxTextCtrl

WX.TEXTCTRL (con multilinea)


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        panel = wx.Panel(self.ventana, -1)
        datos = wx.StaticText(panel, -1, u'Datos del empleado: ', pos = (20,20))
        apellido = wx.StaticText(panel, -1, u'Apellido: ', pos = (20,50))
        self.cuadro_apellido = wx.TextCtrl(panel, -1, '', pos = (90 , 45), size = (150,-1))
        observaciones = wx.StaticText(panel, -1, u'Obs: ', pos = (20,110))
        cuadro_obs = wx.TextCtrl(panel, -1, '', pos = (90,105), size = (150,80), style = wx.TE_MULTILINE)
        self.ventana.Show()
        return True

aplicacion = App()
aplicacion.MainLoop()

wxtextctrlmultilinea

WX.BUTTON


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        panel = wx.Panel(self.ventana, -1)
        datos = wx.StaticText(panel, -1, u'Datos del empleado: ', pos = (20,20))
        apellido = wx.StaticText(panel, -1, u'Apellido: ', pos = (20,50))
        self.cuadro_apellido = wx.TextCtrl(panel, -1, '', pos = (90 , 45), size = (150,-1))
        boton_aceptar = wx.Button(panel, -1, u'Aceptar', pos = (200,350))
        boton_cancelar = wx.Button(panel, -1, u'Cancelar', pos = (100,350))
        ventana.Show()
        return True

aplicacion = App()
aplicacion.MainLoop()

wxButton

WX.COMBOBOX


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        panel = wx.Panel(self.ventana, -1)
        datos = wx.StaticText(panel, -1, u'Datos del empleado: ', pos = (20,20))
        apellido = wx.StaticText(panel, -1, u'Apellido: ', pos = (20,50))
        self.cuadro_apellido = wx.TextCtrl(panel, -1, '', pos = (90 , 45), size = (150,-1))
        sexo = wx.StaticText(panel, -1, u'Sexo: ', pos = (20,80))
        sexolista = [u'F', u'M']
        cuadro_sexo = wx.ComboBox(panel, -1, '', (90,75), (150,-1), sexolista, wx.CB_DROPDOWN | wx.CB_READONLY)
        boton_aceptar = wx.Button(panel, -1, u'Aceptar', pos = (200,350))
        boton_cancelar = wx.Button(panel, -1, u'Cancelar', pos = (100,350))
        ventana.Show()
        return True

aplicacion = App()
aplicacion.MainLoop()

wxcombobox

WX.COMBOBOX (editable.. se puede agregar algo)


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        panel = wx.Panel(self.ventana, -1)
        datos = wx.StaticText(panel, -1, u'Datos del empleado: ', pos = (20,20))
        apellido = wx.StaticText(panel, -1, u'Apellido: ', pos = (20,50))
        self.cuadro_apellido = wx.TextCtrl(panel, -1, '', pos = (90 , 45), size = (150,-1))
        sexo = wx.StaticText(panel, -1, u'Sexo: ', pos = (20,80))
        sexolista = [u'F', u'M']
        cuadro_sexo = wx.ComboBox(panel, -1, '', (90,75), (150,-1), sexolista, wx.CB_DROPDOWN )
        boton_aceptar = wx.Button(panel, -1, u'Aceptar', pos = (200,350))
        boton_cancelar = wx.Button(panel, -1, u'Cancelar', pos = (100,350))
        ventana.Show()
        return True

aplicacion = App()
aplicacion.MainLoop()

wxcombobox

WX.MESSADEDIALOG y WX.EVT.BUTTON (ponerle funcion a los botones!)


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        panel = wx.Panel(self.ventana, -1)
        datos = wx.StaticText(panel, -1, u'Datos del empleado: ', pos = (20,20))
        apellido = wx.StaticText(panel, -1, u'Apellido: ', pos = (20,50))
        self.cuadro_apellido = wx.TextCtrl(panel, -1, '', pos = (90 , 45), size = (150,-1))
        sexo = wx.StaticText(panel, -1, u'Sexo: ', pos = (20,80))
        sexolista = [u'F', u'M']
        cuadro_sexo = wx.ComboBox(panel, -1, '', (90,75), (150,-1), sexolista, wx.CB_DROPDOWN)
        observaciones = wx.StaticText(panel, -1, u'Obs: ', pos = (20,110))
        cuadro_obs = wx.TextCtrl(panel, -1, '', pos = (90,105), size = (150,80), style = wx.TE_MULTILINE)
        edad = wx.StaticText(panel, -1, u'Edad: ', pos = (20,200))
        self.cuadro_edad = wx.SpinCtrl(panel, -1, pos = (90,195))
        self.cuadro_edad.SetRange(0,100)
        fecha_nacimiento = wx.StaticText(panel, -1, 'F Nac', pos = (20,230))
        cuadro_nacimiento = wx.DatePickerCtrl(panel, -1, pos = (90,225), size = (150, -1))
        boton_aceptar = wx.Button(panel, -1, u'Aceptar', pos = (200,350))
        boton_cancelar = wx.Button(panel, -1, u'Cancelar', pos = (100,350))
        self.Bind(wx.EVT_BUTTON, self.OnSalir, boton_cancelar)
        self.Bind(wx.EVT_BUTTON, self.OnAceptar, boton_aceptar)
        self.ventana.Show()
        return True

    def OnSalir(self, evt):
        self.ventana.Close()

    def OnAceptar(self, evt):
        ingresoapellido = self.cuadro_apellido.GetValue()

        dialogo = wx.MessageDialog(self.ventana, u'Estimado/a %s, sus datos fueron guardados' % (ingresoapellido), u'Información', wx.OK | wx.ICON_INFORMATION)
        dialogo.ShowModal()
        dialogo.Destroy()

aplicacion = App()
aplicacion.MainLoop()

mesagedialog

WX.SPINCTRL


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        ventana = wx.Frame(parent = None , title = u'Ingreso' , size = (300,300) , pos = (250,250))
        panel = wx.Panel(ventana , -1)
        texto_edad = wx.StaticText(panel, -1, u'Edad: ', pos = (20,25))
        cuadro_edad = wx.SpinCtrl(panel, -1, pos = (90,20))
        cuadro_edad.SetRange(0,110)
        boton_aceptar = wx.Button(panel, -1, u'Aceptar', pos = (200,240))
        ventana.Show()
        return True

aplicacion = App()
aplicacion.MainLoop()

spinctrl

WX.DATEPICKERCTRL


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        panel = wx.Panel(self.ventana, -1)
        datos = wx.StaticText(panel, -1, u'Datos del empleado: ', pos = (20,20))
        apellido = wx.StaticText(panel, -1, u'Apellido: ', pos = (20,50))
        self.cuadro_apellido = wx.TextCtrl(panel, -1, '', pos = (90 , 45), size = (150,-1))
        sexo = wx.StaticText(panel, -1, u'Sexo: ', pos = (20,80))
        sexolista = [u'F', u'M']
        cuadro_sexo = wx.ComboBox(panel, -1, '', (90,75), (150,-1), sexolista, wx.CB_DROPDOWN)
        observaciones = wx.StaticText(panel, -1, u'Obs: ', pos = (20,110))
        cuadro_obs = wx.TextCtrl(panel, -1, '', pos = (90,105), size = (150,80), style = wx.TE_MULTILINE)
        edad = wx.StaticText(panel, -1, u'Edad: ', pos = (20,200))
        self.cuadro_edad = wx.SpinCtrl(panel, -1, pos = (90,195))
        self.cuadro_edad.SetRange(0,100)
        fecha_nacimiento = wx.StaticText(panel, -1, 'F Nac', pos = (20,230))
        cuadro_nacimiento = wx.DatePickerCtrl(panel, -1, pos = (90,225), size = (150, -1))
        boton_aceptar = wx.Button(panel, -1, u'Aceptar', pos = (200,350))
        boton_cancelar = wx.Button(panel, -1, u'Cancelar', pos = (100,350))
        self.Bind(wx.EVT_BUTTON, self.OnSalir, boton_cancelar)
        self.Bind(wx.EVT_BUTTON, self.OnAceptar, boton_aceptar)
        self.ventana.Show()
        return True

    def OnSalir(self, evt):
        self.ventana.Close()

    def OnAceptar(self, evt):
        ingresoapellido = self.cuadro_apellido.GetValue()

        dialogo = wx.MessageDialog(self.ventana, u'Estimado/a %s, sus datos fueron guardados' % (ingresoapellido), u'Información', wx.OK | wx.ICON_INFORMATION)
        dialogo.ShowModal()
        dialogo.Destroy()

aplicacion = App()
aplicacion.MainLoop()

dtaepickerctrl


San Cayetano: instalate algo

Hablamos muchísimo de los ejercicios que realizamos en el curso, pero omitimos en todo momento información sobre que usamos para llevar a cabo esos ejemplos de python. Y como una gran mayoría de usuarios no tiene la posibilidad de contar con computadoras equipadas con software libre. La idea de este post es ayudar a quienes tienen otras cosas a instalar las aplicaciones que van a necesitar para aprender lo que estamos aprendiendo. En este ejemplo los aplicativos corren en Windowrs. Asi que ahi vamos.

Python
Bueno en el caso nuestro, el curso se orienta a aprender a programar utilizando como lenguaje Python

Para poder disfrutar de este lenguaje podemos seguir el siguiente tutorial que explica como instalarlo

Geany
Como editor sencillo para andar probando estas cuestiones de codigo utilizamos uno que es genial. Geany. Para instalarlo pueden visitar la zona de descarga de la pagina oficial, para descargar geany

ipython
Cuando nos cansamos (literalmente) de los colores de la terminal saltamos a probar una vuelta de tuerca al asunto. ipython salio a resolvernos el tema de andar probando comandos o pequeñas lineas que nos podían solucionar el planteo inicial.

MySQL, phpMyAdmin
A medida que fuimos avanzando con el tema vimos en varias oportunidades el manejo de un sistema de bases de datos como el de MySQL y llegamos a utilizar un buen manejador y administrador de bases de datos como phpMyAdmin.

Una buena opción para poder manejar esa artillería de herramientas bajo estas condiciones es contar con la ayuda de XAMPP.

Y como siempre para instalarlo podemos seguir el siguiente tutorial.

wxPython
Y por ultimo y no por algo en particular nos toca la herramienta que estamos aprendiendo a los golpes que es ni mas ni menos que wxPython

Para poder disfrutar de esta herramienta tenemos que instalar el siguiente archivo. Y una ves instalado no tenemos excusa para seguir aprendiendo.


San Cayetano: Momentos del SanCa

Volvíamos de la merienda de todos los días. Nuestras cabezas estaban todavía con los planteos de los ejercicios 76 y 75. Con la energía renovada nos sentamos en nuestros escritorios y acometimos con la tarea. Éstas son algunas de las imágenes de tan importante gesta.

El ejercicio75 consiste en que a través de un menú generar altas y consultas a una base de datos MySQL desde python. El ejercicio 76 consiste en que a partir de dos tuplas, una con nombre y otra con apellido, presentar esos datos por pantalla en una tabla con cabecera y los datos.

 

Momentos del SanCa

Momentos del SanCa

 

Momentos en el SanCa...

Momentos en el SanCa...

 

Momentos del SanCa...

Momentos del SanCa...


San Cayetano: Primera etapa

Hoy terminamos la primera etapa de nuestro camino. Somos menos que al principio, lamentablemente, pero estamos en marcha. A partir del lunes comenzaremos con programación de apliaciones GUI con la biblioteca wxPython, y un nuevo horizonte se nos aparece. Es una oportunidad para recomenzar, un nuevo mojón en el hermoso arte de aprender. Felicitaciones a los que han emprendido este camino y han perseverado en el aprendizaje. Aunque las cosas a veces no se ven muy claras, el seguir andando y poniendo garra junto a nuestros compañeros nos acerca cada día un poco más al objetivo de aprender, compartir, cooperar.

Algunas cosas que hemos visto hasta hoy:

Aplicaciones.
Lenguajes de programación
Lenguaje de máquina – Binario – Lenguajes de bajo y alto nivel –
Compilados e interpretados

Estructuras lógicas – Diagramas – Abstracción de realidades y
problemáticas de todos los días llevadas a diagramas de flujo.

Python – Intérprete Python – Hola mundo

Editores de texto. Geany como IDE de desarrollo.

Variables, constantes, tipos de datos, cadenas, tuplas, listas,
diccionarios, boolean, unicode. Métodos básicos de c/u de ellas.
Ejercicios con cada uno y combinados. (sort, upper, slice, operaciones
básicas, keys, y todo lo que se les ocurra.

Bucles for, while. Condiciones if, elif, else.

Escritura en archivos. write(), readline(), open(), close(), etc

Definición y uso de funciones. Argumentos.

Módulo pickle. Importar. Módulos. Creación de módulos.

Clases. Métodos especiales (__init__(), etc). Instancias. Objetos. Métodos.

Conexión a bases de datos. (MySQLdb). Conocimiento de lenguaje SQL
standard desde consola y administrador web (PHPMyadmin). Aplicaciones
con menúes, conexión, consultas, ABM.


Ezequiel Gutesman: Pycon Argentina Call for Charlas (CFCh)

Se agradece la difusión. y espero verlos a todos ahi! (quienquiera que lea este blog!)
----

Call For Charlas (CFCh)
PyCon Argentina - http://ar.pycon.org/
Primera Conferencia Argentina de Python
Buenos Aires - 4 y 5 de Septiembre de 2009'''


PyAr, el grupo de usuarios de Python de Argentina invita a toda la comunidad de usuarios de Python y de Software Libre en general a proponer presentaciones y charlas para la Primera Conferencia Argentina de Python.

En este evento nos juntaremos desarrolladores y programadores tanto principiantes como avanzados; bloggers, autores y diseñadores web; gerentes, administradores y emprendedores; científicos, ingenieros, curiosos y todo aquel que tenga ganas de acercarse a la comunidad Python en Argentina.

El autor de cada charla seleccionada podrá participar presencialmente, como orador en el evento. En los casos en que la charla sea realizada por varios autores, se permitirá un máximo de 3 oradores.

Aclaración: Por cuestiones presupuestarias, sólo se podrán financiar los pasajes, total o parcialmente, de algunos autores seleccionados que residan fuera de Capital Federal o Gran Buenos Aires. Por favor aclarar junto a la propuesta de charla si se solicita ayuda económica.

Agradecemos la contribución de todos en la difusión de este llamado y del evento en si mediante los banners diseñados para tal fin y que se encuentran en http://ar.pycon.org/2009/helping/publicize/

Dónde enviar las Charlas
Las charlas deben ser ingresadas para su aprobación en
http://ar.pycon.org/2009/conference/proposals/submit/
La fecha límite de envío de charlas es el Lunes 29 de Junio inclusive.
En caso de consultas o inconvenientes, contactarse con charlas[.--arroba-- .]python.org.ar

Cómo enviar las Charlas
El envío de la propuesta de charla debe tener los siguientes datos:

  • Título:

  • Autor(es): Nombre y apellido, breve descripción de cada uno, foto, asociación, grupo de usuarios, organismo, o empresa a la que pertenece, si corresponde.

  • Tiempo estimado de duración: Las charlas generalmente son de 45'. En caso de que sea mayor o menor el tiempo requerido solicitamos su justificación.

  • Breve descripción de la charla: Uno o dos párrafo(s) que explique -no tan brevemente- el contenido de la presentación.

  • Nivel objetivo de la charla: introductorio / intermedio / avanzado

  • Tipo de publico: Desarrolladores avanzados, desarrolladores principiantes, empresarios, docentes, público en general

  • Conocimientos previos: Especificar que conocimientos previos deberán tener los asistentes.

  • Tags: web, gui, databases, frameworks, orm, ide, ciencia, educación, juegos, comunidad, etc.

  • Teléfono del/los autor/es: Para poder comunicarnos.

  • Ciudad de residencia del/los autor/es.




Qué formato deben tener las Presentaciones
El envío de las diapositivas y/o presentaciones debe tener alguno de los siguientes formatos:

  • Openoffice.org presentation

  • HTML standard

  • Postscript o PDF

  • Texto plano



Licencia
Debe especificarse una licencia que permita que !PyAr distribuya el material en un CD de Documentación y que permita ser descargado del sitio web de !PyAr. Se recomienda Creative Commons o similares.

Francisco Malbrán: Desilusión de niño

Precipitada como una nuez, le golpeó la cabeza de tomate verde. Venía discutiendo desde hacía rato con el agua que se bamboleaba en su interior (tan dispar como intrépida), y se repetía una y otra vez una y otra vez y otra vez y una otra y vez: "si! pero qué buena idea! pero qué gran árbol que nos espera!"
La cuestión no era sencilla, pero se aseguró de cumplir con los requisitos que demandaba su ingenioso plan, su ansiada marea de intenciones, su rígido convencimiento (su fe).
Ante las dudas hechaba un conjunto de duraznos rosas y anaranjados y dulces, y al contrario de la creencia popular, dándole de comer a las dudas las podía dejar atrás. Resultaba ser que las dudas eran muy glotonas y comían hasta más no poder, y cuando más no podían empezaban a preocuparse por el dolor de sus panzas y se olvidaban de dudar, o ya no sabía de qué dudaban o para qué estaban ahí, y entonces se echaban a dormir o explotaban de repente y sin previo aviso.
Ante los repetidos obstáculos, ejerció reflexivos y sentidísimos monólogos que los hicieron llorar y decir a grito pelado "Estamos contigo, no contra ti! pasa y haz tu camino! Discúlpanos por nuestra naturaleza feroz!". A lo que siempre respondía "No hay por qué avergonzarse de nuestra naturaleza amigos, cada uno tiene un papel en esta historia, es lo que toca!". Los obstáculos lloraban aún más fuerte y se deshacían en alabanzas y admiración (mientras se deshacían, pero ya con su propio consentimiento, y no con su propio pesar).
Ante los desánimos, provenientes de algunos aleatorios compañeros de viaje con quienes compartía su proyecto si nunca detenerse, pretendía estar sordo de una oreja, y alegaba usar la otra sólo para escuchar su propia voz. Con adjetivos tales como "cabeza hueca", se alejaban ofuscados los desanimados desánimos.
Y aún así, como todo proyecto que se precie, existía una única e inquebrantable posibilidad de que, en el tope de la euforia y con los ojitos brillosos de expectativa, una nuez choque contra una cabeza de tomate verde.
Y así resultó: una nuez chocó contra su cabeza de tomate verde justo en el tope de su euforia y cuando sus ojitos brillaban de expectativa.
Se quedó mirando el horizonte un rato.
Y se dijo: "Pf!".
Y se repitió: "Pf!"
Y "Puf!"...
la nuez se quedó sola en ese rincón del piso.

Francisco Malbrán: Desde adentro

Si en un demorado segundo
me salgo del pentagrama conocido
cambio de clave, salto de tiempo
o en vez de natural doy sostenido

No me mires con ojos de medusa
abriendo a cuchilladas un espacio
como a un acertijo que sin excusa
se abre camino entre tus dados

No soy otro que el de siempre
desde abajo, desde adentro
cuando me salgo de la curtiembre
que baña en cortinas mi centro

No soy más que la resaca
del delirio que nos embebe
y cuando logro cortar sus alas
soy yo mismo, el que vuelve

Francisco Malbrán: Harteante

El que nada sabe, que nada diga

Chocado de perrente con una doctrina (de pronto) elitista me veo abrumado por el pensamiento circular pero (parece ser) trascendental y doy mi voto: NO

Cansado de sentir una batahola de menjunjes que consienten con extrema benevolencia en una especie de perdón a nosotros, los pobres que “no entienden el arte”, me veo ante la imperiosa necesidad de escupir de una sola vez un grito que me haga temblar la tierra, que me sobresalte, que me aleje un poco de todo esto del ser y no ser. Un grito... artístico (¡JA!)... un...

NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOARRRRRRRRRRRRRGGGGGGGGGGGGGHNOOOOOOOOO
YBASTAAAAAAAAAAAQUEMEIMPORTAAAAAAAAAASISIENTOQUENO!
ESLOQUESIENTOYPORQUENOLOVOYADECIREHPORQUENOPORQUENO
SISILODIGOYLODIGOASI:NOOOOOOOOO!!

Resulta que un mounstruo anónimo pero sin duda conocido empieza a crecer y crecer y buscar por uno y por otro lado establecer normas, reglas, pautas, sobre qué es lo que "se puede" decir y qué es lo que no. A lo largo de su cabeza amorfa se ahogan millones bocas devoradoras de espacios, de palabras, de sentimientos autóctonos, y otros tantos etcéteras tan valuables, sanos y preciosos del ser humano, haciendo particular incapié en la melodía, el acompañamiento, el trazo, la letra, la silueta, la forma, el trasto incrustado en la pared, la estaca clavada el espejo, el perro que dejan morir en esa "puesta" (ahí sí todos coincidieron parece ser) y de otros tantos etcéteras... es decir: en el "arte".

Bueno BASTA.

A mí esto me parece una porquería. Me lo mostrás y me parece que alguien se está riendo a carcajadas desde detrás de un telón espejado. Y no veo por qué, por qué, por qué, no podría decirlo.