Funciones como ciudadanos de primera clase y expresiones lambda

En la entrada anterior, varias personas me hicieron el apunte de que debería haber puesto la última parte (donde explico para qué puede ser útil ese conocimiento) en el principio. Otros comentaron que aunque es posible entender el escrito, sí es necesario conocer ciertos conceptos, como mapeo, para “agarrar el hilo”.

Agradezco mucho sus comentarios 🙂

Aunque no pretendo hacer (de momento) una guía exhaustiva sobre programación funcional, sí me gustaría plasmar algunos conceptos básicos que puedan servir para despertar el interés de investigar más.

Cabe mencionar que programar en forma funcional no necesariamente es mejor que la programación orientada a objetos. Cada paradigma tiene pros y contras, pero conocer lo que cada uno ofrece nos permite tomar mejores decisiones a la hora de crear código o de seleccionar un lenguaje para ciertas tareas.

Vayamos al grano:

Continue reading “Funciones como ciudadanos de primera clase y expresiones lambda”

Monads – Yo también tenía que escribir al respecto

Seguí la tradición: cuentan las leyendas que cuando una persona comienza a ver la luz al usar Monads, invariablemente escribe un tutorial. Pero en mi caso, no es un tutorial, sino más bien una breve explicación de lo que son, junto con algunos ejemplos. Esto es con el fin de que yo mismo compruebe si entiendo el concepto general, y al mismo tiempo de que salgan gurús en programación funcional y me corrijan y me digan en qué estoy mal.

Ésta no es una guía exhaustiva, y omitiré muchos conceptos, pero pondré referencias por aquello de que haya interesados en el tema.

Como nota, sé que en español los términos son Funtor mónadas, pero nada más no me entran en la cabeza, por lo que los usaré en inglés. Además, aunque no está dirigido a un lenguaje en particular, la mayoría de los ejemplos mostrados están en Scala.

Continue reading “Monads – Yo también tenía que escribir al respecto”

Seguir soñando

A lo largo de los ya 9 años que tiene el blog (y que no he escrito nada en especial al respecto), no sólo ustedes, quienes me hacen el favor de leerme, han visto una serie de cambios en mi vida. También yo he recordado cómo pasé de ser un olvidado estudiante de maestría y luego de doctorado en un laboratorio de una universidad en un pequeña ciudad en la prefectura de Fukuoka, a alguien que persigue muchos objetivos pero sigue teniendo dudas.

Los años pasan, y al tiempo no hay forma de ganarle (todavía). Crecer en México y desarrollarme en Japón me ha dado una visión única y especial de la vida en ambos países. He tenido la fortuna de conocer a grandes personas tanto aquí como en mi país, de reconocer debilidades que hasta hace años habían pasado desapercibidas, y al mismo tiempo, de debatir lo que quiero para el futuro.

Hace ya más de medio año, un mexicano radicado en Kanagawa me invitó a comer a su casa. Al evento asistieron otras personas, entre ellas una chica oriental (no japonesa), quién se encontraba ante la difícil decisión de qué es lo que quería hacer con su vida, y con base en ello decidir qué es lo que debía de estudiar y en dónde debería estar. Ella me preguntó: “¿cómo fue que tomaste la decisión de saber qué es lo que querías hacer el resto de tu vida?”, a lo que respondí: “Simplemente haz lo que te gusta. Si no sabes qué hacer, al menos creo que tienes una idea más o menos clara de lo que NO quieres hacer. Eso es un buen comienzo.”. Pero mientras respondia, me percataba de que yo también estaba ante una situación similar.

Hasta aproximadamente julio de este año tuve días, semanas y meses muy pesados. Me eché demasiada carga emocional al respecto. Sentía que se me cerraba el mundo, que tenía que apresurar cualquier decisión que tomara, y creía que la situación en la que vivo actualmente era la responsable de que me sintiera así. Platiqué con varias personas, escuché opiniones y consejos, y lo primero que decidí fue tomar las cosas un poco más a la ligera. Necesitaba darme cuenta de que, aunque es cierto que hay decisiones que se tienen que hacer en determinado momento, había otras (especialmente las que invariablemente trazarán una buena parte del camino que hay que seguir por una cantidad de tiempo considerable) en las que era necesario respirar profundo y no sentirse atado a ningún tipo de reloj. Decidí bajarle el ritmo a muchos objetivos, sobre todo porque mi salud se estaba viendo afectada (dormir no está tan sobrevalorado como muchos dicen).

Algunos meses han pasado desde entonces. He comprendido que lo primero que tengo que hacer es evitar perder es la capacidad de seguir soñando. No hay presiones externas (algunas se podrían tomar como tal, pero mientras uno no las considere, no cuentan), pero la premura con la que quería alcanzar ciertas metas opacaba esa parte de mí que me trajo a Japón hace 10 años y medio. Y sin ella, definitivamente no hay rumbo qué seguir; solamente me encontraría navegando sin rumbo durante quién sabe cuánto tiempo.

Además, recuperé el gusto por varias actividades que consideraba casi perdido. Nadie lo sabe, pero en esto tienen mucho que ver personas que están en México y que ni siquiera conozco en persona. Es más: ni siquiera ellos están enterados de cómo ciertas actividades que realizan me han ayudado a reenforcarme, y gracias a eso pude disfrutar como nunca un par de eventos por esta parte del mundo.

No obstante, pienso que lo más importante de este tiempo ha sido dejar de ser duro conmigo mismo y culparme por algo en lo que no tenía control. Y eso no es nada críptico, ni tampoco un secreto: mi doctorado. Cumplí ese sueño, pero no de la manera que habría querido, y lo que pasó después de obtenerlo no significa que no le haya echado las ganas necesarias. Le hice caso a muchas personas que se cansaron de sugerirme que mirara hacia atrás y viera el camino que he seguido. Gracias a eso, entendí de dónde viene mi disgusto y que no era nada más una excusa que había inventado.

Todavía tengo mucho, pero mucho que aprender.

Más de alguno de los que me leen seguramente está pensando: “¿Y ahora qué fumó Manuel?”, y la respuesta es: “serenidad”, aunque no toda la que necesito. La vida continúa y hay que enfrentarse todos los días a diferentes retos. Pero sobre todo eso, quiero seguir siendo alguien que cree que puede comerse el mundo; que, de alguna forma, puede cambiarlo; quiero volver a soñar que puedo ser astronauta, bombero, futbolista, y quiero decirme a mí mismo que sí puedo, y que es sólo cuestión de que ponga el objetivo en la mira para poder alcanzarlo.

Sigo creyendo que siempre tengo la edad perfecta para realizar algo. Estuve cerca de perder esa idea. Pero nel, no me dejo. Hoy a los 35 años, y siendo el décimo aniversario que celebro en Japón (porque uno me tocó estar en México) estoy fresco (ignoren por favor el estado físico – piernas sobre todo. Recuerdo del monte Fuji), y creo que sí, me puedo comer el mundo. Lo que sigue es ver los cubiertos que usaré.

Nintendo 3DS modelo de Zelda – Difícil de apartar

Esta belleza fue anunciada primero para Europa. Esperaba que dieran el anuncio de que también saldría en Japón, ya que sería la oportunidad perfecta para comprar uno después de tanto tiempo de andar cazando el modelo de Mario y no encontrarlo en ningún lado, o encontrarlo a precio exhorbitante. Dieron el aviso oficial y dije, “¡sí!”.

Voy a Amazon Japón, lo busco, nada. Veo otras tiendas en línea, lo busco, y nada. No estaba todavía disponible para ser apartado. Esto fue el miércoles. Ayer viernes me meto de nuevo a buscar y ¡sí está!, pero AGOTADO en todos los lugares conocidos.

Sí, me tardé (unas horas). Pensaba que ya estaba todo perdido cuando se me ocurre buscarlo en tiendas auspiciadas por Rakuten, y que me encuentro un lugar donde todavía se podía apartar, y a un precio razonable (aunque no el oficial). Ya no le quise dar más vueltas y lo aparté.

Tendré Nintendo 3DS LL con Zelda para fin de año. Ya era justo.

Cuando se te olvida dónde estás…

Hace aproximadamente una semana tuve la “suerte” de que la policía me parara y me pidiera mis documentos. Esto fue cerca de la estación de tren en donde vivo, un lugar muy tranquilo, sin mucho bullicio, alejado de la zona principal de Tokio. No obstante, hasta después de haberme mudado por acá me percaté de que hay muchos extranjeros por acá, especialmente filipinos. No, no tengo absolutamente nada en contra de ellos ni de ningún otro extranjero por acá, simplemente lo menciono porque es indicio de que la policía hace esas “revisiones de rutina” más frecuentemente que en lugares donde casi no hay.

El caso es que aquí yo “incité” al policía a que me detuviera porque no traía lamparita en mi bicicleta, y se supone que debo tener. Justamente al salir del estacionamiento de bicis (駐輪場, chuurinjou) y dar la vuelta a la esquina, un policía en motocicleta me hizo la seña que me detuviera, me preguntó por la lámpara, y le dije la verdad: que se había descompuesto y no la había cambiado. De ahí empezó la revisión a ver si la bici no era robada, mi tarjeta de residencia, y el típico interrogatorio de “¿dónde trabajas?” y “¿cuánto tiempo tienes en Japón?”. Respondí después de que le pedí que se identificara como policía, algo que generalmente los saca de onda porque no esperan que se los pidas. El chiste es estar seguro de que quien te está interrogando sea realmente policía (porque luego andan de civiles) y no le estés dando tu información a cualquier extraño que te lo pide.

Lo importante de esto es NUNCA ser grosero, ni levantar la voz, y siempre usando el japonés más cortés que sea posible, explicando la necesidad de saber si le están dando la información a un policía real por aquello de los fraudes. Nunca he tenido problemas al responder de esa forma, y siempre termino con una breve, pero amena, plática con el policía de cómo le ha ido, de cómo es mi trabajo, de que si hablo japonés bien, etc.

El título de esta entrada hace referencia a que has pasado mucho tiempo en algún lugar, te acostumbras, y algunas veces se te olvida que no eres de ahí, o bien de lo que, en el caso de Japón, otro extranjero puede considerar raro. Suena extremo, y no es muy común, pero llega a suceder.

Hace poco me hicieron la pregunta clásica de “¿qué es lo que más te sorprendió de la cultura japonesa la primera vez que viniste a Japón?”, pero con el agregado de “¿o has estado tanto tiempo aquí que ya se te olvidó?”. Ciertamente no se me ha olvidado, pero de repente sí se me pasan detalles que, al escucharlos de alguien más, recuerdo e inmediatamente asocio a experiencias vividas de este lado del mundo. Algo así estoy usando para detallar lo más posible la siguiente entrada de “Los años maravillosos”, y todavía no sé si será una sóla o de plano la divido y la saco en 2 partes.

Algo que no se puede olvidar de ser extranjero en Japón es que siempre te lo van a recordar de alguna u otra forma, incluso aquí en Tokio. Aunque sé que nadie lo dice o pregunta con mala intención, comentarios como “¡Oh! ¡Sabes usar muy bien los palitos!”, “¡hablas muy bien japonés! (después de simplemente saludar)”, de que los de McDonald’s te vean e invariablemente te muestren primero el menú en inglés , o de que llegues preguntando algo en japonés y a fuerzas te quieran responder en inglés, te recuerda de que no importa cuánto tiempo tengas en Japón, siempre serás extranjero a sus ojos, por lo que ya sabemos de la sociedad homogénea. Y no nada más lo digo yo: los “half” (forma de llamar a los hijos de japoneses con extranjeros, y que en algunos casos es considerada ofensiva) comentan que es difícil que la gente acepte que son japoneses (hayan nacido y crecido en Japón) simplemente porque no tienen cara de japoneses.

Esta tendencia está cambiando, es cierto, pero falta mucho para que el cambio se consolide, primero en la capital, y luego en otras zonas del país.

Con todo, todavía tengo que encontrar al japonés que, sin conocerme, pueda escribir mi nombre sin errores. Si yo escribo mi nombre como メディナ ゴンサレス マヌエル, en primera, NADIE le atina nunca al “Medina”. Siempre soy “Melina”, “Menina”, “Mebina” o algo similar. Hasta que me sugirieron que dijera “es DI, como en Disneyland” (vocabulario conocido por todos los japoneses), sufría siempre que tenía que dar mi nombre por teléfono. Y en “González”, SIEMPRE  lo escriben como ゴンザレス (con ザ en vez de サ), siendo que muestro mi identificación oficial y mi tarjeta del seguro médico y en todas dice ゴンサレス, pero por costumbre siempre lo escriben de la otra forma.

Seguimos disfrutando Tokio.

Algunos detalles arreglados

Desde que instalé el plugin para tuitear entradas antiguas, varias personas me hicieron la observación de que en ninguna parte aparecía el año en el que la entrada había sido escrita. Recibí también comentarios en entradas antiguas en las que los lectores pensaban que era la entrada nueva. Cierto es que en la URL de cada una viene el año, pero ahí nadie la va a ver.

Muy lejos de ser siquiera novato en diseño gráfico, modifiqué el tema que uso en el blog para poder agregar el año en donde aparece la fecha. Para lograrlo, tuve que modificar la imagen original, la stylesheet, y agregar al archivo index.php del tema las líneas de código para mostrar el año.

El resultado lo pueden ver en cualquier entrada. Espero que no se salga de los márgenes, sobre todo en IE. Ahí les encargo si ven algo extraño.

¿Sabías que…? – Parte 17

En alguna ocasión hemos escuchado o leído sobre alguien que se encuentra una gran cantidad de dinero, pero en vez de quedarse con ella, la reporta y la regresa a su dueño, sólo para ser blanco de numerosas críticas (por no usar otras palabras) por tal acto de “idiotez”. Al respecto, el ¿sabías que…? de esta ocasión:

¿Sabías que si se te cae o pierdes dinero en Japón es muy probable que puedas recuperarlo?

Obviamente no funciona en todos los casos, pero son mucho mayores las ocasiones en las que puedes recuperar lo que tiraste/perdiste. Depende hasta cierto punto de la cantidad y el lugar. Por ejemplo, si compras un refresco en una máquina vendedora y se te olvida recoger, digamos, unos 350 yenes de cambio, es probable que la siguiente persona los tome (aunque también se da el caso de que ahí lo dejan hasta que llega el dueño o alguien más lo agarra); pero si hablamos ya de cantidades mayores a 1000 yenes, la situación cambia.

En mi experiencia personal, una vez se me cayeron 3,000 yenes (3 billetes de 1,000) en las arcadias a las que solía asistir en Iizuka. No me di cuenta hasta que llegué a la casa (después de la medianoche). Huelga decir que daba por perdido ese dinero. Pero la siguiente vez que fui, uno de los chavos que usualmente iba a jugar ahí me dijo que se había encontrado dinero y que posiblemente era mío porque estaba cerca de donde estaba sentado; él lo había encontrado y lo había entregado a los encargados del lugar. Me dijo que les preguntara al respecto. Así lo hice, y sin muchas preguntas me entregaron mi dinero.

Ustedes dirán “Bueno, 3,000 yenes no es en realidad tanto), pero hay otra historia cercana que implica una mayor cantidad.

Una mexicana que anda por acá traía dinero para comprarse una bicicleta. 30,000 yenes para ser exactos. Por una cosa o por otra, se le cayó el dinero. Esto fue en Shimokitazawa (下北沢), en Tokio. Estaba muy triste y lo mencionó en Twitter. Al leerlo, Saeko (la esposa de Rigo) y yo, prácticamente al mismo tiempo, le recomendamos que fuera a la estación de policía más cercana, ya que era muy probable que pudiera recuperar su dinero. Le dijimos “esto es Japón”. Creo que con más duda que otra cosa, pero ya sin más que perder, nos hizo caso. Su sorpresa fue grande cuando, después de unas cuantas preguntas, le regresaron su dinero. Alguien lo había encontrado y lo había llevado a ese lugar para que la persona que lo había tirado pudiera tenerlo de vuelta.

