Ubuntu: Acceder a carpetas y archivos compartidos de Windows
por e1kio el 26 Jul, 2010, en Informática
Para acceder a recursos compartidos de máquinas con Windows desde Ubuntu o sus derivados, necesitamos instalar los paquetes que proporcionan compatibilidad con el protocolo de compartición de Microsoft.
Para eso, basta con introducir en el terminal:
$ sudo apt-get install samba smbfs
Ahora basta con ver la red desde el menú “Lugares”, donde podremos ver los grupos de trabajo.

OVI: aplicaciones para Nokia
por e1kio el 01 Jul, 2010, en Entretenimiento
Hace unos días, mi teléfono Nokia 5800 XpressMusic recibió una nueva actualización de firmware desde Nokia, pasando a la versión v50.0.005. Con la nueva actualización se pueden disfrutar algunas pequeñas mejoras de velocidad en los menús, el kinetic-scrolling (mover los menús como en un iphone) y pequeños cambios que no requieren mayor atención.
Esta me pareció una buena ocasión para además apuntar algunas de las aplicaciones de la tienda Ovi Store de Nokia que yo utilizo en mi terminal. Todas son gratuitas y plenamente funcionales.
1. Posicionamiento GPS, Mapas y localización
- Ovi Maps: Va por la versión 3.04, ofrece navegación gratuita para toda la vida y guías de voz para ir conduciendo o caminando. Se integra muy bien con terceras aplicaciones, algunas de ellas muy interesantes, como las dedicadas a hacer deporte o encontrar recursos a tu alrededor.
- Google Maps (con Latitude): Basicamente se trata del Google Maps que puedes consultar con tu navegador pero optimizado para una pantalla pequeña y con la novedad de Latitude, para indicar a cada instante tu posición a tus contactos de Google que hayas dado permiso para recibir tal información. Dispone de búsqueda por voz y, esperemos que tras su paso por Android, la navegación como en Ovi Maps. Se puede integrar con Buzz y otros servicios de la compañía, por lo que será una opción muy competitiva a medio plazo, cuando esas funciones propias de su sistema desembarquen en las plataformas de la competencia. Es recomendable disponer de una tarifa de datos para aprovechar todo su potencial en el exterior (o conexión Wi-Fi para evitar gastos).

- Aquí y ahora: aplicación de Nokia que corre sobre el navegador y nos ofrece todo lo que haya a nuestro alrededor: cines, restaurantes, museos, tiendas, etc. Está muy bien integrado con el resto de funciones del teléfono (te guía por GPS hasta donde quieras ir, te da la posibilidad de llamar a cualquier establecimiento o visitar su web, etc.). También ofrece información actual sobre el clima y, pinchando en él, información sobre el tiempo que hará los días siguientes.
2. Internet
- Navegador Opera Mobile: es la versión symbian del Opera Mini para iphone y otros. Es un navegador muy rápido un con muchas opciones que el básico navegador de Nokia no incorpora. La interfaz es muy clara y resulta cómodo utilizarlo, pero necesita integrarse mejor en el sistema para poder definirlo como navegador por defecto.

- Youtube (cliente): Cliente web con interfaz optimizada para navegar por youtube. No ofrece nada más que sea especialmente destacable, pero buscar vídeos es mucho más práctico que a través del navegador, gracias a su interfaz optimizada.

- Facebook (cliente): Lo mismo que la aplicación Youtube, un cliente de Facebook para el teléfono. No dispongo de cuenta de Facebook, pero al tratarse de una aplicación firmada y verificada por Nokia, se puede resaltar como segura. Si usas esta red social, puede interesarte. Recomendable disponer de tarifa de datos para poder conectarte en cualquier parte y reducir el coste.

3. Comunicación
- Skype: cliente Skype para Symbian. Recomendable si tus contactos utilizan Skype y quieres llamarlos sin gastar dinero. Eso sí, requiere el uso de Wi-Fi o 3G y en ese caso habrás de pagar tu tarifa de datos igualmente. Con los precios actuales de las tarifas de teléfono, puede ser incluso más caro que una llamada normal, pero Skype es un programa que satisfará a aquellos que quieran llamar al extranjero más barato.

