Thinking on hiring me?

Please read

Fernando Guillén

a Freelance Web Developer

cabecera decorativa

software development as an artistic expression

Archive for Septiembre, 2008

Viernes, Septiembre 26th, 2008

Idea: twitter con voz

Todo parte de la siguiente visión: estar a tus quehaceres con el ordenador y mientras tanto, en background, escuchando un mini-podcast en tiempo real de los desvaríos sonoros de todos tus amigos.

La implementación me imagino que se basaría en un cliente flash que fuera capaz de capturar de tu micro y enviar diréctemente al servidor. El mismo cliente se encargaría de recoger todos los streamings que le están llegando y hacérselos llevar a tus followers.

Como ves es una tontada sin modelo de negocio ninguno y con un gran gasto en ancho de banda, pero que en caso de funcionar crearía situaciones bastante locas y curiosas… y seguramente insoportables :)

… Como suele ocurrir cuando empiezas a creerte original sin mirar en google esto ya está requete rebenio:

Aunque veo que tienen la gran idea de usar el teléfono como cliente de envío, a todas ellas les falta un cliente flash para enviar los twitt-voice desde tu ordenador.

(Que raro que este dominio esté en párking: http://twittervoice.com )

Miércoles, Septiembre 24th, 2008

Idea: Generador de tests de carga vía web para aplicaciones web

Existen muchos sistemas para ejecutar tests de carga y rendimiento sobre aplicaciones web.

Pero no logro encontrar ninguno que funcione directamente como servicio web, configurable vía formularios y con salida de informes en múltiples formatos desde excel a estadísticas gráficas.

Con esto nos ahorraríamos el tener que instalar cualquiera de las aplicaciones existentes, enterarnos de como configurarlas,  conseguir los servidores y ancho de banda necesarios, …

El sistema requeriría una gran inversión en ancho de banda y capacidad de proceso pero veo un claro modelo de negocio incluso permitiendo cuentas gratuitas para probar el sistema y cuentas de pago para cosas más serias.

¿Quién no pagaría 40€ (por decir algo) por poder hacer este tipo de pruebas sin perder todo un día en documentarse, configuraciones e instalaciones?

Internamente el sistema podría utilizar cualquiera de los sistemas ya existentes. Y el desarrollo duro estaría en implementar una capa anterior (la configuración gráfica) y una final la exportación a diferentes formatos de los resultados.

También, con un poco más de dificultad, se podría hacer que el sistema controlase una amplia red de servidores en diferentes continentes para poder hacer las pruebas mucho más completas y personalizables.

Esta idea ha surgido a partir de una conversación, como no, en la lista ror-es.

Jaime Iniesta nos ha comentado su inquietud por que este sistema se pueda usar para putear aplicaciones web de terceros generando mucha carga falsa sobre ellas, pero Ceritium ha salido al rescate proponiendo un sistema de validación al estilo Google Webmaster Tools que permite corroborar tu potestad sobre la aplicación colocando un determinado fichero en el root de tu aplicación.

¿Alguna idea de que exista algo parecido?¿Qué pegas le ves? ¿Comentarios?

Jueves, Septiembre 18th, 2008

Port Forwarding: accediendo a las máquinas de una intranet desde una sóla máquina pública.

Las redes de los clientes son celosas y normalmente sólo se puede acceder a las máquinas de su red desde dentro de la red misma. Lo que viene a llamarse una intranet.

Pero muchas de mis tareas de mantenimiento requieren acceso a varias máquinas de una intranet y desplazarme al cliente no lo veo una opción factible ni acorde con nuestros tiempos.

Una de las soluciones que más me ha gustado es pedirle al cliente un sólo acceso, una sola máquina con IP pública.

Para dar seguridad se puede configurar para que sólo se pueda acceder desde la IP estática de tu oficina, y, para ofrecer flexibilidad, que también se pueda acceder desde la IP estática de tu servidor en un datacenter. Pero bueno todo este párrafo te lo puedes saltar si no hay mucho inconveniente con la seguridad.

La máquina con la IP pública mola que sea linux, más que nada porque si no lo es ya no hace falta que sigas leyendo pues el resto del artículo sobreentiende esta premisa.

Lo que vamos a hacer es lo que se ve en la ilustración.

port forwarding

Aquí me ves a mí con más pelo y sin barba deseando acceder a todos los servicios de las máquinas de la intranet 10.10.10.* y sin embargo sólo pudiendo acceder a la máquina con la IP pública 205.205.205.205.

Lo que necesito tiene un nombre y este es Port Forwarding, y la implementación de esto más sencilla que he visto se hace mediante IP Tables.

Va a ser más rápido escribir los comandos que hay que ejecutar para que esto funcione que toda la charla previa que te he contado.

Mi máquina con acceso público tiene la distribución de linux Gentoo así que los ejemplos son para esta distro pero no deberían variar mucho para otras distros.

Instalamos iptables (si no está ya)

# emerge iptables

Le decimos al kernel que permita ip-forwarding

# echo 1 > /proc/sys/net/ipv4/ip_forward

Flasheamos toda la configuración de iptables que haya por defecto

# iptables -F
# iptables -t nat -F

Permitimos el forward desde iptables (eth0 es la interface pública)

# iptables -A FORWARD -i eth0 -j ACCEPT
# iptables -A FORWARD -o eth0 -j ACCEPT

Esto hace que las ips se enmascaren para no liar a los routes y saltarse posibles filtros de seguridad por IP

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Y aquí por fín las reglas del Port Forwarding

# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 213306 -j DNAT --to-destination 10.10.10.21:3306
# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 2180 -j DNAT --to-destination 10.10.10.21:80
# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 2280 -j DNAT --to-destination 10.10.10.22:80
# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 2221 -j DNAT --to-destination 10.10.10.22:21
# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 2322 -j DNAT --to-destination 10.10.10.23:22

Guardamos la configuración de iptables actual para que no haya que reescribirla al reiniciar

# /etc/init.d/iptables save

Ponemos el servicio de iptables para que arranque al inicio

# rc-update add iptables default

Creo que esto también hay que hacerlo

# vim /etc/sysctl.conf

Añadir/descomentar las siguientes líneas:

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1

Y ya debería funcionar. Si me voy a mi máquina en mi oficina y accedo a:

$ mysql -h205.205.205.205 -P 213306

Me encontraré con la mysql de la máquina 10.10.10.21.

Si accedo con un navegador a:

http://205.205.205.205:2280

Me encuentro con el Apache de la máquina 10.10.10.22.

Si no te funciona revisa la linkografía:

Miércoles, Septiembre 17th, 2008

Idea: La conversación detrás de la ponencia

El turno de preguntas en una conferencia siempre es un momento de tensión, por una parte están los nervios y la ansiedad que te invade mientras dudas en si levantar la mano o no para exponer esa duda que te está rumiando desde el principio por si resultará interesante y por si sabrás exponerla con claridad frente al todo el auditorio. Por otra parte está la mala suerte del orador y de toda la platea cuando se le da el turno a un voluntario que expone una pregunta (o varias) de dudoso interés y que agota todo el tiempo disponible para preguntas.

Pero analizando este tema me doy cuenta de otra cosa y es el enfoque completamente anticuado, en este vanagloriado mundo web 2.0 en el que vivimos, que se le da a las ponencias de ser un 99% unidireccional.

Están las mesas redondas que intentan solventar este problema y también el turno de preguntas pero las unas acaban convirtiéndose en micro-charlas también unidireccionales y sobre el turno de preguntas ya he expuesto mi opinión.

Mi propuesta intenta ofrecer una bidireccionalidad ponente/público a las charlas y además una moderación mucho más ágil y democrático al turno de preguntas.

Durante una charla siempre es de agradecer tener algún conocido al lado con el que compartir alguna opinión, comentario o chascarrillo del tipo “vaya rollo” o “este tío mola” o “esto me recuerda a..“. Cuánto mejor estaría poder compartir estos pensamientos directamente y en tiempo real tanto con el resto de oyentes como con el ponente mismo.

Las preguntas que vayan surgiendo se añadirían al mismo pull público de la ‘conversación’ y se podrían votar para cuando el ponente lo decida poder moderarlas y elegir las que considere más oportunas contestar.

Lo que propongo es una especie de mini-digg con una vida muy limitada y un contexto muy concreto: la charla. Donde todo el mundo pueda exponer, anónimamente o no, sus comentarios y percepción de cada porción de la charla y además sugerir preguntas que puedan ser revisadas y votadas por el resto de oyentes.

La conversación

No se está inventando nada nuevo, los programas del corazón hace tiempo que tienen implementado un sistema muy parecido donde se puede ver la entrevista del ‘famoso’ de turno y, debajo de él, mensajes de apoyo o crítica enviados en tiempo real por los oyentes.

aqui hay tomate

Este sistema tiene serios problemas de moderación, generador de ruido y caldo de cultivo para trolls pero la diversión está asegurada si detrás del ponente podemos ver en una pantalla gigante cual es el estado de ánimo y la opinión de el resto de oyentes mientras al mismo tiempo atendemos respetuosamente a la oratoria.

Puede que un ponente no esté de acuerdo con que en su charla se implante este sistema, pero si de verdad tiene interés en su público debería agradecer conocer en todo momento la temperatura de la platea, al más puro estilo DJ.

El sistema de preguntas y de comentarios se podría separar y usar uno u otro pero creo que los dos son complementarios y todo debería pertenecer a la misma ‘conversación‘.

Si no hay posibilidad de ofrecer la ‘conversación‘ en una pantalla gigante tampoco importa, en las charlas suele haber accesos wifi así que podríamos estar con nuestros portátiles atendiendo a la ‘conversación‘ a la vez que escuchamos al ponente. Lo que quiero decir es que no hay necesidad de que este sistema sea ofrecido oficialmente por la organización del evento, siempre podrá participar el que quiera de una manera extraoficial.

El histórico de comentario y preguntas podría enriquecer la documentación de la ponencia para consulta en el futuro.

El modelo de negocio no está para nada claro, pero a quién le importa cuando una idea es útil y divertida.

En esta idea me voy a poner a trabajar en cuanto tenga un momento, si algún grafista de los presentes quiere participar con la estética será bienvenido.

¿Qué te parece? ¿Conoces algo parecido? ¿Tienes alguna sugerencia o crítica?

Lunes, Septiembre 15th, 2008

Idea: Traductor simultaneo vía web

Cada vez que estoy en un evento en el que se hace uso de la traducción simultanea se me viene a la mente la misma idea:

¿No se podría usar el poder de la red para dar una solución mucho más económica y adaptable a la necesidad de una traducción simultánea?

Mi idea es bastante sencilla y no es un gran alarde de originalidad: se trata de usar un streaming de audio para enviar la voz del orador hasta el traductor y que éste emita la traducción también vía streaming a todos los interesados.

Entonces en mi imaginación aparece el traductor simultáneo ya sea en su misma casa o en una zona apartada del auditorio escuchando y retrasmitiendo su traducción a cualquier interesado que se encuentre en la sala (o no, esto es un plus) que através de su portatil y unos cascos domésticos está escuchando la charla en su idioma seleccionado.

Este sistema, claro está, permite varias traducciones simultáneas en diversos idiomas. También se podría pensar en que el traductor hiciera la traducción en modo texto… claro que esto depende de las cualidades mecanógrafas del traductor.

Traductor Simultaneo

Económica porque el asunto de la cabina de traductores, los auriculares multibanda, el desplazamiento del traductor in-situ, ya no sería necesario.

Adaptable porque se podrá ofrecer el servicio de traducción simultanea en cualquier lugar donde se celebre la charla aunque no tenga todo el tinglado de radio y auriculares montado.

También me agrada la idea de poder implantar este sistema en eventos no demasiado enterprise, eventos familiares y de ‘bueno rollo’ :), porque en estos casos el traductor pudiera ser cualquier voluntario que le apeteciese intentarlo.

