Jul 20 2010

Equation y Matrix, mis últimos desarrollos en PHP

tatai

Para recuperar un poco el blog, que últimamente está muy mustio, voy a hablar de un par de desarrollos que he hecho y publicado en PHP. Los he llamado con el original nombre de Equation y Matrix.

Los tenía desde hace bastante tiempo, pero aprovechando que le estoy dando a TDD y a los testeos unitarios, los he adecentado y completado hasta ponerlos decentes para publicarlos y este es el resultado.

Equation

Es una sencilla clase que nos permite trabajar con una ecuación polinomial de grado n-ésimo mediante un objeto, facilitando el acceso a cada uno de los coeficientes así como una sencilla evaluación de la misma (basada en el método Horner).

Además, permite mostrar la ecuación renderizada al formato indicado de una forma muy sencilla. Actualmente en el paquete existe la opción de mostrarlo en formato HTML, cuyo resultado final sería algo del estilo: y = x3 + 7x2 + 10

El código completo, incluyendo ejemplos y test unitarios está publicado en github. También lo he publicado en phpclasses (sin test unitarios por lo engorroso que es subir cada fichero de forma individual).

Matrix

Este paquete consta de varias clases, la principal es Matrix que permite representar en un objeto una matriz matemática. Podemos además realizar distintas operaciones que a día de hoy son:

  • suma de dos matrices
  • resta de dos matrices
  • multiplicación de dos matrices
  • multiplicación de una matriz por un escalar
  • multiplicación de una fila por un valor
  • multiplicación de una columna por un valor
  • cambiar dos filas
  • cambiar dos columnas
  • inversa de una matriz
  • unir dos matrices compatibles
  • trasponer una matriz
  • eliminación de Gauss-Jordan (con el que poder obtener, por ejemplo, ajustes polinómicos de cualquier grado o inversas)

Las clases, con sus correspondientes test unitarios, están publicada en github.

Enlaces

Update 2010.08.01: PHPClasses acaba de avisarme que Equation está nominada al Innovation Award July 2010 :) A ver si hay suerte


Jul 10 2010

Cambiar el nombre y el email en el log de git

tatai

Seguro que no es la primera vez que, usando git, inicializas el repositorio, haces unos cuantos commit y para cuando te das cuenta, ya tienes varios Usuario <tatai@localhost> en el log de cambios. Evidentemente, usas git config para cambiar el user.name y el user.email pero el texto sigue ahí cuando pones git log.

Antes de ponerlo en un repositorio público como por ejemplo github, hay que cambiar esto y lo haremos de una forma muy sencilla usando git filter-branch. Este comando nos permite hacer multitud de diferentes cambios sobre todas las ramas en el proyecto y, entre otras cosas, cambiar estos dos datos que nos hacen falta.

Supongamos que los datos que queremos poner son:

  • Usuario: Tatai
  • E-mail: tatai@example.com

Entonces, el comando que tenemos que usar es:

git filter-branch --env-filter 'export GIT_AUTHOR_NAME="Tatai";GIT_AUTHOR_EMAIL="tatai@example.com"'

Tras ejecutar el comando, veremos como se reescriben todos los commits.

En caso de querer cambiar únicamente ciertos commits y no todos, podemos añadir al final del comando el intervalo, por ejemplo, para los 10 últimos commits: HEAD~10..HEAD


May 19 2010

Mi última manualidad

tatai

Yo creo que ha quedado bien chulo. Ahora sí que luce (más) ;

Ironman Decal

)


May 18 2010

Múltiples cuentas en github.com

tatai

Al hilo del último post sobre cómo “tunear” un poco nuestro ssh, podemos usarlo por ejemplo si tenemos varias cuentas en github.com. Cuando ocurre esto, por cada cuenta que tienes en github, tienes que añadir una clave pública; esto no es ningún problema ya que podemos crear tantas claves como queramos, pero lo que no es tan fácil es cambiar la cuenta ssh con la que debe conectarse el cliente de git a github. No es muy común, pero te puede ocurrir como a mi, que tienes tu cuenta personal y la del trabajo.