4. Juegos
- Minesweeper: Versión táctil del clásico buscaminas para pantalla táctil

- Checkers: un sencillo (y fácil) juego de damas ahora táctil

- Solitaire: el clásico solitario también táctil

5. Utilidades
- Bright Light: el interruptor enciende/apaga el flash de la cámara para así simular el uso de una linterna

- Level: simula un nivel de burbuja para comprobar si algo se encuentra perfectamente horizontal o vertical.

- Elements: muestra la tabla periódica. Si se selecciona un elemento, muestra un cuadro con sus datos.


- TuneWiki: entre otras cosas, reconoce la música que está sonando y te muestra las letras de la canción con bastante fiabilidad, sigue la música de tus contactos y se integra con Facebook y Twitter correctamente.

- ScreenSnap: realiza capturas de pantalla cuando se pulsa la tecla que se ha definido previamente y las almacena en formato JPEG/BMP

Apuntes de OAF
por e1kio el 24 Jun, 2010, en FIC
He terminado de preparar mis apuntes sobre la asignatura de Organización, Administración y Finanzas. Los he colgado en la siguiente URL http://blog.sadhill.net/oaf/ y los proporciono SIN NINGUN TIPO DE GARANTIA. Están sujetos a la licencia que se especifica más abajo.
Se trata de un archivo PDF “apuntes_oaf.pdf” de 25 páginas con los 4 temas dados e incluye un anexo a modo resumen de lo mínimamente imprescindible que debería saber cualquier alumno.
Además está un archivo de licencia de los apuntes, en el que se especifica claramente que están sujetos a la misma licencia que los contenidos de este blog (Creative Commons 3.0 by-nc-sa España). Por favor, respeta la integridad del archivo y los términos de la licencia. Gracias.
Por último, encontraréis las sumas md5 con las que comprobar la integridad de los archivos si los descargáis y verificar también, que no han sido modificados por terceros. MD5:
apuntes.pdf: 5fd54c7f87bff528728db68382598e7c
licencia.txt: f394d44c84655ea94155044fd9235c96
Abrir links de Spotify en Ubuntu
por e1kio el 18 Jun, 2010, en Informática
Ya hace tiempo expliqué como instalar Spotify en Ubuntu, pero no expliqué cómo se puede abrir los enlaces del propio programa en navegadores como Firefox o Chrome. Es muy sencillo. Además recuperaré de entre los comentarios de aquella entrada la creación de accesos directos a Spotify desde el escritorio o desde la interfaz de “Ubuntu Netbook Edition”, porque según parece, a veces el instalador (siempre a través de wine) no llega a crearlos.
Abrir enlaces de Spotify en Ubuntu
Los primeros pasos son obligatorios para cualquier navegador. Tenemos que abrir una ventana de terminal y escribir:
$ cd /usr/bin
$ sudo gedit spotify.sh
Esto nos abre una ventana de gEdit en la que copiamos las siguientes lineas:
#!/bin/bash
wine "$HOME/.wine/drive_c/Archivos de programa/Spotify/spotify.exe" /uri "$1"
Si has cambiado la ruta de instalación de Spotify, ajústala a tu caso particular. La que se muestra aquí es la ruta por defecto.
Guarda el documento y cierra gEdit. Este script será el que llame a Spotify cuando una aplicación quiera invocarlo, así que hay que darle permisos de ejecución:
$ sudo chmod +x spotify.sh

Si tu navegador es Firefox, abre una nueva ventana del navegador, escribe la dirección about:config y pulsa el botón “¡Tendré cuidado, lo prometo!“.
Ahora pulsa con el botón derecho en un espacio en blanco y crea un nuevo valor de tipo lógico llamado network.protocol-handler.expose.spotify con valor false:
.
Ya puedes cerrar Firefox.
Si tu navegador es Chrome, abre una terminal nueva y escribe las siguientes lineas:
$ gconftool-2 -t string -s /desktop/gnome/url-handlers/spotify/command "spotify.sh %s"
$ gconftool-2 -t bool -s /desktop/gnome/url-handlers/spotify/needs_terminal false
$ gconftool-2 -t bool -s /desktop/gnome/url-handlers/spotify/enabled true
Esto ya permitirá que el navegador encuentre nuestro script “spotify.sh”, que nosotros por defecto hemos guardado en /usr/bin. Si lo has guardado en otra carpeta, por ejemplo tu directorio “home”, puede que tengas que cambiar la primera linea por esta otra:
$ gconftool-2 -t string -s /desktop/gnome/url-handlers/spotify/command "~/spotify.sh %s"
Ya puedes cerrar la terminal

