Mi blog personal sobre investigación y divulgación
Showing Results for: matlab
De MATLAB a R



Desde hace muchos años trabajo en MATLAB. Comencé en IDL, que es muy similar, pero luego fue necesario adaptarme al lenguaje de programación que usaban (y usan cada vez menos) en el que por aquel entonces era mi nuevo centro de trabajo.

MATLAB es un entorno muy potente para trabajar con grandes cantidades de datos. Puede usarse en Windows, Mac y Linux, aunque en alguna ocasión me he encontrado con alguna pequeña diferencia en las versiones de Windows y Mac, teniendo que hacer pequeñas adaptaciones a scripts que ya tenía hechos. En este blog he escrito varias entradas relacionadas con MATLAB, y hasta ahora no había sentido la necesidad de cambiar de lenguaje de programación (si es que a estos paquetes estadísticos donde trabajamos con scripts se le puede llamar «lenguaje de programación»). El caso es que MATLAB, frente a sus competidores, tiene algunas desventajas muy llamativas que me han invitado a probar con otros. La gran desventaja es que es de pago, con un precio muy elevado, mientras que otros como OCTAVE o R son gratuitos. Por otro lado, y esto puede ser ya cuestión de gustos personales, las gráficas y mapas que se generan con MATLAB me parecen horrendas. Otra desventaja es que puedes necesitar una toolbox en MATLAB que no tienes instalada, o que no existe en la versión que tú estás utilizando, y entonces empiezan los problemas. Un detalle más: guardar una gráfica de MATLAB como fichero gráfico no es más que esperar a que el propio programa haga una captura de pantalla, por lo que esa captura depende de la configuración de tu tarjeta de vídeo + pantalla. Generar una misma gráfica (o un mapa) con el mismo script pero en dos ordenadores distintos puede dar resultados diferentes. Eso me parece una chapuza.

Tomar una decisión sobre qué otro lenguaje usar no fue difícil, pues la tentación estaba muy cerca. Algunos de mis colegas ya se habían pasado hace tiempo a R. Me gusta el resultado de las salidas gráficas que consiguen. La sintaxis de este lenguaje no parece muy difícil si ya se está familiarizado con otros lenguajes. Además, es gratis, multiplataforma, y hay una gran comunidad de usuarios en internet. Traducir mis scripts de MATLAB a R me parece una pérdida de tiempo, pero tener que abordar un problema nuevo sí es una buena excusa para empezar en R. Este es el caso y por fin lo he instalado y estoy tratando de correr mis primeros programas. También instalé un IDE, el RStudio (también gratis y multiplataforma), para que el entorno me sea un poco más familiar y contar con unas cuantas funcionalidades interesantes.

R Studio

Pues eso, de la directora de «Me olvido de Windos y me paso a Linux» llega la nueva entrega «De MATLAB a R». ¡A ver en qué termina la película! 🙂


Identificar con MATLAB valores repetidos en un vector

En el contexto de muchos estudios que podamos estar haciendo con una serie de datos, un problema típico que no encontramos es el de necesitar identificar valores duplicados en un vector. Por ejemplo, puedes necesitar simplemente identificar un registro que por alguna razón se haya escrito dos veces en la base de datos.

Si trabajas con MATLAB seguramente sabrás que hay un comando para identificar valores únicos dentro de un vector (el comando unique), pero hasta donde yo sé no hay uno para identificar valores que están repetidos. Claro, la lógica nos dice que si podemos cuáles son únicos ya tenemos el problema resuelto, porque todos los demás aparecerán en el vector al menos dos veces. El problema es, por un lado, saber cuáles son esos valores y, por otro lado, logran conocer el índice que nos indica la posición de esos valores en el vector. Con esta información podríamos, por ejemplo, construir un nuevo vector que nos sirva de flag para solo marcar los valores repetidos.

Yo me encontré con este problema y lo primero que hice fue lo obvio…programar un loop donde se calculara la diferencia de un valor con el anterior, y si la diferencia era nula entonces ya tenía localizado un valor que se repetía. El problema es que en mi caso esa era una información muy limitada, porque los valores repetidos no tenían por qué aparecer uno después del otro en la base de datos.