Para poder conseguir esto, supongamos que tienes estos datos:

  • Cuenta personal
    • Usuario: usuario_casa
    • Fichero de clave: ~/.ssh/casa
  • Cuenta trabajo
    • Usuario: usuario_trabajo
    • Fichero de clave: ~/.ssh/trabajo

Lo que habría que hacer es tener un fichero de configuración ssh (recordemos que está en ~/.ssh/config) de la siguiente forma:

Host github
    HostName github.com
    User usuario_casa
    IdentityFile ~/.ssh/casa

Host github-trabajo
    HostName github.com
    User usuario_trabajo
    IdentityFile ~/.ssh/trabajo

La diferencia es sutil: cambia el valor que ponemos en Host (los espacios o tabulaciones son opcionales, yo los uso para dar un poco más de orden).

Con esto, tenemos que cambiar la dirección con la que nos conectaremos con la cuenta de trabajo. Si por ejemplo, para añadir el repositorio remoto usamos:

git remote add origin git@github.com:usuario_trabajo/proyecto.git

Ahora deberemos poner:

git remote add origin git@github-trabajo:usuario_trabajo/proyecto.git

Es decir, ssh se encargará automáticamente de hacer el cambio por nosotros y, de esta forma, no tendremos problemas decidiendo con qué usuario debe conectar o no, está todo en el fichero de configuración ;)


May 6 2010

“Tunear” un poco nuestro ssh

tatai

Este es un sencillo truco que a mi me descubrió hace ya un tiempo mi buen amigo Iñigo, que os abrirá (si no lo ha hecho ya) una puerta hacía una mayor rapidez con el comando ssh. Empezaré directamente poniendo un ejemplo: supongamos que para acceder a un servidor con los siguientes parámetros (lo sé, están un poco exagerados, pero creo que se entenderá el ejemplo):

  • Dirección: punto.de.entrada.al.servidor.com
  • Usuario: miusuario
  • Puerto 12345
  • Fichero de clave: /home/user/.ssh/fichero.clave

El chorizo comando que nos hace falta es:

ssh punto.de.entrada.al.servidor.com -l miusuario -p 12345 -i /home/user/.ssh/fichero.clave

Casi nada

Bien, hay una forma de acortarlo un poco. El truco está en configurar todos estos parámetros en un fichero. Este fichero lo podemos encontrar en nuestra cuenta de usuario, concretamente en ~/.ssh/config. Este fichero por defecto viene vacío pero, siguiendo con el ejemplo escribimos estas líneas en su interior:


Host     miservidor
HostName punto.de.entrada.al.servidor.com
User     miusuario
Port     1234
IdentityFile /home/user/.ssh/fichero.clave

Con este simple gesto, ahora podemos cambiar el comando ssh anterior por:

ssh miservidor

Casi nada la diferencia :)

Si investigas un poco el man de ssh_config seguro que encuentras muchas cosas de utilidad. Más adelante daré otro truco relacionado con este.

P. P: y como bien te recomendaría un administrador de sistemas, si encima añades el hostname a tu /etc/hosts, irá “volado”! Se ahorrará la resolución DNS

Enlaces:


May 4 2010

Creando un “export” con git

tatai

Si estás trabajando con git, seguro que alguna vez has querido hacer un “export” (usando terminología de subversion: un svn export), es decir, obtener todos los ficheros sin los datos de #git. La opción más fácil sería copiar todos los datos y borrar la carpeta .git, pero si quieres evitarte crear el script, aquí tienes una sencilla solución, usar checkout-index. El comando sería más o menos así:

git checkout-index -a -f --prefix=/path/export/

Importante: no olvides la última barra (slash).

