sabado, 27 diciembre 2008

1
objetor
comenta

La opacidad en las aplicaciones: Ey! ¿hay alguien ahí?

por Fernando Plaza en , ,

Nuestro CMS lo utilizan ya cerca de 40 personas, algunos de los cuales ni siquiera están en España y sólo tenemos contacto con ellos por mail... ¡con algunos ni siquiera he hablado nunca!

Esto despierta en mi toda una serie de temores paranoicos... sobre todo cuando algo falla o empieza a funcionar con lentitud... ¿exáctamente qué es lo que ha fallado?

Como está construido con Active Server Pages en Vbscript no hay un registro de sucesos que se pueda interpretar con facilidad como en ASP... asi que estás literalmente a ciegas (están los logs de servidor, pero a ver quien es el guapo que se pone a interpretarlos...)

Para poder atajar este problemilla se nos ha ocurrido crear un Registro de Eventos al estilo 11870 de uso interno para monitorizar algunos acciones: el logueado de usuarios, la creación de nuevas entrada, la creación de una etiqueta, la publicación... así hasta unas 15 ó 20 acciones, que iremos aumentando.


Tengo especial interés en monitorizar la subida de archivos e imágenes al servidor, ya que es de las acciones que más problemas pueden ocasionar... también estáría bien añadirle un poco de AJAX para crear un "efecto Digg - Menéame" que te evite el tener que estar dándole todo el rato a F5.

Pienso que esto -a parte de útil por cuestiones técnicas de soporte y control- puede llegar a aumentar la interactividad entre los usuarios del CMS ya que las acciones son públicas para todos los usuarios del mismo blog.

Aquí el proceso de publicación de la entrada que estás leyendo:


Comentarios y objeciones
   ya hay un objetor... ¿y tú? »

martes, 4 noviembre 2008

Ahhhh... por eso no funcionaba

por Fernando Plaza en , ,

Ahora que viene siendo frecuente la integración de APIs desarrolladas por terceros en nuestras aplicaciones, se nos plantean nuevos retos a la hora de gestionar errores y asegurar disponibilidad.

Lo normal es que montes todo tu desarrollo sobre un API en funcionamiento y una vez consigues que funcione... ya estás contento. Cómo mucho puede que llegues a gestionar aquellas "incidencias" que vienen recogidas en la documentación del API: número de peticiones agotadas, exceso en el límite de cuota, falta de crédito, demasiadas peticiones en curso...

Pero luego hay posibles errores no documentados, como en este caso donde el API de Webthumbs respondía a nuestras peticiones con un "BAD APIKEY", cuando realmente lo que ocurría era algo más complejo:


En definitiva que a nuestros errores no documentados, se suman los de las distintas API que integramos, perdiendo en el control de la disponibilidad de algunas partes de nuestra aplicación.

Es algo de perogrullo, pero me quedo muy a gusto soltándolo.

lunes, 27 octubre 2008

4
objeciones

Diseñando la estructura de tu web: URLs y extensiones

por Fernando Plaza en , , ,

Desde hace tiempo intentamos que cuando programamos una web las extensiones de los ficheros y la estructura de directorios no nos condicionen en el futuro.

Por ejemplo si desarrollas en asp y creas tu web con URLs del tipo...
 
http://mi.com/productos/coches.asp

... y llegado un momento te ves en la necesidad de cambiar de lenguaje de programación, vas a tener bastantes problemas. 

Por ejemplo si tienes que pasarte a PHP tendrás que crearte una página del tipo:

http://mi.com/productos/coches.php

Y después redirigir con un "HTTP Error 301, Moved permanently" de tu antigua página "asp" a la nueva "php" para intentar perder el menor posicionamiento posible... y aun así perderás tráfico. 

Es algo fácilmente solucionable con un poco de picardía al principio: yo te recomendaría que en lugar de utilizar las URLs anteriores crees una estructura de directorios de este tipo:

http://mi.com/productos/coches/