A partir de ahora podrás abrir links de Spotify en Ubuntu con solo hacer clic en ellos, tal y como sucede en Windows. Puedes comprobarlo, por ejemplo con este enlace: Hadouk Trio – Le Bal des Oiseux.
Crear un acceso directo a Spotify en Ubuntu
Abre una terminal y escribe:
$ gedit spotify.desktop
Se abrirá una ventana de gEdit en la que debes copiar las siguientes lineas:
[Desktop Entry]
Name=Spotify
Exec=env WINEPREFIX="/home/tu_usuario/.wine" wine "C:\\Archivos de programa\\Spotify\\spotify.exe"
Type=Application
StartupWMClass=Wine
Path=/home/tu_usuario/.wine/dosdevices/c:/Archivos de programa/Spotify
Icon=ec11_spotify.0
Name[es_ES]=Spotify
Cambiando las partes destacadas en rojo para que se correspondan con tu nombre de usuario. Guarda el documento, cierra gEdit y antes de cerrar el terminal dale permisos de ejecución al enlace:
$ chmod +x spotify.desktop
Ya tienes el enlace listo dentro de tu “home”. Puedes por ejemplo moverlo al escritorio para que resulte más práctico lanzar Spotify:
$ mv spotify.desktop Escritorio/

Enlace a Spotify en Ubuntu Netbook Edition
Dirígete a “Sistema” y haz clic en “Menú Principal“; se abrirá el editor del menú. Dentro de cualquier categoría (por ejemplo, “Sonido y video“) crea un nuevo elemento de tipo “Aplicación“. El el campo nombre escribe “Spotify” (sin comillas) y en el campo comando escribe:
env WINEPREFIX="/home/tu_usuario/.wine" wine "C:\Archivos de programa\Spotify\spotify.exe"
Sustituyendo la parte en rojo logicamente por tu nombre de usuario. Si pinchas sobre la imagen podrás definir el icono. El icono por defecto de Spotify se encuentra en la ruta:
/home/tu_usuario/.local/share/icons/ec11_spotify.0.xpm
De nuevo modificando la ruta para que se corresponda con tu home.
Al aceptar, el nuevo icono para lanzar Spotify aparecerá en el submenú “Sonido y video”. Si te sitúas sobre el y haces clic en el más que aparece junto al icono, se agregará a tus favoritos de Ubuntu Netbook Edition.

