Ubuntu: Abrir una terminal desde cualquier carpeta

Lo sé, quizá sea algo muy básico para muchos pero no lo es para la mayoría. Si alguna vez has estado configurando alguna herramienta y estás en la necesidad de abrir una terminal desde la carpeta en el que te encuentras, puede ser algo engorroso tener que recorrer cada uno de los directorios hasta llegar al deseado. Para evitar esto y abrir una terminal desde donde te encuentres, prueba instalando el siguiente agregado de Nautilus con estos pasos:

Desde la terminal ejecuta lo siguiente:

sudo apt-get update
sudo apt-get install nautilus-open-terminal

El primer comando actualiza nuestro repositorio, el segundo lo instala. Si has tenido un problema referente a que el paquete no existe, te traigo la solución adecuada. Normalmente el repositorio apunta a un servidor local o más próximo y debemos cambiarlo por el servidor principal, para ello localiza el siguiente software ya pre-instaldo en tu distro:

Software Resources

Posteriormente asegúrate que tus opciones concuerden con la mías:

Software Resources Main Server

Con eso tendrás acceso al repositorio principal, repite los pasos de instalación anteriores y por fin podrás abrir una terminal desde cualquier directorio:

Open terminal

Quizá tengas que reiniciar Nautilus para ver los cambios aplicados usando este comando:

nautilus -q

Tutorial: Instalar Maven 3 en Ubuntu

Maven es una poderosa herramienta para gestionar proyectos en Java, parecido en su propósito a Ant aunque difiere en su implentación, normalmente es usado con Java, pero puede ser usado para otros lenguajes como Scala, Ruby, etc.

Este post lo escribo para los despistados en Ubuntu, anteriormente Maven venía en los repositorios y era fácil su instalación, hasta donde sé con la versión 12 en adelante es necesario agregarlo a mano, por lo que repasemos los siguientes escenarios:

Escenario 1:

En el mejor de los casos tu versión de Ubuntu viene con Maven en el repositorio, para averiguarlo ejecuta la instalación siguiendo estos pasos:

apt-cache search maven

Primero buscamos en el repositorio los paquetes necesarios y después intentamos instalar:

sudo apt-get install maven

Escenario 2:

Si al intentar el primer escenario no pudiste instalarlo entonces tendremos que hacerlo de manera manual, empezando con el siguiente comando:

sudo -H gedit /etc/apt/sources.list

El comando abrirá en modo de edición la lista de recursos al cual debemos agregar las siguientes líneas:

## Adding Maven3 to Ubuntu
deb http://ppa.launchpad.net/natecarlson/maven3/ubuntu precise main
deb-src http://ppa.launchpad.net/natecarlson/maven3/ubuntu precise main

Guarda y cierra el archivo, luego ejecuta este comando:

sudo apt-get update && sudo apt-get install maven3

No debería haber ningún problema, la instalación debe ser rápida, por último hagamos un enlace para tener Maven listo:

sudo ln -s /usr/share/maven3/bin/mvn /usr/bin/mvn

Eso debe ser suficiente; puedes verificar la versión ejecutando lo siguiente:

mvn -version

Recuerda tener siempre un tiempo para leer la documentación oficial en Apache Maven.

 

 

Honda: The Power of Dreams. Impresionante publicidad por sus 65 años.

Una de las compañías que más admiro ha sido y será siempre Honda, desde la tecnología detrás de  sus autos híbridos hasta sus constantes investigaciones en robótica con ASIMO.

Como casi todas las compañías japonesas, la mayoría de sus productos se destacan por una calidad y tecnología de primera categoría. Para celebrar sus 65 años de existencia y constante innovación, han creado el siguiente video promocional donde podemos ver en menos de dos min. lo que han logrado, sin duda un tributo a la gran labor de sus ingenieros:

 

 

Fuente: Dr. Oganlinski

Video: El cuerpo Humano y los efectos de la gravedad

El siguiente video lo encontré tan fascinante que quiero compartirlo con ustedes, en él se muestran a distintas personas saltando, lo que nos hace poder apreciar el efecto que la gravedad tiene sobre nosotros, todo esto en cámara lenta, para visualizarlo mejor son personas de cuerpo desnudo.

La razón de compartirlo es que quizá muchos no tengan muy en cuenta que nosotros estamos moldeados enteramente por la gravedad de la tierra, nuestras piernas, facciones y muslos responden a la fuerza de gravitación. En otras palabras, si viviéramos en Júpiter u otro planeta con fuerza gravitacionaria distinta, nuestros cuerpos hubieran evolucionado de forma totalmente diferente.