Jugando con los Documentos Predeterminados de IIS que se pueden cambiar con facilidad en cualquier momento (incluso en alojamientos compartidos).

Es decir, en el interior de la carpeta coches existe un fichero que puede llamarse default.asp, default.html, default.aspx, default.php... y eso da igual ya que tanto nuestros usuarios como los buscadores sólo conocerán la URL que utilicemos en los enlaces, en este caso la de la carpeta.

De esta manera llegado el momento podremos cambiar de lenguaje de programación sin miedo a perdidas de tráfico. 

Desde mi punto de vista el lenguaje de programación que utilicemos no es un dato que interese al usuario por lo que no debemos abofetearle con él cada vez que entre en nuestra web.

Si la URL necesita parámetros para generarse, por ejemplo una lista de productos extensa que requiere paginación tenemos que tener cuidado y no ser torpes. En lugar de enlazar a:
 
http://mi.com/productos/coches/default.php?pag=2

Enlazaremos a:
 
http://mi.com/productos/coches/?pag=2

Para evitar que una misma página tenga dos URLs distintas tendremos la precaución de que cuando enlacemos de nuevo con la primera página no haya un enlace del tipo:

http://mi.com/productos/coches/?pag=1

Hay que ser consistente y enlazar de nuevo con:

http://mi.com/productos/coches/

En nuestro CMS hemos tenido mucha precaución con este tipo de detalles. Como ya hemos comentado en otras ocasiones, nosotros fuimos construyendo nuestro programa a partir de Blogger... pero donde vimos algo mejorable intentamos corregirlo, por ejemplo un enlace a la etiqueta "España Libre" en Blogger sería tal que así:
 
/labels/Espa=C3=B1a%20Libre.html

Mientras que nuestra URL es bastante mejor y sería tal que así:
 
/archivos/espana-libre/

Hay que tener en cuenta que para los buscadores con que sólo una letra pase de mayúsculas a minúsculas, ya considerará la URL completamente distinta. Por eso nosotros nos fijamos como norma nunca utilizar mayúsculas en los enlaces internos, además depuramos los espacios convirtiéndolos en guiones medios y transformamos algunos caracteres en otros más compatibles (ñ-n, á-a). 

Son pequeños detalles, a veces casi artesanales, que sumados a otros muchos van marcando la diferencia. Observar este tipo de cosas cuando visitamos una web puede ayudarnos a hacernos una idea de si el equipo que hay detrás es cuidadoso o si no ha prestado ninguna atención al SEO de la web.

No obstante nuestro CMS tiene un defecto: los artículos del blog son de las pocas URL que no siguen este patrón y revelan la extensión del fichero y teniendo en cuenta que en todos los blogs se publican más de 500 artículos al mes, ahora es un problema bastante laborioso de solucionar...

Esta semana vamos a importar un nuevo blog desde Blogger a nuestro CMS y se nos ha ocurrido lo siguiente: conservaremos las URL con la extensión .html que utiliza Blogger (lo cual nos permitiría por ejemplo el día de mañana exportar ese mismo blog a Wordpress). 

Para ello sólo hay que conseguir que los archivos con extensión .html se procesen como si fueran páginas ASP para lo que hay que agregar una nueva asignación de extensión en IIS:

 

Llegado el momento podríamos incluso desasociar la extensión .asp y ejecutarla como si fuera PHP.... No es una solución perfecta, pero nos ayudará a hacer la migración de los artículos de una manera totalmente transparente.

domingo, 12 octubre 2008

2
objeciones

Un lenguaje de programación para el 2009

por Fernando Plaza en , ,

Todos los que nos dedicamos a realizar aplicaciones informáticas nos vemos enfrentados antes o después a la decisión de apostar por un nuevo lenguaje de programación.

En diciembre de 2006 hablábamos de cuál pensábamos que iba a ser nuestro lenguaje de programación para el 2007... pero no terminó siendo así, durante todo el 2007 hemos seguido programando con páginas ASP y Vbscript, echando mano de PHP en casos de emergencia.