Hay varias maneras (similares) de resolver esto, pero yo voy a mostrar aquí la que me resultó más sencilla. Supongamos que nuestro vector, que contiene algunos valores repetidos, es el que llamamos «vector».

Lo primero que hago es identificar los valores únicos (los que nunca se repiten) y sus posiciones en el vector:

[valores_unicos, ind_unicos] = unique(vector);

Luego identifico los índices que me marcan las posiciones de los valores que sí están repetidos. Para ello hago uso del comando setdiff:

ind_repetidos = setdiff(1:length(vector), ind_unicos);

Ahora extraemos los valores de esos registros repetidos:

valores_repetidos = vector(ind_repetidos, 1);

Pero claro, si quiero construir otro vector que me sirva de flag para indicar los datos repetidos, que aparecen dos o más veces, tengo que identificar dónde están esos valores todas las veces que se repitan. Esto puede parecer lioso, pero imagina que tenemos un vector que es [2 2 2 3 4 5]. Con lo anterior lo que hacemos es identificar que el valor repetido es 2 y que ese 2 aparece por primera vez en la posición 1 del vector. Yo lo que estoy buscando es tener un vector que sea [1 1 1 0 0 0], es decir, que me marque con un 1 todos los sitios donde aparezca un valor que aparezca al menos dos veces.

Para ello el siguiente paso es este, donde uso el comando ismember. Lo que hago es pedirle a MATLAB que busque en mi vector cuáles son los índices (posiciones en el vector) donde se encuentra cualquiera de los valores repetidos.

ind_flag=ismember(vector, valores_repetidos);

ind_flag es ya el vector que estamos buscando, el que nos indica con un 1 un valor que está repetido, y con un cero los valores únicos. Para conocer el número de datos repetidos simplemente buscamos en ind_flag todos los valores diferentes de cero (o mayores que cero, o iguales a 1, como prefieras).

numero_repetidos=length(find(ind_flag >0));

Si quieres grabar el vector ind_flag en un fichero de texto, por ejemplo para importarlo en MATLAB en otra sesión de trabajo, o para importarlo en una hoja de cálculo Excel o similar, podrías usar este código:

fid=fopen(‘flag.txt’,’wt’);
formato=’%d\n’;
for i=1:size(ind_flag,1);
fprintf(fid,formato,ind_flag(i,:));
end
fclose(fid)

Y con esto ya tienes el método, que puedes reducir a los cuatro primeros pasos, para identificar todos los valores que aparecen iguales más de una vez en un vector, e incluso crear un nuevo vector para identificar dónde están esos valores.

Libro recomendado (enlace afiliado):





Guardar una matriz formateada en un archivo de texto en MATLAB

Este post debería en realidad llamarse algo así como «Cómo guardar una matriz con formato en un archivo de texto con MATLAB, y no morir en el intento».

Es muy posible que si usas MATLAB y tienes un set de datos guardados en una matriz, quieras guardar esa matriz en un fichero de texto. Esto puede servirte para cargarlos en MATLAB posteriormente, o usarlos con otro programa como puede ser Excel. Hay muchas maneras de hacer esto, pero cuando queremos guardar cada columna con un determinado formato la cosa se complica un poco. Se complica porque hay que empezar a lidiar, por un lado, con la definición del formato y, por otro lado, con las formas aveces poco lógicas de trabajar en MATLAB. Que sí, que es un software fantástico, pero aveces tiene detalles y caprichos que dan ganas de tirar la toalla con él.

Una de las formas de guardar nuestra matriz de datos en MATLAB es usar el comando fprintf. Con pfrintf puedes especificar el formato con el que quieres escribir cada columna de la matriz (puede que una columna sea un número con 4 decimales, otra sea un número entero, otra sea una cadena de texto…). Las normas para aplicar el formato deseado son las que encontrarás aquí. El caso es que, una vez escrito el formato, podrías encontrarte con una desagradable sorpresa como me ha pasado a mí, y es que siguiendo el típico ejemplo que Mathworks escribe en web o en la ayuda de MATLAB, solo consigues escribir valores de la primera columna pero ordenados en filas hasta que se acaban y comienzan a escribirse valores de la segunda columna y así sucesivamente. Voy a poner un ejemplo para que se entienda mejor lo que quiero decir:

Supongamos que tenemos un set de datos que consta de 4 columnas con 4 filas. La primera columna es temperatura dada con un decimal, la segunda es año, la tercera es mes y la cuarta es día (en estas tres últimas columnas todos los valores son enteros). Entonces, nuestra definición de formato sería algo así: formato=’%5.2f %d %d %d\n’    Tenemos 4 filas, lo que quiere decir que lo que queremos guardar es un registro de cuatro medidas de temperatura con su correspondiente fecha. Podría ser algo así:

temperatura=[10.25; 40.36; 28.50; 3.32]

agno=[2003; 2003; 2003; 2003]

mes=[12; 12; 12; 12]

dia=[25; 25; 25; 25]

datos=[temperatura, agno, mes, dia]

Muy bien, pues es muy posible que para grabar este set en un fichero y con el formato que queremos probemos con esto:

formato=’%5.2f %d %d %d\n’

fid=fopen(‘ficherodatos.txt’,’w’);

fprintf(fid,formato,datos);

fclose(fid);

————–

La \n es para empezar a escribir en una nueva línea tras escribir los primeros valores de cada columna. %d es para escribir números enteros, y el %5.2f lo hemos puesto para escribir la temperatura con dos decimalos. El 5 en %5.2 significa que pueden haber 5 caracteres de texto en total, contando la parte entera, el punto y los dos decimales.

La desagradable sorpresa es que fichero de texto que se ha grabado tiene esta pinta:

Fichero de texto MATLAB

Como ves, ha escrito cuatro columnas pero con los valores de la temperatura primero, luego los años, luego mes y finalmente día, eso sí, con el formato que le pedimos. Pero no es el orden en el que queremos los datos!

La solución es escribir un pequeño código con un sencillo loop, como este:

fid=fopen(‘ficherodatos.txt’,‘wt’);

formato=’%5.2f %d %d %d\n’ ;

for i=1:size(datos,1);

    fprintf(fid,formato,datos(i,:));

end

fclose(fid)

Ahora sí, si abrimos el fichero de texto resultante nos encontramos con esto:

Archivo de texto MATLAB

Esto sí es justo lo que queríamos. En el código de arriba verás que en la instrucción fid he puesto ‘wt’ en vez del ‘w’ que teníamos al principio. Esto es para indicarle que queremos escribir en un fichero que es un fichero de texto y que debe adaptarse a las directrices seguidas por los ficheros de texto en el sistema operativo donde estés ejecutando este código. Esto puede interesarte o no. Lo que he hecho es comprobar cuáles son las dimensiones de la matriz datos y hacer un loop desde 1 hasta el número de datos en cada columna (esto es, el número de filas). Dentro del loop he ordenado a MATLAB que escriba las filas de la matriz datos, una a una, en el archivo ficherodatos.txt con el formato deseado.

Ahí queda este tip por si lo necesitas en algún momento. A mí además me sirve escribirlo aquí para no perder estos apuntes entre cientos de papeles. 🙂


Cómo repetir elementos de un vector en MATLAB

Hoy descubrí una función de MATLAB hasta ahora desconocida para mí, llamada kron. El descubrimiento surgió de la necesidad de solucionar este aparentemente sencillo problema: ¿cómo repetir n veces cada uno de los elementos de un vector, de manera que se repita el primer valor, luego el segundo, y así sucesivamente?

Para verlo más claro, veámoslo con números. Supongamos que tengo un vector cuyos elementos son 1, 2, 3, 4 y 5,  y lo que quiero conseguir es un vector cuyos elementos son 1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5. Es decir, quiero repetir 4 veces cada uno de los elementos.

Para hacer esto sin necesidad de programar un bucle con un clásico for, podemos usar la función kron de esta manera:

kron(x, ones(n,1))

En el caso del ejemplo que puse arriba, habría que escribir:

>> nuestrovector=[1,2,3,4,5]

> resultado=kron(nuestrovector, ones(4,1))

>> resultadofinal=reshape(resultado,1,size(resultado,1)*size(resultado,2))

