Semana santa y semana dorada

Para muchos, estas 2 semanas (santa y pascua) significan vacaciones. Si bien no es lo mismo que cuando uno es estudiante y tiene las 2 semanas completas de descanso, al menos un buen número de compañías dan libres desde el jueves. Dejando al lado la violencia que azota al país y el hecho de que este año muchas personas han preferido quedarse en casa, no tener que preocuparse por el trabajo es ya una ventaja (mínima o no es harina de otro costal).

Para mí y mi familia, la semana santa siempre significó abstinencia; mi padre siempre estuvo en contra de que saliéramos, nos divirtiéramos e incluso de que prendiéramos la televisión o el radio, en especial el viernes santo. La visita a los 7 templos el jueves santo era quizá de las únicas actividades familiares que estaban “decididas” cada año, y hasta cierto punto lo disfrutábamos porque, siendo niños, significaba que regresaríamos con una buena dotación de pan, empanadas, y si nos iba bien, una cena, obviamente sin comer carne porque también guardábamos la tradición de no comer carne los viernes durante la cuaresma, ni el jueves ni viernes santo.

No me malentiendan: nací y crecí como católico, y de cierta manera trataba de entender que aunque teníamos vacaciones había que guardar luto por nuestras creencias. No obstante, las interrogantes de “¿por qué nosotros sí y los demás no?” y “¿por qué la gente sale de vacaciones cuando hay que guardar luto?” siempre pasaban por mi cabeza. Lo malo es que bajo la tutela de mi padre, nadie tenía voz ni voto, ni siquiera para preguntar algo así.

Creo que la primera vez que salí de vacaciones en semana santa fue en 1992; justo aquel día de las explosiones en Guadalajara yo estaba en Punta Pérula, Jalisco, gracias a un tío que me invitó. Nada más que no recuerdo si realmente era semana santa o no 悲しい Pero de la que sí estoy seguro fue de una ida a Manzanillo con el grupo de amigos con los que jugaba rol; para entonces ya trabajaba y pude pagarme el viaje. Me la pasé muy bien, cierto, pero el sentimiento de abstinencia siempre estuvo presente…

Todo lo anterior cambió cuando llegué a Japón.

Continue reading “Semana santa y semana dorada”

Stemming

Al momento de extraer las palabras para trabajar con ellas (como con TF-IDF), y después de quitar las que no nos sirven, ya podemos comenzar a trabajar en la creación de un índice. Sin embargo, podemos todavía aplicar una tarea más a esas palabras con objeto de reducir su número, y al mismo tiempo, de “juntar” las que tienen la misma raíz.

De eso se trata el stemming: tomamos una palabra y obtenemos su stem, que en español sería el equivalente al lexema de la palabra; es decir: la parte de ella que no cambia y contiene el significado esencial. Por ejemplo, si tenemos las palabras “niño”, “niña”, “niños”, “niñas”, el lexema de todas ellas es “niñ”. Entonces, al momento de filtrar las palabras y luego contarlas, en vez de tener algo como:

niño    6

niña   13

niños 16

niñas 4

… es recomendable hacer stemming y obtener el lexema de las palabras. Nos quedaría así:

niñ 39

“Agrupamos” muchos conceptos en uno solo. Ya en una aplicación como un motor de búsqueda, al momento de que el usuario busca algo, aplicamos stemming también en la búsqueda. Así. algo como:

“¿Cuántos niños hay en Guadalajara?”

se traduciría en:

niñ guadalajar

(después de quitar las stopwords, los signos y hacer stemming) que es lo que a final de cuentas usaría un motor de búsqueda tradicional.

No necesariamente todos los motores de búsqueda hacen stemming; todo depende de cuál sea la finalidad del mismo. Por ejemplo, uno que tome en cuenta las conjugaciones de los verbos usaría las palabras completas en vez de sintetizarlas usado lexemas (lo cual tendría sentido para el objetivo que persigue). No obstante, en los motores de búsqueda tradicionales (que trabajan con modelos matemáticos) el stemming es un paso cotidiano que se realiza previo a la creación de un índice (que ya detallaré en otro post).

