jueves, 29 de diciembre de 2011

Idea — Fábricas robóticas modulares

Empezaré esta serie de artículos transcribiendo las ideas que me rondan la cabeza cuando intento dormirme. No sé si será autosugestión o qué, pero el caso es que en ese momento me parecen tan interesantes que me quedo un buen rato dándoles vueltas. Tanto que a veces pierdo el sueño y hasta que no las dejo medio-cerradas no consigo dormirme.

Albergo siempre el miedo de que a la mañana siguiente no me acuerde de ellas, como si fueran sueños que al final caerán en el olvido. Para que eso no ocurra, y como positivamente sé que ninguna de estas ideas al final llegará a materializarse... y en parte para decir de forma retrospectiva en el futuro: "ves, yo ya lo pensé en el año tal", las dejo aquí escritas para que las lea algún curioso nostálgico de los recuerdos en el futuro. ¿Quién sabe? Lo mismo estos archivos no se perderán en el tiempo y alguien los tendrá a bien en conservar. O quizás después de todo sí que se perderán.

Por todo lo anterior empiezo esta serie de artículos de mis locas ideas y proyectos. Algunos intentan ser originales como podría ser este. Otros están basados en cosas que he leído por ahí y que he modificado y/o adaptado (lo que llaman ahora los "modesnos" innovación).

Esta idea se me ocurrió hace unos días, al intentar dormirme una noche en la que me costó conciliar el sueño. Me planteaba la pregunta de por qué la fabricación de muchos productos occidentales se realiza en países emergentes mientras que el diseño se queda en occidente. Pasa con todas las empresas de tecnología ahora: Apple, HP, IBM, etc. La respuesta que encontraba era que en esos países, al haber muchos menos derechos laborales y la gente no reclamarlos por o no haberlos conocido nunca o tener miedo de las represalias, la mano de obra es mucho más barata y los países occidentales son incapaces de competir con eso. ¿Qué solución puede tener esto? ¿Cómo salimos de la encruzijada?

Entonces pensé en la definición del término "robot". Es un término que popularizó el dramaturgo checo Karel Čapek. Sin embargo, el inventor de la palabra fue su hermano Josef. Éste le sugirió el término "roboti" para una novela que estaba escribiendo. Literalmente "robota" en checo significa labor o trabajo y figuradamente "trabajo duro" (Wikipedia). Así que también se podría traducir en cierto sentido como esclavo.

Mi idea consiste en sustituir esta mano de obra barata por robots para que tanto el diseño como la fabricación se puedan realizar en los países occidentales a un coste comparable al que ahora se tiene en los países emergentes sin derechos laborales. No es una idea nueva esta, ya que en la industria automovilística por ejemplo se viene haciendo algo parecido desde hace muchos años.

Mi aportación a esta idea, sin embargo, es que la fábrica sea modular. Es decir, en vez de tener una línea de fabricación lineal como su propia palabra indica, que sea más una línea de fabricación en 2 dimensiones, incluso en 3 dimensiones.

¿Qué quiere decir esto? Limitándonos por ejemplo a una planta de fábrica, quiere decir que la diferente maquinaria se tendría que repartir en módulos. Cada módulo tendría que estar especializado en una tarea en concreto. Por ejemplo tendríamos un módulo que podría ser de troquelado, otro de impresión de piezan en una impresora 3D, otro módulo dedicado al pulido de las piezas, etc. Todos los módulos tendrían que tener además de la maquinaria específica, un par de brazos robóticos al menos con los que se manipularan las piezas y se aplicaran los procesos correspondientes a esa fase de la fabricación. La maquinaria no tendría que controlarse físicamente con botones o mandos, sino telemáticamente mediante una API. Esto ahorraría el tiempo en la realización de cada proceso.

Este planteamiento tendría varias ventajas:
  • Se podría escalar más fácilmente este sistema. Desde unos pocos módulos podríamos escalar a toda una planta, incluso podríamos escalar en altura a una fábrica de varias plantas. La inversión sería progresiva. 
  • Cuando un módulo necesitase reparación se podría sacar de la "línea de producción" o planta de producción en nuestro caso para reparar. Mientras se podría introducir otro módulo de las mismas características.
  • Mediante un programa de inteligencia artificial se podría intentar optimizar el proceso de fabricación para que fuera más óptimo, moviendo por ejemplo módulos de un sitio a otro de forma que el tiempo de producción de un producto se minimizara.
  • Si en vez de un control totalmente automático de los diferentes módulos se optase porque un operario especializado manipulase el proceso, se podría dar responsabilidad a ese operario sobre un módulo en concreto.

La comunicación entre los diferentes módulos se podría hacer mediante cintas móviles mecanizadas o mediante plataformas móviles que se pudieran mover libremente por los pasillos de servicio entre los módulos. Estos movimientos también serían susceptibles de optimización.