Ésa es la idea: si se te pierde algo en Japón, lo primero que hay que hacer es reportarlo con la autoridad más cercana (en la calle, a un policía; en una estación de tren, al encargado, etc.). Tomarán tus datos para avisarte si lo encuentran. Aunque ya de todas formas lo des por perdido, no está de más hacer el reporte, sobre todo en el caso de dinero. Parece mentira, pero en realidad se puede recuperar.

En México (y casi podría decir que en latinoamérica), la idea de “si no es de nadie, es mío” es lo común, lo que todos consideraríamos normal en caso de encontrarnos con (o saber de) una situación similar. Por supuesto que hay personas honestas, y apropiarse de algo encontrado en la calle no es necesariamente un delito, pero lo que menciono al principio de esta entrada es quizá la reacción que la mayoraría esperaríamos en un caso similar. Con todo, sé de 2 casos en México (ya hace mucho tiempo) en donde maletines o bolsas llenas de dinero se dejan olvidadas en taxis, y los choferes las reportaron y pudieron regresarlas a sus dueños.

Mientras tanto

$ wc luz.txt 
  327 13975 80072 luz.txt

$ wc aniosmaravillosos-nuevo.txt
  128  6360 36352 aniosmaravillosos-nuevo.txt

Como que todavía me falta un buen para llegarle al número de palabras del post Luz (13975). No es que quiera romper ese récord con el siguiente post de “los años maravillosos”; simplemente me entró la curiosidad de saber de cuántas palabras consiste cada uno.

¿Cuándo estará listo? Cuanto más pronto, mejor. Lo malo es que no he podido escribir en el tren de camino al trabajo (ni en el de regreso), y en el trabajo no me puedo poner a escribir esto (además de que el teclado, un HHKB Lite2, es muy ruidoso). Tampoco me ha ayudado la carga de trabajo que he tenido en estos días.

Para poner al tanto el blog, aunque sea un poco, he de mencionar que ayer, así de buenas a primeras, me cambiaron de lugar en la oficina debido a que también me cambiaron de departamento. Dejo de ser 100% sistemas para ser 50% R&D y 50% sistemas, pero ahora estoy junto a los demás investigadores. Obviamente no me molesta para nada porque eso era lo que había pedido desde un principio, pero sí me dolió dejar mi rinconcito en donde nadie se asomaba y nadie se metía.

Hace un par de semanas me tocó manejar por casi 8 horas (4 de ida y 4 de vuelta) todo por ir a unas aguas termales en Saitama que se antojaban decentes. Sí, lo eran, pero el lugar era mucho más chico de lo que se veía en la foto. Sirvió para distraerme, cierto, pero los embotellamientos están con ganas aun fuera de Tokio.

Dejen les presumo algo:

El trofeo de platino de Resident Evil Revelations – Unveiled Edition (PS3). Me costó trabajo, sobre todo el Ghost Ship, porque nunca jugué en línea. Me lo aventé todo yo solito.

Úlimamente he revivido mi GameCube, y como es una consola vieja los juegos son muy baratos. Encontré Eternal Darkness en 500 yenes. El único que no he podido hallar en menos de 6000 yenes es el de The Legend Of Zelda – Twilight Princess. Es raro encontrarlo, y cuando lo ves, el precio es muy alto.

Han estado movidas las últimas semanas. A veces se me va la onda de qué día es y de lo que tengo que hacer. Por ello, un favor: si a alguien le debo algún correo o alguna respuesta, no sean malos y díganme. No lo hago de mala fe, y a la mayoría de personas que me preguntan algo o me mandan correo siempre les respondo, pero a los que no es porque de plano se me pasa.

