Quizás alguno se haya visto en la necesidad de ejecutar una aplicación por ejemplo en idioma inglés pero siendo el idioma del sistema operativo el español, pues la solución para este problema existe desde hace tiempo y ha sido resuelta por una aplicación llamada language switcher.
Esta aplicación además de ser gratuita, funciona a partir de sistemas OS X 10.5+ y su funcionamiento consiste en ejecutar cualquier aplicación en un idioma especifico de antemano seleccionado, así de simple es y así de bien lo hace. A mi particularmente me ha ayudado bastante, ya que necesite trabajar con una aplicación en diferentes idiomas. A continuación les dejo algunas imagenes.
Este post va dedicado a aquellas personas que al igual que yo tienen esa facultad “divina” de haber hecho desaparecer la lista de añadidas recientemente de itunes. Para todos ellos aquí les indico lo sencillo que es.
Ir a Archivo->Nueva lista de reproducción inteligente. ¿Sorprendidos? pues a mi si me sorprendió un poco que fuese una lista inteligente sencillamente me hacia a la idea que era una lista de reproducción normal y corriente y que alguna especie de batch la actualizara o algo así por el estilo.
Agregamos la primera regla, como lo indica la siguiente figura
Pulsamos el simbolo “+” ubicado a la derecha de la primera regla e insertamos la segunda regla reflejada en la imagen, luego pulsamos aceptar.
Llamamos a nuestra lista, “Añadidas recientemente”.
Listo ya tenemos nuestra lista de añadidas recientemente. Como vieron resulta mas sencillo de lo que podríamos imaginar y a su vez puede que a mas de uno le de un poco de curiosidad (gusanillo) y quiera crearse una nueva lista de reproducción inteligente o mas bien a nuestra lista de añadidas recientemente agregarle otra regla como por ejemplo que no sea un video.
Así que ya no se preocupen si de nuevo vuelve a desaparecer nuestra lista de reproducción 🙂
Voy a mostrarles a continuación un sencillo ejemplo de interacción y comunicación vía Serial con una placa Arduino (one). Tengo aproximadamente un mes jugando con mi arduino one y confirmo lo que me habían contado, “es sencillamente emocionante ver que haces encender y apagar un LED”, como me comento una amiga “es un juego para adultos”, no me queda mas que reirme y aceptar que en mi caso es así y disfruto del poco tiempo que he podido dedicarme a hacer ejemplos.
Ha sido de esta manera, haciendo ejemplos del libro Getting Started with Arduino y leyendo por internet que me nació el gusanillo (curiosidad) por hacer un sencillo ejemplo pero donde en vez de comunicar los lenguajes Processing y Arduino, lo hiciera usando Java, C o C++ (estos 2 últimos espero poder hacerlos y de ser posible publicarlos mas adelante). ¿Con qué finalidad? además de aprender, sencillamente poder gozar de las bondades y herramientas que nos ofrece el trabajar con los lenguajes anteriormente mencionados.
Ahora si vamos al grano, primero indicare los componentes utilizados:
1 Placa arduino one
1 bombillo LED
1 cable usb AM/BM (para cargar programa arduino)
La conexión es muy sencilla, consiste únicamente de colocar el LED (la pata mas larga) en el pin 13 y la otra pata en GND (tierra).
Una vez, hecho esto pasamos a hacer el sketch Arduino.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
constintLED=13;//LED connected to digital pin 13
intinByte=0;
voidsetup(){
Serial.begin(9600);//Open the serial port
pinMode(LED,OUTPUT);//Set the digital pin as output
}
voidloop(){
if(Serial.available()>0){
inByte=Serial.read();//read the incoming byte
if(inByte=='1')
digitalWrite(LED,HIGH);//turn the LED on
else
digitalWrite(LED,LOW);//turn the LED off
}
}
Compilamos el sketch y lo cargamos en la placa Arduino. Cargado el sketch, procedemos entonces con el programa Java. Para poder conectarnos con la placa arduino será necesario que tengamos la biblioteca RXTX (una biblioteca semejante a la Java Communications API extension), esta biblioteca posee los jar necesarios para poder establecer comunicación vía serial con la placa. La instalación dependerá del sistema operativo que utilicen, así que les recomiendo seguir los pasos de instalación indicados en el fichero README de la versión de la biblioteca (así sea la versión con los binarios o los fuentes) que se descarguen, o en el sitio web en la sección de instalación.
Una vez descargada e instalada la biblioteca RXTX, seguimos con nuestro programa Java, que consistirá unicamente de una interfaz grafica sencilla (un JFrame) con 2 botones para encender o apagar el LED.
NOTA: Tener en cuenta que para programar en Java podremos usar el IDE de nuestra preferencia, en mi caso he utilizado Eclipse. [Actualización] En el código Java no olvidar editar la constante PORT_NAME e indicar el puerto que utilicen[/Actualización]
Para compilar escribir en consola:
javac -classpath path_instalacion_biblioteca/RXTXcomm.jar:. JPanelTurnOnOffLED.java
Después de haber compilado nuestro programa Java, procedemos a ejecutarlo, de la siguiente manera:
path_instalacion_biblioteca: Ruta de instalación de la biblioteca, es decir, donde estarán alojados los jar.
Voilà!!!, ya deberíamos poder visualizar el JFrame con sus respectivos botones de encendido y apagado. Así que, ¿qué esperas? empieza ya a encender y apagar tu LED.
Recomendación: En el libro Getting Started with Arduino, nos sugieren que en caso de mantener el LED mucho tiempo encendido usar una resistencia de 270 ohm, en cuyo caso necesitaríamos adicionalmente para hacer nuestro ejemplo una breadboard y par de cables.
Puntos importantes a tener en cuenta para usuarios Mac OS X (snow leopard)
– Si colocas (copiar con el comando sudo) la biblioteca RXTX en /Library/Java/Extensions, nuestro programa java podrá ser compilado y ejecutado de la siguiente manera:
javac JPanelTurnOnOffLED.java
java JPanelTurnOnOffLED
Aunque esta quizás no es la forma más recomendada en caso de que se llegase a trabajar con distintas versiones de la biblioteca, ya que en ese caso lo adecuado sería tener una instalación para cada versión y compilar y ejecutar nuestro programa Java de la manera indicada en un principio para poder indicarle al compilador y a la maquina virtual con que versión de la biblioteca estamos trabajando.
– Puede que te sea necesario al momento de ejecutar el programa Java indicar que se ejecute en 32 bits, si obtienes una exception similar a la que te muestro a continuación
“java.lang.UnsatisfiedLinkError: /Library/Java/Extensions/librxtxSerial.jnilib: no suitable image found. Did find: /Library/Java/Extensions/librxtxSerial.jnilib: no matching architecture in universal wrapper thrown while loading gnu.io.RXTXCommDriver”
Lo que implicará que tengamos que añadir un argumento a nuestro comando de ejecución , quedando de la siguiente manera
java -d32 JPanelTurnOnOffLED
– Ir a la carpeta /var/lock (si no existe, crearla) y otorgarle permisos de escritura al o los usuarios que vayan a ejecutar el programa, esto podrás hacerlo desde el finder o por linea de comandos con el comando chmod.
Conclusión
Cada día que pasa y me involucro más con mi nuevo hobbie, me fascino con su versatilidad, pues además de ser una arquitectura abierta, nos permite interactuar con una gran gama de lenguajes de programación entre los que les puedo mencionar C, C++, Java, Objective-C, entre otros, de una gran lista, lo cual como les dije antes, nos permite gozar de las bondades (ventajas) de un lenguaje o plataforma de software, como lo es en este caso Java, ya que podríamos aprovechar el gran numero de bibliotecas existentes, así como también de su variedad de frameworks (que son unos cuantos). Este ejemplo ha resultado interesante para mi, ya que además de lo mencionado anteriormente, es un ejemplo que podemos extrapolar a algo mas complejo, es decir, podemos imaginar que en vez de ser 2 botones, podemos crear una interfaz mas compleja con unos 5 o 6 botones y cada uno de ellos con una instrucción distinta, que nos permita por ejemplo dado el botón pulsado, ver en una pantalla, la temperatura, posicionamiento global, etc…, o incluso controlar un servomotor.
En fin, como comente en un post anterior, aquí el limite es nuestra imaginación y mas aun cuando podemos interactuar con una variedad de lenguajes, lo que no resulta en un impedimento el no saber Processing, pues si tu fuerte es Perl, Python o Java, no importa, puedes empezar a programar ya!!!.
Video de la aplicación Java en ejecución
[tube]http://www.youtube.com/watch?v=jwGwnlEBuAI[/tube]
Hace tiempo atrás revisando en que diferían JavaSE 5 y JavaSE 6, observe que el jsdk de la versión 6 incluía javaDB y me asombro el saber que Java traia consigo su propio gestor de base de datos, así que desde entonces tenia el gusanillo de trastear con el mencionado gestor y Java.
Para quien no lo sepa aun javaDB es el mismo apache Derby, un gestor de base de datos relacional “ligero” 100% Java (tiene un tamaño de 2MB).
He aquí mi primer encuentro con javaDB.
El entorno es Mac OS X snow leopard con la ultima versión de java (1.6.0_22) distribuida para este entorno de parte de Apple y como IDE Eclipse. Mi primera decepción fue el darme cuenta que la versión del jsdk distribuido por parte de Apple no trae consigo javaDB asi que procedí a descargarlo desde este enlace, por otro lado es agradable mencionar que el archivo a descargar es en formato .dmg, una vez ya relatada mi primera decepción (esperaba que mi jsdk fuera igual de completo que cualquier otro distribuido de parte de Oracle para los entornos Linux o Windows), procederé a explicarles como obtener un Jar que traiga consigo javaDB y fuese un ejecutable a mi modo de verlo fácilmente distribuible.
Como mi idea principal consistía en probar javaDB, procedi a buscar un ejemplo en la red, lo bueno es que encontré uno casi perfecto, que cumplía casi a la perfección todo lo que quería, consiste en el ejemplo del libro de direcciones (AddressBook). Antes de continuar será necesario que descarguemos el código fuente del ejemplo y aquellos que hagan uso de un IDE importemos el código fuente en un proyecto (ver figura)
Una vez importado el código, podemos detallar que nuestro proyecto tendra una carpeta “lib” allí estará un jar de nombre derby.jar, que no es mas que nuestro javaDB en una versión vieja (si prestan atención el ejemplo data del 2006), si quisiéramos trabajar con una versión mas nueva pues sencillamente copiaríamos al proyecto el derby.jar ubicado en la carpeta de instalación de javaDB, además también podemos notar que el proyecto también contará con un build.xml (para quien no conozca Ant, ir al menu Windows->show view y seleccionar la vista de Ant, una vez se muestra la vista arrastrar el archivo build.xml a la vista). En la vista de Ant ejecutar la tarea “dist”, la cual es la tarea por defecto. Una vez ejecutada la tarea procedemos a refrescar el proyecto (F5) y veremos que se nos ha creado una carpeta de nombre “dist” que contendrá a su vez una carpeta “lib” con la dependencia (que no es mas que nuestro derby.jar) y un fichero de nombre AddressBook.jar que será un jar ejecutable. Si hacemos doble click sobre este fichero o sencillamente ejecutamos la tarea “run” de Ant, y podremos ver como se ejecuta nuestra aplicación y como podemos guardar, editar y eliminar registros, sencillamente fabuloso.
Pero ustedes se preguntarán ¿Si es tan fabuloso por qué no lo definí como perfecto? y la razón es la siguiente, si copiamos ese archivo ejecutable AddressBook.jar, lo pegamos por ejemplo en nuestro escrito y procedemos a ejecutarlo, se darán cuenta que no es del todo distribuible, ya que para que se ejecute perfectamente sería necesario haber copiado y pegado la carpeta “lib” con su respectivo derby.jar. A mi modo de ver las cosas no es muy elegante distribuir un “supuesto” jar ejecutable y a su vez hacerlo con una carpeta aparte con sus respectivas dependencias, incluso el embebido lo pondría en entre dicho porque nuestra aplicación no es autocontenida, es decir la aplicación por si sola no tiene todo lo que requiere (excluyendo la JVM de esos requerimientos). Así que me puse a investigar el tener todo en 1, es decir que fuese un único jar ejecutable.
El problema esta en que un jar (asumamos AddressBook.jar) al ejecutarse, por defecto no puede cargar las clases contenidas en otro jar (asumamos derby.jar) que este dentro del primero, es decir aunque agregásemos nuestra carpeta “lib” con el derby.jar dentro de AddressBook.jar no podríamos ejecutar la aplicación ubicada en nuestro escritorio (o en cualquier otro lugar donde lo hayamos pegado), aquí les dejo un enlace del tutorial donde se menciona. ¿Que alternativa tendríamos? una de ellas seria usar Java Web Start para la instalación y otra hacer nosotros mismos nuestro propio ClassLoader a medida, esta opción me tentó, incluso quede con el gusanillo de investigar al respecto, pero buscando por la red encontré una buena herramienta, además de no ser la única en su clase y en el one-jar, el cual consiste en un proyecto para crear un único jar ejecutable y traiga consigo (dentro) todas sus dependencias (jars).
Existen varias opciones para crear el ejecutable, mediante tarea Maven, tarea Ant e incluso por linea de comandos, he optado por la última, la cual es muy sencilla y detallo a continuación los pasos:
Crear un directorio “root” que contenga a su vez 2 directorios mas llamados “main” y “lib”.
Copiar el archivo AddressBook.jar (nuestro jar ejecutable obtenido mediante Ant) dentro de la carpeta “root/main” y copiar el derby.jar en el directorio “root/lib”.
Descomprimir el archivo one-jar-boot-0.97.jar en el directorio “root” y eliminar la carpeta “src” donde están ubicados los fuentes del archivo recien descomprimido.
Editar el archivo boot-manifest.mf y añadir una nueva linea. One-Jar-Main-Class: com.sun.demo.addressbook.AddressFrame
En linea de comandos ubicarnos en el directorio “root”. >cd root
En linea de comandos >jar cvfm ../ejecutable.jar boot-manifest.mf . (no omitir el ultimo punto “.”)
Finalmente hemos obtenido nuestro ejecutable.jar, es decir una aplicación de escritorio que tiene embebido un gestor de base de datos ligero, plena y elegantemente distribuible.
Espero les sea de utilidad y cualquier duda y/o sugerencia será bien recibida.
Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.