Y ahora la breve explicación. checkout-index crea una copia de los fichero en el index a donde le indiques, pero sin sobreescribir, algo que evitaremos con la opción -f. Con la opción -a le indicamos que copie todos los ficheros en el index y con –prefix indicamos un prefijo que queremos que añada a todos los ficheros que extraiga (es decir, poniendo un path, es un truco para decirle que lo extraiga en otro lugar y con el mismo nombre, de aquí que tengamos que poner la última barra).

Es una forma sencilla y necesitas de tu copia local en el mismo servidor, algo que me gustaría evitar, pero de momento, tiraremos con esta opción.


Abr 12 2010

Genera gráficos burndown de forma sencilla

tatai

Si utilizas scrum como metodología de trabajo o si has oído hablar de ella, seguramente habrás oído hablar también del gráfico burndown. Con él, de forma sencilla puede verse de un vistazo información sobre cómo va el trabajo realizado durante el sprint entre otras cosas.

Estos gráficos son muy sencillos de realizar, pero si no quieres complicarte nada la vida, tienes Yet another online burndown generator o, lo que es lo mismo, un generador de burndown online.

El funcionamiento es muy sencillo: indicamos los puntos (u horas o la unidad de trabajo con la que estés midiendo tu velocidad), los días y un título. Con estos tres datos, la aplicación te genera un PDF del tamaño de un A4 horizontal listo para imprimir con tu gráfico.

Ejemplo de burndown

Se admiten todo tipo de sugerencias y críticas (mientras sean constructivas :p). Hay unas cuantas en lista pero seguro que se te ocurren algunas más. La idea es mantener la sencillez de hacer un gráfico, pero con toda la potencia que puedas esperar para tener un burndown a tu gusto.

Enlaces:


Abr 2 2010

Documentación oficial de PHP en español

tatai

Tras un largo tiempo sin ella, podemos anunciar que está de nuevo online la documentación oficial de PHP en español. De esta forma, para todos aquellos a los que se os hacía complicada la lectura de la ayuda en alguno de los idiomas actualmente disponibles, ahora no teneis excusa ;)

Hace ya unos años que el manual en español se consideró obsoleto debido a la discontinuidad de la traducción (principalmente con la llegada de PHP5), pero volvemos a contar con él.

La traducción la realizan voluntarios que prestan su tiempo a esta tarea y se organizan mediante una la lista de correo oficial documentación de PHP-ES.

Como se puede ver en la lista que hay más adelante, no está traducido todo el manual. A fecha de hoy, 2 de abril de 2010, el 21% del manual oficial de PHP en inglés (manual base) está traducido a español. Aunque pueda parecer una cifra reducida, irá creciendo poco a poco.

El manual en español es el cuarto con más contenido traducido. Existen otras lenguas en las que se ha empezado con la tarea pero que, hasta el momento, no tienen contenido suficiente como para estar publicados.

Actualmente la documentación oficial de PHP está disponible en los siguientes idiomas (entre paréntesis, la cantidad del manual que está traducido):

  • Inglés (100%)
  • Francés (90%)
  • Japonés (69%)
  • Turco (35%)
  • Español (21%)
  • Alemán (18%)
  • Portugués brasileño (11%)
  • Polaco (4%)
  • Rumano (4%)
  • Búlgaro (3%)
  • Coreano (3%)

¿Te animas a traducir apoyando así a la comunidad? Cualquier ayuda es buena y será bienvenida :)

Links:


Feb 26 2010

Bash completion for symfony (autocomplete)

tatai

I have just pushed into GitHub a bash autocomplete script for symfony.

This script allows to autocomplete your first level option when calling to symfony script. It is easy to install (just copy one and call it manually if you do not have access rights). All steps and working issues are in the wiki. It also accepts custom actions.

This is a working example once script is corretly installed and invoked:

Assuming symfony is in current folder and [tab] y tab key press action, this is an example of how symfony_complete works:

$ ./symfony con[tab]figure:[tab][tab]
author    database
$ ./symfony doctrine:a[tab]uthor

We are pleased to know what you think and any issue you have. You can find us on GitHub.

Related links:


Feb 25 2010

