Youtube estándar con (X)HTML válido
El código para insertar un video de Youtube (o análogos como metacafe, dailymotion, etc..) en una página que busca cumplir los estándares web es a menudo un quebradero de cabeza para los bloggers y webmasters.
Youtube proporciona un código que copiar y pegar en nuestro blog para reproducir los videos de una forma rápida y sencilla, pero el código no es todo lo correcto que debiera:
Si comprobaramos con el validador W3C este código, veríamos que tiene varios problemas:
- Se utiliza correctamente el tag object, pero no se especifican ciertos parámetros importantes como data o type.
- Los tags "unitarios" param en XHTML se deben cerrar en la misma etiqueta de apertura.
- El uso de la etiqueta no estándar embed puede producir incompatibilidades en navegadores que no la utilicen, así como dispositivos móviles, lectores u otros.
- No se proporciona un método alternativo en el caso de que no exista soporte para flash.
La solución es bien sencilla. Basta con codificar de la siguiente manera:
En este código se corrigen varios conceptos, pero sobre todo se elimina el uso del tag embed, puesto que se trata de una etiqueta privada que se ha utilizado mucho e irregularmente, pero no es estándar.
- Se utiliza un object con la dirección del objeto en el atributo data y el MIME en el atributo type.
- Los tags param se vuelven "unitarios". Así el código es estándar XHTML, y además es compatible con HTML.
- Accesibilidad: Se añade como método alternativo una imagen que se mostrará en el caso de no disponer del plugin Flash para el navegador. En el caso de no tener tampoco soporte para imagenes (lectores de voz, navegadores de texto, ...) se mostrará el texto del atributo alt de la imagen.
Un problema también muy común en las validaciones suele ser el tema de no codificar correctamente el ampersand (&) en una URL (en el atributo data de object o en value del param), que debería aparecer como &.
Finalmente, tendremos un código para videos o animaciones flash de youtube (u otra entidad similar) completamente estándar:
Lenguajes de programación complicados
Un lenguaje de programación es un conjunto de símbolos y reglas similares a un «idioma», con el cuál podremos crear aplicaciones o sistemas para controlar una máquina o determinadas funciones. Existen muchos y muy variados, algunos muy famosos son: Java, C/C++, Basic o Perl.
Sin embargo, existen algunos, mucho menos conocidos que podrían entrar en la categoría de Lenguajes de programación complicados dada su naturaleza. Echemos un vistazo a alguno de ellos:
Intercal (1972): Se diseñó en un principio como una parodia de los lenguajes Fortran y Cobol, por la compleja didáctica que poseían. Se trata de una especie de lenguaje máquina. Como curiosidad, Intercal significa «Lenguaje compilado con ningún acrónimo pronunciable».
Ejemplo del Hello World! en Intercal:
PLEASE DO ,1 <- #13
DO ,1 SUB #1 <- #238
DO ,1 SUB #2 <- #112
DO ,1 SUB #3 <- #112
DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64
DO ,1 SUB #6 <- #238
DO ,1 SUB #7 <- #26
DO ,1 SUB #8 <- #248
DO ,1 SUB #9 <- #168
DO ,1 SUB #10 <- #24
DO ,1 SUB #11 <- #16
DO ,1 SUB #12 <- #158
DO ,1 SUB #13 <- #52
PLEASE READ OUT ,1
PLEASE GIVE UPBrainfuck (1993): Se trata de un lenguaje de programación que a la vez que se basa en un concepto simple, resulta altamente complejo: Funciona sólo realizando operaciones sobre punteros.
Ejemplo del Hello World! en Brainfuck:
++++++++++
[
>+++++++>++++++++++>+++>+<<<<-
]
>++.
>+.
+++++++.
.
+++.
>++.
<<+++++++++++++++.
>.
+++.
------.
--------.
>+.
>.Befunge93 (1993): Este lenguaje de programación se caracteriza por estar basado en el modelo de una máquina de pila para pasar parámetros y utilizar una especie de matriz bidimensional para sus instrucciones, que podrán dirigir el control de flujo en cualquier dirección, volviendo en círculo al mismo lugar si se excede en las dimensiones.
Ejemplo del Hello World! en Befunge:
> v
v ,,,,,"Hello"<
>48*, v
v,,,,,,"World!"<
>25*,@
Malbolge (1998): Se diseñó para ser un lenguaje de programación muy complicado y se basa en teorías de criptoanálisis. Su nombre está basado en el 8º círculo del infierno (La Divina Comedia, Dante).
Ejemplo del Hello World! en Malbolge:
(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**
hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<Unlambda (2001): Este lenguaje nace de la mezcla entre dos conceptos característicos de la programación usual: los lenguajes ofuscados y los lenguajes funcionales (sólo se maneja la función). Se basa en la lógica combinatoria y el cálculo de operaciones lambda.
Ejemplo del Hello World! en Unlambda:
`r```````````.H.e.l.l.o. .w.o.r.l.diWhitespace (2003): Quizás el lenguaje de programación más original. Su característica principal es que se desarrolla con espacios en blanco, tabulaciones y retornos de carro (enter). Especialmente curioso el resaltado de sintaxis en VIM del Whitespace.
Ejemplo del Hello World! en Whitespace.
Ook! (2003): Otro lenguaje de programación bastante original. Se basa en la imitación de un gruñido de un orangután como manejador de punteros. Contiene 3 palabras reservadas (Ook., Ook? y Ook!). Es una parodia del Brainfuck y se basa en un personaje (mago-bibliotecario) de Mundodisco, que se convertía en orangután.
Ejemplo del Hello World! en Ook!:
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook?
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook?
Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.
Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook.
Ook! Ook. Ook! Ook? Ook! Ook! Ook? Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook.Chef (2003): Este lenguajde programación se basa en que su sintaxis simula ser una receta de cocina. Funciona con un modelo de pila, donde puedes manejar variables, datos e instrucciones.
Ejemplo del Hello World! en Chef:
Hello World Souffle.
Ingredients.
72 g haricot beans
101 eggs
108 g lard
111 cups oil
32 zucchinis
119 ml water
114 g red salmon
100 g dijon mustard
33 potatoes
más...
Piet (2003): En este lenguaje de programación, los programas son bitmaps que simulan ser pinturas de arte abstracto. El nombre del lenguaje es en honor al pintor holandés Piet Mondrian.
Ejemplo del Hello World! en Piet.
Funciones PHP: Optimizar código
Los programadores (sobre todo los que estamos aprendiendo) solemos preocuparnos poco de la optimización de código cuando realizamos un programa. A priori, le damos importancia a dos factores:
- Funcionalidad: La más intuitiva de todas. Que el programa que estamos realizando, haga lo que buscamos.
- Brevedad: Buscamos que el programa ocupe lo menos posible.
Otros factores como rapidez, comprensión del código, optimización, documentación... no son evaluados como criterios primarios. Sin embargo, son muy importantes.
En la programación web (más si cabe) uno de los criterios más importantes es la optimización, ya que disponemos de un servidor con recursos limitados. Si conseguimos que nuestro código sea más eficiente, dispondremos de más capacidad en nuestro servidor (menos carga).
Esto es especialmente importante cuando tenemos muchas visitas diarias: optimizar un script PHP de un artículo no repercute especialmente, en cambio, optimizar un script PHP que se ejecuta siempre (por ejemplo, el sidebar) mejora ampliamente la eficiencia de nuestro código.
En PHP Benchmark hacen algunas pruebas de eficiencia con respecto a funciones similares de PHP. A continuación voy a hacer un breve repaso, con algunos añadidos:
- Usar HTML ante PHP: Si necesitas escribir HTML hazlo directamente sin utilizar echo o print. Usa PHP para imprimir información sólo cuando sea necesario.
- Variables: Favorece siempre que puedas el uso de variables estáticas. No utilices variables que no necesites (ocupan memoria). Evita las variables globales en la medida de lo posible. Usa constantes.
- Unset: Utiliza la función unset para destruir variables y liberar memoria, sobre todo con arrays o variables extensas. PHP usa un Garbage Collector, pero en mitad de un script puedes usarlo para maximizar la memoria disponible (útil en servidores limitados).
- Bucles: Revisa bien los bucles en tus programas, si no es necesario un bucle, evitalo. Si puedes ahorrarte ciclos, hazlo. Comprueba la condición de parada y nunca uses funciones en ella (vuelca en una variable antes del bucle). En términos de velocidad un do..while es más rápido que un while, que a su vez es más rápido que un for.
- Inclusiones: Organiza bien tu código y evita en lo posible el uso de funciones como include_once() y require_once(). Estas funciones son muy utiles para comprobar si un script ya ha sido procesado, pero son muy costosas. En su lugar utiliza include() y require().
- Supresión de errores @: Al colocar una @ antes de una función evitamos que se muestre un posible mensaje de error. Muy útil, pero muy costoso. Es preferible utilizar un funcion() or ....
- Random: Si queremos generar valores aleatorios con la función rand(), es recomendable utilizar la familia de funciones mt_rand(). Esta función utiliza un algoritmo de Mersenne Twister mucho más eficiente y rápido.
- Uso de comillas en PHP: Las comillas simples interpretan literales, sin embargo, las comillas dobles además interpolan el valor de variables. Da siempre preferencia a las comillas simples y nunca escribas símbolos de dolar sin escapar (\$) en comillas dobles, ralentiza mucho la ejecución.
- Comprobar si existen variables: Siempre se debería utilizar una función para comprobar si existe una variable. Entre las funciones isset(), empty() y is_array(), la primera es la más rápida y eficiente.
- Operador ===: En las comparaciones, la diferencia del operador === con el operador == es que este último hace una comprobación de tipos de variables antes. Si estás seguro de que son del mismo tipo, utiliza el primero.
- Memoria y velocidad: Utiliza memory_get_usage() y microtime() para comprobar la velocidad y la memoria que consume tu código.
- Comparaciones: Los if / else son siempre más rápidos que los switch / case.
- Las siguientes funciones son alias de las de su derecha. Utilizar la función de la izquierda es mucho más lento que usar la de la derecha:
- chop -> rtrim
- close -> closedir
- die -> exit
- dir -> getdir
- diskfreespace -> disk_free_space
- fputs -> fwrite
- ini_alter -> ini_set
- is_writeable -> is_writable
- join -> implode
- pos -> current
- rewind -> rewinddir
- strchr -> strstr
- sizeof -> count
- Incrementos: Cuando incrementamos una variable del modo $i++ es más lento que si lo hacemos ++$i. La diferencia es que la primera forma primero usa su valor y luego lo incrementa, en cambio, la segunda primero la incrementa y luego la usa. La segunda forma es más rápida, puesto que utiliza 3 opcodes, en lugar de los 4 opcodes de la primera. Usarla cuando sea posible.
- Imprimiendo textos: La función echo es más rápida que la función print, además de otras diferencias.
- Expresiones regulares: El uso de regexp es muy contradictorio. Como ventajas tenemos que usan muy poca de memoria, muy potentes y ahorran mucho código. Como desventajas son muy lentas, muy difíciles para novatos o personas que no conozcan teoría de autómatas y lenguajes formales. Personalmente, aconsejo evitarlas a no ser que sean muy necesarias. Por ejemplo, la expresión regular preg_match("![0-9]+!", $foo); reconoce cualquier cadena que sea un número, esto es mucho mas eficiente usando la función ctype_digit($foo);. Las funciones strcasecmp(), strpbrk() y stripos() pueden ayudar mucho.
- Reporte de errores: Utiliza E_STRICT como nivel de error para hacer debug en tu código PHP. Revisando los logs podrás ver todos los avisos de posibles errores con un nivel máximo.
- Separaciones: split() permite utilizar expresiones regulares, mientras que explode() no. Intenta utilizar explode siempre antes que la función split.
Fuentes: 12 PHP tricks / PHP benchmarks / 7 tips for PHP / More PHP tips.
Códigos de colores para nick de MSN Messenger
Como parece que una de las cosas que más interesan a los que llegan a mi artículo de trucos para el MSN Messenger es averiguar como se pone un nick con colores en el MSN, y la cosa se está desmadrando un poco (recibo más de 3 emails diarios preguntandome lo mismo), he decidido hacer un artículo para explicarlo detalladamente y nadie tenga ningún problema en conseguirlo.
El primer paso es tener instalado el MSN Messenger Plus! en el caso de tener MSN Messenger 7.5 o inferior. Si tu caso es que tienes el nuevo Windows Live Messenger (también llamado MSN Messenger 8) necesitarás la versión MSN Messenger Plus Live!.
Una vez tenemos instalado este complemento (OJO! En su instalación debemos rechazar el programa publicitario si no queremos instalar spyware) podemos cambiar el nick de varias maneras:
La primera de ellas es, en Herramientas / Opciones / Personal, en la caja de texto destinada para ello. La segunda forma es escribir desde cualquier ventana de conversación /nick (nick a establecer).
Para cambiar un color debemos escribir ·$X (Mayúsculas+3 y Mayúsculas+4) donde la X es el número del color que queremos:
A partir de donde escribamos esta serie de simbolos, nuestros contactos verán las letras del color que hemos elegido. Si queremos terminar el color, y volverlo a poner normal escribimos simplemente: ·$.
Veamos un ejemplo:
Además, también existen otros colores (pulsando Control+K aparece un panel con toda la gama) y otros efectos como por ejemplo el subrayado ·@ o la negrita ·#.
Según parece, en el nuevo MSN Messenger Plus live han optado por añadir (guardando la compatibilidad con lo anterior por supuesto) los llamados códigos UBBC usados en foros (no son exactamente iguales, sino una variante):
[c=4]rojo[/c] [b]negrita[/b] [u]subrayado[/u] [i]cursiva[/i] [s]tachado[/s]
Espero que sirva de ayuda a todos aquellos que acaban por mi blog buscando información sobre los nicks con colores.