En principio sólo le veo 2 limitaciones:

1) El ancho de banda necesario para el streaming, aunque creo que la tecnología actual no verá muchas dificultades en superar esta traba.

2) La necesidad de disponer de un portátil o dispositivo wifi o 3g para la recepción del streaming, como yo siempre ando en conferencias técnicas esto no será un problema :)

No lo veo una idea muy descabellada, incluso creo que tiene un grandes posibilidades comerciales. Mirando en google no encuentro nada parecido., aunque seguro que no estoy haciendo bien la búsqueda.

Al más estilo furilo: ¿Qué opinas? ¿Es factible? ¿Qué cosas parecidas existen?

Domingo, Septiembre 14th, 2008

Al calor de las estrellas

Ayer en el madinspain presentaron la futura web de domestika.org a bombo y platillo.

Borja Delgado se encargó de la presentación del proyecto usando modos y técnicas muy propias de predicador evangelista :).

En mi opinión la web tiene muy buena pinta, más allá del diseño sobrio y la utilidad de las funcionalidades mostradas, denota conocimiento, atrevimiento y acierto por parte de sus responsables. Le auguro un buen futuro.

Uno de los caprichos más divertidos y rompedores de esta futura web es el soporte para el desarrollo de mini-aplicaciones que se conectarán a los contenidos de domestika.org mediante una API pública y se ejecutarán en la web de manera background hasta que el usuario acceda a ellas mediante una combinación de teclas. No se pronunciaron en la conferencia palabras prohibidas como dashboard y widgets pero me temo que me entenderéis mejor si yo sí las uso. Me parece que esta funcionalidad marcará un antes y un después en el mundo de las aplicaciones web.