Trials – 100%

Todavía me falta mucho para decir que tengo buen nivel en Super Street Fighter 4, pero por lo menos ya terminé esta parte:

Los que me costaron más trabajo:

  • Level 24 de El Fuerte
  • Level 22 de C. Viper
  • Level 24 de Ibuki (fue la primera que completé… fue frustrante hasta que entendí el Super Jump Cancel)
  • Level 24 de Adon (el link de c. wk, c. mp nomás no me salía)
  • Level 24 de Zangief (ligar esas 4 c. wk fue un triunfo)
Curiosamente, el level 24 de Makoto no me tomó tanto tiempo. Fué nada más acostumbrarme al Hayate Cancel. También el último de Juri no se me hizo tan complicado.
Por supuesto que mi favorito sigue siendo Tekken, pero crecí con Street Fighter 🙂 Ahí la lleva mi Ibuki, pero me falta mucha práctica todavía.

XMMS2 en XMonad

En el post donde hablé de XMonad no puse el script que uso para mostrar información de XMMS2 con dzen en XMonad. Aquí lo agrego:

/usr/local/bin/dzen-xmms2

#!/bin/bash

ICONS=/home/mmedina/Images/Icons/xbm8x8
FONT=-sazanami-*-*-*-*-*-11-10-0-0-p-*-*-*

while true; do
     check=`xmms2 current | tr -d "\n" | wc -m`
     if [ $check == 0 ]; then
     	 echo "^i(${ICONS}/note.xbm) No songs being played"
     else
          current=`xmms2 current`
          totalsongs=`xmms2 list | grep / | wc -l`
    	  cursongstr=`xmms2 list | grep "\->" | cut -d"/" -f1 | tr -d "\->["`
	  cursongnum=`gcalctool -s "${cursongstr} + 1"`
          echo "^i(${ICONS}/note.xbm) ($cursongnum/$totalsongs) $current"
     fi
     sleep 3

done | dzen2 -x 1350 -y 0 -w 350 -h 11 -ta r -fg white -fn $FONT

Dando como resultado:

En el xmonad.hs tengo ligadas las funciones principales de XMMS2 a una combinación de teclas que me permiten controlar la reproducción de audio sin tener que abrir algún programa o escribir comandos en una terminal. Nota: éste no es el xmonad.hs completo:

  dzproc <- spawnPipe myStatusBar
  dateproc <- spawnPipe myDateBar
  xmms2proc <- spawnPipe myMusicBar

  xmonad $ defaultConfig {
  	 terminal = "urxvt -fg white -bg black -tr -sh 10 -fn 'xft:Dejavu Sans Mono:pixelsize=10' +sb"
	 , modMask = mod4Mask
         , startupHook = setWMName "LG3D"
	 , manageHook = manageDocks <+> myManageHook <+> manageHook defaultConfig
         , layoutHook = myLayout
         , logHook = dynamicLogWithPP $ myDzenPP dzproc
             , workspaces = ["term","web","ide","emacs","mail","ooffice","acroread","VB","misc"]
         } `additionalKeys`
	 [ ((controlMask, xK_Print), spawn "sleep 0.2; scrot -s")
	 , ((0, xK_Print), spawn "scrot")
	 , ((mod1Mask, xK_Shift_L), spawn "chkblayout")
	 , ((mod4Mask .|. shiftMask, xK_w), spawn "setwallpaper")
         , ((mod4Mask .|. shiftMask, xK_q), spawn "gnome-session-save --gui --kill")
         , ((mod4Mask .|. shiftMask, xK_l), spawn "gnome-screensaver-command -l")
         , ((mod4Mask .|. shiftMask, xK_z), spawn "xmms2 prev")
         , ((mod4Mask .|. shiftMask, xK_x), spawn "xmms2 pause")
         , ((mod4Mask .|. shiftMask, xK_c), spawn "xmms2 play")
         , ((mod4Mask .|. shiftMask, xK_v), spawn "xmms2 next")
         , ((mod4Mask .|. shiftMask, xK_b), spawn "xmms2 stop")
         , ((mod4Mask, xK_Up), spawn "amixer set Master 3%+")
         , ((mod4Mask, xK_Down), spawn "amixer set Master 3%-")
	 ]

