En defensa de PHP

Mayo 19th, 2008

Hace tiempo, Aurelianito puso en su blog un post acerca de un problema de PHP en particular, que
discutimos extensamente en sus comentarios.

El caso particular era:

< ? echo count == 0; ?> // imprime 1, mientras
< ? echo count == 0."\n"; ?> // no imprime nada.

Hay muchas cosas mal en este ejemplo (medio sacado por los pelos), y no son todas culpa del lenguaje:

  • count es una constante indefinida. Su valor es el string “count”;
  • El primer ejemplo es una comparación string-entero.
  • El segundo ejemplo es una comparación string-string.

El primer punto es una elección del lenguaje: prefiere devolver un string y tirar un warning, que morir. O sea, lo anterior es igual a:

< ? echo "count" == 0; ?> // imprime 1, mientras
< ? echo "count" == 0."\n"; ?> // no imprime nada.

El tercero es lo más lógico: . tiene mayor precedencia que ==, y dado que PHP es de tipos débiles y dinámicos, estoy comparando "const" con "0\n", que obviamente son diferentes. Aunque no imprime nada.

PHP tiene muchos valores para falso: 0, false, null, entre otros. Una expresión falsa devuelve null. < ? echo null; ?> no imprime nada. QED.

Hasta ahora, estamos bien.

Ahora viene la parte rara: "count" == 0 devuelve 1.

Esta es una comparación entre un string y un entero… que, empezando por ahí, no tiene sentido…
pero aún así me devuelve un valor (y uno inesperado, por decir poco).

Pero la comparación, como dije, no tiene sentido, entonces PHP intenta convertir ambos valores a un
tipo que pueda comparar. Lo que PHP decidió es, en vez de transformar el número a un string,
transforma el string a un número. Obviamente que las letras no son números1, así que el parser analiza el string hasta el primer caracter que no forme un número2 y devuelve el número que haya encontrado hasta ahora.

Por ejemplo:

< ?
assert("42" == 42);
assert("42a" == 42);
assert("4a2" == 4);
assert("a42" == 0);
//Y lo que nos importa:
assert("a" == 0);
?>

Y ahí tenemos por qué nuestro "count" == 0 devuelve 1.

Estoy completamente de acuerdo en que la respuesta tiene poco sentido, pero no es culpa del lenguaje
que el programador compare dos tipos de datos que no tienen que ver uno con el otro.

Ah, y para los que prefieren que “42″ no sea igual a 42, pueden usar ===, una comparación mucho más estricta, que también revisa el tipo de ambos valores.

  1. No probé si parsea
    hex, pero… vamos…
  2. Nuevamente,
    no revisé si remueve los espacios

Usando CSS: HTML es para contenido

Mayo 12th, 2008

Estoy hasta las pelotas de los comentarios de “Diseñar con CSS es difícil”.

Para hacer un diseño con CSS, hay que entender la separación de contenido y presentación: HTML es para contenido. CSS es para presentación. Es obvio que es imposible que estén absolutamente separados —para algo están las classes y los ids— pero hay que empezar por separar lo que se puede.

El contenido es Rey

Empezá por imaginarte que no existe el CSS, que no existen los atributos style, y que tenes que pagar $100 cada vez que usas una tabla (no, usar tablas no está mal, pero usarlas para lo que no se debe está mal).

Tus tags: h1-h7, p, strong, em, a, ul, ol, li y opcionalmente hr.1 Poné tus títulos en h1, subtítulos en h2, etc. Cada parrafo envuelto en <p></p>. Listas con ul/ol y li. Si querés resaltar una palabra, em o strong. Dado que un menú es una “lista de links”, obviamente, usá una lista. Y, obviamente, head y title para el título de la página, body envolviendo todo el contenido, y un html encerrando todo.

Listo. Con eso tendrías que hacer TODA tu página. Hay muy pocas excepciones para esa regla.

