Adobe AIR IX – firmar aplicaciones, una cuestión de confianza

Y otro más sobre AIR. A ver si ya es el final de la serie 😛 . Los últimos días me he estado peleando con la firma de aplicaciones AIR, no entendía mucho cómo funcionaba y me extrañaba que, a pesar de tener que firmar siempre una aplicación con un certificado SSL, al instalarla siempre me salía “Editor: DESCONOCIDO“, lo que da muy mala imagen. Ahora lo tengo claro, confundía los términos firmar y confiar. Si no quieres que salga el mensaje en cuestión tendrás que comprar un certificado de firma de software emitido por una entidad certificadora válida (Thawte), una firma de confianza.  Lo malo es que su precio ronda los 300 euros, nada más y nada menos. Personalmente creo que se han flipado un poco pero si no las firmas tus potenciales usuarios tendrán una sensación de inseguridad, tus aplicaciones estarán firmadas pero no se confiará en ellas.

Existe una segunda opción y es crear tu propia entidad certificadora (CA) y firmar tus aplicaciones tú mismo. El inconveniente de hacerlo así es que los usuarios tendrán que tener instalado el certificado de tu CA (los habituales vienen por defecto en el navegador). Como la aplicación en la que estoy trabajando se utilizará en un entorno concreto y definido, puedo utilizar este sistema y ahorrarme un dinero. Además, mis potenciales usuarios ya tienen instalado el certificado de nuestra CA ya que será la misma que utilizamos para generar certificados SSL cliente/servidor. Si firmo la aplicación AIR con la misma autoridad todo irá bien.

En aquel artículo vimos cómo generar tu propia autoridad de certificación, el método sigue siendo el mismo. Sólo necesitaremos OpenSSL:

openssl req -x509 -newkey rsa:2048 -days 3650 -keyout cakey.pem -out cacert.pem

Creamos un par de archivos para mantener la base de datos de certificados emitidos:

echo '100001' >serial
touch certindex.txt

Veamos ahora cómo generamos el certificado para la firma de software. No es fácil saber todas las opciones necesarias para que después funcione la firma, lo mejor es meterlas todas en un archivo de configuración, openssl.cnf:

dir                    = .

[ ca ]
default_ca                = CA_default

[ CA_default ]
serial                    = $dir/serial
database                = $dir/certindex.txt
new_certs_dir            = $dir/certs
certificate                = $dir/cacert.pem
private_key                = $dir/cakey.pem
nameopt                = default_ca
certopt                = default_ca
policy                    = mypolicy
default_days            = 365
default_md                = md5
preserve                = no
email_in_dn                = no

[ mypolicy ]
countryName            = match
stateOrProvinceName        = match
organizationName            = match
organizationalUnitName        = optional
commonName            = supplied
emailAddress            = optional

[ req ]
default_bits                = 1024
default_keyfile            = key.pem
default_md                = md5
string_mask                = nombstr
distinguished_name        = req_distinguished_name
req_extensions            = v3_req

[ req_distinguished_name ]
0.organizationName            = Organization Name (company)
organizationalUnitName            = Organizational Unit Name (department, division)
emailAddress                = Email Address
emailAddress_max            = 40
localityName                = Locality Name (city, district)
stateOrProvinceName            = State or Province Name (full name)
countryName                = Country Name (2 letter code)
countryName_min                = 2
countryName_max            = 2
commonName                = Common Name (hostname, IP, or your name)
commonName_max            = 64

0.organizationName_default        = Xplota Soluciones
localityName_default            = Valencia
stateOrProvinceName_default        = Valencia
countryName_default            = ES
emailAddress_default            = [email protected]

[ v3_ca ]
basicConstraints                = CA:TRUE
subjectKeyIdentifier            = hash
authorityKeyIdentifier            = keyid:always,issuer:always
keyUsage                    = cRLSign, keyCertSign
nsCertType                         = sslCA, emailCA, objCA
subjectAltName                = email:copy
crlDistributionPoints            = URI:http://ca.xplota.com/cert/
nsCaPolicyUrl                = http://ca.xplota.com/policy.html

[ v3_req ]
basicConstraints                = CA:FALSE
subjectKeyIdentifier            = hash

[ air_cert ]
basicConstraints              = critical, CA:false
keyUsage                               = critical, digitalSignature
extendedKeyUsage               = critical, codeSigning
subjectKeyIdentifier            = hash
authorityKeyIdentifier            = keyid:always, issuer:always
subjectAltName                = email:copy
issuerAltName                = issuer:copy
crlDistributionPoints            = URI:http://ca.xplota.com/cert/

Quizás tengas que cambiar alguna ruta a los archivos de tu CA. Son muchas opciones, pero no hace falta que conozcas los detalles.  Generemos ahora nuestro certificado:

openssl req -new -nodes -out air_key-req.pem -keyout private/air_key-key.pem -days 3651 -config ./openssl.cnf -extensions air_cert

Cuando te pida los datos del certificado, muy importante: los relativos a nombre de la organización, localidad, provincia y país tienen que ser los mismos de la CA o no podrás generarlo, pon exactamente los mismos datos. En Common Name debes poner el nombre que quieres que aparezca en vez de aquél “DESCONOCIDO, puede ser el tuyo o el de tu empresa.

Si has llegado hasta aquí sólo nos queda firmar el certificado con la CA.

openssl ca -extensions air_cert -out air_key-cert.pem -days 3652 -config ./openssl.cnf -infiles air_key-req.pem

Cómo vimos con los certificados cliente, el certificado generado no nos sirve de mucho, debemos exportarlo a un formato más estándar:

openssl pkcs12 -export -out air_key.pfx -in air_key-cert.pem -inkey private/air_key-key.pem -name "My Code Key" -chain -CAfile cacert.pem

Hemos terminado. Copia el archivo air_key.pfx a tu estación de trabajo y exporta tu proyecto AIR con este certificado. Si no hay problemas extraños tendrás tu aplicación firmada. Vamos a probarla:

signed air app untrusted
Vaya, no funciona. ¿Qué ha pasado? Sencillo, lo que comentaba al principio, tu sistema no tiene instalado el certificado de la CA con lo cual no confía en tu aplicación. Instalarlo es muy sencillo. Se importa el archivo cacert.pem en la lista de “Entidades Emisoras de Confianza” de tu navegador web.

Veamos ahora qué ocurre si tratamos ahora de instalar la aplicación firmada con nuestro certificado:

air_trus¡Funciona!

Cómo mi entorno es limitado y ya tiene mi CA puedo fácilmente firmar yo mismo mis aplicaciones, en un entorno real más general no sería posible y habría que pagar por la confianza.

Un aspecto muy importante sobre la firma de aplicaciones AIR y a tener en cuenta es que debes firmarla siempre con el mismo certificado, cada nueva versión debe ir firmada con el mismo certificado que utilizaste la priemra vez o tus clientes no podrán actualizar de una versión a otra ya que el mecanismo de seguridad detecta que el certificado es distinto y puede ser una brecha de seguridad.

Espero haberos aclarado un poco el mundo de las firmas y confianzas en AIR.

Adobe AIR VIII – Información encriptada y persistente

Ya hemos visto como trabajar con bases de datos con AIR, sin embargo he deubierto un nuevo método para conservar datos que puede resultar especialmente útil para mantener información sensible, como claves de acceso a servicios, ya que se guarda encriptada. Hablamos de la clase EncryptedLocalStore.

Una de las peculiaridades de esta clase es que es persistente mientras la aplicación no borre sus contenidos, ya que aunque se desinstale los datos siguen ahí, lo que resulta especialmente útil si tus aplicaciones son de pago (guardar licencias) o tienen periodos de prueba (así no se podrá utilizar de nuevo al desinstalar y volver a instalarla).

Cada aplicación dispone de su propia EncryptedLocalStore con lo que los datos que se guarden en una no interferirán con los de otra.

EncryptedLocalStore tiene sólamente tres métodos estáticos (no es necesario instanciar la clase) que permiten guardar, leer y eliminar datos.

  • setItem(“nombre”, valor):  guarda un dato.
  • getItem(“nombre”):  lee el dato.
  • removeItem(“nombre”):  elimina los datos.

Para dar mayor versatilidad al sistema, los datos a guardar deben ser del tipo ByteArray, así que se podrá guardar cualquier dato que se pueda convertir a este tipo y no sólo cadenas de texto.

Veamos un ejemplo:

//guardar datos
var clave:String = "password";
var bytes:ByteArray = new ByteArray();
bytes.writeUTFBytes(str);
EncryptedLocalStore.setItem("clave", bytes);

//leer datos
var datos:ByteArray = EncryptedLocalStore.getItem("clave");
var miclave:String=datos.readUTFBytes(datos.length));

//eliminar datos
EncryptedLocalStore.removeItem("clave");

Extremadamente sencillo y útil, no se como no lo había visto antes, creo que pasa bastante desapercibida esta manera de guardar datos en la documentación.

De esta manera podemos guardar datos sin necesidad de bases de datos. Eso sí, al parecer no deben exceder los 10mb o comenzaremos a tener problemas de rendimiento. Recuerda lo que decía al principio, aunque el usuario desinstale la aplicación los datos de EncryptedLocalStore siguen en su sistema operativo.

Lamprea de Arbo, reina del Miño

Voy a sorprenderos con un artículo histórico-gastronómico muy especial. Ya aviso que es posible que a muchos se os ponga cara de asco, intentad superarlo.  Hoy hablaremos de la lamprea.  ¿De qué has dicho? De esto:

Lamprea

Historia

La lamprea es un pez de origen muy primitivo, sin mandíbula y muy resbaladizo. Aunque es un pez no tiene escamas ni espinas, solamente un cartílago que la recorre de punta a punta dándole la rigidez necesaria para nadar. Podríais relacionarla con la anguila, pero no, no tiene absolutamente nada que ver, ni siquiera son de la misma familia.

La lamprea se puede encontrar en muy pocos lugares, además de en Galicia (fundamentalmente en el curso bajo del río Miño y en el Ulla) en algunas zonas de Asturias y Francia.

La lamprea nace en el río y cuando adquiere un tamaño de unos 20cm (de 4 a 6 años)  se desplaza hasta el mar, donde vivirá a grandes profundidades hasta convertirse en adulta, entonces volverá a desovar al río y es en ese momento cuando se la pesca. Como tantos y tantos gallegos, tras miles de años de emigración la lamprea siempre regresa a las aguas dulces que la vieron nacer.Lamprea

El lugar por excelencia de la lamprea es, sin duda, Arbo, un pequeño pueblo del sur de la provincia de Pontevedra, a orilla del río Miño, que se autodefine como “Meca da Lamprea“. Y qué casualidad, mi madre es de ahí mismo 😛 y ahí me he criado yo durante muchos fines de semana y vacaciones de verano. En Arbo se vive la lamprea desde que eres un crío, es la especialidad en todos los bares y en todas las casas.

Aquí os dejo un primer plano de la cabeza de la lamprea con sus ojos y los siete orificios por los que respira, son sus branquias.

Lamprea

La lamprea se alimenta en su época adulta y cual parásito, de otros peces a los que se pega con su boca en forma de ventosa para succionarles la sangre. Esta es su boca 😛 . Por este motivo se la conoce en muchos lugares como el vampiro marino.

Boca de la lamprea

La pesca de la lamprea se realiza a lo largo de todo el tramo final de la desembocadura del Miño, desde A Guarda hasta el embalse de Frieira, ya en Ourense, sin embargo son las lampreas de Arbo las consideradas como las mejores debido a que el animal se ha tenido que pelear mucho más con la corriente del río, con lo que su carne es más compacta y dura.

En Arbo, además, se pescan de un modo único y muy curioso en las llamadas pesqueiras (o pescos), construcciones únicas, muchas de ellas de época romana (s. V a.c.), formadas por muros de piedras encajadas entre sí sin ningún tipo de masa que las una. Y es que ya en la antigua Roma la lamprea era considerada un auténtico manjar, los romanos se las llevaban del Miño. Decía ya Plinio en el s.I:

Cayo Hirio prestó de su piscina, solamente para las cenas triunfales del César, seis mil lampreas, que no quiso vender ni cambiar por ninguna otra mercancía.

Es, sin embargo, en la Edad Media donde la lamprea alcanza su mayor esplendor al ser permitido su consumo en épocas de vigilia debido a que era un pez, por mucho que su textura se pareciese más a la carne de un animal. Este hecho la convirtió en preferida por monjes y nobles. Carlos V era un gran devorador de lampreas.

Las pesqueiras son una especie de muros (poios) obliquos al curso del río entre los cuales se colocan los “butrons“, artefacto semejante a las nasas, donde la lamprea entra al remontar el río por la orilla y ya nunca sale.