myBgcolor = "#000000"
myStatusBar = "/usr/bin/dzen2 -x 0 -y 0 -h 11 -w 800 -ta l -fn -sazanami-*-*-*-*-*-11-10-0-0-p-*-*-*"
myDateBar = "/usr/local/bin/miscbarinfo"
myMusicBar = "/usr/local/bin/dzen-xmms2"

Estoy buscando una forma de revisar si el daemon de XMMS2 está siendo ejecutado o no. La idea es que si no lo está, ni me canso en parsear la salida de xmms2 current.

Callbacks en Java

Hace días necesitaba implementar algo en Java que me permitiera emular callbacks. Habiendo usado tanto tiempo Java fue curioso que de primera instancia no se me ocurriera usar interfaces. Un googlazo me enseñó la luz, y de ahí en delante fue nada más crear las clases necesarias.

El escenario es el siguiente: hay una clase que hace las veces de fábrica para crear instancias de otra, pero la forma de extraer la información es diferente dependiendo del documento en cuestión. Cada documento está clasificado en grupos, por lo que sé qué reglas tengo que usar para extraer lo de cada grupo. Ciertamente podría hacer todo con un parámetro y revisar el valor con un if para saber qué rutina ejecutar, pero si existen los callbacks, qué mejor (aunque Java no usa apuntadores).

Lo primero es crear la interface que las clases se van a cargar de implementar. Algo como:

public interface OmniAnalyzer {
    public void analyzeDocument(String document);
}

Después, hay que crear una clase por cada grupo de documentos a analizar, y hacer que cada una implemente la interface arriba mostrada:

public class GroupAAnalyzer implements OmniAnalyzer {
    @Override
    public void analyzeDocument(String document) {
       // Analizar documento de acuerdo a reglas de grupo A
    }
}
public class GroupBAnalyzer implements OmniAnalyzer {
   @Override
   public void analyzeDocument(String document) {
       // Analizar documento de acuerdo a reglas de grupo B
   }
}

Y al momento de analizar un documento, en vez de declarar que usamos una instancia de alguna de las clases anteriores, referenciamos directamente la interface que implementan. Así, independientemente de la clase (y las reglas) que se utilice, simplemente hay que llamar a las funciones que sabemos que están implementadas.

public class General {

  private static void analyzeDocument(OmniAnalyzer analyzer, String document) {
    analyzer.analyzeDocument(document);
  }

  public static void main(String a[]) {
    String doc = a[0];
    int group = Integer.parseInt(a[1]);
    OmniAnalyzer analyzer = null;

    if (group == 0)
     analyzer = new GroupAAnalyzer();
    else if (group == 1)
     analyzer = new GroupBAnalyzer();
    else {
       System.err.println("Only accepting groups 0 or 1");
       System.exit(1);
    }

    analyzeDocument(analyzer, doc);
  }
}

Con esto se deja la puerta abierta para agregar nuevos grupos en caso de ser necesario, y sin necesidad de darle en la torre a lo que ya está hecho.

Japón y las tarjetas de puntos

Aunque sé que no son exclusivas de Japón, las tarjetas de puntos abundan por acá, y en todos los colores y sabores que se puedan imaginar.

Nunca está de más una explicación: vas a un negocio (de prácticamente lo que te imagines), haces una compra o pagas por un servicio y te ofrecen tu totalmente nueva e impecable tarjeta de puntos, con la que cuanto más compres (y más puntos acumules, valga la redundancia), más te acercas al descuento o servicio especial que se otorga por llenarla. Casi siempre ese servicio es una cierta cantidad que puedes gastar en la misma tienda, aunque a veces es también un descuento o hasta un servicio gratuito. Todo depende de la tienda, sus productos y promociones.