Escribir buen código: convenciones y editores
por e1kio el 17 Jun, 2010, en Informática
Continuando mi entrada anterior con consejos para escribir buen codigo aprovecharé ahora para referirme a algunas convenciones respecto a nombres identificadores de variables, constantes, etc. y a los editores con los que trabajar. De nuevo emplearé el lenguaje Pascal como ejemplo, pero estas directrices se pueden seguir prácticamente en cualquier lenguaje.
Convenciones:
Por enumerarlas de una forma rápida:
- Los nombres (identificadores) que designemos deben ser precisamente eso: identificadores. Debemos dar un nombre significativo a cada cosa, incluso nombres compuestos. Por ejemplo, a una variable que almacene la edad de una persona, no bastaría con llamarle “e“, sino que sería más útil emplear la palabra completa “edad“. Por esta misma razón, a un procedimiento que dibujase un cuadrado no le llamaría “Cuadrado” (que puede confundirse con calcular el cuadrado de un numero) sino “DibujarCuadrado“, porque eso es lo que hace y el identificador ya no deja lugar a dudas de a qué nos estamos refiriendo.
...
procedure DibujarCuadrado (lado: integer);
...
- Las variables deberían comenzar por letra minúscula. Esto es una convención que nos ayudará a distinguirlas de constantes y tipos. Por ejemplo
...
var
n_entero: integer;
letra: char;
...
- Las constantes, por contraposición a las anteriores, deberían estar escritas totalmente en mayúsculas. Por ejemplo:
...
const
NULO = nil;
MAX = 100;
...
- Los tipos de dato que nosotros definamos deberían empezar por la letra “t” seguidos del nombre de lo que ese tipo representa. Por ejemplo, el tipo “lord” no resulta muy explicativo, resulta más efectivo denominarlo:
...
type
tListaOrdenada = array [1..MAX] of integer;
...
Así vemos claramente que se trata de una lista ordenada.
- Las funciones y procedimientos deberían comenzar por mayúscula. El nombre de las funciones tiene que representar lo que se calcula o evalúa y el de los procedimientos debe ser un verbo que indique lo que realmente hace. Por ejemplo:
...
function RaizCuadrada (numero: integer): real;
...
procedure MostrarTextoCentrado (texto: string);
...
- Utilizar nombres cortos es algo que deberíamos hacer siempre en la medida de lo posible. Por ejemplo, la función:
...
function RaizCuadrada (numero: integer): real;
...
Es evidente que calcula una raíz cuadrada del entero recibido en la variable “numero“. Sería inútil nombrarla de la siguiente forma:
...
function RaizCuadradaDeUnNumero (numero: integer): real;
...
Este nombre tan largo solo nos causaría incomodidades escribiendo el código fuente y provocará que las líneas del mismo se vuelvan demasiado largas, algo de lo que hablaré más adelante.
Editores:
Que yo sepa, todo código fuente debe ser guardado como texto plano sin ningún tipo de formato. Esto ya descarta como posibles editores a muchos procesadores de texto (Microsoft Word, OpenOffice.org Writer, Abiword, etc.). Son excelentes herramientas y por supuesto que pueden trabajar con texto plano, pero lo hacen de una forma muy engorrosa y son aplicaciones muy pesadas y que por lo general no facilitan mucho la tarea al programador, porque no han sido creadas para programar.
Un editor de texto plano puede ser desde el viejo editor de MS-DOS (que se puede lanzar en la consola con el comando “edit“) o los más básicos presentes en sistemas GNU/Linux (pico, nano, emacs, vi, etc.).


