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.

De “hackeos” y otras cosas

Muchos de ustedes se dieron cuenta que a principios de esta semana el blog fue bloqueado por Google debido a que se detectó malware en él. Aunque no fue la primera vez que me ponen anuncios o redirecciones a sitios que venden viagra o pornografía, sí fue la primera vez que sufrí el bloqueo de la gran G.

La situación parece haber vuelto a la normalidad, pero me lo tomo con pincitas, porque ya antes habíamos (incluyo al panda, quien me ha hecho grandes favores en este blog y hosting en general) hecho limpieza y en teoría todo estaba bien, y zas… nos cayó por donde menos esperábamos.

Razones puede haber muchas, pero las principales parece que ya han sido solucionadas: borrar los lugares que no uso o no actualizo tan seguido, así como sus bases de datos. En concreto:

  • Desaparece el blog de tecnología. No porque quiera, sino porque no tengo tiempo de estarle dando mantenimiento. Todos los posts de allá ya habían sido migrados aquí desde hace varios meses.
  • Desaparece el sitio de las fotos. Quizá muchos no lo conocieron porque nunca hubo una liga directa en el blog. Era Gallery 3, pero la última vez que le di mantenimiento fue en la versión 3.02 RC. También se va por falta de tiempo.
  • Borré varios sitios y bases de datos que alguna vez ofrecí a gente o instituciones que lo necesitaban pero que a fin de cuentas nunca usaron. Ni modo, uno les da la oportunidad, pero a final de cuentas depende de ellos .

Sinceramente, para mí no hay nada mejor que tener el control total de lo que uno usa. Por eso la instalación de WordPress de este blog se hizo desde ceros y la mantengo a mano en vez de usar la versión que se ofrece en el hosting. Sin embargo, la falta de tiempo es una situación que me afecta mucho en estos momentos, por lo que, para mi desgracia, no puedo mantener tantos sitios al mismo tiempo. Las fotos es lo que quizá más me duele, pero no hay de otra por el momento. Las subiré ya sea a Picassa o a Flickr (aunque me inclino más por el primero) en una oportunidad que tenga.

Por lo demás, parece que todo está en orden. Quisiera darle una manota de gato al blog (me prometieron un skin personalizado para el blog hace como 2 años), pero sinceramente con todo lo que traigo entre manos (una gran parte es el esclavajo) todo tendrá que esperar.

Ahí les encargo si ven algo raro en el blog, o si les vuelven a salir mensajes o anuncios de productos milagrosos o redirecciones a sitios extraños.

Errores

Como ya se habrán dado cuenta, he andado muy desconectado del blog, y para el caso también de internet. Han sido semanas pesadas en el trabajo, pero la anterior se caracterizó por una carga de trabajo moderada con una de presión bastante más grande.

Para no hacer el cuento largo, me pidieron hacer una prueba de estrés en un servidor. Pensé que la prueba en sí sería fácil (con algo como ab), pero leyendo y siguiendo el consejo del buen panda, opté por usar siege, herramienta que también es mencionada en el libro de Tomcat de O’Reilly. Leí, según yo me preparé bien, revisé varias veces las condiciones de la prueba, y en el día y la hora indicada la realicé (en realidad fueron varias).

Pensé que todo había salido bien, así que procedí a hacer el respectivo reporte… y fue donde realmente comenzó todo. Dejemos al lado que el formato del reporte no fue el que esperaban: los resultados no cuadraban. Y entre que yo soy un noob para esto de las pruebas y entre que no confiaban en que hubiera realizado la prueba correctamente, fueron 3 días para olvidar, pues terminé saliendo en promedio después de las 12 de la noche.

Entrando en detalles más técnicos, siege pide un archivo con una lista de URL a probar. El problema, y mi error, fue haber puesto URL de más, por haber entendido que se probarían N tipos de páginas y no N páginas exactamente. Pero por lo demás, las características de la prueba no estaban mal, y la forma de ejecutar la prueba tampoco. ¿Entonces?

