tag:blogger.com,1999:blog-10997808766687811862024-03-13T13:01:44.955-06:00De mis demonios internosChololohttp://www.blogger.com/profile/04304229590729047993noreply@blogger.comBlogger18125tag:blogger.com,1999:blog-1099780876668781186.post-2415579717734959012013-04-01T12:49:00.000-06:002013-04-01T12:49:56.642-06:00Escoge bien a tus socios... o de como iniciar una empresa con gente que vale la pena<div dir="ltr" style="text-align: left;" trbidi="on">
Que tal, después de mucho tiempo en hibernación he decidido resucitar mi blog, no puedo garantizar que ahora sí será en serio que publicaré cosas de manera más regular, pero por lo menos trataré que si haya contenido interesante para el visitante casual.<br />
<br />
Esta entrada yo creo que va a ser de las más importantes que pueda ofrecer, ya que aquí verteré experiencia de unos 8 años en las cuales me he dado a la tarea de encontrar gente con la cual poder conjuntar esfuerzos y poder realizar cosas interesantes, para ser más específicos, crear una empresa que nos permita crecer y salir adelante.<br />
<br />
Pero bueno, vamos al fondo del asunto ¿porqué estoy escribiendo este artículo? Primero que nada como recordatorio, ya llevo años identificando varios patrones de conducta totalmente contrarios y hasta tóxicos para una empresa, y si bien dicen que el tener una sociedad es como un noviazgo o matrimonio, en el cual te casas con tus socios, yo creo que es una situación todavía más delicada y compleja, y si no tienes cuidado puedes arruinar tu empresa, a tus empleados, y, finalmente, perder amistades.<br />
<br />
Sirva esto como un listado para identificar situaciones de riesgo en tus socios, o en ti mismo:<br />
<a name='more'></a><br />
<span style="font-size: large;">Un empresario no se toma las cosas personales</span><br />
<br />
No puedes llegar a ser un líder o a tomar decisiones si sientes que la gente te critica o ataca, o si planeas cobrar venganza por un altercado anterior. Si tu socio se toma una situación de negocio de manera personal, te ataca a ti u otros socios, o comienza a tener actitudes tóxicas, es una señal de alerta muy fuerte de que esa persona no es la ideal con la que quieres llevar a cabo un proyecto de vida.<br />
<br />
Negocios son negocios, punto, de repente existirán situaciones en las que la misma pasión de la discusión te lleve a agredir de maneras no propias, pero debes poder arreglar esas situaciones y no arrastrarlas a eventos posteriores.<br />
<br />
<span style="font-size: large;">Un empresario debe enfocarse en su objetivo de negocio</span><br />
<br />
Considero que uno crea su propia empresa con múltiples sueños e ideas, de hecho creo que es ese es uno de los principales pilares en los cuales uno debe sostenerse como emprendedor, siempre buscando más, nuevas metas, sueños que alcanzar.<br />
<br />
El problema llega cuando dicho sueño no es compatible con la empresa, cuando estás trabajando en desarrollo web pero piensas en poner un autolavado, y peor aún, empiezas a escudriñar la localidad buscando el lugar perfecto para un autolavado, cuando no tienes la experiencia de montar un negocio de ese tipo, ni tienes el dinero para invertir en él, o peor aún, desconoces totalmente como opera.<br />
<br />
Un foco rojo en este punto, es cuando ves a tu socio perder tiempo en horario de trabajo buscando como satisfacer una idea guajira totalmente ajena al negocio, incluso realizando llamadas telefónicas o enviando correos solicitando informes. A todos nos pasa que de repente nos dispersamos de los deberes cotidianos, pero si esa persona le dedica el 20% del tiempo a realizar labores de la empresa y el otro 80% en cosas ajenas, ya se torna problemático<br />
<br />
<span style="font-size: large;">No se debe generar un ambiente tóxico de trabajo</span><br />
<br />
Es normal tener días malos, mucho más normal tener clientes o proveedores que te pongan de malas, que pidan cosas fuera de especificación, salgan con alguna bateada de babas, algún equipo malo, situaciones que arruinen ese bello y soleado día que a uno le hubiera gustado tener, pero ello no es pretexto para hacerle la vida imposible a los que te rodean. Sobretodo, es fundamental mantener un ambiente de respeto en la empresa, ser el jefe, ser el dueño, ser el socio, no te da ningún derecho a denigrar a los que te rodean, de gritonear o pisotear solo por un coraje. <br />
<br />
Una persona madura debe controlar su temperamento, y especialmente un empresario debe tener la cabeza fría, no se pueden tener rabietas o pucheros a cada semana o cada que se pague impuestos, se vale desahogarse, pero no se vale desquitarse, recuerda, tus socios son las personas con las que más tiempo vas a convivir (más que con tu familia, más que con tu pareja), a un empleado lo puedes correr pero difícilmente te vas a librar de un socio, así que toma en cuenta si esa persona que tiene ataques de ira, que no puede controlar su temperamento, es la ideal para que ejecute un plan de vida junto contigo.<br />
<br />
<span style="font-size: large;">Los problemas de la sociedad, se hablan en privado</span><br />
<br />
Va a ser muy normal que te pelees con tus socios, es parte de la diversión en formar tu empresa, finalmente pasas más de 40 horas a la semana conviviendo con ellos (yo he tenido semanas de 60 y hasta 80 horas de insana convivencia), discutiendo problemas, escuchando quejas, enfrentándote a situaciones que ponen a prueba tu entereza, tu tolerancia y tu paciencia, obviamente se ocasionarán conflictos de manera eventual, sucederán situaciones y cometeremos errores, y habrá que sancionarlos, ya sea con un regaño, una llamada de atención o de plano algo más fuerte. Pero en el caso de que el conflicto sea entre socios, hay que tener mucho cuidado y resolverlos en privado, las discusiones frente a los empleados solo generan luchas de poder, un socio termina con su liderazgo mermado frente al resto de las personas. <br />
<br />
Si tu socio peca de soberbia y se encasilla en pleitos estériles con tal de demostrar su superioridad sobretodo enfrente de empleados o terceros, es la señal más fuerte de abandonar el barco.<br />
<br />
<span style="font-size: large;">Si eres emprendedor, debes dedicar el 100% de tu tiempo a tu proyecto</span><br />
<br />
"No puedo dejar mi trabajo, pero por las noches puedo dedicarme a sacar cosas", es la frase más adecuada que puedes escuchar para ni siquiera aventarte a hacer un proyecto. Si quieres empezar un negocio, debes dedicarte al 100% a ello, es tu hijo, es tu sueño, es tu meta. En mi experiencia, he tenido socios o asociados, con esposa, con un trabajo diurno, con familiares que atender, y honestamente, nunca han funcionado. Parecería que para tener una empresa debes ser joven, soltero y sin ningún tipo de dependencia con tus familiares para poder llevarla a cabo con éxito. <br />
<br />
Si tu socio empieza a excusarse continuamente por estar apoyando a su familia, por tener que hacer trámites, dejar cosas para después porque tiene que atender a su esposa o hijos, definitivamente no es la persona con la que te debes asociar. Simplemente piensa si tolerarías que un empleado faltara 4 o 5 días cada mes (o peor aún, cada quincena) para hacer favores o atender asuntos ajenos al negocio. <br />
<br />
Todos tenemos necesidades, a todos nos surgen imprevistos, salvo que seas adoptado o huérfano, siempre tendrás una familia a la cual apoyar en ciertos momentos de crisis, pero si ello se vuelve un obstáculo para poder ejecutar un negocio, estás perdiendo tu tiempo, y peor aún, el de tus socios.<br />
<br />
<span style="font-size: large;">Transparencia y comunicación, valores fundamentales</span><br />
<br />
Más rígido que con tu pareja, la transparencia y la comunicación entre socios es más que fundamental. Los clientes, proveedores y empleados siempre detectarán cuando hay fallas de comunicación en el equipo que toma las decisiones, y tratarán de tomar partido y ventaja de ello, aún y cuando sea de manera inconsciente. Si alguna vez aplicaste con tu padre la clásica "¿Me das permiso para ir a la fiesta? Ya le pregunté a mi mamá y me dijo que si tu aceptabas, no había problema", es muy probable que estes consciente como es que pueden usar esas fallas de comunicación en tu contra. <br />
<br />
¿Transparencia? Sí, y todas las cuentas deben cuadrar al centavo, tanto la caja chica, como viáticos, como gastos diversos. Hacienda te da una tolerancia de 3% en la discrepancia de tu contabilidad, internamente, y especialmente en cuestiones delicadas con tus socios, debe ser cero, punto. Todavía recuerdo un episodio de un ex-socio que manejaba la caja chica, y le faltaban como 150 pesos, su pretexto fue "no se puede llevar con precisión, es como las cajas del super, nunca tienen todo cuadrado al centavo". A la fecha me sigo preguntando que tan complicado era llevar las cuentas de una caja que tenía 4 o 5 movimientos al mes, y también si el dinero se esfumaba por estar almacenado y por eso existían esas discrepancias. <br />
<br />
Si un socio hace movimientos sospechosos respecto al manejo del dinero, es señal inequívoca de que debes deshacerte de él, punto, no hay vuelta atrás. Hoy son 50 pesos, mañana pueden ser millones.<br />
<br />
<span style="font-size: large;">Una empresa no te va a remunerar desde un principio</span><br />
<br />
Nunca, así tengas la idea más millonaria del momento, esa idea que a nadie más se le ha ocurrido (y te saco de tu engaño, seguramente a alguien más se le ha ocurrido). Pero tampoco puedes estar vagando por la vida teniendo la esperanza de que algún día te va a redituar. ¿La solución? ten metas claras, por el amor de Dios, ten un plan de negocio, una cifra meta y un periodo de tiempo para alcanzarla, y sobretodo, medios para medirla y evaluarla. Creerte la eminencia en ventas, y ser el más lengua larga del mundo no te sirve si no planificas bien y ejecutas un plan trazado previamente. Esto te dará esperanza cuando tengas seis meses nefastos seguidos, y te evitarán la soberbia de creerte en la cima cuando solo haz tenido dos meses con números negros. <br />
<br />
La única regla en los negocios que me ha funcionado de manera infalible es planea, ejecuta y mide, vuelve a planear, a ejecutar y a medir. La idea millonaria nunca rendirá frutos si no la planeas bien, si no la contextualizas no solo desde el punto de vista de la idea, sino de los procesos que se necesitan para ejecutarla, y sobretodo, las implicaciones que tendrán sobre ti y tu empresa (impuestos, nunca olvides esa palabra mágica). Todos los socios deben tener esto claro, y si se niegan a llevarlo de esta manera, es una señal de alarma.<br />
<br />
<span style="font-size: large;">Si es tu empresa, es tu chamba</span><br />
<br />
Si te asocias con otras personas generalmente es con la finalidad de explotar las mejores habilidades y aptitudes de cada uno, con la finalidad de disminuir las debilidades que tiene cada quien al actuar por su cuenta. Siempre he creído la suma de las partes es mucho mayor al todo, especialmente tratándose de seres humanos. Pero también se incrementa la complejidad de llevar una dirección clara. Y para ello todos deben estar involucrados en las áreas de todos, pero sin perder de vista que siempre habrá un responsable. Si fulanito se encarga de llevar la contabilidad, es importante apoyarlo, pero es fundamental revisarlo, nadie puede hacer mutis y fingir que no le corresponde estar enterado de esas cosas.<br />
<br />
Sobretodo es muy importante que todos estén conscientes de la situación financiera de la empresa, muchas tonterías se cometen cuando uno tiene poder y no tiene toda la información. Del mismo modo, si bien cada responsable atiende su área y sus clientes, es importante estar interesado e informado de las áreas de otros, si notas que tu socio es muy celoso de compartir el status de sus proyectos contigo u otros socios, es una señal de alerta, puede ser que dichos proyectos no estén siendo llevados de manera adecuada o esté haciendo trucos sucios.<br />
<br />
Pero sobretodo, no hay que perder de vista que el objetivo principal, que la meta última es el negocio, y para ello todos los socios deben trabajar con esa premisa tatuada en la frente. Si solo se buscan culpables o se reclama falta de apoyo, hay un problema sistémico. <br />
<br />
<span style="font-size: large;">Respeta los acuerdos y los procesos definidos sobre todas las cosas</span><br />
<br />
Este punto como llega a ser difícil. Es muy raro que comiences una empresa sabiendo todas las situaciones que se puedan presentar, con una manera de operar que te permita disminuir errores o evitar situaciones que pongan en riesgo un proyecto o que te hagan perder dinero. Ten algo por seguro, cualquier error en una empresa cuesta dinero, a veces mucho, otras veces no tanto, pero cualquier imprevisto o situación no esperada desemboca en dinero esfumándose de tu bolsillo. De ahí que es importante que todos los socios estén de acuerdo en la manera en que se va a operar, y que definan la manera de hacerlo, y periódicamente revisarlas y mejorarlas. Aquí el punto riesgoso es seguirlas, quitar tus vicios de trabajos previos, de experiencias previas, y encarrilarte a operar de manera ordenada y coordinada como lo acordaste con tus socios.<br />
<br />
La clave en este punto es intentarlo, y si no funciona, mejorarlo o proponer mejoras. La situación de riesgo o el foco rojo es cuando tu socio no cumple lo acordado, y no propone algo nuevo, o peor aún, opera de una manera que es mas riesgosa y/o ineficiente. <br />
<br />
<span style="font-size: large;">Nadie es indispensable y todos deben de aportar valor</span><br />
<br />
En efecto, nadie es indispensable, eso es algo que te dicen aquí y en otros lados, pero creo que tu deber como socio es hacerte indispensable de una manera razonable, donde tu presencia se note con un aumento a la productividad, pero tu ausencia no provoque caos en la empresa. Y todos los socios son responsables de crear valor, pero valor profesional, recuerdo que la mayor justificación de un ex-socio era "es que yo reviso cada cotización que se manda, porque luego tienen faltas de ortografía, y nos podemos quemar con el cliente, esa labor es fundamental". Si, la verdad no dudo que sea una labor importante, pero la verdad no me cayó muy en gracia tener un socio cuyo mayor logro y aptitud era revisar la ortografía de documentos.<br />
<br />
<span style="font-size: large;">Disciplina, disciplina, disciplina</span><br />
<br />
Como empresario eres dueño de tu tiempo, pero ojo, el resto del mundo gira en torno a horarios y días laborales establecidos. Esto viene muy relacionado con el punto de dedicar 100% del tiempo a tu proyecto. Se vale llegar de vez en cuando tarde, habrá ocasiones en las que tengas que echarte las copas con un cliente hasta la madrugada, y sí, al día siguiente estés molido, pero deberán ser excepciones. Si tu socio llega tarde por lo menos una vez a la semana, falta sin avisar, le marcas a su teléfono y no responde, le preguntas situaciones del negocio o de algún proyecto y no te da respuesta o te ignora completamente, son señales de alarma. Y es motivo de gran emergencia si esas señales sobre tu socio te las hace llegar un cliente. <br />
<br />
Seguramente cuando comiences tu negocio o sociedad, ya debes haber terminado la preparatoria, asegúrate que tus socios también, tanto física como emocionalmente, y de no ser así, recuérdaselos, las borracheras entre semana no son señales de buen negocio.<br />
<br />
<span style="font-size: large;">Señales de responsabilidad</span><br />
<br />
Se que muchos de los puntos anteriormente escritos caen también dentro de éste, pero no está de más ir señalando algunos otros signos de advertencia. Creo que si eres una persona responsable en el trabajo, lo eres para todos los aspectos de la vida. Si ves que esa persona siempre llega tarde a las reuniones, si no te contesta el teléfono, si no devuelve las llamadas, si no responde los mails, si le prestas dinero y no te paga, o peor aún, se ofende cuando le cobras, va a tener ese mismo tipo de actitudes a nivel laboral, con toda honestidad, nunca te asocies con personas que tengan ese tipo de comportamientos muy marcados.<br />
<br />
Otro punto muy fuerte es el título universitario, si no lo tiene, y no le ves señales o disposición a sacarlo, siendo un hito tan importante en la vida, sobretodo como la marca del cierre de un ciclo, ten por seguro que no tendrá la disposición ni la iniciativa para cerrar proyectos, terminar tareas, etc. Y lo digo con conocimiento de causa<br />
<br />
<span style="font-size: large;">La amistad no significa nada</span><br />
<br />
Si crees que llevar 10, 15 años de amistad con alguien significa que puede ser una persona ideal con la que puedes hacer negocios, que puedes depositar tu confianza y nunca te van a defraudar, o que así como le echaban ganas al desmadre en la carrera o en la prepa así van a ser de unidos para hacer negocios, tal vez te lo quieras pensar dos veces. Para no entrar en un cuento largo, de un grupo de 7 amigos de la prepa a los que llegué a considerar casi mis hermanos, hice negocios de diversa índole con 5, y de esos 5 no quedé con ganas de volver a hacer negocios con ninguno, ni por fuerita, ni una simple compra / venta.<br />
<br />
Los negocios sacan lo peor de uno, especialmente porque tal y como mencioné previamente, no puedes evitar que tus socios se vuelvan las personas con las que más convives durante esa etapa de tu vida, y por más amigos que hayan sido, por más cercanos, te va a tocar conocer lados oscuros que antes no te habías percatado. Aquí el consejo que te puedo dar, es no ignorar los problemas, o pretender que con el tiempo se van a corregir, si hay situaciones conductuales que no te laten o si de plano no te sientes cómodo trabajando con dicho socio, no dejes pasar tiempo, seis meses deben bastar para detectar si es un socio con el cual puedes llevar una empresa.<br />
<br />
<span style="font-size: large;">Cr<span style="font-size: large;">í</span>tica, autocr<span style="font-size: large;">í</span>tica y la capacidad de resolver problemas</span><br />
<br />
Debes criticar a tus socios, en todo lo que afecte negocio, debes ser exigente, debes detectar donde están fallando y hacerlo notar (en privado recuérdalo), es tu vida, y lo que hagan ellos incidirá en ella, sus exitos te traerán exito a ti también, así como sus fracasos te afectarán, no lo olvides, tú estás invirtiendo tu vida en un proyecto, lo menos que puedes hacer es procurar que tus socios no te la echen a perder.<br />
<br />
Del mismo modo, debes ser auto crítico, lo que tú haces no siempre está bien, tú manera de hacer las cosas siempre puede mejorar, debes estar abierto a sugerencias, y sobre todo, ante todo debes evitar ser soberbio. La soberbia mata empresas, mata amistades. Nunca lo olvides, ni dejes que tus socios lo olviden.<br />
<br />
<span style="font-size: large;">Nadie te va a echar porras</span><br />
<br />
Te tengo una mala noticia, mi padre decía que tener una empresa es como tener un hijo idiota y malagradecido, y al paso de los años concuerdo en que tiene razón. Solamente vas a escuchar quejas de tus clientes, los gritos desesperados cuando se cae un sistema, vas a tener proveedores furiosos porque no les haz pagado, vas a tener fuertes problemas de liquidez, cuando tengas una mínima de utilidad le vas a tener que pagar un buen porcentaje a Hacienda en impuestos, y justo al final de todo, cuando pienses que lo peor ya pasó, que a pesar de todos los problemas te quedó un poco de dinerito que podrás usar felizmente, te llegará la factura del contador...<br />
<br />
Pues sí, ser empresario es algo ingrato, pero creo que ahí está la belleza de este asunto. No es para cualquiera, solo es para gente fuerte, que quiere salir adelante no importando las adversidades, pero hay algo que no te debes sacar de la mente, estás solo, totalmente solo, y tus socios también deben tener eso en la cabeza, los socios no están para echar besos y cariño, no debes esperar apoyo anímico o porras de ellos. <br />
<br />
Si todo sale bien, complácete con una comida o cómprate algo no muy caro (no derroches) que te haga feliz. No esperes ni diplomas, ni fanfarrias, ni bonos, eso déjaselo a los Godínez que viven como parias, sujetos a la esclavitud y voluntad del amo.<br />
<br />
<span style="font-size: large;">Alcoholismo</span><br />
<br />
Este punto no lo había considerado sino hasta eventos más recientes (creo que mi visita al torito es motivo de otra entrada), pero ya que empecé a enlazar conflictos actuales con ese factor, me doy cuenta que también es un elemento muy nocivo.<br />
<br />
Si tu socio bebe mas de tres veces por semana, y por lo menos un día entre semana, y ello le provoca llegar tarde, crudo, ser grosero con clientes u otra clase de problemas; la verdad es que ni te tomes la molestia, sepáralo de tu empresa, a ti no te corresponde lidiar con su problema o tratar de ayudarlo (recuerda el punto de arriba, la amistad no significa nada). Si a él le interesa, que busque ayuda, sino, pues ni modo, negocios son negocios, recuérdalo.<br />
<br />
<span style="font-size: large;">Conclusiones</span><br />
<br />
Bueno, creo que salieron muchas más cosas de las que hubiera esperado, y la verdad me faltan muchas más, creo que esto es más un recordatorio de las veces que he tropezado, tanto de manera personal como con mis socios, para evitar volver a caer en lo mismo, creo que si escoger una pareja con la cual tener química y llevar un proyecto de vida personal (llámalo matrimonio) es complicado, llevar otro proyecto de vida material (la empresa) con dos o mas personas es una labor titánica.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-ZHcjcczLK2s/UVcXHw5ZadI/AAAAAAAAA7Y/6RiZbvKkFaU/s1600/BGnoQYBCIAAzSno.jpg:large.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="210" src="http://2.bp.blogspot.com/-ZHcjcczLK2s/UVcXHw5ZadI/AAAAAAAAA7Y/6RiZbvKkFaU/s320/BGnoQYBCIAAzSno.jpg:large.jpeg" width="320" /></a></div>
</div>
Chololohttp://www.blogger.com/profile/04304229590729047993noreply@blogger.com1tag:blogger.com,1999:blog-1099780876668781186.post-88265960202937949382011-10-04T00:10:00.000-05:002011-10-04T00:10:10.142-05:00Mi primera experiencia con la técnica Pomodoro<div dir="ltr" style="text-align: left;" trbidi="on">Pues después de un rato de tener empolvado este sitio, vamos a darle un poco de movimiento con un pequeño experimento que he decidido empezar desde hoy, se trata de aplicar a mi trabajo creativo la <a href="http://www.pomodorotechnique.com/">"Técnica Pomodoro"</a><br />
<br />
No pretendo hacer un tratado exhaustivo sobre el objetivo de dicha técnica, pero a grosso modo mencionaré que se trata de una manera de trabajar en la que divides tu tiempo en intervalos o "pomodoros", donde a partir de una lista de tareas diaria organizada previamente, te enfocas al 100% en realizar tu actividad durante ese intervalo (que es de 25 minutos por convención), y luego te dedicas 5 minutos a descansar totalmente, en una actividad ajena a tu trabajo, que puede ser desde dar una vuelta rápida por ahí hasta echar mano del twitter por un rato.<br />
<br />
En fin, creo que el sitio web trae muy buena documentación al respecto por lo que no quiero relatar a detalle todas las pequeñas reglas y minucias al respecto.<br />
<br />
Quiero destacar que me considero una persona muy desordenada, creo que dentro del caos que conforma mi mente de repente hay algo de orden en él, algo así como todos los sistemas con alta entropía tarde que temprano te forman un sistema ordenado, pero dentro de todo como primera experiencia puedo relatar los siguientes puntos:<br />
<br />
<ul style="text-align: left;"><li>No domino todos los puntos detallados de la técnica pomodoro, si bien en lo global logré realizar actividades con alto nivel de concentración y efectividad, de repente me topaba con ciertas excepciones al proceso que me dejaron pensando o improvisando</li>
<li>Definitivamente cuando lo sigues al pie de la letra es excelente! Esos momentos en los que te propones no twittear, no revisar el correo, no checar los updates de otras redes sociales o tratar de ignorar a tu prójimo al máximo para sacar los pendientes, realmente sirve, y avanzas a pasos agigantados. Otro punto que considero muy positivo es el hecho de sentirte contra reloj por unos momentos, sobretodo cuando faltan 2 o 3 minutos para que termine el pomodoro y dices para tus adentros "venga! solo faltan x o y líneas de código, no debo echarme otro pomodoro en terminarlo"</li>
<li>El pomodoro es indivisible, así como el tiempo de descanso, la verdad hice trampa un par de veces y me pasé por un par de minutos en un descanso, y en otra ocasión olvidé activar el cronómetro del pomodoro (sí, necesitas un cronómetro o timer, nada de que te vas ajustando con el reloj de la computadora). Otra ocasión donde rompí la regla fue dejar un pomodoro inconcluso para ir a comer (ese fue un error de sincronización)</li>
<li>Vas registrando también las interrupciones tanto internas ( te dieron ganas de ir al baño, te distrajiste), como externas (te hablan por teléfono, surge un incidente urgente que tienes que atender), en mi caso el 50% de mis pomodoros presentaron interrupciones, y en el 25% tuve mas de tres interrupciones externas en el pomodoro</li>
<li>Debido al punto anterior, la gente a mi alrededor pensó que estaba de malas, porque respondía muy rápido, como para despacharlos y reprogramar sus actividades dentro de mi checklist (no es una lista rígida, puedes irla cambiando conforme el transcurso del día), pero simplemente quería cumplir con el objetivo, debo trabajar un poco más esa parte empática antes de que le aviente una mordida al siguiente que me interrumpa </li>
<li>En total pude cumplir 10 pomodoros completos, lo que equivale a 4.2 horas efectivas de trabajo aproximadamente, parece poco comparado con las 8 horas "teóricas" que uno labora (o más como en mi desordenado caso), pero creo que fueron muy efectivas</li>
</ul> De ahí saco las siguientes conclusiones y próximos objetivos también:<br />
<ul style="text-align: left;"><li>Sirve muy bien, y tienes que ser muy disciplinado, pero lo interesante es que es disciplina "a pedacitos", me parece que no necesitas una reconversión mental completa para poderlo adoptar y explotar </li>
<li>Creo que va a ser muy interesante revisar las métricas que uno calcula al final del día, a un plazo más largo, creo que servirán mucho como un mecanismo auto-exploratorio </li>
<li>Volver a leer todas las reglas de la técnica Pomodoro, creo que ahora con cierta experiencia voy a entender mucho más rápido algunos puntos</li>
<li>Elevar a 6 horas mi productividad y manejar de una manera más óptima las interrupciones</li>
</ul>En fin, es un post corto pero al grano, quería mostrar someramente como me trató esta técnica como una alternativa para la concentración y la productividad, mañana que tenga un día más ordenado espero narrar mejores experiencias</div>Chololohttp://www.blogger.com/profile/04304229590729047993noreply@blogger.com1tag:blogger.com,1999:blog-1099780876668781186.post-74930786500958351972011-05-10T00:46:00.002-05:002011-05-10T18:14:57.300-05:00Mis quejas acerca de la Industria de DesarrolloAcabo de leer una entrada de un blog que me pareció sumamente interesante titulado <a href="http://hackerdou.com/?p=553 ">"Lecciones aprendidas acerca de la Industria de Desarrollo de México" (http://hackerdou.com/?p=553 )</a> <br />
<br />
Estoy muy de acuerdo en la mayor parte de los puntos que expone, y en donde tal vez tenga diferencias serán meras cuestiones de percepción o leves matices que no afectan el objetivo principal de su escrito. Por mi parte me gustaría enriquecer esos pensamientos con otras percepciones y lecciones que he aprendido en mis ya varios años de trabajar en esta fascinante, divertida pero también odiosa industria.<br />
<br />
Afortunadamente me ha tocado trabajar para muy diversas empresas, desde el sector público, con sus tempestades de programadores, consultores y demás fauna de este ramo, del sector bursátil, donde también hay escuadrones enteros de personal de sistemas, hasta pequeñas empresas donde su "área de sistemas" consiste en un chico que apenas terminó la secundaria y que solo se encarga de conectar las PC's que compran, así que espero que mis lecciones y experiencias ayuden sobretodo a los futuros miembros de esta comunidad a darse una idea de lo que se enfrentan.<br />
<br />
<strong>Somos un área de tecnología pero nos encanta el papel y la burocracia</strong><br />
<br />
Antes de empezar mi lluvia de flamas, debo aclarar que no tengo nada en contra de los procesos, ni del control, así como tampoco reniego el orden, a final de cuentas ese es uno de los tantos objetivos de mi trabajo, traer un poco de orden y control al caos, pero también es un hecho que diversas personas en su afán de llevar un mejor control, exageran en sus propuestas, o de plano se van por caminos equivocados.<br />
<br />
Este síntoma se percibe perfectamente en aquellas personas involucradas en la definición de políticas y procedimientos dentro del área de sistemas. Reconozco que en la mayoría de los casos tienen propuestas bastante acertadas en el aspecto de llevar el seguimiento a los procesos de desarrollo y calidad de los productos de software, pero lo que no entiendo es ¿porqué insisten en llevar dichos controles en Word y Excel? incluso me lloran los ojos cuando dichos documentos tienen su control de cambios a manera de tablita en la primer hoja del documento.<br />
<br />
Si eres parte de un área de tecnología ¿porqué no aplicar la tecnología para el control de tu propia área? Aunque sea utilizar el control de cambios que ofrece Office (que honestamente dista mucho de ser lo ideal). También es típico que para la documentación de análisis y diseño mucha gente usa la que bajó del correo, sin cerciorarse si es la versión mas actual del documento, o duplicando la información a través de muchos documentos con diferente objetivo, ¿qué resultado tiene? inconsistencias, cada quien maneja su versión, además de que llenas tu PC de cuanta cantidad de archivos, que, seamos honestos, nunca vas a leer con detenimiento, o que te va a complicar la existencia la búsqueda de información, sobretodo si no cuentas con un repositorio de documentos centralizado, y tienes que navegar en toneladas de correos o carpetas para encontrar el documento que necesitas<br />
<br />
Y no es necesario invertir una cantidad descomunal de dinero, con un cliente implementamos MediaWiki como una solución para centralizar la información relativa a los proyectos de Software, con los plugins adecuados, tienes control de versiones, acceso por roles, exportación a PDF y hasta embellecedores de sintaxis y generadores de UML sin mayor esfuerzo.<br />
<br />
<strong>Ahorrar cueste lo que cueste</strong><br />
<br />
Hay empresas (y empresarios), que invierten buena lana en tecnología, compran licencias de Oracle (que cuestan algunos miles de dólares), pagan a mandos medios y altos con salarios bastante elevados, tienen unos servidores de ensueño, pero llegas a ver como trabajan los que realmente generan el producto, y también te dan ganas de llorar.<br />
<br />
Me ha tocado ver muchos lugares donde a los programadores, líderes técnicos y demás personas que producen el verdadero objetivo del área de tecnología (lo siento, a mi juicio ni los Power points, ni los Gantt bonitos, ni los documentos de arquitectura, ni los diagramas UML los considero fundamentales, son necesarios si, pero no constituyen la finalidad de un área de sistemas) trabajan bajo condiciones precarias, en mesas de trabajo o escritorios con una pésima ergonomía, en sillas que más bien son ideales para estar tomando el sol en un jardín, no para estar sentado de 8 a 12 horas diarias en una misma posición, y lo peor del caso, con los equipos más viejos de toda la organización, siendo que por definición son las personas que más necesitan del poder de cómputo, o ¿a póco el gerente realmente necesita la computadora más poderosa y con la licencia más actual de Office?<br />
<br />
Existen excelentes estrategias fiscales para aprovechar al máximo la deducibilidad y la depreciación de los equipos de cómputo, así como está demostrado que en un ambiente propicio, una persona dedicada a actividades intelectuales rinde mucho más que cuando lo tienes bajo el látigo. Pero como indica este subtítulo, a veces la consigna es ahorrar cueste lo que cueste, más vale asegurarse unos centavos extras, aunque pierdas pesos en cuestiones de productividad.<br />
<br />
<strong>La importancia de las horas nalga</strong><br />
<br />
Cuantas veces no hemos visto en muchos lugares, que la persona más respetada es la que permanece más tiempo en el lugar de trabajo y es considerada la más trabajadora, al grado que hay lugares donde contratan recursos "por kilo con taxímetro", donde pagan por la hora de "trabajo" del recurso, no importando la efectividad o el rendimiento del mismo.<br />
<br />
Reconozco que es una cuestión muy delicada, ya que definitivamente medir la productividad de una persona puede ser algo extremadamente subjetivo, y aunque a veces he querido determinar matemáticamente alguna fórmula que relacione los conceptos de "remuneración económica", "experiencia" y "trabajo efectivamente realizado", no he encontrado una manera práctica de llevarla a cabo, aunque definitivamente sé que puede haber soluciones que ayuden a mitigar este problema, sin tener que recurrir a llenar timesheets en excel (que más que controlar, siento que afecta más la productividad, además de obligarte a encontrar justificaciones al tiempo invertido), he visto herramientas como Tasktop, donde calcula automáticamente un timesheet de acuerdo al código que modificas dentro de Eclipse, por ejemplo.<br />
<br />
<strong>Administración de proyectos orientada a los caprichos del cliente</strong><br />
<br />
La administración de proyectos es una técnica complicadísima y definitivamente tiene un poco de arte por detrás también, pero también es un hecho que si no eres cuidadoso y como administrador de proyecto no involucras a todas las partes críticas, o simplemente demeritas la opinión de la gente que realmente realiza el trabajo rudo, estás condenando el proyecto a un fracaso rotundo.<br />
<br />
Nunca voy a olvidar una experiencia curiosa que me ocurrió en mi primer trabajo, era de tiempo parcial ya que estaba en cuarto o quinto semestre de la carrera, me encontraba a punto de comenzar un cierto proyecto, en donde mi jefe de aquel entonces me pregunta "Necesitamos realizar X, Y y Z requerimientos, ¿como ves? ¿en cuanto tiempo te lo avientas?", como es mi insana costumbre, comencé a realizar algunas anotaciones en papel, echar algunos trazos, dibujar algunas tablas, ideas conectadas por flechas, etc, y le respondí de una manera casi certera "yo considero que en mes y medio aproximadamente podemos tenerlo listo". En seguida, mi jefe se me queda viendo con cara molesta y me responde "pero yo ya me comprometí con el cliente a que queda en quince días", acto seguido podrán imaginar la serie de malos pensamientos y maldiciones que pasaron por mi cabeza.<br />
<br />
Concuerdo perfectamente que hay que negociar y en la medida de lo posible satisfacer las necesidades del cliente, finalmente es el que paga y nos da de comer, pero por otro lado, como empresa que brinda soluciones, tenemos que aterrizar al cliente en el terreno de lo que es factible y orientarlo en la mejor solución en cuanto a tiempos y alcances, quemar a tus empleados solo por "ganar" un proyecto solo te conducirá a semanas de retrasos, desveladas y horrores. Nunca menosprecies la opinión de un programador, por mas junior que sea, finalmente, él será el que saque adelante tu proyecto, no importando lo que diga tu perfectísimo y calibradísimo diagrama de Gantt<br />
<br />
<strong>Juntitis!</strong><br />
<br />
Si, a veces me pregunto si el objetivo de los gerentes, administradores de proyecto o similares, es el perder el tiempo en juntas, de igual manera, no satanizo el aspecto de que las juntas sean malas, ni tampoco la cantidad de estas, siempre y cuando tengan un significado tangible, y se planteen metas y compromisos, pero cuantas veces no se han realizado juntas donde tres cuartas partes del tiempo se pierde en justificaciones vanas o en aventar lodo,y la otra cuarta parte en ponerse de acuerdo en lo que verán en la siguiente junta.<br />
<br />
Tampoco voy a olvidar otro proyecto, en el que tuvimos una junta con el administrador del proyecto quería a fuerzas recortar los tiempos del proyecto, claro, todo esto a solicitud del cliente (ver punto anterior). Así que nos dedicamos a revisar actividad por actividad, diagramando y explicando el detalle de cada una de éstas, ya que el administrador no tenía mucha experiencia en cuestión de sistemas (pero tenía mil certificaciones de PMP y sus derivados). La junta duró 8 horas, y al final del día, pudimos llegar al acuerdo de recortar algunas actividades, lo cual significó disminuir cuatro horas la longitud del proyecto. Aunque creo que no sirvió de mucho, ya que tuvimos un retraso de ocho horas, al invertirlas en la junta, en lugar de las actividades que ya estaban programadas para ese día.<br />
<br />
Ya para rematar, creo que este post me sirvió muy bien para echar un poco de catarsis =P, no quiero decir que todo es malo en este ramo, si fuera así no estaría en él, pero creo que hay muchos puntos de mejora, en una entrada posterior seguramente la llenaré con propuestas y experiencias positivas.Chololohttp://www.blogger.com/profile/04304229590729047993noreply@blogger.com1tag:blogger.com,1999:blog-1099780876668781186.post-73289258038793453732011-05-09T22:46:00.000-05:002011-05-09T22:46:11.342-05:00Fe de Erratas y un adiós a la pausaPues bien, después de meses de ausencia, de mantener en pausa todas mis experiencias en aquellas gélidas tierras rusas, pues he vuelto a las andadas. Podría poner cualquier pretexto al porque no continué actualizando el blog más seguido, sobre todo el clásico "no he tenido tiempo", pero no es cierto, siempre hay tiempo para todo, solo hay que organizarse bien, más bien fue cuestión de desidia, tampoco puedo prometer que no lo volveré a hacer, pero mientras tanto disfrutemos estos breves lapsos de lucidez y de inspiración.<br />
<br />
Antes de continuar, me gustaría dar una pequeña fe de erratas respecto a mi entrada acerca del Banya ruso, la regué un poco respecto a las temperaturas, pero es que también es difícil tomar un buen parámetro cuando no estás expuesto a ellas, afortunadamente, mi amiga Masha rápidamente me corrigió, pero apenas lo plasmo por acá.<br />
<br />
El chiste es, que las temperaturas del Banya superan cualquier expectativa que tenía, Masha me comentó que un Banya a menos de 80°C es frío! y luego al corroborarlo en diversos lugares en internet, efectivamente, un Banya tranquilamente supera los 93°C! a veces me cuesta trabajo comprenderlo, pero tiene mucho sentido, y ya comprendo porque ese ardor de ojos y de cabeza, realmente está criminal el contraste, así que al darme la vuelta a la nieve y de regreso, estuve pasando de temperaturas de 90° (por verme conservador) a -20°C, o sea 110°C de diferencia en tan solo cuestión de segundos! no cabe duda que el cuerpo humano es una maravilla en todo este asunto de la homeostásis.<br />
<br />
Por ahora terminaré esta entrada, espero ingresar otras en poco tiempo, por un lado incluyendo las que me faltan de Rusia y Ucrania, en las cuales están involucradas algunas otras aventuras en Kazan, en Moscú, en Kiev y en Mariupol, solo espero no me gane la nostalgia caray =)Chololohttp://www.blogger.com/profile/04304229590729047993noreply@blogger.com1tag:blogger.com,1999:blog-1099780876668781186.post-8798856217970267832011-02-21T12:32:00.008-06:002011-02-27T14:36:52.732-06:00Kazan - El Banya o Temazcal RusoAntes de comenzar mi relato permítanme platicar ligeramente sobre el Temazcal, obviamente no soy un experto en historia y mucho menos en tradiciones mesoamericanas o similares, así que lo que platicaré es mi experiencia y opinión acerca del Temazcal, para todos aquellos seguidores que no son de México.<br /><br />Pues bien, el Temazcal a grosso modo es una especie de baño sauna antiguo ideado por los antiguos pueblos mesoamericanos (como podrían ser los mayas o los nahuas), naturalmente con ciertos rituales a cumplir dentro de éste. En mi experiencia personal, uno va en traje de baño y es mixto (hombres y mujeres), entrando a un lugar hecho como de barro u otro material por el estilo, dicho lugar no tiene ventanas ni otro orificio que no sea la puerta de entrada, es circular y hay una banca por toda la orilla. La gente se sienta en dicha banca, mientras observa las brazas y las piedras calientes en el centro. Finalmente la persona que conduce el Temazcal cierra la puerta y todo queda a oscuras y en silencio. Dicha persona echa agua con ciertas yerbas a las piedras, generando un vapor aromatizados bastante agradable. Después pueden darse ciertas reflexiones o platicas dentro del Temazcal, me han tocado variadas, desde rituales o platicas bastante profundas, hasta simplemente el disfrute de estar en un lugar como éste.<br /><br />El calor puede llegar a ser algo intenso, y ciertamente agotador, al salir del Temazcal uno siente la frescura del entorno (en mi caso fue en Veracruz), y luego uno debe tomar una ducha con agua fría para terminar el proceso, lo cual lo deja a uno con una sensación de tranquilidad y paz interna inigualable.<br /><br />Pues bien, este breve e incompleto relato del Temazcal viene a colación porque en Rusia tienen su propia tradición acerca del sauna, me refiero al Banya. Es muy común para las personas en Rusia el contar con una casa de "campo" o Dacha, digamos que es el equivalente a las casas en Cuernavaca que mucha gente de la Ciudad de México llega a poseer, un lugar para escapar del stress de la ciudad y poderse relajar, aunque sea los fines de semana o en periodos cortos de tiempo.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://lh4.googleusercontent.com/_a4rp7uDc-gg/TWq0dUlUY9I/AAAAAAAAAog/pLzAeOVhFFM/s720/IMG_20110205_150050.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 720px; height: 542px;" src="https://lh4.googleusercontent.com/_a4rp7uDc-gg/TWq0dUlUY9I/AAAAAAAAAog/pLzAeOVhFFM/s720/IMG_20110205_150050.jpg" border="0" alt="" /></a><br /><br />Lo interesante de las Dachas es que mucha gente aprovecha para sembrar cosas en el jardín, según lo que me llegaron a platicar, algunas verduras, moras (es bastante común para ellos tener sus propias jaleas o mermeladas hechas a partir de las moras de sus jardínes), imagino que algunas frutas, etc. todo aquello que se pueda dar en esas latitudes antes de la llegada del invierno. Y como buen lugar de descanso, recreación y tranquilidad, no podía faltar el Banya, ya que a diferencia de Cuernavaca, no sería un lugar muy propicio para tener una alberca al aire libre (a menos que desees patinar sobre hielo una buena parte del año).<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://lh3.googleusercontent.com/_a4rp7uDc-gg/TWq0C6CdaXI/AAAAAAAAAoQ/zQeYRpGITnQ/s720/IMG_20110205_150055.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 720px; height: 542px;" src="https://lh3.googleusercontent.com/_a4rp7uDc-gg/TWq0C6CdaXI/AAAAAAAAAoQ/zQeYRpGITnQ/s720/IMG_20110205_150055.jpg" alt="" border="0" /></a><br /><br />Pues bien, el Banya es un pequeño cuarto localizado fuera de la Dacha pero dentro del mismo terreno de ésta, dicho cuarto está separado en dos, un vestidor y lo que implica el Banya en si, el cual tiene el principio muy similar al sauna.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://lh3.googleusercontent.com/_a4rp7uDc-gg/TWq0Pjbq5xI/AAAAAAAAAoY/ZuGDpeWVL5Q/s720/IMG_20110205_174854.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 720px; height: 542px;" src="https://lh3.googleusercontent.com/_a4rp7uDc-gg/TWq0Pjbq5xI/AAAAAAAAAoY/ZuGDpeWVL5Q/s720/IMG_20110205_174854.jpg" border="0" alt="" /></a><br /><br />El Banya lo probé hace dos semanas con el padre de Masha (la niña con la que me estuve hospedando) y con Bryan, otro chavo que también se estaba hospedando con nosotros. Tanto Bryan como yo eramos primerizos en este asunto, y el padre de Masha (Vladimir) no habla inglés, y en ese entonces nuestro ruso era poco más que malo, así que poco a poco y a base de ademanes y lo poco que entendíamos fuimos siguiendo sus indicaciones.<br /><br />Salimos de la Dacha al jardín a -20°C aprox. y nos dirigimos al Banya, entramos al vestidor, y nos despojamos de toda la ropa, hasta quedar tal cual vinimos al mundo, como una simple masa de piel y cabello, en ese momento Vladimir ya había preparado todo en el Banya, así que solo teníamos que entrar. Dentro del Banya, es complicado describirlo, hay una serie de bancas a diferentes alturas del suelo, y una especie de horno, también con piedras calientes, que irradiaban de una manera como jamás había experimentado en mi vida, era como salir a caminar al mediodía en Mexicali durante la canícula.<br /><br />Vladimir nos dio unas indicaciones y nos sentamos los tres en la banca mas alta, quedando nuestras cabezas (las pensantes) a unos 15 ~ 20 cm del techo. Al principio se sentía un calor extremo pero tolerable, pero no pasaron ni dos minutos cuando empecé a sentir un ardor muy intenso en los ojos y oídos. En ese momento Vladimir descendió de la banca y mojó la banca más pequeña, que estaba casi a ras del suelo, yo me incliné a poner la cabeza casi a las rodillas, el calor era insoportable, literal sentía que me estaba cocinando vivo, no puedo describir la sensación, pero podría jurar que estábamos a cerca de 60°C en esa parte del Banya, realmente era demasiado, no podías ni siquiera enfocar bien la vista.<br /><br />Bryan y yo descendimos y nos sentamos en la pequeña banca cercana al piso, ahi el calor era mucho más tolerable, cerca a los 40°C yo estimo, y empezamos a echarnos cubetadas de agua, tibia por supuesto, lo interesante es que había dos llaves de agua, una roja, para agua fría, y una azul, para agua caliente, lo cual descubrí de mala manera al llenar una de las tinas de agua y darme santa quemada en la espalda, en fin, debí haber probado el agua antes de echármela encima.<br /><br />Estuvimos refrescandonos con agua algunas veces, hasta que Vladimir me indicó que volviera a subir a la banca más alta, eso me inquietó un poco, ya que vino a mi mente de nuevo ese ardor tan intenso. Subí, pero esta vez me indicó que me acostará en la banca, con la cabeza lo más alejada del horno, eso hice, y entonces Vladimir tomó un manojo de hierbas y comenzó a sacudirlas contra mi cuerpo. Después de un rato bajé de la banca e hizo lo mismo con Bryan.<br /><br />Posteriormente nos indicó que salieramos al vestidor. Salimos y yo estuve a punto de tomar mi toalla, pero me lo impidió, esto todavía no acababa. Nos sentamos en unas sillas que había ahí, y nos enfriamos un poco, estimo que la temperatura en el vestidor era arriba de 10°, pero no llegaba a 20°, algo fresco. Nos relajamos un poco, tomamos un vaso de jugo de naranja que había ahí, y entonces ocurrió lo inesperado.<br /><br />Vladimir abrió la puerta de la entrada y nos indicó que salieramos a la intemperie, y eso hicimos, si, salimos desnudos al jardín, a -20°C, entonces nos acercamos a un barandal que estaba justo enfrente, tomamos un poco de nieve y nos la untamos en las extremidades y la cara para enfriarnos, esta ocasión tampoco puedo describir con lujo de detalle las sensaciones, pero si puedo asegurar que no se sentía demasiado frío, el cuerpo en cierta manera estaba un poco descompensado me imagino, del extremo calor y como que el extremo frío no provocaba mayor problema, de todos modos, solo estuvimos un par de minutos en la intemperie.<br /><br />Volvimos a entrar al Banya, y continuamos con el ritual de echarnos agua mientras soportábamos el intenso calor, pero ahora tomabamos también los manojos de hierbas y nos los "azotábamos" en todo el cuerpo, obvio de una manera gentil, tampoco era sadomasoquismo. Después de un rato otra vez salimos al vestidor, y nuevamente a la intemperie.<br /><br />Repetimos el proceso unas cuatro o cinco veces, yo estimo que en total estuvimos entre hora y media y dos horas en el Banya, lo que si, aunque suene muy extraño, al llegar a Kazan tenía una leve infección en la garganta, y me agoté los antibioticos que llevaba y no terminaba de curarme, y después del Banya, prácticamente me curé al 100%, no se si las bacterias también sean muy sensibles a los cambios extremos de temperaturas, ya que ir de +40°C (por vernos conservadores, pero se que era mucho más) a -20°C súbitamente no cualquiera lo aguanta.<br /><br />Lo que sí, al igual que con el Temazcal, después del Banya llegamos a echarnos a la sala, y ya no recuerdo si me quedé dormido o por lo menos si extremadamente relajado, no cabe duda que es algo similar a un Temazcal, pero llevado al extremo, incluso un amigo de por acá me comentaba que en algunas regiones de Siberia, el aguantar un Banya provoca que la gente local te agarre respeto.<br /><br />Espero hayan disfrutado este relato, vengan sus comentariosChololohttp://www.blogger.com/profile/04304229590729047993noreply@blogger.com0tag:blogger.com,1999:blog-1099780876668781186.post-31611669604512601292011-02-14T11:51:00.010-06:002011-02-14T15:16:59.382-06:00Kazan - Las personas y las mujeresTal vez esta es la entrada del blog que muchos han esperado, y pues no es para menos, ya que la gente en general es muy curiosa y de hecho bastante diferente a lo que he estado acostumbrado.<br /><br />Por obvias razones, y por respeto a muchas personas, mi lenguaje en esta entrada será extremadamente moderado, y además no tengo ninguna opinión fuerte al respecto, y ya cualquier comentario duendezco y maligno será tratado con las personas acostumbradas jaja.<br /><br />De entrada hablaré de las personas en general. Ya desde mi experiencia en Ucrania me esperaba que fueran un poco cerradas en cuanto a sus sentimientos se refiere, en general, en público las personas por allá no sonríen, ni cuando pagas tu boleto de autobus, ni cuando preguntas por algo en la calle, simplemente una sonrisa en un espacio público y con gente desconocida es algo que jamás vas a poder obtener, y si tu intentas hacerlo, la gente te verá de manera extraña.<br /><br />Tampoco esperes respuestas largas o rebuscadas, rara vez escucharás "por favor", "disculpe", "gracias", tan seguido, no quiere decir que no tengan modales o que sean groseros, simplemente no son tan ceremoniosos como los latinos, y van más directo al grano, incluso no es raro que las respuestas se limiten a un simple "Da" o "Niet".<br /><br />Pero ya en confianza las personas cambian radicalmente, en los primeros días, conocí a un chavo, Igor, a todo dar, me fue introduciendo a los usos y costumbres de relajo y alcohol que hay por estos lugares, que en general son tranquilos pero no por ello menos divertidos, ya hablaré más a detalle de ello en próximas entradas.<br /><br />En realidad son muy cálidos, Igor me presentó con sus compañeros de Universidad, toda una generación de futuros arquitectos, o ingenieros civiles, la verdad no entendí exactamente a que se dedican ("construction", "construction"), pero la verdad es que son personas geniales, desde el principio me trataron excelente, bien amistosos, obvio con muchísima curiosidad porque ellos en particular no habían tratado con ningún mexicano antes, y pues estuvimos ahí divirtiéndonos hablando una mezcla rara entre español, inglés y ruso, que por cierto, ya se ha vuelto mi receta para comunicarme por estos lugares, aunque como que todavía me da pena aventarme a hablar ruso, pero creo que lo estoy entendiendo mucho más.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://lh6.googleusercontent.com/_a4rp7uDc-gg/TVltqrDi9qI/AAAAAAAAAnw/o0FaOuDt47I/1296988072664.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 324px; height: 244px;" src="https://lh6.googleusercontent.com/_a4rp7uDc-gg/TVltqrDi9qI/AAAAAAAAAnw/o0FaOuDt47I/1296988072664.jpg" alt="" border="0" /></a><br /><br />Me la pasé muy bien con ellos, y después de un rato comenzaron a llamarme "hermano mexicano", la verdad es que eso como que si me llenó de emoción, la verdad es que en pocos lugares fuera de mi madre patria me he sentido tan halagado y tan en confianza.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://lh4.googleusercontent.com/_a4rp7uDc-gg/TVltqwrbWQI/AAAAAAAAAn0/R2Kp0DHQal8/s720/IMG_20110206_152206.jpg"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 582px; height: 466px;" src="https://lh4.googleusercontent.com/_a4rp7uDc-gg/TVltqwrbWQI/AAAAAAAAAn0/R2Kp0DHQal8/s720/IMG_20110206_152206.jpg" alt="" border="0" /></a><br /><br />Lo que si es un hecho, la fama que tienen de bebedores es totalmente cierta, con estos muchachos no bebímos demasiado, pero algunos de ellos siguieron la fiesta y nos fuimos a casa de Andrei, otro amigo de Igor, a echar unos tragos. Oh que grave error, beben de una manera diferente a la nuestra, mientras que por lo menos en mi caso el trago es más como una cuestión social, tomas tu whisky, lo sirves en las rocas o con agua, y lo vas bebiendo poco a poco mientras socializas, de este lado del mundo es literal agarrar el caballito, atascarlo de whisky o cuanto alcohol se te atraviese y echártelo de un solo trago, así una y otra vez, hasta que pierdas la conciencia y amanezcas en lunes con tremenda cruda, tal como le pasó a su seguro servidor. No lo vuelvo a hacer, porque aparte mezclan de todos los alcoholes habidos y por haber, nada agradable, aquí la ideología es empedar.<br /><br />Fuera de eso, insisto, la gente es a todo dar, los adultos grandes con los que me he topado también en general gente bastante amigable, una vez que los conoces, de repente puedes bromear con ellos, aunque entiendas el 30% de lo que dicen.<br /><br />Yo creo que las únicas personas que me han sacado de onda son las viejitas o "babushki", el otro día, en el autobus, estaba parado cerca de la puerta, no estaba muy lleno pero en esa parada iba a descender bastantita gente, el caso es que una babushka me dijo algo en ruso que no entendí, infiero que le diera permiso para pasar, asi que me pegué lo más posible al tubo para que pudiera pasar sin problemas, el caso es que como que no le pareció (tal vez quería que me quitara completamente) y me empezó a empujar a gritonearme y me soltó dos que tres golpes. La verdad es que me sacó mucho de onda, y no sabía si reir o poner expresión de desconcierto, desde entonces prefiero estar lo más lejos posible de las babushki :P<br /><br />Pasemos a la parte que tal vez muchos de mis amables lectores quieran escuchar, las mujeres. Obviamente me dirigiré a ellas con amplio y absoluto respeto ya que no merecen menos.<br /><br />En general, todas son extremadamente guapas, y lo repito, son extremadamente guapas. Me he encontrado con cierta fisonomía de la cara que no he visto nunca en América, y que a mi gusto es extremadamente atractivo, una gran mayoría tienen una mirada y una expresión tierna, aún en el transporte público y demás lugares, tienen una manera de vestirse muy coqueta, a pesar de que el clima oscila entre -35°C y -10°C en el mejor de los casos, saben como elegir sus abrigos, sus mallas, sus botas para verse bastante elegantes y algunas hasta sensuales.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://lh3.googleusercontent.com/_a4rp7uDc-gg/TVltqXHIaYI/AAAAAAAAAns/ZukHDVp7r7c/s720/IMG_20110206_154715.jpg"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 625px; height: 470px;" src="https://lh3.googleusercontent.com/_a4rp7uDc-gg/TVltqXHIaYI/AAAAAAAAAns/ZukHDVp7r7c/s720/IMG_20110206_154715.jpg" alt="" border="0" /></a><br /><br />Esa es otra cosa que me impacta, todo el suelo es irregular dada la cantidad de nieve y hielo, y las mujeres no dudan en usar botas con tacón de aguja, y caminar como si nada, tengo que preguntarles cual es su secreto porque hoy volví a azotar, caí de rodillas y ah como dolió!<br /><br />En fin, en cuanto a descripción física es básicamente ello, hay morenitas, de piel muy blanca, ojos claros, verdozos, azules, grises, todo el arcoiris prácticamente, pelirrojas, güeras, etc. en general creo que son coquetas y sencillas.<br /><br />Ahora bien, en cuanto a la manera de ser, es algo también que me ha resultado muy complejo asimilar, son personas muy lindas, en serio, todas las mujeres con las que he tratado son amables, con cierta dosis de ternura, muy abiertas y alegres, la verdad es que todas las que he conocido les he agarrado cierto cariño y no por guapas eh?<br /><br />Lo que si es complicado, es cierta actitud de las niñas rusas a diferencia de las latinas, y es la falta de contacto físico, y me refiero a falta de contacto físico como algo total, ni siquiera un beso de saludo, vaya, ni siquiera un apretón de manos, y un abrazo pues queda fuera de cualquier posibilidad definitivamente. Se supone que esto solo pasa cuando no te conoces bien, y que ya que te conoces pues son más cálidas, pero yo todavía no llego a ese punto con las niñas que conozco, y la verdad es frustrante, si se extraña mucho eso, aunque sea el beso en el cachete caray, pero bueno, son cosas de aquí y hay que aprender a convivir con ellas.<br /><br />Eso ya lo he externado con varias personas, curiosamente varios extranjeros coinciden conmigo, otras, como Masha, piensan que estoy totalmente loco, y que contacto físico con alguien "desconocido" (aunque se supone que es alguien con quien vas a entablar amistad y todo debe ser honesto y positivo) es bastante desagradable.<br /><br />En fin, bueno, quiero aprovechar el espacio para platicarles de una niña que conocí por acá, a manera de ejemplo, aquí si no daré nombres, pero puedo comentar que todavía es estudiante, casi no hablar inglés, así como yo casi no hablo ruso, pero nos dimos la oportunidad de salir juntos un día y conocernos. La verdad es que nos la pasamos increíble, super agradable, una niña bastante inteligente y con buena conversación, trató de enseñarme un poco más de ruso, pero mi dislexia no me lo permitió =P, aún así fue interesante conocerla. Me agradó porque pude percatarme un poco de los ideales de los jóvenes rusos, su estilo de vida, como se divierten, y muchas cosas más, y he de ser honesto, me agradó bastante, tiene unos ojos hermosos, y lo que más me agrado fue su ternura, su risa, en fin, podría pasarmela el resto del blog describiendola pero no es el caso.<br /><br />Lo único que puedo decir como conclusión a todo este texto, es que vale la pena tener amistades de Rusia, son gente sensacional, no encuentro palabras mejores para describirlos, hay que conocerlos para experimentar a que me refieroChololohttp://www.blogger.com/profile/04304229590729047993noreply@blogger.com2tag:blogger.com,1999:blog-1099780876668781186.post-940682465381926752011-02-14T10:21:00.014-06:002011-02-14T11:48:20.245-06:00Kazan - El transporteDecidí dejarle un espacio aparte al transporte público y al uso del automóvil en general, ya que me parece un tema fascinante lo que están haciendo por acá, además de divertido, bueno, algunas veces.<br /><br />De entrada, mencioné previamente que algunas avenidas de varios carriles tienen deshabilitados algunos por la cantidad de nieve, pero esto sucede en los caminos principales que es donde más limpian, en las pequeñas callejuelas que van entre las zonas de departamentos, solo unos pocos días he podido ver el pavimento, el resto del tiempo es una masa de nieve y hielo apisonada por el paso de los automóviles, incluso he llegado a ver varios automóviles sepultados en la nieve por no ser utilizados en largos periodos de tiempo.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://lh4.googleusercontent.com/_a4rp7uDc-gg/TVlaCw5D4LI/AAAAAAAAAnY/NrvjVPylNwM/1296840998809.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 248px; height: 320px;" src="https://lh4.googleusercontent.com/_a4rp7uDc-gg/TVlaCw5D4LI/AAAAAAAAAnY/NrvjVPylNwM/1296840998809.jpg" border="0" alt="" /></a><br /><br /><br />Masha me explicaba que en muchos casos, por las temperaturas tan bajas y extremas, los vehículos no encienden, porque el acumulador pierde carga por el frío, entonces tienen dos opciones, utilizar uno de esos cargadores para acumulador que conectan a la corriente eléctrica de la casa, o de plano cada vez que llegas a casa, sacar el acumulador del carro y llevártelo contigo.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://lh6.googleusercontent.com/_a4rp7uDc-gg/TVlo6U2LAVI/AAAAAAAAAno/3qMpCHbc7Z8/s720/IMG_20110205_193920.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 720px; height: 542px;" src="https://lh6.googleusercontent.com/_a4rp7uDc-gg/TVlo6U2LAVI/AAAAAAAAAno/3qMpCHbc7Z8/s720/IMG_20110205_193920.jpg" border="0" alt="" /></a><br /><br />El caso es, que realmente es complicado manejar en la nieve, yo la verdad no me aventaría a hacerlo sin experiencia previa, a cada rato me toca ver en los altos como los carros frenan desde antes, y se derrapan en el hielo unos 3 o 4 metros antes de detenerse, eso sí, en general ya tienen bien medida esa distancia y casi nunca se pegan, además de que nunca rebasan una velocidad mayor a 40 ~ 60 km/h.<br /><br />Para estacionarse si que es toda una odisea, ya que como mencioné en las pequeñas callejuelas todo está bastante lleno de hielo y nieve y tienes que atinarle a espacios pequeños, para dar las vueltas o para entrar en un cajón de estacionamiento, en muchos casos, las personas que tienen bastante experiencia se dan sus buenos derrapones para dar las curvas, a pesar de que van a muy baja velocidad, y en otros casos, cuando dan vuelta en "u" precisamente aprovechan el freno de mano y el derrape del hielo para dar vueltas mucho más cerradas. Tienen su buen nivel de destreza por acá.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://lh3.googleusercontent.com/_a4rp7uDc-gg/TVle-Lq9EYI/AAAAAAAAAnc/MtmrIa_vFjI/1296648781260.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 248px; height: 320px;" src="https://lh3.googleusercontent.com/_a4rp7uDc-gg/TVle-Lq9EYI/AAAAAAAAAnc/MtmrIa_vFjI/1296648781260.jpg" border="0" alt="" /></a><br /><br />En general no me ha tocado ver policías de tránsito, salvo un día que parece que levantaron una piedra y salieron todos de allí, porque empezaron a parar gente a lo loco, de hecho ese mismo día nos tocó que pararan el taxi en el que íbamos una amiga y yo, y estuvimos como 20 minutos dentro del carro esperando a ver que negociaba el taxista con los polis, que según tengo entendido y me han rumoreado, son bastante susceptibles a las dádivas.<br /><br />En cuanto a las banquetas, es otra historia bastante curiosa, precisamente las máquinas que limpian las calles dejan la mayor parte de la nieve en las banquetas, las cuales por diseño en general son muy anchas, y como que siempre hay senderos para poder caminar no importando la candidad de nieve, ya que al ser pisada se compacta como en hielo, en general por donde me estoy hospedando muchos de los días la nieve estaba entre medio metro y un metro de altura, por lo que en las esquinas o los cruces, había como escalones de hielo hechos por la misma gente al pasar, para poder entrar al sendero, lo positivo de esto es que a fuerzas te obliga a cruzar por las esquinas o los pasos peatonales, lo que sí, a veces el sendero es muy estrecho y prácticamente solo cabe una persona, lo cual puede ser un problema si varias personas quieren pasar por ahí, el otro día quise hacerme a un lado pero al pisar la nieve blanda me hundí hasta la rodilla, y me hubiera hundido más de no ser porque porque la otra pierna la dejé en la zona del sendero. <br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://lh6.googleusercontent.com/_a4rp7uDc-gg/TVle-gNa8gI/AAAAAAAAAnk/XcFAuTiJLuY/s576/IMG_20110202_140447.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 434px; height: 576px;" src="https://lh6.googleusercontent.com/_a4rp7uDc-gg/TVle-gNa8gI/AAAAAAAAAnk/XcFAuTiJLuY/s576/IMG_20110202_140447.jpg" border="0" alt="" /></a><br /><br />También algo que me llamó la atención al principio es que la gente caminaba de manera muy graciosa, como dando pequeños pasitos todo el tiempo, como aquellas películas mudas donde por la cantidad de fotogramas la gente parece caminar de manera extraña. No tardé en darme cuenta la razón de esto, si tratas de dar pasos más grandes o por lo menos normales, te resbalas muy fácilmente, y después de que mi trasero besó el suelo por quinta vez, decidí imitarlos y caminar chistoso también.<br /><br />Un asunto que merece especial atención es el transporte público. En sí no es malo, y hay dos tres detalles que definitivamente deberíamos imitar nosotros, pero si hay otras cosas que son realmente frustrantes. <br /><br />En general solo me ha tocado viajar en autobus y taxi, aunque uno de estos días usaré el metro solo para probar. El concepto del autobús en general es bastante bueno, son vehículos de mediano tamaño, como debería ser en México, solo se detienen en su parada, y esperan un buen tiempo para bajar y subir al pasaje. Otro dato es que el conductor no cobra, y no tienes que pagar exactamente al subir, sino que hay una chica o chavo que se va paseando por el camión y va cobrando conforme avanza el mismo, de tal manera que puedes subirte, acomodarte en tu lugar, y ya con toda calma sacar el cambio para pagar, y la chava que cobra no te estará presionando para que pagues justo en ese instante.<br /><br />Otro punto, y que iré repitiendo constantemente en todas las entradas de los blogs, es que las chicas con guapísimas, y bastante coquetas, saben vestirse bien a pesar de que las bajas temperaturas te obligan a cubrirte con múltiples capas de ropa, y a pesar de que se atasca el autobus en horas pico, no es tan complicado si solo estás rodeado de niñas guapas. Aunque a veces llega a ser frustrante, a mi la verdad me cuesta trabajo andarme a empujones para bajar, como que la caballerosidad a veces es lo mío, y por ende ya un par de veces se me ha pasado mi bajada por andar dejando pasar a las niñas antes que yo, y el problema es que no hay manera de regresar caminando, tengo que agarrar otro autobus de regreso por la distancia a la que está la otra estación.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://lh3.googleusercontent.com/_a4rp7uDc-gg/TVlaCe80AXI/AAAAAAAAAnU/AKguuIcgMJE/s576/IMG_20110204_173002.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 434px; height: 576px;" src="https://lh3.googleusercontent.com/_a4rp7uDc-gg/TVlaCe80AXI/AAAAAAAAAnU/AKguuIcgMJE/s576/IMG_20110204_173002.jpg" border="0" alt="" /></a><br /><br />A veces si llega a ser frustrante porque va tan atascado que no puedes ni subir, y como soy bien mamila para eso, prefiero dejar pasar dos o tres autobuses (que además pasan cada 15 a 20 minutos) y congelarme en el frío, a andar a puros apretujamientos.<br /><br />En cuanto a los taxis también me gusta su concepto, te cobran por distancia y tienen unas tablas para calcularla, por lo cual el precio es el mismo siempre, y no andas con las broncas de taxímetros y demás jaladas, aparte todos tienen GPS (como en el resto de Europa, supongo) entonces no hay manera que te anden tomando el pelo.<br /><br />En general si es otra experiencia esto del transporte en Kazán , no encuentro muchas palabras para describirlo, hay que vivirloChololohttp://www.blogger.com/profile/04304229590729047993noreply@blogger.com0tag:blogger.com,1999:blog-1099780876668781186.post-61215540674051961272011-02-14T09:29:00.015-06:002011-02-14T10:21:27.321-06:00Kazan - algunas impresiones<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://lh5.googleusercontent.com/_a4rp7uDc-gg/TVlVS-F0I0I/AAAAAAAAAnM/1y4M1i_E5ik/s576/IMG_20110202_140344.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 434px; height: 576px;" src="https://lh5.googleusercontent.com/_a4rp7uDc-gg/TVlVS-F0I0I/AAAAAAAAAnM/1y4M1i_E5ik/s576/IMG_20110202_140344.jpg" border="0" alt="" /></a><br />Como me ha costado comenzar la entrada de este blog, pero como siempre, lo complicado es empezar a aventar las frases y posteriormente todo se empieza a acomodar solo.<br /><br />Después de llegar a Kazan en general todo ha ido de maravilla, la verdad es que no me arrepiento nada de haber escogido esta ciudad como mi primer punto de contacto con la civilización rusa, y creo que me ha ayudado a tener un contacto más cálido con la cultura rusa, que a lo mejor en ciudades más grandes como San Petersburgo o Moscú no hubiera podido.<br /><br />El traslado del aeropuerto a la casa donde me estoy hospedando fue fascinante, tuve mi primer contacto con el invierno ruso, y sí, la verdad es que el frío es bastante fuerte, en estas dos semanas hemos estado entre -5°C y -38°C, pero la verdad, abajo de los -10°C no sientes mayor diferencia. Algo que he notado mucho, a diferencia de Mariupol (que es la única ciudad con la que verdaderamente puedo comparar en estos momentos), esta ciudad está en un proceso de modernización bastante fuerte, los suburbios cuentan con edificios de departamentos bastante modernos, que la verdad no le piden nada a ciudades como Miami y Chicago ( a su debida escala, por supuesto).<br /><br />Los rumores de que los caminos rusos son pésimos no son del todo erróneos, si son malos, el pavimento es bastante chafa e irregular, pero creo que lo que más afecta en esta época del año es que hay tanta nieve y hielo en todos lados, que caminos de 4 carriles se vuelven de dos, porque por más que limpien siempre se desborda la nieve de las banquetas hacia la calle.<br /><br />Al llegar al departamento (o piso, como les gusta llamarle aquí en Europa), el trato fue super cálido, el lugar está excelente, si bien está un poco alejado del centro, pero realmente está bastante cómodo. Tiene dos pisos, pero el piso de abajo, donde me estoy hospedando es casi casi un departamento completo para mi solo, tengo tele, cama, sofá, cocina y baño, ¿qué más podría pedir?<br /><br />La familia con la que me estoy quedando es excelente, la niña que me está hospedando se llama Masha (María) y pues la mitad de la semana está con sus padres, y otra temporada se van a su Dacha (casa de campo) en los suburbios. Masha estudió filología y vivió una temporada en Galicia, y la verdad es que habla tanto inglés como español de una manera impresionante, si me la encontrara en la calle y me hablara en español podría jurar que es española y no rusa.<br /><br />Todos ellos me han tratado con bastante afecto, algo que también me ha sorprendido en general es que la gente por aquí ya en confianza es muy cálida, muy hospitalarios y siempre con ese ánimo de hacerte sentir cómodo.<br /><br />Algo que pensé que me iba a costar trabajo iba a ser la comida, de la que llegué a ver en internet no se veía muy apetitosa siendo muy honestos, pero ya estando por acá me he dado cuenta de que tienen algunas cosas bastante ricas, y lo poco que he probado de la comida tátara realmente es deliciosa, en cuanto a condimentos, y riqueza en sabor no le pide nada a la mexicana. Eso sí, un gran problema que me he topado es a la hora de comprar la comida en el super, por varias razones, la primera es que estoy acostumbrado a comprar comida preparada (soy flojo, y que?), y por acá es más como un super de hace 15 años, donde solo encuentras verdura y fruta fresca, carnes, lacteos y demás, y pues tienes que arriesgarte a comprar todos los ingredientes por separado para prepararte tu comida. Hay algunas cosas que no he querido comprar ya que de por si ando bastante oxidado en eso de la cocinada, y además como que faltan otros ingredientes importantes (como limón) para echarle buen sazón al asunto. Así que mi alimentación en gran parte ha sido de carnes frías, Pilmeni, que son una especie de ravioles rellenos de carne, bastante ricos si los cocinas con mantequilla, y yogurt.<br /><br />Lo que sí, llevo casi una semana de no comer Pilmeni, se me ocurrió preparar 500g de él, porque dije, "si me lo acabo ¿porqué no?", y vaya, que si era demasiado, lo tuve de comida, cena y desayuno al día siguiente.<br /><br />Fuera de ahí, en los restaurantes que he comido en general la comida es muy variada y rica, probé el Tatar Azu, que es como un guisado de papas con carne, pero como con hierbas también, de las cosas más deliciosas que he probado en mi vida, me declaro fan. <br /><br />Por ahora terminaré esta entrada de blog, al rato ingreso otras, ya que hay muchas cosas que comentar de la vida por acáChololohttp://www.blogger.com/profile/04304229590729047993noreply@blogger.com0tag:blogger.com,1999:blog-1099780876668781186.post-22443775992770457922011-01-31T13:36:00.007-06:002011-02-02T17:14:41.168-06:00Kazan, la llegadaPues van mis primeras 24 horas aquí en Kazan, así que yo creo que ya puedo dar mis primeras impresiones y aventuras por acá.<br /><br />Todo comenzó desde la llegada al aeropuerto de la Ciudad de México, no tuve ningún contratiempo e ingresé a la fila del Club Premier de Aeroméxico para documentar, ahí me echó la mano mi hermana que no se como convenció a los chavos de aeroméxico para que pudiera pasar rápido por ahí.<br /><br />Pensé que me iban a cobrar cargo por el exceso de equipaje (llevaba dos maletas de 19kg) pero no tuve ningún problema, el único detalle es que la señorita quería darme los boletos y las claves para que el equipaje llegara directo a Rusia, pero me comentó "estoy viendo el mandar sus maletas hasta Rusia" a lo que yo le respondí "eso sería genial", y me dice "pero no puedo", ouch, así que ni modo, tendría que recogerlas en Estados Unidos y volver a documentar.<br /><br />Pasé al Wings con mi familia y tuvimos un buen desayuno, me eché una arrachera a la tampiqueña, el último platillo mexa que me iba a aventar en un muy buen rato, así que aproveché y super a gusto. En eso se me acerca una persona y me pregunta "puedo tomarme una foto con usted?", me sacó muchisimo de onda, y yo así de "como porque?", como que ya me vio bien y me pregunta "usted no es de TV Azteca?", "errmmm no!", "oh usted disculpe", y se va, la verdad me dio mucha risa el asunto.<br /><br />Pues ya paso a la sala de espera y todo muy bien, sin retrasos ni nada, salvo las pinche mil revisiones (que insisto, es pura cuestión psicológica sin efectos reales) ingresamos al avión, y a iniciar la travesía. Estuvo muy a gusto porque iba en el asiento de la ventana pero nadie enmedio, entonces tuve dos asientos para echarme a gustisimo, y la verdad es que la chica de al lado no estaba de mal ver, aunque no cruzamos palabra, no estaba tan de buen humor. El vuelo estuvo bueno pero lo que si es que el desayuno que nos dieron ahí (si, desayuné dos veces, grave error) fue la cosa mas horrorosa que he probado en mi vida, eran unos huevos con salchicha pero como fueron cocinados en masa, estaban todos duros y chiclosos, sudados aparte por el contenedor de aluminio, y además como que me hicieron daño, como al rato aclararé.<br /><br />Nueva York se veía muy bien desde el aire, todo gris y nevado, le da un toque bastante interesante que no me había tocado ver, un día regresaré por estas épocas a visitar a detalle. Aterrizamos en el aeropuerto JFK y pasar migración fue algo bastante rápido, no hubo ningún otro vuelo así que la fila fue muy ligera, lo que si, el oficial no encontraba mi visa y me pregunta "vive usted aquí?" yo así de "no", "es que no trae visa", y yo así de "si, ahi está", "no, aquí no está", que le quito el pasaporte y le abro en la página donde estaba y le pongo jeta así de "que wey eres", no me dijo ya nada, solo "está bien, pase", jajajaja me estaba riendo por dentro.<br /><br />En fin, salgo al área de check-in, y voy al mostrador de Aeroflot para documentar mi siguiente parada, Moscú, ahí me atendió un cuate como de la India lo que me llamó mucho la atención, pero todo el proceso estuvo rápido, lo que no me latió es que después de que checaran y pesaran tu equipaje tenías que llevarlo a un área de seguridad a documentarlo, como que me dio mala espina eso.<br /><br />Estuve poco rato en el JFK, como media hora sin hacer nada, ya que las otras horas las invertí en los clásicos trámites de documentación, migración y demás. Finalmente entramos al vuelo a Moscú y la verdad quedé muy impresionado de los aviones de Aeroflot, super moderno, un Airbos A330 o algo así, pero muy cómodo, y algo que me llamó la atención es que los rusos vaya que saben viajar en avión, todos con ropa cómoda, pantuflas para andar descalzos todo el tiempo, y con sus almohaditas y demás. <br /><br />La comida en este avión fue deliciosa, aunque ya empezaba con malestares del desayuno de horas atrás. En este caso comí un guisado de carne con champiñones y una ensalada de judías con maíz amarillo, todo muy rico, un jugo de tomate que sabe muy diferente al americano, pero bastante sabrozón. Al contrario de lo que me llegó a pasar en Ucrania, las personas extremadamente amables, gente muy decente y amigable, me gustó mucho, también ahí estuve ayudando a una niña americana a llenar su formulario de entrada a Rusia, aunque yo tampoco tenía mucha idea :P, pero tenía ojos bonitos, asi que quien era yo para negarme. También nos dieron de desayunar unos "pancakes" que obvio no eran eso, de hecho medio me asusté porque me pasaron algo que tenía el color y la forma de huevos revueltos (vinieron las imágenes escabrosas del desayuno de Aeroméxico a mi mente), pero bueno, sabía que tendría que aguantar muchos sabores que tal vez no serían de mi agrado, pero oh grata sorpresa, no era huevo, era como una especie de queso bastante rico, la verdad me gustó también bastante.<br /><br />Aterrizamos en el aeropuerto Shemeritovo, y estuvo todo también muy tranquilo, tardé un poco en pasar migración porque la oficial nunca había visto una visa como la mía, incluso tenían unos como microscopios portátiles y lo estuvo usando para examinar a detalle cada parte del documento. Luego escaneó mi pasaporte y finalmente me dejó pasar, el frío estaba muy relax, -4°C, pero lo que si es que el jet lag me estaba empezando a pegar bien fuerte, además empecé a sentir los estragos del maldito desayuno de Aeroméxico, nada grave, pero parecía que dos aliens se estaban peleando dentro de mi estómago, un gruñidero impresionante, que hasta me daba pena por lo ruidoso.<br /><br />Tardé casi una hora en recoger las maletas, pero afortunadamente llegaron bien, al documentar para el transbordo tuve un problema ya que el peso permitido es mucho menos, así que finalmente tuve que pagar exceso de equipaje. Se tardaron también otro ratote porque el sistema no les dejaba cobrarme pero tampoco dejaba dar de alta la maleta,finalmente llegó el supervisor del supervisor del jefe de turno y desbloquearon el sistema, también destacando que el trato fue increíble, la verdad no lo esperaba de los rusos caray, que buen detalle.<br /><br />Volví a entrar a la zona de salas, y algo muy curioso, como que cada país le añade su toque a la seguridad, aqui fue muy tranquila, pero por ejemplo, te daban unos zapatitos de esos de cirujano para que te los pusieras y no anduvieras descalzo, y no son tan sangrones como en Mexico o USA. <br /><br />Estando ahi me pasó algo muy bizarro, el jet lag lo traía a todo lo que daba, tan es así que ni siquiera puse bien la hora y pensaba que tenía media hora cuando en realidad iba a estar como cinco ahí dentro, traté de ir al baño para ver si eso aminoraba mi pelea de aliens intestinal, pero no había papel en ningún baño, así que a aguantarme con el gruñidero, y aparte estaba tan cansado que quería dormir, pero como estaba sentado y con algo de frío (la sala estaba a temperatura ambiente) empecé a tener una serie de malos viajes bien intensos. Apenas cerraba los ojos y empezaba a soñar cosas raras, pero ligadas con lo que estaba pasando en ese momento, daban algunas indicaciones por el altavoz y en mis sueños las escuchaba en español, y despertaba cuando cabeceaba bien cañón, aparte, para colmo de males, olvidé mi libro, y me quedé sin pila de la laptop en Nueva york, así que nada mas estaba haciendo tiempo a lo wey, que horrible es esperar sin tener nada que hacer, estuve viendo las noticias en las teles, y me chuté dos horas de un especial de la crisis en Egipto donde repetían las mismas cinco imágenes una y otra vez.<br /><br />Finalmente asignaron sala a mi vuelo, que también fue un relajo porque hubo como cinco vuelos a Kazán y todos de Aeroflot, y la sala correspondiente a mi vuelo traía otro vuelo en su pantalla de información, lo malo es que nos tocó abordar un autobus en la intemperie para ir a terminal remota y no me había cambiado, traía ropa para andar en México, no a -15°C como ya había caído la temperatura, pero no hubo tanto problema, ya que traía la chamarra de astronauta, me la puse y sin ningún problema, solo que el autobus tardó como 20 minutos en llegar a la posición remota y los tubos para agarrarse estaban helados.<br /><br />Finalmente pude subir al avión, para no perder la costumbre me tocó ventana y con nadie en el asiento de enmedio, solo una chica rara en el asiento de pasillo, que literal se apañó el asiento de al lado, pero no me importó, solo me recosté, y traté de dormir mientras los aliens ya luchaban por salir a través de mi pecho, juro que era una sinfonía, que horrible.<br /><br />Después de una hora y media, el capitán dio el aviso de inicio del descenso, me pude despertar y darme cuenta que no se veía nada, la neblina a todo lo que daba, ni siquiera veía el ala caray,en eso el avión empezó a balancearse de un lado a otro con algo de violencia, como en esas caricaturas donde el piloto trata de atinarle a la pista, había un viento cruzado super méndigo y fue justo en ese momeno que alcancé a ver el suelo, no se distinguía porque todo estaba blanco por la espesa nieve, pero ya estábamos a unos veinte metros de altura, no me apaniqué pero si me alteró un poco. Seguía bajando en zigzag hasta que ya estabamos arriba de la pista, y justo un metro antes de tocar, pudo enderezar la nave y literal dijo "ahora o nunca" y dejó caer el avión sobre la pista, si fue un impacto algo fuerte, pero por lo menos fue plano, no se sintió derrapado ni nada por el estilo, la verdad si la sentí cerca.<br /><br />Finalmente en el aeropuerto me estaba esperando un chavo de la universidad, buena onda, recogí las maletas (ahí si me pidieron los tickets de equipaje, como suelen hacer en México) y salimos al estacionamiento. Con la guerra de aliens y el cansancio fue un calvario, caminamos como 300 metros en la nieve, arrastrando las maletas, a veces el hielo compacto ayudaba, otras veces las maletas se hundían y tenías que hacer fuerza para arrastrarlas, finalmente casi al llegar al carro tuve tremendo resbalón (el primero de muchos por venir) y caí de nalgas al suelo, afortunadamente solo me dolió el orgullo (como todas las veces).<br /><br />En el carro tuve mi primera impresión de Kazan, la verdad es que a ratos se veía muy moderna, no le pide nada en cuestión de arquitectura a ciudades del norte de Estados Unidos o de Canadá, al llegar me recibió Masha y su familia, finísimas personas, me hicieron cenar como puerco, y tuvimos una plática super amena, tal vez solo opacada por los ruidos de mis tripas, no manches, me duraron dos días y se quitaron de la nada, esa fue mi épica llegada a Kazán, espero en los días venideros postear lo que viene que es todavía mas interesante :DChololohttp://www.blogger.com/profile/04304229590729047993noreply@blogger.com2tag:blogger.com,1999:blog-1099780876668781186.post-33723822027586527282011-01-26T23:11:00.010-06:002011-01-26T23:51:33.380-06:00Un día, una motivaciónHay veces que quisiera poder twittear en la calle o que de manera mental pudiera componer los tweets o las entradas de blog sin necesidad de perder la atención a mi entorno, hay muchas veces en que pienso que la creatividad me llega justo cuando estoy caminando por estas oscuras calles de la ciudad, sintiendo esa brisa nocturna y fresca en la cara, pero en fin, tendré que conformarme con llegar a mi hogar y aprovechar un teclado de verdad y un vaso de agua para traer a la mente todas aquellas experiencias de hace unos momentos.<br /><br />Llevaba rato de no viajar por la ciudad así, caminando, solo, disfrutando mi soledad, pero lo mejor de todo, saliendo por un rato de este plano tecnológico javero, de sistemas, etc. y centrándome en otros aspectos que el 90% de mi vida consideraría intrascendentes, pero que de vez en cuando resulta sabroso para relajar la mente.<br /><br />Es muy interesante observar a las personas mientras caminas, tratando de entrar en sus mentes, armar una historia acerca de ellos, ver como varios llevan esa cara de fastidio y las ansias de llegar al hogar, ver como para otros tantos el día apenas comienza, y algunos como es que la vida simplemente los lleva, un simple ir y venir, en una existencia monótona y vacía. A veces no me explico como podemos estar tantas personas tan interconectadas, compartiendo espacios y tiempos, pero a la vez en una situación de aislamiento absoluta, muy en el fondo no me molesta ya que a final de cuentas mi fuerte no son las relaciones interpersonales, pero hay veces que me da mucha curiosidad como es que mi simple presencia podría alterar el destino de otras personas, desde el simple hecho de un empujón discreto a la hora de abordar el metrobus, una mirada hostil, el humor saliendo de la axila de alguien mas.<br /><br />Como que hoy fue un día de mi reconexión al mundo, donde escapé por un rato de mi y mi entorno inmediato, para experimentar y convivir con lo que tengo alrededor.<br /><br />Y todo esto motivado por un agente externo, podría llamarlo cita, una salida, pero simplemente fue un café, y desató una serie de sucesos que no llegan a ser muy comunes. Tengo la costumbre de arreglarme una vez al día, a menos que sea una ocasión demasiado especial o formal, mi estilo es el pandroso definitivamente, no tengo porque fingir mi apariencia, un traje bonito solo oculta tu idiotez hasta el momento que abres el hocico, y soy de los que prefieren ser subestimado de primera intención, hasta que dichas personas se dan cuenta de las capacidades de uno. En fin, esa es plática para otra ocasión, el caso es, que por hoy me arreglé, cambié mi look laboral pandroso por mi look más formal.<br /><br />La verdadera razón por la que lo hice es un poco incierta, a veces ni yo mismo entiendo mis emociones o impulsos, pero trataré de explicarlo con las escazas palabras que me otorga el lenguaje escrito. Conozco a una niña, no podría decir que estoy enamorado de ella, pero tampoco puedo decir que me es intrascendente, no puedo decir que me gusta, para mi el gusto siempre ha sido una emoción muy engañosa, te puede gustar un bistec muy jugoso, pero cuando acabas de comer abundantemente es difícil que quieras saber de él, los gustos están muy casados con tu humor y la situación en que te encuentras en el momento, un día puedes amanecer pensando en una niña y gustándote apasionadamente, y otro día te levantas de malas y no quieres saber de ella. No, ella no me gusta definitivamente, no de esa manera, no podría tenerla en esa categoría donde todo está sujeto a mis hormonas, mi estado de ánimo o simplemente a un capricho.<br /><br />Describirla entonces se vuelve complicado, transmitir ese sentimiento es todavía más cercano a lo imposible, la percibo más como una fuente de inspiración, en cierto modo una musa y una persona a la que admiro, hemos cruzado conversación muy poco tiempo, pero hay detalles y características en ella muy ocultas a cualquier otro ojo pero que yo las encuentro destacables. Es curioso, nuestros destinos seguramente caminan por senderos bastante separados, probablemente por su mente no pase nada de esto, pero por lo menos modifica mi conducta, altera mis pensamientos, y me hace sentir bien. Me recuerda a mí en algunos aspectos (recordar? eso implica que ya no soy así?), me sorprende sus momentos de fortaleza, pero a la vez me reconforta saberla frágil como damisela, y tener esos escazos segundos para comfortarla, veladamente protegerla y hacerla sentir seguridad. Amarla? no lo sé, pero me motiva a sacar lo mejor de mí, sin dejar de ser yo y sin querer sobresalir en lo que soy.<br /><br />Podría decirle todo esto, pero no es el momento, ni la forma, como bien dije, cada quien va por su sendero, cuando nos cruzamos ocasionalmente la verdad es que por lo menos para mí es una experiencia única, por desgracia nuestros senderos se separarán un buen tramo de tiempo, ella vivirá su vida, y yo estaré luchando de este lado, así pasan las cosas, pero por mientras, puedo quedarme con la satisfacción y el eterno agradecimiento de haber compartido con ella un día como hoy.Chololohttp://www.blogger.com/profile/04304229590729047993noreply@blogger.com0tag:blogger.com,1999:blog-1099780876668781186.post-9229353944416573292011-01-19T00:41:00.003-06:002011-01-19T00:45:55.843-06:00Put Attention!O lo que es lo mismo, maldita tensión!!!<br /><br />Ya he tratado de desahogarme de todas las maneras diferentes, así que un grito más por este lado no caería nada mal.<br /><br />En fin, el caso es que llevo haciendo planes para un gran evento desde hace tres o cuatro meses,todo bien planeado y con calma, sin omitir ningún solo detalle, para que lleguen una bola de burócratas y empiecen a echar todo a perder, demonios, por fortuna no todo está perdido, por ahora, pero me están obligando a realizar una serie de trámites en el último minuto del plazo, lo cual además me pone absolutamente de malas, porque si algo puede salir mal, es especialmente en estos momentos.<br /><br />Me molesta porque la gente no sabe lo que realmente significa esto para mi, es parte de mi plan de vida si quieren que lo aterrice en unas cuantas palabras, hay muchas cosas en juego, muchas partes de mi ser que necesitan de esto, he metido demasiado tiempo, dinero y esfuerzo, y todo para que se ponga en esta situación, y luego para acabarla de amolar tengo que sentarme a esperar, no puedo tomar ninguna acción proactiva, salvo tener la esperanza que los terceros involucrados y nada cooperativos hagan su chamba y las cosas me lleguen en el momento correcto y al lugar correcto para que entonces si, pueda tomar cartas en el asunto.<br /><br />Damn it... lo malo, es que mientras tanto seguiré con mi insomnio...Chololohttp://www.blogger.com/profile/04304229590729047993noreply@blogger.com0tag:blogger.com,1999:blog-1099780876668781186.post-4184313737230753822010-08-16T08:32:00.003-05:002010-08-16T10:55:41.262-05:00Masacre en ambulanciasEstoy en el elevador de un hotel, junto conmigo la hostess del mismo, y una serie de desconocidos sin importancia. Ella y yo platicamos, reímos, la pasamos bien, salimos del elevador, la gente ya no está.<br /><br />Estamos en un hall muy grande, el techo es como un domo geodésico, mucha vegetación, agua. Caminamos a unas escalinatas, le hago una pregunta incómoda a la hostess, si venía de otro país, si era nativa de ahí y si vivía sola, se ofende, me mira despectivamente y menciona que la he decepcionado. Sin darle importancia observo con detenimiento las escalinatas, hay gente dormida, con cobijas. Como huéspedes del hotel que se hartaron del cuarto, un par de personas con razgos españoles de un lado, una familia de cinco del otro, observo el piso a los pies de la escalinata, otras tantas personas, acostadas también, compañeros de la escuela.<br /><br />Un periódico en la escalinata, lo tomo, no lo puedo leer pero se que habla de una familia que pudo huir exiliada de otro país, gracias a la ayuda del consulado. Esa misma familia se encuentra acostada en la escalinata a mis pies.<br /><br />Siguiente escena, tres paramédicos, dos ambulancias, se escuchan disparos, el primer paramédico cae incado, la puerta de una ambulancia se salpica de sangre, otro disparo, el mismo paramédico bañado en sangre a la manera de Kill Bill y cae al piso muerto. El segundo paramédico salpicado en sangre arroja las llaves de manera agresiva al agresor, el cual está fuera de la vista, el tercer paramédico graba todo con su celular, instantes después el segundo paramédico cae muerto bañado en sangre también, el tercero deja caer la cámara, más disparos, silencio, oscuridad.<br /><br />Regreso al hall del hotel, platico con la familia de exiliados, se quejan de la aburrición de Estados Unidos, platico de mis experiencias en San Antonio, de Fiesta Texas, schlitterbahn, las idas a pescar.<br /><br />El escenario cambia a un estacionamiento techado, colores azulados, iluminación pobre, mucha humedad, una voz en off se queja de que las lanchas remolcadas no pueden ser estacionadas en un estacionamiento normal, replico que ese problema nunca me ha pasado a mi. Veo la silueta de una camioneta remolcando una lancha reflejarse en la pared justo frente a mí.<br /><br />Cambio de nuevo, nuevamente la escena de las ambulancias, todo igual, pero en cámara lenta, veo como cae de nuevo el primer paramédico, con expresión entre sorpresa y sufrimiento, mientras el tercero prepara su cámara.<br /><br />Despierto, mi cabeza fuera de la almohada, cubierto completamente por las cobijas, bañado en sudor. Vuelvo a soñar, por esforzarme en recordar este sueño, no recuerdo el últimoChololohttp://www.blogger.com/profile/04304229590729047993noreply@blogger.com0tag:blogger.com,1999:blog-1099780876668781186.post-81972582295003827662010-07-08T15:41:00.006-05:002010-07-08T15:48:38.479-05:00Detalle minusculo al usar TagLibUnitTestCaseEste es un tip rápido al usar TagLibUnitTestCase, e infiero que sirve para invocar clases que utilicen mocks y que además se prueben mediante la invocación de closures.<br /><br />Al utilizar TagLibUnitTestCase uno tiene la variable tagLib, que como tal es la instancia de la clase que estás probando, en mi caso yo uso algunas dependencias que utiliza mi libreria de tags y se las inyectaba de manera manual, pero al invocar el código de la siguiente manera:<br /><br /><pre class="brush: groovy"><br /> tagLib.dojoField(<br /> [bean:impuesto,field:"totalImpuestosRetenidos",<br /> useLabelTemplate:true],null)<br /></pre><br /><br />Pero la prueba unitaria fallaba, mandaba NullPointerException, curiosamente al invocar cualquier método de las dependencias, al realizar diversas pruebas me di cuenta que al invocar el closure de esa manera, se creaba una nueva instancia de tagLib, naturalmente, sin las dependencias que había inyectado previamente.<br /><br />Para evitar caer en ese error, solo tenemos que invocar el closure a la manera "java", usando el método call() del closure:<br /><br /><pre class="brush: groovy"><br />tagLib.dojoField.call(<br /> [bean:impuesto,<br /> field:"totalImpuestosRetenidos",<br /> useLabelTemplate:true],null)<br /></pre><br /><br />Y de ésta manera no tendrá ese comportamiento extraño.<br /><br />Cabe mencionar que probé en Grails 1.3.2Chololohttp://www.blogger.com/profile/04304229590729047993noreply@blogger.com0tag:blogger.com,1999:blog-1099780876668781186.post-46716232691615254592010-05-05T16:07:00.000-05:002010-05-05T16:28:07.951-05:00Getting annotations in Grails Domain ClassesA quickie post, I've disappeared for a while, but I'll be back with tons of new posts, for now, here is a quick way to get annotations on Grails Domain Classes, it might be helpful for doing some post processing of your domain model with the help of a plugin<br /><br />For this example I'm getting the field annotations of all declared fields in my declared domain classes, using the <span style="font-weight:bold;">doWithApplicationContext</span> closure that comes with all plugins:<br /><br /><pre class="brush: groovy"><br />def doWithApplicationContext = { applicationContext -><br /> for(GrailsDomainClass domainClass in application.domainClasses) {<br /> println "DOMAIN CLASS ${domainClass}: "<br /> domainClass.clazz.declaredFields.each{<br /> field -><br /> if(field.declaredAnnotations){<br /> println "${field.name} has the following annotations: ${field.declaredAnnotations} "<br /> //Do some more processing<br /> }<br /> }<br /> }<br /> }<br /></pre>Chololohttp://www.blogger.com/profile/04304229590729047993noreply@blogger.com0tag:blogger.com,1999:blog-1099780876668781186.post-88423319200534685932010-02-28T01:42:00.000-06:002010-02-28T02:10:59.248-06:00Un sueño bizarroPues hoy en la clásica siesta de sábado por la tarde tuve un sueño muy bizarro, que raya en lo surrealista, el cual relataré aquí porque la verdad no quisiera olvidarlo, va a ser muy complicado de relatar, así que de antemano me disculpo por los horrores de redacción.<br /><br />El sueño comienza conmigo haciendo cola en un aeropuerto, la verdad no se de donde, aunque según yo era de algún lugar soviético, delante de mí estaba un alemán y una fila interminable de pasajeros aguardando algo, seguramente el check point de seguridad, aunque no vi ningún arco o detector de metales, la fila se formaba con las clásicas vallas de cinta en zig zag como en todo aeropuerto, y también detrás de mí se encontraba una larga fila de personas. La fila en sí estaba estática, y yo me encontraba platicando con el alemán, no recuerdo en que idioma pero estabamos teniendo una conversación fluida e intrascendente acerca del país y de como habíamos disfrutado el viaje.<br /><br />De repente se acercan unas personas trajeadas, traje negro algunos y otros pardo oscuro, eso si de lentes oscuros y bastante altos, preguntando si alguno de nosotros quería comprar algo en las tiendas de Duty Free. La persona atrás de mí, le mencionó a uno de los trajeados que le gustaría comprar un par de botellas de alcohol para llevar a su patria, en ese momento el señor trajeado le puso una esposa en su muñeca, y se puso él la otra en la suya, de tal manera que estuvieran atados, y se lo llevó, otro señor de atrás manifestó el mismo interés y el otro señor trajeado hizo lo mismo, lo esposó y se lo llevó. En ese momento el alemán me comenta algo así como "es impresionante el control que tienen sobre el alcohol aquí", y yo le mencioné algo como "si, tienen normas muy estrictas definitivamente".<br /><br />En eso comenzó la fila a moverse, pero muy rápido, yo iba siguiendo al alemán a trote rápido, y de pronto me puse a correr porque todos iban muy rápido, incluso se fue moviendo tan rápido que dejé de seguir la línea y empecé a pasarme por debajo de las cintas porque de plano ya estaban vacías. La siguiente escena, era una especie de sala de espera, con sillas naranjas de plástico medio ergonómicas, como si fueran al estilo de un salón de clase, el alemán se sentó delante de mí, y yo le comenté algo como "va a ser genial volar en una aerolínea rusa, nunca me he subido a alguno de sus aviones", el sin siquiera voltear hacia atrás me mencionó "si, supe que tienen los nuevos aviones Zero" (cabe mencionar que los Zero son aviones de guerra de la segunda guerra mundial), yo le pregunté confundido "Zero? como son esos?", inclina un poco la cabeza hacia atrás pero fue como si hablara al techo "Son como un DC-9, dos motores", y volvió hacia delante.<br /><br />Yo tomé una revista, y me puse a leerla, naturalmente no podía distinguir nada, ni fotos ni letras (odio que en los sueños pase eso), pero de repente se acerca una amiga, que llamaremos M, y me menciona "ven conmigo, te voy a llevar por un atajo sino no vamos a llegar al abordaje", salgo corriendo con ella y entramos a un pasillo. El pasillo más bien era como un túnel, tenía unos rieles enmedio y estabamos caminando por una pequeña plataforma en la orilla derecha, ibamos platicando varias cosas, las cuales la verdad no recuerdo, y de pronto el túnel se ensancha, hasta ser como un cuarto muy amplio, soportado por columnas, pero con el techo bastante bajo, y lleno de rieles por todos lados, incluso había algunos trenes detenidos y otros tantos caminaban a lo lejos.<br /><br />M me menciona "ten cuidado con las barras guía, no las toques por que te electrocutas", y empezamos a brincar por entre las vías, al principio eran paralelas, todas las vías yendo hacia nuestra misma dirección, pero pronto hubieron otras transversales, luego diagonales, hasta que llegó un punto que todo parecía una telaraña de vías, y luego había tan poca separación entre estas que empecé a caminar de puntitas para no tocarlas. De pronto veo una especie de Y donde se empieza a bifurcar un pasillo, éste sin vías, y le digo "ven por acá, seguro llegamos más rápido".<br /><br />Caminamos por el pasillo, y al fondo vemos un punto de control de pasaportes, con varios policias atendiendo a los viajeros, el problema es que llegamos por detrás, es decir, veíamos a los policias sentados de espaldas, y los viajeros del otro lado de los escritorios, M me dice "no podemos pasar por ahí, ven por acá", y viramos ligeramente a la izquierda, donde había una puerta de cristal, pasamos por ella, y llegamos a un pasillo ya más estilo aeropuerto, bien iluminado, con macetas con plantas y demás, el punto de control nos quedaba a mano derecha pero tomamos por la izquierda dirigiéndonos a otra puerta de cristal. Ella se detuvo justo enfrente de la puerta, y me dice "Espera, voy al baño", y se dirige hacia el otro lado, hacia el punto de control, en eso, había una persona de intendencia y le dice un piropo en español, algo así como "Mamacita, etc etc" y yo le respondo en voz alta "Tranquilo wey, que hablamos español", el me voltea a ver con despecho, baja la cabeza, y sigue limpiando. <br /><br />M se pierde un poco después del punto de control, y vuelve a regresar, como si hubiera ido al baño instantaneamente, pero en mi sueño, aunque la seguía reconociendo como mi amiga y no noté ningún cambio, físicamente se veía como otra amiga, D, ya no dijimos nada, cruzamos la puerta de cristal, y yo tomé un carrito de equipaje, de esos de aeropuerto, y caminamos un poco por un pasillo todavía más iluminado, y no tenía techo, se veía un cielo claro con nubes a lo lejos. <br /><br />Caminamos un corto tramo y empezamos a ver muchas tiendas de campaña, a la mitad de dicho pasillo, todas eran rojas, y afuera de ellas habían varios chavos dormidos en sleeping bags justo afuera de ellas, todos los sleepings eran rojos o morados. Al principio fuimos sacándoles la vuelta, yo con mi carrito y todo, pero después cargué el carrito e ibamos brincando entre los sleepings.<br /><br />Ibamos también platicando D y yo, no recuerdo de que cosas, pero muy a gusto, mientras brincábamos los sleeping y yo en mis pensamientos tratando de mantener el equilibrio con el carrito para que no se me cayera y fuera a desgraciarle la cara y el sueño a alguien. De pronto todo se desvanece en blanco, y en la siguiente escena, estaba visualizando el avión, ya volando, era como una especie de DC-10, la cola era azul marino y el resto del avión era blanco, una de las ventanillas tenía un contorno ligeramente más oscuro, y en eso escucho la voz de D (no la veía a ella ni a nadie más, solo veía el avión volar en el cielo), "oye, como le hicimos para vernos desde fuera?", y yo le respondí "no se".<br /><br />Desperté, y la verdad se me quedó muy grabado, no se que trascendencia ni que significado pueda tener, pero está divertido no? :PChololohttp://www.blogger.com/profile/04304229590729047993noreply@blogger.com0tag:blogger.com,1999:blog-1099780876668781186.post-82646611871295426782010-02-24T11:22:00.000-06:002010-02-24T16:37:59.138-06:00A DSL for a data importing toolContinuing with our OpenTaps examples, we want to generate some seed data for our application, the good thing is that the OfBiz framework offers some tooling to import data nice and easy, the not so nice part of it, is that it must be done using xml files, like the example below:<br /><br /><pre class="brush: xml"><br /><entity-engine-xml><br /><br /><Product productId="SUPPLY-001" productTypeId="SUPPLIES" productName="Pencil" internalName="Pencil" description="Office pencil (demo supply)."<br />taxable="N" chargeShipping="N" autoCreateKeywords="N" isVirtual="N" isVariant="N" createdDate="2007-01-01 00:00:00.000" createdByUserLogin="admin"/><br /><br /><ProductPrice productId="service1" productPriceTypeId="DEFAULT_PRICE" productPricePurposeId="PURCHASE" currencyUomId="USD" productStoreGroupId="_NA_" fromDate="2008-01-01 00:00:00" price="10.00"/><br /></entity-engine-xml><br /></pre>This will insert a new Product entity (or update an existing one, if the primary key already exists), modifying the fields described in the attributes of the product tag (productId, productTypeId, productName, etc.), and will also modify or create a ProductPrice entity. It sounds pretty simple (and it really is), but to be honest, what would happen if we want to have a huge amount of data, and also provided by people that isn't exactly technical, it would be really hard to write all that xml, so lets use the power of groovy and a few more tools, to create a DSL that will help us parse an spreadsheet file (in this case OpenOffice calc) and automatically generate the data xml we need.<br /><br />First of all, lets organize how we are going to import the data:<br /><ul><li>Data will be located in an OpenOffice Calc file, each sheet will represent one or more entities</li><li>Each column will correspond to one field (or more) of our entity</li><li>Each row will be a complete object</li><li>Our DSL will help us determine how our sheet will be parsed to generate an OO representation<br /></li><li>Then we will export that OO representation into xml files</li></ul>So, for this task, we will need the following libs and frameworks:<br /><ul><li>Groovy, I really used <a href="http://www.grails.org/">Grails</a> because I wanted to make an small app with a nice frontend for the conversion</li><li><a href="http://jopendocument.org/">JOpenDocument</a> so we can parse OpenOffice Calc files in a nice way</li><li>OpenTaps, so we can test our data files</li></ul>Now, we need to define a domain model that will be used by our DSL to store the configuration of how to parse the Calc file, so we will create two java classes, the first one we will name it <span style="font-weight: bold;">ODSNode </span>and it will store the generic information about the sheet we are parsing, it will be like this:<br /><br /><pre class="brush: java"><br />public class ODSNode {<br />//Constants we will use later<br />public static final String SHEET_NAME_ATTR="name";<br />public static final String OFBIZ_NAME_ATTR="entity";<br />public static final String START_ROW_ATTR="startRow";<br /><br /><br />private int startRow=1;<br />private int index=0;<br /><br />private String sheetName;<br />private String ofbizEntity;<br /><br />private List<ODSElement> elements = new ArrayList<ODSElement>();<br />//getters and setters here...<br />}<br /></pre><br /><br />The fields will have the following meaning:<br /><ul><li><span style="font-weight: bold;">startRow </span>-> This is the row at which we will start parsing to get the data from the sheet</li><li><span style="font-weight: bold;">index </span>-> The order in which the results will be put, so maybe some data in other sheets will have precedence than this one</li><li><span style="font-weight: bold;">sheetName </span>-> The name of the sheet we will be parsing</li><li><span style="font-weight: bold;">ofbizEntity </span>-> The name of the entity we will be populating from the data parsed</li></ul>The node will be composed of many elements that correspond to the fields of the entity, so we will create the file <span style="font-weight: bold;">ODSElement</span>:<br /><br /><pre class="brush: java"><br />public class ODSElement {<br />//Some constants we will use later<br />public static final String COLUMN_ATTR="name";<br />public static final String INDEX_ATTR="index";<br />public static final String OFBIZ_ATTR="attribute";<br />public static final String CONSTANT="constant";<br /><br />private String columnName;<br />private int columnIndex;<br />private Object constant;<br />private String ofbizColumn;<br />}<br /></pre><br /><br />The fields have the following meaning:<br /><ul><li><span style="font-weight: bold;">columnName </span>-> I'm not using it right now, just as a placeholder to be aware of which column I'm modifying</li><li><span style="font-weight: bold;">columnIndex </span>-> The corresponding location of the column inside the sheet</li><li><span style="font-weight: bold;">constant </span>-> In some cases we won't parse information from the spreadsheet and we will insert a constant value for all the rows in our entity</li><li><span style="font-weight: bold;">ofbizColumn </span>-> This is the real name of the column or entity attribute for the Ofbiz Framework</li></ul>Now, taking advantage of the great class BuilderSupport provided by groovy, we will create our own Builder, called <span style="font-weight: bold;">ODSOfbizBuilder </span>(I'll only show the methods I actually use)<span style="font-weight: bold;">: </span><br /><br /><pre class="brush: java"><br />public class ODSOfbizBuilder extends BuilderSupport{<br /><br />private List<ODSNode> nodes = new ArrayList<ODSNnode>();<br /><br />private static final String SHEET_NODE ="sheet";<br />private static final String COLUMN_NODE ="column";<br /><br /> //Return the list of nodes generated by this builder<br />public List<ODSNode> getNodes() {<br /> return nodes;<br />}<br /><br /> //Create the corresponding node or element<br />@SuppressWarnings("unchecked")<br />@Override<br />protected Object createNode(Object name, Map attributes) {<br /> System.out.println(name+" "+attributes);<br /> Object obj=null;<br /> if(name.equals(SHEET_NODE)){<br /> ODSNode node = new ODSNode();<br /> node.setSheetName(attributes.get(ODSNode.SHEET_NAME_ATTR).toString());<br /> node.setOfbizEntity(attributes.get(ODSNode.OFBIZ_NAME_ATTR).toString());<br /> if(attributes.containsKey(ODSNode.START_ROW_ATTR)){<br /> node.setStartRow(Integer.parseInt(attributes.get(ODSNode.START_ROW_ATTR).toString()));<br /> }<br /> obj = node;<br /> nodes.add(node);<br /> }<br /> else if(name.equals(COLUMN_NODE)){<br /> ODSElement element = new ODSElement();<br /> element.setColumnIndex(Integer.parseInt(attributes.get(ODSElement.INDEX_ATTR).toString()));<br /> element.setColumnName(attributes.get(ODSElement.COLUMN_ATTR).toString());<br /> element.setOfbizColumn(attributes.get(ODSElement.OFBIZ_ATTR).toString());<br /> if(attributes.containsKey(ODSElement.CONSTANT)){<br /> element.setConstant(attributes.get(ODSElement.CONSTANT));<br /> }<br /> obj =element;<br /> }<br /> else{<br /> throw new IllegalArgumentException("Nodes must be named "+SHEET_NODE+" or "+COLUMN_NODE);<br /> }<br /> return obj;<br />}<br /><br /> //Add the elements to the corresponding node<br />@Override<br />protected void setParent(Object parent, Object node) {<br /> if(parent instanceof ODSNode && node instanceof ODSElement){<br /> ((ODSNode) parent).addElement((ODSElement) node);<br /> }<br />}<br /><br />}<br /></pre><br /><br />This class will allow us to parse our DSL and actually create a list of nodes that will help us parse a Calc file and get all data about them, so a Groovy code using that DSL would look like this:<br /><br /><pre class="brush: groovy"><br />def builder = new ODSOfbizBuilder()<br /> builder.base{<br /> sheet(name:'CatalogoUnidades',entity:"Uom",index:0){<br /> column(name:"Constante",index:-1,attribute:"uomTypeId",constant:"WEIGHT_MEASURE")<br /> column(name:"Unidad",index:0,attribute:"description")<br /> column(name:"Simbolo",index:1,attribute:"abbreviation")<br /> column(name:"ID",index:2,attribute:"uomId") <br /> }<br /> }<br /></pre><br /><br />So now that we have the template ready, lets create now the domain model to store in memory the data parsed, first we will create an <span style="font-weight: bold;">OfbizEntity</span> class that will store the generic data about our entity:<br /><br /><pre class="brush: java"><br />public class OfbizEntity implements Comparable<OfbizEntity>{<br /><br />private String entity;<br />private int index;<br />private Set<OfbizData> data = new TreeSet<OfbizData>();<br /> //Getters and setters here<br />}<br /></pre><br /><br />The class will store the name of the entity, and the order in which it should be stored in the xml file, and of course a set of <span style="font-weight: bold;">OfbizData</span> objects which will have the data we will store, and will have the following code in it:<br /><br /><pre class="brush: java"><br />public class OfbizData implements Comparable<OfbizData>{<br /><br />private String attribute;<br />private String value;<br /> //getters and setters here<br />}<br /></pre><br /><br />So now we will create a class named <span style="font-weight: bold;">ODSReader</span> that will read our spreadsheet and create our model in memory:<br /><br /><pre class="brush: java"><br />public class ODSReader {<br /><br />public List<OfbizEntity> parseFile(File spreadsheetFile,ODSOfbizBuilder builder) throws IOException{<br /> //Here we will store all our data<br /> List<OfbizEntity> data = new ArrayList<OfbizEntity>();<br /> //Let's open the Calc file<br /> SpreadSheet spreadSheet = SpreadSheet.createFromFile(spreadsheetFile);<br /> //Let's get the nodes we parsed from our builder earlier<br /> List<ODSNode> nodes = builder.getNodes();<br /><br /> for(ODSNode node : nodes){<br /> //We need to get the sheet referenced by its name<br /> Sheet sheet = spreadSheet.getSheet(node.getSheetName()); <br /> if(sheet == null){<br /> throw new IllegalArgumentException("Sheet with name "+node.getSheetName()+" not found");<br /> }<br /> //lets get the last row with data<br /> int lastRow = sheet.getRowCount();<br /> int startRow = node.getStartRow();<br /> int valueCount = 0;<br /> //for each of the parsed sheets we need the collection of entities<br /> Set<OfbizEntity> entities = new TreeSet<OfbizEntity>();<br /> for(int row = startRow;row<lastrow;row++){ valuecount="0;" ofbizentity="" entity="new" odselement="" element="" string="" if="" column="" is="" a="" we="" just="" put="" the="" constant="" value="" in="" there=""><0||element.getconstant()!=null){ value =" element.getConstant().toString();" cell =" sheet.getCellAt(element.getColumnIndex()," value="cell.getValue().toString();" tuple =" new">0&&valueCount>0){<br /> entities.add(entity);<br /> <br /> }<br /> }<br /> //We used a set to ensure there are no duplicates and now we add all its elements to our list<br /> data.addAll(entities); <br /> }<br /> return data;<br />}<br />}<br /></pre><br /><br />So now we can load the data in our calc file, to memory, now it is time to persist it in an Xml file, for that we will help ourselves with the excellent groovy StreamingMarkupBuilder, so lets create our <span style="font-weight: bold;">OfbizEntityGenerator</span> groovy class:<br /><br /><pre class="brush: groovy"><br />lass OfbizEntityGenerator {<br /><br />String output="outputDemoData.xml"<br /><br />//We receive the list of entities and parse them into an xml file<br />public StreamingMarkupBuilder generateOfBizDataModel(List<OfbizEntity> entities){<br /> StreamingMarkupBuilder builder = new StreamingMarkupBuilder()<br /> println entities.size()<br /> def writable = builder.bind{<br /> "entity-engine-xml"{ <br /> entities.each{<br /> ent -><br /> //Here we write a comment for our entity<br /> mkp.comment("Data for entity ${ent.entity}")<br /> //We write the entity with its attributes<br /> "${ent.entity}"(asMap(ent)) <br /> }<br /> }<br /> }<br /><br /> def outputString = indentXml(writable)<br /><br /> //And finally we write it to a physical file<br /> def file = new FileWriter(output)<br /><br /> file.write(outputString)<br /> file.flush()<br /> file.close()<br />}<br />//We just convert our list of objects to a map, not very elegant to be honest<br />Map asMap(OfbizEntity entity){<br /> def map = [:]<br /> entity.data.each{<br /> node -><br /> map[node.attribute] = node.value<br /> }<br /> return map<br />}<br /> //We use this helper method to have a nice indentation of our xml file<br />String indentXml(xml) {<br /> def factory = TransformerFactory.newInstance()<br /> factory.setAttribute("indent-number", 2);<br /><br /> Transformer transformer = factory.newTransformer()<br /> transformer.setOutputProperty(OutputKeys.INDENT, 'yes')<br /> StreamResult result = new StreamResult(new StringWriter())<br /> transformer.transform(new StreamSource(new ByteArrayInputStream(xml.toString().bytes)), result)<br /> return result.writer.toString()<br />}<br />}<br /></pre><br /><br />So the complete usage example of our DSL and utils would be like this:<br /><br /><pre class="brush: groovy"><br />def reader = new ODSReader()<br />File file = new File("/citsa/opentaps/myfile.ods");<br />def builder = new ODSOfbizBuilder()<br />builder.base{<br /> sheet(name:'CatalogoUnidades',entity:"Uom",index:0){<br /> column(name:"Constante",index:-1,attribute:"uomTypeId",constant:"WEIGHT_MEASURE")<br /> column(name:"Unidad",index:0,attribute:"description")<br /> column(name:"Simbolo",index:1,attribute:"abbreviation")<br /> column(name:"ID",index:2,attribute:"uomId") <br /> }<br /> }<br /> def result = reader.parseFile(file, builder)<br />OfbizEntityGenerator generator = new OfbizEntityGenerator()<br />generator.output = "products.xml"<br />generator.generateOfBizDataModel(result)<br /></pre><br /><br />And having the following ods file:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_a4rp7uDc-gg/S4V0iMBWYvI/AAAAAAAAAkI/Fl8OgByCz0U/s1600-h/sheet.png"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 200px; height: 160px;" src="http://2.bp.blogspot.com/_a4rp7uDc-gg/S4V0iMBWYvI/AAAAAAAAAkI/Fl8OgByCz0U/s200/sheet.png" alt="" id="BLOGGER_PHOTO_ID_5441883855438373618" border="0" /></a><br /><br />It will generate the following xml file:<br /><br /><pre class="brush: xml"><br /><?xml version="1.0" encoding="UTF-8"?><br /><entity-engine-xml><br /><Uom abbreviation="g" description="gramo" uomId="1.0" uomTypeId="WEIGHT_MEASURE"/><br /><Uom abbreviation="lb" description="libra" uomId="2.0" uomTypeId="WEIGHT_MEASURE"/><br /><Uom abbreviation="kg" description="kilogramo" uomId="3.0" uomTypeId="WEIGHT_MEASURE"/><br /><Uom abbreviation="M" description="miles de semilas" uomId="4.0" uomTypeId="WEIGHT_MEASURE"/><br /><Uom abbreviation="ml" description="mililitro" uomId="5.0" uomTypeId="WEIGHT_MEASURE"/><br /><Uom abbreviation="l" description="litro" uomId="6.0" uomTypeId="WEIGHT_MEASURE"/><br /><Uom abbreviation="docena" description="docena" uomId="7.0" uomTypeId="WEIGHT_MEASURE"/><br /></entity-engine-xml><br /></pre><br /><br />Cool isn't it? now try to do it with a spreadsheet with a couple thousand rows, and you will see the real benefit of this.<br /><br />Now tell OpenTaps that you have a new file, copy the xml (for our example it will be named products.xml) and paste it into your <span style="font-weight: bold;">hot-deploy/citsaProduct/data</span> folder and edit your <span style="font-weight: bold;">ofbiz-component.xml</span> to add the following line<br /><br /><pre class="brush: xml"><br /> <entity-resource type="data" reader-name="ext" loader="main" location="data/products.xml"/><br /></pre><br /><br />Finally, to tell OpenTaps to load it, just run the following script in your opentaps home:<br /><br />java -Xmx384M -jar ofbiz.jar -install -readers=ext<br /><br />And voilá, you can load a ton of seed data without much effort<br /><br />More references:<br /><ul><li><a href="http://groovy.codehaus.org/api/groovy/util/BuilderSupport.html">BuilderSupport</a> javadoc</li><li><a href="http://groovy.codehaus.org/Make+a+builder">A comprehensive example for making a builder</a><br /></li><li><a href="http://groovy.codehaus.org/Creating+XML+using+Groovy%27s+StreamingMarkupBuilder">Usage of StreamingMarkupBuilder</a><br /></li></ul>Chololohttp://www.blogger.com/profile/04304229590729047993noreply@blogger.com0tag:blogger.com,1999:blog-1099780876668781186.post-86281927093927507712010-02-24T10:47:00.000-06:002010-02-24T11:28:04.939-06:00Modifying and creating new data entities (OpenTaps)So now we will create some new data entities for our OpenTaps installation.<br /><br />Our main products are seeds, and, as you already know, they are living beings that need some special care and control while handling them. Not all seeds grow and some may die as time passes, so we need to control the germination rate of the seeds we handle.<br /><br />Each variety of seed has different tolerances for the germination rate, so, some kind of seeds may be sold with a 99% of germination rate, while others would be ok with just an 80%. So we need a new field for our product entity to handle the minimum germination rate accepted for each of our products.<br />So we will create two new files in our<span style="font-weight: bold;"> citsaProduct </span>module:<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_a4rp7uDc-gg/S4VawlgY2PI/AAAAAAAAAj4/nEiJ0GyULLw/s1600-h/entities.png"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 200px; height: 160px;" src="http://2.bp.blogspot.com/_a4rp7uDc-gg/S4VawlgY2PI/AAAAAAAAAj4/nEiJ0GyULLw/s200/entities.png" alt="" id="BLOGGER_PHOTO_ID_5441855515495291122" border="0" /></a><br /><ul><li><span style="font-weight: bold;">entitymodel.xml </span>-> Here we will describe our new entities, and their data types and fields</li><li><span style="font-weight: bold;">entitygroup.xml </span>-> Here we will configure entity groups, it usually works if we want to use different databases for our entities, but for now we will use only one database.</li></ul>So first of all, lets add a new field to the Product entity, but the problem is that Product is defined in the file <span style="font-weight: bold;">applications/product/entitydef/entitymodel.xml </span>but we don't want to modify that file, it would cause trouble in future upgrades, so fortunately the framework lets us extend an existing entity with new fields without touching the original configuration file, so lets modify our own <span style="font-weight: bold;">entitymodel.xml </span>and add the following text:<br /><br /><pre class="brush: xml"><br /><?xml version="1.0" encoding="UTF-8"?><br /><entitymodel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br /> xsi:noNamespaceSchemaLocation="http://www.ofbiz.org/dtds/entitymodel.xsd"><br /><br /> <extend-entity entity-name="Product"><br /> <field name="germinationRate" type="fixed-point"/><br /> </extend-entity><br /> <br /></entitymodel><br /></pre><br />As simple as that, we use the tag <span style="font-weight: bold;">extend-entity </span>to add new fields and keys to an existing entity, in this case, we are adding a new field named <span style="font-weight: bold;">germinationRate </span>with a data type of <span style="font-weight: bold;">fixed-point</span><br /><br />Look at how the data types don't look like SQL data types, the framework has some common or generic definitions that will be translated to true SQL data types at runtime, you can look the real data types by looking at the xmls located in the folder <span style="font-weight: bold;">/opentaps-1.4/framework/entity/fieldtype</span><br /><br />Now we want to make a new entity named "Package", just to make an example on how to create new entities, so lets modify again our <span style="font-weight: bold;">entitymodel.xml </span>file and add the following text:<br /><br /><pre class="brush: xml"><br /><?xml version="1.0" encoding="UTF-8"?><br /><entitymodel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br /> xsi:noNamespaceSchemaLocation="http://www.ofbiz.org/dtds/entitymodel.xsd"><br /><br /> <entity entity-name="Package" package-name="org.ofbiz.citsa"><br /> <field name="packageTypeId" type="id-ne"/><br /> <field name="name" type="name"/><br /> <field name="shortName" type="name"/><br /> <prim-key field="packageTypeId"/><br /> </entity> <br /><br /> <extend-entity entity-name="Product"><br /> <field name="germinationRate" type="fixed-point"/><br /> </extend-entity><br /> <br /></entitymodel><br /></pre>Finally, we have to modify the <span style="font-weight: bold;">entitygroup.xml </span>file to tell it to recognize our new Package entity:<br /><br /><br /><pre class="brush: xml"><br /><?xml version="1.0" encoding="UTF-8"?><br /><entitygroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br /> xsi:noNamespaceSchemaLocation="http://www.ofbiz.org/dtds/entitygroup.xsd"><br /> <entity-group entity="Package" group="org.ofbiz"/><br /></entitygroup><br /></pre><br />As a last step, we will need to modify the file <span style="font-weight: bold;">ofbiz-component.xml </span>of our module, so we can tell the Ofbiz Framework to load our new data entities:<br /><br /><pre class="brush: xml"><br /><?xml version="1.0" encoding="UTF-8" ?><br /><ofbiz-component name="citsaProduct"<br /> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br /> xsi:noNamespaceSchemaLocation="http://www.ofbiz.org/dtds/ofbiz-component.xsd"><br /> <br /> <resource-loader name="main" type="component"/><br /> <br /> <classpath location="build/classes/*" type="dir"/><br /> <classpath location="config" type="dir"/><br /> <br /> <entity-resource loader="main" location="entitydef/entitymodel.xml" reader-name="main" type="model"/><br /> <entity-resource loader="main" location="entitydef/entitygroup.xml" reader-name="main" type="group"/><br /> <br /></ofbiz-component><br /></pre><br /><br />After all this steps we should run the following script:<br /><br />ant make-base-entities<br /><br />This will generate Hibernate entity files in the folder <span style="font-weight: bold;">hot-deploy/opentaps-common/src/entities </span>that we will later use in our code<br /><br />Finally, we just need to restart our server, and it should alter the Product table and create a new table named "Package"Chololohttp://www.blogger.com/profile/04304229590729047993noreply@blogger.com0tag:blogger.com,1999:blog-1099780876668781186.post-51628753908716653882010-02-24T10:02:00.000-06:002010-02-24T11:28:16.289-06:00Creating a new module (OpenTaps)Welcome to my new blog, I hope Blogger offers a better interface and tools than Roller, so, let's get started with a new series of OpenTaps entries, this will be a little more focused on customizing an existing instance of Opentaps, while trying to guarantee some code independence so you can gracefully upgrade to new versions without much trouble.<br /><br />Just a little quick introduction, the customization I'm making is for my family business, which is a seed trading company, so while its business model is quite common, it has a few differences that make it interesting and a nice example to use for our exercises.<br /><br />So, first of all, we are going to work with the Product module, we don't want to directly modify it so we will make a new module based on it, to do this, we will make a folder in the <span style="font-weight: bold;">hot-deploy </span>directory, and for this example we will name it <span style="font-weight: bold;">citsaProduct</span>:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_a4rp7uDc-gg/S4VSvYjh2wI/AAAAAAAAAjM/nCLYMEKj-AI/s1600-h/folder.png"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://2.bp.blogspot.com/_a4rp7uDc-gg/S4VSvYjh2wI/AAAAAAAAAjM/nCLYMEKj-AI/s320/folder.png" alt="" id="BLOGGER_PHOTO_ID_5441846698745912066" border="0" /></a>On it, we will create the following new files and folders:<br /><ul><li><span style="font-weight: bold;">ofbiz-component.xml </span>-> This file contains all our main configuration of our new module, basically where to load the services, webapps, data, etc.</li><li><span style="font-weight: bold;">build.xml </span>-> This file contains the Ant configuration to compile and build our module, for now, copy the build.xml from the application/party module, and it should be enough</li><li><span style="font-weight: bold;">src (folder) </span>-> Our java sources will be located here, although for now it will be empty</li><li><span style="font-weight: bold;">data (folder) </span>-> Here we will put our custom seed data, in a later blog post I'll show how to create a small app to quickly create this data from a spreadsheet file</li><li><span style="font-weight: bold;">entitydef (folder) </span>-> Here we will put the configuration of our new and custom data entities<br /></li></ul>So, first of all we have to edit our <span style="font-weight: bold;">ofbiz-component.xml </span>file, for now lets put the following content:<br /><br /><pre class="brush: xml"><br /><?xml version="1.0" encoding="UTF-8" ?><br /><ofbiz-component name="citsaProduct"<br />xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />xsi:noNamespaceSchemaLocation="http://www.ofbiz.org/dtds/ofbiz-component.xsd"><br /><resource-loader name="main" type="component"/><br /><classpath location="build/classes/*" type="dir"/><br /><classpath location="config" type="dir"/> <br /></ofbiz-component><br /></pre><br /><br />The<span style="font-weight: bold;"> resource-loader </span>tag helps us have a common base from where to look for the files that we configure here<br /><br />The <span style="font-weight: bold;">classpath </span>tag will tell the Ofbiz Framework (in which OpenTaps is based on) where to find java classes, jars and other configuration files and put them in the classpath.<br /><br />We also have to tell the Ofbiz Framework to load the module at application start, so we need to modify the file <span style="font-weight: bold;">hot-deploy/component-load.xml </span><br /><br /><pre class="brush: xml"><br /><component-loader xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br /> xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/component-loader.xsd"><br /> <load-component component-location="opentaps-common"/><br /> <load-component component-location="crmsfa"/><br /> <!-- Some more components here.... --><br /><!-- CITSA --><br /><load-component component-location="citsaProduct"/><br /></component-loader><br /></pre>So you should be able to run <span style="font-weight: bold;">startofbiz.sh </span>and look in the logs for an entry like this:<br /><br />2010-02-11 16:04:30,113 (main) [ ComponentContainer.java:218:INFO ] Loading component : [citsaProduct]<br /><br />So that means that our module is loadingChololohttp://www.blogger.com/profile/04304229590729047993noreply@blogger.com0