Técnicas para mejorar rendimiento

Existe mucha literatura sobre como mejorar el rendimiento de las aplicaciones, pero a menudo nos olvidamos de ellas, recopilamos aquí, las técnicas más usadas en aplicaciones de escritorio:

1. Cache, cache y mas cache

Es totalmente innecesario acceder a los mismos datos en la base de datos una y otra vez, es mucho mejor, guardar estos datos en memoria o en disco, y utilizarlos en las sucesivas llamadas.

Además de este tipo de datos, están los parámetros, las preferencias de usuarios, etc…

El uso de cache, mejora radicalmente la velocidad de una aplicación.

2. Arranque Rápido.

Esta es mi técnica preferida, ideal para redes lentas. No es fácil de implementar y requiere un poco de lógica. Se recoge estadística de las tablas y recursos más usados por la aplicación cuando arranca, por ejemplo, podemos tener una aplicación que normalmente abre un formulario y que tiene una lista desplegable con provincias.

Basándonos en las estadísticas, hacemos que arranque en paralelo y proceso que precarge los datos más usado, de forma que cuando el usuario acceda, no tiene que esperar que lleguen los datos.

3. Optimización de Base de Datos

No voy a detallar todas las técnicas, pues hay muchas, pero las principales son optimización de índices, minimizar los accesos a bases de datos, desnormalización cuando es necesario, estudio de planes de ejecución de consultas, etc..

4. Escalabilidad

Quizás, la parte más complicada a la hora de desarrollar una aplicación. Lo primero es ¿como sabemos si es escalable? Existen herramientas que simulan la carga de trabajo de miles de usuairos, es un buen punto de partida.

Pero ¿como lo hacemos más escalable? Existen muchas técnicas, pero la más sencilla y útil es diseñar los sistemas para que se puedan ejecutar en paralelo, no diseñar un proceso central que lo hace todo en el servidor, es mejor diseñar, pequeños procesos de trabajo que se pueden ejecutar en paralelo.

Ahora estamos probando la ejecución distribuida de los procesos del servidor, de forma, que todos los ordenadores de la oficina, participan en el proceso global, aportanto parte de su CPU.

5. Sensación y percepción

Un día llegó a mis manos un documento de Microsoft muy curioso, sobre la percepción que tiene el usuario de la velocidad de un programa, y me pareció muy interesante. La típica barra de progreso que tenía Windows al principio al iniciar, fue sustituida por una barra que se movía a toda prisa y daba varias vueltas. La percepción del usuario es importante, y tenemos que cuidar todos los tiempos muertos de la aplicación, utilizar iconos con reloj, animaciones, etc….

Haz un comentario

Grave vulnerabilidad en el uso de AJAX

Hemos descubierto un fallo “en el uso” de AJAX, no en el AJAX en sí, que permite al usuario modificar la lógica de una aplicación, consiguiendo por ejemplo, gastos de envío gratis en tiendas online.

El fallo consiste en que muchos programadores utilizan AJAX para ejecutar lógica de negocio de servidor, pero guardan el estado en el cliente.

El estado en cliente es fácilmente modificable, a no ser que esté encriptado (.NET), permitiendo con algunas herramiendas y/o plugins para firefox modificar el estado y alterar la lógica de negocio.

Pongamos un ejemplo,

En un proceso de compra de una tienda online, el cliente escribe su dirección, y la tienda online se comunica mediante AJAX para obtener los gastos de envío de esa dirección.

Si los gastos de envío se almacenan en una varia HIDDEN, es fácil alterar este valor y consegir gastos de envío gratis.

La solución es sencilla, no almacenar esta información en HIDDEN, o almacenarlo en servidor.

1 Comentario

Google Gears, reinventando la rueda

Para muchos, tecnologías como AJAX, Google Gears, etc… han supuesto una gran innovación que nos ayudan en el camino hacia la tan nombrada WEB2.0. Para mi, sin embargo, todas estas tecnologías son una reinvención de la rueda que ya existía.

Hagamos un poco de historia….. Java aparece en 1995, aportando “Applets” a las páginas Web, de forma que era posible construir aplicaciones complejas dentro de un explorador web. Esto supuso toda una revolución para muchos desarrolladores que encontraron en esta tecnología una solución a sus problemas, los applets mas famosos fueron los menús, tratamiento de imágenes, calculadoras, visores, etc… pero no llegaron a extenderse para el desarrollo de grandes aplicaciones.

Debido al enfrentamiento legal que tuvieron Microsoft y Sun con respecto a la máquina virtual, Microsoft ideo una alternativa a los Applets, y a finales de los 90 sacó al mercado DHTML y un motor de scripintg muy avanzado que permitía código en JavaScript y VisualBasic Script. Y como ejemplo de esta tecnología, el equipo de desarrollo preparó las mismas demos que Sun publico para explicar las bondades de los Applets, hechas todas con DHTML.

Los Applets poco a poco fueron desapareciendo, sobre todo cuando Netscape desapareció en la lucha con Internet Explorer.

En este punto, Microsoft apostó por su versión de los Applets, los controles ActiveX, los cuales tendrían que retirar años más tardes debido a una patente.

Pero fue en el año 99 cuando descubrí Microsoft Remote Scripting, esta tecnología permitía desde una página web llamar a un procedimiento remoto del servidor, como ejemplo, una lista desplegable de provincia que al cambiarla se recargaba la lista de municipios, ¿os suena?¿AJAX?

Remote Scripting fue realmente complicado de programar, sobre todo por la carencia de herramientas efectivas para la depuración.

Con la salida al mercado de .NET, Microsoft nos dá una sorpresa que nadie se esperaba: Smart Clients, bajo este nombre se esconde una tecnología que permite colocar un ejecutable en una página web, y que se ejecute desde el explorador sin problemas, descargando las DLLs que sean necesarias y comunicandose con el servidor para acceder a los datos.

Por otro lado, Sun no tardó en responder a esta tecnología, llamandola Java Web Star.

¿Pero a donde vamos?

El problema principal es que las aplicaciones web no son lo suficientemente buenas, ni ofrecen la misma usabilidad y funcionalidad que una aplicación cliente. Y que las aplicaciones clientes no son tan fáciles de instalar y tan “bonitas” como una aplicación web.

En este sentido hay dos tendencias, llevar las aplicaciones de escritorio a web (Thin Client) o mejorar las capacidades de los browsers de internet, como AJAX, Google Gears, Adobe Flex, etc…

Es decir, llevamos más de 10 años con lo mismo, sacando tecnología sobre tecnología, para lo mismo, y cuando una de ellas parece consolidarse, aparece otra alternativa mejor que descarta las anteriores.

Aunque esto parezca bueno, pues la innovación es buena, en mi opinión, es una lucha de poderes entre Sun, Microsoft y ahora Google, que reinventan la rueda a su manera, involucrando a miles de empresas y programadores, con cambios constantes.

1 Comentario

DCOM “Inicio de sesión fallido para la cuenta IWAM_”

Si al entrar en tu aplicación web obtienes el siguiente error en el navegador:

Error de aplicación en el servidor
Error al cargar una aplicación durante el procesamiento de su solicitud. Consulte el registro de sucesos para obtener más información. Póngase en contacto con el administrador del servidor para obtener asistencia.

En el visor de sucesos, registro del sistema es posible que tengas algo como:


Origen: DCOM
Error: DCOM obtuvo "Inicio de sesión fallido: nombre de usuario desconocido o contraseña incorrecta". No se pudo iniciar la sesión .\IWAM_SERVERNAME para ejecutar el servidor.

y también esto otro:

El servidor no pudo cargar la aplicación '/LM/W3SVC/1/Root'. Error 'El proceso del servidor no ha podido iniciarse debido a que la identidad configurada no es correcta. Compruebe el nombre del usuario y la contraseña.

Este error es debido a que se ha perdido la sincronización entre la contraseña que guarda IIS para los usuarios IWAM_SERVERNAME y/o IUSR_SERVERNAME

La solución a este problema es un poquito trabajosa pero la alternativa sería reinstalar el Internet Information Server que es peor. Así que os cuento como he logrado solucionarlo yo.

  1. Desconecta tu servidor web de la red, bien usando el firewall (¿qué no tienes firewall?), bien quitando el cable de red, esto es importante porque si no las peticiones desde la red hacen que se bloqueen las cuentas IWAM e IUSR una y otra vez.
  2. Ve al Administrador de Usuarios y cambia las contraseñas para ambas cuentas. Desbloquea la cuenta si se ha quedado bloqueada.
  3. Ahora tienes que usar un script que hay en tu servidor para sincronizar las claves. Desde una consola de comandos ve al directorio C:\Inetpub\AdminScripts. Ejecuta lo siguiente:
    C:\Inetpub\AdminScripts>cscript adsutil.vbs get w3svc/anonymoususerpass
    Esto te devuelve algo como esto:
    anonymoususerpass : (STRING) "***********"
  4. Para no trabajar a ciegas edita el fichero adsutil.vbs que está en el directorio C:\Inetpub\AdminScripts desde el Bloc de notas u otro editor, busca una línea donde pone “IsSecureProperty = True”, cambia la línea por “IsSecureProperty = False”. Recuerda ponerlo luego igual por si las moscas.
  5. Vuelve a ejecutar el comando anterior desde línea de comandos y debes obtener algo como esto anonymoususerpass : (STRING) "/XEv01T!69I"
  6. Para cambiar el password establecido para la cuenta IUSR debes teclear:
    cscript adsutil.vbs set w3svc/anonymoususerpass "Pa55word" y para la cuenta IWAM tecleas:
    cscript adsutil.vbs set w3svc/wamuserpass "Pa55word"
  7. Ahora ejecuta el comando de abajo para sincronizar IIS con Microsoft Transaction Server (MTS) y los servicios de componentes (COM):
    C:\Inetpub\AdminScripts>cscript.exe synciwam.vbs -v
  8. Por último reinicia IIS desde el menú contextual del servicio IIS en una consola administrativa (MMC)

Referencias

Haz un comentario

Vim, el editor

Para mi Vim es el editor por excelencia, no digo que sea el mejor, ni el más fácil de usar, ni el más nada. Simplemente es el “todoterreno” de los editores. Lo es por diversas razones:

  • Hay versiones para casi cualquier sistema operativo. Tanto en modo consola como en modo gráfico, pero Vim siempre es el mismo.
  • Hace todo lo que cualquier editor o entorno de edición pueda hacer y quizás más. De hecho Vim puede convertirse en el entorno de desarrollo más potente que puedas imaginar.
  • Pero lo mejor de todo es que es un editor robusto, nunca se queja, nunca te deja tirado, es tan simple o complejo como quieras hacerlo.

Las dos únicas pegas que le encuentro tras varios años de usarlo son:

  • La curva de aprendizaje inicial es un poquito dura, aunque el esfuerzo merece la pena.
  • Me despisto del modo en que estoy y meto la gamba, pero no pasa nada CTRL + U y todo vuelve a su sitio.

En esta entrada os dejo con los truquillos y comandos que con más frecuencia consulto, los que se me olvidan siempre vamos. Para una introducción a Vim te recomiendo el excelente manual de Santiago Romero y al final del artículo tienes las mejores páginas que he ido encontrando sobre Vim.

Comandos que suelo olvidar y algunos trucos

Evitar los indentados indeseables
Al pegar un texto que ya estaba indentado en vim es posible que el texto se indente hasta el infinito, y más allá, para evitar esto usaremos set no ai. Esta función hace lo contrario de ‘’set autoindent”, es decir, cuando pulsemos Enter iremos directamente al primer carácter de la siguiente línea. Esta función resulta muy útil cuando estamos editando código indentado y queremos, por ejemplo, pegar texto o código desde una selección de texto externa (copiar y pegar desde un navegador, otro editor, etc.). Como el texto que pegamos ya está indentado, no necesitamos que Vim lo indente añadiendo espacios. Si lo pegáramos tal cual, veríamos como la indentación original sumada a la identación automática de Vim haría que no se respetara el indentado real del texto. Para evitar esto, podemos pulsar ESC (pasar a modo comando), y teclear ”:set noai”, y pegar el texto externo (que se pegará bien). Después podemos volver al modo de identación con ESC y ”:set ai”.

Eliminar los ^M
:%s/\r/\r/g

Eliminar líneas en blanco
:g/^\s*$/d

Buscar en ficheros cerrados
:vimgrep /palabra/ *
:cw (para ver la lista de resultados)
Más sobre esto en http://vim.wikia.com/wiki/Find_in_files_within_Vim

Buscar en los ficheros abiertos

Reemplazos
:%s/\<idiot\>/manager/gc** - reemplaza todas las ocurrencias de “idiot” con “manager”, pide confirmación

http://video.google.com/videoplay?docid=2538831956647446078

Navegación de Ficheros
:cd - cambiar de directorio
:pwd - directorio actual
:e fichero - para abrir un fichero
:e . - para ver el contenido del disco duro

.vimrc

El archivo de configuración de vim se llama .vimrc y normalmente estará en tu directorio home o en el mismo directorio de vim. Es increible todo lo que se puede hacer con este archivo. Además por ser un archivo de texto es muy fácil de editar y sobre todo copiar las configuraciones y atajos que utilizan otros usuarios. A título de ejemplo aquí tenéis mi fichero .vimrc

Si no os funcionan las eñes y los acentos utilizad set encoding=latin1 o mejor set encoding=utf-8

Enlaces recomendados

2 Comentarios

Recursos en inglés para programar en PHP

Obtenido de WikiBooks: PHP Programming

Haz un comentario

Lynx. El regreso de un veterano.

Estábamos en el año 92, teníamos HTML, pero no teníamos browser, así que dos estudiantes se propusieron  crear el primer browser compatible con HTML. Por entonces, aún usábamos terminales en la universidad, y veíamos las páginas web así:

Cuando ya me había olvidado totalmente de él, me encuentro que Google está aconsejando a los desarrolladores que utilicen Lynx para probar como “ve” el indexador la página web.

Así que me he decido a bajarme una versión para Mac, y probar algunas páginas web.

Es curioso ver, como páginas como Apple, Google, Wordpress funcionan, pero páginas como Microsoft, MSN, o la mayoría de los bancos no funcionan.

Pero lo que más destaca es la necesidad de agregar ALT y TITLE a todas las imágenes, que contienen alguna información, como cabeceras, anuncios, etc.

Más información en google:

http://www.google.com/support/webmasters/bin/answer.py?hl=en&answer=40349

Haz un comentario

CMS Made Simple

Hasta la fecha he vivido en carne propia tres frameworks para desarrollar aplicaciones web: Ruby on Rails, CakePHP y CMS Made Simple, este último, que ni siquiera es un framework como tal, ha sido el único que ha resultado productivo casi desde el primer día.
CMS Made Simple es un gestor de contenidos que puede pasar por un framework, no está tan orientado al usuario final del sitio como Joomla u otros CMS, ni tampoco es un framework como Cake o Symphony. Pero quizás ese hallarse a medio camino es lo que lo hace tan asequible para alguien que esté acostumbrado a programar en PHP.

Portal de cmsmadesimple.org

Los ingredientes de CMS Made Simple son:

  • PHP con objetos o sin ellos para la lógica de la aplicación,
  • CSS y HTML para la presentación
  • Smarty para hacer plantillas
  • Ado DB para poder acceder a cualquier base de datos.

Las dos cosas que destacan de él desde el primer momento son: la modularidad y claridad con que trata el tema de las plantillas y hojas de estilo y la capacidad de incorporar código en cualquier parte del contenido de forma limpia y elegante usando los llamados “Tags personalizados”. Además tiene estos otros puntos fuertes:

  • Una web lista para usar desde el primer momento, con gran facilidad en la gestión de plantillas.
  • Gran facilidad para programar extensiones desde dentro del entorno.
  • Traducido al español.
  • Una buena colección de módulos para agregar funcionalidades.
  • Fácil de entender y programar al poco tiempo de empezar a trabajar con él.
  • Facilidad de acceso a distintas bases de datos.

No obstante todo tiene su lado oscuro y debes conocer los puntos débiles de este entorno antes de decidirte por él:

  • Una documentación algo escasa, aunque esto parece ir mejorando.
  • Gestión de usuarios bastante mejorable.
  • No es un framework, es un CMS.

¿Cómo saber entonces si necesitas un CMS o un framework? te daré un criterio: si toda la web es la aplicación necesitas un framework, si la web utiliza varias pequeñas aplicaciones necesitas un gestor de contenidos.

Para seguir profundizando en este entorno te recomiendo:

2 Comentarios

¿Preparados para ir de “Safari”?

Recuerdo aquellos tiempos por el año 92, cuando al desarrollar una web, sólo tenías que preocuparte de que se mostrara bien en Netscape. Años más tarde, Microsoft compra Mosaic y lo llama Internet Explorer y en poco tiempo obtiene una cuota de mercado del 95%, de forma que los desarrolladores, pasaron a preocuparse sólo por el IE.

El mercado actual es totalmente diferente, Firefox ha recuperado la cuota perdida por Netscape, y entran en juego más exploradores como el Opera. Los desarrolladores se ven forzados a hacer sus páginas más compatibles, al menos para Firefox e Internet Explorer.

Icono de SafariCuando todos creíamos que Apple se había rendido a Firefox y Camino (también basado en el mismo motor de Firefox), nos encontramos con una sorpresa, una apuesta muy fuerte de Apple por extender Safari, siguiendo un plan perfectamente trazado:

  1. Lo primero ha sido, quitarse la etiqueta de incompatible, actualmente Safari 3.1 es el navegador más compatible que existe con los estándares actuales.
  2. Han convertido a Safari en multiplataforma, con versiones para Windows, OSX, iPhone y con su motor webkit, compatible con Linux.
  3. Han creado una política de distribución perfecta: todos los iPhone y todos los iPod, tienen instalados Safari (y muy pronto Apple TV). Todos los usuarios en Windows con iTunes o QuickTime, se han encontrado al actualizar la ultima versión con un icono de Safari 3.1.
  4. ¿Cómo destacar con respecto al resto de navegadores? En lugar de desarrollar navegadores cada vez más grandes, con más características (que nadie utiliza), Apple se ha dedicado a mejorar la velocidad, teniendo un rendimiento muy superior a sus competidores.
  5. Apoyo a los desarrolladores. Por un lado, Safari está basado en el navegador Konqueror de Linux, el motor sigue siendo Open Source. Por otro lado, encontramos en la versión 3.1 un menú “Desarrollo”, creado para ayudar a los desarrolladores.

¿Es hora de ir de “Safari”?

Pues la verdad es que aún es pronto, que Safari sea el navegador más compatible del mercado, no significa que funcionen todas las páginas web. Hay que tener en cuenta, que el HTML es un lenguaje que permite errores, trucos, uso de características propietarias del navegador, etc.

No obstante, como desarrolladores, debemos ir empezando a probar nuestras páginas con Safari.

¿Por qué utilizar Safari?

En los próximos años, el panorama de los navegadores cambiará radicalmente:

  • Cada vez hay más dispositivos con acceso a Internet; móviles, PDA, Nintendo Wii, Playstation 3, Nintendo DS.
  • Linux y Apple le van ganando terreno a Microsoft.
  • Google apuesta por contenido estándar, penalizando a las web que utilizan contenido no compatible.
  • La única solución para hacer páginas compatibles es seguir un estándar, de esta forma nuestro contenido se verá en todos los medios.

Utilizando Safari desde ahora, conseguiremos que nuestro contenido sea accesible en cualquier navegador.

Más información

1 Comentario

Web 2.0: El diseño importa (a veces)

A menudo aparecen publicaciones sobre las maravillas de Web 2:0; interfaz de usuario mejorado, animaciones, interactividad, etc…

Muchos me dicen que mejore mi página web, que agregue animación, noticias, que cambie los tipos de letra.

Llevo muchos años en esto, y el diseño importa, claro que importa, pero tambien hay algo mucho más importante que muchos olvidan: El objetivo de la web (vender, comunicar, etc..)

Muchas páginas web 2.0, son expectaculares, pero no cumplen su objetivo.

Pongamos un ejemplo en el mundo real con una inmobiliaria:

Inmobiliaria 1.0

- Fácil acceso

- Limpia y amplia, todo el espacio bien organizado.

- Dispone de sala de espera comoda.

- Nos recibe una secretaría amable, traje formal, educada.

- Se nos proporciona información clara y concisa.

- El entorno, la información, la docoración, la atención inspirta confianza.

Inmobiliaria 2.0

- Local de diseño, desde el exterior no parece que es una inmobiliaria, parece una galería de arte.

- Al entrar te encuentras con un monitor con videos musicales, otro monitor con anuncio de la inmobiliaria, otro monitor con información técnica de las promociones, y en otro monitor puedes chatear con tus amigos.

- Después de un rato, que no sabes donde mirar, te sientas en una silla, que tiene masaje para los pies, y de pronto, aparece un cantante de rap, cantando las características de los pisos que vende.

Desde luego, volveras a este local más veces, aunque ni siquiera te has enterado lo que venden, ni el precio, pero no te importa.

Esto, que parece una exageración, es la pura realidad, mientras las tiendas y portales, siguen apostando por un diseño clásico como google o amazon, algunos quedan encantados por las maravillas de web 2.0, haciendo portales de internet, totalmente inutiles, como la página de ww.nike.com, que despues de una hor navegando, aún no he encontrado como comprar un zapatilla.

¿Como tiene que ser una página web?

1. Debe cumplir el objetivo para la que fué diseñada.

Si es una web para vender, en 5 clicks debes poder hacer un pedido.

Si es para informar, debe presentar información clara y concisa. Es muy común en las páginas web de pequeñas empresas, que no aparezca ni su teléfono, ni su dirección.

2. Tiene que inspirar confianza, incoporando información sobre la empresa, forma de contacto, etc..

3. Tiene que estar bien organizada, la información e contacto en “Contacto”, los productos en “Productos”, etc..

4. Y los más importante, tiene que funcionar!!!!! es desesperante en algunas páginas de bancos y seguros, que por la incorporación de AJAX, la página de errores y no funcione en todos los navegadores.

En conclusión: Sólo teneis que echar un vistazo a www.google.es www.amazon.com www.apple.com

2 Comentarios