Resulta curioso que una gran parte de los lectores de ese artículo lo votaron y siguen votándolo como "malo"... aunque no considero que sea mucho peor que el resto de los que aquí se publican, por lo que supongo que tiene mucho que ver el que en ese momento apostáramos por C# sobre .NET o lo que es igual Microsoft... y ya sabemos todos de que pie cojea la blogosfera. 

En cualquier caso nuestra voluntad no llegó a materializarse: estos dos últimos años en ENZO hemos estado tan sumamente ocupados que no hemos tenido tiempo para replantearnos la situación, pero recientemente tres artículos me han vuelto a picar con esta asignatura pendiente. 

Este en Loogic:

Este otro:

  • Triple salto mortal con tirabuzón - Sobre el cambio de plataforma de Festuc, que ha pasado de PHP a Django (Python) lo que ha supuesto el desarrollo desde cero de toda la aplicación.
...y por último: 
 
El tema de los gráficos es en general para reírse, en abril se publicaba este otro en el post Survey Says: C# more popular than VB:


 
En la red te puedes encontrar cuadros de "adopción" tan sumamente discrepantes que mejor no hacerles caso. La elección de un lenguaje de programación es un asunto religioso, donde es raro encontrar a personas que dominen varios lenguajes lo suficientemente como para poder valorarlos objetivamente.

Lo que parece un hecho es que desde el 2005 la mayoría de los programadores están pasando de VB a C#, convirtiendo a C# en el standard de-facto para todos los que desarrollan en NET. Por otra parte Python y Ruby como lenguajes "dinámicos" estos últimos años han pegado fuerte... tanto es así que también han sido adoptados por .NET con IronPython y IronRuby.

La cuestión por tanto no depende sólo de elegir el lenguaje, también hay que elegir el Framework... Ya sea Rails para Ruby o una de las muchísimas que existen para Python (las malas lenguas dicen que existen tantas porque no hay ninguna realmente buena), de entre las que destaca para desarrollo web Django.

En estos días mi experiencia con Django -sin ayuda experta del exterior- ha sido nefasta... considero que sería una locura ponernos a desarrollar en Python, salvo tal vez de la mano de NET. 

De Ruby on Rails, todavía no lo he probado lo suficiente... espero durante este mes poder estudiarlo para poder llegar a la Conferencia de noviembre en Madrid con los deberes hechos.

domingo, 5 octubre 2008

¿Programar tu propio CMS?

por Fernando Plaza en , ,

Ventajas e inconvenientes de emprender un desarrollo propio cuando existen alternativas de buena calidad en el mercado o soluciones open source.

En otras ocasiones hemos hablado aquí sobre esa tendencia nuestra de re-inventar la rueda, ya sea programando nuestro propio CMS a partir de Blogger (haya por junio de 2005)... o en otras muchas otras cosas. 

Dare Obasanjo hace no mucho resumía en este párrafo:

I'm often surprised by how common it is for developers to prefer reinventing the wheel to using off-the-shelf libraries when solving problems tasks. This practice isn't limited to newbies who don't know any better but also to experienced developers who should. Experienced developers often make excuses about not wanting to take unnecessary dependencies or not trusting the code of others when justifying reinventing the wheel.

Si me permitieran volver a empezar, no sé... tal vez hubiera sido más interesante haber montado todo sobre Wordpress o MovableType y construir todas nuestras funcionalidades extras como
plugins: algo que sin duda hubiera sido una pesadilla en el momento de las actualizaciones, si  bien se podría haber visto compensado por la enorme cantidad de enlaces que uno puede recibir compartiendo con la comunidad algunas de esas funcionalidades (caso: LaMateporunYogur y sus dos WP Themes) y a su vez beneficiarte de las brillantes aportaciones de otros programadores.

Un post en febrero de Carlos Blanco "Cada CTO que tengo hace un CMS nuevo" estaba relacionado de pasada con este vicio... y el hilo de comentarios no dejo pasar la oportunidad de tratar el tema. En él Ferrán comentaba: 

