Japón y el transporte público – Parte 1

Viniendo de México, concretamente de Guadalajara, prácticamente cualquier destello de buen servicio en el transporte público, por pequeño que sea, nos deslumbra (con excepción quizá del tren ligero, que a mi gusto es un buen servicio). Sin embargo, el sistema de Japón realmente es de admirarse, y me gustaría mucho que en un futuro (quizá muy lejano), se viera algo similar en mi rancho.

¿Qué tiene de especial el transporte público en Japón? En esta serie de escritos trataré de analizar con detalle sus características. En este primera entrega mencionaré sobre los autobuses y los trenes. Agarren palomitas y refresco:

 

Autobuses

Antes que otra cosa, quiero aclarar que aunque “autobús” es una palabra que todo mundo entiende, en México les llamamos “camiones”.

Aunque la forma de los autobuses no es realmente cosa del otro mundo, su servicio es muy, pero muy diferente al de México.

Por principios de cuentas, usar el autobús en Japón es realmente seguro, y esto se refleja en el número de personas mayores que lo usan día a día. Y no es para menos: el autobús nunca va a exceso de velocidad (de hecho, bajo nuestros estándares los clasificaríamos como lentos), y los choferes son amables y muy serviciales.

La forma de subirse al autobús depende de la ruta y el tipo de autobús que se piense abordar. Lo más común es que la subida sea por atrás, y la bajada por adelante; y como por lo general la tarifa depende de la distancia que uno viaje, se paga antes de bajar, pero no se le da dinero al chofer, sino que se introduce en una máquina que está al frente de la unidad, y que muestro en la siguiente imagen:

 En esta máquina también se pueden cambiar billetes por monedas, y también es posible  realizar el pago por medio de tarjeta de prepago. Este último método es el más usado y el preferido por mucha gente, ya que te quitas el problema de siempre traer cambio o de andar cambiando billetes justo cuando tienes que bajarte y correr porque llevas prisa. Hablaré sobre las tarjetas de prepago un poco más abajo.

Algo que es bueno mencionar, tanto como por detalle curioso como por cultura general e información para quienes quieran venir de paseo a Japón, es la forma de ver el tablero de tarifas de los autobuses:

La primera vez que me subí a un autobús en Iizuka, estaba completamente perdido: desde subirse por atrás, que el chofer te regañe porque te paras del asiento antes de que el autobús se detenga por completo y no traer cambio… no fue una experiencia grata, pero sí ilustrativa. La imagen anterior muestra lo que hay que pagar de tarifa dependiendo de dónde se haya abordado el autobús. ¿Cómo recordarlo? Al subirse, tomas un boletito (llamado “seiriken” 整理券) en el que viene impreso un número. Ése es el número que tienes que buscar en el tablero, y debajo de él está la tarifa que se debe pagar, la cual, como ya mencioné, va aumentando de acuerdo a la distancia que se viaje.

En este caso, y tomando como base el tablero arriba mostrado, la tarifa que esta persona debe pagar si se baja en este momento es de 1630 yenes (lo que equivale a un viaje muy largo). Dicho sea de paso, la tarifa más barata también depende de la ruta y de la región de Japón, y hay autobuses que recorren en círculo rutas muy cortas y con tarifas fijas (en promedio 100 yenes).

En lo que respecta a viajes largos, el autobús es quizá la forma más barata de viajar en Japón si aguantan asientos estrechos. Por ejemplo, de Fukuoka a Tokio pueden encontrar boletos sencillos desde 5,500 yenes (dependiendo del día de la semana y de la temporada). ¡5,500 yenes! Es un precio sumamente accesible… pero, además de los asientos (que hay a quienes pueden no molestarles), hay otro factor a considerar: el tiempo que tarda el viaje.

Por ley, en Japón los choferes no pueden manejar más de cierto número de horas contínuas, por lo que, aun de noche, se hacen paradas en estaciones de servicio cada 2 o 3 horas durante un lapso de 15 a 30 minutos. De ahí que los viajes se alargan, a mi gusto, demasiado. En el viaje mencionado (Fukuoka – Tokio) se hacen 15 horas de camino. Yo lo más que he aguantado es un viaje de Fukuoka a Kioto, el cual duró poco más de 8 horas: no dormí nada, terminé con dolor de cuello y el siguiente día fue muy pesado (visité los templos en estado zombie).

Claro que si se gasta más dinero, se puede viajar mejor en autobús: los asientos de primera clase son amplios, se hacen cama, tienen TV incluída y hasta WiFi gratis hay, sin contar claro con que las unidades que los tienen son 2 de pisos y los mencionados asientos están en la parte del frente del segundo piso, perfectos para ir viendo el paisaje; lo malo es que solamente hay 4 por autobús y se ocupan rápidamente. ¿El precio? Lo más barato que lo pueden encontrar es a 15,000 yenes, y en temporada alta sube hasta cerca de 20,000. Para quienes gustan de disfrutar un viaje largo pero lleno de comodidades, quizá pueda ser una buena opción.

Como dato adicional: ¿alguna vez han visto que en una parada de autobuses haya una lista con los horarios a los que pasa el camión? Acá eso se da en todas, por pequeñas que sean. Ésta es una característica que me gustaría ver en México. Y hablando de paradas de autobuses, hay de todo tipo: desde muy pequeñas y sin lugar para sentarse, que solamente tienen el símbolo de “parada” y los horarios, hasta mucho más sofisticadas. Pero sin duda, lo más importante es que no importa lo solitaria, remota, escondida y oscura que pueda estar una parada, si en el horario dice que pasa un camión por ahí a las 11 pm, pueden estar seguros que pasará. En Japón no se dan situaciones estilo México, donde el chofer te dice “nomás llego hasta X lugar” cuando abordas en la noche (me pasó incontables veces en Guadalajara).

Trenes

Sin lugar a duda, el sistema de transporte público por excelencia.

Continue reading “Japón y el transporte público – Parte 1”

Encuentra la diferencia – versión Kanji – en Scala

Y ya con este código dejo el tema por la paz. Lo pongo para que quede en el registro:

object Uniques {
  def main(a: Array[String]) {
    if (a.length != 1) {
      println("Need an argument to analyze")
      sys.exit(1)
    }
    else {
      findUniques(a(0)) match {
        case l if (l.isEmpty) => println("All characters are the same")
        case l => l foreach println
      }
    }
  }

  def findUniques(seq: String) =  seq filter {c => seq.count(_ == c) == 1} map {c => "Unique instance found: " + c + " in position " + (seq.indexOf(c) + 1)}
}

Y probando el caso en cuestión:

mmedina@yggdrasil-m:~/Programming/Scala/Tests$ scala Uniques "麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈塵麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈 麈麈麈麈麈麈麈麈麈"
Unique instance found: 塵 in position 66

Hacerlo para que funcione con otros tipos de datos sin cambiar nada de código no es muy complicado.

Encuentra la diferencia – versión Kanji – en Haskell

Lo prometido es deuda. Siguiendo con el escrito anterior, aquí está el código que resuelve el problema, pero ahora en Haskell:

import qualified Data.ByteString as B
import qualified Data.ByteString.UTF8 as U
import System.Environment(getArgs)
import Data.List
import Data.Maybe

main = do
    putStrLn "Write the sequence you want to analyze:"
    B.getLine >>=  processArguments

processArguments :: B.ByteString ->  IO ()
processArguments xs = findUniques $ U.toString xs

findUniques = printUniques . findUniques'

findUniques' :: (Eq a, Show a) => [a] ->  [(a,Int)]
findUniques' xs = let uniques = filter (\i ->  countInstances i xs == 1) $ nub xs
                  in [(x,y) | x <- uniques, y <- mapMaybe (\i ->  i `elemIndex` xs) [x]]

printUniques :: (Eq a, Show a) =>  [(a,Int)] ->  IO ()
printUniques [] = putStrLn "All instances are the same"
printUniques us = mapM_ putStrLn $ map (\c →  ((("Unique instance: " ++ ) $ show $ fst c) ++ ) $ ((" in position " ++ ) $ show $ (+1) $ snd c)) us

countInstances :: (Eq a, Show a) =>  a ->  [a] ->  Int
countInstances _ [] = 0
countInstances c (x:xs)
    | c == x = 1 + countInstances c xs
    | otherwise = countInstances c xs

 

Es un hecho que puedo usar un where en la definición de printUniques, pero bueno, el caso es que funciona:

mmedina@yggdrasil-m:~/Programming/Haskell/FindDifference$ ./fdc
Write the sequence you want to analyze:
麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈塵麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈
Unique instance: '\22645' in position 66

Todo muy bonito, sí. Pero entonces: ¿para qué tanto código en Haskell? Explico:

Continue reading “Encuentra la diferencia – versión Kanji – en Haskell”

Encuentra la diferencia – versión Kanji

Hace unos días, me llegó un retweet con lo siguiente:

【間違い探し☆超超超超上級編】 麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈塵麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈麈 解けたらRT!

El punto es encontrar el kanji que es diferente, y al hacerlo, enviar el mensaje en un RT. Según el principio del mensaje, este problema es de nivel súper-súper-súper-súper avanzando.

“Buena forma de pasar el tiempo”, pensé, pero no para resolverlo “a mano”, sino creando un programa que lo hiciera por mí.

Viendo mis opciones, decidí programar el algoritmo en Python, tanto como práctica como para seguir dándome de topes por lo de las string unicode vs byte strings (quienes saben python entienden a lo que me refiero).

En sí, el algoritmo es sencillo, así que no tomó mucho tiempo:

# -*- coding: utf-8 -*-

import sys

def searchDifferentKanji(strseq):
    utf8Str = unicode(strseq,"utf-8")
    difstr = list(set(utf8Str))

    for c in difstr:
        if utf8Str.count(c) == 1:
            return c.encode("utf-8"), utf8Str.index(c) + 1

    return '',-1

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print "Error: Need a string to check"
        exit(1)
    else:
        difchar, pos = searchDifferentKanji(sys.argv[1])
        if pos != -1:
            print "Different char: " + unicode(difchar,"utf-8") + " in position " + str(pos)
        else:
            print "All characters are the same"

Lo que hago es simple: creo un set a partir de la cadena, haciendo con esto que todos los elementos repetidos se esfumen, y lo convierto a lista, la cual contiene exactamente un carácter por cada carácter diferente en la cadena original. Después recorro esa lista buscando en la cadena si el elemento actual aparece una sola vez; de ser así, es el carácter que estoy buscando, por lo que lo regreso, junto con la posición en la que está.

Existen problemas similares que contienen más de una diferencia, es decir: entre un mar de repeticiones del mismo carácter se encuentran varios diferentes. Para resolverlos, el algoritmo arriba expuesto puede ser sencillamente modificado para que no rompa el ciclo con el primer carácter diferente que encuentre, y agregue la tupla de (carácter,posición) a una lista, que sería el valor que la función “searchDifferentKanji” regresaría.

Como nota adicional, el kanji de ese problema es , que se lee 「しゅ」(shu), y conlleva el significado de “ciervo grande”. El kanji diferente es , con varias lecturas, entre ellas las más comúnes 「ちり」 (chiri), que significa “polvo”, “basura” y 「ごみ」(gomi), que también significa “basura”.

Sí: me queda de tarea hacerlo en Haskell.

Año fiscal nuevo, Saint Seiya nuevo

Actualización:

Lo dicho: ya no están los episodios en los links que tenía antes, pero con la fiebre que está causando la serie por allá, más de alguno sabe dónde conseguirlos o verlos.

Actualización:

Fueron rápidos. Ya está el episodio en Youtube, dividido en 2 partes. Véanlo antes de que lo quiten. Gracias a @Aries_Tj por la información. Obviamente están en japonés.

[youtube]http://www.youtube.com/watch?v=-nvDUzNgL94[/youtube]

[youtube]http://www.youtube.com/watch?v=SWur9gr3JTc[/youtube]

Ha comenzado un nuevo año fiscal en Japón: nuevo ciclo escolar, los recién egresados entran a las compañías a trabajar, y la ronda de estrenos de animación de primavera también hace su aparición.

Algunos lo consideraban leyenda urbana, otros ya habían visto el anuncio oficial… Como sea, el caso es que hay nueva serie de Saint Seiya. Y aunque no me emociona mucho el horario en el que la están transmitiendo (ya les comentaré el porqué), no puedo negar que sentí un poco de nostalgia al ver de nuevo en TV a Seiya y poder gritarle que no sirve para nada y que debía morir de unas 24 maneras diferentes 😛

¿Por qué no me emociona el horario? Bueno: consideremos que es los domingos a las 6:30 am. Olvídense de que es pecado mortal levantarse ese día a esa hora, ya que para eso existe el torne: los domingos por la mañana se caracterizan por ser la barra programación infantil; por aquí pasan programas como Pretty Cure, las mil y una versiones de Kamen Rider, y en fin, caricaturas para un público de menor edad de la que podríamos esperar para una serie como Saint Seiya. De verdad que me gustaría mucho estar equivocado y que resulte ser una serie atractiva… Creo que sólo el tiempo me podrá responder.

[youtube]http://www.youtube.com/watch?v=IKNtnF2s61s[/youtube]

En fin. El caso es que la serie comienza con Saori y un bebé. Un malo malote llega, y Saori se dispone a proteger al bebé. El malote ataca y en ese momento cuando hace su aparición triunfal el personaje X, o sea Seiya, sip, el original, como saint (caballero) dorado, visitendo la cross (armadura) de sagitario. El malote, después de que ve su ataque reducido a nada, expresa: 「流石ゴールドセイント」, es decir, “como era de esperarse de un saint dorado”, confirmando así que Seiya es oficialmente el saint dorado de sagitario (por si a alguien todavía pudiera sorprenderle). Seiya hace su pose tradicional y lanza el ペガサス流星拳 o en español, el “meteoro pegaso”, mientras que el bebé en los brazos de Saori ve a su salvador de espaldas.

Unos 13 años después vemos a un chico (que adivinamos sin problemas que es aquel bebé) siendo entrenado por Shaina, sí, la misma de antes. Este chico, de nombre Kouga (光牙) es el nuevo candidato a la armadura de pegaso, pero nunca ha sentido el cosmo, no entiende por qué tiene que convertirse en saint, y detesta la idea de que alguien más decida el destino que él debe seguir. Shaina lo reprime mucho, diciéndole que si no puede despertar su cosmo, no podrá defender a Atena, a lo que Kouga responde que dónde está Atena y que lo lleve ante ella, de otra forma no puede creer nada.

Para no hacerles el cuento largo: Saori al parecer está siendo consumida por energía negativa. Llega un malo malote a llevársela argumentando que para poder conquistar el mundo necesitan de ella. Obviamente Saori reacciona enciendiendo su cosmo, momento en el que Kouga se da cuenta que Saori es Atena (por si no lo sabían :P); Saori se dispone a pelear, pero en eso llega Shaina y comienza la pelea del malo contra ella, la cual termina rápidamente con la victoria del malote. Kouga, a quien Saori justo acababa de regalarle un collar con una especie de diamante, dice que él protegerá a Atena, su cosmo se prende, y del collar sale una luz que resulta ser la armadura de pegaso. Kouga, al mismo tiempo, ve la visión de aquel sujeto en armadura dorada que peleó hace mucho tiempo (léase “Seiya”),  y Seiya le dice que lo que está sintiendo es el cosmo, y que lo tiene que hacer arder. Acto seguido, Kouga lanza el fantabuloso y trillado ペガサス流星拳 (meteoro pegaso) y … ahí termina el capítulo.

¿Qué les puedo decir? Sinceramente, el principio estuvo mejor de lo que esperaba, pero aún es imposible decir si la serie pinta bien o no. Lo que me sorprendió es que ahora todo está situado en el futuro, y Seiya (y quiero creer que los demás, Shiryu, Shun, Ikki y Hyoga) está posicionado dentro de los saint dorados, consolidando todo lo que hizo en el pasado. Veamos como se desenvuelve la historia.

Algunos detalles:

  • La voz de Saori, y la intérprete del opening, es 中川翔子(Nakagawa Shoko), mejor conocido como “Shokotan”, una embajadora del mundo otaku que brincó al mainstream hace ya varios años.
  • La canción del opening es una versión nueva de Pegasus Fantasy, titulada originalmente como “ペガサス幻想 ver. Ω” (Pegasus Fantasy, versión Omega). La letra es la misma.
  • La voz de Seiya es la del seiyuu original, es decir 古谷徹 (Furuya Tooru).
  • Seiya es muy chafa (opinión personal desde hace muuuuuchos años).

¿Cómo la ven? Yo opino que hay que darle una oportunidad. Insisto: no espero mucho de esta serie, pero ojalá me equivoque y resulte ser algo digno de ser recordado.

Por cierto, otra de las series que comienzan, y que vaya que hacía falta que algo así llegara, es Lupin III, a partir del 4 de abril. La serie se titula “Lupin III: una mujer llamada Mine Fujiko” (ルパン三世:峰不二子という女). Acá les dejo el video promocional:

[youtube]http://www.youtube.com/watch?v=Om_UdToxqqE[/youtube]

Obteniendo todas las posibles “palabras” de 7 letras (o menos)

Últimamente, el juego al que más le dedico tiempo (además de Tekken) es a Angry Words (apalabrados en español). Con eso que me gusta Scrabble desde hace mucho, me relaja mientras voy en el tren y al mismo tiempo me ayuda a practicar mi vocabulario.

De la misma manera, le he estado dedicando tiempo a aprender Haskell, ya que veo que algunas cosas de PLN podrían ser implementadas más fácilmente con programación funcional.

Buscaba un problema que me ayudara a practicar Haskell, a dar mis primeros pinitos en el lenguaje. Y mientras disfrutaba el mencionado juego y veía que es más de “ponle lo que sea a ver si pega” en vez de “piensa en alguna palabra interesante”, se me ocurrió crear un programa que, dada una serie de letras, mostrara todas la combinaciones posibles entre ellas. Lo veía fácil y factible, por lo que me decidí a poner manos a la obra.

¿Qué tan difícil puede ser?… me pregunté. Y aunque no es algo tan complicado, sí me tomó más tiempo del que pensaba debido a que había que hacer el cambio a programación funcional y no a imperativa.

Primero, a definir el algoritmo:

Tomemos una palabra de 3 letras (por conveniencia, más adelante verán por qué), digamos “ola”. ¿Qué es lo que quiero obtener? La lista de posibles permutaciones con esas 3 letras, es decir: ola, oal, loa, lao, aol, alo. Aquí me di cuenta de un patrón: tomo una letra de la palabra, la pongo al principio, y simplemente tomo las otras 2 letras restantes y les cambio el orden. Para comenzar, tomo la “o” como la letra principal, entonces me quedo con “la”, y las únicas combinaciones posibles son “la” y “al”; después, agrego la letra principal “o” y la pongo al principio de cada palabra, obteniendo “ola”,”oal”. Continúo con la siguiente letra, la “l”, la tomo como principal, quedándome “oa”, de la cual obtengo “oa” y “ao”; le pongo la “l” al principio de cada una y obtengo “loa”,”lao”. Por último tomo la “a” como letra principal, lo que me deja con “ol” como el resto, obteniendo “ol” y “lo”; le pongo la “a” al principio de cada una y resultan “aol”, “alo”. Juntando todos los resultados parciales, obtengo la lista de palabras que estoy buscando.

Con la definición anterior, recursivamente se pueden analizar palabras de cualquier longitud. ¿Buenas noticias para los que juegan apalabrados? En teoría, si es que tienen la paciencia de ver todos los resultados. ¿Cuántos son? Saquemos cuentas:

Una palabra de 3 letras resultó en una lista de 6 palabras. ¿Cuántas resultarán de una de 4? Como lo que buscamos son permutaciones, la fórmula es sencilla:

n!

Revisemos: 3! = 3x2x1 = 6. ¡Bien! Si cuadra el resultado

Entonces, con 4 letras tendremos: 4! = 4x3x2x1 = 24 Todavía no son muchas…

Con 5 : 5! = 5x4x3x2x1 = 120 ya da flojera ver tantas permutaciones…

¿Y con 7? Pues 7! = 7x6x5x4x3x2x1 = 5040 Está bien que no haya límite de tiempo en cada jugada de apalabrados, pero qué flojera (o ganas de ganar) de aquél(la) que se ponga a leerla cada vez.

¡Ajá! Dirán ustedes: ¿qué pasa si hay letras repetidas? Obviamente habrá palabras repetidas también, lo cual reduce nuestra lista. ¿A cuánto? Oh benditas matemáticas:

n!/(a!b!c!…)

En donde a es el número de veces que se repite una letra, b es el número de veces que se repite otra, c es el número de veces que se repite otra… y así sucesivamente.

Supongamos que tenemos las letras “atajada” (si las tienen, ¡no la piensen y jueguen esa palabra!). La letra “a” se repite 4 veces, entonces, tendremos:

7!/4! = 7x6x5 = 210

Quizá pude haber pensado el algoritmo con una palabra de 4 letras desde el principio, y aunque sí revisé a mano después, me era más fácil iniciar con una de 3 (sólo 6 posibles permutaciones).

Luego, a hacer el programa. El resultado, a sabiendas de que puede haber una mucho mejor implementación, es una belleza de 18 líneas de código (y porque puse doble enter en algunos lugares):

Continue reading “Obteniendo todas las posibles “palabras” de 7 letras (o menos)”

XMonad: Cambiar el nombre del layout que se muestra

Hace tiempo escribí sobre XMonad y un xmonad.hs básico en donde mostraba cómo mostrar íconos en vez del título del layout. Esta vez esalgo similar, pero como ahora sí estoy estudiando Haskell en forma, ando buscando cómo hacer lo que quiero con guards:

En uno de los escritorios estoy usando LayoutCombinators para combinar 2 layouts (concretamente simpledTabbed y DragPane Horizontal). Al mostrarse el nombre del layout aparece lo siguiente:

“combining Tabbed Simplest with DragPane Horizontal 0.1 0.099999999”

Debido a su longitud, me quita espacio del título de la ventana activa, por lo que pensé hacer un shorten, pero después recordé que en la laptop hago pattern matching para mostrar un ícono en vez del nombre del layout, por lo que pensé hacer algo parecido: si el nombre del layout comienza con “combining”, muestro un nombre que yo defina, y en cualquier otro caso muestro el nombre original.

El layout quedó así:

myXmobarPP h = xmobarPP
             { ppOutput = hPutStrLn h
             , ppCurrent = xmobarColor "green" "" 
             , ppHidden = xmobarColor "#5f7962" ""
             , ppVisible = xmobarColor "#f4a460" ""
             , ppUrgent = xmobarColor "#cc0000" "" . wrap "*" "*"
             , ppSep = " | "
             , ppWsSep = "  "
             , ppLayout = xmobarColor "#5CBAF5" "" .
                          (\lName -> showLayoutName lName)
             , ppTitle = xmobarColor "white" "" . shorten 150
             }

showLayoutName :: String -> String  
showLayoutName a | Just rest <- stripPrefix "combining" a = "Tabbed + DragPane H" 
showLayoutName a = a

Donde lo que quiero hacer está en ppLayout: una expresión lambda para revisar si el título comienza con “combining” o no. Esa revisión la hago en la función showLayoutName con la función stripPrefix, que recibe una lista y regresa otra lista que contiene los elementos después del prefijo indicado si es que existe, o Nothing en caso contrario. Si el título del Layout comienza con “combining”, regreso “Tabbed + DragPane H”, y si no, simplemente regreso lo que me llegó.

Intenté hacerlo con guards, pero nomás no me compiló el código, y como estoy en el trabajo, no me dio más tiempo de probar, por eso lo implementé como aquí se muestra.

Si quisiera hacerlo en Scala, el código quedaría así:

val xmobarColor = (bgColor: String) => (fgColor: String) => (output: String) => {
  // Hacer algo con los parámetros y regresar un String
  ...
}

val showLayoutName = (layout: String) => {
  layout.startsWith("combining") match {
    case true => "Tabbed + DragPane H"
    case _ => layout
}

// Asignando todo a ppLayout

val ppLayout = ((xmobarColor("#5CBAF5")("")) compose showLayoutName)

// Siendo layoutName el nombre del layout actual

ppLayout(layout)

Aunque sigo siendo novato en Scala (y para esos fines, en programación funcional), me late más la forma concisa de Haskell. Hacer function composition en scala es agregar demasiadas palabras (aunque si usara scalaz todo cambiaría), mientras que en Haskell el currying, la aplicación parcial y la composición se hacen sin mayor complicación.

Sigo estudiando y practicando.

¿Sabías que… ? – Parte 13

Me gustaría mucho saber si el ¿sabías que…? de esta ocasión también se acostumbra o lo han visto en otros países.

Sin más preámbulos:

¿Sabías que cuando entras a un café o restaurante en Japón lo primero que llega a tu mesa es un vaso de agua, y puedes tomar toda la que quieras porque es gratis?

Explico:

  • Cuando llegas a un restaurante, los meseros te dan la bienvenida y te dan un vaso de agua, incluso antes de que ordenes algo. Generalmente es un vaso pequeño, pero siempre hay jarras en las mesas o bien puedes pedir tanta agua como lo desees. El agua no tiene costo.
  • Si con tu orden no pides ninguna bebida, por lo general te sirven más agua.
  • En Japón, lo que nosotros conocemos como “agua natural” es llamada “agua mineral” (ミネラルウォーター). De ahí que los japoneses se confundan cuando salen del país y piden agua mineral esperando obtener agua común y corriente.
  • Aquí se puede beber el agua directamente del grifo (de la llave) sin problema, aunque algunos japoneses prefieren hervirla primero.

Cuando recién llegué a este país, el hecho de que en las cafeterías me sirvieran agua sin haber ordenado nada sinceramente me sorprendió, sobre todo porque vienes con la idea de México: “chin… me lo van a cobrar”.

¿Saben ustedes de algún otro país en donde se acostumbre algo similar?

Y me mudé

Ya es marzo. El paso del tiempo es curioso: a veces lo siento muy rápido, otras demasiado lento. Sin embargo, no se detiene, y con él, los planes se llevan a cabo.

El pasado domingo me mudé. Sigo viviendo en Tokio, pero ahora ya no en la zona central (cerca de Ueno), sino al noroeste, casi en la división entre la capital y la prefectura de Saitama. Y con la mudanza ya ustedes saben todo lo que viene: trámites, empacar, desempacar. Y por más que intenté hacer los primeros 2 con tiempo, a fin de cuentas me pasé el fin de semana pasado sin dormir absolutamente nada, todo por terminar de hacer las maletas, o siendo más precisos, llenar las cajas de cartón.

La nueva casa está en una zona que se asemeja mucho a Kitakyushu, en Fukuoka: muy tranquila, muchas casas, pocos comercios, y sin carro todo es más difícil. De haber sabido que estaría en un lugar como éste me habría traido el carro desde Iizuka, pero hace 6 meses jamás pensé que me mudaría de donde estaba antes, y menos tan pronto.

Tomar la decisión de salirme de la ahora casa anterior no fue fácil: hubo que tomar en cuenta muchos factores; pero el que más peso tuvo fue el de depender del trabajo actual para poder vivir ahí. Con la situación como está y los planes que se aproximan, creo que la mejor opción fue decirle adiós a esa morada. Hay recuerdos en ella, sí, pero aunque quisiera que todos fueran buenos, no lo son. Muchos podrían pensar que es normal que no todo sea color de rosa (y tienen razón), pero personalmente esa casa, y para el caso, este trabajo, representan una etapa de mi vida, tanto personal, profesional y en mi estancia en Japón, muy difícil y, sobre todo, frustrante. Para salir de eso, necesitaba nuevos aires.

Como comenté antes, ahora el centro de ocio (cuando haya tiempo) será Ikebukuro, especialmente la Sunshine 60 Street:

[youtube]http://www.youtube.com/watch?v=YAUbZjC77yM#![/youtube]

Esto no quiere decir que viva cerca de ese lugar, sino que ése es el lugar donde hago conexión con la ruta que me lleva a mi nuevo refugio.

Sin embargo, lo más importante para mí, y que es mucho más grande que vivir cerca de Akihabara, o para el caso del área central de la capital de este país, es lo que viene. Estoy en un momento en donde tengo que tener mucha paciencia. He perfeccionado el arte del tatemae hasta límites que no creía posibles en mí, pero todo sea por llevar la fiesta en paz. En cuando haya oportunidad, daré el brinco (léase: adiós trabajo).

Eso sí: debo darme tiempo para desempacar, porque en serio que apenas puedo pasar al entrar a la casa. Duermo rodeado de varias decenas de cajas de cartón :S

Office Glico

Ezaki Glico es una compañía japonesa que primordialmente produce dulces, helados, entre otras cosas. Quizá les suene más si menciono que es la compañía que hace los Pocky, una varita de chocolate que en los últimos años misteriosamente se convirtió en la golosina típica de los aficionados de la animación japonesa en México.

Los horarios de oficina en Japón varían dependiendo de las compañías, pero lo que tienen en común es que sólo hay una hora para comer. Dicho sea de paso, en Japón se come al mediodía. Y también dependiendo de la empresa, hay algunas que no permiten que los empleados salgan del lugar de trabajo antes de la hora.

¿Qué pasa cuando los empleados tienen hambre o ganas de comer algún dulce? Glico tuvo una idea: Office Glico.

¿Qué es?

Muy simple: Glico pone esos cajoncitos y el refrigerador, le pone dulces, helados y hasta mascarillas para cubrirte el rostro cuando estás resfriado, cada producto, el que sea, tiene un costo de 100 yenes.

¿Cómo funciona?

Esas partes verdes que se ven en la parte de arriba tienen la figura de una rana. Tomas tu producto y le pones 100 yenes a la rana, la cual se “come” el dinero. Todo se basa en confianza: tomas algo, pagas 100 yenes. Nadie te está vigilando.

¿Es caro?

Algunos productos, como las mascarillas, sí lo son. Los helados y algunas golosinas cuestan unos 85, 90 yenes por fuera, así que en realidad no es mucha la diferencia.

Lo bueno de Office Glico es que no necesitas salir de tu lugar de trabajo para comprar algo para echarle a la panza cuando tienes antojo (o hambre, porque también le ponen ramen instantáneo).

En lo que viví en México nunca me tocó ver algo similar. ¿Ha surgido algo como esto en estos años?