He hablado antes del control automático de todo el proceso de fabricación. Pero debido a que hay fases del montaje que son complejas sería deseable que los operarios también tuviesen alguna forma de grabar cada fase del proceso de fabricación. Se podrían grabar varias veces al operario para tener una muestra más significativa. De esta forma, si las condiciones iniciales son similares esa fase se podría reproducir de forma automática y la inteligencia artificial lo que tendría que hacer es ocuparse de los cambios sutiles en cada caso.

Además, alguno de los muros de la fábrica servirían como entrada de materias primas (por ejemplo una o dos fachadas del edficicio) y los otros muros como salidas (las fachadas restantes).

Como conclusión, si este sistema funciona sería un posible sustituto a la fabricación que actualmente se hace por operarios humanos en condiciones de trabajo precarias. La dificultad estriba en conseguir brazos robóticos lo suficientemente hábiles y fiables para poder sustituir la eficiencia que actualmente tiene el cuerpo humano (que sabemos que es una de las máquinas más perfectas que existen).

martes, 27 de diciembre de 2011

Neuromante, de William Gibson

Hace mucho que quería dejar aquí algún comentario sobre esta novela. Desde que la leí la primera vez en cierto sentido es una de mis novelas de referencia. Dicen los estudiosos de estos temas que es una de las primeras novelas del estilo ciberpunk.

De hecho mi primer contacto con ella fue en el tren, de camino a casa después de haber pasado el día en la universidad. Era mi época de estudiante, cuando todavía tenía mucho tiempo para leer (y más ganas de leer que de estudiar). Tampoco me había acomodado tanto como hoy e iba casi todos los días en tren a la universidad. Por aquel entonces, todo hay que decirlo, esta situación tampoco me agradaba mucho.

Había un chico enfrente mío con un ejemplar de la novela, en la edición española de la editorial Minotauro. La portada era curiosa: un dibujo más o menos abstracto que nunca he llegado muy bien a saber qué simboliza. Sobre fondo oscuro se ve una especie de esfera brillante y por detrás unos cilindros también de colores oscuros la rodean. He visto portadas de esta novela mejores, en la que se puede ver a Molly (un personaje de la novela) posando desafiante.

También recuerdo que pocos días después entré en el FNAC de Callao y me la compré. La primera lectura que hice de la novela fue tan rápida como poco fructífera. No me había enterado de nada.

Sólo después de dos o tres lecturas comprendí el sentido de lo que tenía entre manos. Una obra inspiradora, con un lenguaje propio y eléctrico. Yo que siempre estoy pensando en frases que se pueden citar cuando leo algo, esta novela sin duda es un filón. Casi toda se podría citar, frases enteras rellenarían mi pared si tuviera el espacio suficiente.

En cuanto al tema, sin destriparlo mucho, trata sobre un vaquero (hacker) del ciberespacio que ha caído en desgracia y que de buenas a primeras se ve embarcado en una operación que no sabe muy bien en qué acabará. El universo es parecido al de esa película que también nos gusta tanto: Blade Runner.

Así que si te gusta Blade Runner yo creo que puedes darle una oportunidad a Neuromante. Eso sí, la lectura en inglés se hace un poco ardua, tanto por el léxico como por el ritmo propio de la novela.

sábado, 17 de diciembre de 2011

Reflexiones sobre el tamaño óptimo de los backups incrementales o diferenciales


Definimos el factor:

Factor (F) = (Suma Incrementales o Diferenciales) / Full del ciclo

El factor está acotado de la siguiente manera:

0 ≤ F ≤ (N-1)

Donde N es la duración del ciclo. Por ejemplo si se hacen backups full semanales y cada día un incremental, N=7 porque es por semana. Si se hiciera un backup full mensual y el resto de los días del mes incrementales, N=30.

Valores de F mayores que (N-1) no tienen mucho sentido ya que querría decir que
la los incrementales, de media, pesan más que el full del ciclo.

Ej. 1: full semanal, resto de los días incrementales

         |-- L --|-- M --|-- X --|-- J --|-- V --|-- S --|-- D --|
Semana 1 |       |       |       |       |       |       | FullS |
Semana 2 | Inc1  | Inc2  | Inc3  | Inc4  | Inc5  | Inc6  |       |

=> Factor = (Inc1 + Inc2 + Inc3 + Inc4 + Inc5 + Inc6) / FullS

Ej. 2: full semanal, resto de los días diferenciales

         |-- L --|-- M --|-- X --|-- J --|-- V --|-- S --|-- D --|
Semana 1 |       |       |       |       |       |       | FullS |
Semana 2 | Dif1  | Dif2  | Dif3  | Dif4  | Dif5  | Dif6  |       |

=> Factor = (Dif1 + Dif2 + Dif3 + Dif4 + Dif5 + Dif6) / FullS

Ej. 3: full mensual, resto de los días incrementales

