Estamos en un mundo en constante cambio, y los grandes avances en Internet han permitido a más gente comunicarse y reaprovechar las investigaciones y conocimientos de los demás. Esto ha hecho que el mundo de la informática y posiblemente el mundo entero, haya evolucionado a una velocidad vertiginosa en los últimos tiempos.

En el caso de la programación, los lenguajes y las tecnologías también ha habido un cambio sustancial en los últimos tiempos. Es por eso que ciertas tecnologías tienen ya algunas alternativas que son ampliamente mejores.

Stack web:

Tradicionalmente el stack típico opensource y popular era un AMPP (Apache-MySQL-PHP-Perl).

Yo he estado muchos años usando PHP, MySQL y Apache para desarrollo web. Y mucha gente ha hecho lo mismo.

Actualmente mi stack web ha cambiado radicalmente: NMN (Nginx-MongoDb-Node.JS+Typescript).

¿Qué hace de estas tecnologías mejores? Escalabilidad y mejor uso de los recursos. Permiten tener servidores web muy baratos y que consumen muy pocos recursos a la vez que admiten muchísimas visitas concurrentes.

Sobre las ventajas de nginx+node.js ya he hablado en otros posts. Y la ventaja principal de ambos es la gestión asíncrona de peticiones.

La ventaja de mongodb es la escalabilidad horizontal evitando completamente las bases de datos relacionales y admitiendo estructuras complejas.

TypeScript soluciona parcialmente los problemas que tenía Node.JS (relacionados con el uso de JavaScript) ofreciendo un autocompletado bastante bueno, suficiente, pero que se mejorará aún más cuando el lenguaje soporte genéricos.

Conclusión: aunque hoy en día hay muchas opciones, y PHP y Node.JS no son las únicas, de las cosas que he probado me quedo con el stack Nginx-MongoDb-Node.JS+Typescript.

Formatos de imagen:

Los formatos gráficos han ido evolucionando con el tiempo, pero los más populares debido a su repercusión en la web han sido GIF, PNG, JPEG y SVG. GIF tenía soporte para animaciones, pero únicamente soportaba paleta gráfica, y aunque su compresión es lossless, el hecho de usar paleta hace que acabe habiendo pérdidas. PNG soporta paleta de colores, e imágenes de color verdadero con filtros por fila para mejor compresión y canal alpha y su compresión es lossless. JPEG no soporta canal alpha y usa una compresión lossy que reduce sustancialmente el tamaño de las imágenes; es ideal para fotos. Para imágenes con pocos colores o altos contrastes, la compresión lossy genera artifacts que son mayores cuanto más grande es la compresión. Y por último SVG, que permite representar formas vectoriales, escalables y con un formato XML, que junto a compresión, permite generar gráficos de alta calidad, vectoriales, escalables y que ocupan poco.

Aunque hay diversos formatos nuevos, superiores: JPEG-XR, JPEG-2000, APNG, hay un nuevo formato que está emergiendo y que ya va por su versión 0.2.1 que es WEBP. Webp permite sustituir a dos formatos ahora mismo PNG y JPEG. Webp soporta actualmente compresiones lossless y lossy y canal alpha con mejor rendimiento que PNG y JPEG en sus respectivos campos. Además ofrece un nuevo tipo de imagen que no se podía conseguir actualmente con los formatos tradicionales: compresión lossy + canal alpha. Además la implementación es muy sencilla y está hecha en ANSI-C con lo que es muy portable. Webp además es un subset de webm, que es un contendor basado en MKV con un códec gráfico basado en VP8 con lo que usando Webm tenemos el equivalente al GIF. Además tiene una licencia completamente permisiva y perpetua. Sobre WEBP hablaré en otro post.

Conclusión: Actualmente me quedo con Webp. En WEB sigue siendo indispensable usar formatos comunes (aunque podemos distribuir diferentes tipo de imágenes según el navegador). Sin embargo en los videojuegos y otras aplicaciones podemos usar el formato que queramos. Ahí Webp es una buena opción para tener programas/juegos compactos especialmente para dispositivos móviles.

Formatos de vídeo:

Tradicionalmente el contenedor típico para vídeos era el AVI, posteriormenete aparecieron MP4, OGG y MKV. Codecs de vídeo han habido muchos, pero el más popular es el H264, el códec estándar posterior al MPEG. Hace algún tiempo, google adquirió un códec VP8 (desarrollado por On Technologies) y lo liberó como royalty free y libre de patentes y creó el contenedor Webm basado en MKV. WebM usa VP8 como códec de vídeo y Vorbis como códec de audio. Con lo que hace un stack completamente libre. Webm mejora sustancialmente la compresión de H264. Webm además es soportado en Google Chrome, Firefox y Opera y tiene plugins para Internet Explorer y Safari.

Conclusión: Webm es una buena opción para vídeo en la web y actualmente se puede usar en páginas web, aunque conviene tener un formato alternativo (generalmente MP4+H264) para los navegadores que no lo soportan. Para aplicaciones y juegos, aunque el soporte por hardware es todavía algo escaso (cosa que está cambiando poco a poco) puede ser una opción interesante dado su alto ratio de compresión y siendo completamente libre.

Formatos de audio:

Los formatos actuales por excelencia son MP3, OGG Vorbis y ACC. MP3 y ACC no son codecs libres, pero Vorbis sí lo es; tanto su contenedor OGG como el codec Vorbis. Sin embargo estos códecs populares únicamente funcionan bien para wideband y por lo tanto van bien para música, pero no son tan buenos comprimiendo voz. Para voz, existía un códec Speex que permitía comprimir ondas con voz humana con un ratio genial. Pero luego apareció OPUS. Opus tiene las bondades de Speex de comprimir muy bien la voz, a la vez que de comprime bien también música y ofrece mejor calidad con el mismo bitrate que Vorbis y MP3. Además igual que Vorbis, OPUS es libre.

Conclusión: Para web no nos queda otra que usar los formatos conocidos, sin embargo para videojuegos o aplicaciones OPUS es una gran opción, especialmente si tenemos un juego doblado y queremos reducir sustancialmente el tamaño del juego para dispositivos móviles y transmisión digital, sin sacrificar a una buena calidad del audio.