Las pesqueiras no pertenecen a alguien concreto sino que distintas familias tienen el derecho a pesca determinados días de la temporada y este derecho se transmite de padres a hijos desde la propia Edad Media. Puede pescarlas uno mismo, pero lo habitual es que lo hagan los pescadores profesionales y se establezca con ellos un acuerdo de reparto según piezas capturadas, normalmente al 50%. Los embalses y la contaminación ponen en peligro el futuro de la lamprea. La pesca deportiva está, obviamente, prohibida, y su temporada se limita a 3 meses, de finales de enero a mediados de abril. Los años lluviosos suelen ser años de grandes capturas debido a que la mayor cantidad de agua dulce atrae a las lampreas al río, o eso dicen 😛 .

Gastronomía

Ahora que ya conocemos la historia de la lamprea, pasemos al ámbito gastronómico, porque sí, pese a su pinta, se come 😛 .

Hay muchas maneras de cocinar la lamprea: guisada, rellena, a la brasa, en cocido, en empanada… pero sin duda la más tradicional es a la bordalesa, cuya característica principal es que se hace en su propia sangre.  Aquí os dejo una imagen del animal ya limpio y preparado para poner al fuego, veréis que se aprecia perfectamente la sangre en el fondo de la olla. Lo peor es, sin duda, limpiarla, doy fé 😛 .

Lamprea

Fue el gran Álvaro Cunqueiro el primero en ensalzar la grandeza de la lamprea en los tiempos modernos llegando a decir, basándose en datos históricos, que la empanada que comen en una de las imágenes del Pórtico da Gloria de la Catedral de Santiago es precisamente de lamprea, y es que en aquella época no había patatas ni arroces con los que guisarla, con lo que asegura que lo más probable es que la empanada de lamprea fuese la forma más típica de cocinarla.

Lamprea a la bordalesa lista para hincar el diente preparada por mí 😛 :

Lamprea

Arbo recibe miles de visitantes durante los meses de temporada para degustar la lamprea, no os podéis imaginar la de coches que se juntan los fines de semana. Decían que mucha gente iba a propósito desde Madrid el domingo por la mañana para tomar la lamprea y regresar a casa por la tarde después de un paseo por la orilla del Miño para rebajar la ingesta. Con el paso de los años he dudado mucho de esta historia ya que hablamos nada más y nada menos que de 600km en una época donde aún no existía la autovía A6 y había que utilizar la vieja Nacional 6, el paseo sería de muchas más horas que hoy en día. Aún así la historia estaba en las calles.

Plato de lamprea

La presentación típica de la lamprea a la bordalesa es como muestro en la foto de arriba, con arroz. Ya hemos comentado que la lamprea no tiene espinas, sólo un cartílago longitudinal comestible, aunque hay mucha gente que se lo deja.  Siempre que me preguntan a qué sabe no sé qué decir ya que no hay ningún otro alimento con un sabor parecido, es único. Es una carne muy fuerte y contundente. En general a la lamprea o se la ama o se la odia, no suele haber término medio. Yo, obviamente, la amo 🙂 .

Y en primer plano, la carne propiamente dicha para que veais que, en efecto, su textura está mucho más cercana a la carne que al pescado.Carne de lamprea

Arbo celebra el último domingo de abril la Festa da Lamprea, seguramente la fiesta gastronómica más antigua de España ya que va por su 49 edición, es decir, se organiza desde 1961. Cualquier restaurante de la zona será buena elección, seguramente. Yo aconsejo un clásico, cerca de la antigua casa de mis abuelos y sirviendo lampreas desde 1930, Casa Mezquita.

Recomiendo a todo el mundo superar los tabúes del aspecto de culebra y de cocinarla en su propia sangre y probarla. Recordad que otros muchos alimentos que tomamos habitualmente pueden resultar asquerosos para otras culturas y nosotros nos los comemos. Imaginad lo que pensarían los primeros que decidieron hincar el diente a un centollo, una rana o un caracol.

Si queréis saber más sobre la lamprea os recomiendo el libro “Lampreas e pesqueiras” de Miguel Piñeiro.

Parque Natual del Desierto de Les Palmes

Otra de escapadas.  Este sábado nos acercamos a Benicassim a pasar el día. No había estado aún y la verdad, no me disgustó, esperaba algo tipo Benidorm, pero no es así. El tiempo era excelente y estuvimos dando un paseo por la playa tostándonos al sol y admirando las magníficas villas que adornan la primera línea de la costa, lo que le da un toque más del norte de España que de la costa mediterránea. Es una pena ver el estado de alguna de esas casas y una envidia (no sana 😛 ) lo que producen otras. Nos tomamos unas cañas en el Hotel-Restaurante Voramar, abierto desde 1930, debió ser de los pioneros en temas hoteleros. Nos llamó la atención el restaurante del hotel, al parecer recomendado en la Guía Michelín, con precios aceptables en general, pero teníamos otra idea para la comida. Eso sí, he de reconocer el gesto de nuestro camarero de la terraza. Habíamos pedido unos mejillones tigres para acompañar nuestras cañas y literalmente se olvidó de servirlos. Tras disculparse amablemente y preguntarnos si aún los queríamos, le dijimos que sí, que no se preocupase, y que de paso trajese otro par de cañas 😛 . A la hora de pagar no nos cobraron los mejillones, el camarero nos trajo la cuenta y literalmente nos dijo “a los mejillones invita la casa y disculpen el olvido“. Chapeau. Y es que esos detalles apenas se ven ya en los bares y restaurantes. Entre esto y la buena pinta del restaurante, volveremos para probarlo, sin duda. Mientras tanto, una buena propina para el camarero.

Para comer habíamos fichado al bajar hacia la playa un sitio que nos embriagó por el olor a carne a la parrilla que había en toda la calle, Les Barraques (Gran Avenida Jaime I, 217 – A, Benicassim. Tel: 964 300 248). No tengo fotos del momento, pero el entrecot y la brocheta de solomillo de cerdo, fantásticos, así como el postre, flan de queso y crema catalana caseros. Todo ello a muy buen precio. Sin duda será el típico sitio que se ponga hasta los topes en verano, además parece ser que los arroces tienen bastante fama.

Tras reposar un poco la comida tomamos dirección al Desierto de Les Palmes, una estrecha carretera donde los carteles avisan ya de “provisional” 😐 . El acceso está, eso sí, bien señalizado.

Ampliar

