informática


Últimamente se está hablando muchísimo de piratería, derechos de autor, libertad de expresión, control de Internet. Todos son temas muy interesantes con discusiones realmente apasionadas. Sin embargo, como los más catastrofistas dirían, es posible que Internet tal y como la conocemos en la actualidad cambie si se aprueban determinadas leyes.

Por ahora os dejo la captura de pantalla de Wikipedia del día 18 de enero. No se si este “blackout” dará resultado pero al menos es una forma de protesta sin precedentes. ¿Realmente los internautas podemos hacer algo para parar a los grandes gobiernos y corporaciones?

wikipedia el 18 de enero de 2012

wikipedia el 18 de enero de 2012

El otro día me tuve que enfrentar de nuevo a la pregunta de qué sistema de ficheros utilizar en un disco duro externo. Me encantaría utilizar ext4 por su robustez, el journaling, etc. Sin embargo, seguro que tendré problemas cuando intente acceder a información de este disco duro externo desde un ordenador que no sea el mío. Tampoco quería caer en la tentación de utilizar VFAT por sus conocidos problemas y limitaciones. A sí que al final opté por NTFS que me permite utilizar archivos de más de 4GB, tiene journaling, metadatos de archivos, etc. Muchas de las ventajas que me ofrece ext4 pero sabiendo que funcionará en casi todos los ordenas donde lo utilice.

No tuve ningún problema para crear la partición utilizando gparted y funciona perfectamente en ubuntu. Sin embargo, me sorprendió que no hubiera soporte nativo de escritura para NFTS en Mac Os X 10.6.8. Tras alguna búsqueda en google parece que muchos usuarios de Mac se decantan por utilizar: paragon software o NTFS-3G. Ambos tienen una licencia que ronda los $20.

Tenía más sentido que, ya que existe soporte de escritura para en NTFS para GNU/Linux, los chicos de Apple hubieran implementado un soporte nativo de escritura en NTFS para Mac, a sí que al final encontré una solución más barata sencilla en este blog.

La idea es que por defecto se montará la partición como solo lectura pero utilizando la consola se puede forzar a que la partición se monte también como lectrua/escritura. Solo hay que saber el nombre del volumen y la ruta de la partición (algo del estilo /dev/disk?s?).

Para averiguar esas dos cosas se puede utilizar los comandos:

ls /Volumes/

diskutil info /Volumes/Abian/ | grep “Device Node”

Luego solo hay que crear una carpeta donde se montará el dispositivo y ejecutar el comando para montar la partición. Para que no se me olvide me he hecho un pequeño script:

#/bin/sh
#desmontar el volumen
hdiutil eject /Volumes/Abian/
#crear la carpeta donde se montará la partición
sudo mkdir /Volumes/Abian/
#montar la partición con la opción de escritura
sudo mount_ntfs -o rw /dev/disk1s1 /Volumes/Abian/
#mostrar que se ha montado bien
mount | grep Abian

No hay que olvidar darle privilegios de ejecución con chmod +x script.sh

Tras ejecutar el script debería aparecer la línea:

/dev/disk1s1 on /Volumes/Abian (ntfs, local, noowners)

en lugar de:

/dev/disk1s1 on /Volumes/Abian (ntfs, local, nodev, nosuid, read-only, noowners)

Un saludo

Cuando estaba estudiando la carrera de informática, el mundo del desarrollo web no me atraía demasiado. Sin embargo, después de llevar unos años programando portales web comprendo mejor sus posibilidades. Las herramientas de desarrollo web son cada vez más numerosas y tienen un sin fin de utilidades.

Hoy estaba leyendo Genbeta cuando me he topado con la noticia del complemento para firefox Tilt 3D que permite visualizar cualquier página web en tres dimensiones.

Igual que el otro día no me pude resistir a probar JoomlaScan, hoy no me he podido resistir a probar esta extensión. Tras instalarla, solo hay que reiniciar firefox y pulsar la combinación de teclas “Ctrl + Shift + M” o ir al menu “Herramientas -> Desarrollo Web -> Tilt”.

El resultado es impresionante como se puede ver en las dos capturas de pantalla que muestro a continuación:

Portal de Organic.Edunet en 3D

Portal de Organic.Edunet en 3D

Portal de VOA3R en 3D

Portal de VOA3R en 3D

Además de visualizar páginas web en 3D también se puede utilizar los controles de la parte izquierda de la pantalla para modificar en vivo el resultado obtenido. Por ejemplo, se puede aplicar transparencias, inspeccionar elementos HTML, cambiar CSS…

Sin duda una herramienta que merece la pena probar.

Un saludo