Desgraciadamente, no pueden competir con las nuevas generaciones, que han evolucionado claramente hacia no solo la creación de pequeños documentos sino la creación de código fuente en muchos lenguajes.
Habitualmente yo utilizo gEdit, presente como editor de texto por defecto en Ubuntu y que cumple mis necesidades sin problemas. Las características que más demando en un editor son:
- Un resaltado de sintaxis eficaz, adaptado al lenguaje en el que trabaje y que además no utilice colores molestos o chillones. A fin de cuentas se trata de facilitar la lectura del código. En este aspecto importa que se resalte la línea en la que nos encontramos y los cierres de paréntesis, corchetes, etc. para evitar que nos olvidemos de alguno.
- Que haga sangría del código automática e inteligente, para ayudarnos a centrarnos más en el contenido y menos en la forma.
- La posibilidad de ajustar un limite a las lineas de texto, habitualmente de 80 caracteres, que es el limite que se suele poner porque es lo que cabía en una vieja ventana de terminal (aunque hoy en día este límite sea inexistente). Esto está estrechamente relacionado con lo que contaba en el apartado anterior acerca de no utilizar nombres o instrucciones muy largas en nuestros programas. Estaría bien no rebasar este límite nunca o casi nunca. Esto permite leer el código de un plumazo sin tener que mover el documento hacia los lados y tener oculta una parte del mismo.
- Que la tipografía del texto tenga un tamaño agradable que no nos fuerce la vista o que haga que quepan pocos caracteres en pantalla. Debe tener el tamaño cómodo para trabajar sin dañar nuestras retinas y al mismo tiempo ver porciones del código lo suficientemente amplias como para que quepan nuestras funciones o procedimientos enteros o prácticamente enteros en la misma pantalla.
- Que permita deshacer/rehacer las ultimas modificaciones (un numero suficiente de ellas) para cuando necesitemos volver sobre nuestros pasos tras cambiar alguna porción de código. Muchos editores también pueden guardar automáticamente el documento cada poco tiempo para evitar pérdidas mayores.
- Que esté presente la herramienta “Buscar” y “Buscar y reemplazar”, que ahorran mucho tiempo a la hora de corregir errores que cometimos al teclear o un nombre que sabemos que hemos escrito varias veces de forma incorrecta.
- Que pueda abrir varios documentos al mismo tiempo mediante un sistema de pestañas y que también los botones, menús, … sean útiles, no estorben o desconcentren y estén bien organizados. En definitiva, que el editor tenga una interfaz bien organizada, simple y que resulte de ayuda.
- Que se puedan editar archivos remotos, porque todos los que tenemos archivos en un servidor web necesitamos, antes o después, acceder a ellos. Bien sea por encima de un protocolo FTP, SSH o similar, nuestro editor debería estar capacitado para esto. Esto quiere decir que tiene que existir una buena integración con otras tecnologías de las que dependamos: CVS, SVN, etc.
- Poder imprimir los números de línea, el resaltado de sintaxis, etc. y también imprimir a un archivo en formato PDF o PostScript.
Escribir buen código
por e1kio el 16 Jun, 2010, en Informática
En los últimos dos días he estado comentando con Atryx las buenas costumbres que uno debe adquirir a la hora de programar. Son muchas y algunas se refieren a como distribuir el código, otras a como documentarlo, otras a qué orden seguir al escribirlo, otras a cómo indentarlo y dividirlo en partes más simples, etc. De las conclusiones sacadas, aquí están unas pocas sugerencias y un ejemplo práctico. Me centraré en Pascal por ser este uno de los primeros lenguajes de nuestra carrera y el que mucha gente aprende por su cuenta para iniciarse en la programación estructurada, pero en general todo consejo puede ser bueno independientemente de qué lenguaje estemos utilizando.
- Distribuir el código:
Hoy en día la gran mayoría de lenguajes de programación existentes, y por supuesto los más conocidos, aceptan la distribución del código fuente de un programa en bloques que se conectan al programa principal o que se encuentran interconectados entre sí. Ya se llamen módulos, librerías, units, bibliotecas… al final todos estos nombres se refieren a un fichero que proporciona una determinada utilidad. En nuestra carrera, el ejemplo más evidente son las units de Pascal (concretamente de la implementación FreePascal) donde todas las funciones y procedimientos de uno de estos módulos se crean para proporcionar a un programa la habilidad de crear, modificar y consultar listas, colas, pilas, etc. Es importante por eso darle también un nombre apropiado a estas librerías: “lista.pas” o “juego.pas“, por ejemplo.
En otras ocasiones, un programa puede necesitar de forma recurrente operaciones mucho más simples y que no están relacionadas entre sí. Pongo por ejemplo la función que convierta una letra mayúscula en minúscula, que enlace ficheros, o el procedimiento que centre un texto en pantalla, o tal vez el algoritmo que nos devuelva un número generado aleatoriamente. Estas operaciones no tienen nada que ver entre sí y no nos proporcionarán un nuevo tipo de dato abstracto, pero son necesarias y se utilizan de forma común. Más evidente aún es la necesidad de importar en todos los módulos de un programa los tipos de datos que se emplean. En lugar de definir los tipos en cada fichero, podemos escribirlos una vez en un módulo separado y exportarlo.
En este caso, a mi me gusta emplear una denominación tomada de la denominación de paquetes de software en sistemas Debian. Igual que a una unit que proporciona una lista podríamos llamarla “lista.pas“, podríamos hablar de “general.pas” o, mi preferido, “base.pas” pues sí que contiene información y operaciones básicas comunes al resto del programa y que, por su naturaleza, no están directamente relacionadas entre sí.
- Documentar el código:
Es muy importante aprender cuando y como escribir comentarios en medio del código fuente de cualquier programa. Por ejemplo, en la siguiente sentencia no hay nada que comentar:
x := 1;
Sería inútil comentar esta instrucción pues cuando un programador abre un programa de pascal (y suponemos por tanto, que entiende fundamentalmente el lenguaje) sabrá que se trata de una asignación y que se graba el número 1 en la variable x. Los comentarios han de escribirse para otro programador, no para cualquier persona, a no ser que esa sea explícitamente nuestra intención. ¿Cuantas líneas de sintaxis igualmente sencilla hay en cualquier código fuente? Exacto, muchas. Llenar de comentarios redundantes o que explican algo tremendamente obvio solo incomodará a quien quiera leerlo y entenderlo.
No obstante, sí que resulta útil comentar fragmentos mayores, como una función, indicando sus entradas, salidas, precondiciones y poscondiciones, objetivo y quizás, alguna aclaración sobre su funcionamiento.
function esListaVacia (L: tLista): boolean;
{Objetivo: Devuelve TRUE si la lista L es una lista vacia, o FALSE en caso contrario
PreCD: La lista esta inicializada}
Tampoco estaría de más comentar las condiciones que se dan para detener un bucle cuya lógica sea un poco enrevesada o no demasiado auto-explicativa. Un ejemplo de esto puede ser:
while not (p = nil) and not (p^.num = n) do p := p^.sig;
{Est bucle se detiene si:
- Se llega al final de la lista
- Si el dato num de la posicion p es igual a n}
Otra posibilidad que nos brindan los comentarios es hacer de delimitadores. No hay problema en dejar tres lineas en blanco de separación entre unas funciones con una ligera relación y otras de carácter distinto, como tampoco importará incluir un comentario como el siguiente:
{ ############################## }
Esta linea sin importancia resulta una gran ayuda visual para organizar de forma eficiente el código, algo de lo que también hablaré más adelante.
No puedo terminar el apartado dedicado a la documentación sin hablar de la función principal de los comentarios. Es precisamente comentar una determinada instrucción o una porción de nuestro trabajo y a eso mismo ha de ceñirse, y no se han de utilizar para escribir grandes explicaciones o hablar de aspectos que no son los propios de ese código. Para eso podría recurrirse a la documentación externa, un archivo independiente donde comentar más profundamente aspectos teóricos, decisiones tomadas o desarrollar razonamientos que ayuden a entender el planteamiento general (y más abstraído del código) del programa.
- Seguir un orden al escribir código:
En casi cualquier lenguaje de programación existen sentencias o palabras de la sintaxis del lenguaje que requieren una apertura y un cierre, o el uso de más de una palabra. Por ejemplo, las palabras BEGIN y END de Pascal. Por cada BEGIN que escribamos, deberá haber otro END, así que no es descabellada la idea de que nada más escribir el primero, colocar ya el segundo y luego escribir el código en medio de ambos. Esto ayudará a no olvidarnos de ningún cierre. Lo mismo se aplica a las aperturas y cierres de paréntesis, llaves, corchetes, etc.
Incluso sentencias selectoras como IF requieren otras palabras: THEN y ELSE, por lo que nada más escribir uno, estaría bien escribir los otros dos. Lo mismo para CASE, WHILE, FOR, etc.
- Como indentar (tabular) el código:
Para que cualquier fragmento resulte más legible se puede decir que es necesario tabular las sentencias según su jerarquía en el algoritmo, y emplear también de forma inteligente los saltos de línea. Un ejemplo de lo que NO hay que hacer:
write ('escribe n: '); readln (n); if n=1 then begin write ('hola');
writeln ('aqui n es 1'); end else writeln ('hola, aqui n es otra cosa')
end; write ('escribe i: '); readln (i);
Es mucho más claro:
write ('escribe n: ');
readln (n);
if n = 1
then begin
write ('hola');
writeln ('aqui n es 1');
end
else writeln ('hola, aqui n es otra cosa');
write ('escribe i: ');
readln (i);
La ventaja de tener un código escrito de forma bien clara es que su lectura es mucho más sencilla y parece más fácil de depurar o mejorar. Seguramente por eso tampoco te habrás dado cuenta de que en el primer caso sobra el “end;” que hay al principio de la tercera línea
.
- Dividir el código en partes más simples:
Nuestro profesor de programación repite año tras año la siguiente máxima:
Si ocupa más de lo que un editor de texto puede mostrar en una sola pantalla, es demasiado largo
Razón no le falta en absoluto. Quiere decir que no hay que hacer larguísimos procedimientos de 100 líneas. Ni tan siquiera de 80, 70, 60 o 50. Utilizar unidades tan largas de código es una de las mejores maneras de cometer muchos errores: usar identificadores que ya se han usado, no cerrar parejas tipo begin-end, escribir condiciones con una lógica enrevesada… Vale la pena hacer trozos de 20 o 30 lineas y saber que ese trozo está bien que no tener que andar mirando y remirando el código fuente por n-ésima vez para que al final el error sea un punto y coma no puesto, un paréntesis no cerrado, un nombre reutilizado para algo con lo que no se puede reutilizar, etc. Además, hacer algoritmos más pequeños facilita la corrección de los mismos.
Para terminar esta entrada (que siento todavía incompleta), adjunto un pequeño fichero con un código fuente escrito en Pascal. Es una función que inserta un dato de forma ordenada en una lista dinámica. En la parte superior del fichero se encuentra la función (y la función auxiliar “CrearNodo”) ya terminada. Luego, tras una linea de comentarios a modo de separador se encuentra la función hecha paso a paso hasta llegar al resultado final, para así apreciar cómo yo escribo mi código de forma ordenada.
Ejemplo de cómo escribir código de forma ordenada
MD5: 124518af12d744c50c2356b6166e2ca6
Ubuntu: cambiar los botones de las ventanas
por e1kio el 11 Jun, 2010, en Informática
En Ubuntu 10.04 (Lucid Lynx) se han cambiado la posición de los botones de cerrar/maximizar/minimizar las ventanas, y mucha gente ha querido volver a como estaban antes. Hay un comando que en la terminal los pasa a la derecha de forma directa:
$ gconftool-2 --type string --set /apps/metacity/general/button_layout "menu:maximize,minimize,close"
Y prácticamente lo mismo para devolverlos a la izquierda:
$ gconftool-2 --type string --set /apps/metacity/general/button_layout "maximize,minimize,close:menu"
El secreto está en la palabra “menu” y los dos puntos, que obligará a los botones a situarse antes o después. También se puede cambiar el propio orden de los botones, solo hay que respetar la coma que separe sus identificadores.
Para quien prefiera hacerlo de forma gráfica, en OMG! Ubuntu! publicaban ayer un video de Nixie Pixel con un videotutorial y algo de humor para hacer esto en tres simples pasos:
Y aquí dejo yo unas capturas con los tres pasos del proceso, donde se puede ver el antes y el después…



Minipop: Like I do
por e1kio el 07 Jun, 2010, en Música
Este videoclip, y también la canción en formato mp3, venían con mi teléfono móvil actual. Tardé seis meses en darme cuenta, pero la verdad es que me gusta mucho, tanto la linea de batería como la voz de la cantante; y además el videoclip cuenta con un trabajo artístico muy bueno:
Minipop en Spotify
Escuchar ‘Like I do’ en Spotify
Ozzy Osbourne en el museo de cera
por e1kio el 28 May, 2010, en Sin categoría
Visto a través del blog de música hecho en la FIC: Tanaka Music.
Google ofrece búsquedas cifradas
por e1kio el 28 May, 2010, en Informática
Leo en Linux Journal una entrada de Zach Schneider en la que se hacen eco de que Google ofrecerá cifrado en las búsquedas Google Search (o sea, en su buscador).
Esto viene de algo más atrás: los coches que fotografían calles provistos de cámaras 3D para componer las imágenes de StreetView tambien recogen datos de redes Wi-Fi. En particular, anotan el SSID (el nombre de la red) y la MAC del punto de acceso (el identificador del dispositivo que da cobertura inalámbrica, por ejemplo un router). Lo que en Google no preveían era que también se recolectasen datos que, en el momento del escaneo, circulaban en las redes desprotegidas (redes abiertas sin ningún tipo de clave de seguridad). Hace unas semanas, se acusó a Google de recopilar estos datos y la compañía rectificó a tiempo, publicando una nota con sus disculpas de la forma más diplomática posible.
Con la lección aprendida, no solo revisarán su sistema de recolección de datos, sino que han comenzado a ofrecer en el buscador la opción de cifrar la información, accediendo mediante servidores seguros (https://www.google.com/) y ofreciendo un tipo de cifrado tal y como sucede ya desde hace tiempo en el servicio de correo Gmail.