El Desierto de Les Palmes es una pequeña sierra paralela a la costa entre Benicassim y Castellón. La ruta que hicimos son apenas 15km. La denominación de desierto proviene del nombre que le daban los monjes Carmelitas a las zonas dedicadas a la meditación y contemplación, y esta es una de ellas, no es que sea un desierto tal y como lo entendemos. La ruta está plagada de signos que demuestran que ésta era una zona de retiro espiritual.

En el primer tramo de la ruta, y a medida que ascendemos, divisamos unos restos que nos llaman poderosamente la atención. Son las ruinas del antiguo monasterio de los Carmelitas, ahora hay uno nuevo algo más adelante.

Ruínas del antiguo monasterio de monjes Carmelitas

Tiene una pinta magnífica, lástima que no se pueda llegar, está completamente vallado y cerrado a cal y canto.

Ruínas del antiguo monasterio de monjes Carmelitas

Continuando por la ruta llegamos al Castillo Montornés, o mejor dicho, lo que queda de él. El cartel que marca el desvío indica “1000m“. Creo que alguien no maneja bien las distancias 😛 .

Castillo Montornés

La tarde era magnifica, así que, ni cortos ni perezosos nos animamos a llegar hasta la fortificación cruzando el camino que se ve en la foto de arriba. Tenía mejor pinta cuando comenzamos, pero está muy empedrado y hay zonas donde debes agarrarte para salvar algunos trozos del camino que, todo hay que decirlo, está perfectamente señalizado para llegar a… uno de los antiguos aljibes del antiguo castillo.

Castillo Montornés

Y es que aunque parezca absurdo no encontramos la manera de subir hasta la fortaleza propiamente dicha, nos quedamos en los aledaños ya que el camino “oficial” no llegaba a la cumbre y no vimos ninguno “extraoficial” que lo hiciese. Una pena, las vistas desde arriba deben ser magníficas. Nos conformamos con ver los restos de la torre un poco más cerca.

Castillo Montornés

De origen árabe (S.X), fue tomado inicialmente por El Cid en 1094 aunque sería, como no, Jaime I quien lo reconquistaría definitivamente en 1233.
Su situación de gran importancia estratégica para la defensa de la zona ya que dominaba un gran espacio marítimo.

Castillo Montornés

Lo que sí veremos perfectamente son los restos de la antigua muralla.Castillo Montornés

Castillo Montornés

Al final fue una horita de paseo entre ida y vuelta, no está mal después de la comilona.

A lo largo de toda la ruta puedes ver preciosas vistas donde las sinuosas montañas contrastan abiertamente con el Mediterráneo al fondo, los edificios de Benicassim y la Plana de Castellón. Los paisajes desde las alturas son magníficos.Desierto de Les Palmes

Desierto de Les Palmes

Desierto de Les PalmesDesierto de Les Palmes

La última parada de la ruta es la Ermita de la Magdalena, a los pies del Castell Vell, origen de la ciudad de Castellón. El domingo se celebraba la Romería de la Magdalena, fiestas patronales de Castellón, y ya tenían todo preparado para el gran día. No hay mucho más que decir. Lo que mejor pinta tiene son los restos del antiguo castillo, pero están completamente cerrados por restauración, con lo que nos quedamos con las ganas de verlo más de cerca.Ermita de la Magdalena

Nuestra ruta termina en Castellón, donde tomamos la carretera de vuelta a Valencia.

Es una bonita ruta para hacer una mañana o una tarde no muy calurosa como fue nuestro caso. A mitad de camino tienes un magnífico restaurante donde puedes hacer una parada perfecta para comer tras subir al castillo. No hagas como nosotros que llegamos a tomar algo sin un euro en el bolsillo y tuvimos que pagar dos cocacolas con tarjeta 😛 .

Fallas 2009

Así es, un año más, estamos en fallas.

Desde hoy hasta el jueves todo da igual: calles cortadas, petardos por todas las esquinas, despertàs a las 8 de la mañana, verbenas en cada calle, niños pequeños jugando con pólvora. ¿Es que nadie trabaja? 😛 .

Mientras tanto, mascletàs, pasacalles, petardos, verbenas, conciertos, petardos, paellas, fiesta, petardos y gente, muchísima gente. Ah! y más petardos 😛 .

Todo terminará el jueves por la noche cuando todos estos monumentos (dinero) ardan con el fuego de la cremà, entonces comenzarán las del próximo año. Este año tampoco lo veré, huyo a Galicia el miércoles 😛 .

Aquí os dejo las primeras fotos de algunas fallas de este año recién plantadas, apenas tienen unas horas 🙂 .

imgp0747

imgp0736

imgp0734

imgp0745

imgp0744

imgp0743

imgp0742

imgp0741

imgp0740

imgp0738

imgp0731

imgp0730

imgp0729

imgp0728

imgp0727

Cómo modificar múltiples imágenes automáticamente con Gimp

Una de las peores tareas de escibir artículos sobre viajes o gastronómicos es cuando me toca seleccionar y escalar todas las imágenes que quiero poner en el post. Normalmente lo hago con The Gimp!, pero tardo muchísimo al tener que abrir, escalar y guardar cada imagen. Ya cansado de este proceso me puse a buscar algún plugin que permitiese a Gimp realizar conversiones automáticas de varias fotos simultáneamente. Al final lo encontré. Se trata de David’s Batch Processor, un plugin para Gimp que permite no sólo escalar sino también aplicar muchos otros filtros de manera automática.

Una vez tenemos el paquete descargado debemos copiar el archivo dbp.exe (en mi caso es Windows, en el tuyo el que resulta al compilarlo) a lib/gimp/2.0/plug-ins dentro de la carpeta de instalación de tu Gimp, C:Archivos de programaGIMP-2.0libgimp2.0plug-ins en mi caso.

Ahora simplemente arrancamos Gimp y veremos que en el menú Filtros aparece uno nuevo, “Batch Process…“.

batch1

Ya sólo deberemos utilizar las pestañas de los filtros que se quieren aplicar. Las obligatorias serán la primera (Input) y la última (Output) donde indicaremos las imágenes de entrada y el formato de salida. Desde Rename tendrás que indicar la carpeta de destino o los nombres con los que guardarás las nuevas, por lo que he podido ver no permite redimensionar y guardar la imagen sobre sí misma.

batch2Eso es todo, no hay mucho más. Me he quitado un buen trabajo de encima.

Televigilancia con Motion y un servidor Linux

