Definir variable de entorno en PHP

Queremos definir una variable de entorno en PHP, a la que poder acceder en cualquier momento desde la aplicación, y que la podamos definir en un archivo de configuración, pudiendo cambiar su valor según el entorno en el cual ejecutamos la aplicación, sin necesidad de hacer cambios en el código.

Definir variable en .conf

Editamos httpd.conf, añadiendo el include hacia un nuevo fichero de configuracion que crearemos, donde haremos las definiciones de variables que queramos, y que llamaremos occidentalValley.conf.

Añadimos lo siguiente a httpd.conf (normalmente hay un apartado de Includes en httpd.conf, no está de más mantener el order y hacerlo allí…):

En la misma carpeta donde tenemos a httpd.conf, creamos el nuevo archivo de configuración propio, al que llamamos occidentalValley.conf, con las definiciones de variables que queramos, en nuestro caso, este será el contenido:

Esto será todo, ahora desde nuestra aplicación podremos acceder al valor de la variable BASE_PATH, y obtener su resultado, de la siguiente forma:

Con esto terminamos nuestra definición de la variable de entorno en PHP, que nos permitirá definir valores de variables que puedan depender del entorno de ejecución, manteniendo el mismo código.

Merge de GRanges

Al trabajar con la librería Genomic Ranges de R, y sus listas de objetos de tipo GRanges, nos puede interesar de juntar listas de GRanges.

A priori, al parecer un formato tipo data.frame o arrays, uno intenta usar cbind() y rbind() pero vemos que R nos da un error porque no se pueden usar esas funciones para objetos GRanges.

Pues resulta, que al final una lista de objetos GRanges no es más que un vector. Por lo que para unir listas de GRanges tenemos que hacerlo con la función c() de R.

Para añadir la lista que tenemos en grReduced a la lista resultados, habríamos:

Pasar de un data.frame a GRanges

La librería GenomicRanges ofrece una función para convertir un data.frame en un objeto de tipo GRanges, de forma rápida y sencilla: makeGRangesFromDataFrame()

Tenemos un dataFrame, en este caso con una lista de genes, por lo tanto, representando rangos de datos:

A partir de este objeto vamos a crear un objeto GRanges para poder trabajar de forma más cómoda sobre esta lista de genes, aprovechando funcionalidades de la librería GenomicRanges.

La sintaxis es sencilla:

Vemos que le pasamos en el parámetro df el objeto data.frame que contiene la información que queremos convertir en GRanges.

Los siguientes campos son para indicar cromosoma, inicio de rango, final de rango, tipo  (en caso que no nos interese, podemos obviarlo, y añadir el parámetro ignore.strand=TRUE), y el último parámetro, keep.extra.columns lo ponemos a TRUE para que nos mantenga el resto de información asociada a cada uno de los rangos.

 

Modificar librería de R

Si nos bajamos un paquete de R, veremos que el código fuente está formado por distintos archivos. Lo más habitual serán archivos con extensión .R, donde estarán definidas las funciones de R que nos aporta esa librería.

Modificar código R de una librería de R

Hacer cambios a esa librería será tan sencillo como modificar el fichero .R, hacer pruebas usando la función source(), y reinstalar la librería  (como veremos más adelante) cuando queramos hacer definitivos esos cambios.

Modificar código C de una librería de R

En otros casos, los paquetes de R tienen parte programada en otros lenguajes, como por ejemplo en C.

Vamos a ver cuál sería la forma de trabajar con ese código en C para modificarlo según nuestras necesidades.

Mientras estamos modificándolo, nos interesará hacerlo de una forma sencilla y rápida, que no nos obligue a reinstalar la librería a cada cambio que queramos hacer en el código en C.

Para hacer eso, R dispone de CMD SHLIB, que nos permite compilar ese código de C, generando un archivo que podemos cargar instantáneamente sobre R, desde donde podremos llamar a las funciones modificadas de C.

Vemos como usamos CMD SHLIB:

Esto nos generará un fichero con extensión .so (en mi caso, qADM.so).

Una vez tenemos el fichero .SO, podemos cargarlo directamente al R, para tener acceso a esas funciones de C. La forma de hacerlo es usando la función dyn.load(), desde la propia consola de R:

Una vez hecho esto, en nuestra sesión de R tendremos disponibles las funciones definidas en qADM3.c, con los cambios que hayamos aplicado.

Reinstalar librería para aplicar cambios

Una vez hemos hecho cambios en el código de la librería, ya sean en R o en C, y ya los hemos probado usando dyn.load(), tendremos que volver a instalar la librería para que estos cambios queden aplicados de forma definitiva sobre la librería.

Vamos a instalar un paquete que tenemos en una carpeta llamada qADM:

Una vez hecho esto, si ya tenemos una sesión de R abierta, y con la librería cargada (en su versión anterior), tendremos que volver a cargarla para actualizar así a la última versión instalada. Si no lo hacemos, seguiremos usando la versión anterior.

El usuario importa!

Recuerda que el usuario con que se ejecutan estos comandos importa, ya que R instalará esa librería en el repositorio por defecto de ese usuario.

En mi caso yo lo he hecho como root, y no con mi usuario. En el caso del root, se instala en el repositorio general del sistema. Por lo tanto, si te interesa que cualquier usuario del sistema pueda hacer uso de esa librería, tienes que hacer la instalación del paquete con el usuario root.

En mi caso, de hacerlo con mi propio usuario, el lugar donde instala el paquete es en  ~/R/i486-pc-linux-gnu-library/3.1/qADM/libs.

 

Añadir librería SWC a Maven