Otra funcionalidad que denota la sabiduría de los responsables del proyecto es la externalización de los portafolios cuyos contenidos serán almacenados en un servicio externo del que se alimentará tanto la sección de portafolios de domestika.org como una aplicación aparentemente independiente en dónde cada usuario podrá personalizar sin límites la estética y presentación de su portafolio. Ayudándose además de dominios personalizados.

Pero lo más emocionante para mi es darme cuenta de que conozco personal y profesionalmente a gran parte del equipo de desarrollo de este fantástico proyecto, me siento afortunado y espero saber empaparme de todo el talento del que últimamente me veo rodeado.

Más que mi enhorabuena lo que expreso mi agradecimiento.

Jueves, Septiembre 4th, 2008

Ruby, sustituyendo matches de una regex en un String con matches de la misma regex

Madre mía que título bueno me ha quedado :)

Esto es una nota mental y puede que si no sabes de que hablo no te interese y si sabes de que hablo ya lo sepas.

Intento sustituir una parte de un String por otra parte que se encuentra en el mismo String.

Es decir, tengo esto “me gusta el heavy y no me gusta el country” y quiero obtener esto otro “me gusta el country y no me gusta el heavy”.

Se puede hacer así:

>> "me gusta el heavy y no me gusta el country".gsub( /me gusta (.*) y no me gusta el (.*)/, 'me gusta \2 y no me gusta el \1' )
=> "me gusta country y no me gusta el el heavy"