Hoy vamos con algo curioso 😛 . A veces pienso que su utilidad no está muy clara, me refiero a utilidad real 😉 , no sólo como juguete, pero seguro que cuando lo leáis se la encontráis.

Hoy veremos cómo montar un sistema de televigilancia con un servidor Linux y una webcam USB normal y corriente, de las baratitas.

Asumiré que ya tienes tu webcam funcionando bajo Linux, no entraré en detalles puesto que no es el objeto de este artículo y cada webcam tendrá una configuración distinta. Por suerte, hoy en día la mayoría de webcams USB funcionan perfectamente bajo Linux.

La base de este artículo cae sobre el software encargado de monitorizar la webcam en busca de actividad: motion. Lo utilicé por primera vez allá por 2001, hace ya tiempo, y desde luego puedo confirmar es una solución completa y robusta.

Motion funciona como la mayoría de programas de detección de movimiento basados en cámaras, no hay mucho misterio, simplemente comprueba la diferencia de píxeles entre fotogramas consecutivos capturados y si esta diferencia es superior a un umbral predefinido asume que hay movimiento. Este umbral debe ser bien estudiado para que un simple movimiento de cortina o el reflejo del sol que entra por la ventana no salten como un falso positivo. Una de las características que lo diferencian de otros programas similares es que permite monitorizar tantas cámaras como el ancho de banda de tus puertos USB pueda asumir, aunque no tienen porqué ser USB, recuerda que Linux trata igual cualquier flujo de vídeo, venga de donde venga, /dev/videoX. Veremos todo esto más adelante.

Instalación

En mi caso, como ya sabéis los que me seguís, utilizo un servidor con Centos5. No hay un rpm para esta distribución (o al menos yo no lo encontré en su día) y me gusta normalmente instalar las cosas con rpm por sencillez, así que vamos a construirlo desde el fuente, así que, descárgalo y descomprímelo.

Dentro de esta carpeta que has obtenido encontrarás un archivo motion.spec.in, edítalo y cambia las primeras líneas:

Name:           @PACKAGE_NAME@
Version:        @PACKAGE_VERSION@

por

Name:           motion
Version:        3.2.11

Guárdalo. Ahora copia el archivo original que descargaste antes, motion-3.2.11.tar.gz a /usr/src/redhat/SOURCES/. Ya está todo, ahora construímos el RPM.

[osus@servidor motion-3.2.11]# rpmbuild -bb motion.spec.in

Si todo va bien, cuando termine tendremos el RPM en /usr/src/redhat/RPMS/x86_64/motion-3.2.11-1.x86_64.rpm. Si usas una arquitectura de 32bits lo tendrás en una carpeta distinta a x86_64, mira en /usr/src/redhat/RPMS. Instala el rpm generado, rpm -ivh motion-3.2.11-1.x86_64.rpm. Primer paso completado.

Configuración

Motion no tiene interfaz gráfica propiamente dicha aunque sí una sencilla aplicación web para modificar los parámetros. Todas sus opciones se gestionan a través del archivo de configuración /etc/motion/motion.conf. Por defecto, viene bastante bien configurado. El parámetro más importante es:

videodevice=/dev/video1

Ahí debes indicar cuál es el dispositivo de tu cámara.

Con el resto de configuraciones puedes jugar desde la interfaz web, aquí dejo algunas importantes.

Primera opción chula. Activar una interfaz web para ver las capturas directamente desde la cámara, así tienes un sitio desde donde espiar. Obviamente debes tener acceso al puerto desde donde lo quieras ver, es decir, abrirlo en el router.

webcam_port 8001

Conéctate a http://ipdelservidor:8001/. Sorpresa!. Con firefox lo verás como si fuese un vídeo, aunque en realidad es un flujo de imágenes JPG. A Explorer no le gusta mucho ese formato y se suele utilizar un applet para convertirlo.

La siguiente es interesante ya que en vez de mostrar las imágenes muestra los píxeles distintos entre ellas, útil para preparar el sistema y comprobar cómo funciona motion.

setup_mode off

Ahora activamos la gestión web para configurar el sistema y hacer más “cositas“.

control_port 8000
control_localhost off
control_authentication tuusuario:tucontraseña

Pasa lo mismo con el puerto, no olvides abrirlo.

Conéctate a http://ipdelservidor:8001/ y juega con las opciones. Todo lo que toques desde ahí se aplicará en tiempo real sin necesidad de reiniciar motion. Muy útil para la puesta a punto. Recuerda sin embargo que debes guardar los cambios para que se mantengan la próxima vez que reinicies el servidor.

motion

La siguiente nos permite decidir cuántos fotogramas deben cambiar para disparar la alerta. Por defecto viene a 1 y esto nos provocará bastantes avisos falsos, si entra alguien en casa se cambiarán muchos fotogramas 😛 .

minimum_motion_frames 1

Con ésta otra podemos generar automáticamente un frame cada X segundos. Por defecto está desactivado (0), si le das un valor se creará la imagen por cada intervalo, podremos utilizarla para poner una webcam en web “semi-real” 😛 . Cuando estaba en la universidad teníamos una cámara enfocando al comedor que actualizaba una imagen periódicamente y nos servía para controlar la cola del comedor y bajar cuando había poca 😛 .

snapshot_interval X

Motion tiene muchísimas opciones más como para comentarlas todas, en la documentación de la web oficial puedes enterarte de para qué sirven y qué hacen todas ellas.

Comprobando el funcionamiento

Ya tenemos todo listo, hemos configurado todo bien, ¿funcionará?.

Veamos qué ocurre cuando lanzamos el servicio (service motion start). Me muevo un rato delante de la cámara y ocurre esto:

snaps

Sí, motion comienza a grabar imágenes de lo que está ocurriendo. Pero eso no es todo. Cada vez que se detecta movimiento motion graba un vídeo del momento, sonríe ladrón, te están grabando 🙂 :

Enviando alertas

Hay una serie de eventos que puedes utilizar para hacer otras acciones no definidas, como enviarte alertas por email, SMS, etc…

on_event_start value
on_event_end value
on_picture_save value
on_motion_detected value
on_movie_start value
on_movie_end value

Simplemente debes añadir el comando completo que quieres utilizar. Con %f accedes al nombre del fichero generado en los eventos de imagen y vídeo. Por ejemplo, voy a utilizarla para convertir el vídeo generado a 3gp y enviarlo por email para verlo en el móvil.

