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


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 23 2010

Crear un DOMDocument de un DOMNode en PHP5

tatai

Tengo que reconocer que DOMDocument (del Document Object Model de PHP) me gusta muy muy poco. Lo he usado por necesidad un par de veces en versiones tempranas de PHP5 donde SimpleXML todavía no tenía tanta potencia y con el problema de no poder usar por ejemplo YAML u otro tipo de formatos que no me daban la potencia y flexibilidad de XML para ciertos casos.

Bueno, una de los últimos problemas que me he encontrado ha sido cómo obtener un DOMDocument de un DOMNode ya que quería usar XPath a partir de dicho DOMNode, algo que no es posible si no es DOMDocument.

La verdad es que no he encontrado mucha información ni algo bonito para presentar. Sólo tengo esto, que por lo menos me ha servido (he preferido no pararme a medir el consumo de memoria o de proceso por miedo a querer descartar la idea y perder todavía más tiempo, jeje):

$doc = new DOMDocument();
$doc->loadXML($node->ownerDocument->saveXML($node))

El “truco” es tan sencillo como como crear un nuevo DOMDocument en el que importamos (vía método loadXML) el nodo a través del código XML que genera. Este código se obtiene con la propiedad ownerDocument del DOMNode (que nos retorna el DOMDocument) y sobre el que podemos llamar a saveXML, método que expulsa el XML del elemento que le indiquemos, en este caso, nuestro DOMNode.


Feb 11 2010

XHP: una extensión para escribir PHP de forma distinta

tatai

Una de las noticias de esta semana en el mundo PHP es sin duda toda la información acerca de HipHop for PHP por parte del equipo de desarrollo de Facebook. Una de las extensiones que ha salido a la luz por parte del equipo de front-end es la que han llamado XHP y, como ellos mismos rezan, “a new way to write PHP” (una nueva forma de escribir PHP).

La explicación de cómo funciona es muy sencilla. Intentan evitar que al desarrollar la parte de frontal, cuando nos “pegamos” con el XHTML, tengamos que unir código XHTML y PHP. En el ejemplo que muestran se ve más claramente.

De un código como:

<?php
if ($_POST['name']) {
?>
    <span>Hello, <?=$_POST['name']?>.</span>
<?php
} else {
?>
    <form method="post">
    What is your name?<br>
    <input type="text" name="name">
    <input type="submit">
    </form>
<?php
}

Nos da como opción generar este otro:

<?php
// note: includes omitted
if ($_POST['name']) {
  echo <span>Hello, {$_POST['name']}</span>;
} else {
  echo
    <form method="post">
      What is your name?<br />
      <input type="text" name="name" />
      <input type="submit" />
    </form>;
}

No voy a negar que, de primeras, XHP parece más sencillo de seguir y de generar. Eliminar los tags de apertura y cierra de PHP aligera el código en gran medida. Además, eliminamos problemas con el XSS así como detectar problemas por malformación de XHTML en tiempo de parsing.

A mi personalmente me sigue gustando bastante más usar un motor de plantillas. Un motor real como XTemplates (sí, he dicho XTemplates, no smarty o similares). Separar el código PHP del HTML me parece bastante importante y necesito verlo con más claridad.

No obstante, hay que seguir el tema de cerca. Si es algo que la gente de Facebook ha visto que es necesario ya que aumenta el rendimiento, es evidente que en este tipo de entornos será uno de los puntos de referencia. Sin embargo, XHP como técnica para el resto de las webs donde no se reciban tantas peticiones como Facebook (si no recuerdo mal, sirven más doscientas mil millones de páginas al mes, sí, sí, 200.000.000.000), es posible que un objetivo que cumpla a primera vista es juntar el PHP con el HTML, algo que, repito, me parece bastante “sucio” si no hay una justificación clara. Pos supuesto, un motor de plantillas tiene sus desventajas, no vamos a negarlo :)

Lo dicho, XHP de momento me parece algo que puede provocar que el código sea más rápido pero a costa de hacerlo más guarro. Habrá que seguirle la pista para ver por dónde avanza, no lo descarto de primeras porque el objetivo de aumentar el rendimiento es muy importante, pero analizando el coste (ni monetario ni de recursos en este caso, jeje).

Enlaces:

Update: Muy muy muy interesante lo que comenta Rasmus en su web. Importante verlo.


Dic 29 2009

Probando Wibiya

tatai

Por recomendación de Mario, estoy probando un toolbar llamado Wibiya. Podéis verlo ya funcionar en esta página, abajo del todo. Acaban de abrir el servicio (hasta hoy era invitacional).

La verdad es que su instalación es muy sencilla en wordpress (tan sólo completar la configuración en su web y añadir un plugin en tu wordpress) y el resultado es bastante bueno. Además, te permite que elijas el diseño que más se asemeje a tu web, algo que es bastante de agradecer y puedes elegir qué opciones quieres que tenga la barra: Twitter, Facebook, traducir, compartir, etc, etc. Hasta puedes ver las visitas que tienes en tiempo real.

El servicio funciona mediante un javascript remoto con lo que tiene la ventaja de que no gasta de nuestro ancho de banda, pero con la pega de que si cae el servicio, la barra no se mostrará.

Una forma muy sencilla de añadir muchos enlaces a redes sociales. A ver qué os parece.


Dic 29 2009

Eliminar entradas en el autocompletado de formularios en Firefox

tatai

Seguro que os ha pasado alguna vez que por error habéis metido un texto en un campo de un formulario web que no debía estar ahí. Por ejemplo, la contraseña (o parte de ella) en el campo destinado para el nombre del usuario. Y luego es un problema porque cada vez que escribimos algo en ese campo, aparece ese texto que no queremos como posibilidad (ayuda de autocompletado).