Maravilloso, ¿No creen?, actualmente estos videos en forma de galería se presentan Los Ángeles, California; más detalles en el interior del video. El tema me parece bastante interesante, quizá dedique un par de post a esto después.

Fuente: Boing Boing 

Asociar archivos Scala en Eclipse

Si estás interesado en entrar de lleno a programar en Scala es bueno que prepares totalmente tu ambiente de trabajo. En los tutoriales anteriores hemos trabajado directamente con editores de texto, ahora mostraré cómo asociar los documentos con terminación .scala con el IDE Eclipse, empezaremos agregando el plugin:


a ) Desde el menú princpipal buscamos Help -> Install New Software
b ) En la nueva ventana seleccionamos Add
c ) Agregamos cualquier nombre y en Location usamos esta direción:
http://download.scala-ide.org/sdk/e37/scala29/stable/site/
Si tenemos duda de la versión puedes consultarlo en el siguiente enlace.
d ) Selecionamos todo y continuamos en Next; la instalación empezará. Probablemente en algún punto se te muestre un Security Warning, sólo acéptalo.
e ) Se nos pedirá reinicar Eclipse.
f ) Cuando iniciemos de nuevo, tendremos que escoger algunas opciones de configuración, nos aseguramos de utilizar el recomendado “Use recommended default settings
Ahora ya podrás incluso selecionar una nueva perspectiva o crear projectos basados en Scala.

Usando Eclipse para programar Scala/Lift

Normalmente cuando empezamos a programar usamos un IDE como Eclipse, Netbeans u otro para desarrollar nuestras aplicaciones, en la mayoría de los casos compilamos y ejecutamos todo desde la misma herramienta, sin embargo existen otras alternativas que nos dan más poder sobre lo que estamos haciendo. Les mostraré cómo usar Eclipse para desarrollar nuestro proyecto en Scala/Lift con la leve diferencia que la compilación la seguiremos haciendo desde el SBT.

1.- Aunque existen inclusive versiones de Eclipse listas para Scala, esta vez dejaré la opción para que descarguen la versión que gusten desde la página oficial, si nunca has tocado este IDE puedes usar la versión Classic.

2.- Una vez instalado y ejecutado debemos modificar el archivo /project/plugins.sbt, ahí agregamos el plugin para Eclipse con el siguiente apartado justo al final:

resolvers += Classpaths.typesafeResolver

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.1.2")

El espacio en blanco entre las dos sentencias es necesario. Tenemos que compilar para ver los cambios:

./sbt
eclipse

Automáticamente se descargará el plugin, posteriormente creará los archivos necesarios para que Eclipse lea nuestra proyecto: .project y .classpath. Si queremos de igual manera descargar la documentación que nos apoye en el código, ejecutamos el siguiente comando:

eclipse with-source=true

Si deseas dejar esto permanente estonces debes agregar la siguiente propiedad al archivo build.sbt:

EclipseKeys.withSource := true

Lo anterior descargará toda la documentación necesaria, recuerda compilar de nuevo usando el comando eclipse para efectuar los cambios.
3.- Casi todo está listo, sólo falta configurar el Eclipse, para ello lo abrimos y generamos un nuevo proyecto:

a ) Desde el menú File -> Import -> Existing Projects into Workspace, aseguramos no selecionar “Copy projecs into workspace

Y eso es todo, ahora podrás modificar y recibir apoyo con la documentación desde el IDE, esto es bastante efectivo pues separamos la compilación del proyecto del editor, lo que nos da bastante control sobre todo lo que hagamos.

Puedes consultar el siguiente enlace si no estás seguro de la versión que necesitas del plugin.

Parte 2: Scala/Lift Hot Deployment – Compilar cambios sin reiniciar el servidor

En la primera parte hemos hablado un poco de cómo hacer un Hot Deployment, aunque ese proceso generaba otro problema puesto que reiniciaba el servidor. Ahora veremos un proceso en el cual podremos compilar al aire sin afectar nuestra actividad en la aplicación.

Para nuestro problema usaremos una librería, JRebel, pueden obtener una licencia gratuita desde el siguiente enlace, aunque es de paga pueden renovarla cada cierto tiempo sin pagar por ella, básicamente entra en la dirección mencionada y busca JRebel Free Trial, se te pedirán unos datos, al finalizar obtendras un key code, guárdarlo, lo usaremos en breve.