Por cierto, una sugerencia recurrente que he tenido en el blog es el de poner el año en el que fue escrita cada entrada. Aunque en la URL viene incluido, lo cierto es que al usar el plugin Tweet Old Posts, tanto los nuevos lectores como los que ya tienen tiempo por acá pero no han leído todo se van con la finta de que la entrada es nueva y se confunden al enterarse que ya no estoy en el doctorado, que ya no vivo en Fukuoka y que ya tampoco he tenido la oportunidad de presentar sobre México en las escuelas. Eso está en la parte más alta de mi lista de pendientes y en la primera oportunidad lo agregaré. No es que sea difícil, sino que si nada más cambio el template de cada entrada, tendría que volver a hacer el mismo cambio cuando salga una versión nueva de él. De cualquier forma, lo del año estará ahí pronto.

En cuanto tenga lista la siguiente parte de los años maravillosos, la subo.

Trayer-srg: Trayer con soporte para varios monitores

Algo rápido, mientras termino el post de los años maravillosos:

Para quienes usan manejadores de ventanas como dwm o XMonad, existen programas que proveen barras de sistema estilo Gnome o KDE. Los 2 que conozco son stalonetray y trayer. Ambos tienen sus pros y contras.

En lo personal, comencé usando el primero, pero terminé yéndome al segundo por simplicidad. No obstante, trayer tiene un problema: en configuraciones de más de un monitor, el edge left o right se identifica con la parte izquierda del monitor más a la izquierda o la derecha del monitor más a la derecha. Es decir: no es posible poner la barra en un monitor determinado.

Intenté de todo. Las posiciones verticales se pueden arreglar nivelando la parte baja de todos los monitores con algo como xrandr y aritmética básica, pero las horizontales nada más no.

Aquí es donde entra trayer-srg: un fork del programa original que, además de pulir el código, añade funcionalidad, y entre ella, está la opción de especificarle en qué monitor queremos que la barra salga.

Así, mi .xsession queda de la siguiente forma:

# Win Key in HHK2
xmodmap -e "keycode 49 = Super_L"

# Fonts
xset fp+ /usr/share/fonts/truetype/android
xset fp+ /usr/share/fonts/truetype/windows

# Monitor settings
xrandr --output DFP1 --mode 1680x1050 --primary --output DFP5 --mode 1280x1024 --right-of DFP1

# Background
feh --bg-scale `cat /home/mmedina/.xmonad/background`

# Systray (using trayer-srg)
trayer --edge top --align right --width 100 --widthtype pixel --height 14 --SetDockType true --SetPartialStrut true --monitor 0 --transparent true --tint 0 --alpha 0 &

# Let's go!
exec xmonad

En cuanto a la status bar, anteriormente puse los scripts que ejecuto. Sin embargo, en el trabajo simplemente corro xmobar con la siguiente configuración (no le he movido la gran cosa):

    Config { font     = "-misc-fixed-*-*-*-*-10-*-*-*-*-*-*-*"
           , bgColor  = "#000000"
           , fgColor  = "#BFBFBF"
           , position = Static { xpos = 0, ypos = 0, width = 1580, height = 14 }
           , lowerOnStart = True
           , commands = [ Run  Date "%H:%M:%S * %a %b %_d %Y" "theDate" 10
	     	      	, Run Memory ["-t", "Mem: <usedratio>%"] 10
                        , Run Swap [] 10
                        , Run Cpu ["-L", "3", "-H", "70", "--normal", "green", "--high", "red"] 10
                        , Run StdinReader]
           , sepChar  = "%"
           , alignSep = "}{"
           , template = "%StdinReader% }{ %cpu% - %memory% %swap% <fc=#FFCC33>%theDate%</fc>"
           }

 

El resultado (click para agrandar):

statusbarXmonad

Cierto es que puedo ponerle más funciones a XMobar, o incluso configurar Conky con dzen2 (que me llama más la atención), pero me acostumbré a tener la barra así en el trabajo. En una chance me pongo a jugar para ponerle más monerías.