Semana 1 | FullM | Inc1  | Inc2  | Inc3  | Inc4  | Inc5  | Inc6  |
Semana 2 | Inc7  | Inc8  | Inc9  | Inc10 | Inc11 | Inc12 | Inc13 |
Semana 3 | Inc14 | Inc15 | Inc16 | Inc17 | Inc18 | Inc19 | Inc20 |
Semana 4 | Inc21 | Inc22 | Inc23 | Inc24 | Inc25 | Inc26 | Inc27 |
Semana 5 | Inc28 | Inc29 |

=> Factor = (Inc1 + Inc2 + Inc3 + ... + Inc29) / FullM


Tipos de clientes:

Nos encontramos con dos tipos de clientes problemáticos:

  • Clientes cuyo F < 0.1: Suma de incrementales o diferenciales es menor que el 10% del tamaño del full.
→ CLIENTES INACTIVOS

  • Clientes cuyo F > 0.9: Suma de incrementalos o diferenciales mayor que el 90% del tamaño del full.
→ CLIENTES HIPERACTIVOS

Valor óptimo del factor:

Es difícil dar una cifra óptima ya que la elección de este factor influiría por ejemplo en los tiempos de recuperación, que pueden ser diferentes dependiendo de la política que se quiera seguir en el cliente o de los requerimientos en los tiempos de recuperación.

Además también hay clientes más propensos a tener un F grande. Por ejemplo, cuando son clientes de base de datos es normal generar un volcado diario con los datos. Con lo cual el incremental suele ser grande.

Medidas a adoptar:

Dependiendo del tipo de cliente, ir adoptando las medidas en orden y estudiar cómo evoluciona F a lo largo de las sucesivas semanas.

◊ En los clientes INACTIVOS:

1) Full cada más tiempo

◊ En los clientes HIPERACTIVOS:

1) Estudiar los ficheros que ocupan más tamaño en los incrementales y activar directivas a nivel local en los SaveSets / directorios conflictivos

NOTA: Estas directivas se pueden aplicar a nivel global (se han definido varias políticas en función del sistema operativo) o por el administrador del servidor en cuestión (mediante el fichero .nsr).

1.1) Si son ficheros temporales o prescindibles, excluirlos del backup
  • skip : Excluye un directorio o fichero. Espera una máscara. 
1.2) Con los ficheros que no cambian de tamaño a lo largo de la semana, pero sin embargo se van a cinta:
  • mtime : Graba sólo un fichero cuando el tiempo de modificación del fichero cambia, es decir, cuando cambia el fichero. A veces te llevas ficheros que sólo se han accedido pero no han cambiado, lo que no es muy adecuado.
2) Si son ficheros de log que no se rotan:
  • En Unix se pueden rotar con el logrotate.
  • En Windows: habría que buscar una solución similar.
3) Si son volcados a disco (normalmente copias completas de bases de datos):
  • Estudiar si es necesario hacer el volcado realmente todos los días y llevárselo al backup o se pueden usar otras técnicas de volcado (por ejemplo, volcados incrementales aunque aumentaría el tiempo de recuperación)
  • Si no es posible, documentar en algún sitio que ese cliente tiene los incrementales/diferenciales muy altos y no se puede bajar. Reflejar también el razonamiento.
En la práctica:
  • Normalmente (aunque depende de la herramienta de backup que se use) la suma de los incrementales te los hace directamente, mientras que cuando es un cliente con diferenciales (tipo NAS) los tienes que sumar tú (por cada cliente) para calcular el factor (ya que los clasifica como diferencial nivel 1, 2, 3, etc.
  • Cuando la estadística es en un período de tiempo largo, se puede hacer la suma en el período de todos los incrementales o diferenciales y luego dividir por la suma de todos los fules en el período. De esta forma sale una muestra mayor y los valores son más significativos.
  • Si un cliente tiene varios SaveSets puede que uno de ellos tenga algún problema y los otros estén bien. Realmente cuentan los SaveSets de mayor tamaño dentro de un cliente (los que ocupan GB, es decir en tamaño los del orden de 1E+9). Dado que la política de backup se fija a nivel de cliente, si un SaveSet grande tiene problemas ese cliente tendría que ser entonces candidato para que se le optimice.
  • Los diferenciales en realidad son más grandes que los incrementales, ya que se reflejan los cambios desde el último backup full. Para clientes tipo NAS (como por ejemplo EMC Celerra, NetAPP, etc) no conviene tocar mucho la configuración ya que si no se penaliza de cara a los tiempos de recuperación.

domingo, 4 de diciembre de 2011

¿Puedes romper este código? O como optar a ser espía de UK



eb 04 af c2 bf a3 81 ec   00 01 00 00 31 c9 88 0c
0c fe c1 75 f9 31 c0 ba   ef be ad de 02 04 0c 00
d0 c1 ca 08 8a 1c 0c 8a   3c 04 88 1c 04 88 3c 0c
fe c1 75 e8 e9 5c 00 00   00 89 e3 81 c3 04 00 00
00 5c 58 4d 41 41 41 41   75 43 58 3d 42 42 42 42
75 3b 5a 89 d1 89 e6 89   df 29 cf f3 a4 89 de 89
d1 89 df 29 cf 31 c0 31   db 31 d2 fe c0 02 1c 06
8a 14 06 8a 34 1e 88 34   06 88 14 1e 00 f2 30 f6
8a 1c 16 8a 17 30 da 88   17 47 49 75 de 31 db 89
d8 fe c0 cd 80 90 90 e8   9d ff ff ff 41 41 41 41


Can you crack it? es una forma que se han inventado los británicos de captar a potenciales espías que ayuden en la caza por parte de las fuerzas de la ley de ciber-delincuentes. Si descubres el mensaje en claro asociado al cifrado transcrito arriba, éste te llevará a una página web en la que podrás mandar tu CV y que te "recluten" ;-)