Y entonces resultado sería nuestro nuevo vector donde ya tenemos los elementos repetidos.

Kron, viene del producto de Kronecker (aquí puedes ver la documentación de Mathworks sobre esta función de MATLAB) que podemos aprovechar para solucionar nuestro problema.


Cómo cambiar el tamaño de símbolo en una leyenda de MATLAB

Llevo unos días tratando de resolver un problema aparentemente muy tonto en una gráfica hecha con MATLAB, pero por mucho que he estado buscando en la ayuda del programa y en internet, no daba con la solución. El problema es el siguiente: representas una serie de datos en una gráfica y añades a la gráfica una leyenda, pero quieres que los símbolos de las leyendas aparezcan en un tamaño más grande que el que tienen por defecto. Parece una tontería, pero por lo visto MATLAB no permite modificar el tamaño de los símbolos de la leyenda de una forma tan intuitiva como lo permite hacer para los símbolos en la propia gráfica.

Voy a poner un ejemplo visual. Esta es una gráfica del tipo scatterm, es decir, una serie de puntos localizados en las coordenadas x e y a los que les asignamos valores. El dimátero del círculo varía con ese valor.

plot1

En la leyenda, arriba a la derecha, puedes ver que el punto al lado de la palabra «data1» es muy pequeño, quizás extremadamente pequeño para incluirlo en una figura para publicar o añadir a una presentación. Pues bien, después de leer mucho y juntar varias posibles soluciones, esta es la solución a la que llegué para hacer esto en la versión R2010a de MATLAB (y creo que funciona desde esa versión en adelante):

– Una vez representada la gráfica, escribe esto en la ventada de comandos

I=findobj(gcf,'tag','legend');
a=get(I,'Children');
set(get(a(1),'Children'),'markersize',20);

El número que está señalado en rojo es el que debes cambiar hasta conseguir el tamaño que quieras. Con un valor de 20, yo conseguí este resultado:

plot2

La propiedad ‘markersize’ de las leyendas parece ser que se podía cambiar más fácilmente en versiones anteriores de MATLAB, pero si tratas de hacerlo como indican algunos usuarios en diferentes foros de la red te encontrarás con el error ‘there is no ‘MarkerSize’ property in the ‘hggroup’ class’. De esta otra manera que te propongo aquí sí te debería funcionar.

En el caso de que tengas muchos símbolos en la leyenda, tienes que tener en cuenta que tanto símbolos como textos de la leyenda se guardan en la variable que hemos llamado «a». Si tienes un segundo símbolo, puedes hacer lo mismo que antes pero con a(3) y verás que ese símbolo también cambia de tamaño. Jugando un poco con esto conseguirás que los símbolos de las leyendas sean bien visibles.

Espero que este truco te sirva en tus trabajos. Yo lo estoy usando con mapas de este tipo pero referenciados a coordenadas de latitud y longitud, sobre un mapa geográfico (es algo que no puedo hacer con Veusz), y ahora sí que quedan bien las leyendas.

ACTUALIZACIÓN: Misterios de la informática….al grabar la figura a un archivo gráfico (tanto en jpg, como en tiff, eps, etc.) encuentro que el cambio en el tamaño del símbolo de la leyenda desaparece. Esto no ocurre en todas las figuras pero en algunas de las que tengo ya hechas sí que ocurre. La solución está en ir al Export Setup dentro de el menú File de la figura, seleccionar Rendering y allí activar Custom Renderer (a mí me funciona con painters (vector format) en el menú desplegable), luego aplicar a la figura y luego OK. Ahora el cambio sí se verá reflejado cuando grabes la figura en un fichero gráfico.


Actualizando de OSX Snow Leopard a El Capitan

Después de tantos años con el sistema operativo original de mi MacBook Pro de verano del 2011, el OSX 10.6.8 Snow Leopard, por fin me atreví a actualizarme a la nueva versión El Capitan. No es fácil que yo actualice un sistema operativo. Si me funciona todo bien, para qué cambiar. Si puede ocurrir que algunos programas importantes para mí luego no sean compatibles, para qué arriesgarme.