Lo que me alegaban era que en la prueba se emulaban N número de usuarios que accederían al servidor al mismo tiempo, pero los resultados reportaban que no era así, y el número de veces que se visitaban los URL era realmente muy poco para el tiempo que duró la prueba. El panda me auxilió muchísimo con la interpretación de los resultados, y efectivamente, salió a relucir que una de las razones era por haber puesto URL de más. Error 100% mío, y en una situación laboral como la que estoy viviendo ahora, era de esperarse que me fueran a reclamar, con justa razón. Sin embargo, aun con reconocer mi error, los resultados marcaban claramente que el servidor no aguantaba mucho, pero me seguían insistiendo que la forma de hacer la prueba había estado mal, independientemente del número de páginas que había seleccionado para probar.

Después de la tormenta, se corrió una prueba emergente para comprobar que realmente había hecho la prueba original correctamente. Los resultados no mentían: se probaron menos páginas (un número cercano a las que originalmente se tenía planeado), pero se mostraba también la tendencia del servidor a no aguantar al número de usuarios indicados al mismo tiempo.

¿Qué aprendí de todo esto?

  1. Que el mundo del benchmark es mucho, pero mucho más complicado de lo que yo creía.
  2. Que aunque sé que soy humano y que obviamente me puedo equivocar, un error bajo esta situación puede costarme muy caro.
  3. Que estoy bajo mucha más presión que la que originalmente  pensaba.
  4. Que no quiero estar por siempre en una situación laboral como la actual.

Ahondando un poco en el punto 4, no tiene mucho que ver lo pesado del trabajo, o ni siquiera que no paguen las horas extra; tiene mucho más peso para mí el tiempo que le puedo dedicar a los demás, y por supuesto, a mí mismo.

Añoraba el fin de semana. Lástima que ya terminó. Tengo en puerta decisiones muy grandes, y relativamente poco tiempo para hacerlas. Como hace algunos años, necesito que los días tengan al menos 48 horas para poder hacer todo lo que debo. Mientras tanto, aquí andamos, tratando de no sucumbir ante la situación.

Agradezco muchísimo al panda por su invaluable ayuda y su tiempo en estos días, así como las palabras de aliento de varios de los mexicanos en Japón (ellos saben quienes son).

Transición a Android

Después de haber usado teléfonos celulares dirigidos al mercado japonés, hace un par de semanas me decidí a comprar un smartphone de “la nueva generación”. Y como ustedes, quienes me hacen el favor de leerme, seguramente están imaginando, mi opción fue un teléfono con Android.

Antes que nada, he de hacer mención que no es mi primer smartphone. Hace algunos años usé uno estilo “blackberry”, el cual tenía el infame windows mobile 6, pero lo cambié en la primera oportunidad que tuve debido a que en ese entonces el mercado japonés todavía no estaba preparado para esa clase de teléfonos.

Primero fue muy difícil decidirme por un modelo en particular. Tener Android sólo significa una cosa para mí: rootearlo, es decir, alterarlo para tener acceso como súper usuario, lo que significa tener el control absoluto del teléfono. Si hubiera escogido un iPhone también le habría hecho jailbreak. El caso es que había que escoger un teléfono que se pudiera rootear, pero los de fabricantes japoneses se han destacado por no poder hacerlo. Y por otro lado, con un smartphone perdería todas las funciones que han caracterizado a los teléfonos celulares nipones desde hace muchos años: dinero electrónico, televisión, acceso a la red WAP (que es muy usada en este país). Por fortuna, la nueva generación de smartphones con Android contiene también esas funciones, pero siendo de fabricantes japoneses significa no poder rootearlo. Tenía que decidir entre el root o la conveniencia de las funciones arriba mencionadas.

Durante unos días pensé cuál podría ser mi mejor opción, y me decidí al principio por un Aquos Phone de Softbank, que viene con Gingerbread (Android 2.3) y las funciones de los teléfonos japoneses. Sacrificaría el root por ellas.

El hecho de que este teléfono tome fotos en 3D sinceramente me daba lo mismo.

Estuve indeciso, pero aun así fui a una tienda de Softbank a hacer cambio de teléfono, y me dijeron que era mejor que esperara hasta el 1 de julio, ya que el pago del teléfono anterior terminaba en junio y así no sufriría ningún cargo extra por “deshacerme” del teléfono antes de tiempo (por sus contratos raros que te obligan a usar un equipo por mínimo 2 años). Yo iba medio convencido por el teléfono mostrado arriba, pero tener que esperar varios días me dio tiempo para estudiar otras posibilidades.

Consultando en Twitter, Felipe me recomendó un teléfono: el HTC Desire HD. Erick hizo hincapié en lo que ya venía pensando: ¿sacrificaría el root por funciones japonesas? El punto era que yo sí usaba esas funciones, en especial el dinero electrónico y la red WAP, por lo que sí me dolería dejarlas… pero ustedes saben que puede más el lado geek, y después de ver lo que ofrecía el teléfono recomendado, aunado con que los HTC son los teléfonos que tienen de las mejores redes de desarrolladores (y por ende, altas probabilidades de poder ser rooteados), me convencieron y me di a la tarea de buscarlo. Softbank lo maneja como el modelo 001 HT, y al revisar el sitio web, me enteré de que salió a la venta en Japón en diciembre del año pasado. Siendo un teléfono ya no tan nuevo, creí que sería fácil encontrarlo…

Continue reading “Transición a Android”

Plugin de Veetle 64 bits

Muy de vez en cuando quiero ver un video o transmisión en vivo que necesita el plugin de veetle, pero el download que viene por default en la página de descargas es para arquitecturas de 32 bits. Intenté instalarlo con ndiswrapper, pero aun así no funcionaba.

Buscando en internet, me encontré que veetle también tiene plugin para arquitecturas de 64 bits, pero no está fácil encontrarlo. Por acá la liga:

http://veetle.com/download.php/veetle-0.9.17plus-linux-install.sh

Instálenlo como usuario normal. Lo que hace es copiar los plugins necesarios al directorio ~/.mozilla/plugins

Listo. VeetleTV funcionando en 64 bits. Rara vez lo uso, pero nunca está de más tenerlo.

Cabe mencionar que vlc también puede reproducir y grabar streams de Veetle. Hay muchos tutoriales en internet, por ejemplo:

http://netimports.blogspot.com/2010/10/how-to-record-watch-veetle-broadcasts.html

Queda para el registro 🙂

SVN in-place import

Directamente del FAQ de SVN. Yo me iba siempre por el camino “difícil” (copiar, importar, rm, checkout), pero una búsqueda en Google me llevó a la respuesta:

svn mkdir file:///root/svn-repository/etc \
         -m "Make a directory in the repository to correspond to /etc"
cd /etc
svn checkout file:///root/svn-repository/etc .
svn add apache samba alsa X11
svn commit -m "Initial version of my config files"

Nada del otro mundo, lo sé, pero hace la tarea un poco más fácil.

Lo que me ha mantenido ocupado

En las últimas semanas, he dedicado la mayor parte de mi tiempo libre a un pequeño proyecto que tiene que ver con las preguntas que me hacen en formspring.

Todavía no está al 100% terminado. Me ha tomado tiempo porque comencé a hacerlo desde cero, en un lenguaje en el que no estaba acostumbrado, y formspring no proporciona en ningún formato las preguntas ya respondidas. Aunque he estado comentando en twitter un poco sobre los problemas y avances que he tenido, los detalles vendrán después, ya que estabilice el código aunque sea un poco

La explicación técnica del proyecto estará en el otro blog tan pronto lo suba al servidor.

También tengo pendientes un par de posts aquí, que espero poder escribir en la semana (aunque sea uno). La quinta parte de los años maravillosos está en el tintero, pero le falta todavía para estar terminada. ¿Que si será la última? Ya se enterarán.

Un poco de paciencia es lo que les pido, por favor 🙂

Lo que puedo adelantar al respecto del proyecto (click para ver de tamaño original):

searchengine image 01Search Engine image 02

Modernización telefónica

En julio de 2008 escribí sobre el iPhone en Japón. ¡Vaya que han cambiado las cosas en 2 años!

iphone4-white

El éxito del iPhone en el resto del mundo tardó en surtir efecto en Japón, y aunque ese éxito todavía no es “total”, ahora sí podemos decir que las tendencias han ido cambiando y que ahora el mercado de los smartphone en el imperio del sol naciente ha aumentado considerablemente.