Una vez obtenida la licencia descárga la versión genérica desde aquí  después procede a descomprimirla; normalmente guardo el archivo en el directorio  raíz de mi proyecto: lib/zt/jrebel, posteriormente ejecuta el archivo jrebel-config.sh localizado en:  lib/zt/jrebel/bin

Puedes ejecutarlo desde comando o ejecutando el archivo directamente, eso hará que se lance el Wizard  de configuración:
1.- Primero escogemos myJRebel license
2.- Pegamos el código que obtuvimos desde el sitio.
3.- Finalizamos

Ahora debemos configurar nuestro SBT para notificarle que estamos usando JRebel como agente al iniciar, para ello modificamos nuestro script que se encuentra ubicado en la raíz de nuestro proyecto, el archivo sbt debe contener el siguiente código:

java -Drebel.log=true -Drebel.lift_plugin=true -noverify -javaagent:lib/zt/jrebel/jrebel.jar 
-Xmx1024M -Xss2M -XX:MaxPermSize=512m -XX:+CMSClassUnloadingEnabled -jar 
`dirname $0`/sbt-launch-0.12.1.jar "$@"

Observa que sólo estamos agregando la línea 1 donde indicamos usar JRebel desde la ubicación que hayamos escogido. Si has pagado por una licencia entonces puedes agregar el path al documento que te envíen con esta otra propiedad:

-Drebel.license=/path/to/jrebel.lic

Es hora de probar, inicia tu servidor como siempre. Si en dado caso recibieras un error como el siguiente no te alarmes:

Error opening zip file: /jrebel/jrebel.jar
Error occurred during initialization of VM
agent library failed to init: instrument

Significa que el path que hemos puesto en el parámetro -javaagent es incorrecto, o que bien la instalación no se llevó acabo, para saber si el proceso salió bien ahora podrás ver información de JRebel cuando se ejecuta la aplicación por primera vez, no sólo eso, por cada código modificado se te notificará la re-carga de la clase, por ejemplo:

[2013-03-14 10:00:20] JRebel: Reloading class 'project.appwen.HelloWorld'.

Desde este enlace encontrarás más errores conocidos. Si tienes alguna duda deja un comentario.

Actualización:

Parece ser que desde la última versión de JRebel la instalación se hace de manera diferente, el única cambio es que después de ejecutar el wizard los archivos jrebel.licjrebel.properties son creados en la ubicación /home/actualuser/.jrebel/, estos deben ser copiados a la misma dirección donde está el jar: lib/zt/jrebel/jrebel.jar si no hacemos esto al inicar el servidor mostrará el error de “NO LICENSE FOUND“.

Fuente: Lift, JRebel

Parte 1: Scala/Lift Hot Deployment – Compilar cambios sin reiniciar el servidor

Entre los temas que suelen salir a flote entre programadores sobre todo de la parte Web, es la necesidad de compilar el código con cada cambio que se hace, proceso que muchas veces puede variar de los pocos segundos a unos 20 min esto dependiento del tamaño de la aplicación.

Siempre ha habido un acalorado debate en cuanto a esto que en inglés se le conoce como Hot Deployment. Aunque estoy de acuerdo en es que una mala práctica, cuando se está desarrollando en modo pruebas es bastante útil pues nos hace salvar bastante tiempo, caso contrario cuando es llevado a producción.

Sin embargo la realidad hoy en día es que los sistemas crecen en forma exponenciañ y aplicaciones como Facebook, Twitter o cualquier aplicación o sistema que maneja gran cantidad de usuarios no puede darse el lujo de hacer apagar o reiniciar su servidor para una actualización.

Aquí es donde nacen lenguajes como Erlang o Scala. Permitan un Hot Deployment real sin necesidad de reiniciar la aplicación puesto que son sistemas distribuídos, me gustaría indagar un poco más en eso adelante en algún post, es un tema bastante interesante.

Voy a dividir este artículo en dos partes, en esta primera entrega mostraré cómo compilar con cada cambio que se haga a los archivos, sin necesidad de usar un IDE en especial, esto quiere decir que con hacer un simple cambio desde un editor genérico de texto a uno de los códigos de Scala se compilará de manera automática, aunque ejecutará la acción de recargar el contenedor web. La segunda entrega hablaremos de cómo realizar lo mismo sin recargar nuestra aplicación.

Nuestro servidor tiene un comando que hace todo por nosotros, pero debemos compilar nuestra aplicación con el comando que todos ya conocemos:

./sbt