on_movie_end ffmpeg -i %f -s qcif /ruta/publica/web/video.3gp && echo "puedes verlo aqui http://tuservidor.com/video.3gp" | mail -s "Alertas de movimiento" [email protected]

Incríble pero cierto 😛 . Ahora tendría una tarea que recoge los emails de ese buzón y me los envía por SMS. También podríamos haber enviado el SMS directamente como vimos aquí.

¿Puedo usar más cámaras?

Para lanzar una segunda cámara (o más) añadiríamos al final del archivo de configuración tantas líneas como cámaras quieres poner:

thread /etc/motion/cam2.conf

Donde cam2.conf es un archivo de configuracion como motion.conf donde cambias, además de todos los parámetros que necesites, el videodevice. Recuerda que los puertos de gestión y visualización deben ser diferentes en cada cámara.

Quiero ver mi cámara desde fuera sin abrir ningún puerto más

¡Qué complicado me lo estás poniendo!

Apache viene al rescate. Configuramos los puertos del streaming jpeg y/o la interfaz de administración para que se vean a través de Apache:

ProxyPass /camara.cgi http://127.0.0.1:8001
ProxyPassReverse /camara.cgi http://127.0.0.1:8001
ProxyPass /admincamara.cgi http://127.0.0.1:8000
ProxyPassReverse /admincamara.cgi http://127.0.0.1:8000

Ahora sí, todo perfecto. Aunque pensándolo bien, como comience a recibir alertas me voy a cagar de miedo :S , me estrán robando 😛 .

Adobe AIR VII – Detectar el modo de inicio de la aplicación

Bueno, pues antes de lo previsto tengo que hacer el primer añadido a la serie de Adobe Air que creía ya terminada 😛 .

La primera curiosidad de hoy se refiere a conseguir que nuestra aplicación se inicie automáticamente al identificarte en el sistema operativo. Muy sencillo:

try{
    NativeApplication.nativeApplication.startAtLogin=true;
}catch(e:Error){
    //el sistema operativo no soporta la opcion
}

Con esto conseguimos que se inicie sóla, pruébalo 😉 . Deberías dejar una opción en algún lado de tu aplicación para que el usuario desactive esta posibilidad, no a todo el mundo le gusta.

La nueva versión 1.5.1 de AIR trajo consigo una interesante funcionalidad para saber si nuestra aplicación ha sido iniciada a mano por el usuario o se ha iniciado automáticamente con el sistema operativo, pero para conseguir que funcione debemos seguir algunos pasos.

Primero debemos actualizar el sdk de AIR a la versión mas reciente desde aquí. Si el sdk de Flex es anterior al 3.3 deberías actualizarlo también desde aquí. El de Flex se descomprime en la carpeta “sdks” de tu instalacion de Flex Builder, el de AIR se descomprime dentro del sdk de Flex que has instalado antes o en el que ya tienes.

Ahora arrancamos Flex Builder y lo primero que haremos será añadir el nuevo SDK de Flex (si lo has instalado) a la lista de sdk’s disponibles. Desde tu proyecto, boton derecho, “Properties” y aquí vas a “Flex Compiler” y a “Configure Flex SDKs…“. Añades un nuevo sdk seleccionando la carpeta donde está instalado, aceptas y en la ventana anterior indicas que utilice este nuevo.

A continuación configuraremos la aplicación AIR donde queremos usar las nuevas funciones, para ello editamos el descriptor de la aplicación, el fichero xml donde se configuran las opciones, y arriba de todo dejaremos la segunda línea así:

<application xmlns="http://ns.adobe.com/air/application/1.5.1">

Es decir, que utiliza el namespace de la versión 1.5.1. Sólo eso.

Ya tenemos todo preparado. La nueva característica consiste en un método del evento InvokeEvent, reason, que nos indica precisamente eso, cómo fue iniciada la aplicación.

Simplemente debemos añadir a nuestra aplicación el detector adecuado y hacer lo que consideres oportuno dependiendo del tipo de iniciación.

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" invoke="detecta(event)">
    <mx:Script>
        <![CDATA[
            private function detecta(a:InvokeEvent):void{
                if(a.reason=="LOGIN"){
                    //la aplicacion se lanza automaticamente al hacer login
                }else{
                    //STANDARD
                    //La aplicacion se ejecuta manualmente
                }
            }
        ]]>
    </mx:Script>
</mx:WindowedApplication>

¿Qué utilidad puede tener? Pues además de las que se te ocurran a ti mismo, puede servir para mostrar o no la ventana de la aplicación si ésta se ha lanzado a mano o “a máquina”.  Por ejemplo, si nuestra aplicación, como vimos en el primer capítulo de esta serie, es de ésas que se quedan residentes en la barra de tareas, puedes iniciarla de distinto modo si la lanza el usuario a mano o si se inicia con el sistema operativo. Normalmente cuando lanzamos nosotros una aplicación esperamos ver la ventana de ésta para utilizarla, mientras que si se lanza sóla preferimos no ver nada, cuando se necesite ya sabemos que está en la barra de tareas y que con un click se abrirá.

Eso es todo. Interesante ¿no? 🙂 .

Comida de casa y de la tierra, pulpo a la gallega

Ya está bien de comer siempre fuera. Hoy me encontré de oferta en el supermercado pulpo gallego fresco, así que ni me lo pensé, por 11 euros me  llevé a casa un pulpo de 1,4kg bastante decente, y es que no siempre me puedo hacer un pulpo a la gallega aquí en Valencia.

Lo siguiente, cocinarlo. Cometí un error de principiante. Al pulpo fresco, a diferencia del congelado, hay que darle una paliza para que se quede blando y pierda la dureza de sus carnes. Las fibras de las que está hecha la carne del pulpo le dan esa dureza que desaparece al golpearlo, se rompen las fibras, por eso antiguamente se mazaba. Hoy en día el congelador hace lo mismo de un modo más cómodo. El pulpo congelado es más barato y prácticamente igual de sabroso, vale la pena congelar el fresco 24 horas.

imgp0689Tras atizarle un rato, la receta de la abuela. Ponemos agua a hervir en una olla con una cebolla pelada entera. No es lo mismo que la tradicional olla de cobre pero da el pego. Cuando el agua rompe a hervir asustamos al pulpo, es decir, lo metemos y sacamos tres veces del agua, dejándolo fuera 10 o 15 segundos en cada movimiento, para finalmente dejarlo cocer unos 30 minutos. El objetivo de asustarlo no es otro que evitar que la piel se suelte del octópodo. Si el pulpo fuese congelado lo dejaríamos cocer diez minutos menos. Estos tiempos son para un bicho de 1 a 2 kg, si es mayor deberás incrementarlos.

