from_unixtime() con timestamps negativos

La función FROM_UNIXTIME() de MySQL es la que nos permite convertir fechas almacenadas como TIMESTAMP a formato DATE.

Pero a la hora de usarla hay que tener en cuenta una limitación importante de esta, y es que esta función no acepta timestamps negativos, es decir, representaciones de fechas inferiores al año 1970. Por lo que si hacemos esto, nos devolverá NULL:

Una solución para los casos en que las fechas pueden ser timestamps negativos, es obtener la fecha no usando directamente la FROM_UNIXTIME(), si no con la función DATE_ADD(), sumando al timestamp 0, el intervalo de segundos que coincide con nuestro timestamp. De esa forma, tanto si el timestamp es positivo como si es negativo, obtendremos siempre la fecha correctamente:

 

Sustituyendo patrones de texto

Tenemos esta columna con estos valores:

Queremos dejar el nombre del síndrome sin el prefijo disorderType, y quitar los %20 para que queden espacios limpios.
Usaremos gsub()para hacer sustituciones. Le pasamos tres parámetros, el primer es el patrón a buscar, el segundo el patrón por el que sustituiremos el patrón encontrado, y el tercero, la variable donde aplicar estas sustituciones.

Procedemos primero a eliminar el prefijo:

Y después a sustituir los %20 por espacios en blanco:

Saltos de línea con system() de PHP

Cuando queremos ejecutar algún comando del sistema desde PHP, usamos la función system().

Cuando queremos mostrar la salida del comando ejecutado, vemos que tenemos problemas con el formato. Entre otras cosas, se come los saltos de línea, por lo que algo tan simple como un ls, devuelve unos resultados imposibles de leer.

Una forma de ejecutar el comando y obtener una salida que visualicemos con los saltos de línea correctos desde PHP es hacerlo usando la función exec, y imprimiendo desde un array:

 

Librería CURL para PHP

La librería curl de PHP implementa la librería libcurl, y nos permite poder establecer conexiones de todo tipo y a todo tipo de destinos.

Para instalarla a nuestro servidor Ubuntu, haremos lo siguiente:

Una vez reiniciado apache ya podemos usar las funciones de la librería curl de php para establecer nuestras conexiones

Instalar librería externa en repositorio local de Maven

A veces ocurre que necesitamos usar librerías muy específicas que no se encuentran en los repositorios públicos habituales de Maven. En estos casos, la alternativa es instalar esa librería en nuestro repositorio local de Maven, que es el primer lugar donde Maven busca los paquetes antes de consultar los repositorios externos.

Sintaxis de la llamada para instalar .jar

Ejemplo

Instalamos el jar de la librería RCaller:

Ajustar texto al final de la página en Latex

En caso que queramos ajustar al final de la página actual un determinado texto o tabla, en latex podemos hacerlo usando el comando vspace:

Añadir texto a un campo de una tabla de MySQL

Queremos hacer una actualización masiva en una tabla de mysql, que consiste en añadir cierto texto al final del contenido ya existente. Para hacer esto, usaremos la función CONCAT() de MySQL.

El campo que queremos modificar es storageComments, y la tabla mostres. La sentencia de update sería:

Básicos para leer XML con R

Algunas funciones del package XML de R, que nos facilita el trabajo a la hora de extraer información de un fichero XML.

Cargar en memoria fichero xml

Si el valor de xmlMalaltia es este:

Operador [[]] para navegar por los hijos

Valor de un nodo, función xmlValue()

Valor de un atributo de un nodo, función xmlGetAttr()

Lista de atributos de un determinado nodo, función xmlAttrs()

XPath

Esto que hemos visto serían las funciones más básicas para obtener valores de un nodo dado. Pero lo más útil, por lo menos en mi caso, es el poder usar XPath para hacer búsquedas dentro del fichero XML y movernos hacia arriba o hacia abajo de un determinado nodo. Es una herramienta bastente potente y versátil.

Valor de un determinado hijo:

Este es un caso muy sencillo, en el que no tendría demasiado sentido el uso de xPath. Respecto la variable xmlMalaltia, se busca entre sus hijos el nodo

Todos los nodos con un determinado nombre:

Esto nos devolverá, del xml de la variable xmlDiseases, una lista con todos los nodos que tengan por nombre ‘Disorder’, esten en el nivel que esten.

Todos los nodos con un determinado nombre y un determinado atributo:

En este caso, queríamos el nombre (tag Name), tal que su padre (con tag Disorder) tiene un atributo id que tiene por valor 5441. getNodeSet, nos devolvería una lista. Como sabemos que nos devolverá solo un elemento, lo cogemos con el [[1]] del final. El parámetro fun, es la función que ejecutará para cada valor de la selección, y el valor que nos devolverá (tipo función apply de R).

Otro ejemplo similar al anterior, en el que sí nos interesa la lista de nodos xml, por lo que no ejecutamos xmlValue:

Todos los subnodos con un determinado Tag:

En este caso obtenemos todos los nodos con nombre Disorder, que esten por debajo del padre de xmlMalaltia.

Aquí vemos que los dos puntos (..) en el path, sirven para subir un nivel en la jerarquia del nodo actual (xmlMalaltia).

Vemos tambien el uso de expresiones xPath Axes, que nos devuelven nodos relacionados con nuestro nodo actual. En este caso, todos los descendentes  del nodo actual, mediante la palabra descendant. Tenemos otras palabras útiles de Axes como ancestor, child, etc.  (lista completa de xPath Axes en w3schools: http://www.w3schools.com/xpath/xpath_axes.asp).

Salto de línea en celda de tabla Latex

Cuando queremos hacer un salto de línea en una celda de una tabla en Latex, no podemos hacer como si estuviéramos fuera de la tabla, por lo que no nos servirá la doble barra invertida. Esto lo que haría sería empezar una nueva fila de la tabla, empezando por la primera columna otra vez.

Hay algunos paquetes que permiten el hacer los saltos de línea dentro de la celda, pero una forma rápida y segura es mediante el comando parbox:

Em 3.5 ponemos el tamaño de la celda, y el contenido hará el salto de línea donde indiquemos, ampliando el alto de la fila. Si no cabe el texto en el ancho especificado, el mismo hará los saltos de línea que sean requeridos.

Parámetros adicionales a función llamada con sapply

Tenemos una función a la que queremos llamar para cada uno de los objetos de una lista. Para hacerlo de forma eficiente lo queremos hacer con sApply(), y no haciendo un for() o un while(). La función a la que queremos llamar, además del propio objeto sobre el que se hace la llamada, tiene un segundo parámetro que tenemos que pasar.

Esta es la función en cuestión:

De los dos parámetros, el primero se lo pasará la función sApply, y será uno de los elementos de la lista de sApply. Pero el segundo parámetro, cómo se lo pasamos?

La función sApply (o simplemente apply, o sus derivadas), tiene el parámetro ‘…’, por lo que acepta en su llamada cualquier parámetro adicional no especificado en la lista formal de parámetros. Todos estos parámetros adicionales que pasemos, apply los pasará directamente a la función llamada. Por lo que, podemos hacer la llamada a sApply añadiendo el parámetro idDisease de la forma:

SApply() pasará este valor como parámetro idDisease de la función ancestorsFunction().