Al hacerlo estamos entrando siempre al Simple Build Tools, que es un prompt de comandos para el servidor, estando ahí ejecutamos lo siguiente:

~; container:start; container:reload /

¿Y qué significa todo esto? el prefijo ‘~‘ le indica al SBT que compile los cambios, el punto y coma ‘;‘ sólo es una secuencia de comandos, que se traduce como: a cada cambio compila, reinicia y recarga el contenedor web. En general el comando estará atento a los cambios realizados sólo a los documentos en Scala al igual que cambios en el directorio “src/main/sources/“. Cabe aclarar que al ejecutar el comando entras en modo de escucha, por lo que quizá veas algo como lo siguiente:

Waiting for source changes... (press enter to interrupt)

Cada modificación se verá reflejada en la terminal, para salir de este modo basta con presionar la tecla enter. Para hacer pruebas está bien, sin embargo si planeas modificar muchos archivos puedes correr el riesgo de recibir el mensaje “java.lang.OutOfMemoryError: PermGen space” correspondiente a que la memoria está totalmente llena.

En el siguiente post veremos cómo evitar el reinicio del servidor y no tener un error de memoria.

 

Fuente: Lift Web

Ghost in the Shell está de vuelta en una precuela, Arise

812506-major_tachikomaNormalmente no hablaría de estos temas, pero en este caso lo vale mucho. Ghost in the Shell fue un animé que marcó mucho en mi vida por los temas tan complejos que maneja y es aquí donde entra este blog.

La serie narra la vida de Motoko Kusanagi, una agente que trabaja para el gobierno en la sección 9, encargada de espionaje y seguridad nacional. Nuestra protagonista es un cyborg con la más alta tecnología al más puro estilo cyberpunk, sin embargo a pesar de lo trillada que pueda ser la serie, maneja temas como la conciencia, la unión entre la máquina y el hombre entre otras cosas Para los que ya vieron la serie, el final con los Tachikomas es inolvidable, no quiero dar muchos detalles de eso, pero es altamente recomendable.

La serie gira entorno de Motoko, normalmente ella se cuestiona muchas cosas relacionadas a quién es, y si posee un Ghost (un alma), otros temas que maneja son la concienca colectiva, el yo interno, el libre albredío, la transmigración de la conciencia, la singularidad, etc. Es una serie que no deben dejar pasar, y ahora con la precuela se explican muchas cosas del origen de la Mayor Kusanagi (así se refieren a ella sus colegas), a continuación el trailer:

Si no entendiste mucho del japonés, no te preocupes, yo tampoco, pero en forma resumida esta nueva y sorpresiva entrega es una precuela de la serie, se centrarán mucho en los pensamientos de Motoko y todo lo que sucede antes de  convertirse en un Cyborg.

La serie original es creada por Masamune Shirow, y dirigida en su formato digital por Mamoru Oshii. Hasta donde sé, no sólo el director será el mismo, también todas la voces del staff original están de vuelta, así que si no has visto la serie completa es hora de darle una oportunidad.

 

Fuente: sitio oficial

Estructura de un proyecto en Scala/Lift

Ya hemos visto cómo crear un Proyecto Web con Scala/Lift, nos toca hablar un poco de cómo está compuesto en general la estructura de este. Al principio puede ser un poco complicado si no vienes de programar en contenedores web, así que revisemos un poco cuáles son las convenciones a respetar:

- webapp
  | build.sbt
  - project/
    | plugins.sbt
  - src/
    - main/
      - scala/
        - bootstrap/
          | Boot.scala
        - org/
          - mysystem/
            - webapp
              | <CÓDIGO SCALA>
      - webapp/
        | index.html
        | <RECURSOS>
        - WEB-INF/
          | web.xml
    - test/
      - scala/
        - org/
          - mysystem/
            - webapp/
              | <PRUEBAS>

El proyecto puede lucer más o menos como el de arriba, lo importante a notar son las dos carpetas principales para poner nuestro código, todo lo que sea recursos html, javascript o imágenes van en la línea 13 y todo lo que sea código en Scala va en la línea 16. ¿Quién decide esta estructura? Cuando construímos nuestra aplicación usando el comando “./sbt” que lee el archivo build.sbt, usando la propiedad:

organization := "org.mysystem.webapp"

Esta define el directorio raíz, observa cómo para los directorios obtenemos los siguients paths “scala/org/mysystem/webapp” tanto para el código como para las pruebas en la carpeta “test/scala“, si aún te quedan dudas puedes descargar un template vacío desde la siguiente dirección. 

Fuente: Lift Web