HTML semántico

A estas alturas de la película, todavía hay gente que usa HTML mal y hace cosas como escribirlo todo con etiquetas <div> en vez de usar las etiquetas semánticas que existen. Esto siempre ocurrirá, porque siempre habrá gente nueva que aprenda HTML y lo aprenda mal. Para los que estén en esta situación, un par de páginas en las que explican qué es y para qué sirve el etiquetado semántico:

¿Por qué el desarrollo web es complejo?

Porque se basa en una montaña de errores. Eso podemos leer en Why is web development so complex?:

Mainly because it’s built on a tower of mistakes.

HTML was a screwup, CSS was probably worse, and don’t get started on JavaScript.

If the web was to be redesigned from scratch, with no thought to backwards compatibility, it would be nothing like what we have today.

It’s complex due to simply piling on more cruft onto something that should have been thrown away and restarted decades ago, but we’re stuck with it now.

Start simple, just do a small amount of HTML, and style it up with CSS, and work your way up from there.

 

Cuándo me convertí en un experto

Ayer me hicieron una pregunta en Twitter que me ha gustado:

@sergiolujanmora estoy iniciando el mooc de desarrollo web, ¿cuanto tiempo te costó , desde que te iniciaste en este mundo , hasta que lo dominaste para tener un nivel experto?. Sé que las tecnologías digitales estan en constante cambio, pero tengo curiosidad.

Y mi respuesta fue:

Mi primera página la hice en 1998 y afortunadamente no queda rastro de ella, estaba plagada de GIF animados; 20 años después, sigo aprendiendo todos los días, pero también me pasa con otras cosas como el inglés o incluso el español.

No creo que sea experto en español, mucho menos en inglés. Con la tecnología me pasa lo mismo.

PHP es bueno

Me ha gustado la respuesta dada a la pregunta Everybody is saying don’t learn PHP. Learn JS frameworks but I find them too tough. I like PHP and its easy for me. I am understanding its concepts. Should I ignore them and learn PHP?:

PHP is an awesome tool. Like others. It has its strong and its weak points, like others.

I mainly develop in PHP, Java, Python, C/C++, C# (and Javascript, only when expressly requested)… and I have to say when I want something actionable and done fast, it’s either PHP or Python and that’s it.

PHP is best for web backends, Python is more general, comes with some awesome A.I. and analysis libraries.

I tell you why “everybody” tells you something wrong:

  • half of them are “language activists” (usually for Python or Javascript), most of them are not even professionals, otherwise they would just deal with the fact we are talking about tools, not ideologies.
  • several are “opportunity hoppers”, only looking websites that tell what language earns the highest income. I would never hire such guys, because they are unreliable. Developing is serious business, you don’t want a guy that after 6 months switches job because language XYZ, in year ABCD, potentiallyearns him $2k a year more.
  • the remaining ones, are ignorant. Ignorant in the literal sense. They read some polemics on some blogs (usually “language purist” blogs) in 2011 and never cared to read updated information.
    Now, 2011 knowledge is stale by any standard. PHP did a drastic change starting from version 5.5, that is since about 2013 (4 years ago) and implemented tons and tons of “cool developer guy” syntax facilities and structures.

    Since version 7, PHP is twice as fast and implemented so many new features, that Java itself got behind in some niche constructs.
    Nowadays you can develop PHP backends that really “taste like Java”.
    From lambda / closures / anon functions to iterators, from nice interfaces to factories, from classic patterns to unit testsprofilingand code coverage statisticsmock upstraitscontinuous integration (still rough), from depenencies packages to bigdata access, large (SymfonyLaravelWordPress(!) (powering millions of websites)), medium (Yii and others) and small (Fat Free Framework and more) MVC / REST frameworks. Just name a feature, it’s very possible today’s PHP got it.
    PHP even gets decent (NetBeansEclipseCodeLobster) to awesome development environments (PHPStorm – payware).

    Plus – and no other language beats PHP at this, since the beginning PHP got blazing fast, ultra-extra-mega-flexible key-value arrays (technically: ordered maps) and tons and tons of arrays management functions.

    So… beware, check PHP out and make yourself an idea. It’s actually very quick to check PHP out and see if it’s the tool for you. Just download one of zillions free “LAMP” or “WAMP” or “MAMP” (Linux / Windows / Mac) distributions, that is pre-configured packages including web server, database server and PHP. Some of those are terrific and include debuggers, control panels, additional services and much more.

El error de todos los años, superado

Esto es un clásico de todos los años. Claro, alguien podría decir que es mi culpa, que no enseño bien a mis estudiantes. Es verdad, podría ser, si no fuese porque mi asignatura es de tercer curso y su objetivo no es aprender a programar y a trabajar con bases de datos (eso ya lo han estudiado en asignaturas previas); el objetivo de la asignatura que yo imparto es aprender a desarrollar aplicaciones web.

Por comparar, es como si en una asignatura de cálculo de ecuaciones diferenciales hubiese que enseñar a los estudiantes a derivar o incluso a resolver ecuaciones lineales o incluso a sumar y multiplicar.

Por otro lado, yo sé que hay gente, compañeros, a los que no les gusta que estas cosas “se aireen”, son más de “barrer la suciedad debajo de la alfombra”. Bueno, para gustos, los colores.

Este año, como es costumbre, al llegar al acceso a la base de datos desde una página web me he encontrado el típico error de hacer una consulta y traerse todo el contenido de una tabla a la página web para buscar un único dato. ¿Y si tu tabla son los usuarios de Facebook, te vas a traer una tabla con mil millones de registros? Para muchos estudiantes, el uso de WHERE para filtrar los resultados es algo esotérico… y quizás pecaminoso.

Este año me he encontrado algo muy sorprendente e imaginativo. Tiene su valor, porque yo creo que nunca hubiese imaginado hacer eso. Por tanto, desde un punto de vista del pensamiento divergente, es genial. Sin embargo…

En la siguiente imagen podemos ver un fragmento de código. El bloque de código dentro de la condición if tiene como objetivo comprobar si el id (autonumérico, clave primaria de la tabla FOTOS) que recibe la página mediante GET pertenece a una foto de las almacenadas en la base de datos.

La sentencia “select * from FOTOS” podría tener una cláusula WHERE para buscar el id, pero no.

En vez de ello, se consulta num_rows para obtener el número de filas devueltas y comparar el id de la foto con ese número. En la siguiente condición se comprueba si el id de la foto es mayor que el número de filas: si es mayor, la foto no existe y se muestra un mensaje de error; si no es mayor, la foto existe y se continúa con el procesamiento.

¿¿¿Cómo???

Claro, la suposición aplicada en este pensamiento divergente es que el id se corresponde con el número de fotos que existen en el momento de insertar la foto, lo cual es cierto siempre que:

  1. El id comience siempre desde 1.
  2. Nunca se borre una foto.

Porque… en cuanto se borre una foto de la tabla, este código falla más que una escopeta de feria.

Y bueno, el resto del código también merece algún comentario adicional, lo dejo como ejercicio para casa para el lector interesado.