Este último fue el motivo principal para no actualizar después de un tiempo pensando en hacerlo. Había leído que el MATLAB R2010a no iba a funcionar, y lo necesito para hacer cálculos. También había leído que el Logic Pro nunca funcionaría con este nuevo OSX, y eso significaba que podía perder el secuenciador donde principalmente hago mi música en mis ratos libres. Aún así hoy me arriesgué y, tras hacer ayer una copia de seguridad con Time Machine, bajé El Capitan y lo instalé.

Primer «incidente»: la descarga a través de la App Store era extremadamente lenta. Buscando en foros encontré que es un problema habitual y que se podría solucionar añadiendo unas direcciones DNS a la configuración de red. Lo hice y la cosa empezó a mejorar.

Segundo «incidente»: sí, sé que parece una tontería, pero el ordenador comenzó a hacer ruidos que provenían de pulsaciones de las teclas de función. Quien pulsaba las teclas era Señor Newton, que se puso cómodo sobre el teclado. 🙂

gato ordenador

Tras conseguir que Newton bajara de su improvisado asiento, la instalación tardó muchísimo en terminar, entre la descarga y esas instalaciones en las que por una hora ves un mensaje que te informa de que restan 29 minutos para finalizar. El tiempo es relativo, dicen.

Finalmente, todo funcionando y sorpresa: algunos programas que muchos usuarios decían (foros, redes sociales…) que no iban a funcionar, sí lo hacen. Por ejemplo, el Logic Pro funciona perfectamente, solo que algunos plugins no son compatibles (solo 5 de entre más de 400 en mi caso). Mi versión de MATLAB no funcionaba pero me indicaba que podría hacerlo si instalaba una versión anterior de Java, y me proporcionaba un enlace. Ese enlace me llevó a una página de Apple donde hay una versión de Java 6 especial para que programas antiguos funcionen en el nuevo OSX. MATLAB también necesita ejecutar X11, y lo han resuelto a través de un proyecto de Apple que se llama XQuartz, creado para dar soporte de X11 a OSX.

Siguen funcionando programas importantes para mí como UltraEdit, Tunnelblick, VNC Viewer, iMovie o el paquete Office, R Studio, Papers 2.1.12, o VeusZ. Además, por fin he podido instalar Writefull App, un interesantísimo programa del que ya escribiré con detalle en otra entrada.

Me temo una disminución de la velocidad en el ordenador (o al menos esa es mi primera impresión) y algunas nuevas cosas a las que deberé acostumbrarme, pero creo que ha valido la pena el cambio. Además, he aprendido que no siempre hay que hacer caso a los que dicen que dejará de funcionar tal o cual programa, porque las incompatibilidades no eran tantas como pensaba tras leerles. En resumen, creo que tendría que haber dado este paso adelante hace mucho tiempo y no temer tanto a las actualizaciones.


Programar es el nuevo inglés

Hace unas semanas leí en Twitter esta frase que he puesto en el título: «Coding is the new English». Efectivamente, hasta hace poco tiempo saber inglés podía ser el elemento diferenciador entre dos personas con similar currículum. Saber inglés como lengua extranjera no solo aumenta nuestros conocimientos y nuestras posibilidades, sino que demuestra que hemos sido inquietos y hemos querido ir más allá de lo que nos enseñaron en el colegio/instituto/universidad.

Libros de programación

El caso es que, como ya se asume que el inglés es el idioma para todo (al menos en ciencia así es) y debemos utilizarlo sí o sí, este idioma ya no es el elemento diferenciador. Todo el que se dedique a ciencia, ingeniería y seguramente cualquier profesional en cualquier otra área, se supone que se defiende razonablemente bien en inglés. En ciencia, por ejemplo, no se concibe que no sepas leer bien en inglés, pues todas las publicaciones internacionales y muchísima de la información que necesitas está en ese idioma. Y no solo leer, porque cuando tienes que escribir lo que llamamos un «paper», es decir, un artículo científico, o un poster para un congreso internacional, también tienes que ser capaz de hacerlo en inglés. Hablar en inglés también es fundamental para dar una charla en un congreso o para relacionarte con colegas de otros países. Como todo esto se asume como normal y ya forma parte de la vida diaria de casi todos, el inglés ya tiene que venir en nuestra configuración por defecto 🙂 y hay que diferenciarse por otras cosas. La clave ahora, estoy de acuerdo con el que formuló la frase que da pie al título de esta entrada, es la programación de software.