Los informáticos tienen el síndrome de NIH (no invented here) con frecuencia, si no lo han hecho ellos, no les gusta. (...) Coger e instalar un Wordpress son 5 minutos, adaptarlo, quizá una semana. Desarrollar tu propio CMS… no tiene precio. Pero en tiempo (oportunidad) y coste… no hay comparación.

Una vez hecho este ejercicio de auto-flagelación voy a mirar también los aspectos positivos de lo que han sido estos años en los que hemos ido montando y mejorando nuestro CMS:

  • Aprendimos - Y no es tan sencillo aprender porque el día a día te aboca a repetir una y otra vez tareas que ya dominas... y no es tan frecuente enfrentarte a nuevos retos que te obligan a estudiar en profundidad un tema.
  • Tranquilidad - Si surge un problema lo podemos resolver, puede que nos tengamos que quedar un par de noches sin dormir... pero al final lo resolveremos: I Know because I wrote it.
  • No todo lo hicimos nosotros - Lo único que hemos programado es el core del CMS y si bien es la segunda aplicación más grande que hemos programado... el hecho es que lo más dificil lo realizan componentes como Aspjpeg, FCKeditor, CKFinder...
  • Seguridad - Los problemas de seguridad de Wordpress son bien conocidos, no quiero decir que nuestro CMS sea un bunker: es probable que tenga más de una vulnerabilidad y alguna que otra grave: pero que alguien dedique su precioso tiempo en buscarlas es como entrar en La Casa Blanca para robarle la hucha-cerdito a la hija del presidente.
  • Adaptación - Integración de los post con nuestra guía, la pasarela con 11870, el mashup de APIs, las thumbs a medida, las capturas de webs para obtener logotipos...

En definitiva, la lección del Gafapasta que hemos aprendido es que como en todo siempre hay un lado positivo...  ahora debemos centrarnos en él y aprovecharlo como una ventaja competitiva (entre otras razones porque no hay marcha atrás). 

No obstante estos posts los escribo para no perder el norte y para recordarme a mi mismo que "usar librerías no es de débiles" y que por ejemplo ahora que estamos buscando la mejor manera de incorporar galerías de imágenes a nuestros posts haremos bien si utilizamos jQuery como librería AJAX y MultiPowUpload o algo parecido para poder subir múltiples ficheros al servidor.

viernes, 26 septiembre 2008

2
objeciones

iFrames... el AJAX para pobres

por Fernando Plaza en , , ,

Tranquilos que no soy tan zote, sé que AJAX y los iframes no tienen nada que ver... pero con este título hiperbólico intento transmitiros una idea importante: no mates moscas a cañonazos.

Una de las ventajas de AJAX es que puedes renovar una parte de tu página sin necesidad de refrescarla por completo... con lo que ganamos mucha velocidad y el usuario percibe mayor agilidad en el uso de tu web. Por ejemplo, en Gmail cuando marcamos con una estrellita un e-mail, la página no se refresca, simplemente la estrella aparece mágicamente (y por detrás corre un proceso en el que se guarda ese cambio de estado).

El problema es que hacer desarrollos en AJAX es complejillo porque el Javascript es muy pejiguero... por lo que hay que valorar si puedes conseguir un resultado similar sin tantas complicaciones, sobre todo si no tienes un equipo de desarrollo tan numeroso como el que trabaja en el proyecto Gmail.

Conseguir algo similar de una manera más sencilla, más simple... te permite destinar el tiempo que ahorras a hacer más cosas y en el futuro tú o a quien le toque no tendrás que invertir mucho tiempo en investigar como estaba hecho algo, porque lo sencillo lo entiende todo el mundo. 