Obviamente que no es lo más lindo del mundo. Pero el punto, ahora mismo, no es que sea lindo; es que tenga sentido. Los títulos son títulos porque los envolviste en h1/2/lo que sea, no porque “tienen una fuente más grande”. Las cosas marcadas tienen sentido cuando las marcas así. Eso es el HTML: un lenguaje de MARCAS (Markup).

¿Y ahora? Ahora creas tu CSS.

Estructurando

El primer paso es armar tu estructura. Tu página hasta ahora no se presta demasiado para la estructura, así que te presento un nuevo elemento: div. Este elemento sirve para determinar las áreas de tu página: Envolve en divs (uno por seccion) a lo que sea tu encabezado, tu pie, el contenido principal, menúes, etc., mientras a cada uno le ponés el atributo id correspondiente a su sección.2

Con tus areas definidas, podés empezar a definir la estructura.3 Y eso queda para el próximo artículo.

  1. Seguro me olvido de alguno.
  2. div no hace magia. Reducí su uso sólo para donde sea útil y necesario.
  3. En este momento yo recomendaría mucho usar un CSS reset, para evitar dolores de cabeza porque los márgenes son cualquiera. Reset Reloaded, de Eric Mayer es bueno, pero también toca cosas como el tamaño de los headers, así que ojo.

Paradigma 08

Mayo 5th, 2008

Sábado y domingo 10 y 11 de mayo se realizará en Corrientes Capital Paradigma 08, Convención de Anime, Manga, Comics y Juegos, en la Sociedad Japonesa, Rivadavia 1753, de 14 a 22.

Va a haber cosplay, karaoke, bandas, y, de las garras de la Quimera, mesas de Rol.

Sí, señores, la Quimera sigue viva; ha despertado de su largo letargo (no hacíamos nada desde el último Vórtice, en diciembre), y se viene con fuerza.

A todos los que estén por la zona y les interese el tema, los invito a darse una pasada por el Stand de Quimera.

1 de Mayo: Día de la concientizacion de RSS

Abril 28th, 2008

DailyBlogTips nos informa que sólo cerca del 5% de la gente que usa Internet usa lectores RSS1 para sus noticias, y propone postear en nuestros blogs (entre otras cosas) para informar a la gente ed los beneficios de usar lectores RSS.

Mis lectores (los dos) sabrán que hice algunos posts sobre el tema (algunos más relacionados que otros), y que soy más o menos vicioso (tengo 87 suscripciones en Google Reader).

DBT también está preparando un sitio específicamente para el proyecto: RSSDay.org

Aparte de los que me leen obligados desde CodeAr, ¿Cuantos de uds usan RSS, y publican su contenido (puntos extra si no son blogs) con RSS?

  1. Según reporta FeedBurner, al menos

Libros de Programación

Abril 21st, 2008

Casi siempre que miro en Internet algo que involucre programación, se me recomienda comprar uno u otro libro. Leo más o menos rápido, así que no me molestaría comprármelos para leer.

Por lo general, Tematika y Cúspide tienen muchos de los libros que busque… siempre que no tengan nada que ver con computadoras. (No que no los haya; sino que la mayoría de los que busco no están. “Algoritmos Fundamentales”, el primer fascículo de “El arte de programar ordenadores”, está; los otros, no.)

Además, cuando es un libro que originalmente se publicó en otro idioma (inglés, en particular, como el 99% de los libros útiles que involucran computadoras), prefiero leerlo en ese idioma; aunque acá es casi imposible de conseguir.

Claro que, como dije antes, que no encuentre los libros que busque no significa que no hayan libros; en particular algunos como títulos tan prometedores como “Programación de PHP en Windows”. (Disclaimer: no leí el libro, y no digo que sea malo, pero, rebajándome a juzgar un libro por su portada, un libro que trata sobre la programación de un lenguaje interpretado en una plataforma específica no me inspira mucha confianza.)

A mis lectores, entonces: ¿Ustedes compran libros de computación/programación en librerías locales? y si es así, ¿Dónde?