Continue reading “Japón y las tarjetas de puntos”

Nuevo año fiscal

En Japón, el año fiscal comienza en abril. Es la época donde todo inicia: nuevo año escolar, los recién egresados acuden ya a trabajar (los que consiguieron trabajo), y claro, florecen los cerezos.

La situación con la planta nuclear de Fukushima todavía está lejos de ser controlada, y sigue siendo muy seria. Incluso por acá en Kyushu se ha visto falta de agua embotellada hasta en los súpermercados más pequeños de este pueblo; y no es que aquí no se pueda beber el agua del grifo, sino que la gente compra para enviarla a sus familiares que residen en el área de la capital. Los niveles radiactivos en las cercanías de la planta siguen siendo variables… en fin, esto tardará en normalizarse.

Y es precisamente en este momento cuando los cerezos florecen, proveyendo de esperanza a toda una nación. Cierto: su belleza es efímera (no duran ni 2 semanas así), pero indican el comienzo de algo, y esta vez no pudo llegar en mejor momento.

Continue reading “Nuevo año fiscal”

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.

Cambiar el nivel de brillo desde línea de comando en Linux

Debido a que uso XMonad, siempre busco la forma de realizar tareas con el teclado.  Cuando hablé de ese administrador de ventanas también puse un par de scripts que uso para escribir información miscelánea en la “barra” que creo con dzen2. Pero hay algo que todavía no logro desde la línea de comandos: cambiar el nivel de brillo de la pantalla.

Bueno, en realidad no es que no haya podido, solamente que el método que uso no es definitivamente el mejor: cambiar directamente el archivo /sys/class/backlight/acpi_video0/brightness con el nivel de brillo deseado (que sin mal no recuerdo va de 0 a 20) con el comando:

echo 10 > /sys/class/acpi_video0/brightness

(para un valor de 10, por ejemplo. La ubicación del archivo puede variar dependiendo de la distribución.)

El problema de este método es que, para que funcione, hay que hacer una de 2 cosas:

  • chmod para que cualquier usuario pueda modificarlo, o
  • ejecutar el comando como root

Para muchos, quizá no importe el hecho de tener que ser root para ejecutar un comando, pero hay que recordar que se recomienda no ejecutar nada como súper usuario para evitar posibles agujeros de seguridad. Y tener el archivo con permisos 777 tampoco es la meta.

Estuve revisando, y encontré que xrandr tiene la propiedad Backlight, la cual controla el nivel de brillo en la pantalla. Según xrandr –prop los valores válidos están en el rango 0-9, así que intenté un xrandr –set Backlight 5, pero no pasó nada.

Como tengo gnome-power-manager en .xsession y las hotkeys de la laptop para ajustar el brillo funcionan, pensé que mi problema estaría resuelto, pero no contaba con que al usarlas, el valor que cambia es el mismo que xrandr reporta, por lo que, como ya podrán imaginar, no pasó nada. Y lo mismo pasó con xbacklight, el cual reporta un cambio al usar xbacklight -10%, pero en realidad no sucede nada.

Cierto es que podría hacer un script para modificar el brillo y podría ligarlo a la combinación de teclas Mod4 + left/right, pero termino en lo mismo de arriba: si no lo ejecuto como root, sencillamente no va a funcionar.

De momento, lo que hago siempre que entro en Linux (en XMonad) es ejecutar el comando ya mencionado (echo del valor al archivo) como root. Da flojera, sí, pero es la única solución que ha funcionado hasta el momento.

Nada más corroborando

Antes que nada, les agradezco a todas las personas que difundieron la entrada anterior sobre las malas traducciones en TV Azteca. Lo importante es que más gente esté enterada de lo que en realidad sucede.