No es un secreto que Japón es un país cerrado en lo que a telefonía se refiere. Los teléfonos que aquí se venden tienen muchas funciones sorprendentes, pero que solamente se pueden usar en Japón. Normalmente esto no importaría, ya que los japoneses no tienen necesidad de salir al extranjero para obtener algo, y las funciones de los teléfonos facilitan en gran medida la vida diaria de los nipones; pero aun con todo eso, el hecho de que solamente se puedan usar en su totalidad dentro de Japón hace que se consideren retrasados en comparación con otros países. A este síndrome le pusieron el nombre de Galápagos, queriendo dar a enteder que, por sí mismos, los teléfonos son extramadamente avanzados, pero al mismo tiempo están totalmente aislados del resto del mundo.

Continue reading “Modernización telefónica”

Problemas recientes en el blog

Hace unas semanas, alguien en el formspring me preguntaba si mi blog ahora vendía Valium. En ese entonces no entendí lo que me quería decir, y revisando el blog no había nada de malo. Pero ayer un amigo me avisó por Twitter que posiblemente el blog había sido hackeado. Ni tardo ni perezoso entré y tampoco vi problema alguno; no obstante, esa misma persona hizo hincapié en que el blog no era el problema, sino los resultados que los motores de búsqueda (como Google) arrojaban al encontrar mi blog. Al hacer una búsqueda de “Un mexicano en Japón” en Google, me encontré con que TODAS las referencias a este sitio tenían encabezados y títulos sobre medicamentos como Cialis, Valium, etc., y por fin entendí lo que en un principio me habían avisado.

Hasta donde puedo recordar, el problema debe haber sido reciente, porque hace poco recuerdo haber buscado el sitio en Google para ver qué resultados mostraba y en ese entonces no encontré ninguna anomalía, pero no sé decir a ciencia cierta desde cuándo está así la situación.

Ya he leído sobre el problema y he aplicado las soluciones ofrecidas, aunque encontrar los archivos modificados ha sido más difícil de lo que pensé. No obstante, creo que también hay que buscar en la base de datos, y en las tablas que mencionan que puede estar el problema no he encontrado nada fuera de lo común, así que creo que repararlo todo me tomará algo de tiempo, y quizá sea necesario hacer limpieza general y reinstalar todo, lo cual no es tan complicado, pero sí toma tiempo.

De momento, una gran disculpa por lo sucedido; estoy trabajando para poder regresar todo a la normalidad, pero no sé cuánto me vaya a tomar. Para quienes siguen el blog desde RSS o llegan directamente a la página, no hay problema, no verán nada extraño, pero si Google marca este sitio como “peligroso” no crean que es porque algo les puede pasar a sus computadoras ni nada parecido, solo que a Google no le gustan los sitios que promueven el spam.

Para quienes estén más interesados en lo del hack, aquí una liga que muestra más información al respecto:

http://techcocktail.com/wordpress-hacked-virus-cloaks-search-engines-2010-04

Sigo revisando.

Popurrí de fotos (sin ninguna relación)

Para no hacerles larga la historia: otra tanda de trabajo pesada… Un malentendido me hizo perder un día completo. En fin.

Realmente hoy salí de la oficina con la idea de escribir una par de entradas que tengo pendientes desde hace rato, pero tuve algunos contratiempos extralaborales, y aunados con el quehacer que tenía pendiente aquí en la casa (limpiar lo básico y lavar trastes), al momento de sentarme en la computadora me dolía la cabeza, así que decidí que escribiría algo en el blog, pero no sería lo que traía en mente.

Desde hace poco más de un año mi teléfono celular es éste:

Aunque no es la quinta maravilla en cuanto a telefonía celular se refiere, sí tiene buenos specs, además de los clásicos servicios que traen, por lo general , todos los teléfonos en Japón: TV, dinero electrónico, internet ilimitado y cámara (fotográfica y de video). Es precisamente esa cámara con la que he tomado muchas fotografías que se han quedado en la MicroSD Card, y que de vez en cuando subo a Twitpic (mi twitter es @medinamanuel). He aquí algunas de ellas, con una pequeña descripción:

Continue reading “Popurrí de fotos (sin ninguna relación)”