Otro de mis pequeños proyectos

Categoría: Mundo web (Página 2 de 10)

Bash completion for symfony (autocomplete)

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:

Crear un DOMDocument de un DOMNode en PHP5

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.

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

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.

Probando Wibiya

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.

Eliminar entradas en el autocompletado de formularios en Firefox

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)

¡Tengo un poken!

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:

PacharanAndTwitts

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.

MenuMatic en capa fija (position:fixed)

Es posible que conozcas MenuMatic, un menú multinivel tanto horizontal como vertical realizado con Mootools 1.2. La verdad es que yo personalmente lo he usado ya varias veces y me gusta bastante la facilidad de uso y el acabado, con lo que es una de mis opciones cuando tengo que recomendar un menú.

Hace poco tuve un problema y es que coloqué este menú en una capa posicionada fija (position:fixed) de modo que estuviese constantemente visible aunque se realizase scroll. Claro, esto funciona en prácticamente todos los navegadores menos IE (para variar). Al hacer esto, cuando pasamos por encima del menú para realizar el desplegado, como la capa fija «evita» el scroll, el menú aparece siempre en la parte superior, de modo que si se baja por la página, el menú desaparece.

He hecho un par de cambios en la clase a partir de la última versión disponible, la 0.68.3. Se lo he comunicado al autor para ver si le ayuda en su próxima versión, pero de momento no he obtenido respuesta.

Por esta razón, dejo mi aportación aquí en el blog por si le puede servir a alguien. Las modificaciones que he realizado están bajo las líneas // Mod: Fran Naranjo. El cambio es básicamente detectar si está sobre una capa con position:fixed y si lo está, añadir el scroll a la posición en la que se muestra el menú.

Roller

Esta semana Mario y yo, continuado con el desarrollo y evolución de OpenNUS hemos implementado un sistema de avisos en el Page Builder que llegue directamente desde los gadgets. Al final adoptamos la solución de ir mostrandolos al estilo tagline.

En base a esta idea, se me ocurrió desarrollar esta pequeña y sencilla clase en Mootools que realice este comportamiento pero realizando el efecto de un banner rotativo o roller. De esta forma podremos mostrar por ejemplo una serie de mensajes que se irán turnando de forma constante de modo que podamos ver un cierto número a la vez.

Su uso es bastante sencillo. Tan sólo necesitamos un elemento padre que contenga una serie de hijos que son los que mostraremos. El caso más sencillo es tener un <ul> como padre y varios <li> como hijos.

<ul id="roller">
  <li>Mensaje 1</li>
  <li>Mensaje 2</li>
  <li>Mensaje 3</li>
</ul>

Con esta llamada, conseguiremos que se genere el Roller y comience a funcionar.

new Roller($('roller')).startRoll();

Hay más ejemplos en la demo.

PHP Conference 2009. Día 2

Y, con mucha tristeza, ya ha terminado la PHP Conference 2009. Tristeza porque se acaba, pero creo que el balance final hay sido muy muy positivo y me voy realmente contento.

Al igual que hice ayer, voy a realizar un pequeño resumen de las conferencias a las que he asistido, que también prometían.

Eso sí, no me quedo sin comentar lo bien que nos lo hemos pasado en el sorteo final y entrega de premios. Como colofón a la PHP Conference 2009, la organización realizó un sorteo en que entreban 7 packs de libro de O’Reilly + elePHPant, más 3 XBOX 360. Para empezar, muchas de las personas que esperaban participar en el sorteo se encontraron con que no podían hacerlo puesto que no habían completado la encuesta. Las probabilidades de que nos tocase algo aumentaron mucho 🙂

Tras todo esto, para entregar los premios oparon por un método que me pareció de lo más original y que, de alguna forma u otra, adoptaré, jeje. Se trataba de obtener tantos números de forma aleatoria como premios había y para ello usaron http://www.random.org. Los números obtenidos eran los ids numéricos de las personas que habían contestado la encuesta.

Tras varios intentos frustrados por parte de Buenosvinos de dominar al MAC que le habían dejado para tal efecto (si por algo los MAC OS X tienen nombres de fieras xDD), sacaron los nombres. Arkaitz se llevó un libro + elePHPant e Iván una XBOX 360. Yo no tuve tanta suerte, pero bueno, 2 de 3 🙂

Por lo menos, he aprovechado la oferta de O’Reilly para comprarme un libro de git con un 35% de descuento 😀

Y bueno, estas han sido las conferencias a las que he asistido hoy:

  • PHundamental Security by Hans Zaunere
  • The State of Quality Assurance Tools for PHP by Sebastian Bergmann
  • Técnicas y Herramientas para una API con REST by Àlex Puig
  • Symfony 2.0 a sneak peak by Fabien Potencier
  • Open Classifieds by Chema Garrido

Y he aquí unn pequeño resumen:

PHundamental Security

Hans nos dio una buena charla cargada de otra buena cantidad de frases para apuntar y grabar a fuego sobre aspectos relacionados con la seguridad de nuestros servidores y PHP.

Sus comentarios inicialmente partían de sistemas en los que tenemos mucho control, pudiendo decidir hasta la forma de compilar los módulos. Algo que en algunos casos puede ser excesivo, pero desde luego tenemos que tener la oportunidad de decidir los módulos que están instalados.

Me quedo principalmente con estas dos frases (que no son las mejores, pero realmente creo que dicen mucho en poco espacio):

Let PHP do its magic inly whe you want it to – not by chance

Mayority «PHP security flaws» could be avoided by casting to int

The State of Quality Assurance Tools for PHP

http://www.slideshare.net/sebastian_bergmann/the-state-of-qa-tools-for-php-2389795

La charla de Bergmann tuvo, en mi opinión dos partes bien diferenciadas, la primera que me pareció hasta aburrida ya que eran conceptos demasiado básicos para una charla de este estilo, pero en la segunda parte (mitad-final) estuvo plagada de buenos ejemplos, herramientas y enlaces veerdaderamente útiles e interesantes.

Muy buen sabor de boca pese a ser una persona que odia los Singleton sn excepción :p

Técnicas y Herramientas para una API con REST

Charla introductoria a REST que contaba, partiendo de lo más básico, cómo realizar una API y cómo montar tu aplicación. Desde mi punto de vista, todo iba bien hasta que entró a explicarlo con un MVC y dar ciertas explicaciones dentro de un contexto más personal que general.

Interesante charla como introducción aunque a mi personalmente se me quedó algo corta.

Symfony 2.0 a sneak peak

http://www.slideshare.net/fabpot/symfony-20-on-php-53

Contando con la presencia de Fabien Potencier como ponente, mostró lo que va a ser el nuevo Symfony 2, orientado principalmente a las nuevas incorporaciones. Cabe destacar que funcionará únicamente para PHP 5.3 y será una reealidad inicialmente a finales de 2010. El respaso fue demasiado exhaustivo entrando quiás demasiado a poner ejemplos con código, algo que creo que no ayudó mucho a mostrar el potencial de algunos apartados.

Cotnamos con una completa explicación de Event Dispatcher, Request Handler, Templating Framework y Dependency Injection Container.

Esperábamos haber visto algo de Twig, pero no salió nada del tema.

Open Classifieds

De esta charla tengo que decir que alabo las ganas que le echó el ponente por dar a conocer su proyecto, pero predicar con el hecho de que hay que seguir el concepto KISS y que se ha venido de controlar la programación en  Java a PHP para decir que no se usa un framework para hacer tu código más efectivo, hacer código spaguetthi y considerarlo bueno y mantenible… creo que te has confundido de sitio.

« Entradas anteriores Entradas siguientes »