Programar, o «picar código» como siempre han dicho los programadores, es algo que deberías tener en tu lista de cosas que aprender si estás empezando en esto de la ciencia. En algún momento puede que necesites hacer un análisis estadístico de datos que podrías hacer de manera más rápida y eficaz (puedes usar el código para otra ocasión) si escribes un programa en cualquier lenguaje de programación (Fortran, Phyton, Java….el que quieras) o un script en un entorno de los pensados para este fin (Matlab, R y similares). Podrías incluso necesitar hacer software que no fuese específicamente para tratamiento estadístico relativamente sencillo, sino modelos de cualquier tipo, redes neuronales, reconocimiento de patrones, programas para tratamiento de imágenes (muy típico, por ejemplo, en medicina), simulaciones de biofísica, …. seguro que se te ocurren cientos de problemas que podrías resolver haciendo tu propio programa. Los economistas y analistas de todo tipo también se benefician del saber programar. Con esto último quiero decir que no solo es deseable que sepan programar los científicos, por supuesto los informáticos, o los ingenieros, sino que todo esto es aplicable a muchísimas profesiones, incluidas las «de letras».

Hoy en día, en mi opinión, no puedes permitirte llegar a un trabajo y, a la hora de necesitar programar, decir eso de «es que no me enseñaron en clase», o «es que a mí no me gustan los ordenadores». He visto gente en ciencia decirme que no sabe descomprimir un archivo, que no sabe instalar un programa, o que solo sabe usar Excel para tratar datos. Esto no debería ocurrir porque hoy en día todos tenemos un ordenador con conexión a internet y una fuente inagotable de recursos gratuitos (no ilegales, sino libres) a nuestra disposición. Lo que hace falta son ganas de aprender a usar las herramientas. Ganas de aprender de manera individual. Inquietud por aprender cosas nuevas por nuestra cuenta. Si esas ganas de aprender las focalizamos, al menos en parte, a aprender a programar, nos va a ser muy útil en el mercado laboral y nos va a diferenciar de otros. Yo no soy una experta programadora, pero me defiendo y suelo ser capaz de crear los programas que necesito para trabajar. Si no lo pudiese hacer entorpecería mucho mi trabajo, lo ralentizaría mucho, y además no me habrían surgido algunos bonitos retos laborales que he vivido.

Si no lo has hecho ya, te invito a que busques información sobre lenguajes de programación, elijas uno y aprendas a programar algo. Poco a poco, según las necesidades que vayas teniendo, irás buscando más información y aprendiendo más. La programación es como un edificio que empieza siempre con el típico «Hola mundo!» en pantalla y puede acabar siendo un rascacielos con vistas maravillosas.

Mi próximo reto es aprender Python. Ya estoy en ello. Sabiendo programar en otros lenguajes el reto no parece extremadamente complicado. Lo anterior fue aprender a hacer apps para móviles, que además de útil es muy divertido. ¿En qué lenguajes de programación hablas tú?


Dedicado a los hackers (los de pacotilla)

Hoy no puedo más que escribir un post de esos que se escriben bajo enfado. Un enfado causado por el hartazgo de que algunos a los que llamaremos «hackers» (aunque yo no creo que merezcan que les llamemos así) se dediquen a atacar blogs como este, de una persona cualquiera que solo lo escribe por una serie de razones que ya comenté aquí. Y te preguntarás por qué un hacker quiere atacar un blog como este en vez de fijarse unos objetivos más altos. Pues resulta que generalmente no se trata de nada personal, y ni siquiera sabrán quién soy o lo que publico, sino que tratan de entrar al azar en muchísimos blogs hasta que lo consiguen y entonces hacen sus fechorías.

Phising