Si ser un especialista en el tema, veo que hay algunos pares hexadecimales que se repiten más que otros (00, 41, 42, 88, 89, 8a, 90, por ejemplo). También creo que se podría asumir que dentro del código descifrado puede haber una URL a la página web donde mandar el CV. Por lo que el patrón http://.../.../ sería uno de los que deberíamos buscar.

Si descubro algo más en los 7 días que quedan para que termine el reto... seguramente les mande mi CV. Aunque va a estar la cosa difícil.

lunes, 28 de noviembre de 2011

Un gestor de descargas programado en bash


El gestor de descargas favorito de todo sysadmin debería de ser un script programado en bash. Perl también sería otra opción, pero soy menos hábil en ese lenguaje. Lo único que necesita el script son los comandos básicos (echo, awk), uno para comprimir (gzip) y el que vamos a usar para descargar (wget).

El script es el siguiente:

Pastie | Mystic Paste
-----------------[ descarga.sh ]-----------------
#!/bin/bash

WGET_OPTS="-c"

graba_msg_error() {
  ERRORNO=$1
  case $ERRORNO in
    0) MSG_ERR="No problems occurred." ;;
    1) MSG_ERR="Generic error code." ;;
    2) MSG_ERR="Parse error --- for instance, \
when parsing command-line options, the .wgetrc \
or .netrc..." ;;
    3) MSG_ERR="File I/O error." ;;
    4) MSG_ERR="Network failure." ;;
    5) MSG_ERR="SSL verification failure." ;;
    6) MSG_ERR="Username/password authentication \
failure.";;
    7) MSG_ERR="Protocol errors." ;;
    8) MSG_ERR="Server issued an error response." ;;
    *) MSG_ERR="Unknown." ;;
  esac

  echo "(**) RESULTADO DEL COMANDO: $ERRORNO -- \
$MSG_ERR" >>$NOMBRE.log

}

while read LINEA;
do

  NOMBRE=$( echo $LINEA | awk '{print $1}' )
  URL=$( echo $LINEA | awk '{print $2}' )
  echo -n "Descargando $NOMBRE desde $URL..."
  wget $WGET_OPTS -o $NOMBRE.log -O $NOMBRE "$URL"
  N_ERROR=$?
  graba_msg_error $N_ERROR
  gzip -v9 $NOMBRE.log >>$NOMBRE.log 2>&1
  if [ $N_ERROR == "0" ]; then
    echo "OK"
  else
    echo "ERROR!"
    echo "=> N_ERROR = $N_ERROR, ver el log para \
mas informacion."
  fi

done <$1
-----------------[ descarga.sh ]-----------------

El modo de empleo es:

./descarga.sh <fichero_urls.txt>

El parámetro <fichero_urls.txt> es un fichero con líneas, donde en cada línea pones el nombre del fichero y la URL que quieres descargar. Por cada descarga se genera un fichero .log con la salida del comando wget (además de grabarse el fichero de la descarga si esta ha sido correcta). El flag "-c" que se pasa a wget sirve para continuar las descargas que estuvieran a medias. Como característica adicional, se ha programado una función (graba_msg_error) para el control de errores de wget.

viernes, 18 de noviembre de 2011

Dos cervezas belgas para la colección


Maes Pils

Blanche de Namur

Porque no todas las cervezas son alemanas, un par de especímenes belgas. A la izquierda la Maes Pils sin alcohol que nos tomamos en la Fábrica de la Cerveza. Se nota que es sin alcohol, pero pese a su color transparente tiene mucho cuerpo y merece la pena degustarla. A la derecha la Blanche de Namur. La puedes probar en el Oldenburg de Cardenal Cisneros. Se parece a otra cerveza que nos gusta mucho: la Hoegaarden. Es de las típicas que le puedes echar un trozo de limón y mejora el sabor. También merece la pena repetir esta. ¿Será que nos encanta la cerveza?

martes, 15 de noviembre de 2011

Rhenania Alt & Weihenstephan

Rhenania Alt & Weihenstephan
Dos cervezas más para completar la colección, alemanas las dos. Dentro de poco tendré que actualizar la lista con cervezas favoritas para añadir muchas de estas.

La Rhenania nos recordó un poco a la Murphys, no sólo porque es tostada también sino por el sabor muy similar. No tiene lema que yo sepa.