Ya está disponible para su descarga o actualización (sudo update-manager -d) la versión 11.04 de ubuntu cuyo nombre es “Natty Narwhal”. La lista de mejoras y cambios que incluye es bastante interesante. Entre ellas se puede destacar la inclusión de:

  • Linux kernel 2.6.38.2
  • LibreOffice 3.3.2
  • gcc 4.5
  • Python 2.7
  • dpkg 1.16.0
  • Upstart 0.9
  • X.org 1.10.0 y Mesa 7.10.1
  • Firefox 4.0
  • Shotwell 0.9.1
  • Evolution 2.32.2

El sistema de escritorio por defecto pasa a ser Unity. La utilización de Unity incluye algunos cambios bastante radicales comparada con el uso habitual de Gnome, la verdad es que todavía no lo he utilizado lo suficiente como para decir si me gusta o no, los vídeos mostrados en la página web oficial muestran cosas realmente interesantes. Sin embargo, tenía la sensación de que iba a echar de menos el interfaz clásico anterior a sí que me he instalado una máquina virtual para trastear con el nuevo sistema y, sobre todo, para ver si podía utilizar el interfaz clásico. Afortunadamente, la respuesta es sí.

Otra buena noticia (al menos para mi) es que se puede utilizar una versión de Unity sin necesidad de utilizar aceleración 3D para el escritorio. Tan solo hay que instalar el paquete unity-2d que está pensado para equipos que nos disponen de una tarjeta gráfica lo suficientemente potente para mover los efectos en 3D de este nuevo sistema:

abian@desktop:/home/abian$ apt-get install unity-2d

Una vez instalado, se puede utilizar la aplicación gdmsetup (“System -> Administration -> Login Screen” o simplemente tecleando gdmsetup en consola) para elegir el interfaz de escritorio preferido para la sesión:

Selección de sesión

Selección de sesión

También se puede seleccionar desde la propia ventana del GDM:

GDM

GDM

Aquí os dejo una captura de Unity sin aceleración gráfica:

Unity-2D

Unity-2D

Un saludo

Hay muchas formas de crear aplicaciones, se pueden utilizar distintos paradigmas de programación ( lógico, funcional, orientado a objetos…) o lenguajes de programación. Cada uno de ellos tiene similitudes (como opciones para leer o escribir ficheros, control de flujo, tratamiento de errores, estructuras para repetir determinadas operaciones…) aunque tienen notables diferencias que los hacen más adecuados para resolver unos determinados tipos de problemas.

Uno de los lenguajes de programación que más utilizo es Java con el IDE netbeans y maven como gestor de librerías.

INSTALACIÓN DE JAVA

La forma de instalar estas herramientas en linux es bastante sencilla, basta con teclear los siguientes comandos:

abian@casa:~$ sudo apt-get install sun-java6-* netbeans maven2

Es recomendable tener alguna variable de entorno llamada JAVA_HOME que apunte a la máquina virtual de java añadiendo la siguiente línea al archivo /etc/profile (para todos los usuarios de la máquina) o al archivo $HOME/.bashrc (solo para el usuario elegido):

export JAVA_HOME=/usr/lib/jvm/java-6-sun

Una vez que está todo instalado ya se pueden desarrollar programas con Java de forma normal.

PROGRAMACIÓN ORIENTADA A OBJETOS

La forma normal de desarrollar programas en un paradigma de programación orientada a objetos es que primero se crea un objeto del tipo que queramos y luego se ejecutan métodos sobre él. Por ejemplo:

String alberto = new String();

int logitud = alberto.length();

longitud de una cadena de texto

longitud de una cadena de texto

De esta manera se puede obtener la longitud de la cadena de texto gracias a que la función “length” ha sido declarada en la clase java.lang.String. Una de las características de Java es que todos las clases heredan de la super clase java.lang.Object. De esta forma se pueden crear objetos del tipo Object para posteriormente hacer un cast al objeto que más nos convenga:

java.lang.Object abian;

abian = (String) new String(“Abian”); //la clase a la que se hace el cast está resaltada en negrita

El hecho de poder hacer un cast después de haber declarado la variable aporta una gran flexibilidad, por ejemplo, a la hora de crear listas o colecciones de objectos.

ArrayList<String> listaDeStrings=new ArrayList<String>();

Podría convertirse en:

ArrayList<Object> listaDeCosas = new ArrayList<Object>();

Esta es la explicación “demasiado” informal de polimorfismo.

API REFLEXIVA

Siguiendo el paradigma de la orientación a objetos, debemos indicar de qué clase es cada objeto que estamos creando en tiempo de compilación. Pero, ¿Qué pasa si queremos crear un objecto y hacer el cast de forma dinámica? Es decir, ¿se puede establecer en un archivo de configuración la clase que quiero cargar y luego ejecutar los métodos de esa clase? El API reflexiva permite ese tipo de cosas, es la siguiente vuelta de tuerca.