Desde que publico en blogs he visto cómo periódicamente caen por culpa de estos hackers de pacotilla. Buscan vulnerabilidades en el gestor de contenidos (en este caso WordPress, pero lo he visto también con Joomla!), puertas traseras debidas a bugs en los plugins que estén instalados o en las plantillas que hacen que veas el blog como lo ves y no con otra apariencia. Lo hacen de manera aleatoria, escaneando la web en busca de páginas potencialmente hackeables y luego intentan entrar como si fuesen el administrador de la página. Tengo instalado un plugin que me avisa cuando alguien intenta acceder al panel de administrador de este blog, y en los últimos días me han llegado muchísimos mails con avisos del intento de entrada desde diferentes IPs. Están intentando entrar claramente por el método llamado «método de la fuerza bruta», esto es, probando al azar combinaciones de nombre de usuario y contraseña hasta que lo consigan.

¿Y cuál es la fechoría que pueden hacer? Si fuera una cosa personal lo típico es que destrocen la web, dejen algún mensaje, o cualquier cosa de las que todos hemos visto en prensa cuando hackean webs de partidos políticos, instituciones o similares. Sin embargo, en el caso de blogs como este que no tienen ningún interés para ellos, su objetivo es instalar scripts maliciosos para hacer phising. Esto es lo que hicieron con este mismo blog hace pocos meses, lo que me obligó a reinstalarlo cambiándole apariencia y un montón de cosas más, y seguramente es lo que están intentando hacer otra vez.

El phising consiste en algo así como suplantar la identidad de otra página web, web en la que tendrías que introducir tus datos, por ejemplo, los datos de tu tarjeta de crédito, passwords u otra información importante a través de la que pudieran robarte datos. Obviamente, normalmente son webs de bancos o, como ocurrió en mi caso, la web de Paypal. Cuando consiguen entrar como administrador en el blog e instalar lo que necesitan, los timadores redireccionan a los timados a lo que realmente es tu página, y les roban su información (que terminará en un robo de dinero) a través de tu página. Así de simple. Todo su esfuerzo en hacker este blog, como con muchísimos otros, es tratar de robar dinero a los demás.

El hecho de que hackeen tu web para robar a gente duele. Yo estuve la vez anterior rompiéndome la cabeza para arreglarlo rápido, no porque quisiera que mi blog volviera a estar online enseguida, sino porque solo pensar que podían estar robando a gente a través de mi página me ponía los pelos de punta. Ahora me llega un aviso de mi proveedor de hosting avisándome, como siempre, de que si no soluciono este problema me cancelarán el servicio. Avisan, por supuesto, de que hay que tener todos los scripts actualizados, todo al día para que no se puedan colar a través de posibles vulnerabilidades, y además no instalar malware (vamos, que no seas tú mismo el que está intentando hacer la trastada). Obviamente yo no instalo nada que pueda dañar a los visitantes de mi blog. Tampoco quiero robarles en su cuenta corriente, ni me interesan sus passwords. Ni yo, ni la gran mayoría de los bloggers que sufren este problema.

Pues bien, entras en el ftp, en el panel de administración y en todo lo que puedes tocar, y no encuentras nada o borras lo que encuentres. Tienes todo actualizado. Y siguen llegando los ataques. ¿Qué haces? ¿Perder todo tu tiempo en tratar de que unos ladrones no te utilicen? ¿Cómo puedes llegar a convencer al proveedor de hosting de que no has hecho nada malo, de que lo estás intentando arreglar y ya no se te ocurre nada más que hacer, y de que esto ocurre al azar y me tocó a mí como le puede tocar a cualquiera? Yo ya no lo sé.

Todo esto lo escribo tanto para los visitantes habituales que pueden encontrarse que el blog no está online, como para los demás bloggers que busquen información sobre este problema. Si los hackers de pacotilla (más bien ladrones, porque los hackers de verdad son otra cosa) siguen haciendo de las suyas, tendré que desistir y dejar de publicar en el blog. Yo tengo ciertos conocimientos sobre el tema, básicamente porque siempre me ha gustado el tema de la seguridad informática y el tema hacker, y sin embargo ya no se me ocurre nada más que hacer que no me lleve muchísimo tiempo. Señores «hackers»: si siguen fastidiando, la divulgación de la ciencia, de truquillos de MATLAB, los comentarios de noticias sobre ciencia y todo esto lo van a tener que hacer ustedes porque yo lo tendré que dejar. Muchas gracias por contribuir así al intercambio de conocimiento.