La Weihenstephan (de trigo) dicen que es la cerveza más antigua del mundo. De hecho pone que la hacen desde el año 1040. Su lema: Alteste Brauerei der Welt.

PD. Gracias a la camarógrafa. Se nota que no sólo la cámara es mejor, sino el enfoque de la foto es el adecuado.

sábado, 12 de noviembre de 2011

Kloster Andechs Spezial Hell

Kloster Andechs Spezial Hell
Otra cerveza Andechs, esta vez rubia (Hell, que realmente significa "clara"). La página web es esta. Tal vez estaba mejor la de trigo, pero esta no desmerece.

miércoles, 9 de noviembre de 2011

Mercados tradicionales que han sido remodelados

Quería hoy enumerar aquí los mercados que tengo constancia han sido remodelados últimamente en Madrid. Sobre todo el mercado de San Miguel ha quedado muy bien en mi opinión.

Son los siguientes:

De estos el único que he visitado es el de San Miguel. Con la remodelación se ha recuperado un espacio que antes estaba en cierto sentido perdido. La verdad es que les ha quedado muy bonito, tiene muchas tiendas interesantes dentro (pinchos, sushi, etc) y ese aire a Madrid antiguo todavía se palpa en el ambiente. Para los extranjeros de turismo en Madrid sin duda será un lugar a visitar.

La página web, lo peor. Hoy al menos me fallaba en algunas partes. Tampoco le veo un estilo moderno y accesible a gente con discapacidad. Pero claro, lo importante es el mercado, no la página.

miércoles, 2 de noviembre de 2011

De pinchos por Malasaña

Nuestros sitios favoritos para salir de pinchos y raciones por Malasaña.

Lizarrán

Es una cadena. Cada franquicia se organiza de una forma. Por ejemplo, en el de Bravo Murillo todos los pinchos valen lo mismo, mientras que en el de Princesa tienes colores en los palillos y hay algunos pinchos que valen más que otros. Primero pides tu bebida y luego a por los pinchos se ha dicho.

Cabañiaquinta (Cerrado a finales de 2015)

Agradable. Todo en madera. Tienen en la carta unos menús con 5-10 pinchos que da de sobra para cenar 2-4 personas. Casi siempre está lleno. Los fines de semana más. Lo descubrimos en un festival de pinchos que hubo en Madrid.

La Barra

Es un pequeño restaurante al lado del Bingo de la calle Luchana. Muy agradable, también son vascos. Nos gusta especialmente la ensalada de espinacas con queso de cabra, jamón serrano y vinagre de módena y casi todos los pinchos que ponen. Suelen poner los pinchos en la barra y vas a elegirlos allí.

Elcano

Fuimos por una oferta de Groupalia y la verdad es que no está mal. No es de los que más me gusta, pero tiene un aquél. Seguramente volvamos. No tienen tanta variedad de pinchos como en otros sitios pero algunos están muy ricos. Las croquetas por ejemplo no nos gustaron.

Orio

Es un sitio con dos plantas. En la de abajo puedes comerte los pinchos sentado en unas sillas altas con mesas alargadas. Como siempre está lleno lo más normal es que compartas mesa con desconocidos. Pero bueno, los pinchos en sí están ricos la verdad. La parte de arriba tiene mesas un poco más separadas, pero pierdes eso de elegir los pinchos en la barra.

lunes, 31 de octubre de 2011

Schneider Weisse Aventinus


Con más contenido alcohólico que la anterior que reseñé (8,2º). Alemana también, pero tostada no de trigo. Más del estilo de la Guiness. De esas cervezas que ya tomándote una y un limón, cenas (o eso dicen de la Guiness).

Su lema (de la Schneider Weisse): Die freien Brauer. Braukunst und Lebensart“.

Si quieres leer más de esta cerveza este es el enlace al sitio web.


miércoles, 19 de octubre de 2011

Las corrientes de opinión de la blogosfera

Desde hace poco observo en la gente un fenómeno curioso pero por otra parte comprensible. Se trata de las corrientes de opinión que se generan por leer todos los mismos blogs y las mismas webs. En particular me refiero a los temas tecnológicos, que es donde se crean hoy en día intensos debates en la red.

El síntoma característico es opinar de la misma forma o tener pensamientos similares a otra persona cuando se saca un tema tecnológico. Realmente a veces no es que sea una corriente sólo la predominante. A lo mejor es un conjunto finito de entre 1 y 3 opiniones generalmente. Pero justo coincide que con quien estás hablando en un momento dado ha escogido la misma opinión que tú.

Luego te das cuenta que en el fondo si te nutres de las mismas fuentes de información y a cada una le das más o menos el mismo valor (la ponderas de la misma forma) al final la cadena de deducciones nos lleva a todos a los mismos lugares comunes. Lo cual también me hace plantearme la pregunta de si realmente merece la pena leer habitualmente lo mismo o hay que buscar otras fuentes... o lo que es más "inquietante": buscar las fuentes de los hechos y no las opiniones ya procesadas e intentar formarte tú mismo una opinión. Interesante sería también sacar a colación un tema diferente o un debate que no se hubiera considerado antes digno de mención y generar tú una corriente de opinión.