Abandonando un poco el romanticismo 2.0 que nos invade a todos, a veces analizándolo fríamente podemos llegar a la conclusión de que un par de iframes pueden resolvernos la papeleta sin muchas complicaciones o que no es tan complicado seleccionar una opción en un desplegable con 100 elementos ordenados alfabéticamente (y no es necesario que nos lancemos a programar un auto-fill en AJAX a lo Google Suggest... como decía Joel Spolsky: The Jury Is Not In, So Why Take The Risk When Your Job Is On The Line). 

En otras ocasiones nos daremos cuenta de que no hay otra manera de resolver el problema de una manera decente, entonces sí... recurriremos al AJAX o a lo que sea necesario para conseguir nuestro objetivo.


Todo esto viene a cuento de que en nuestro CMS hemos mejorado la manera en la que se asignan las etiquetas a los posts, pasando esa funcionalidad a una página independiente (como si fuera un módulo) e incrustándola posteriormente en los lugares necesarios a través de un iframe. Esto nos permite hacer cambios en etiquetas muy rápidos, sin refrescos completos de la página -efecto similar al que conseguiríamos con AJAX- y además añadir con mucha facilidad ese mismo módulo en otras páginas, por ejemplo en nuestra integración con el API de 11870:


Otra ventaja es que ahora podemos seguir toqueteando ese módulo de manera independiente, con la tranquilidad de que no nos vamos a cargar otra funcionalidad más compleja.
 
La solución no es sofisticada, pero no hemos tardado ni dos horas en hacerlo, mientras que con AJAX habríamos tardado mucho más... y no tengo claro cómo hubiéramos podido luego re-utilizar ese código en otras secciones de la herramienta.

Por lo tanto: se práctico, ahorra tiempo y si funciona bien, no lo toques.

viernes, 29 agosto 2008

UTF-8, probado, probando... 漢音

por Fernando Plaza en , , ,

Estamos migrando el charset de todos nuestro CMS a UTF-8 y con ello el de todos los blogs que gestionamos con él.

Hasta el momento utilizábamos ISO-8859-1 (latin1), que para escribir en español va de maravilla, pero más allá de eso no da más de si y para CompareBlogs necesitamos más porque tenemos usuarios que han dado de alta blogs en muchos idiomas y cuando intentamos importar sus tags o cualquier otra información de las apis de delicious, technorati o bloglines nos encontramos con que muchas veces no podemos hacerlo porque el contenido ha sido escrito en griego, japonés o quién sabe.

El cambio lo intentamos hace ya bastante tiempo pero nos dimos de bruces con un impedimento que parecía insalvable, todo nuestro código está escrito en Vbscript y utilizamos ODBC para conectarnos a mySQL y el conector que había en ese momento (MySQL Connector/ODBC 3.51) no era compatible con UTF8. 

Por suerte desde principio de año ya está disponible el nuevo conector/ODBC 5.1  que parece que sí es compatible. Como siempre, las pruebas las está sufriendo este blog y vosotros que me leéis.. y cuando aquí todo vaya bien iremos realizando el cambio en el resto de webs.

El procedimiento ha sido el siguiente:

1 - Leer los siguientes artículos, para refrescar mis parcos conocimientos:2 - Hacer una copia de seguridad de la base de datos de este blog, abrir el archivo resultante (.sql) con ultraEdit y guardarlo con otro nombre en formato utf-8. Modificar el charset en la sentencia CREATE TABLE, cambiando "latin1" por "utf8".

3 - Crear una base de datos nueva (en mySQL 4.1 o superior) e importar el archivo modificado. Ahora los datos de los que se alimenta la web deberían estar todos en UTF-8.

4 - Ahora hay que modificar el meta tag del charset y cambiarlo a utf-8. De esa manera le diremos al explorador que nos visite, que nuestra página está escrita en utf8.

Generando ficheros en formato UTF-8

