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:

 

Consumir webservice de Drupal desde PHP

Con esta entrada veremos la forma (una forma) de consumir desde PHP un servicio web publicado mediante Drupal. Lo haremos usando la librería Client URL, cURL, que es una implementación de libcurl para PHP, y que nos permite hacer todo tipo de peticiones desde PHP.

El servicio web en cuestión publicado desde Drupal, es de tipo RESTful, y la particularidad más destacada que tiene es que la autenticación funciona mediante cookie. Esto significa que toda llamada a una función de ese servicio web debe llevar consigo una cookie con una sesion establecida previamente con el servidor.

Entonces el procedimiento cuando queremos hacer una petición a una función del servicio, inicialmente haremos una primera petición para autenticarnos y obtener una cookie con la sesión. Una vez hecho esto ya podremos hacer la petición a la función que queramos del servicio, adjuntando la cookie que hemos obtenido en la petición de autenticación.

El código

Vamos a ver el código en cuestión:

Haciendo las peticiones detrás de un proxy

En nuestro caso, tuvimos que añadir adicionalmente la configuración del proxy de nuestra red, puesto que para salir a Internet lo hacemos mediante un servidor proxy. Para hacer esto, simplemente añadimos dos opciones más al objeto curl: la url del proxy y su puerto:

Y esto es todo.

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:

Han desaparecido todas las impresoras de la carpeta de impresoras del sistema

Al intentar imprimir desde un programa, da error diciendo que no tenemos seleccionada una impresora por defecto.

Al mirar a la carpeta de impresoras del sistema, vemos que han desaparecido todas las impresoras, no hay ninguna.

Solución:

Esto pasa porque se ha producido un error con el servicio de cola de impresión y o o bien ha dejado de funcionar correctamente, o está parado. Por lo que debemos volverlo a iniciar. El servicio como tal es spoolsv.exe (en Win XP lo encontramos en la carpeta C:WINDOWSsystem32).

Podemos reiniciarlo desde Panel de control > Herramientas Administrativas > Servicios. En la lista buscamos el servicio ‘Cola de impresión‘. Botón derecho y damos a ‘iniciar‘.

En nuestro caso, por alguna razón no aparecía el servicio en la lista de servicios, así que buscamos un método alternativo. En este caso fue iniciar el servicio desde línea de comandos:

  1. Abrimos línea de comandos de Windows (Botón inicio, y en ejectar escribimos ‘cmd‘ y pulsamos Enter)
  2. Ejecutamos el comando:

Hecho esto, vuelven a aparecer todas las impresoras en la lista de impresoras del sistenma, y todo vuelve a funcionar perfectamente.

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:

Cambiar MAC address de una tarjeta Ethernet

Después de reiniciar el PC, no hay manera que este se conecte a Internet, ni tan solo a la red local.

Solución:

Mediante ipconfig /all, vemos que la MAC Address de la tarjeta ethernet es 00:10:18:00:00:00, y que la dirección IP que se le ha asignado desde el servidor DHCP no tiene un formato correcto.

Con esto ya vemos que la dirección MAC no tiene un valor demasiado normal, por lo que parece que la tarjeta ha perdido su dirección original (nunca lo había visto…). Teniendo en cuenta que en nuestra red a los equipos se les asigna una dirección IP en función de su dirección MAC, ya vemos el motivo por el cual no tenemos Internet…

Entonces, la solución pasa por reestablecer la dirección MAC de la tarjeta de red a su numeración inicial. Para hacer eso, seguimos los siguientes pasos:

  1. Administrador de Dispositivos‘, y seleccionamos la tarjeta ethernet correspondiente. Botón derecho, y hacemos click en ‘Propiedades’.
  2. Nos dirigimos a la pestaña ‘Opciones avanzadas
  3. En la lista de propiedades, buscamos la propiedad ‘Network Address
  4. En su derecha, escribimos la nueva dirección que le queremos asignar.
  5. Aceptamos los cambios para que se guarden.
  6. Teoricamente, se dice que hay que reiniciar el PC para que estos cambios hagan efecto en la configuración de la tarjeta ethernet. En mi caso no hizo falta…
  7. Podemos asegurarnos de si se ha hecho o no el cambio, haciendo otra vez ipconfig /all desde la línea de comandos.

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).