Y es que en esto de la tecnología tener una opinión particular y distinta, una visión original, siempre basada en la lógica y en los hechos claro está, es lo que te puede llegar a diferenciar de los demás. O lo que es lo mismo, poder escribir entradas originales que realmente aporten algo diferente a los asuntos que se discuten dentro de la blogosfera.

sábado, 15 de octubre de 2011

Genealogía de Elrond


Lo que responde a la pregunta de: ¿es realmente Elrond medio-humano? Y para los que no podíais dormir porque esa respuesta rondaba vuestras cabezas tengo que deciros que es 3/8 humano, con lo cual aproximadamente sí que es medio-humano.

Gracias a la fuente anónima que hizo el estudio ;-)

viernes, 14 de octubre de 2011

Kloster Andechs Weißbier Hefetrüb

Kloster Andechs Weißbier Hefetrüb
De abadía, de trigo, alemana. ¿Qué más se puede pedir? Una cerveza que merece la pena probar. Su lema: „Genuß für Leib & Seele“.

martes, 11 de octubre de 2011

Tutorial: Tomcat7 + Struts2 + VIM "à la" sysadmin

  1. Nos bajamos las últimas versiones de Tomcat y de Struts. Para este tutorial suponemos que Tomcat está instalado y arrancado, de forma que podemos desplegar las aplicaciones en la URL /manager (esa parte de la complejidad es para nosotros transparente ya que la gestiona Tomcat).
  2. Creamos la estructura de directorios siguiente (los ficheros los iremos creando más adelante):
  3. +-webapp_template/
      | make.sh
      +-versions/
      +-src/
        | index.jsp
        +-jsps/
        | | HelloWorld.jsp
        +-WEB-INF/
          | web.xml
          | struts.xml
          +-lib/
          | | [librerías.jar, ver más adelante]
          +-classes/
            | [ficheros .java dentro de su paquete]
  4. Grabamos las últimas versiones de las siguientes librerías (todas son o de Struts o de se pueden encontrar en la web de Apache) en el directorio lib, que es donde va a buscar los .jar el servidor Tomcat. Las librerías son:
    • struts2-core
    • xwork-core
    • ognl
    • freemarker
    • commons-fileupload
    • commons-io
    • commons-lang
    • commons-logging
    • javassist
  5. El script en bash make.sh tiene el siguiente contenido (este realmente es el paso más "sysadmin"):
  6. ----------- make.sh ------------------------------------
    #!/bin/bash
    TIMESTAMP=$( date "+%Y%m%d%H%M%S" )
    RUTA_DIR_ACTUAL=$( dirname `pwd` )
    NOMB_DIR_ACTUAL=$( basename `pwd` )
    HOME_APP="`pwd`"
    ROOT_LIB="$HOME_APP/src/WEB-INF/lib"
    LIBRERIAS="."
    for i in $( ls -1 $ROOT_LIB ); do
      LIBRERIAS=$LIBRERIAS:$ROOT_LIB/$i
    done
    #echo LIBRERIAS=$LIBRERIAS
    rm -rf compiled
    cp -a src compiled
    cd compiled
    find . -name "*.java" -exec javac -verbose -classpath $LIBRERIAS {} \;
    find . -name "*~" -exec rm -v {} \;
    find . -name "#*#" -exec rm -v {} \;
    find . -name "*.java" -exec rm -v {} \;
    cp WEB-INF/struts.xml WEB-INF/classes
    zip -r ../${NOMB_DIR_ACTUAL}.war *
    cd ..
    cp ${NOMB_DIR_ACTUAL}.war versions/${NOMB_DIR_ACTUAL}_${TIMESTAMP}.war
    ---------------------------------------------------------
  7. Creamos nuestra vista (jsps/HelloWorld.jsp) y nuestro controlador (WEB-INF/classes/template/HelloWord.java) con el siguiente código:
  8. ----------- HelloWorld.jsp ------------------------------
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>
    <p><s:property value="greetings" /></p>
    ---------------------------------------------------------
    ----------- HelloWorld.java -----------------------------
    package template;

    import com.opensymphony.xwork2.ActionSupport;

    public class HelloWorld extends ActionSupport {

      String greetings = null;

      public String execute() throws Exception {
        setGreetings("Hello World");
        return SUCCESS;
      }

      public String getGreetings() {
        return greetings;
      }

      public void setGreetings(String greetings) {
        this.greetings = greetings;
      }

    }
    ---------------------------------------------------------
  9. Lo siguiente es crear los ficheros de configuración de Tomcat (WEB-INF/web.xml) y de Struts (WEB-INF/struts.xml):
  10. ----------- web.xml -------------------------------------
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

      <display-name>hello</display-name>

      <filter>
        <filter-name>struts2</filter-name>
        <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class>
      </filter>

      <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>

      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>

    </web-app>
    ---------------------------------------------------------
    ----------- struts.xml ----------------------------------
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
      "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
      "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>

      <package name="hello" extends="struts-default">
        <action name="HelloWorld" class="template.HelloWorld">
          <result>/jsps/HelloWorld.jsp</result>
        </action>
      </package>

    </struts>
    ---------------------------------------------------------
  11. Creamos el fichero index.jsp que luego llamará al Action:
  12. ----------- index.jsp -----------------------------------
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
    <!DOCTYPE& html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Hello Sample</title>
      </head>
      <body>
        <s:action name="HelloWorld" executeResult="true"></s:action>
      </body>
    </html>
    ---------------------------------------------------------
  13. ./make.sh, desplegar (en el interfaz web del Tomcat) y probar la aplicación (en http://localhost:8080/webapp_template/). Cruzar los dedos para que funcione.

La mayor parte de este tutorial está transcrito de una página web donde lo encontré. Realmente mi aportación es el script make.sh y perfilar la estructura de directorios.

Cualquier comentario será bienvenido.

sábado, 8 de octubre de 2011

Steve Jobs, in memoriam

Mucho se ha escrito estos últimos días sobre el cofundador de Apple, Steve Jobs. Nos dejó este miércoles. Poco hay que añadir a esas opiniones de gente que en realidad le conocían mejor que yo. Pero alguna línea le quería dedicar aquí hoy.

Acabo de ver el vídeo de la graduación de la Universidad de Stanford en donde Steve Jobs da el discurso inaugural a los recién graduados y que se disponen a emprender su propia vida, sus propios sueños.

Me quedo eso que dijo allí y que supongo influyó también en todos los presentes en este discurso: tienes que vivir tus propios sueños y no los de otro, tienes que hacer en la vida lo que realmente te gusta y no conformarte con lo que han pensado o hecho otros.

Adiós Steve.


Steve Jobs (izquierda) y Steve Wozniak (derecha)

miércoles, 5 de octubre de 2011

Lugares para recordar

Sitios a los que íbamos y que por una razón u otra han cerrado. Momento do you remember, snif snif. Algunos han formado parte de nuestro pasado pero ya no volverán. Sobre todo están situados por la zona de Malasaña, Dos de Mayo y alrededores.


Restaurantes
  • La Carbonera de Carranza, donde además de cenas deliciosas teníamos siempre una amiga con una sonrisa para recibirnos. Nunca le preguntamos su nombre.
  • El Titular, La Habanera. Eran dueños diferentes, pero el sitio en donde se ubicaron ambos fue el mismo. Actualmente está en alquiler, no han puesto nada nuevo ahí. Cuando era El Titular era unos de los sitios donde cenábamos antes de ir al cine. Las raciones eran excesivas a lo mejor, con una guarnición generosa. El dueño era un periodista famoso. Nos ofreció un café irlandés, que era por lo visto su especialidad... pero nos quedamos con las ganas. La Habanera nos gustó menos, quizás la comida cubana no sea de nuestras favoritas.
  • Entre vinos y tapas. Mesas y taburetes de madera. Pinchos y raciones muy ricas. Tenían también unas sartenes deliciosas. Creo que es una cadena y no han cerrado todos. Pero el de Fuencarral sí.
  • Pa' Güevos... ¡Los Míos! Un restaurante diferente. Si los pedías (que no los pedímos nunca) te hacían huevos de avestruz. Las cantidades de los platos eran muy generosas y en general el servicio agradable.
  • El Wok de Génova. Con sus particularidades, ya que los platos no los hacían igual que en otros Woks. Pero siempre tenía un ambiente agradable. En la última etapa no veíamos mucha gente cenando allí.
  • Egö, Anima e Cuore. Sólo fuimos una vez, y la verdad es que no nos gustó demasiado. El espectáculo era un poco vulgar y la cena no acabó de convencernos.

Baretos

  • Moulin Rose, una pequeña discoteca en la calle Hernán Cortés. Tenía una cristalera en forma de corazón, por dentro el decorado era en rojo. Pegado a la cristalera en el interior había una cama para tumbarse. Al fondo de un pasillo estrecho, un escenario donde siempre había música para bailar (y algún que otro bailoteo nos pegamos allí). Tenían unos San Franciscos que eran de nuestros favoritos. No hemos encontrado otro sitio donde los hicieran igual y eso que los hacían siempre diferentes, dependiendo del estado de ánimo del dueño. Además éste nos atendía siempre genial. Snif snif.



lunes, 3 de octubre de 2011

Scrabble, otra distribución



Las palabras puestas negro sobre blanco: tedio, turbo, rato, tutú, abono, resaca, dona, ahí, hierro, feo, fe, erizar, pin, masacre, misa, ir, can, cuna, chato, che (o Ché), te, gasa, credo, doña, dos, palo, yo y ya.

Es posible que intente crear una historia con las palabras. Por cierto, se podría incorporar las que sobraron justo en la disposición que se muestra: "usd" con el significado de "US Dollar".

domingo, 2 de octubre de 2011

Questo piccolo grande amore


La letra en italiano y es castellano (sacada de aquí):

ItalianoCastellano
Quella sua maglietta fina
tanto stretta al punto che mi immaginavo tutto,
e quell' aria da bambina
che non glielo detto mai ma io ci andavo matto.
Esa camiseta suya fina
tan ajustada que me lo imaginaba todo,
y ese aire de niña
que nunca se lo he dicho pero a mí me volvía loco.
E chiare sere d' estate,
il mare, i giochi e le fate
e la paura e la voglia
di essere nudi,
un bacio a labbra salate,
il fuoco, quattro risate,
e far l' amore giù al faro...
ti amo davvero, ti amo lo giuro...
ti amo ti amo davvero!
Y claras tardes de verano,
el mar, los juegos y las hadas
y el miedo y el deseo
de estar desnudos,
un beso con labios salados,
el fuego, cuatro carcajadas,
y hacer el amor allí en el faro...
te amo de verdad, te amo lo juro...
¡te amo te amo de verdad!
E lei,
lei mi guardava con sospetto,
poi mi sorrideva e mi teneva stretto stretto,
ed io
io non ho mai capito niente,
visto che oramai non me lo levo dalla mente
che lei, lei era...
Y ella,
ella me miraba con sospecha,
luego me sonreía y me abrazaba fuerte fuerte,
y yo
yo nunca he entendido nada,
dado que ahora ya no me lo quito de la mente
que ella, ella era...
... un piccolo grande amore,
solo un piccolo grande amore,
niente più di questo, niente più!
Mi manca da morire
quel suo piccolo grande amore,
adesso che saprei cosa dire,
adesso che saprei cosa fare,
adesso che voglio
un piccolo grande amore.
... un pequeño gran amor,
sólo un pequeño gran amor,
nada más que esto, ¡nada más!
Echo tantísimo de menos
ese pequeño gran amor suyo,
ahora que sabría qué decir,
ahora que sabría qué hacer,
ahora que quiero
un pequeño gran amor.
Quella camminata strana
pure in mezzo a chissacche l'avrei riconosciuta,
mi diceva "sei una frana",
ma io questa cosa qui mica l'ho mai creduta.
E lunghe corse affannate,
incontro a stelle cadute,
e mani sempre più ansiose
di cose proibite
e le canzoni stonate,
urlate al cielo lassù:
"chi arriva prima a quel muro..."
non sono sicuro se ti amo davvero,
non sono, non sono sicuro...
Aquel paseo extraño
incluso en medio de lo que sea la habría reconocido,
me decía "eres una avalancha",
pero yo esto como que nunca me lo he creído.
Y largas carreras agotadoras,
al encuentro de estrellas caídas,
y manos cada vez más ansiosas
de cosas prohibidas
y las canciones desentonadas,
gritadas al cielo allá arriba:
"quien llegue primero a ese muro..."
no estoy seguro si te amo de verdad,
no estoy, no estoy seguro...
E lei
tutto ad un tratto non parlava
ma le si leggeva chiaro in faccia che soffriva,
ed io
io non lo so quant'è che ho pianto,
solamente adesso me ne sto rendendo conto
che lei, lei era...
Y ella
de repente dejó de hablar
pero se le leía claro en la cara que sufría,
y yo
yo no lo sé cuánto he llorado,
sólo ahora me estoy dando cuenta
de que ella, ella era...
... un piccolo grande amore,
solo un piccolo grande amore,
niente più di questo, niente più!
Mi manca da morire
quel suo piccolo grande amore,
adesso che saprei cosa dire,
adesso che saprei cosa fare,
adesso che voglio
un piccolo grande amore.
... un pequeño gran amor,
sólo un pequeño gran amor,
nada más que esto, ¡nada más!
Echo tantísimo de menos
ese pequeño gran amor suyo,
ahora que sabría qué decir,
ahora que sabría qué hacer,
ahora que quiero
un pequeño gran amor.

jueves, 15 de septiembre de 2011

Clasificación de los mejores Pad Thai que he comido en Madrid

El Pad Thai es un plato de noodles típico de Tailandia. Hay muchas variantes, pero el aspecto del plato en cuestión es más o menos el siguiente (una imagen...):

El aspecto del plato en cuestión
En Madrid hay varios sitios donde lo puedes degustar. Los que más me gustan, por orden de preferencia, son los siguientes:
  1. Siam (c/ San Bernardino, 6)
  2. Gingerboy Take Away (c/ Murillo, 1), puedes tomarlo allí pero tienen poco espacio. Es mejor quizás llevarse el Pad Thai a casa y degustarlo tranquilamente.
  3. Maiia Thai (c/ Princesa, 13)
  4. Indochina (c/ Barquillo, 10)
  5. The Wok (de la cadena VIPS)
  6. Krachai (c/ Fernando VI, 11)
  7. Thaï Gardens (Paseo de la Habana, 3)