Una de los problemas que me he encontrado es a la hora de generar los feeds, ya que hasta el momento los metía en una variable y luego el contenido de esa varible lo volcaba en un fichero de texto con FSO (FileSystemObject)
Set fso = CreateObject("Scripting.FileSystemObject")
Set myFile = fso.CreateTextFile(ruta_archivos & FOLDER_ATOMXML & "" & post_uri & ".xml", True)
myFile.Write(entry_v)
myFile.Close
Que funcionaba perfectamente, pero que para crear archivos UTF-8 no vale, por lo que lo hemos tenido que cambiar por algo como esto:
Set fsT = CreateObject("ADODB.Stream")
fsT.Type = 2   'Specify stream type - we want To save text/string data.
fsT.CharSet = "utf-8" 
fsT.Open
fsT.writetext entry_v
fsT.SaveToFile ruta_archivos & FOLDER_ATOMXML & "" & post_uri & ".xml", 2
fsT.close
set fsT= Nothing

Asi que os seguiré contando como va esta aventura, que supongo que me terminará dando más lata de la que pienso.

domingo, 20 julio 2008

Capturando pantallazos de webs para obtener logotipos y thumbs

por Fernando Plaza en , , , , , ,

Gracias al API de bluga.net se pueden obtener pantallazos de cualquier web, incluidas las desarrolladas en Flash, a partir de las cuales obtener con facilidad los logos de los establecimientos.

El otro día repasando un artículo antiguo de febrero de 2006 me asustó comprobar que ayer terminamos un desarrollo que ya teníamos en mente en esa fecha.

La idea es muy sencilla, en TopMadrid y DolceCity disponemos de una guía con las direcciones de los sitios de los que hablamos en el blog organizadas por categorías, por ejemplo: centros comerciales en Madrid

Como se puede ver en la imagen los sitios van acompañados de una pequeña imagen de 50 x 50 pixels con el logo de la empresa referenciada: ¿cómo se hacían esos logos? A manija, es decir, vas a la web del sitio, capturas pantalla, la pegas en tu editor de imagenes, recortas, guardar las imagen, la subes por FTP al servidor y actualizas el registro como que "ya tiene imagen". 

El proceso realizado por mi a toda prisa podía llevar unos 5 minutos por imagen y por alguien con menos soltura de 5 a 10 minutos, vamos de 2 ó 3 euros por imagen sin contar el daño emocional de ver que llevas cinco y te quedan 3000.

Era un rollazo interminable y tedioso que no superó la prueba de escalabilidad a la que se sometieron todos los procesos cuando ampliamos el concepto de TopMadrid a nuevas ciudades con DolceCity. Lo tuvimos que interrumpir, pero claro, el atractivo de la página se resiente, asi que había que buscar una manera de hacer lo mismo mucho más rápido y lo hemos conseguido gracias al API de bluga.net webthumb y a un par de días de programación.


pulsa para ver más grande

Volvemos al tema de ahorro de tiempo: ahora conseguimos hacer entre 3 y 4 imágenes por minuto, lo cual reduce el coste de cada foto a unos cuantos céntimos de euro... y lo mejor de todo, es divertido (casi diría adictivo).

El proceso de captura viene a tardar cerca de un minuto entre que solicitas el pantallazo, bluga.net obtiene la captura, te hace un ping para avisarte de que ya la tiene y nuestro sistema descarga la foto en el servidor.

Dentro de nuestro programa los sitios que no tienen foto se colocan en una lista de espera, mientras que tú estás recortando un logotipo el sistema a través del API está solicitando la pantalla de los siguientes sitios, de tal manera que cuando avanzas ya todo esta listo para que puedas seguir trabajando sin interrupciones.

En la imagen de la derecha se puede ver que la caputura de operad-arte.es se ha solicitado pero todavía no está lista por lo que no se ha podido descargar... sin embargo la captura de hatostyle.com ya esta lista y sólo falta recortarla.

Las capturas se reciben a 1024x768 en formato png sin perdida y vienen a pesar cerca de media mega cada una. Utilizando los mismos componentes que para las thumbs se selecciona la parte donde está el logotipo de la empresa y a partir de esas posiciones se generan toda una serie de imágenes en formato jpeg:

Algo importante es que las pautas de corte se almacenan en la base de datos, de esta manera si en algún momento necesitamos hacer una nueva thumb con otras medidas o deseamos cambiar de formato (por ejemplo pasar a png), podemos rehacer el procedimiento en toda las imágenes ya procesadas, sin tener que revisarlas de nuevo.

En fin ya se sabe que los desarrollos de los que estas orgullosos hoy te avergüenzan pasados unos años... pero por el momento estamos encantados con el nuevo jueguecito.

sabado, 19 julio 2008

Profesión: Ahorrador de tiempo

por Fernando Plaza en ,

El espiritu de un desarrollo informático debe ser la busqueda del ahorro del tiempo del usuario, eliminando tareas monótonas y repetitivas: ¿puedes conseguir que el trabajo se convierta en un juego?

Una vez en un contexto un poco variopinto me preguntaron que a qué me dedicaba, esto es algo que siempre me ha costado responder teniendo en cuenta que venimos del sector del recauchutado de neumáticos, la empresa familiar nació como agencia inmobiliaria y soy socio de un hospital veterinario... aunque desde hace varios años he estado centrado en los "desarrollos informáticos" pese haber estudiado Jurídico Empresarial.

El caso es que respondí que me dedicaba a conseguir que la gente ahorrara tiempo y creo que ese debe ser el Leitmotif de casi cualquier aplicación, al menos es la parte de la informática que a mi más me gusta y con la que más disfruto: la que consigue que procesos manuales tediosos se conviertan en tareas automatizadas que sólo requieran un par de clicks de ratón (o ni eso).

Para automatizar un proceso, es imprescindible conocerlo y entenderlo... esto puede que sea lo que más tiempo lleva. Poniendo por ejemplo "un mailing de recordatorio de vacunas a animales" es necesario saber entre otras cosas que:

...existen muchos tipos de vacunas, algunas para perros otras para gatos, que algunas se administran trimestralmente, otras anualmente, que otros tratamientos son estacionales. También tienes que entender que a un mismo animal puede ser necesario administrarle varias vacunas el mismo mes y que un propietario puede tener más de una mascota... y que queda muy mal enviarles varias cartas en lugar de una sólo con toda la información resumida y ordenada. Llegados a un punto, también tienes que saber que muchos propietarios pasan por el hospital a vacunar a sus animales antes de que tú les envíes la carta y que a esos propietarios no se les debe notificar tratamientos que ya les han sido administrados...

Todo esto es un proceso largo de aprendizaje, donde la tarea en cuestión es observada con "visión de programador". No obstante, para hacerla realmente bien, el análisis de la tarea se tiene que observarse desde un punto de vista empresarial, ya que llegado el momento puede que el proceso inicial del que partió la necesidad de automatizar tenga que ser modificado o depurado para que pueda automatizarse.

Aquí nos encontramos con una paradoja, ya que en las empresas grandes si bien la necesidad parte en muchas ocasiones del área de "negocio/comercial", el desarrollo de cualquier aplicación es gestionado por "el departamento informático/técnico" que a su vez suele externalizar muchos de estos desarrollos. Así negocio habla con informática que a su vez habla con el desarrollador final.

En las empresas grandes de verdad en ocasiones ni siquiera "negocio" habla con el "departamento informático" ya que existe una figura intermedia que se dedica a transmitir y dar cera a cada una de las partes: que como bien es conocido friccionan con demasiada regularidad.

Idílicamente el desarrollador de una aplicación debería poderse empapar del sistema sin intermediarios, pero esto es difícil que ocurra porque o el "programador/analista" llegará "sin galones", lo que propiciará que le hagan perder el tiempo de manera innecesaria.... o el programador será un cenutrio a nivel empresarial y/o emocional con lo que pronto saldrá escaldado de ese contacto estrecho con el frenesí realista de algunas áreas de negocio.

