miércoles, 24 de agosto de 2016

La vuelta al mundo

Déjenme darles una idea de lo que tengo que viajar cada día a mi oficina y de vuelta:


(Llevo aquí más de año y medio, manejo más de un año y todavía no logro aprender los nombres de las autopistas... ¿No había más número que x80 para nombrarlas?)

En las mañanas a menudo me manda Google por el camino en azul. Eso es porque llego a las 10, así que lo peor del gran taco ha pasado ya. Hasta donde dice Sunol, en realidad me estoy yendo por pequeñas carreteras secundarias de una pista por lado, donde no se puede ir demasiado rápido. Luego tomo la 680 y la 580, que son grandes autopistas de 4 o 5 pistas por lado.

En las noches a menudo me voy por el camino gris hacia el norte, cruzando el puente, luego al norte por la 880 hasta la 580 (ambas son autopistas grandotas) y de allí derecho al este. En la tarde es mucho más el taco, probablemente porque como todos son trabajólicos, no hay hora de salida y todos se desparraman desde las 5 quizás hasta las 7.

Lo malo es que como ven en el mapa, no hay mucho entre Pleasanton y Union City, que sería más o menos tierra media entre el trabajo de Xavier y el mío. Así que no es como que tengamos muchas alternativas para movernos y que mi viaje sea mejor. Pero esa es una preocupación para el futuro, no ahora.

martes, 23 de agosto de 2016

Las cosas medio mal hechas

Resulta que el código en que estoy trabajando tiene un serio problema: está mal hecho. Pero si les digo eso, en realidad les estoy contando mucho menos de la mitad de la historia y estoy siendo realmente injusta con la persona que lo escribió, porque en realidad la historia debería enfocarse más bien en que el sistema funciona. Rudimentariamente, pero funciona.

Por supuesto, todos pensamos que las cosas han de hacerse bien al primer intento. Lamentablemente la vida real se mete en el camino y muchísimas cosas no salen bien al primer intento, ni es necesario que lo hagan. Por ejemplo, mis cartas siempre comienzan como la carta de verdad, pero a mitad de camino se transforman en borradores.

En el caso del código, a menudo yo comienzo con algo que recientemente me he dado cuenta que es un test. Es decir, una super simplificación del problema, reducido a su más mínima expresión. Suelo pensar que es una prueba de si lo que queremos hacer es posible o es una idea loca. Una vez que sé que es posible, empiezo a agregarle cosillas por aquí y por allá, hasta que es lo más completo posible.

Claro que este momento es el momento en que la vida real se mete en el camino y a veces lo que era una prueba no puede crecer en la dirección correcta sino que estamos presionados por agregar una función especialmente importante. Digamos que tenemos una web que nos deja buscar en una base de datos. Usualmente no solo hay que buscar en la base de datos, sino que hay que escribir toda clase de código que se asegure que los usuarios solo puedan escribir en la caja de búsquedas, búsquedas auténticas. Pero a veces pasará, por ejemplo, que es más importante permitir a nuestros usuarios hacerse cuentas y poder guardar un historial de las búsquedas, que "asegurar" el sitio contra búsquedas maliciosas. Una razón podría ser que sabemos quiénes son nuestros usuarios y les podemos quebrar los dedos si nos tratan de hackear =^.^= Y sin darnos cuenta, un día descubrimos que llevamos 3 años sin escribir el código de seguridad y hemos agregado montón de otras cosas.

La semana pasada comencé a tratar de entender un horrible bug que no sabemos ni siquiera dónde se produce. Rastreando el código hacia atrás, encontré un servidor web escrito en C++. Eso sería como si uno decidiese hacer su propio horno, por ejemplo. No será muy estándar, probablemente las temperaturas que alcance no sean las mismas de un horno comercial, quizás ni siquiera sean muy fiables o estables. No es para nada lo que uno quisiera usar si fuera a dedicarse comercialmente a hornear.

Uno de mis usuarios escuchó mi conversación y empezó a preguntarme por el asunto, medio atacado. En parte tiene razón, por el lado de que las cosas no se deben hacer así. Pero por otro lado, en un sistema como el nuestro, lo importante era tener una interfaz que funcionase, como fuera, para que se pudieran usar los instrumentos científicos que están siguiendo su propio camino de intentar determinar qué funciona mejor. No había tiempo para que el software fuera maduro y elegante: los científicos necesitaban usar los instrumentos ayer mismo.

Lo chistoso de la conversación es que el usuario preguntó por qué no usábamos otro servidor web en otro lenguaje, como si fuera algo mejor. Todos los lenguajes, me imagino, tienen su propia versión de un servidor web, o mejor dicho, se puede escribir un servidor web en cualquier lenguaje. Pero ninguno es para uso en el mundo real y pueden causar problemas de lentitud y seguridad. Un servidor escrito a mano en Ruby no es mejor que el nuestro en C++. Un servidor de verdad, como Apache o Nginx, es lo único adecuado en estas circunstancias y mi trabajo futuro será reemplazar la funcionalidad con uno de ellos.