Para utilizar el API reflexiva hay que hacer uso de tres clases Class, Object, Method (por legibilidad de código puede ser útil Constructor):

//el tipo se podría coger de una archivo de configuración
String nombreClaseJava = “java.lang.String”;
//estas tres líneas serían las equivalentes a hacer “new String()”
Class claseJava = Class.forName(nombreClaseJava);
Constructor constructor = claseJava.getConstructor();
Object objeto = constructor.newInstance();
//Estas dos líneas serían las equivalentes a hacer “cadena.lenght()”
Method metodo = claseJava.getMethod(“length”);
Object longitud = metodo.invoke(objeto);

Por supuesto hay un buen número de excepciones que deben ser tratadas, en este caso: InstantiationException,IllegalAccessException, IllegalArgumentException, NoSuchMethodException, SecurityException, ClassNotFoundException.

Si es necesario pasar parámetros al objeto que estamos creando hay que utilizar un array que contendrá el tipo de cada parámetro y otro array que contendrá el parámetro en sí como se muestra en las modificaciones con negrita al código anterior:

String nombreClaseJava = “java.lang.String”;
Class claseJava = Class.forName(nombreClaseJava);
Class[] parType = new Class[1];
Object[] argList = new Object[1];
parType[0] = String.class;
argList[0] = “Alberto abian”;
Constructor constructor = claseJava.getConstructor(parType);
Object objeto = constructor.newInstance(argList);
Method metodo = claseJava.getMethod(“length”);
Object longitud = metodo.invoke(objeto);
System.out.println(“clase de la variable objeto: ” + objeto.getClass());
System.out.println(“contenido de objecto: ” + objeto);
System.out.println(“contenido de longitud: ” + longitud);

Si todo ha ido bien hasta aquí, se debería ver por pantalla:

clase de la variable objeto: class java.lang.String
contenido de objecto: Alberto abian
contenido de longitud: 13


¿VENTAJAS E INCONVENIENTES?

Como en todas las tecnologías hay ventajas e inconvenientes. En mi opinión, la mayor ventaja es la flexibilidad a la hora de ejecutar el código. Se puede utilizar un archivo de configuración que contenga las clases o funciones que se van a utilizar en el programa sin necesidad de recompilar. Sin embargo, no está exenta de problemas:

  • Rendimiento: La máquina virtual de java no puede optimizar el código ya no sabe a qué clase pertenece.
  • Seguridad: El API reflexiva necesita permisos especiales de ejecución que pueden no estar disponibles en todos los sistemas. Además, el API reflexiva permite acceso a variables y métodos declarados como privados, algo que no se podría hacer en un entorno no-reflexivo.

Espero que os haya resultado de interés.

Hace algún tiempo que no posteo en el blog, no es que me haya olvidado de él, sino porque el ritmo de trabajo ha aumentado bastante en los últimos meses. Una de las actividades que ha ocupado casi todo parte de mi tiempo los fines de semana  ha sido el desarrollo de una guía sobre cloud computing, en concreto sobre los riesgos de seguridad y privacidad de esta tecnología.

Durante el desarrollo de esta guía, he asentado muchos conceptos que tenía algo difusos sobre la computación en la nube y he absorbido grandes cantidades de literatura sobre ella. Realmente me he asombrado bastante ante las posibilidades de esta tecnología que cada vez está más presente en nuestra vida diaria. Supongo que a muchos de vosotros os suenan cosas como Gmail, Google docs, ubuntu one o Amazon Web Services. Son sólo algunos de los ejemplos de cómo esta tecnología está presente en muchas de las aplicaciones que utilizamos normalmente.

Últimamente, estoy notando un incremento notable sobre noticias relacionadas con las grandes inversiones que están haciendo las grandes empresas para mejorar sus servicios de cloud computing como por ejemplo estas de engadget, alt1040 o bitelia. Realmente creo que hay cierto desconocimiento sobre cómo funciona el cloud computing y cómo podemos aprovecharnos de sus ventajas.

Sin duda, una de las mejores maneras de aprender cómo funciona el cloud computing es instalar una nube privada en un entorno de pruebas.  Tal vez la forma más sencilla sea utilizar las funcionalidades de computación en la nube que ofrece ubuntu server. Durante la instalación, se ofrece al usuario la posibilidad de configurar todos los paquetes software necesarios para convertir la máquina en un servidor de cloud computing mediante la utilización de Eucalyptus.

La instalación completa de una máquina virtual como nube privada no lleva más de media hora, eso sí, sed generosos con la memoria RAM asignada a la máquina virtual porque el sistema es algo más pesado que un ubuntu server normal.

Cuando saque algo más de tiempo escribiré algo más sobre la administración y configuración del sistema Eucalyptus. Un saludo y hasta pronto.