La mayor parte de esos pasos intermedios se han creado para evitar estas situaciones de shock, si bien con ello se ha corrompido el proceso creativo de tal manera que los plazos se alargan eternamente y los resultados a veces no son tan buenos como deberían, es decir, las aplicaciones terminan haciendo que se pierda tiempo en lugar de ahorrarse.

Por otra parte el sistema de estas empresas es escalable y la programación "de guerrilla" que es la que a mi me gusta no lo es, porque depende excesivamente del talento, la tenacidad y el compromiso de las partes implicadas.

domingo, 13 julio 2008

Thumbs en condiciones: como en Gmail y Facebook

por Fernando Plaza en , ,

Había algo de nuestro CMS que me llevaba asqueando desde hace bastante tiempo: la generación de thumbs... asi que hemos mejorado el sistema, aquí explico cómo funciona y cómo está programado.

Allá por febrero de 2006 programamos una mini-aplicación que capturaba la primera foto del posts y la dividía en pequeñas cuadrículas, entonces tu elegías el trozo que más te gustaba y esa era tu thumb. Todo lo espliqué en un post que titulé Las thumbnails más rápidas a este lado del Mississippi... en su momento estaba muy orgulloso.

Por desgracia la Ley de Murphy parece aplicarse con mucha frecuencia en esto de las thumbs y era bastante frecuente que el cuadrado no cayese en el mejor sitio: cortaba un trozo de cara, dejaba fuera una oreja... 

Así que hemos evolucionado, ahora -como se puede ver en la imagen- se captura la primera imagen del post y se muestra un recuadro sobre ella que mantiene las proporciones que tendrá la thumb final.

El recuadro se puede mover y cambiar de tamaño, una vez que tienes las coordenadas del corte puedes pulsar en "Probar" y te muestra el resultado y cuando estás convencido le das a "Guardar"... a partir del primer corte el programa te genera tres thumbs en distintos tamaños y pasa al siguiente post automáticamente.

Calculo que puedes hacer con facilidad unas 10 thumbs por minuto, por lo que el proceso de publicación no se ralentiza. Los nuevos tamaños de las thumbs son: 120 x 90 pixels (antes era 120 x 120 pixels), 70 x 53 pixels (nuevo), 50 x 38 pixels (antes 50 x 50 pixels)

Como se puede ver hemos aprovechado para cambiar la proporciones de las thumbs y hacerlas apaisadas, que quedan bastante más estéticas que cuando eran cuadradas.

Programación

Para poder hacer esto hemos utilizado el excelente script programado por Angus Turnbull DragResize 1.0. Básicamente es un js que te permite animar un DIV, cambiándolo de tamaño y posición, en principio la redimensión es totalmente libre y no puedes mantener un ratio de proporciones, pero en el foro encontramos una modificación del código que si te permite restringir las proporciones: algo esencial para las thumbs.

El div se deja transparente y se coloca una foto alineada con él desde el punto 0,0. De esa manera cuando mueves el DIV las coordenadas coinciden con las de la foto.

Con una función javascript recuperas los valores del DIV cada vez que dejas de moverlo, esas serán las pautas de corte que tendrás que aplicar a la foto. Para este último paso nosotros usamos AspJpeg, aunque supongo que habrá programas similares y gratuitos en PHP y demás.

Puedes ver como funciona aquí >>

En el ejemplo no está la parte del corte, pero si está hecha la parte `más creativa´... la de Angus Turnbull :-) 

Otras aplicaciones

Esto resulta imprescindible para los avatares de los usuarios, algo que ya teníamos hecho y que ahora vamos a actualizar, visto que por mucho que adviertas que la foto debe ser de 70x70 pixeles, el personal termina subiendo fotos de 3 megas y de todos los tamaños...

Asi que esto viene muy bien para que si alguien sube una foto que no cuadra con el tamaño solicitado le puedas mostrar una sencilla pantalla donde podrá recortar el mismo su foto on-line: igual que en Gmail, Facebook y otras redes sociales.

Nota mental - aprender mucho Javascript, convertirme en Angus Turnbull
siguiente página »