Si lees esto y eres uno de esos hackers de pacotilla que busca blogs con vulnerabilidades, aprende a ser un hacker de verdad y haz algo productivo.


Escalas de color en diferentes formatos

 

A la hora de representar un gráfico (especialmente si se trata de un mapa), la elección de la escala de color puede ser crítica para la correcta interpretación de la información. La correcta elección del mapa de color, o de los límites de la escala de color, es un tema de discusión habitual entre científicos. En la red pueden encontrarse artículos muy interesantes sobre este tema, como «How not to liew with visualization«, o mi favorito «The ‘jet’ colormap must die!» donde su autor explica cómo puedes crear tus propios mapas de color con MATLAB.

En alguna ocasión he invertido mucho tiempo en pensar qué mapa de color es el adecuado para alguno de los mapas que represento en mis trabajos, probando unos y otros e incluso modificando algunos ya existentes, principalmente dentro de MATLAB. Hace unos meses encontré una web que me facilitó mucho las cosas y quiero compartirla aquí con todo al que le pueda interesar. Se trata de cpt-city, una web donde podemos encontrar muchísimos gradientes de color en diferentes formatos, para usar en MATLAB, GIMP, Photoshop y algunos programas más.

mapas de color en cpt-city

Algunos de los mapas de color que han recopilado en cpt-city están pensados para expresiones artísticas, sobre todo diseño gráfico y diseño de páginas webs, pero hay algunas pensadas para que las usemos en ciencia. Por ejemplo, tenemos los mapas de color para representar temperaturas, esquemas para representar datos de precipitación, o para representar mapas topográficos, entre otros. Es una buena recopilación de ficheros que nos pueden facilitar mucho las cosas.


Cómo añadir un borde a una imagen en Gimp

Esta entrada del blog no tiene nada que ver con divulgación científica, pero me he propuesto escribir aquí pequeñas notas, a modo de tutorial, sobre herramientas que voy descubriendo y que podrían ser útiles a otros en su trabajo. Así de paso me sirve a mí también como apuntes por si olvido cómo hago las cosas. 🙂 Esta vez voy a compartir cómo conseguí trazar el borde de un recuadro para enmarcar una imagen, con el software Gimp. Parece una tontería, pero ni Photoshop ni Gimp permiten de manera directa dibujar una forma como un cuadrado.

Gimp es un programa editor de imágenes, al estilo de Photoshop, pero gratis. Alguna vez había probado su versión para Windows y no me había gustado por el tema de sus ventanas flotantes. Acostumbrada al Photoshop, cualquier otra cosa en Windows me parecía poco. Sin embargo, al pasarme a Linux, ahora el Gimp es una buena opción. Si buscas en internet cómo trazar un rectángulo, o un círculo, en Gimp te encontrarás con varias maneras de hacerlo, unas más sencillas que otras. Yo hoy necesité trazar un cuadro a modo de marco en un mapa y me puse a investigar. Después de probar varios métodos y al final tratar de buscar uno por mí misma, este es el que me parece más sencillo.

Captura de mi pantalla, con el Gimp y la imagen donde tracé el recuadro. Haz click para verla más grande.

Primero, obviamente, cargué la imagen, que en este caso es un mapa de Europa (hecho en MATLAB) al que quería añadir el borde negro que ves en la figura de arriba. Con la herramienta de selección de rectángulos (la primera de todas en la barra de herramientas de la izquierda) seleccioné con mucho cuidado los bordes de la imagen. A continuación hice click en el menú Selección y allí en Borde, con «fijar la selección a los bordes de la imagen» seleccionado y un valor de 5 en «Selección de borde en». El siguiente paso fue ir al menú Editar y allí seleccionar la opción «rellenar con el color de frente». El color de frente es el que tengas seleccionado como tal en la caja de herramientas (columna de la izquierda), que en mi caso puedes ver que era negro. Ahora si tocas con cualquier herramienta de seleccion en un solo punto de la imagen, verás el resultado de todo esto.

Para grabar la imagen en uno de los formatos gráficos habituales tienes que ir al menú Archivo y allí a Exportar.

 


Next Page