Tag Archives: Problemas de Software

Límites de Gmail

Gmail tiene un límite de envío de correos electrónicos diarios además del tamaño de los archivos adjuntos (20MB) y el espacio de almacenamiento (7 GB y creciendo…). Si se superan esos números tu cuenta de correo electrónico es inhabilitada temporalmente y sin previo aviso.

 

Para evitar eso te recomiendo que leas lo siguiente:

1) Si accedes a Gmail por medio de clientes POP o IMAP (por ejemplo Microsoft Outlook ) solamente puedes enviar un e-mail a un máximo de 100 personas a la vez. Si excedes el número de contactos tu cuentas se deshabilitará por un día y la pantalla te mostrará el error 550 5.4.5 Daily sending quota exceed.

2) En el caso de acceder desde el navegador, el límite son 500 destinatarios a la vez. Si se añaden más utilizando los campos Para, CC o CCO, la cuenta de deshabilita entre 24 y 72 horas y tu pantalla dirá: . Error: “Gmail Lockdown in Secton 4″

3) La cuenta también se desactiva si hay muchas direcciones de correo electrónico inexistentes o equivocadas que rebotan en una entrega de error. Por eso es conveniente chequear las direcciones antes de hacer  un click en el  botón de enviar.

4) Tu cuenta de Gmail se cancelará permanentemente si no la revisas en un período de nueve meses. Todos los mensajes que tengas almacenados se eliminan y la dirección se pone en uso para otro posible usuario.

Importante: lo mismo sucede con los usuarios de Google Apps!

Ahora no tienes motivos para quedarte sin tu cuenta de Gmail!

Errores de software en portales de Internet

Hay veces en la vida en que algún programador mete la pata. Y hay veces en que esas metidas de pata se prolongan en el tiempo. Muchas veces esos períodos de tiempo son tan largos que las metidas de pata del programador se convierten en clásicos.

Un clásico es el portal de noticias Observa, del que soy fiel lector. Pero creo que en realidad lo que me hace fiel es poder esperar estos momentos de regocijo en que el programador de Observa mete la pata y salta un error en la página principal que se ve así:

error-observa-01

Hay varias cosas que nosotros programadores debemos tener en cuenta a la hora de poner un sistema en producción y que Observa es un caso claro no tiene.

1) Hay que crear páginas de error personalizadas. Para eso recomiendo leer este artículo: http://www.smashingmagazine.com/2009/06/12/effective-maintenance-pages-examples-and-best-practices/

2) Hay que deshabilitar en producción las páginas de error que tira el .net Framework. Así que alguien de desarrollo de Observa tendrá que leer este artículo: http://msdn.microsoft.com/es-es/library/h0hfz6fc(VS.80).aspx

3) Hay que ser muy celoso de la seguridad. ¡Paranoico! Porque una de las primeras cosas que aprendí respecto a seguridad es que el posible atacante no debe ni siquiera saber en que tecnología funciona nuestro sitio web.

Si vemos la imagen anterior, encontramos que hay dos links que presionando el primero nos muestra un montón de rutas y versiones de archivos y presionando el segundo nos muestra el código fuente de la aplicación.

error-observa-02

4) Descubro analizando el código que el sitio de Observa está hecho todo a mano y no con un CMS (ya lo sabía de antes pero sirve para ejemplo), por lo cual eso aumenta la posibilidad de errores porque hay que tocar código. Un CMS, aunque sea propietario, permite hacer cambios a través de configuraciones y no a través de código.

5) Proceso de Testing: el testing hoy en día es muy importante porque nada puede fallar. Es por eso que deben existir los casos de uso y las matrices de trazabilidad. Cada vez que se cambia una funcionalidad hay que volver a probar todos y cada uno de los casos de uso.

Pero no solo eso. Hoy en día se hacen diferentes tipos de testing e incluso se contrata a empresas especializadas, como es el Centro de Ensayos de Software.

6) Control de errores: .Net Framework nos entrego a los programadores de plataforma Microsoft la belleza americana del control de errores estructurado: Try Catch. Úsenlo al máximo con todo su potencial:

Try Catch When Finally End Try

Deben existir casos para todas esas partes y conocer de antemano que excepciones se pueden dar. Incluso los componentes internos tienen que implementar Excepciones y devolver Excepciones cuando sea posible. Eso lo aprendí del código de  Intellikon y funcionaba muy bien!

7) Podemos hablar durante horas de esto y seguir apareciendo errores, por eso, ningun software está libre de errores. El error de programación es imposible de evitar siempre, porque por su naturaleza, no se pueden preveer todos los caso. Los clientes también deben entender eso. Por eso es bueno recordar las 4 variables del software: Cronograma, Alcance, Presupuesto y Calidad. Cuando se contruye software, una tiene que ser variable y todas las demás fijas.

Para finalizar, unos chistes sobre bugs de software:

http://cliquee.net/2007/05/bug-o-mania-story-of-software-bugs/

¿A ver cuánto aguanta Facebook?

Dentro de 3 días y monedas (según la hora a la que escribo este post) Facebook habilitará la posibilidad de elegir un nombre de usuario, de forma que cada persona pueda decir mi usuario es “fulanito” y no decir “buscame en Facebook y agregame”. Claro… si Federico de los Santos conozco 4 (y uno se enojó porque me llamo como él!!!) decir que te busquen es una tranza.

facebook-countdown

Pero detrás de esto hay cosas muy importantes. Como la posibilidad de elegir un nombre se habilitará en un tiempo determinado para todo el mundo, o sea, para los más de 200 millones de usuarios, hay que considerar lo siguiente:

1) Los servidores donde se aloja Facebook recibirán muchas llamadas simultáneas a 2 funciones básicas.
    a) Chequear disponibilidad (Un SELECT en una base de datos?)
    b) Registrar un nombre (Un UPDATE en una base de datos?)
2) Muchos usuarios desde puntos muy cercanos en el globo abrirán la página de facebook que es bastante pesadita.
    a) En Uruguay somos 93 mil usuarios en la Red Uruguay y otro tanto más de gente que no está en esa red.
    b) Mucho tráfico a la misma vez y para el mismo lado, puede ser un problema de saturación de nuestro magro enlace.
3) No sé en que motor están alojados los datos, pero dudo que sean MySQL… o al menos es la versión corporativa.
    a) Va a ser un experimento muy bueno para la tecnología de base de datos utilizada.
    b) Va a ser un experimento espectacular para ver si PHP aguanta.
4) Exclusión mutua
    a) ¿Qué pasa si está mal programado y mientra verificas un nombre y lo confirmas alguien ya lo confirmó?
    b) ¿Qué pasa si está mal programado y trata de registrar un nombre que ya está registrado?
    c) ¿Qué pasa si efectívamente registra dos nombres iguales a usuarios distintos?
Va a estar divertido. Yo el sábado a la 1:01 voy a estar haciendo click :-) Así que me voy a hacer una listita de posibles nombres de usuario.

Facebook nos muestra el futuro (bug en facebook)

Desde que Facebook cambió su página inicial hace unos meses, ha crecido exponencialmente y yo mismo empecé a usarlo. Facebook ahora era menos para mandar y recibir abracitos de oso y ahora servía más como herramienta para encontrar gente, organizar eventos y compartir contenido.

Aunque la primera la hace bastante bien, en las otras 2 aún, según mi consideración, le falta un poco. Jejeje… intentamos juntarnos con la gente de Icorp y al final nadie se dió cuenta que había un evento en el grupo.

Ahora miren la siguiente imagen:

bug-facebook-zona-horaria

puse un post hoy a las 0:14 y resulta que Facebook me dice que el post lo “puse” mañana (tomorrow).

Como no podía suceder de otra manera, cuando volví a entrar a la página del grupo, Facebook ya no mostraba mi mensaje… ¡porque va a aparecer mañana! Mañana es hoy, pero seguramente por un asunto de zonas horarias, Facebook está ingresando los post con mi zona (UTC -2) y evaluando que mostrar con la zona horaria del servidor o alguna otra. Cuando para mi ya es un nuevo día, en EEUU tienen de 2 a 5 horas de “ayer”.

Pero aún más interesante es lo que pasó 9 minutos después. Alguien ingresó un mensaje, también en mañana, pero el mensaje de esa persona aparece… y el mio no. ¿Qué pasó? Esa persona vive en Los Ángeles (California, EEUU), por lo cual, a él aún le quedan 4 horas de “ayer”.

bug-facebook-zona-horaria-2

Voy a considerar que he descubierto un bug de Facebook.

Respaldar los datos del servidor

Muchos ríos de tinta se han escrito sobre los backups, los sistemas de recuperación de desastres y los de continuidad del negocios. Son todos relacionados, pero muy diferentes y en muchos casos interdependientes.

Hoy me enteré que JournalSpace.com había salido del negocio del “personal authoring” (proveedor de espacio para blogging). Al parecer la causa es un mal diseño de esas 3 cosas mencionadas.

Cuando se trata de evaluar cual es más importante que la otra, me animo a decir que el backup es superiormente más importante que las demás. Porque lo peor que puede sucederle a tu compañía, es lo que le sucedió a esta empresa, perder datos.

Sin embargo, cada opción debe ser evaluada de forma independiente y deben estar escritos y probados los 3 métodos.

Continuidad del negocio

Continuidad del negocio significa que el servicio que se brinda estará disponible durante todo el tiempo que se indique en la SLA (Service Level Agreement). Es importante que para cada servicio brindado, se establezca entre el centro de cómputos y el cliente, cual será la ventana de tiempo o el porcentaje de tiempo que se acordará.

Una mala decisión de tiempo es decir 24x7x365 porque generalmente eso no se puede cumplir. Sin embargo, si se puede cumplir con algo del estilo: 99% uptime de 7:00 a 20:00. 90% uptime de 20:00 a 7:00. Esto deja unos 8 minutos, tiempo suficuente para que un servicio se reinicie durante las horas de trabajo, para corregir un deadlock en la base de datos y deja una hora en la noche para bajar servicios y hacer backup.

Obviamente que en cada empresa y para cada servicio, estos tiempos tienen que ser ensayados.

¿Pero que pasa si se nos rompe algo físico o surge un clásico problema “de fuerza mayor”? La SLA debe especificar que eso es un caso de “Recuperación de desastres”.

Recuperación de desastres

Con la Virtualización de Servidores logramos una herramienta estupenda para implementar Recuperación de desastres. Con esto, recuperar un servidor es traer la última copia de la VM y levantarla, eliminando la dañada.

Claro que hay un tema vital a tener en cuenta. ¿Dónde se almacenan esas VM y cuánto tardarem0s en recuperarlas desde el repositorio de respaldo? Todo eso debe estar previsto, o nuestro fenomenal sistema de Recuperación de desastres no funcionará.

¿Pero si no tenemos nada virtualizado? ¿O lo que se rompe es un disco del servidor de VMs?

Los sistemas de RAID son la primer línea de ataque al problema, pero no lo son todo. Me han tocado casos de un servidor donde no se quiso invertir demasiado en hardware y se implementó RAID por software en discos ATA. A la semana de establecer el Espejo (RAID 1), la copia se desincronizaba y nadie se daba cuenta que el RAID no funcionaba.

En otros casos, se rompieron 2 discos a la misma vez de un servidor con una placa RAID y discos SCSI, resultando que se perdieron todos los datos. El servidor no tenía más de un mes de instalado y se había cancelado la compra de la unidad de cinta “porque costaba casi mil dólares”.

La gente de JournalSpace.com tenía un RAID 1 que funcionaba muy bien. No estaban preparados para el peor de los males: el sabotaje.

Respaldos de datos

Los respaldos a cintas o a unidades ópticas sin duda son lo más básico de implementar. Y por eso un sistema eficiente de respaldos puede salir tanto o más caro que el mismo servidor.

La desventaja que encuentra la gente que cree que un sistema RAID es una forma de ahorrarse el backup, es que los backup tardan mucho, ocupan mucho y cuestan mucho. Sin embargo, un sistema de recuperación de desastres no es un sistema de respaldos. El caro error de JornalSpace fue esto mismo, como dicen en su página actualmente: “As data is written (such as saving an item to the database), it’s automatically copied to both drives, as a backup mechanism” [en español: "cuando los datos se escriben (como cuando se guarda algo en la base de datos), se copian automáticamente al otro disco, como un método de respaldo"].

Sin embargo, si es cierto que si todo ha salido “no tan mal”, es más sencillo volver a estar en línea desde un sistema de recuperación de desastres que desde un backup.

Para implementar un sistema de respaldos se deben evaluar: todos los datos que usan las aplicaciones, la periodicidad de cambio, la ubicación donde se guardarán y las aplicaciones que los usarán.

En muchos casos se respaldan cosas que no son necesarias o se obvian cosas que deberían respaldarse. El caso de JournalSpace.com fue esto último. Respaldaban el sitio web con los archivos PHP, pero no respaldaba la base de datos!

Conclusión

Espero que en el futuro, todo gerente, director y dueño de pequeñas y medianas empresas esté más al tanto de los costos de las pérdidas de datos, de los métodos de respaldo y recuperación y de la importancia de invertir en ellos.

Los casos que he visto de pérdidas y recuperación de datos en Uruguay han sido porque los dueños de las empresas no han querido gastar en unidades de cintas o discos más grandes. Y cuando sobreviene el siniestro, la culpa la tienen los de IT.

Lamento informarles que no es así, sino que hay una relación muy directa entre la cantidad de recursos que se dedican a dichos sistemas y la efectividad que tienen. Tanto es así que considero que en cada empresa que tenga más de 1 servidor con correo electrónico o bases de datos, debería tenerse a una persona exclusiva para implementar estos tres puntos. Y que no debería además de estar programando, instalando PCs, ayudando a usuarios con Excel y llamando a proveedores para preguntar precios de centrales telefónicas.

¡Nos vemos en el próximo desastre!