Así que cuando me preguntan qué me parece las cosas, trato de decir que hay mucho por cambiar pero que es admirable que el sistema funcione como lo hace hoy. Es un caos horrible, las cosas se pisan la cola, no es claro donde se define nada, etc. etc. etc., pero el sistema funciona y permite toma de datos, que es al final de cuentas lo más importante de lo que hacemos. Sin datos, no importa nada si estoy escribiendo el código más elegante del universo.

lunes, 22 de agosto de 2016

Nuestro otro robot

La semana pasada decidimos comprarnos otro robot limpiador. Esta vez es una trapeadora, que se llama Braava Doo. Miren el video de iRobot para que la vean en acción:


Compramos una Braava porque la cocina siempre está sucia. La roomba hace su mejor esfuerzo en mantener todo libre de mugre, pero no hace nada por las manchas que quedan cuando se nos cae un poco de té, o cuando nos lavamos las manos en un lado de la cocina y tomamos el paño para secarlas que está al otro lado. Y aunque nuestra visita dijo "claro, si trapear es tan difícil", cuando le dijimos que compramos una trapeadora robot, el problema de trapear no es la dificultad, sino el que consume demasiado tiempo ahora que estoy menos de 5 horas despierta en la casa cada día. Pero por supuesto, uno tiene que ser considerado con la gente que no sabe, así que no respondimos nada, porque probablemente no ha trapeado ni 10 veces en su vida entera.

Llevamos menos de una semana con la Braava y estamos ya muy contentos. Se llama Braava Doo porque mucho tiempo pensamos en comprarnos la otra hermana de la familia, una Scooba. Que obviamente se tendría que llamar Scooba Doo, ¿no? Pero mientras tratábamos de decidirnos, descubrimos que la Braava parece ser mejor para pisos laminados como el nuestro, que es esencialmente madera prensada plastificada. El laminado es piso de madera falsa y es super huevón de cuidar. La Braava tiene un modo de limpieza húmeda que no moja tanto el piso, lo que debería ser menos dañino. Pero por supuesto, el nombre Scooba Doo es super cachirulo y no queríamos perderlo, así que la robotito se llama Braava Doo.

Ahora, si me preguntan cómo es, tengo que decir que tiene el mismo "defecto" que la Roomba, que es que no limpia "muy bien". Al principio a uno no le parece que esté haciendo muy buen trabajo, más si uno pone a una Roomba a limpiar cierta área especialmente sucia. Eso es porque el algoritmo de limpieza de la Roomba no se parece en nada a como limpia uno, que es pedacito a pedacito, a conciencia, hasta que todo está limpio. Una roomba limpia un poco, se va a otro lado, limpia más, vuelve, etc. Es solo sobre la hora de limpieza de un ciclo normal que todas las áreas son cubiertas y todo queda limpio. En el caso de la Braava, ella limpia en líneas rectas, siguiendo un mapa que hace de la habitación donde está. Pero como es una mosquita, que no pesa casi nada, muchas veces pasa sobre las manchas sin hacerles mucho. Ahí es donde uno tiene que acordarse de que para sacar las manchas, a veces hay que apoyar todo el peso en el trapero, lo que la Braava hace pasando y repasando sobre las mismas zonas.

Por supuesto, al final si no tengo que trapear, estoy mucho más dispuesta a aceptar manchas o las rayas en el suelo que deja el trapero. Total siempre puedo recargar y volver a limpiar sobre la misma mugre. Y eso es infinitamente liberador, no solo para mí que siempre veo el suelo sucio y tengo que trapearlo, sino para Xavier que sabe que el suelo está sucio pero no ha sido entrenado para que le moleste como a mí, de modo que incluso con la intención de querer aliviarme las cosas, no siempre está en condiciones de saber "ahora es necesaria una limpieza". Ahora basta con llenar la Braava de agua, ponerla en una esquina y apretar el botón. Listo.

domingo, 21 de agosto de 2016

Otra semana

Ya estoy aquí otra vez. Perdónenme que me haya tomado la semana entera sin escribir nada. Las cosas han andado terriblemente locas y poco estables, de modo que no había mucha oportunidad de hacer nada.

La semana pasada todavía teníamos visitas, así que no era posible llegar a la casa y ponerme a escribir las cosas del día. Eso suponiendo que al final del día me quedase cerebro para hacer algo, lo que todavía no es muy seguro.

