ago. 12
2013
En algunas ocasiones el espacio disponible para almacenar copias de seguridad de la base de datos es escaso, por lo que quizá no disponemos del espacio para realizar un volcado completo de la base de datos, y en segunda fase comprimir ese resultado. También puede ser que queramos acortar el proceso evitando la escritura en disco (que puede ser lento), y al disponer de un cierto margen de CPU, podemos comprimir al vuelo.
mysqldump --opt -u [usuario] -p[clave] [base_de_datos] > [copiaseguridad.sql]
mysqldump -u [usuario] -p[clave] [base_de_datos] | gzip > [copiaseguridad.sql.gz]
gunzip < [copiaseguridad.sql.gz] | mysql -u [usuario] -p[clave] [base_de_datos]
Sin embargo, si lo tuyo es una necesidad apremiante de espacio en disco, puedes añadir el nivel de compresión (entre 1 y 9, siendo 6 el valor por defecto) al ejecutar gzip:
mysqldump -u [usuario] -p[clave] [base_de_datos] | gzip -9 > [copiaseguridad.sql.gz]
En último término, también puedes usar bzip2, aunque la relación entre velocidad y compresión respecto a gzip puede desmotivarte.
Read more »
ago. 8
2013
A estas alturas ya no resulta difícil disponer de un dispositivo móvil con prestaciones de smartphone para revisar o testear una página web. Para echar un vistazo rápido, es más que suficiente.
Sin embargo, salvo que tu tarea sea dedicarte al desarrollo de aplicaciones móviles, no dispondrás de varias BlackBerry, los dos o tres últimos modelos de iPhone o iPad, y varios modelos de Android, con sus variaciones en tamaños de pantalla, versiones de sistema operativo, etc. Y si el trabajo a entregar requiere una revisión más o menos exhaustiva con dispositivos móviles, la tarea es compleja.
Al instalar la aplicación, aparecerá un botón con la imagen del logo de Ripple. Al navegar por una página (funciona con páginas http://, pero no con accesos locales vía file://, por lo que hay que poner las páginas tras un servidor http), se puede clicar sobre el botón y seleccionar la opción enable.
En la primera carga de una determinada URL se solicitará qué plataforma se quiere utilizar para hacer la simulación. Esto se puede modificar en cualquier momento desde el entorno de emulación.
En ese momento aparecerá un interfaz en la que se identifican claramente tres apartados:
Con la variedad de opciones, se puede jugar un rato largo y ver, por ejemplo, la interacción para realizar scroll en la página, o el ajuste en ancho y alto del dispositivo, entre otras opciones.
Sin embargo, en lo relativo a revisar el responsive design, los efectos en el cambio de orientación del dispositivo, ya ayuda bastante. Y para el resto de funcionalidades (simular GPS y otros detalles) no lo he probado, pero seguro que simplifica las pruebas más rutinarias.
En fin, ahí queda, por si a alguien le interesa.
Read more »
jul. 20
2013
Existen algunas tareas que se pueden encadenar unas tras otras, y cuyos resultados intermedios no son de nuestro interés. En Unix estas operaciones se realizan normalmente con pipes. Pues bien, en Phing tenemos las filterchains, un conjunto de aplicaciones de filtros sobre una serie de contenidos que se pueden encadenar para generar un resultado final, y que el input de un proceso es el output del proceso anterior.
En ese caso, podemos seleccionar los archivos a modificar (con un fileset), y utilizar entonces filterchain para ejecutar la operación ReplaceTokensWithFile:
...
...
Vale sí, pero ¿esto qué hace? Pues te permite poner un texto en tu código equivalente a:
#!copyright!#
Y que, en caso que exista el archivo plantillas/copyright.php, el contenido de éste quedará automáticamente insertado en el lugar donde ha encontrado la cadena anterior.
...
jul. 17
2013
Leí hace ya un tiempo un artículo (no tengo la referencia) sobre el diseño gráfico de escenarios en videojuegos. La lectura fue casual, algo que leer mientras se espera algo o a alguien. En sí nada importante.
El caso es que en esa lectura recuerdo un detalle interesante que vuelve a mí constantemente: la variedad de formas y colores del escenario debe tener un grado de complejidad equilibrado, dependiendo del ambiente que se quiera crear. Poco complejo aburrirá al usuario, que inconscientemente lo tachará de falso, y demasiado complejo puede distraer al usuario, a quien le puede diferenciar los elementos activos del simple decorado.
En el fondo, creo yo, aún nos llama el instinto por buscar algún tipo de alimento en esos colores. Quizá en la naturaleza, la complejidad visual es un indicio de que existe algún tipo de vida; una vida que no permite (por interés propio) que ese entorno se degrade y se erosione hasta ser desierto. Y eso, para nosotros como depredadores, puede equivaler a alimento.
Aquí, reflexionando, mientras recuerdo momentos pasados revisando documentos intragables. You know...
Read more »
jul. 15
2013
Un proceso binomial es aquel que sólo puede tomar dos valores: uno o cero, sí o no, blanco o negro... En estadística, el proceso básico es denominado experimento de Bernouilli en honor al matemático (que por cierto, vaya familia). El experimento se refiere a cualquier experimento que tenga esta característica.
Este proceso otorga una probabilidad p a que tenga lugar un suceso (por ejemplo, que alguien responda "Sí" a una pregunta), y por contraposición otorga la probabilidad q al suceso contrario (alguien responde "No"). Lo importante es que siempre p + q = 1. Esto quizá te sonará del post de p = q = 0,5.
Los procesos de simulación estadística parten siempre de los recursos que proporciona la informática. Para el caso, se utilizan los generadores de valores aleatorios (en concreto, los generadores pseudoaleatorios). Estos generadores devuelven un valor entre 0 y 1, pero es un valor continuo.
Pero eso ya queda para otros momentos.
Read more »
jul. 11
2013
El cálculo de la variancia (o varianza, según la literatura) implica a la media. Dado que para calcular la media necesitamos todos los datos (bueno no siempre, pero en este caso sí), el algoritmo más básico nos obligaría a recorrer dos veces la muestra de datos:
Por suerte, la varianza se puede exponer, en términos de esperanza matemática, de otra forma. Extraído directamente de Wikipedia:
Lo que está indicando esta fórmula es que podemos separar el cálculo de la media del de sus valores al cuadrado.
¿Esto mejora lo anterior? Sí, porque al poderlo diferenciar, lo podemos paralelizar, y por lo que podemos utilizar un solo recorrido por los datos para calcular la varianza.
jul. 8
2013
Ya he publicado algunas reseñas de libros en el blog, y aunque me encanta hacerlo como ejercicio de resumen y de anclaje de ideas, es una tarea que consume el tiempo de una manera bárbara. Eso al final lleva a no escribir nada, y al final, pues... todos perdemos un poquito.
Es por eso que hoy me decido a hacer un pequeño comentario sobre el libro "La información" de James Gleick. Ya lo han comentado Cory Doctorow, y hay una reseña en El País, La primera edición apareció en Febrero del 2012, por lo que es un libro nuevecito.
Leí buenas críticas de él, pero quise comprobarlo en primera persona. Lo pude leer entre Septiembre y Noviembre del año pasado, y no puedo menos que recomendarlo. Pocas veces he tenido la sensación de leer un libro tan fundamentado, con tantas referencias, y a la vez tan sugerente...
... Porque esa es la palabra: es un libro sugerente e inspirador. Obliga a parar un momento y a pensar, tratar de relacionar ideas, relacionar temas comentados en capítulos anteriores, especular... Quizá, por comparar, la sensación que tuve durante la lectura es similar a la que me apareción leyendo "No Logo" de Naomi Klein. Una lectura que te agarra. No es ligera, pero no te aburres porque te parece estar aprendiendo por momentos.
¡No me dirás que no es un libro ideal para las vacaciones! Con ese rato de la siesta que no acaba de pasar, mientras afuera hace calor...
El libro no es lectura ligera. Pero ese peso, lo veo totalmente justificado.
Feliz lectura.
Read more »
jul. 4
2013
Otra de las potentes características de Phing es la posibilidad de procesar en bloque un conjunto de archivos que coincida con un determinado patrón de nombre, ruta, o una combinación de ellas. Por ejemplo, la siguiente instrucción:
En este segundo caso recoge todos los archivos .php que existieran en cualquier directorio dentro de "/ruta/a/mi/proyecto/php", y excluye todos los archivos que contengan en su nombre la palabra "Test" (los archivos con pruebas unitarias)
En ambos casos, el asterisco simple sirve para lo mismo que en la consola: como comodín. Sin embargo, el doble asterisco es una opción muy potente para buscar recursivamente en los subdirectorios y también dentro de los nombres. Así, la expresión:
...
...
jul. 1
2013
Si la automatización de tareas es uno de los grandes objetivos de Phing, la gestión del control de versiones es un objetivo importante. Las tareas de despliegues sistemáticos, principalmente para el testeo y la integración continua se pueden agilizar utilizando Phing.
Para el caso, veremos las tareas disponibles para las dos herramientas más populares de control de versiones: Git y Subversion. Salvo excepciones notables, las tareas de ambos casos permiten más o menos los mismos objetivos, pero dado que los dos sistemas tienen algunas diferencias estructurales y de nomenclatura, las tareas varían ligeramente.
Los siguientes apartados asumen que ya tienes unas nociones mínimas del concepto de control de versiones, así como de los comandos más habituales. Si no fuera así, visita la documentación de Git o el libro de Subversion.
Subversion en este caso no tiene una rutina de inicialización de repositorios.
since="Sun Jan 23 23:55:42 2013 +0300"
until="Mon Jan 24 09:59:33 2013 +0300"
outputProperty="logs"
repository="/ruta/al/repositorio" />
svnpath="/usr/bin/svn"
workingcopy="/home/user/svnwc"
propertyname="svn.log"/>
repository="git://github.com/path/to/repo/repo.git"
targetPath="/ruta/al/repositorio"/>
svnpath="/usr/bin/svn"
repositoryurl="svn://localhost/project/trunk/"
todir="/ruta/a/copia/de/trabajo"/>
repository="/ruta/a/repo"
branchname="nombre-rama" />
repository="/ruta/a/repo"
remote="nombre-rama-1 nombre-rama-2"
message="merging repos" commit="true" />
repository="/ruta/al/repositorio"
branchname="mi-rama" quiet="true" create="true" />
svnpath="/usr/bin/svn"
username="anony"
password="anony"
nocache="true"
repositoryurl="svn://localhost/project/trunk/"
todir="svn://localhost/project/tags/0.1"/>
svnpath="/usr/bin/svn"
repositoryurl="http://localhost/project/tags/2.4.2"
todir="/ruta/a/copia/trabajo"/>
repository="/ruta/al/repositorio"
refspec="master:foobranch" tags="true" />
repository="/ruta/al/repo" all="true" />
repository="/ruta/al/repo" all="true" />
workingcopy="/ruta/a/copia/local"
message="Comentario del commit" />
svnpath="/usr/bin/svn"
todir="/ruta/a/copia/local"/>
jun. 28
2013
En muchos casos disponemos de todo el conjunto de datos para poder calcular la media. En esas situaciones, la suma de todos los elementos divididos por el número de éstos, ya nos proporciona la media.
Cada vez que llegara un nuevo valor, sólo sería necesario sumarlo a la primera variable, incrementar en uno el valor de la segunda, y luego dividir la primera por la segunda. Tendríamos así la nueva media.
De esta forma guardamos tres valores: el total, el número de ítems y la media.
Para esas situaciones la fórmula clásica no sirve. Tenemos que echar mano de una versión generalizada, la media ponderada. En realidad, una media tal como la conocemos es un caso concreto de la media ponderada: es cuando todos los valores que queremos promediar tienen la misma importancia (el mismo peso, la misma ponderación).
Para el caso que nos ocupa, tendremos dos valores: el número de ítems y la media actual. Es decir, nos ahorramos la suma del total. ¿Cuál es el procedimiento?
Este proceso es algo más intensivo en recursos, pero más ligero en recursos que el anterior.
Read more »
© 2007 and beyond Mario Alberich, licensed under CC-BY-SA unless stated otherwise.