Una vez ha pasado el tiempo oportuno, lo sacamos de la olla y lo dejamos enfriar en un plato, nunca lo servimos directamente. Mientras enfría cocemos las patatas, previamente peladas y cortadas en rodajas, en la misma agua de cocer el pulpo con un poco de sal y una hoja de laurel.

imgp0696

Cuando tengamos las patatas cocidas, metemos de nuevo el pulpo en el agua de cocerlo un par de minutos para calentarlo de nuevo, lo sacamos y lo troceamos. Ponemos en el plato de servirlo, a poder ser de madera, una base de patatas cocidas y sobre ellas el pulpo troceado. Echamos un poco de sal (gorda a ser posible), pimentón picante al gusto de uno mismo y rehogamos con aceite de oliva. Yo suelo echar también unas cucharadas de agua de la coción antes de condimentarlo si lo hago a la gallega, si fuese sólo “á feira” no. La diferencia está simplemente en las patatas, si lleva es “á feira“.

Este es el magnífico resultado. Lástima no haber tenido plato de madera.

imgp0699

Esta es mi receta, como lo suelo hacer yo, y me queda bastante bien. Hasta ahora todos los valencianos que han probado mi pulpo han salido más que satisfechos 🙂 .

Lo mejor, para acompañarlo, un mencía, tinto gallego por excelencia. Un Abadía da Cova de la Ribeira Sacra sería excelente.

Ya todos sabéis que soy un apasionado de la cocina (de comerla pero también de hacerla). Muchas veces nos cegamos en comer de restaurante cuando tenemos muchas oportunidades de disfrutar en casa. Otro día pondré más platos de mi tierra, Galicia.  Hace una semana hice unas filloas espectaculares 😉 .

El puente de San José estaré por Pontevedra huyendo de las Fallas 😛 . ¿Quién me invita a un buen plato de pulpo? 🙂

El arte de emprender mal…

Últimamente he leído bastante por ahí sobre consejos que debería uno tener en cuenta a la hora de lanzarse de lleno al mundo del emprendimiento, sobre todo acerca de las relaciones son los socios. Aquí va mi experiencia personal.

Corría el año 2001 cuando monté mi primera empresa junto a 4 socios más:

  • Director de compras. Llamémosle “EL Cojo“. Un cincuentón con tanta experiencia en negociaciones con proveedores como en el arte de vivir bien.
  • Director de reservas. Alias “El listo“. Cuarentón con amplia experiencia directiva en el ramo hotelero.
  • Director técnico. Alias “JR“. Treintañero largo con muchos años de experiencia en gestión de equipos de desarrollo.
  • Diseñador gráfico. Mi Compañero. Cerca de los treinta y casi diez años de experiencia en diseño.
  • Responsable de desarrollo. Yo, 25 añitos un par de años de experiencia en desarrollo 😐 .

A este equipo añadimos una secretaria/recepcionista.

La idea pintaba bien y el equipo “parecía” que también. Alquilamos un despacho bastante amplio en un edificio de oficinas, compramos mobiliario y equipamiento, tiramos infraestructura de red, conectividad, servidores… Teníamos todo muy bien montado y dimensionado para meter más gente según fuésemos necesitando. Sólo nos faltaban los clientes y el trabajo 😉 .

El reparto de participaciones en la S.L. se hizo sobre la marcha a medida que entrábamos los demás, quedando los tres “directores” con la misma cantidad y los “pringaos” con una pequeña parte.

Me olvidaba del negocio. Queríamos ofrecer servicios de consultoría e implantación de proyectos B2B y B2C a los sectores de la hostelería y turismo. Partíamos de un grupo de gente con experiencia y los conocimientos y contactos adecuados.

Desde el principio manejábamos varios posibles proyectos con entidades públicas (Diputación de Valencia y Agencia Valenciana de Turismo) y privadas (una importante cadena de hoteles a nivel nacional) gracias a los contactos de los “directores“. Los “públicos” no recuerdo mucho de qué iban, sólo me  acuerdo de los “mamoneos” que se llevaban, y es que a esta gente le gusta/ba mucho mamonear. Eso sí, no os preocupéis por nada, lo vuestro “está hecho” decían siempre.

El proyecto de la cadena hotelera era impresionante para la época. Básicamente consistía en una central de compras para todos los hoteles de la cadena que centralizase todas las compras y la distribución. Con esto conseguirían, por un lado, mejorar los acuerdos con los distribuidores al aumentar el volumen de pedidos y por otro controlar y mejorar enormemente los rápeles que hasta entonces estaban completamente fuera de control. Las cifras de retorno para la cadena eran mil-millonarias (en pesetas 😉 ). A esto hay que sumarle una póliza de riesgo con una de las principales aseguradoras de este páis (sí, la del logotipo rojo y blanco 😛 ) que ya teníamos negociada.

De esta época es también, posiblemente, el mejor proyecto que he tenido a la vista en mi vida. Recordad que hablamos del año 2001. Era un proyecto a nivel europeo para el CSIC. Una especie de red social para relacionar investigadores y proyectos. La persona con la que lo gestionamos (directora de algo) estaba ilusionadísima con el sistema que planteamos y nuestro proyecto disfrutó de su firma y aprobación. Parecía que rozábamos el éxito. Querían que fuésemos a Ginebra a ver el famoso acelerador de partículas que de aquella estaba todavía comenzando a desarrollarse. Finalmente, cuando todo parecía que iba a funcionar, la directora de algo tuvo un grave problema personal que la llevó a ponerse de baja médica y cortó de cuajo cualquier posibilidad de desarrollar el proyecto.

La vida continuaba hasta que un día “Mi Compañero” y yo comenzamos a oler cosas raras. Resulta que “El Cojo“, cojo de verdad, falto de liquidación para aguantar los momentos de inicio de la actividad empresarial, decidió, de mutuo acuerdo con “El Listo“, darse de alta como trabajador de la empresa para posteriormente solicitar la baja en la Seguridad Social y cobrar la prestación y él se haría cargo de sus cotizaciones y sus pagos trimestrales a Hacienda 😐 . Creo que eso se llama estafa, pero como veréis más adelante, no lo era, todo muy legal. Resulta que este hombre había echado cuentas y para que le quedase pasta gansa después de pagar sus gastos necesitaba una nómina muy elevada, así que ni corto ni perezoso se nos pone una de 600.000 pesetas, sí, 3.600 eurazos. Craso error. Tan listo era que no sabía que la S.S. tiene un máximo para las prestaciones y a partir de ahí da igual cual sea tu cotización, cobras el máximo. Sus cuentas de la vieja ya no salían tan redondas. Para agravar más la situación, como “El Cojo” no disponía de liquidez inicial para hacer frente a sus pagos mensuales de Seguridad Social ni de Hacienda, pidió aplazamientos hasta comenzar a cobrar de la Seguridad Social. En una situación normal es la empresa la que te paga mensualmente y la S.S. le paga a ella algún mes después, no recuerdo cuantos, pero en su acuerdo, obviamente, nosotros no íbamos encima a adelantarle el dinero. El caso es que cuando empezaron a llegar los primeros pagos de la Seguridad Social por su baja, llegaron también los cobros de su cotización (recordemos que estaban aplazados) junto a los intereses pertinentes, con lo que no quedaba dinero que cobrar. ¡Menuda idea tuvo “El Cojo“!

Como ya he dicho, de esto nos enteramos cuando ya estaba todo hecho.

Algunos meses después “El Listo” nos convence de que “El Cojo” es un lastre en la empresa y que deberíamos deshacernos de él. No era ningún secreto, trabajar, lo que es trabajar, más bien poco, ya todos nos habíamos dado cuenta. Así que amablemente le pedimos que abandonase el equipo, seguiría manteniendo sus participaciones en la empresa (30%) pero se desvinculaba completamente de su gestión. Un par de semanas después recibíamos en el despacho una citación del juzgado por impago de nóminas a su nombre. Nos reclamaba todas las que no tenía firmadas, o sea, todas, ya que él mismo manejaba todo su asunto. El acuerdo nos costó 9.000 euros.

A todo esto los proyectos seguían en proceso de latencia. Está hecho, no os preocupéis, es que la administración tiene mucha burocracia.

El Listo” era una persona… muy lista 😉 . A la par que trabajaba en la empresa llevaba también su propio proyecto turístico. Nos daba igual ya que todos hacíamos algo para ir sobreviviendo. Pero “El Listonos la metió bien metida. Para desarrollar un proyecto turístico contratamos dos chicas que se encargaron de llamar una por una a todas las agencias de viajes minoristas y mayoristas de este país. Imaginaos las facturas de teléfono, de aquella se pagaban todas las llamadas, no como ahora 😛 . Un par de meses después, cuando el primer paso del negocio estaba terminado, nos dice que no, que lo habíamos entendido mal, que aquello era para su negocio y que ya veríamos después cómo la empresa podía sacar algo de ahí. 😐 . Repito, 😐 . ¿Es que nos ves cara de tontos? Cuatro personas delante de la pizarra planteando el negocio y tres entendemos que el trabajo realizado es para la empresa y ¿tú dices que no? . Su respuesta: Creía que lo hacíais como amigos

Año y medio después cerrábamos el chiringuito. Lo único que llegamos a hacer fue una especie de “badulaque” para llamémosle “Apu“. Así es, era hindú y tenía algo parecido a un bazar 😛 . O sea, una tienda virtual de la época 😛 . A algunos nos costó dinero y otros lo ganaron, directa o indirectamente.

Me olvidaba de “JR”. Era (y es) un buen tipo, bueno organizando gente, pero falto de mano izquierda y todos terminaban por subírsele a las barbas. Tuvo muchos problemas después de esto para comenzar de nuevo, pero al final lo logró y parece que le va bastante bien, eso sí, como asalariado.

Finalmente los dos más pringaos, el diseñador y yo, somos desde entonces muy buenos amigos. Hemos hecho muchas otras cosas juntos a partir de ahí, algunas con más fortuna, otras con menos, pero nunca tan mal como entonces. La experiencia empresarial le costó mucho dinero y tardó mucho en recuperarse y levantar cabeza. Ahora es profesor de autoescuela y no quiere saber ni lo que es un ordenador 😉 .

¿Y yo? Aquí sigo. No me quejo. Como ya conté en otras ocasiones, otros negocios me han ido muy bien y esto es una simple anécdota en mi vida que contaré a mis nietos sobre los peligros de juntarte con la gente inadecuada.

Creo que esto se puede aplicar a cualquier aspecto de la vida, no sólo al empresarial. Igual que te la pega un socio te la puede pegar un amigo, todo depende de las personas y del afán de fama, poder y dinero que tengan.

Después de esto he seguido haciendo muchísimos negocios, tanto con “El Diseñador” como con Marcos, y no nos ha ido nada mal. Hemos tenido nuestros más y nuestros menos y hemos discutido, sin duda, diez años dan para muchas discusiones, pero siempre hemos llegado a buen puerto.

Los socios son lo más parecido a una pareja sentimental. Pasas con ellos más tiempo que con la propia pareja, sin embargo tienes mucha menos confianza que con ella. Si cuando una pareja tiene problemas de dinero lo primero que se resiente es su relación, imaginaos qué puede ocurrir cuando los problemas de liquidación los tiene una sociedad que está hecha para ganar dinero. Y es que con las vacas gordas todo va bien, el problema viene con las flacas.

Es muy fácil dar consejos sobre lo que se debe y no se debe hacer o sobre cómo se deben hacer las cosas, seguramente me hubiesen venido muy bien, pero creo que, al final, todos los que comiencen en el emprendimiento tropezarán en la misma piedra ya que de primeras no crees que un potencial socio tuyo vaya a hacerte nada semejante. Eso sí, las siguientes veces ya no te fías de nadie. Y es que sabe más el diablo por viejo que por diablo 😉 . Un buen amigo mío diría: Siempre hay alguien más listo que tú.

Y es que, al final, todo depende del objetivo por el que te metes en un negocio. En el caso que os he contado, los “directores” buscaban el pelotazo, el negocio fácil a través del mamoneo, y al no conseguirlo como esperaban, buscaron lo mejor para sí mismos. Los pringaos, sin embargo, buscábamos hacer cosas, teníamos ilusión en los proyectos, creíamos en ellos y queríamos llevarlos a cabo y disfrutar haciéndolo. Creo que ésa es la diferencia.

Por cierto, el otro día me crucé con “El Cojo“. Qué cachondo el tío… 😉