Pues bien, en Firefox es muy fácil de solucionar.

Tan sólo tienes que estar en ese formulario y hacer que aparezcan las opciones, incluída la que no quieres. Entonces te pones encima de la opción que quieres borrar con el ratón (sin hacer click) y pulsas la combinación de teclas Shift + Supr (suprimir, tecla que generalmente está encima de los cursores, a la izquierda del teclado numérico).

Por ejemplo, aquí vemos el login de Twitter y queremos eliminar la segunda entrada, que está mal.

Debemos ponernos encima con el ratón, pero sin hacer click y entonces pulsar Shift + Supr

Debemos ponernos encima con el ratón, pero sin hacer click y entonces pulsar Shift + Supr

Tras esto, la opción desaparecerá y no tendrás que preocuparte más (hasta que metamos la pata de nuevo, jeje)


Dic 20 2009

¡Tengo un poken!

tatai

El pasado viernes recibí un curioso regalo, ¡un poken! Es curioso, justo andaba detrás de uno desde que conocí su existencia hace unas cuantas semanas y ha llegado por sí mismo.

Un poken es básicamente un nuevo gadget que nos permitirá realizar el típico intercambio de tarjetas de visita de forma electrónica.

Pokens (by Carlos Jiménez carloswes)

Pokens (by Carlos Jiménez "carloswes")

La idea es sencilla (la ayuda además lo deja claro). Como se puede ver en la imagen anterior, un poken tiene la forma de un “bicho” (hay muchas formas) que tiene una gran mano. Gracias a esta mano y mediante radiofrecuencia (RF) podremos intercambiar nuestros datos con otro poken. Así de fácil. Tras esto, sólo tenemos que conectar nuestro poken (la figura del bicho realmente es un tapón que alberga un conector USB) al ordenador y descargarlos. Es multiplataforma, no requiere de ningún cliente en el ordenador, tan sólo una página web y acceso al USB.

Un poken puede contener varias tarjetas de visita simultáneamente, aunque necesitamos de un ordenador con acceso a internet para poder añadir o quitar tarjetas. En la web, http://www.poken.com, tras hacer login, podremos configurar los datos de nuestra tarjeta de visita. El interfaz es muy cómodo ya que cada dato se añade mediante drag&drop y podemos previsualizar fácilmente el resultado final. Además, creo que están incluídas casi todas las redes sociales, jeje.

Ahora mismo existen los PokenSPARK, que tienen la forma que se puede ver arriba, cuestan unos 15 euros y es capaz de almacenar algo más de 50 contactos; y los PokenPULSE que tienen forma de una memoria USB, son algo más “serios” pero tienen capacidad virtualmente ilimitada para guardar contactos gracias a sus 2GB de memoria interna. Y por último, si oyes hablar de PokenHUB, esto es la aplicación que te permite descargar y manejar tus contactos.

Hasta aquí, todo bastante bien y mucha ilusión el regalo, pero habrá que esperar a que sea algo más extendido. Personalmente creo que es algo que puede ser muy interesante aunque el interfaz tiene que mejorar algo más (pese a que la idea de funcionar vía web es excelente) para ser realmente funcional además de que creo que esta tecnología, aplicada a un móvil puede ser realmente un bombazo (sí, ya lo sé, para eso tenemos Bluetooth, pero sería una aplicación más sencilla y más aplicada, sin tener que buscar a la otra persona, sin tener que elegir la tarjeta… algo más directo y rápido).

Todo queda en el aire, el tiempo lo dirá. Yo espero que sea algo que triunfe, me gusta la idea, aunque creo que será difícil que tenga éxito en esta forma fuera de nuestros entornos algo más “frikis”.

Enlaces:


Dic 3 2009

PacharanAndTwitts

tatai

Ayer fue el PacharanAndTwitts, (hashtag) la primera “desvitualización” de usuarios de Twitter en Navarra. Gracias a un buen encaje de bolillos, tuve la suerte de poder asistir, un poco tarde, pero asistí.

Y mereció la pena, mucho. Volver a ver caras conocidas y, sobre todo, poner caras a algunas otras personas. Se me pasó el tiempo volando.

Eso sí, dio para mucho. Asistí con @mariotux que, si ya nos vemos poco a lo largo del día, así rematabamos la faena, jeje. Nada más llegar no vi muchas caras conocidas, algo que me pareció extraño, pero enseguida pude ver a @oscarmatellanes y @seovision entre la multitud, con lo que nos adentramos a pedir algo en la barra. Enseguida me encontré con @lullamas que, aunque ya hemos hablado unas cuantas veces (eso sí, en el ámbito laboral), esta vez con el denominador común de twitter, “versión” que desconocía de él, jeje.

Y enseguida se animó la noche, pude saludar entre otros a @joaquin_sevilla y @danielmayor a los que no conocía en el mundo del twitteo, @apervic que hacía tiempo que no nos veíamos. Hablé fugazmente con @fegido e incluso pude saludar y conocer en persona a @jzabalo. Por supuesto, un rato muy muy agradable con @fherz y @manolera.

No dio para mucho más, me quede con ganas de conocer a mucha más gente que he visto y leído por twitter, pero será para la siguiente edición. ENHORABUENA  a la organización, de verdad que ha valido mucho la pena y personalmente apoyaré cualquier iniciativa futura.

Ahora toca descansar un poco, pero para la siguiente, mucho más y mejor, prometido.