Probando Grails en Google App Engine

    Publicado el Monday 1 de March de 2010. | 3 comentarios
    Categoría: Programación y diseño | Tags: , ,

    Este es un pequeño tutorial para probar una aplicación desarrollada con Grails sobre Google App Engine. La aplicación es lo más sencilla posible: no tiene clases de dominio ni servicios ni nada, tan solo un controlador que pinta “Hola mundo”. Las versiones que he utilizado son Grails 1.2.1 (descárgatelo de aquí: http://grails.org/Download) y Google App Engine SDK para Java 1.3.1 (descárgatelo de aquí: http://code.google.com/p/googleappengine/downloads/list)

    El primer paso de todos es crear una cuenta en http://code.google.com/appengine y crear una aplicación. Para este ejemplo, asumiremos que el nombre de la aplicación es tuapp, pero podría ser cualquier otro. El nombre de la aplicación en App Engine debe coincidir con el nombre de la aplicación Grails.

    Descargar el Google App Engine SDK, descomprimirlo en un directorio y establecer la variable de entorno APPENGINE_HOME para que apunte a dicho directorio. Ejecutar los siguientes comandos (se supone que tenemos instalado Grails y que el comando grails está en el PATH)

    grails create-app tuapp
    cd tuapp
    grails set-version 1

    Google App Engine no acepta números de versión decimales (como 0.1), por eso es importante que la versión sea un número entero, como 1, 2, etc.

    Hay que desinstalar el plugin de Tomcat (solo se desinstala para esta aplicación, no para todo el sistema) ya que el plugin de Google App Engine lleva su propio servidor.

    grails uninstall-plugin tomcat
    grails install-plugin app-engine

    Elegir jpa cuando te pregunte.

    Ahora vamos a crear un controlador de prueba:

    grails create-controller test.Test

    Editar grails-app/controllers/test/TestController.groovy y modificar el closure index para que quede así:

    package test
    
    class TestController {
        def index = { render "Hola mundo" }
    }
    

    Editar el fichero grails-app/conf/UrlMappings.groovy y cambiar el mapeo de “/” para que apunte al controller que acabamos de crear

    "/"(controller:'test', action:'index')

    Lanzar la aplicación con:

    grails run-app

    Probar que todo funciona visitando http://localhost:8080. Parar el servidor con CTRL+C.

    Añadir las siguientes lineas al fichero grails-app/conf/Config.groovy con los datos de tu cuenta de Google.

    google.appengine.email="tumail@gmail.com"
    google.appengine.password="tupassword"

    Despliega la aplicación con el siguiente comando:

    grails app-engine deploy

    Prueba que todo funciona correctamente visitando http://tuapp.appspot.com. He hecho más de una prueba, y no he conseguido hacerlo funcionar. Parece que la primera petición http que se hace a la aplicación, Google App Engine la inicializa y Grails tarda demasiado. Google App Engine tiene un límite de 30 segundos por petición, y si se supera ese tiempo, mata la petición. Y con ella, el proceso de arranque. Al parecer es un bug conocido: http://jira.codehaus.org/browse/GRAILSPLUGINS-1736. En fin, estaré al tanto para ver si se arregla este bug, ya que es bastante interesante poder disponer de un hosting gratuito para nuestras aplicaciones en Grails. Mientras tanto, probaremos otras opciones como Gaelyk, que es bastante más ligero.

    Popularity: 1% [?]

    Spring 2GX day en Madrid

      Publicado el Saturday 20 de February de 2010. | 10 comentarios
      Categoría: Noticias, Programación y diseño | Tags: , , , ,

      Spring 2GX day es el primer evento gratuito organizado entre SpringSource y Javahispano que trata exclusivamente sobre Grails y Spring. La verdad es que fueron muchas cosas de las que se hablaron, y aunque el saber no ocupa lugar, la memoria siempre tiene un límite, así que intentaré contar mi propia versión del Spring 2GX day, es decir, de lo que me acuerdo.

      Llego a las 8:15 y ya hay cola para registrarse, parece que este en evento va a haber mucha gente. Más tarde nos contarán que aunque inicialmente se esperaban unos 150 asistentes, a final serán más de 400. La organización, desbordada, tiene que planificar sobre la marcha, cambiar de sala de audiencias a una mayor y se quedan sin algunos items para todos que regalan durante el registro a todos los ponentes (como bolis, panfletos, etc.). Pese a todos los inconvenientes, todo sale perfectamente. ¡Felicidades Javahispano! :)
      La presentación corre por parte parte de Abraham, de Javashipano, agradeciendo a todos los sponsors su ayuda y contándonos que no van a poder hacer streaming de las ponencias por problemas técnicos, una pena para los que no pudieron venir, aunque pueden estar tranquilos: todos los vídeos y transparencias van a ser publicados, pero tendrán que esperar un poquito. También comenta que en todas las ponencias se va a sortear un libro a uno de los asistentes (a mí no me tocó ninguno, una pena porque el libro The Definitive Guide to Grails, 2nd edition, venía firmado por el propio Graeme Rocher).

      Empiezan las ponencias. Entra Graeme Rocher, creador de Grails, entre aplausos. Aunque comienza su introducción en castellano, prefiere continuar en inglés donde se encuentra más cómodo, sobre todo a la hora de utilizar palabras técnicas. Graeme empieza a hablar sobre Grails comentando que esta construido sobre hombros de gigantes: Java, Groovy, Spring, Hibernate, Sitemesh y Quartz (he encontrado la presentación aquí: http://europe.springone.com/europe-2009/file?path=/springone-amsterdam-2009/slides/GraemeRocher_HowToBuildTwitterIn40minsUsingGrails.pdf)

      Finalizada la presentación y usando SpringSource Tool Suite en su portátil, nos muestra un caso practico para enseñarnos que Grails es realmente Spring y que la capa web de Grails es Spring MVC. Para ello, crea una aplicación de prueba desde cero, añade en un controller el applicationContext de Spring implementando la interfaz ApplicationContextAware y accede con este contexto a diferentes beans de Spring desde Grails, como un DataSource, el SessionFactory de Hibernate, etc. Después, para demostrar que Gorm es Hibernate, crea un clase de dominio y la guarda desde la sesión actual del sessionFactory de Spring y con el método dinámico save() de Gorm, con idénticos resultados.

      La siguiente ponencia, de Sergi Almar, nos cuenta las ventajas de utilizar la capa web de Spring 3.0, explicando como es posible programar vistas completamente diferentes, como XML, JSON o HTML con el mismo controlador para soportar, por ejemplo, peticiones Rest y Ajax reutilizando código.

      Paramos a tomar un cafe o zumo, cortesía de los sponsors, y seguimos las ponencias. Ahora entran Nacho Brito y Alvaro Sanchez-Mariscal, donde Alvaro nos explica las bondades de la plataforma Grails y anima a los dudosos y escépticos a dar el paso a probarla. Para ello utiliza una gran dosis de humor y auto-crítica, recordándonos lo “felices” que éramos con Struts 1, mapeando las acciones en interminables xml y que ahora es posible hacer exactamente lo mismo y más, sin tocar ni un xml. Después, Nacho Brito nos cuenta como novedad el nuevo campus virtual semi-presencial de escuela de groovy y ofrece una oferta de descuento del 50% para los matriculados ese día. Una interesante manera de hacer un curso de Groovy y Grails desde casa con material de estudio y tests de mano de los creadores de escuela de Groovy y de el libro manual de desarrollo web con Groovy. Finaliza la ponencia con Juanfer Blasco, responsable de Arquitectura y Plataformas del Dpto. De Tecnologías de la Información del Ayuntamiento de Vitoria-Gasteiz, contando un caso de éxito de formación e implantación de Groovy y Grails gracias a Escuela de Groovy.

      La siguiente ponencia es de Joris Kuipers, donde nos explica OSGi, un nuevo sistema para desplegar modularmente nuestras aplicaciones y evitar problemas de dependencias o de reinicios durante los despliegues. Con un contenedor OSGi, ya no desplegamos ears o wars de manera monolítica en un sistema de classloaders jerárquico, sino que desplegamos jars que exponen beans en un sistema de classloaders en forma de grafo, donde se exportan e importan servicios. El tiempo apremia y dado que se arrastran algunos retrasos en todas las ponencias, Joris tiene que acabar deprisa su exposición con una demo donde despliega diferentes servicios en caliente. Personalmente no conocía OSGi, y la demo me deja impresionado y con ganas de utilizarlo en futuros proyectos.

      La última ponencia es de los creadores de Jobsket a los que ya conocía, sin saberlo, de twitter: Martín Pérez, Jordi Monné y Dani Latorre. Nos explican un caso de éxito real de implantación de Grails en su proyecto Jobsket y nos cuentan, con sinceridad, las cosas buenas de Grails pero también las malas. Muchas de ellas reconocen que ahora han sido mejoradas o arregladas (como el soporte de plugins, que cuando empezaron no funcionaban muy bien), pero eso no quita para que también reconozcan que el uso de Grails, en el fondo, ha merecido la pena y ha mejorado su productividad. El código de su proyecto es 70% Java y 30% Grails: con unos 350 gsp, el principal uso de Grails es para la capa de presentación. Para el resto de código, como el acceso a diferentes bases de datos y los crawlers para recolectar información, utilizan Java, donde se sienten más cómodos y aprovechan código anterior que ya tenían realizado. Jobsket es un portal de empleo donde su principal punto fuerte es el análisis de curriculums para empresas, realizado con Lucene, y la recolección sistemática de ofertas de empleo en otros portales para calcular la valoración de sus curriculums a partir de los sueldos ofertados.

      No conocía Jobsket, así que he entrado y me he registrado ayer mismo al volver a casa, y me ha sorprendido algunas cosas: que es capaz de decirte que empleos o provincias tienen los sueldos más altos (y bajos) y sus variaciones diarias. Como si de la bolsa se tratara, podemos entrar todos los días y ver la evolución del mercado. Y todo gracias a su sistema de crawlers que están constantemente recolectando información. Una imagen vale más que mil palabras: http://www.jobsket.es/trabajos-de-tecnologias-de-la-informacion

      Hora de comer, dada la cantidad de gente que hay, me voy con Roberto Gil, Jose Vicente Carretero, Carlo Scarioni y Pablo Pazos haciendo una comida ligera en el centro de Boadilla (picadillo de chorizo, torreznos, carcamusa y presa de ibérico…, no te digo “ná”)

      Continuamos con las ponencias, ahora le toca el turno a Federico Caro de Paradigma Tecnológico, donde nos habla sobre Spring Security 3.0 de una manera, primero teórica, y después práctica, bastante interesantes.

      Después continúa Juan José Martín, que nos cuenta como Spring Roo nos ayuda a crear la estructura básica necesaria de archivos y configuración para empezar un proyecto con Spring. No conocía Roo, así que es una grata sorpresa para mí que existan este tipo de herramientas que te generan el código y el esqueleto básico para arrancar una aplicación. Roo es una shell inteligente: es decir, sabe en que estado se encuentra tu proyecto y te sugiere cual es el siguiente paso que debes dar, con autocompletado de parámetros obligatorios y mostrando después los opcionales.

      Siguiente ponencia, espectacular, de la mano de Tomas Lin, donde nos muestra como integrar aplicaciones ricas de escritorio con Flex/Air con Grails. Para ello, primero nos enseña como crear scaffoldings de nuestras entidades (es decir, crud: altas, bajas, borrados y modificaciones) usando un cliente flash incrustado en html con flex. El resultado final es un crud mucho más vistoso y usable que el generado por Grails con html puro, gracias al plugin de Grails Flex Scaffolding. También nos muestra la clara integración que existe entre todas las herramientas de Adobe, como Photoshop y Catalyst, con Flex Builder, un entorno de desarrollo basado en Eclipse para crear aplicaciones ricas. Con Flex Builder, conecta varios combos que se actualizan con un servicio web creado con Grails y XFire. Tomas Lin está haciendo un libro sobre Grails y Flex que se puede leer aquí: http://flexongrails.com

      Un cafe rápido, donde puedo conocer y hablar con los creadores de Jobsket, unos auténticos emprendedores y ejemplo a seguir de como es posible vivir con talento y creando una aplicación innovadora como la suya.

      Finaliza el día con dos charlas, por un lado Groeme Rocher presenta en una sala una introducción a Groovy y Grails, y por otro, Joris Kruipers presenta cloud para simples mortales. No puedo hablar de la ponencia de Groeme porque no asistí, pero no dudo que escuchar una introducción sobre Grails de su propio creador, sea la mejor manera de empezar a con Groovy y Grails.

      La ponencia de Joris Kruiper es muy esclarecedora. Empieza con una presentación donde explica los diferentes sistemas de cloud: Saas, Paas, IaaS, después muestra los diferentes y principales proveedores de cloudcomputing actuales, entre ellos Amazon Web Services (como IaaS), CloudFoundry (con un modelo mixto entre IaaS y PaaS), y Google App Engine (con un claro modelo de PaaS). Para acabar, nos hace dos demostraciones en vivo: la primera, sobre como crear una aplicación en Grails y desplegarla en CloudFoundry desde la línea de comandos con el plugin de Cloud Foundry para Grails. Y la última, la creación y despliegue de una aplicación Grails en Google App Engine. La conclusión final que nos ofrece es que el mejor sistema de cloud computing es el de Amazon, siempre que asumamos que debemos ser nosotros los encargardos de la instalación y despliegue de todos sus componentes. Y que Google App Engine es una buena manera de empezar, ya que es gratuito para las primeras 10 aplicaciones, pero a cambio debemos cambiar nuestro manera de programar las aplicaciones, ya que Google App Engine no soporta Gorm, solo JPA, y no permite hacer joins en base de datos o acceder al sistema de archivos, entre otras muchas cosas (más información en el blog de Tomas Lin). Para acabar, Joris Kruiper nos ofrece a todos los asistentes cuentas de prueba para CloudFoundry, donde las primeras 48 horas de “cloud” son gratuitas. También nos recuerda que, durante estas 48 horas de prueba, apaguemos el servidor cuando no lo utilicemos para que no se consuman a los dos días, y que nos duren mucho más.
      Durante la ronda de preguntas, Tomas Lin nos explica que Google App Engine es un fantástico sistema para manipular y servir imágenes.

      Mi conclusión final es que fue un gran evento con grandes ponentes, centrado en tecnologías punteras como Spring y Grails, y donde se puede conocer gente y aprender cosas nuevas de mano de primeras figuras del panorama tecnológico actual. Sinceramente, mi enhorabuena a Javahispano y Springsource: espero que se repita todos los años.

      Más información:

      Popularity: 1% [?]

      Un generador de passwords en grails

        Publicado el Wednesday 17 de February de 2010. | 2 comentarios
        Categoría: Programación y diseño | Tags: ,

        A raíz del post en wwhatsnew donde se listan diferentes aplicaciones web para generar passwords seguras, he decidido crear un sencillo servicio de Grails que genera passwords. En DATA he quitado los números 1 y 0, y las letras L minúscula, I mayúscula y las dos oes, así se evitan confusiones del tipo “eso es una o mayúscula o un cero?”, aunque se pueden volver a añadir. La proporción de símbolos, números y letras es de 25%/25% y 50%, respectivamente. El código es autoexplicativo.

        class PasswordGeneratorService {
        
            int DEFAULT_SIZE = 8
            Random rnd = new Random()
            String DATA =
                '!$%&().?=/*+!$%&().?=/*+'+
                '234567892345678923456789'+
                'abcdefghijkmnpqrstuvwxyz'+
                'ABCDEFGHJKLMNPQRSTUVWXYZ'
        
            String generateNew() {
                return generateNew(DEFAULT_SIZE)
            }
        
            String generateNew(int size) {
                StringBuffer result = new StringBuffer()
        
                size.times {
                    result << DATA[rnd.nextInt(DATA.length())]
                }
        
                return result.toString()
            }
        }

        En alt1040 han creado un interesante post sobre como crear contraseñas seguras.

        Popularity: 1% [?]

        Flex y Adobe Air

          Publicado el Sunday 14 de February de 2010. | 1 comentario
          Categoría: Pensamientos informaticos, Programación y diseño | Tags: ,

          Para mí, Flex es la solución ideal para que un programador (sobre todo de Java) pueda hacer un Flash sin tener que pelearse con la propia herramienta de Flash. ¿Quién no ha querido alguna vez hacer un flash para una página con alguna animación o con un formulario o con lo que sea, y le ha dado una pereza máxima ponerse a aprender como utilizar Adobe Flash CS4? Para empezar es de pago, y no es barata, y para acabar es un sistema de desarrollo al que los programadores normales no estamos acostumbrados: se trabaja con un timeline, con escenas, con capas, gráficos y sprites, pinceles, efectos: herramientas que los diseñadores usan día a día, pero que nosotros, programadores que trabajamos con un IDE, no solemos utilizar. De todas formas, Adobe Flash CS4 también permite programar usando ActionScript por supuesto, pero siempre tendrás que usar la herramienta Adobe Flash para programar este código y generar el swf de flash final.

          Sin embargo, con Flex, trabajas con Flex Builder (un plugin para Eclipse, de pago), o con IntelliJ o Netbeans o con el bloc de notas. Tienes una estructura de clases y paquetes como en Java, y tienes tus ventanas y vistas como ficheros .mxml, que bien pueden recordarte a un JSP. Así que el entorno, para nosotros los programadores, es mucho más amigable desde el principio. Además, puedes generar tu fichero swf de flash y compilar tus clases y mxml desde la línea de comandos o con Ant, gracias a su SDK libre, así que incluso el uso de IDE es opcional (aunque altamente recomendado).

          Para rematar, con Flex puedes, además, crear aplicaciones ricas de escritorio con Adobe Air. Estas aplicaciones son multiplataforma (corren en Linux, Mac y Windows) y su interfaz visual es muy muy buena. Un ejemplo de las posibilidades que tiene Flex (y por lo tanto Air) lo puedes ver en el Tour de Flex. Y un gran ejemplo sobre aplicación desarrollada con Adobe Air que es ampliamente utilizada es Tweetdeck, entre muchas otras.

          Personalmente, estoy muy contento con los resultados de Adobe Air. Por un lado, ActionScript 3 (el lenguaje utilizado en Flash, Flex y Air) es muy sencillo de utilizar y muy rápido de aprender para un programador Java (recuerda mucho a Java y Javascript). Es orientado a objetos (herencia) y eventos de manera nativa, mezcla tipado fuerte con tipado débil, tiene reflection, puedes guardar un método en una variable y ejecutarlo cuando quieras (como en Javascript), puedes acceder a cualquier atributo de un objeto como si fuera un array o mapa (¡acceso dinámico estilo Groovy!) y muchas cosillas más que lo hacen muy interesante. Y por otro, toda la jerarquía de componentes visuales es muy completa y está muy bien pensada. Parece como si los creadores de Flex hubieran cogido todos los componentes de DOM de HTML, su api de acceso de Javascript y Swing, le hubieran mezclado todo, quitado lo malo y dejado solo lo bueno.

          Mi conclusión es que Flex es una plataforma de desarrollo muy rápida con resultados muy efectivos, que nos permite crear Flash o aplicaciones de escritorio de la misma manera (y multiplataforma), con un lenguaje, Action Script, que posee una curva de aprendizaje muy suave para programadores Java (y para cualquier programador, me atrevería a decir) y sin cambiar nuestro IDE. Y además, posee una gran documentación y tutoriales ¿Qué más se puede pedir?

          Popularity: 1% [?]

          Debian, Apache 2 y Tomcat 6 usando múltiples dominios, partes 3 y 4

            Publicado el Sunday 31 de January de 2010. | 5 comentarios
            Categoría: Tutorial | Tags: , , , , , , ,

            Continuación del tutorial iniciado hace un par de semanas en este mismo blog en: Debian, Apache 2 y Tomcat 6 usando múltiples dominios, parte 1 y 2 (de 4)

            Parte 3: Configuración de software

            Configurando Apache2 para que funcione con varios dominios (virtual host)

            Aunque estemos trabajando inicialmente con una máquina virtual y tenga poco sentido tener varios dominios, debemos pensar que es solo un lugar de entrenamiento antes de hacer la instalación en un hosting real accesible desde internet. Lo normal es que queramos instalar varias aplicaciones, y que cada una de ellas sea accesible desde un dominio distinto. Vamos a suponer, por ejemplo, que hemos comprado los siguientes dominios: floristeria.com y guerraespacial.com. Estos dos dominios apuntan al mismo servidor, pero cada uno de ellos deberá tener su propia carpeta de Apache2 con sus contenidos estáticos (html, php, imagenes, etc) y su aplicación Tomcat con un war que desplegar.

            Primero vamos a hacer que Apache2 muestre un contenido distinto en función del dominio de entrada que se haya utilizado.

            Inicialmente, apache2 solo funciona con un dominio, o más bien, con cualquier dominio y siempre muestra el mismo contenido, lo que haya en la carpeta /var/www. Si vamos a esta carpeta, veremos un simple html con la famosa frase “It works!”.

            La configuración de apache2 está en /etc/apache2. Nos movemos a esta carpeta y hacemos un ls, y veremos algo así:

            debian:/etc/apache2# ls -l
            total 40
            -rw-r--r-- 1 root root 10104 jul 14 22:00 apache2.conf
            drwxr-xr-x 2 root root  4096 oct 23 21:16 conf.d
            -rw-r--r-- 1 root root   378 jul 14 22:00 envvars
            -rw-r--r-- 1 root root     0 oct 23 20:40 httpd.conf
            drwxr-xr-x 2 root root  4096 oct 23 20:40 mods-available
            drwxr-xr-x 2 root root  4096 oct 23 20:40 mods-enabled
            -rw-r--r-- 1 root root   513 jul 14 22:00 ports.conf
            drwxr-xr-x 2 root root  4096 oct 23 20:40 sites-available
            drwxr-xr-x 2 root root  4096 oct 23 20:40 sites-enabled

            En sites-available es donde se definen todos los sites que existen en la máquina y en sites-enabled es donde están todos los sites que están realmente funcionando ahora mismo. La idea es crear un site por cada dominio en sites-available, y después enlazar dicho site en sites-enabled para habilitarlo. Si quisiéramos deshabilitar temporalmente un site, lo que hacemos es moverlo de sites-enabled a sites-availables sin necesidad de borrarlo. Existen una serie de comandos que nos ayudan mover los sites de sites-enabled a sites-available, por lo que no es necesario hacerlo a mano (aunque podríamos). Estos comandos son:

            a2ensite nombredelsiteahabilitar
            a2dissite nombredelsiteadeshabilitar
            

            Más información en: http://www.debian-administration.org/articles/207

            (Leer más…)

            Popularity: 1% [?]

            Conocimiento vs tiempo

              Publicado el Friday 22 de January de 2010. | 3 comentarios
              Categoría: Noticias | Tags:

              Popularity: 1% [?]

              Debian, Apache 2 y Tomcat 6 usando múltiples dominios, parte 1 y 2 (de 4)

                Publicado el Monday 4 de January de 2010. | 4 comentarios
                Categoría: Tutorial | Tags: , , , , , , , ,

                Presentación

                Hace ya bastante tiempo que administro varias máquinas Linux con la misma configuración: Debian, Apache2, Tomcat 6,  MySql y varios dominios con virtual host. Como casi todo el mundo, tengo en varios sitios apuntado desde direcciones con artículos sobre como instalar algunas cosas, comandos más útiles, hasta scripts típicos que siempre utilizo. Como a veces pasa mucho tiempo hasta que vuelvo a tocar o a instalar un nuevo entorno, siempre tengo que tirar de internet buscando tutoriales o guías, así que, harto de leer siempre la información de otros para hacer siempre las mismas tareas simples (instalar, configurar, parar y arrancar), he decidido crear mi propia guía donde reúna toda esa información que siempre utilizo, de una manera que pudiera leerse como un tutorial, con pasos y explicando las cosas con detalle.

                El hecho de escribir este tutorial me sirve a mí mismo para afianzar mis propios conocimientos, además de poder leerlo cuando quiera sin necesidad de buscar en internet casi todas las cosas. Para que el tutorial lo pudiese leer y practicar cualquiera sin necesidad de usar una máquina real, lo he adaptado a una máquina virtual en Virtual Box. Además, le he dado formato, lo he corregido y lo he probado (es decir, cuando he acabado de hacerlo, lo he seguido al pie de la letra de principio a fin). Y ahora lo comparto con quien quiera que le pueda interesar. Como es un poco largo, lo publicaré en dos posts, uno ahora y otro la semana que viene. ¡Espero que le sea útil a alguien!

                Introducción

                El objetivo del tutorial es explicar como hacer una instalación y configuración de un servidor Linux con Debian 5, MySql, Apache 2 y Tomcat 6 desde cero. Para hacerlo más práctico y parecido a una posible configuración real, vamos a suponer los siguientes puntos:

                • Que tenemos dos dominios ficticios llamados guerraespacial.com y floristeria.com.
                • Que tenemos dos aplicaciones web java (war), una para cada dominio.
                • Que queremos acceder a cada aplicación a través de su propio dominio.
                • Que estas aplicaciones usan MySql, y así que para administrar la base de datos usaremos phpMyAdmin, por lo que necesitaremos Apache con php5.
                • Que queremos usar Apache 2 para servir contenidos estáticos (css, javascript, imágenes…) y como frontal para balancear Tomcat 6
                • Y que queremos darle un mínimo de seguridad al sistema.

                La instalación de Debian la haremos en una máquina virtual creada con Virtual Box. Es decir, en vez de utilizar un servidor real (de un hosting dedicado que hayamos contratado o un servidor de la oficina, por ejemplo), utilizaremos Virtual Box para crear una máquina ficticia en la que instalaremos Debian 5. De esta manera conseguiremos aprender a realizar todo el proceso de instalación sin necesidad de tener acceso real a un servidor, lo que nos ayuda a practicar de una manera mucho más segura, pues si se comenten errores en una máquina virtual, no pasa absolutamente nada. Además, al usar Virtual Box como software de virtualización, el único requisito para seguir el tutorial es tener Windows, Linux o Mac, pues funciona en todos estos sistemas operativos y, además, es gratuito y de código abierto (no hay excusas)

                El tutorial se compone de las siguientes partes:

                Parte 1: Creación de una máquina virtual Linux con Virtual Box e instalación de Debian 5

                Descarga de Virtual Box y Debain 5
                Creación de máquina virtual.
                Instalación de Debian 5.0 (lenny) en la máquina virtual.
                Apertura de puertos http y ssh en Virtual Box con nat.
                Instalación de ssh.
                Configuración de dominios en el dns local (etc/host) para que apunten a la máquina virtual

                Parte 2: Instalación de software
                Actualización del sistema. Instalación de Apache 2, MySql, phpMyAdmin, JDK6 y Tomcat 6 en Debian 5.

                Parte 3: Configuración de software

                Configurando Apache2 para que funcione con varios dominios (virtual hosts)
                Configurando Tomcat 6 para que arranque automáticamente (scripts)
                Configurando un host de Tomcat 6 por dominio (en config.xml)
                Conectando Apache a Tomcat 6 (con mod_proxy)

                Parte 4: Seguridad

                Bloqueando accesos inseguros a phpMyAdmin
                Protegiendo con password realm el virtual host por defecto

                Se puede hacer el tutorial sin Virtual Box en una máquina real, instalando Debian 5 desde cero tambien, o desde un hosting (dedicado o VPS) mientras tengamos acceso completo al servidor. En este caso, deberíamos empezar por la parte 2, ignorando la parte 1 que trata sobre la creación de la máquina virtual con Virtual Box. Además, tener en cuenta que se deben usar siempre los puertos reales del servidor, y no los que se han mapeado en Virtual Box.
                (Leer más…)

                Popularity: 1% [?]

                La megacorporación, el nuevo villano.

                  Publicado el Wednesday 30 de December de 2009. | 10 comentarios
                  Categoría: Economía, Mundo | Tags: , , ,

                  El nuevo villano del cine se llama megacorporación: grandes multinacionales, gigantes y poderosas, que, de una manera anónima y sin escrúpulo alguno, persiguen un beneficio económico con medios abusivos y/o dudosamente éticos.

                  En Moon, una gran empresa explota un yacimiento casi inagotable de Helio 3 en la cara oculta de la luna. Para ello, envía a un único operador cada tres años a una base privada en este satélite para encargarse de controlar, día a día y en solitario, la recolección del Helio 3 y enviarlo a la tierra. Durante la película se descubrirá poco a poco que la empresa contratista utiliza algunas técnicas de dudosa moralidad para llevar a cabo esta explotación minera. La película es una clara lucha que el protagonista libra con esta multinacional, un villano poderoso que se oculta tras un par de empresarios en una vídeo conferencia.

                  Multinacionales, unidas, jamás serán vencidas

                  En District 9, la MNU (no os perdáis la página Multi National United, con ofertas de trabajo como dentistas para alienígenas), es la responsable de la gestión del distrito 9, un asentamiento donde se hacinan los extraterrestres cuya nave ha quedado varada en la tierra y se encuentran atrapados en Johannesburgo. La MNU mezcla argucias legales y papeleos con la producción en masa de armamento militar para obtener sus fines, y posee un cuerpo paramilitar privado que no duda en abrir fuego contra los aliens si lo cree necesario. De nuevo, el gran villano de la película toma forma de megacorporación, una multinacional que intenta vender una imagen humana y respetuosa con los derechos civiles en el trato con los extraterrestres, pero que esconde una doble intención bastante inhumana.

                  Y en Avatar, una empresa energética es la responsable de obtener un mineral de grandísimo valor en el mercado que se esconde en el planeta Pandora. Para ello utilizará un increíble ejercito privado de mercenarios que tampoco dudará en usar la fuerza bruta y la alta tecnología para exterminar cualquier “amenaza” que se interponga para obtener dicho mineral. Hay un momento en que la devastación que produce la megacorporación es tal, que los propios responsables de la misma tienen que apartar la mirada de los monitores donde visionan sus operaciones.

                  La aversión del espectador hacia una megacorporación es siempre mayor que hacia un simple villano: la megacorporación es anónima y gigante, por lo que la sensación de impotencia al no poder luchar individualmente con ella incrementa la rabia hacia la misma, definiendo su papel de villano en la película. Por supuesto, la megacorporación comete actos reprochables rozando incluso la criminalidad (o sobrepasándola con creces) y su único móvil es el lucro, lo que irrita al espectador cuando contempla sus acciones, acostumbrado a villanos individuales cuyo móvil suele ser más humano, como la venganza, una psicosis o son, simplemente, malignos. Y lo mejor es que la sensación durante la película de que ese tipo de megacorporaciones pueden llegar a existir -o que existen-, alimenta un miedo real en el espectador, mezcla entre desamparo y debilidad, que no es capaz de crear un villano normal.

                  Con el nuevo ED209 las acciones de la OCP se dispararán

                  Y son solo tres ejemplos de tres películas recientes de este año, pero se me ocurren algunas más, como la famosa OCP (Omni Consumer Products), encargada de fabricar armamento militar (entro otras cosas) y de diseñar el nuevo sustituto de los policías, Robocop, utilizando para ello los restos del cuerpo de un agente caído en servicio y titanio a partes iguales. Otras películas explotan el concepto sin llegar a criminalizarlo, como Cypher, donde dos compañías luchan por espiarse secretos entre sí, usando técnicas poco éticas para la contratación de agentes dobles. O incluso Network, donde una gran compañía de televisión hace cuanto está en su mano para aumentar la audiencia.

                  Las megacorporaciones incluso han sido fuente de inspiración para crear películas pseudo-documentales, casi de culto, como Zeitgeist the movie y Zeitgeist addendum (ojo al visionarlas, no todo lo que dicen es verdad, conviene siempre contrastar la información con otras fuentes). Estas películas cuentan historias increíbles sobre conspiraciones que hacen grandes empresas mezcladas con el gobierno estadounidense, cuyo único objetivo es crear guerras y saquear los recursos naturales de los países pobres (con la excusa de combatir el terrorismo) para controlar el mundo, muy en la línea del concepto de megacorporación. Estos documentales y algunos otros (como el de Money as debt) llegan incluso a contar que el dinero y el crédito es un invento que solo sirve para someter a la población mundial a base de deuda. Aunque si quieres saber la verdad que esconden estos documentales, visita esta página donde un economista rebate, punto por punto, todas las contradicciones que cuentan sobre la creación artificial de dinero gracias al crédito. De todas formas, el montaje de estos vídeos fomenta el mismo miedo a las corporaciones que cualquiera de las anteriores películas, o incluso más, al estar basado, supuestamente, en hechos reales. Por cierto, el libro “mágico” donde explica como la reserva federal (y todos los bancos del mundo), multiplican el dinero en cada crédito lo puedes descargar aquí: Modern Money Mechanics. Bola extra: fragmento de la película “El concurstante” donde explica como crear dinero a partir del crédito.

                  La MNU, trabajando por mantener la seguridad en el distrito 9

                  Atraído por el concepto de megacorporación y buscando un poquito más en la Wikipedia, me encuentro con que este termino fue popularizado por el escritor de ciberpunk Willian Gibson, haciendo referencia un holding de grandes (mega) empresas que controlan, rozando el monopolio, múltiples mercados y cuya principal característica es que son tan poderosas que traspasan la legalidad. Poseen su propio ejercito privado y debido a su gran tamaño, tienen incluso su propio territorio soberano. Pero es que resulta que ¡las megacorporaciones existen! Por ejemplo, pese a que no posee su propio ejercito, Walt Disney es una megacorporación. Y aunque no comete ninguna ilegalidad que sepamos (puede que por la naturaleza de su negocio, la creación audiovisual de entretenimiento o porque, simplemente, son buenos), si que posee un territorio con sus propias leyes de administración y construcción: el Reedy Creek Improvement District. En este territorio, Walt Disney construye y controla sus propios edificios e instalaciones, normalmente responsabilidad del gobierno, como centrales electricas o cuerpos de bomberos; y solo permite la entrada a dicho distrito a empleados de la compañía. Es decir, una empresa que posee su propio territorio soberano.

                  Su propia moneda

                  Y su bandera

                  Un ejemplo histórico fue la compañía Holandesa de las Indias Orientales, una empresa con poderes cuasi-gubernamentales y con capacidad para declarar guerras, negociar tratados, acuñar su propia moneda y establecer colonias. Pero no temas porque ya no existe: fue fundada en 1602 por los países bajos y finalizó en el 1800, la época del imperialismo y la expansión internacional, donde el concepto de monopolio todavía no estaba mal visto. En esa época los países se expandían mediante colonias y delegaban su control en empresas privadas, las megacorporaciones de la época, dándoles poderes totales, como la compañía Británica de las Indias Orientales y otras tantas. La mayoría operaron durante casi dos siglos y reportaron dividendos anuales de hasta el 18%, pero acabaron en bancarrota ahogadas en deudas.

                  En resumen, si existen o no las megacorporaciones tal y como nos las cuentan en el cine o en los documentales, nunca lo sabremos. Las leyes anti monopolio nos protegen de gigantes informáticos como Microsoft, Google o Facebook pero nada más: no sabemos que hacen ni a quien venden nuestros datos (aquí va un vídeo conspiranoico sobre la cara oculta de Facebook). Y poco sabemos de las grandes empresas armamentísticas y energéticas (1991, los Irakies se retiran de Kwait y prenden fuego a los pozos de petroleo), seguramente por interés directo de los gobiernos que hacen uso de ellas, como la empresa de seguridad Blackwater USA, un ejercito privado al servicio de los estados unidos. Y es que, que existan tantas empresas privadas que se beneficien de los conflictos bélicos siempre da un poco de miedito: si se acabaran las guerras tendrían que cerrar, así que en el fondo no les interesa la paz ¿no? Megacorporaciones, ¿conoces alguna o alguna película sobre ellas?

                  Popularity: 1% [?]

                  Especial Mario Bros

                    Publicado el Thursday 24 de December de 2009. | 1 comentario
                    Categoría: Internet/Geek, Juegos | Tags: ,

                    Mario Bros art

                    El fontanero de Nintendo es y seguirá siendo fuente de inspiración para, casi, cualquier cosa. Empezaré este especial con una serie de fotos e ilustraciones que he ido recopilando en mi fotolog:

                    Curiosidades sobre Mario

                    Continuamos (vía Secret Geek) con la traducción de una entrevista a Satoru Iwata, CEO de Nintendo, donde explica algunas curiosidades sobre el origen de Mario, Yoshi y sus enemigos (Koopas Troopas y Goombas), su aspecto, sus movimientos y ataques (el salto). Es curioso que la mayoría de razones para la creación del universo Mario fueran… ¡limitaciones técnicas de la época! y es que Mario tiene mucho mucho tiempo ya, aunque no parece que se vaya a acabar pronto, si no todo lo contrario. Un pequeño fragmento de la entrevista:

                    Miyamoto: El Mario original era una imagen de 16×16 píxeles. (…) Me dije “Vale, vamos a dibujar algo que de verdad parezca la cara de una persona” Así que dibujé los ojos, la nariz, la boca y… (…) no había suficientes (píxeles). Antes de que te dieras cuenta ya habías usado 8×8 píxeles. Pero si dibujas una nariz y debajo un bigote, (…) no necesitas dibujar una boca, lo que es una gran diferencia. Sólo necesitas un píxel para el mentón, y si dibujas dos píxeles verticales, ya tienes los ojos (…) Además, como no puedes dibujar todo el pelo, si le haces llevar una gorra, puedes reducir el pelo a sólo un par de píxeles.

                    Lunar Magic

                    Y para acabar, hablaré sobre un editor de niveles de Super Mario World: Lunar Magic. Solo diré que gracias a este programa, no solo es posible modificar los niveles originales de este juego, sino que podemos crear nuevos mundos con nuevos niveles conectados entre sí para jugarlos. No hay límite, podemos añadir de todo, cambiar colores, gráficos, enemigos, niveles, salidas secretas. Y todo para crear nuestros propios niveles y jugarlos… o incluso ¡crear animaciones o vídeos musicales!

                    Veamos algunos ejemplos realizados con Lunar Magic.

                    Para empezar, tenemos la creación de un vídeo musical de la famosa canción “Don’t stop me now” de Queen realizado únicamente con los sonidos de Super Mario World. Para ello el autor ha realizado varios niveles que, reproducidos de la manera correcta, ejecutan los movimientos necesarios para generar, en tiempo real, los sonidos y notas de esta canción. Para ello fueron necesarios 4 videos y, supongo, muchas y muchas horas para sincronizar los resultados entre sí y con la canción original. Y todo gracias a Lunar Magic (vídeo visto en Punto Geek)

                    Después tenemos este otro vídeo, conocido a través de meneame y de PixFans, donde se muestra un nivel realmente complicado donde el jugador explota diferentes glitches. Un glitch no es más que un pequeño error de programación escondido en un juego que, tras descubrirlo, permite al jugador realizar acciones y trucos, como por ejemplo, llegar a un sitio inicialmente inaccesible, saltar más alto, etc. En este vídeo se muestra como explotar el glitch “Item Abuse”: utilizando objetos que Mario puede coger y lanzar, se realizan increíbles hazañas como lanzar sucesivas conchas de tortuga al aire para rebotar sobre ellas y acceder a cualquier sitio. Por supuesto, se requiere tanta habilidad para realizar y explotar dicho abuso o glitch en beneficio del jugador, que casi no es utilizada. Veamos el vídeo:

                    Pese a que en Pixfans no dicen nada, se sugiere que es un nivel real jugado por una persona con una habilidad casi extraordinaria. Pero nada más lejos de la realidad: es un nivel a medida creado con Lunar Magic y jugado con un TAS (Tool Assisted Speedrun): un programa que permite grabar y programar, a cámara super lenta y salvando en cada mínimo cambio de estado en el juego, los movimientos de un personaje de un juego, para después reproducirlos en tiempo real, dando la sensación de que son jugados por una persona con un increíble talento. Si estas lo suficientemente loco para intentarlo, puede descargar y probar este nivel imposible desde megaupload: http://www.megaupload.com/?d=7u0rjwk6

                    Con Lunar Magic podremos crear nuestras propias versiones de Super Mario World. Y lo que es mejor, compartir y jugar niveles creados por otros.

                    • Descarga Lunar Magic, el editor de niveles de Super Mario World. Requiere la versión 1.0 americana de Super Mario World.
                    • Pack con 100 roms modificadas de Super Mario World, listas para usar desde Lunar Magic o un emulador: Super Mario World pack en Rom Hustler. Incluye la versión 1.0 american de Super Mario World original: el nombre de la rom es Super Mario World (U) [!].smc
                    • Descarga el emulador de Super Nintentdo ZSNES de su página oficial (lo necesitarás para jugar tus propios niveles o los de otras personas).
                    • Comunidad de Super Mario World donde descargar niveles, gráficos, musicas, tutoriales y demás sobre Super Mario World: SMW Central.
                    • http://tasvideos.org web con vídeos generados con herramientas TAS con glitches explotados, explicados al detalle.
                    • Dos video-tutoriales sobre Lunar Magic para principiantes, en español: Parte 1 y Parte 2.
                    • Más tutoriales avanzados sobre Lunar Magic, en inglés (24 vídeos).

                    Popularity: 1% [?]

                    Loss leader y externalidades

                      Publicado el Monday 21 de December de 2009. | 1 comentario
                      Categoría: Economía | Tags:

                      Algunas cosas que he aprendido hoy leyendo blogs, como que cuando una empresa puede beneficiarse de la venta de un producto o servicio, aunque pierda dinero, se llama ser un Loss Leader. Borja Prieto lo explica mejor en su blog: El Bulli como loss leader. Y también que cuando las empresas no contabilizan el coste o beneficio de una actividad, es muy difícil hacerles cambiar si no tienen un interés directo en ello. A estos costes indirectos no computados se les llama externalidades de un mercado. “El Gurú” lo cuenta muy bien en makememinimal, donde habla sobre los nuevos bienes escasos, la propiedad intelectual (o la no propiedad) y las externalidades. Muy interesantes.

                      Popularity: 1% [?]