Donde \1 y \2 son las ocurrencias de los (.*).

El ejemplo puede parecer un poco tonto, pero esta utilidad me ha venido muy bien para quedarme con el contenido de una etiqueta html:

>> "<body>contenido</body>".gsub( /.*<body[^>]*>(.*)<\/body>.*/mix, '\1' ).strip
=> "contenido"

Que se puede solucionar de muchas otras maneras pero esta me ha parecido la más sencilla.

Escribo esta nota mental por lo poco intuitivo que es el uso de ‘\1′ como cadena sustitutiva pues se supone que las cadenas entre comillas simples no se interpretan…

Otra cosa es que google siempre me llevaba a soluciones como esta:

>> "me gusta el heavy y no me gusta el country".gsub( /me gusta (.*) y no me gusta el (.*)/, "me gusta #{$2} y no me gusta el #{$1}" )
=> "me gusta country y no me gusta el el heavy"

Y aunque parece que funciona no es así porque los contenidos de $1 y $2 los ha cogido del gsub anterior y no de éste:

>> "me gusta el musical y no me gusta el flamenco".gsub( /me gusta (.*) y no me gusta el (.*)/, "me gusta #{$2} y no me gusta el #{$1}" )
=> "me gusta country y no me gusta el el heavy"
>> "me gusta el musical y no me gusta el flamenco".gsub( /me gusta (.*) y no me gusta el (.*)/, "me gusta #{$2} y no me gusta el #{$1}" )
=> "me gusta flamenco y no me gusta el el musical"

a Freelance Web Developer is proudly powered by WordPress
Entries (RSS) and Comments (RSS).

Creative Commons License
Fernando Guillen's blog by Fernando Guillen is licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License.