Esta vez me puse a analizar otra noticia de TV Azteca respecto a Japón. El reportero Edgar Galicia visita un albergue. ¿Traducciones cambiadas? Sí, y mucho. Pero antes de escribir el análisis creo que es necesario aclarar algunos puntos:

  1. El reportero no tiene la obligación de saber hablar japonés. Por tanto, aunque su pronunciación sea malísima, esto no es, ni debe ser, objeto de burla. Todos hablamos igual o peor cuando recién comenzamos a hablar una lengua extranjera, así que no se vale mofarse o criticarle esto.
  2. El objetivo de este análisis es corroborar lo expuesto en la entrada anterior. Personalmente, y mi opinión es tan debatible como la de todos ustedes, creo que sí hubo dolo en el cambio de las traducciones porque en el reportaje me da la impresión de que el reportero, al explicar el detalle del baño en Japón, sabe (o supo después, ya que le tradujeron) lo que le estaban mencionando.
  3. No hice análisis de todos los entrevistados aquí.

En el análisis se incluye:

  • La transcripción en japonés de lo que los entrevistados dicen.
  • La traducción realizada por mí, la cual no es profesional y puede ser corregida.
  • La traducción obtenida con Google Translate (porque hay reporteros que dicen que lo usan para traducir).
  • La traducción que TV Azteca mostró en sus subtítulos (y que puede verificarse viendo el video).
Sin más preámbulos, el video:
[youtube]http://www.youtube.com/watch?v=tbgOQy3lYho[/youtube]

0:53, entrevistando a una voluntaria:

Transcripción:

心を癒す、ヒーリングの役割があると思っています。
私たちの地区は幸いにも家が無事でした。家族も無事でした。ライフラインもOKです。なので、えっと、近くの、近くに住んでいる私たちが皆さんをお風呂に、あの、連れていきたいと思って、ボランティアをしています。

(kokoro o iyasu, hiirung no yakuwari ga aru to omotte imasu.
watashitachi no chiku ha saiwai nimo ie ga buji deshita. kazoku mo buji deshita. raifurain (lifeline) mo OK desu. nanode, etto, chikaku no, chikakunisundeiru watashitachi ga minna san o ofuro ni, ano, tsureteikitai to omotte, borantia o shiteimasu).

Según yo:

Creo que nuestro papel es el de la curación, el de curar el corazón/alma/mente.
Tuvimos suerte de que las casas en nuestra área estén a salvo. Las familias también están a salvo. Los servicios básicos (luz, gas, agua, etc.) también funcionan. Por tanto, nosotros los que vivimos cerca de aquí estamos de voluntarios para llevar a estar personas a que se den un baño.

Google Translate:

Sanar su mente, creo que hay un papel curativo.
Nuestra zona fue casa de seguridad, afortunadamente. Familia estaba a salvo. Lifeline es también en Aceptar. Así que, bueno, cerca de un baño que viven cerca de nosotros, que, me gustaría dar es voluntario.

TV Azteca:

Somos voluntarios y vemos que la mayoría de estos ancianos están vivos de milagro y aun así, para ellos, el estar aquí les representa un golpe muy fuerte en sus vidas. El japonés está acostumbrado a su hogar. Les entristece mucho estar aquí.

1:52. Edgar Galicia le hace una pregunta a la misma voluntaria:

Transcripción:

おふろに○○△△?  (o furo ni %”&/#) No se le entiende.

Según yo:

No se le entiende. Solo al principio se alcanza a escuchar “ofuro”: “baño”, “bañarse”

Google Translate:

No se puede aplicar porque no se entiende lo que el reportero pregunta.

TV Azteca:

¿Por qué es una doble desgracia?

Respuesta de la voluntaria:

Transcripción:

えっと、今、あの・・・逃げてきている方は皆さん泥に浸かって逃げてきた人ばかりです。
(etto, ima, ano… nigetekiteiru kata wa minna san doro ni tsukatte nigetekita hito bakari desu).

Según yo:

Este… todas las personas que han huido hacia acá son personas que vinieron llenas de lodo.

Google Translate:

Bueno, ahora, que ha estado lejos de que la gente está huyendo del lodo todos empapados.

TV Azteca:

Los japoneses suelen ser muy limpios, ordenados, aman y cuidan sus hogares. Perderlos en un instante y luego vivir en un albergue, para ellos es sumamente duro.

3:14 Hombre entrevistado

Transcripción:

今いる人は地震から1週間経って、家が無くなった人が殆どです。
ここに避難してきた人に寝る用意をしたり、それから食事の提供をして、もう・・・一日中を通して昼から夜までお世話してます。

(ima iru hito wa jishin kara 1 shuukan tatte, ie ga nakunatta hito ga hotondo desu.
kokoni hinan shitekita hito ni neru youi o shitari, sorekara shokuji no teikyou o shite, mou… ichinichi juu wo tooshite hiru kara yoru made osewa shitemasu).

Según yo:

Casi todos los que están aquí son personas que han perdido sus hogares después de 1 semana del terremoto.
Todo el día, desde la mañana hasta la noche, nos encargamos de atender a las personas que se refugiaron aquí; les preparamos un lugar para dormir y les ofrecemos comida, etc.

Google Translate:

Ahora la gente desde el terremoto de una semana después, y la mayoría de la gente ha ido a casa.
Listo para el sueño o que se refugiaron aquí, y para proporcionar comidas, y no me importa toda la noche desde el primer día un día más.

TV Azteca:
Aquí les damos alimento caliente, un techo y una forma de empezar a sobrevivir.
Diario colocamos las listas para que ellos vean si el ejército ya localizó los cuerpos de sus hijos o de algún pariente que haya quedado debajo de los escombros.

¿Qué podemos concluir de  este espectáculo?

Primero: no se vale escudarse en el pretexto de que “todos los medios lo hacen” o “en todos los medios hay amarillismo”. Como noticiero, es natural querer tener la primicia en una historia y hacer una cobertura lo más completa posible, pero creo que no hay excusa para escribir palabras que la gente no mencionó al momento de ser entrevistadas. ¿Que en la cultura japonesa no se acostumbra decir las cosas directamente o no se habla con la verdad? Si lo anterior lo dice alguien que conoce la cultura japonesa, lo pongo en la mesa de debate; si lo dice alguien que no tiene idea de lo que es vivir en la sociedad japonesa, no hay ni siquiera punto a discutir.

No están traduciendo rumores de Twitter o Facebook. Están haciendo una cobertura de un desastre, en donde mexicanos están siendo o pudieron ser afectados. Tienen un público que les cree, por lo que es muy lamentable que a ese público le traten de presentar una realidad diferente de lo que se vive por acá.

Segundo: ya he mencionado que yo no necesito disculpas explícitas de reporteros. La empresa en cuestión es la que debe disculparse con el pueblo de México. Según mencionaron en un comentario de la entrada anterior, al parecer entrevistaron al reportero que cubrió la nota y mencionaron que “hubo problemas en la traducción” pero nunca se faltó a la verdad. Yo no he visto el video en cuestión, y quedaron de enviarme la liga tan pronto como fuera posible, así que no puedo dar una opinión en concreto.

Por lo demás (porque hay mucho todavía que se puede comentar), optaré por quedarme callado. Pueden revisar mi timeline en Twitter, así como la de otros mexicanos que puse en la entrada anterior, si gustan saber más detalladamente en dónde ha desbordado todo este asunto. Por mi parte, y mientras no haya nada extraordinario, el tema está terminado. Demostré mi punto, y espero que a las personas que hayan leído este par de entradas les haya hecho reflexionar al respecto. No significa que todo lo que yo diga tiene que ser verdad: recuerden que es importante leer mucho, analizar y sacar propias conclusiones. Con esas bases, es más fácil decidir a quién le creen y qué es lo que quieren ver en los medios de comunicación.

Es más que un hecho que los medios le temen a internet porque por este medio la gente tiene voz y puede aplaudir o criticar a viva voz lo que ellos le transmiten al pueblo. Sigamos usando este medio responsablemente para provocar un cambio.

Por último, al menos espero que TV Azteca al menos haya despedido al traductor en caso de que argumenten que las traducciones estuvieron mal hechas y que no hubo dolo.