Tras su última entrega, allá por septiembre de 2012, he continuado recopilando todas las citas que han caído en mis manos y me han resultado curiosas, hasta llegar por fin a las 101 que os traigo hoy. Espero que os iluminen de nuevo o, al menos, que os hagan pasar un rato tan bueno como los que paso yo mientras las voy seleccionando :)
Publicado por José M. Aguilar a las 9:05 a. m.
Etiquetas: curiosidades, frases célebres, frikadas, humor
ZW50cmUgbG9zIGRlc2Fycm9sbGFkb3JlcywgaW50ZW50
YW5kbyBjb25zdHJ1aXIgbWF5b3JlcyB5IG1lam9yZXMg
cHJvZ3JhbWFzIGEgcHJ1ZWJhIGRlIGlkaW90YXMsIHkg
ZWwgdW5pdmVyc28sIGludGVudGFuZG8gcHJvZHVjaXIg
bWF5b3JlcyB5IG1lam9yZXMgaWRpb3Rhcy4gUG9yIGFo
b3JhIHZhIGdhbmFuZG8gZWwgVW5pdmVyc28uIg0KLS0g
UmljaCBDb29rDQoNCsKhRmVsaXogZMOtYSBkZWwgcHJv
Z3JhbWFkb3IhDQoxMyBkZSBzZXB0aWVtYnJlIGRlIDIw
MTMsIDI1Ni1hdm8gZMOtYSBkZWwgYcOxby4NCmh0dHA6
Ly9lcy53aWtpcGVkaWEub3JnL3dpa2kvRCVDMyVBRGFf
ZGVfbG9zX1Byb2dyYW1hZG9yZXM=
Y aquí está el resultado, 101 nuevas frases célebres relacionadas con nuestro mundillo, que espero que os gusten tanto como las anteriores.
Este es el cuatro post de la serie compuesta por:
- 101 citas célebres del mundo de la informática
- Otras 101 citas célebres del mundo de la informática
- Y todavía otras 101 citas célebres del mundo de la informática
- 101 nuevas citas célebres del mundo de la informática (¡y van 404!)
Publicado por José M. Aguilar a las 9:30 a. m.
Etiquetas: curiosidades, frases célebres, frikadas, humor
Como siempre ocurre, nada es fruto del azar.
Y las veinte más votadas, auténticas joyas algunas de ellas, fueron las siguientes...
Pero afortunadamente otras veces no es así, y los problemas no son nuestros sino suyos, momento en el que pone a disposición de la dulce venganza la genial creatividad característica de nuestro gremio.
Lo que vamos a ver a continuación son siete de las formas existentes, conocidas y documentadas de cargar las culpas sobre el usuario, o simplemente llamarlo torpe, sin que éste se dé cuenta. Algo muy socorrido si, por ejemplo, debemos contarle a un compañero lo que ocurre en presencia del implicado.
Por supuesto, a partir de aquí todo es secreto, no dejéis que caiga en manos de algún desalmado ;-)
Este libro, escrito en el año 1987 por Geoffrey James, recoge, en un humorístico tono de misticismo oriental, distintas historias y parábolas con geniales mensajes de fondo sobre calidad en la programación, gestión de proyectos y otros temas que siguen siendo válidos veinticinco años después.
Como probablemente habrá más lectores que no lo conozcan, me ha parecido interesante reproducirlo aquí traducido en su totalidad, por supuesto contando previamente con el permiso expreso del Sr. James.
¡Que aproveche!
Warning: Post largo. Muy largo ;-)
Publicado por José M. Aguilar a las 9:17 a. m.
Etiquetas: curiosidades, frikadas, humor, programación, proyectos
El veloz murciélago hindú comía feliz cardillo y kiwi. La cigüeña tocaba el saxofón detrás del palenque de paja. 1234567890.Seguro que, como un servidor, lleváis años sin dormir intentando descifrar este misterioso mensaje con el que nos hemos topado innumerables veces a la hora de instalar fuentes tipográficas en Windows. ¿Por qué un murciélago hindú? ¿Existen realmente los cardillos? ¿Y las cigüeñas saxofonistas? ¿Sería posible construir un palenque de paja?
Pues hoy debe ser mi día de suerte: me he topado casualmente con una entrada de la Wikipedia donde desentrañan el significado de tan inquietante frase, que parece haber sido creada por un perturbado mental o bien por los mismísimos guionistas de Lost (o ambas cosas al mismo tiempo) ;-)
Y la explicación es bien simple: se trata de un pangrama, también llamado frase holoalfabética, que es una frase que contiene todas las letras que componen el alfabeto de un idioma.
Explicado esto, seguro que ya cobra algo de sentido que sistemas operativos como Windows o Linux la utilicen a la hora de mostrar cómo lucen las distintas tipografías. Dado que los pangramas incluyen todas las letras, permiten que el consumidor de las mismas se haga una idea de cómo queda la fuente en un texto. El hecho de incluir al final el número es también por el mismo motivo, así como suele ser frecuente verlo acompañado de la misma frase utilizando exclusivamente mayúsculas.
También suelen utilizarse para practicar mecanografía con objeto de ejercitar todos los dedos de las manos.
Pero la gracia y mérito de los pangramas consiste en construir frases con sentido que incluyan el mayor número de letras del alfabeto en el menor espacio, como las siguientes:
- Cada vez que me trabo, Félix paga un whisky añejo (39 letras, 100% del alfabeto)
- ¡Ávida cigüeña floja!, pibonazo quemó whisky extra (41 letras, 100% del alfabeto)
- Incluso en otros idiomas:
- The quick brown fox jumps over the lazy dog (Inglés; El veloz zorro marrón salta sobre el perro perezoso)
- Pa's wijze lynx bezag vroom het fikse aquaduct (Holandés; El sabio lince de papá observó devotamente el formidable acueducto)
- Um pequeno jabuti xereta viu dez cegonhas felizes (Portugués; Una curiosa tortuguita vio diez felices cigüeñas)
- Portez ce whisky au vieux juge blond qui fume (Francés; Lleve este whisky al viejo juez rubio que fuma)
- (puedes ver muchas más en el artículo de la wikipedia)
En fin, cosas curiosas que hay por el mundo…
Publicado en: Variable not found.
La pregunta “What real life bad habits has programming given you?”, que podríamos traducir más o menos como “¿Qué malos hábitos de la vida real te ha dado la programación?”, inició un hilarante brainstorming sobre nuestra particular visión del mundo real, brindándonos la oportunidad de comprobar que no somos tan únicos ni raros como suele parecer.
A continuación resumo las respuestas y comentarios que más me han llamado la atención en este hilo, probablemente por padecerlos en primera persona. Y ya puestos, como de costumbre, he aprovechado para añadir otros de cosecha propia:
- Considerar 256 o 1.024 números bonitos, tanto como podrían ser 1.000 o 10 para alguien no afectado por el desarrollo.
- Echar en falta un Ctrl-F cuando estamos ante un libro o documento escrito para buscar términos.
- Intentar poner en pausa un programa de televisión convencional, o retroceder en una secuencia de la que no nos hemos enterado bien.
- Interpretar de forma extremadamente literal las expresiones. Responder “Sí” a “¿tienes hora?” es un ejemplo clásico.
- Utilizar la aritmética booleana donde no se debe, por ejemplo, respondiendo “Sí” a “¿Quieres té o café?”.
- Echar en falta el Ctrl-S para salvar un trabajo, por ejemplo un castillo de arena, y conservarlo justo en el estado en que se encuentra para volver a retomarlo más adelante.
- Mostrar alergia a textos con problemas de puntuación, paréntesis desbalanceados y otro tipo de fallos ortográficos, así como un sexto sentido para detectarlos.
- Googlearlo todo, en cualquier momento y circunstancia.
- Buscar opciones por defecto que nos facilite la toma de decisiones. Incluso a la hora de elegir el almuerzo en un restaurante.
- Numerar elementos comenzando por cero, y obviamente, acabar con un número menos que el resto de mortales. Comenzando por el pulgar: dedo 0, dedo 1… dedo 9.
- Sentir los errores de conversión de tipo como si fuéramos compiladores. Si preguntas a alguien “¿quieres salir a pasear?” esperas un booleano, no algo como “me duele la cabeza”.
- Divertirse con frases y chistes geeks, como “Dios es real, a menos que se declare como entero” :-D
- Sentir una extraña y maquiavélica alegría al detectar bugs en cualquier tipo de sistemas, como programas de televisión o dispositivos electrónicos.
- Intentar optimizar y hacer más eficiente cada paso que damos. Seguro que todos hemos vivido situaciones como “me tengo que levantar para ir al aseo, así que aprovecho para llevar algunos chismes a la cocina, de camino pongo las palomitas en el microondas, de forma que cuando vuelva ya estarán listas, busco una cerveza en el frigorífico y continúo viendo la película”.
- Ser incapaces de comprender el lado contrario, es decir, cómo alguien no optimiza sus acciones, desaprovechando esfuerzos de forma injustificable ;-)
- Intentar planificar minuciosamente otros aspectos de la vida: viajes, excursiones, ir de compras, etc.
- Utilizar en conversaciones con gente normal palabras como “lógica”, “optimizar”, “recurso”, o “multitarea”.
- Llamar a los no programadores “gente normal” ;-D
- Buscar patrones repetitivos de comportamiento en todo como si tuviésemos que implementarlo.
- Anidar paréntesis (en textos escritos (incluso a mano)). Pero, eso sí, siempre correctamente balanceados.
- Analizar y criticar lo que se nos pregunta en un formulario, aunque sea en papel impreso. Por ejemplo, “¿para qué quieren saber la edad si están preguntando también la fecha de nacimiento?”
- Incluir una barra inclinada en el interior del dígito cero (algo como “Ø”) cuando escribes números a mano.
- En las webs de compra de entradas online, pensar al tener que elegir sitio en un cine con sesión numerada, que la sala podría ser defragmentada. :-D
- No recordar el significado original de palabras como “herencia”, “hilo”, o “excepción”.
- Echar en falta los bucles en la vida real.
- Ponerse realmente nervioso cuando tenemos delante a alguien no experto manejando un ordenador y esperamos a que realice una tarea.
- Finalizar frases con punto y coma;
- Echar en falta el Ctrl-Z para deshacer alguna barbaridad. Por ejemplo, si dedicas tiempo a la pintura o dibujo, seguro que más de una vez lo has necesitado. Y también si eres algo bocazas ;-)
- Echar también en falta la versión Linux de Ctrl-Z para pausar un proceso en curso.
- Solucionar un problema mientras sueñas, o en mitad de una conversación ajena al mismo.
- Excusarnos en este último caso diciendo que “estábamos en multitarea” cuando no es cierto: simplemente no prestábamos mucha atención a la conversación ;-D
- Hacer que el número de elementos en una lista sea siempre potencia de 2 ;-)
Publicado en: Variable not found
Los “ilities”, cuya traducción a nuestro idioma podría ser algo así como “ilidades”, son atributos que definen aspectos no funcionales y normalmente asociados con requisitos técnicos y cualidades de un sistema o componente software. El nombre viene del sufijo –ilidad, que, como podréis ver a continuación, es común a la práctica totalidad de ellos.
He encontrado en la Wikipedia una interesante (aunque no exhaustiva) relación ilidades, que podemos utilizar a la hora de intentar transmitir las características de un sistema… o simplemente para aparentar ser auténticos expertos en una reunión de trabajo ;-)
- Accesibilidad, es decir, el hecho ser accesible a muchas personas, con independencia de sus características, dispositivos utilizados, etc.
- Reportabilidad, capacidad para monitorizar y registrar las acciones del usuario.
- Exactitud, grado de distancia desde los resultados ofrecidos por un sistema a los valores entendidos como reales.
- Adaptabilidad, facilidad que presenta un software para ser adaptado a necesidades concretas.
- Administrabilidad, indica la capacidad de un sistema o componente para ser administrado y gestionado.
- Asequibilidad, que indica que, atendiendo a su coste, el sistema puede ser adquirido o conseguido por los clientes.
- Auditabilidad, transparencia frente a sistemas de auditoría.
- Disponibilidad, grado en el que un sistema está disponible, operativo y funcional.
- Credibilidad, que es considerado subjetiva y objetivamente como una fuente de información fiable.
- Conformidad con estándares, grado de cercanía a las prácticas o técnicas aceptadas como estándares.
- Compatibilidad, que funciona en un escenario determinado, o permite sustituir otros sistemas equivalentes.
- Componibilidad, capacidad para combinar el software con otros elementos para componer sistemas no previstos inicialmente.
- Configurabilidad, esto es, que dispone de mecanismos que permiten configurar algunos aspectos de su comportamiento.
- Corrección, que indica que el software actúa conforme a sus especificaciones.
- Personalizabilidad, capacidad de un sistema para ser personalizado a las preferencias de sus usuarios.
- Degradabilidad, capacidad para mantener las funcionalidades básicas en condiciones adversas.
- Demostrabilidad, aplicable a aquellos sistemas cuyo funcionamiento puede ser demostrado.
- Dependabilidad, que define la probabilidad de que el sistema complete su misión, dado que estaba disponible en el comienzo de la misma.
- Desplegabilidad, capacidad de un software para ser desplegado en un escenario.
- Distribuibilidad, capacidad o facilidad de un componente o sistema para ser distribuido.
- Durabilidad, mantenimiento de las funciones con el paso del tiempo.
- Efectividad, o capacidad para lograr el efecto deseado.
- Eficiencia, capacidad para lograr el efecto deseado con el menor consumo posible de recursos.
- Evolucionabilidad, grado de facilidad con la que es posible hacer evolucionar un sistema para adaptarse a nuevas condiciones.
- Extensibilidad, capacidad de un software para ser ampliado con nuevas funciones sin modificar su estructura básica.
- Fidelidad, que ofrece precisión y confianza en la representación de la realidad.
- Flexibilidad, que puede adaptarse con facilidad a cambios en el entorno.
- Instalabilidad, facilidad para ser instalado en un entorno determinado.
- Integridad, capacidad para evitar y sobreponerse a errores en la información que maneja.
- Intercambiabilidad, que indica que un componente puede ser sustituido por otro sin modificar aquellos que lo utilizan.
- Interoperabilidad, capacidad que tiene un sistema para intercambiar información con otro.
- Aprendibilidad, es decir, la capacidad que presenta un software para enseñar su propio manejo al usuario.
- Mantenibilidad, o facilidad con la que se puede corregir, modificar o ampliar un software.
- Gestionabilidad, facilidad para gestionar la complejidad de un sistema.
- Movilidad, posibilidad que tiene un sistema de funcionar en distintas ubicaciones geográficas.
- Modularidad, grado en el que un software está internamente dividido en bloques independientes.
- Nomadicidad, capacidad de un sistema para adaptarse de forma transparente a una situación de desconexión por cambio de ubicación-
- Operabilidad, capacidad de un software para funcionar y cumplir su misión.
- Portabilidad, la facilidad con la que un software puede ser transferido a otro entorno software o hardware.
- Precisión, nivel de detalle con el que un sistema es capaz de manejar información.
- Predictibilidad, grado de certeza del comportamiento del sistema ante un escenario determinado.
- Recuperabilidad, capacidad de un sistema de restablecer un nivel apropiado de servicio y recuperar sus datos en caso de producirse fallos.
- Fiabilidad, es la habilidad de un software para realizar sus funciones de forma correcta bajo unas condiciones determinadas.
- Repetibilidad, es la capacidad de generar el mismo resultado si no cambian las condiciones.
- Reproducibilidad, es el grado de precisión que se obtiene al intentar reproducir un comportamiento del sistema.
- Responsividad, velocidad con la que un sistema realiza una tarea, por ejemplo responder a la entrada del usuario.
- Reusabilidad, facilidad con la que un componente o sistema puede ser reutilizado para añadir funcionalidades o características en un nuevo sistema.
- Robustez, capacidad para continuar la operación aún en el caso de producirse errores inesperados.
- Seguridad, capacidad de un software para conseguir niveles aceptables de daños a personas, negocios, software, propiedades o entorno.
- Escalabilidad, facilidad con la que un sistema puede ser adaptado para satisfacer necesidades mayores de carga de trabajo.
- Uniformidad, grado de presentación como una estructura consistente, aunque el sistema incluya diversas tecnologías.
- Soportabilidad, que hace referencia a la habilidad del soporte técnico para dar soporte a los productos.
- Asegurabilidad, capacidad para asegurar distintos niveles de un sistema.
- Simplicidad, o ausencia de complicaciones y dificultades.
- Estabilidad, capacidad de un software para funcionar períodos del tiempo sin parar o funcionar incorrectamente.
- Comprobabilidad, el grado en el que un componente soporta la realización de pruebas para validar su corrección.
- Oportunidad, es decir, el hecho de estar disponible en el momento en el que debe estarlo.
- Ubicuidad, capacidad de un software para estar presente en todas partes, en cualquier momento.
- Comprensibilidad, facilidad con la que un software puede ser comprendido a los distintos niveles.
- Usabilidad, facilidad con la que un usuario puede utilizar un sistema software para conseguir un objetivo.
Los términos originales estaban en inglés y algunos no eran fácilmente traducibles, así que en más de una ocasión he tenido que echar mano de la creatividad y patear a la RAE y todos sus integrantes ;-D
Publicado en: Variable not found.
Los lenguajes esotéricos, también llamados esolangs, son lenguajes de programación cuyo objetivo, al contrario que en los "tradicionales", no es ser útil, ni solucionar problemas concretos, ni ser especialmente práctico, ni siquiera incrementar la productividad del desarrollador. De hecho, lo normal es que atente contra todas estas características de forma contundente.
Aunque algunos se diseñan como pruebas de concepto de ideas para determinar su viabilidad en lenguajes reales, lo más frecuente es que sean creados por diversión y exclusivamente con objeto de entretener a sus posibles usuarios. Viendo esto, puede parecer que no existirán más de un par de lenguajes esotéricos, ¿no? Pues haciendo un recuento rápido en la lista de lenguajes de esolang.org he podido contar más de cuatrocientos, lo cual da una idea de la dimensión de la frikada de la que estamos hablando.
Pero no hay nada como unos ejemplos ilustrativos para que tomemos conciencia total de la cuestión.
Ejemplo 1: "Hello World" en lenguaje Argh!
Este lenguaje utiliza una matriz de 80x40 caracteres, en cuyas celdas pueden aparecer tanto código como datos. La siguiente matriz codifica el tradicional "Hello World":
j world
lppppppPPPPPPsrfj
hello, * j
qPh
Según la especificación oficial, la ejecución comienza en la esquina superior izquierda, donde la orden "j" hace que la dirección de la ejecución sea hacia abajo. La siguiente orden procesada, "l", modifica el sentido de la ejecución hacia la derecha. Una "p" hace que se envíe a la consola el carácter que se encuentra en la celda inmediatamente inferior, de la misma forma que las "P" lo hacen con los caracteres situados en las celdas superiores.
Para no extenderme demasiado, resumiré un poco. Una vez enviado el saludo, se imprime un retorno de carro utilizando la pila para restar del carácter "*" (ASCII 42) el espacio (ASCII 32), se envía a la consola y se finaliza el programa (orden "q").
Ejemplo 2: "Hello World" en Brainfuck (jodecerebros)
Este lenguaje es un clásico en este mundillo debido a que ha servido como base para la creación de muchos otros lenguajes esotéricos. Se basa en la manipulación de un array de celdas utilizando tan solo 8 comandos, los siguientes caracteres: <, >, +, -, punto, coma, [, ].Estas órdenes permiten desplazarse por las celdas hacia delante y hacia atrás ("<" y ">"), incrementar o disminuir el valor de la celda actual ("+" y "-"), escribir y leer caracteres hacia/desde consola ("." y ",") y hacer bucles simples ("[" y "]"). Como muestra, ahí va el "Hello world":
>+++++++++[<++++++++>-]<.>
+++++++[<++++>-]<+.+++++++..+++.
>>>++++++++[<++++>-]
<.>>>++++++++++[<+++++++++
>-]<---.<<<<.+++.
------.--------.>>+.
Gran muestra de código mantenible, sin duda.
Como curiosidad, añadir que existe un intérprete y compilador de Brainfucker para .NET en Google Code.
Ejemplo 3: "HAI WORLD" en LOLCODE
Lolcode es otro buen ejemplo de frikismo, aunque en este caso más orientado hacia la broma. Se trata de programar utilizando el peculiar lenguaje que usan unos populares gatitos, llamados lolcats, una mezcla entre la jerga de un bebé y el lenguaje habitual en los SMS.HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
Es interesante saber que existen multitud de implementaciones de este lenguaje, una de ellas incluso en .NET, aún en versión alfa, con perfecta integración en Visual Studio.
En fin, que después nos quejamos de que los desarrolladores tenemos fama de rarillos... ;-)
Publicado en: http://www.variablenotfound.com/.
1337 es una forma de escribir textos usada en la actualidad por usuarios avanzados de determinadas comunidades de Internet, que consiste en la utilización de combinaciones de caracteres alfanuméricos de forma que no puedan ser entendidos fácilmente por parte de los neófitos o no iniciados. Este carácter elitista se ha reflejado en su nombre, puesto que el término "1337" es la escritura correspodiente de "LEET", que proviene del término "élite" (en inglés). Además, aportaba a sus conocedores interesantes ventajas a la hora de esquivar filtros de contenidos en servicios on-line como chats o foros durante la popularización del uso de Internet.
¿Y cómo se lee o escribe 1337?
En un primer nivel, esta técnica sustituye los caracteres de un mensaje por otros similares, o al menos ligeramente parecidos, como dígitos o símbolos. Por ejemplo, la letra "S" puede ser sustituida por el número "5", "I" por el número uno, o la "T" por un "7":
- E570y 35cr1813nd0 3n 1337: Estoy escribiendo en 1337.
- Un4 53gund4 pru384: Una segunda prueba.
- En m1 0p1n1ón, 35 un h4ck3r: En mi opinión, es un hacker.
El texto en nivel uno puede leerse muy fácilmente, como comentaban en Microsiervos, si se lee muy rápidamente. Probad y veréis que es cierto.
Un uso avanzado de 1337, sin embargo, es algo más difícil de leer y escribir. Aquí ya hay sustituciones complejas, como representar una "M" como "|V|", o "B" como "|3" y similares, se utilizan acrónimos (BTW, EMHO, LOL), y términos propios (H4xOr),
- 3570Y 35(R|8|3|\||)0 3|\| 1337: Estoy escribiendo en 1337
- |_||\|4 53G|_||\||)4 PR|_|3|34: Una segunda prueba
- E|\/||-|0, 35 |_||\| H4xOr: En mi opinión, es un hacker
Por último, decir que 1337 no tiene unas reglas fijas, por lo que cada uno puede usar su propio leet speak, siempre que pueda entenderse de forma similar a la descrita aquí. La imaginación y creatividad en el uso de símbolos está permitida, al igual que la corrección ortográfica o sintáctica no son especialmente necesarias.
En fin, hay que ver la de cosas curiosas que hay por el mundo...
35P3R0 q|_|3 31 P057 05 |-|4Y4 R35|_|174|)0 ||\|73R354|\|73.
Más información en:
- Traductores 1337 on-line.
- Cómo leer y escribir en 1337
- Leet speak en la Wikipedia
- ¡Google en versión 1337!
Publicado en: http://www.variablenotfound.com/.