Para que Movistar no te vuelva loco con la conexión de datos

tatai

Este post está destinado a todos aquellos usuarios que se han dado de alta en el módulo de datos GPRS de Movistar, para que no tengan que pasar por lo que he pasado yo, 3 llamadas de teléfono, más de media hora hablando (menos mal que el teléfono es gratuito), tener que seguir paso a paso (de +20 pasos) un how-to vía telefónica y encima tener que decirle al operador lo que tiene que hacer para que funcione la conexión en tu teléfono.

Sólo necesitas estos dos sencillos pasos:

  1. Llamar a Movistar y activar el módulo de datos (conexión a internet desde el móvil). Mira los planes de antemano, aunque no suele haber sorpresas, no positivas ni negativas de momento.
  2. Si te han podido configurar de forma automática el móvil, genial, ya hemos terminado, pero si no, lo único que tienes que hacer es ir a tu móvil, a la parte de conexión de datos y crear un nuevo APN. Tienes que configurar los siguientes datos (cuando no pongo nada, hay que dejarlo vacío):
    1. Nombre: Movistar Internet
    2. APN: movistar.es
    3. Proxy:
    4. Puerto:
    5. Nombre de usuario: MOVISTAR
    6. Contraseña: MOVISTAR
    7. Servidor:
    8. MMSC:
    9. Proxy de MMS:
    10. Puerto MMS
    11. MCC: 214
    12. MNC: 07
    13. Tipo de APN:

Como recomendación, comprueba que estos datos son los vigentes. No me hago responsable si han cambiado.

Ahora os voy a contar por qué, siendo unas explicaciones tan sencillas, yo tuve que estar tanto tiempo al teléfono.

Tras decidirme (no tienen, ni mucho menos, las mejores condiciones, pero de momento no puedo hacer otra cosa), llamé para llevarlo para contratar el módulo. Rápidamente me lo activaron y me dijeron que apagase el móvil al menos 5 minutos y que lo encendiese entonces; ya dispondría de internet.

Bien, las instrucciones eran sencillas, aunque me quedé un poco mosqueado no tener que configurar nada en el móvil. Ilusionado encendí el móvil y, nada, no había conexión.

Volví a llamar y le expliqué al operador lo ocurrido. Me hizo esperar un poco, obtuvo el modelo de mi móvil sin yo decírselo (algo que me gustó) y me dijo que ya lo había configurado todo. De nuevo tenía que terminar la llamada, apagar el móvil al menos 5 minutos y encenderlo.

En fin, hice lo mismo, pero nada. Mirando la configuración del móvil vi que no había definido ningún APN, con lo que evidentemente, era bastante improbable que me conectase a ningún sitio. El APN son los datos que necesita el móvil para tener acceso a la red de datos.

Volví a llamar. Me cogió otra persona y le expliqué lo ocurrido. Miró a ver qué había hecho su compañero y me dijo que sólo había reseteado la velocidad de conexión. Bien, gran trabajo, apagar y volver a encender, se ve que el otro tenía la lección bien aprendida. Cuando me empezó que iba a mirar no-se-qué cosa, le paré y le dije, “oiga, creo que es necesario configurar el APN, no?” y me dijo, sí claro (super-evidente… tan evidente como que ni a ti ni a tu compañero se os había ocurrido y os dedicais a dar soporte, ains).

Ahora llegó lo mejor de todo. Tuve que seguir dos how-to, paso a paso, por teléfono de cómo configurar dos APNs distintos. Uno que no me servía de nada y otro que fue el que finalmente me funcionó. Menos mal que disponía de teclado físico y manos libres, que si no… Fue horrible, más de 20 pasos cada uno de ellos. No disponían de configuración automática para el HTC Magic (teléfono que está en su catálogo).

Y bueno, por fin, tras colgar la llamada, la conexión llegó. Último consejo, cuando llaméis con una incidencia de datos, no llaméis con ese mismo teléfono, hacerlo con otro ya que no se pueden poner las dos cosas a la vez.