Observación insulsa #3458
Las interacciones sociales no son mediadas (por lo menos no directamente) por los campos gravitatorio o electromagnético, como se puede inferir de que su intensidad no disminuye con el cuadrado de la distancia.
Las interacciones sociales no son mediadas (por lo menos no directamente) por los campos gravitatorio o electromagnético, como se puede inferir de que su intensidad no disminuye con el cuadrado de la distancia.
Nada importante que decir, salvo que ¡Elucubrando vive de nuevo!
Perdón, amables y fieles lectores, por esta larga interrupción en el sitio.
Saludos a todos los demás.
Mochila al hombro, salí de casa el fin de semana con destino al super. Una de las cosas que recordé demasiado tarde es que las distancias en el mapa son engañosas hasta que te acostumbras a la escala. Las cuadras acá en Phoenix son laaargas. Salvo eso, nada más que reportar. El clima este fin de semana fué benigno, el parque que atravesé de camino es bastante bonito, la gente que no anda en coche escasa pero amigable.
En vez de ir al Walmart que me queda cerca, fuí al Whole Foods que es algo así como un Superama de comida orgánica. Hartos jugos y pastas integrales. Y quesos, ñam. Compré también sopas de lata, lechuga para ensaladas, un paquetito de frambuesas. En general, me está gustando la estancia por acá. He logrado establecer bien una rutina de correr en la mañana, me estoy acostando (comparativamente) temprano, tengo tiempo de ver la tele y la chamba es divertida. No he probado las mesas de pinpón, pero sí los scooters eléctricos y la silla de masajes. Hay una buena cafetera en la oficina, así que no he deplorado mucho la horrible lata de café que compré el primer domingo.
Para las semanas que vienen, mis planes incluyen mudarme a algún departamentito más chico, acogedor y, sobre todo, barato, comprarme una bici para andar por la ciudad, solicitar mi tarjeta abono mensual para el autobús y comprar los muebles mínimos para el nuevo depa, a saber: Una colchoneta, una bolsa-sillón, vajilla y batería de esas de a 50 pesos. Ya después las iré sustituyendo por cosas bonitas, por ahorita me basta con que no derramen.
Y eso es todo, por ahora.
La editorial por más que intento no me sale, así que lo redacto como invitación de boda:
Éste su anfitrión anuncia con beneplácito que se va del país. A Phoenix, Arizona, en los Yunaites. ¿A qué? A cambiar de aires, conocer gente, visitar parques naturales un poco más lejanos que La Marquesa y a trabajar en Google.
Y ya, ese es el chisme.
Me llegó por ahí la pregunta, ¿es válido decir “Yo programo en XML”? Mi respuesta es que es tan válido como decir “Yo programo en ASCII”. Posiblemente cierto, pero bobo e irrelevante. Los márgenes de un twiterazo son demasiado pequeños para una explicación completa, así que mejor la pongo por acá.
XML no es un lenguaje. Y no dije “lenguaje de programación”, dije lenguaje. XML es metalenguaje, un juego de reglas para definir la sintáxis de otros lenguajes. Usar XML para definir un lenguaje le da un aspecto parecido al de todos los demás lenguajes definidos con él, pero no dice nada acerca de la semántica del lenguaje, es decir, del qué significa. Los lenguajes que se definan usando XML pueden ser lenguajes de programación, lenguajes de marcado de textos, lenguajes de intercambio de datos. XML no tiene nada que decir respecto a eso[1].
Un ejemplo relacionado lo da la familia de lenguajes “parecidos a C”. Si bien nadie se ha tomado la molestia de escribir con cuidado una descripción de la sintáxis común, todos los programadores la conocemos de uno u otro modo. Cosas como “los identificadores están formados de alfanuméricos”, “las palabras reservadas son cadenas de letras”, “los bloques se delimitan con {}”, “0x marca el inicio de un número en hexadecimal”. Todas estas reglas (y muchas otras, por supuesto) son parte del metalenguaje (no escrito) que describe la sintáxis de esa familia. Gracias a ellas es que C y C++ y Perl y Java tienen ese aspecto similar, ese “no se qué” que hace que quien ha programado en uno no se sienta intimidado al ver otro. A pesar de que los lenguajes en sí son sumamente distintos unos de otros.
Igualmente, XML es un juego de relgas del estilo: “El documento se estructura en bloques anidados con nombre”, “Los nombres no pueden contener espacios”, “El final del bloque repite el nombre del mismo”, “mayorque y menorque son caracteres reservados”, etc, etc. Mucha información acerca del aspecto, nada acerca del significado.
Las relgas de sintáxis son, por supuesto, importantes. XML destila la experiencia de mucha gente encontrando reglas útiles para lenguajes cuyo propósito principal es enmarcar un texto. De este modo, alguien que necesita diseñar un nuevo lenguaje puede saltarse esa parte (que es más bien aburrida) y evitar errores y ambiguedades de las que es difícil darse cuenta. Pero no son el lenguaje, así como no lo es el apegarse a la convención de representar un espacio con el número 32 y la letra ‘A’ con el 65, como en ASCII.
I Am A: True Neutral Elf Wizard (4th Level)
Ability Scores:
Alignment:
True Neutral A true neutral character does what seems to be a good idea. He doesn’t feel strongly one way or the other when it comes to good vs. evil or law vs. chaos. Most true neutral characters exhibit a lack of conviction or bias rather than a commitment to neutrality. Such a character thinks of good as better than evil after all, he would rather have good neighbors and rulers than evil ones. Still, he’s not personally committed to upholding good in any abstract or universal way. Some true neutral characters, on the other hand, commit themselves philosophically to neutrality. They see good, evil, law, and chaos as prejudices and dangerous extremes. They advocate the middle way of neutrality as the best, most balanced road in the long run. True neutral is the best alignment you can be because it means you act naturally, without prejudice or compulsion. However, true neutral can be a dangerous alignment because it represents apathy, indifference, and a lack of conviction.
Race:
Elves are known for their poetry, song, and magical arts, but when danger threatens they show great skill with weapons and strategy. Elves can live to be over 700 years old and, by human standards, are slow to make friends and enemies, and even slower to forget them. Elves are slim and stand 4.5 to 5.5 feet tall. They have no facial or body hair, prefer comfortable clothes, and possess unearthly grace. Many others races find them hauntingly beautiful.
Class:
Wizards are arcane spellcasters who depend on intensive study to create their magic. To wizards, magic is not a talent but a difficult, rewarding art. When they are prepared for battle, wizards can use their spells to devastating effect. When caught by surprise, they are vulnerable. The wizard’s strength is her spells, everything else is secondary. She learns new spells as she experiments and grows in experience, and she can also learn them from other wizards. In addition, over time a wizard learns to manipulate her spells so they go farther, work better, or are improved in some other way. A wizard can call a familiar- a small, magical, animal companion that serves her. With a high Intelligence, wizards are capable of casting very high levels of spells.
Find out What Kind of Dungeons and Dragons Character Would You Be? courtesy of Easydamus
Juega, mi pequeño, juega
protegido de la noche,
del influjo de la luna
por las sombras bajo el faro,
por su aliento compartido,
por sus ojos alumbrados
del espíritu de vida
robado de las ciudades
de la gente que ahí habita
de parques y de edificios
y de figuras esquivas.
Los parques donde ahora estoy
no tienen las bancas en que
tu recuerdo se sienta a leer bajo el sol.
Las estaciones del metro
no están a dos cuadras de ahí,
la oficina en la que tú trabajas.
Las avenidas y calles
no acaban todas por llegar
a la glorieta frente de tu casa.
Mis sueños, sin embargo, parecen no haberse enterado.
Una opción sería, por ejemplo, que eso de los universos paralelos sea cierto. Obviamente, la distinción entre uno y otro tiene que ser el conjunto de los estados de cada una de sus partículas. Pero, como el estado de una partícula no es algo perféctamente definible (ya saben, Heisenberg ) resulta que la distinción entre un universo y otro tampoco lo es. En cada momento estamos no en “este” universo, sino en una nube borrosita alrededor. Nube que es compartida por un infinito no numerable (¿aleph_1?) de otros universos, el estado de cuyas partículas difiere del “nuestro” por alguna epsilon pequeñita.
¿A que viene todo esto? Pues bien, todo ese asunto normalmente no importa. En promedio, todos esos universos de la nubecita se comportan de forma exáctamente igual a nivel macroscópico, así que determinar en “cual estamos” sería, en el mejor de los casos nada más que un ejercicio teórico. Pero, así como un electrón puede, en condiciones adecuadas, encontrarse del lado opuesto a una barrera de potencial, aparentemente saltando de forma discontínua de un lado a otro, postulo que el universo completo pueda hacer escencialmente lo mismo. Así, cuando una “nubecita” de universos se traslapa un momento con otra, uno de los de una pueda “brincar” a la otra, pasando, por ejemplo, de una nubecita que tenía una goma en la mesa a una que no tiene goma a una que la tiene en la esquina de los libreros.
¿No entienen nada? Precisamente por eso está esto clasificado como “divagación”.
Por kilómetros y kilómetros, hasta dónde alcanzaba la vista, se extendía la muralla. Sus muros eran altos y gruesos. De grandes piedras perféctamente encajadas, sin una sola rendija dónde un enemigo pudiera anclarse para escalar. Fuertes parapetos, estratégicas mirillas, bien repartidos contrafuertes. Era, en verdad, el mayor orgullo del imperio.
Tan inexpugnable era que las hordas bárbaras rápidamente se rindieron. “¿Para qué intentarlo?”, decían unos. “Los otros reinos son mejor presa”, confirmaban otros. Y de la noche a la mañana, casi, dejaron de venir. Nunca más turbaron sus gritos la tranquilidad del valle. Nunca más sus pendones flamearon por sobre las montañas.
Los soldados siguieron patrullando por un tiempo. Marchaban marciales por los caminos. Practicaban feroces asaltos contra hipotéticos invasores. Pero luego, poco a poco, se fueron aburriendo. Algunos regresaron a sus casas, a sembrar los campos y cuidar sus rebaños. A platicar con sus amigos en la taberna, con relatos de sus hazañas allá en el muro. Otros, más aventureros, se marcharon hacia afuera. A defender otros reinos, quizá. O a ser parte de las hordas invasoras, nadie lo sabe.
De la gran muralla sólo queda esa torre, la más alta. El último de la guarnición todavía se mantiene ahí, vigilante. Él mismo fué poco a poco desarmando los muros. Haciendo, primero pequeños y después no tanto, huecos por dónde los invasores entrarán un día feliz en el que él podrá dar el aviso y cumplir por fin con su misión.
Supongan que quieren hacer una estructura de datos para guardar una asignación de roles a permisos. Como lo van a usar para visualizar y editar, no basta con asociar a cada rol un conjunto de permisos, sino que necesitan asignar un booleano a cada par (rol, permiso) (Así, el código de visualización no tiene más que dibujar la matriz).
Como no estamos escribiendo C, lo que vamos a hacer es usar un Map (o hash table, o arreglo asociativo, o como le llamen en su lenguaje favorito) anidado. Vamos a tener un arreglo rolPermiso indexado por roles. La entrada asociada a cada rol es a su vez otro arreglo. Este segundo está indexado por permisos, y cada entrada es un booleano que nos dice si el rol tiene este permiso. ¿Limpio, no?
Dicho en perl, es algo parecido a
$rolPermiso{$rol}{$permiso}
Muy bonito. Pero propenso a errores, por que tengo que tener mucho cuidado que $rol y $permiso tengan siempre algo válido. Si no, perl alegremente creará nuevas entradas en el arreglo con lo que sea que tengan esas variables.
De ese problema quien nos salva es el tipado estático. Si le avisamos al compilador que nuestro arreglo debe estar indexado por Roles, que el contenido deben ser arreglos de Booleanos indexados por Permisos, y creamos un par de enumeraciones para los Roles y los Permisos, el compilador se encarga de avisarnos «¡Oye, “Adninistrador” no es un rol válido!»
Claro que, para eso, necesitamos un sistema de tipos capaz de expresar ese párrafo. Y que al mismo tiempo no nos obligue a tonterías como el sistema de tipos de Pascal, que consideraba tipos diferentes a los arreglos de 4 enteros y a los de 5, y nos obligaba a escribir una función para ordenar arreglos de 4 enteros y otra para los de 5.
La solución, por supuesto, es el uso de tipos polimórficos (paramétricos, les llaman algunos). En Java 5 las funciones que toman arreglos asociativos genericos usan el tipo Map<K, V> en dónde K y V son variables de tipo, que expresan que a dichas funciones no les importa qué hay en el arreglo, sino sólo que la estructura es de arreglo.
La declaración de la variable que nos importa es entonces
Map<Rol, Map<Permiso, Boolean>>
Hasta aquí, todo bonito. El problema, por supuesto, es en cuanto queremos inicializar dicha variable, usando una implementación específica de la interfaz Map y un wrapper que inicialize los valores de forma automática en el primer acceso. Como es necesario en cada punto decirle al compilador los tipos de todas las variables en cuestión la inicialización termina siendo el siguiente mounstruo:
public Map<Rol, Map<Permiso, Boolean>> rolPermiso =
new DefaultValueMap<Rol, Map<Permiso, Boolean>>(
new HashMap<Rol, Map<Permiso, Boolean>>(),
new DefaultValueMap.DefaultCreator<Rol, Map<Permiso, Boolean>>() {
public Map<Permiso, Boolean> create(Rol rol) {
EnumMap<Permiso, Boolean> tmp =
new EnumMap<Permiso, Boolean>(Permiso.class);
for (Permiso p : Permiso.values())
tmp.put(p, rol.tienePermiso(p));
return tmp;
}
});
(Con el problema exacerbado por que Java no tiene funciones de primer orden, así que el inicializador default tiene que quedar envuelto en un objeto de una clase anónima cuyo único propósito es pasar a su único método de un lado a otro. Fuchi.)
Una vez que se les pase el dolor de cabeza de tratar de leer eso, fijense que más o menos la mitad de esa inicialización consiste en reiterarle los tipos al compilador. Lo interesante es que el compilador sabe cuales deberían ser esos tipos (por que si los ponen mal, emite un error). Lenguajes como Haskell y ML se aprovechan de eso (y de un poco más de cosas, claro) y proporcionan inferencia de tipos. Basta con que le digan al compilador algunos de los tipos y él mismo averiguará cuales son todos los demás.
En nuestro caso, en Haskell bastaría con decir querolPermiso :: Map(Rol, Map(Permiso, Bool)
y luego seguirse usandolo casi igual que como lo haríamos en perl. El compilador inferirá entonces que si le pido
rolPermiso rol
“rol” debe ser una variable de tipo “Rol”, y si algúna parte del código la usé con un tipo incompatible (si le intenté asignar “Adninistrador”, por ejemplo) protestará ruidosamente por la inconsistencia, en lugar de fallar de formas misteriosas en algúna otra parte del código.
Claro que todo esto no es mucho consuelo cuando se ven obligados a usar Java, pero bueno.
Sales un día de tu casa y empiezas a caminar al azar. Avanzas con decisión por la acera, llegas a la esquina, tomas alguna de las calles que se cruzan ahí. Quizá incluso regresas por donde venías. Persistes en esto el suficiente tiempo, sabes que las leyes que rigen al mundo casi garantizan que vas a llegar, tarde que temprano, a una librería de viejo. Una de esas con desordenados pasillos estrechos, pequeñas puertas de media altura entre algunas estanterías y un dependiente a la entrada que toma nota de todos los presentes sin dejar de leer. Entras.
Revuelto entre libros de texto resueltos y viejas novelas rosas en algún idioma que no sabes leer hay un libro ahí esperandote. A veces es el tomo dos de aquel recetario que nunca completaste. O una edición bien conservada del famoso libro con el dragón en la cubierta, ese que es obra seminal y que todos en tu profesión deben leer. Esta vez es un libro de fotos. De edificios y casas. Lo ojeas, lentamente, reconociendo a veces los estilos, maravillándote de no haber visto nunca otros. Das un par de pasos y te sientas con él en la escalerita, la de alcanzar los estantes de arriba, a seguir hojeando.
Y entonces, en la exploración detenida del libro, en esa fase de oler las cubiertas y revisar el colofón y buscar notas apresuradas en los márgenes, te encuentras con la dedicatoria. Con bonita y regular caligrafía, de esa de rotular planos, en la página en blanco después del título: “Para mi amigo Barragán.” Te pierdes un rato pensando en los extraños caminos que tu libro (sí, ya es tuyo, aunque no lo hayas pagado) tuvo que haber recorrido para llegar al mismo estante que tú, y no un día antes o después, sino hoy. ¿Estaría metido meses en alguna caja de cartón de una mudanza? ¿En la lista de bienes a repartir como parte de un legado en disputa? ¿Olvidado detras de un librero, dónde cayo tras una fiesta particularmente ruidosa?
Y sales entonces, abrazando tu nuevo libro y pensando que tal lista de concidencias seguramente debe ser material suficiente con qué inspirar un cuento en el que expliques como fue que te topaste con él.
Para no perder el vuelo que ya ibamos agarrando el año pasado, el grupo de Debian México ha decidido organizar un BSP este 23 de diciembre. La ubicación es, como las veces anteriores, en las oficinas de Nul Unu.
Si están intesesados en asistir, anótense en la página de coordinación.
Como en ocasiones anteriores, hay varias recomendaciones para los asistentes:
A estas alturas, los que no viven cerca del DF (o sí, pero se van de vacaciones) han de estar quejandose del mugroso centralismo de los chilangos. Como no queremos eso, les recordamos que ustedes también están cordialmente invitados. Abran su cliente favorito de IRC, conecten al servidor irc.debian.org y unanse al canal #debian-mx donde los estaremos esperando para platicar, matar bugs, y tomarnos unas cuantas tasas de café virtual.
Estoy lo que se dice harto de que me lleguen aquí a los comentarios del blog robots colocadores de spam. En muchos sitios implementan mecanismos más o menos complicados para tratar de asegurarse que quién está escribiendo un comentario es un humano. Nunca he logrado juntar las ganas de implementar algo así, pero leyendo por ahí caí en la cuenta de que no necesito nada muy sofisticado. Dado que no es este un objetivo altamente deseable, nadie se va a tomar la molestia de escribir un robót ad hoc para darle la vuelta a mis mediditas de seguridad. Así que, a partir de ya, para poner un comentario en este sitio es necesario contestar una sencillísima pregunta de aritmética. Si veo que sirve, quitaré incluso lo de detenerlos para moderación.
La vi, o me pareció verla, hace un par de meses. Mi camión iba entrando a la terminal y mientras maniobraba para estacionarse ella estaba subiendo en otro. Para cuando bajé, su camión ya se había ido y no pude siquiera confirmar que en verdad era ella.
Hace unos días volvió a ocurrir, pero esta vez tuve suerte. Mi camión llegó temprano, o el de ella salió tarde, así que cuando bajé pude verla ahí parada junto a un par de maletas. “¡Hola, qué milagro!” “¡Yo te hacía en el extranjero!” “¿Y tu esposa?” “Mira, te presento al mio.” Nos despedimos pronto, yo tenía prisa y su camión estaba por partir. Pero intercambiamos teléfonos y correos. Y, sorprendentemente, los usamos. Nos vimos esta mañana, platicamos de trivialidades y del tiempo pasado. Nos mostramos fotos de nuestros respectivos hijos.
Y no sé a ella, pero a mi no me dolió. Es la primera vez que creo eso que dicen, que el tiempo cura todo. Curioso, ¿no?
Vaya usted a su pozolería favorita. Tome una pizca de chile piquín del recipiente más cercano y póngala en un litro de agua. Agite vigorósamente. Vierta el litro de agua en un garrafón de 20 y agite de nuevo. Tome ahora el garrafón y (con cuidado, por que es pesado y poco manejable) subase en una pipa llena de agua potable y vacíe en ella el contenido. Una vez hecho esto, maneje, tan rápido como se atreva, por alguna carretera del sur de México. Yo recomendaría llegar hasta Mérida, vía Chiapas, por que eso ayudará con la segunda parte del experimento. Lo de manejar rápido es para, como habrá sospechado el lector, agitar vigorósamente nuestra mezcla.
Después de todas estas contorsiones, lo que tenemos en el tanque de la pipa es una dilución de chile piquín, de potencia 3C (o 4C, si su pizca original es chica y la pipa grande), lo cual según las normas homeopáticas no es muy bueno pero sí alcanza a ser efectivo. ¿Qué curaremos con ella? similia similibus curentur, dicen, así que aprovechemos que ya estámos en Mérida, vayamos a algún sitio donde vendan una buena cochinita pibil, mordamos un chile habanero y comprobemos como una sóla cucharadita de nuestra dilución acaba con los ardientes síntomas inflingidos por tan irresponsable comportamiento.
So I went and dug
deep inside my brain,
deep inside my soul,
deep inside my drawers.
And I looked for you
and your memories.
And the things you said.
And the way you looked.
And I pulled from threads
of stringed up toughts
and my whole wide world
came out, all undone.
Thus, I dug no more.
Better let you stay.
Better to be stuck
than not be at all.
Perdonen ustedes si la rima es mala, o la métrica no cuadra. Me llegó así, en inglés, y no tuve corazón para auto destrozarme tratando de traducirme.
(Actualización) Roberto, en cambio, no sufre de mis neurosis y se avento una reinterpretación.
—Es que, mira, imagina que empezaramos a andar. Y que funcionara y dentro de un tiempo decidieramos vivir juntos. Tú sabes que a mi me gusta cocinar. Y que me gusta la comida con sabores más o menos fuertes, con mucho condimento y esas cosas. ¿Qué va a pasar el día que llegues y yo te reciba con un platote de sopa de cebolla, eh? Pues que no te va a gustar y vas a comer sin ganas, o de plano lo vas a dejar. Y yo me voy a ofender de que dejaste mi comida y a partir de entonces no voy a cocinar a gusto, porque voy a estar siempre temiendo que lo que haga no te va a gustar. Y va a haber resentimientos y peleas y vamos a acabar peleandonos por tonterías.
—¿Y por eso no quieres andar conmigo? ¿Porque no me gusta la cebolla?
—Pues, sí. Digo, ese es sólo un ejemplo, pero sí.
—¿Y no se te ha ocurrido, no sé, llamarme antes de ponerte a guisar y preguntar si me late el menú?
Si usan Plone 3 y quieren usar un tema para cambiar el orden de los viewlets, después de modificar el archivo viewlets.xml deben
De otro modo, Plone no se da por enterado de sus modificaciones.
Una de las formas en que se da uno cuenta de que crece es por como le van cambiando los gustos. Está uno toda su infancia odiando algo, digamos el caldo de res, por poner un ejemplo. Y con motivos, como no. Está calientísimo e incomible cuando lo sirven. Y luego, cuando se enfría, queda todo grasoso. Y se lo dan a uno con un pedazo de carne con huesos y pellejos que rebotan al masticarlos. Y el pedazo de elote, que no se puede agarrar con ningún utensilio, así que hay que tomarlo con los dedos, que o se queman o se embarran de grasa, según en que etapa estemos, y comerlo sin mayonesa (que es la forma correcta de comer elote hervido, por supuesto) porque si le ponemos corremos el riesgo de que se caiga en el caldo y se disuelva en él, con poco agradables resultados. Y no ayuda, por supuesto, el que a tu mamá le encanta, así que lo hace a cada rato. “El viernes va a haber caldo de res, eh. Y no quiero que empieces y te tardes en comerlo, por que se te enfría y se pone grasoso y yo no te lo voy a estar calentando otra vez. Y te lo comes todo, que aquí no hay gato.”
Y un fatídico día estás en un mercado, a la hora de la comida, en la sección de fonditas. Parado atrás de alguien con cara de que ya mero termina, esperando un lugar y, mientras, viendo qué hay de comer hoy. Que si la sopa de pasta, que si el arroz rojo. Y de pronto te das cuenta que después de todo tu mamá tenía razón y sí es cierto que los días nublados se antoja un caldito. Después de eso, sabes que no es más que cuestión de tiempo y que cualquier día vas a acabar diciéndole a alguien que “cuando sea grande lo entenderá.”
Gestionado con WordPress