Entradas

Cambiar carpeta personal en Linux

Imagen
En ciertas ocasiones nos puede interesar almacenar nuestros archivos personales en una ubicación diferente a la carpeta home  de Linux, pero al mismo tiempo nos convenga acceder a ellos como si estuvieran allí. Por ejemplo, si usamos dual boot  con Windows y Ubuntu, o tenemos Linux instalado en una máquina virtual, es buena idea enlazar nuestra carpeta personal al directorio donde tenemos nuestra información. Ya que los sistemas operativos actuales clasifican los archivos de forma similar, es recomendable mantener la carpeta personal original de cada uno individualmente (para configuraciones y archivos que no queramos compartir) y vincular cada directorio (Documentos, Imágenes...) a la carpeta correspondiente en la ubicación maestra. Más abajo ofrezco un script en Bash que hace esto mismo: renombra cada carpeta de nuestro home  (o la ubicación que escojamos) y crea una serie de enlaces a los directorios que guardan nuestra información. Se configura fácilme...

Uso de switch en programación

Imagen
Orange switches artwork. Valentin Ruhry. ¿Para qué sirve la sentencia switch en C/C++ o Java? ¿Por qué los profesores insisten en que lo usemos, porque es más bonito? ¡Pues sí! No olvides que un código claro favorece una lectura más comprensible. Pero no somos nosotros los únicos que nos beneficiaremos: nuestro programa puede ser más eficiente. Recuerda que cuantas más y mejores pistas demos al compilador, mejor código podrá generar . Es cierto que un switch tiene el mismo diagrama de flujo que un if-else , pero es más estricto respecto a la condición. En primer lugar sólo admite expresiones constantes , y en segundo estamos usando etiquetas , con lo que se lo estamos poniendo muy fácil al compilador para que genere una tabla de functores . Precaución : no utilices etiquetas y sentencias goto en C/C++. Por ejemplo, supongamos este sencillo código en C: if (x == 1) a(); else if (x == 2) b(); else if (x == 3) c(); else if (x == 5) d(); else error(); Es mu...

Búsqueda paralela de números primos

Imagen
"Sieve for Seven", Scot Nelson . Los números primos son aquellos números naturales mayores que 1 que sólo tienen dos divisores: el 1 y él mismo. Hay muchos problemas en Matemáticas relacionados con los números primos, algunos de ellos aún sin resolver, como la Conjetura de Goldbach . El objetivo de hoy será hallar todos los números primos hasta 2·10 9 . Existen varios algoritmos para obtener listas de números primos, tal vez el más común sea la criba de Eratóstenes , que consiste en escribir una lista con todos los números que queremos estudiar y, partiendo del primero, tachar todos sus múltiplos, y repetir el proceso cada vez con el primer número que no hayamos tachado. Este algoritmo presenta dos problemas: Es destructivo (consiste en descartar), por lo que a priori consume demasiada memoria, y mucho tiempo en escribir candidatos. Eliminar objetos de una lista impide trabajar con ella desde otra hebra, ni siquiera para iterar, con lo que perdemos la posibilid...

Algoritmo de relleno

Imagen
Esta historia parte de un pequeño proyecto de antaño en el que intenté implementar la herramienta de relleno de Paint o Photoshop. Estamos hablando de un algoritmo de relleno por difusión : el objetivo es pasar por todos los puntos no coloreados partiendo de uno arbitrario y la solución se antojaba sencilla: un algoritmo de  backtracking .  Estuve cerca de lograrlo pero cuando la superficie a rellenar era medianamente grande, el programa se colgaba por desbordamiento de pila . El problema es que, al tratarse de una función recursiva , con cada paso que daba había que guardar en la pila el punto anterior, y si el espacio es grande podemos estar hablando de miles o millones de pasos. Esta información se guarda en la pila de llamadas , una zona de memoria especialmente rápida... y pequeña. La solución es muy fácil: convertir la función recursiva en iterativa , y guardar cada punto a explorar dentro de un contenedor de pila ( QStack en la biblioteca Qt), cu...

Milestones en Alexis Viernes

Imagen
Los Milestones volvemos a la carga y estaremos este fin de semana en Alexis Viernes ,  un conocido restaurante sito entre Atarfe y Santa Fe, con música en vivo. Tocaremos versiones de los 70's y 80's, junto a temas más actuales. Entre nuestro repertorio están Donna Summer, Elvis Presley, Tina Turner, Blues Brothers y Bee Gees. ¡La entrada es gratis!  Os esperamos allí el sábado a las 12 de la noche (entre sábado y domingo).

Entrada de emergencia en Windows

Imagen
Ayer eliminé por accidente todos los administradores de mi ordenador. Sin administradores no podremos realizar cambios en el equipo, así que podemos, o bien reinstalar Windows, o bien solucionar el problema más elegantemente.  Hoy vamos a ver cómo entrar en Windows, aprovechando una vulnerabilidad de seguridad . Será como olvidar las llaves dentro de casa, y no tener más remedio que entrar por una ventana abierta —y nunca mejor dicho, hablando de Windows—. StickyKeys   es una característica de accesibilidad de Windows que permite pulsar las teclas especiales de una en una (en lugar de mantenerlas pulsadas) y se activa pulsando la tecla Mayúsculas cinco veces. Lo que hace realmente es ejecutar el programa sethc.exe , y lo mejor de todo: funciona incluso en la pantalla de bienvenida, ¡en modo Administrador! ¿Y por qué no lo cambiamos por la consola? Todo lo que tenemos que hacer es reiniciar el ordenador (en Windows 8 no sirve apagar, porque hiberna el kernel ...

Lenguajes de programación

Imagen
Los lenguajes de programación son los que nos permiten describir programas mediante estructuras de datos y algoritmos . Hay una gran cantidad de lenguajes de programación, cada uno enfocado a un objetivo y con sus pros y contras.  Aunque podemos agruparlos de muchas maneras, se clasifican principalmente en tres paradigmas: Imperativos. Describen mediante instrucciones cómo realizar una tarea. Los más conocidos son C y Fortran. Declarativos. Describen el problema declarando condiciones, proposiciones y restricciones. Aquí tenemos a Prolog y LISP. Orientados a objetos. Utiliza clases y objetos que interaccionan entre sí para diseñar aplicaciones. C++, Java y Python son algunos de ellos. Los primeros son los más clásicos, empezando por el ensamblador, el de más bajo nivel, del que nos abstraen otros lenguajes de alto nivel; son muy eficientes. La programación declarativa no describe la solución, sino el problema; es más expresiva y será el programa intérprete el que...