Mis días son más o menos como sigue: me levanto a eso de las 7:30, para salir a las 8:30. Llego a mi oficina entre eso de las 9:35-10:00, según el día y la suerte, porque si hay un accidente entonces todos los cálculos posibles de tráfico dejan de ser válidos. Lo mismo puede ser un choque pequeño, donde los participantes están de una pieza y solo han de moverse a la berma para comenzar los horribles trámites de sus seguros, o un choque espantoso donde tienen que venir los bomberos a tratar de sacar gente de los autos. Claro que este último caso no es tan espeluznante como le parece a uno a primera vista, pensando en cómo van a pasar ambulancias, policías y bomberos por medio del taco: la mayoría -si no todas- de las grandes autopistas tienen una pista no pintada, extra, en el costado izquierdo, que es precisamente para esas emergencias.

Bueno, una vez que estoy en el edificio, es trabajar non-stop hasta las 6. Los gringos nunca almuerzan juntos o lo hacen raramente, de modo que todos los días, excepto mi primer día, almuerzo en mi escritorio mientras trabajo. Y a eso de las 5:30 empiezo a mirar las apps de tráfico para ver por dónde me conviene irme. Si me demoro más de 1:10, en general espero otro poco, lo que significa que casi todos los días me vengo a eso de las 6:30. No tengo horario de salida y es difícil saber cuánto se espera de mí que trabaje, porque los jefes son medio trabajólicos.

A la casa llego siempre después de las 7:30, más tirando hacia las 8. Y generalmente vengo bien aturdida, porque como llevo solo dos semanas, tengo que ser lo más inteligente posible y ganar capital de confianza lo antes posible. Así que a duras penas me queda coco para conversar o para hacer cosas difíciles.

Y ayer no escribí porque tenía que limpiar y organizar la casa después de la visita. Como somos solo dos, el que haya una tercera persona aumenta un montón el gasto de loza y la suciedad de la cocina. (No, no es que la visita sea sucia =^.^=). Así que ayer pasamos todo el día Curín y yo moviendo cosas de un lado a otro, poniendo lavadora y lavavajilla, la aspiradora y nuestro nuevo robot, del que les contaré mañana, nuestra Brava Doo.

Hoy en un ratito me pondré a jugar hasta que me duelan los ojos, que mañana tengo que seguir cazando un horrible bug que me obligará a aprender rápido C++.

sábado, 13 de agosto de 2016

Estatus de la primera semana

Bueno, finalmente emerjo de mi lucha contra la entropía y tengo un momento para escribir. Me lo he llevado una semana entera luchando contra el caos, pero de un modo diferente y en otro entorno al usual, pero al final es la misma cosa.

Vamos al principio. Soy ahora software engineer en una startup, una compañía chiquita que está intentando desarrollar equipamiento científico. Mis tareas son mis tareas usuales, hacer desarrollo de software que corre en el servidor y que no tiene interfaz gráfica, escribir páginas webs y también ser administrador de redes y servidores. Un día igual a todos los días de mi vida anterior, solo que esta vez mis responsabilidades son así desde el primer momento, en vez de ser algo que mi trabajo descubre que puedo hacer sobre la marcha (principalmente lo de servidores) o termino haciendo yo porque nadie hace.

Al final de esta semana estoy muy contenta. En general durante la primera semana uno no hace nada o no logra avanzar mucho si es que todo es código. Es imposible entrar a un proyecto activo y funcional, e inmediatamente entender lo bastante para meter cosas. A menos que sean simples mejoras gráficas. Sin embargo, esta semana ya me anoté dos éxitos: uno es haber configurado una VPN y el otro es haber corregido un problema de configuración en uno de los servidores que le impedía ver la red exterior (y ser visible desde la VPN).

Además hay interesantes desafíos. Primero está el código, desorganizado y como es esperable, creciendo en cualquier dirección porque al principio a menudo es más importante que algo funcione que el que lo haga con elegancia. Pero también hay un problema de que me faltan logs y los servicios no está claro cómo corren y adónde escriben registros. Sin ellos no hay mucho cómo ver qué está pasando y hay ciertos procesos que se tragan órdenes y no las ejecutan. Pero también hay que hacer upgrades y dependemos de ciertos drivers específicos para los equipos. Y por supuesto, hay que pensar cómo se harán esos upgrades en un futuro donde hay clientes. Y cómo nos preocuparemos de la seguridad.

Es decir, hay tanto espacio para hacer lo que ya sé hacer, como espacio para aprender cosas que nunca he hecho, incluyendo aprender C/C++. La combinación ideal para un gato como yo. Difícilmente puedo pedir más. Bueno, sí. Podría pedir vivir más cerca, porque me demoro más de una hora hacia cada lado. Pero creo que nunca lo he tenido todo y es mejor tener un buen sueldo que un viaje corto a la oficina como me pasaba antes =^.^=