Tenemos una librería SWC que queremos añadir a nuestro repositorio de Maven para poder añadir dependencias a este desde un proyecto Maven.

Con esto ya tenemos instalado el SWC a Maven.

Piensa que los valores que hemos usado en mvn install:install-file del id de grupo, id del artefacto o versión, son a nuestro criterio. Simplemente tendremos que tenerlos en cuenta cuando vayamos a crear una dependencia hacia esa librería.

Por ejemplo, desde un proyecto en que estamos usando el repositorio de Maven, y queremos añadir una referencia hacia esa librería que acabamos de añadir, escribiríamos esto en el pom.xml:

 

Redefinir comando en Latex

Cuando queremos definir un valor para un cierto comando de Latex, lo hacemos usando \newcommand{}{}.

\newcommand implementa la función primitiva \def de Tex, con ciertas funcionalidades adicionales. Una de ellas, es la comprovación que ese comando no haya sido definido previamente.

En caso de definir un comando que ya haya sido redefinido previamente, recibiremos un error de compilación. Algo que no pasaría usando la primitiva \def  porque como hemos dicho no hace esa comprovación.

Redefinir comando

De todas formas, usando las propias funcionalidades de Latex,  podemos redefinir el comando usando otra función: \renewcommand{}{}.

Por ejemplo, nos puede interesar redefinir la variable \today porque tenemos que dejar preparado un documento para esa fecha:

Más información en esta página.

Modificar el estilo del formulario de JetPack

Uno de los plugins totalmente imprescindibles para un blog en WordPress es JetPack.

JetPack es de hecho un pack de plugins, que dotan al blog de multitud de funcionalidades adicionales, que puedes activar o no según tus necesidades. Si no lo conoces, échale un vistazo.

Una de las funcionalidades que ofrece es la posibilidad que un lector de nuestro blog se suscriba, de forma que será avisado cuando se publique una nueva entrada.

De hecho puedes ver el widget de este plugin el menú derecho de este mismo blog. Y si quieres suscribirte, pues adelante! Jeje

Estilo propio

Un problema que nos podemos encontrar, es que este widget viene con su estilo visual ya predefinido. Y no se adapta al estilo que tiene nuestro tema. Por lo que gráficamente podemos ver que no acaban de cuadrar…

En el caso de este blog, el tema de WordPress que uso define los campos de texto con un padding bastante grande (de 16px por todos lados), lo que hace que los campos de texto sean muy altos.  En cambio, el campo de texto del correo electrónico de JetPack, es todo lo contrario:

Entonces de alguna forma tenemos que cambiar el estilo de ese campo para que sea igual que el resto del blog.

Modificar el estilo

Podríamos hacer dos cosas:

  1. Modificar el fichero CSS de Jetpack para poner a nuestro gusto el estilo del campo de texto
  2. Añadir un estilo adicional en el CSS de nuestro tema hijo.

Si hacemos lo primero, se perderán los cambios a la que actualicemos el plugin (algo que pasa como cada 15 días o 1 mes máximo).

Por lo tanto, lo mejor es hacer lo segundo: editar el fichero style.css de nuestro tema hijo, para hacer que ese campo de texto en concreto, siga el mismo estilo que el resto de campos del blog.

Editar el Style.css de nuestro tema

La forma sencilla y rápida es hacerlo desde la interfaz de administrador de nuestro blog.

Vamos a Apariencia > Editor.

Nos aseguramos que estamos editando el tema que nos interesa (tenemos que tenerlo seleccionado en el desplegable de arriba a la derecha). Y en la lista de archivos de la derecha, seleccionamos el fichero style.css.

Lo ideal es que todas las modificaciones que hagamos en ese archivo, estén juntas en un mismo lugar, para facilitar el localizarlas cuando nos haga falta.

Añadiremos la siguiente modificación:

El 16px es el ancho que tiene por defecto los componentes de texto en nuestro tema. Por eso pondremos ese valor.

Y el !important hay que ponerlo para asegurarnos que coge este valor a la hora de dibujar el campo de texto. Si no lo pusiéramos, usaría el valor definido en el fichero de estilo de Jetpack, porque tiene una mayor precedencia respecto al style.css de nuestro tema.

Y esto es todo, una vez guardados los cambios en el fichero, recargamos la página donde aparezca el campo de texto del correo electrónico del formulario de suscripción, y veremos que el aspecto visual es el mismo que el de cualquier otro campo de texto del blog.

Primera letra en mayúsculas en PHP

Si queremos que cada palabra de una frase empiece con la primera letra en mayúsculas, podemos usar la función de PHP ucwords().

Esta función se encarga justamente de eso: que todas las primeras letras de cada palabra que le pasemos como parámetro, estén en mayúscula:

Vemos en la segunda llamada, llamamos habiendo convertido toda la cadena de texto en minúsculas, para que así nos quede todo en minúsculas excepto la primera letra inicial de las palabras.

Modificar título de biografía en Latex

Cuando insertamos referencia bibliográficas en un documento Latex mediante el comando bibliography{}, el propio motor de Latex se encarga de añadir el título de la sección donde aparecerán las referencias, usando el idioma en que se ha definido el documento.

Es posible modificar el texto de esa sección, redefiniendo el comando refname:

o simplemente eliminar el título del apartado:

En nuestro caso, queríamos que el título de la bibliografía pasara a ser el título de una sección (por temas de estilo predefinidos del documento). Lo que no permite Latex es definir directamente una section dentro de la redefinición del command, es decir:

Entonces la solución (correcta desde el punto de vista visual, aunque no conceptual) ha sido, primero eliminar el título por defecto del bloque bibliografía, escribir un nuevo título con el estilo que nos conviene, y reajustar espacio: