martes, 8 de abril de 2008

Patrones de diseño para torpes - 3ª parte

El patrón "Singleton"


Uno de los patrones de diseño más conocidos es el patrón "Singleton". Con este patrón se garantiza que sólo hay una instancia activa de una determinada clase.

Supongamos que tenemos una base de datos y queremos mantener una única conexión activa. Otro caso puede ser una clase que se dedique a grabar registros o trazas en un fichero. Imaginemos un objeto que descarga ficheros por FTP.

En todos estos casos puede ser conveniente tener un único objeto que realice el trabajo y garantizar que no hay varias instancias, por ejemplo, para no saturar una base de datos con conexiones, o no tener accesos simultáneos al mismo fichero, etc.

En la documentación oficial de PHP se muestra un ejemplo de este patrón para este lenguaje.

Otros patrones de diseño


Por motivos profesionales, últimamente casi programo exclusivamente con PHP. En developerWorks hay un artículo muy interesante donde amplían otro artículo anterior en el que presentaban cinco patrones básicos.

Explican y ponen ejemplos en PHP para los patrones "Adapter", "Iterator", "Decorator", "Delegate" y "State". Es una lectura obligatoria para cualquier desarrollador de PHP.

viernes, 28 de marzo de 2008

La pesadilla de los programadores y diseñadores

Nos contaba hace un par de días Blanca Salvatierra en un artículo la existencia de una página web que instaba a los usuarios del navegador Internet Explorer 6 a actualizarse o cambiar de navegador.

Realmente es un dolor tener que desarrollar páginas web que se vean bien en todos los navegadores. Aunque la mayoría de los diseñadores y programadores ya se saben los "trucos" para conseguirlo, no deja de ser una gran pérdida de tiempo y esfuerzo.

A día de hoy, los lectores de Público.es utilizan cinco navegadores principalmente (porcentajes aproximados): Internet Explorer 7 (~ 30 % de los usuarios) , Internte Explorer 6 (~ 30%), Mozilla Firefox (~ 30%), Apple Safari (~ 2%) y Opera (~1%).

De estos cinco navegadores, el Internet Explorer 6 (abreviado como IE6) es el menos compatible, para que una página que se ve bien en el resto se vea en IE6 muchas veces hay que recurrir a trucos y "chapucillas".

¿Cómo puede ser ésto? Las páginas web actualmente se basan (principalmente) en tres "lenguajes" con funciones diferenciadas, todos ellos estandarizados por organizaciones de internacionales: HTML, CSS y JavaScript.
El lenguaje HTML es el que contiene el texto o contenido significativo de una página web, el CSS se encarga de formatear y dar estilo a este texto. Finalmente, con JavaScript podemos hacer que el usuario interaccione con una página web de diferentes formas.

El problema es que en teoría todos los navegadores soportan estos tres lenguajes, pero en la práctica, cada uno lo hace a su manera, y de todos ellos, el IE6 es el que más extraño se comporta.

Supongamos que tenemos el siguiente fragmento de HTML (simplificado):

Prueba con HTML





Título del documento





Listado de palabras



  • Palabra 1

  • Palabra 2

  • Palabra 3

  • Palabra 4

  • Palabra 5




Esto es un párrafo de texto, párrafo de texto,
párrafo de texto,párrafo de texto, párrafo de texto,
párrafo de texto, párrafo de texto.
Esto es otro párrafo de texto, párrafo de texto,
párrafo de texto, párrafo de texto, párrafo de texto,
párrafo de texto, párrafo de texto.



Esto es un texto en el pie de la página.





Este documento se vería así en los distintos navegadores (pulsar para ampliar):

Captura navegadores sin estilos

No hemos especificado ningún estilo, así que los navegadores formatean el texto como les parece, aunque el resultado es muy parecido en todos los casos.

Ahora establecemos que este HTML utilice el siguiente CSS que lo formateará. Este CSS es bastante ingenuo, ya que no tiene en cuenta las peculiaridades de los distintos navegadores. Lo que pretende es establecer una página centrada, con una cabecera gris, un cuerpo azul con dos columnas, verde y amarilla y un pie de página rojo:
#contenedor {
border: solid 1px black;
padding: 10px;
width: 750px;
margin: 0 auto;
}
#cabecera {
background-color: gray;
width: 730px;
}
#cuerpo {
background-color: blue;
width: 730px;
}
#pie {
background-color: red;
width: 730px;
}
#colizda {
width: 180px;
background-color: green;
float: left;
padding: 10px;
}
#coldcha {
width: 510px;
background-color: yellow;
float: left;
padding: 10px;
}

Las diferencias entre navegadores son notorias:





















ff-antes.pngMozilla Firefox
opera-antes.pngOpera
safari-antes.pngSafari
ie7-antes.pngExplorer 7
ie6-antes.pngExplorer 6

Hacemos algunos ajustes adicionales conseguimos al fin que en todos se vea igual:
body {
/* Para centrar en IE6 */
text-align: center;
}
p, ul {
margin: 0;
padding: 0;
}
ul {
list-style: none;
}
#contenedor {
margin: 0 auto;
width: 770px;
}
#contenido {
border: solid 1px black;
padding: 10px;
width: 750px;
/* Para expandir la capa hacia abajo en
Safari, Opera y Firefox */
float: left;
/* Para compensar el apaño de IE6 en body */
text-align: left;
}
#cabecera {
background-color: gray;
float: left;
width: 750px;
}
#cuerpo {
background-color: blue;
float: left;
width: 750px;
}
#pie {
background-color: red;
float: left;
width: 750px;
}

Y éste es el resultado:





















ff-despues.pngMozilla Firefox
opera-despues.pngOpera
safari-despues.pngSafari
ie7-despues.pngExplorer 7
ie6-despues.pngExplorer 6

Lo más chocante es que para que en IE6 se vea la página centrada tenemos que establecer una propiedad ilógica: que el texto en la etiqueta "body" esté centrado (text-align: center;)
Por otra parte, los dos Internet Explorer expanden y muestran la capa contenedora de las columnas (fondo azul), mientras que en los demás hay que hacerla visible explícitamente.

En general el comportamiento de IE7, Firefox, Opera y Safari es muy similar, los problemas siempre los suele dar el IE6.

Se comprende entonces que los diseñadores de páginas web estén hartos del Explorer 6 y su peculiar forma de interpretar los estándares.

Créditos: gracias a Daniel Solana Tacón, diseñador web de Público por ayudarme con estos CSS.

miércoles, 20 de febrero de 2008

HD-DVD vs Blue-Ray: siempre pierden los mismos

En una entrada anterior hablábamos de la "guerra" de los formatos de vídeo en alta definición. Parece que ya hay vencedores y vencidos. Esta vez a Sony no le ha pasado lo mismo que en los años 80 con el sistema Betamax.

Toshiba, uno de los principales impulsores del formato HD-DVD, anunció ayer, 19 de febrero de 2008, que abandona la fabricación de productos HD-DVD. En los próximos días podremos leer una gran cantidad de sesudos análisis comerciales y técnicos sobre la "victoria" de un formato sobre otro, pero en pocos sitios se leerá lo que, en mi opinión, ha ocurrido: de nuevo, la industria nos ha tomado el pelo a los consumidores. Otra vez.

Si existe un consorcio llamado DVD-Forum (en el seno del mismo se gestó la especificación del HD-DVD), ¿por qué algunos fabricantes -que forman parte de este consorcio- se han dedicado a desarrollar su propio formato? ¿Por qué siempre hay fabricantes que desarrollan productos fuera de los estándares imponiendo los suyos propios? ¿Tan difícil es ofrecer a los consumidores un producto que no se quede obsoleto o sin soporte técnico al poco tiempo de ser adquirido?

Ya se la respuesta, claro: cuando habíamos conseguido renovar toda la videoteca y tenerla en DVD en vez de VHS, ahora hay que renovarla de nuevo para tenerla en Blue-Ray. Con los vinilos y los CDs nos hicieron la misma jugarreta.

Conmigo no cuenten. Ya estoy cansado de tanto cacharrito y nuevos formatos cada dos por tres. Además, mis películas favoritas son las de los Hermanos Marx y se ven estupendamente en el VHS ;-)

domingo, 17 de febrero de 2008

Tira nº 60: control remoto



Para los que no sepan de qué va: en Apple les gusta mucho el marketing.
"Apple Remote" es el mando a distancia que viene con algunos Mac y "Front Row" es el programa que se activa al utilizarlo, es como cualquier otro "Media Center" a pantalla completa.

Corrección: lo que el $USER debería meterse donde le quepa es el Apple Remote ;-)

viernes, 15 de febrero de 2008

Explotados encorbatados

Si usted trabaja en una empresa de desarrollo de "software" o en una consultora dedicada a la informática, no le voy a contar nada nuevo, seguramente.

Todos los que trabajamos en el sector conocemos bastante bien las "peculiaridades" de muchas de las empresas relacionadas con el desarrollo de "software" y la consultoría informática: subcontratación a mansalva, horarios abusivos y horas extras "gratis", proyectos mal planificados y con menos recursos humanos de los que serían deseables, supeditación de los costes de un proyecto a lo que el comercial "vende" al cliente, asignación de personal a proyectos en clientes con una categoría superior a la que realmente tiene el trabajador, desigualdades salariales escandalosas, ...

La verdad es casi todos los desarrolladores de software que trabajan en estas empresas ("cárnicas", en el argot del sector) están muy quemados. Es muy frustrante trabajar en estas condiciones. Por supuesto que esta no es la única profesión en la que ocurren estas miserias, pero es la que conozco.

También es muy característico de este mundillo el bajo nivel de concienciación de los trabajadores en general. En mi opinión, el hecho de que en muchas empresas obliguen al personal (masculino) a llevar corbata provoca una disminución del riego sanguíneo en determinadas zonas del cerebro que regulan la conciencia obrera. Porque en el fondo, por mucha corbata, traje y bonos de comida que se tengan, un desarrollador de software no deja de ser un obrero, un asalariado.

El último caso que ha llegado a mis oídos ha sido lo ocurrido en la empresa Integranova: han despedido a una sección sindical al completo de CGT por convocar elecciones sindicales en la empresa. No me extraña en absoluto. La acción sindical nunca ha sido bienvenida en este sector.

Se preguntarán ustedes que, si tan mal se trabaja en este sector, ¿cómo es que las cosas en general, funcionan? Les voy a responder: porque los desarrolladores de software competentes trabajan mucho (en cantidad y calidad), y, en general, son profesionales a los que les gusta mucho su trabajo y superar retos.
Esto explica que aunque los proyectos estén mal gestionados y mal planificados, al final los trabajos acaban saliendo, aunque con parches y "ñapas".

Pero el coste es muy alto, tanto económico como personal.
Los horarios de muchas personas son tan malos que dificultan mucho el tener una vida personal y familiar satisfactoria. Los costes de los proyectos muchas veces se disparan por una mala planificación, la alta rotación de personal y el mantenimiento del software se complica mucho cuando se programa con prisas y con una presión excesiva.

Quiero dejar claro que no estoy criticando a todas las empresas de desarrollo de "software" o consultoría informática. En muchas se trabaja bien. En otras, no tanto. En otras, en pocas palabras, es un infierno.