Cansada de ser feliz

Bienvenidos a mi flujo de conciencia

El colegio

| Comments

Nunca me gustaba ir al colegio y siempre he contado cuánto falta hasta el último día de encarcelamiento.

Entré al colegio cuando tenía 7 años. Normalmente los niños entran un año antes, pero a mis 6 me dijeron que la niña era demasiado pequeña. Durante 12 meses no crecí mucho, pero ya que no tuvieron razones de no aceptarme.

Mi primer día no me gustó: habían muchos niños a quienes no conocía y no quería conocerlos, que se movían por el salón de una forma caótica y hacían mucho ruido. Me pusieron en la última mesa del aula junto a la ventana. En la primera clase a profesora nos dijo que sacaramos nuestros cuadernos de las maletas y dibujaramos algo. Eso fue un estrés total: no pude abrir mi maleta. Como tuve que manejar la cerradura por primera vez en mi vida, no supe cómo funcionaba y claro que el panico, que llegó inmediatamente, no me permitió pensar con claridad.

Del primer grado sólo recuerdo cómo nos enseñaban caligrafía: tuvimos que escribir las mismas letras muchas veces. Entonces al final se quedaron varias páginas con “а”, “б”, “в”, etc.

En el segundo grado nos muvieron a otro edificio y empezamos a prestar servicio. Cada grupo por turnos tuvo que estar de servicio en el colegio durante toda la semana. Esto segnificaba que tuvimos que llegar 30 minutos antes que todos los demás. Nos reunían en el primer piso y decían a cada no su cargo. Habían varios tipos de cargos: unos tuvieron que estar en la entrada del edificio y en las entradas de cada piso y decir a cada niño que pasaba: “¡Smenka!”. “Smenka” significa “los zapatos de cambio”. En el invierno la nieve se metía en las indiduras de los zapatos y cuando uno entraba al edificio se derretía y dejaba charcos. Por eso por el orden “¡Smenka!” el estudiante tuvo que levantar el pie y mostrar la suela. Si estaba mojada “el guardia” tuvo que detenerlo y mandarlo a la casa por los zapatos de cambio. Ese cargo no me gustaba porque los otros estudiantes lo tomaban como un deporte lograr pasar con los zapatos que llevaban puestos en la calle, entonces inventaban trucos para confundir la guardia o simplemente corrían de nosotros. Entonces había otro cargo: vigilar los corredores, detener los estudiantes que corrían y mandarles al director del colegio.

Existía un cargo que era el más agradable de todos: estar en la cafetería. Había que ordenar las mesas y las sillas y antes de las horas del desayuno y almuerzo había que servir la comida y después recoger los platos.

Después de las clases nos quedábamos por una hora para limpiar todo el colegio.

Tuvimos 4 periodos y 4 vacaciones: 3 cortas y umas largas de tres meses en verano. Para las vacaciones de verano nos daban una lista de libros para leer. Como durante los estudios casi no tuvimos tiempo para la lectura, tuvimos que pasar por todos los libros del curso de literatura antrs de que empezara el año escolar. A pesar de que leía de 3 a 5 horas al día no alcanzaba leer todos los libros del listado. Me gusta leer mucho, pero odiaba las clases de literatura. La parte más tonta era memorizar los poemas. Tuvimos que recitar de memoria los poemas de Homero, Pushkin, Lermontov, Tiútchev, Mayakovski, Blok y muchos otros. A cada uno llamaban a la pizarra y tuvimos que declamar frente al grupo. Así los profesores lograron que hasta la mejor poesía pudiera provocar un reflejo vomitivo. Pero creo que era la mejor forma de instalar los pensamientos de otras personas a las mentes inmaduras. Hasta ahora cuando veo una tormenta fuerte a veces se me ocurren las estrofas de Tiútchev:

Люблю грозу в начале мая (Me gustan las tormentas a principios de mayo) / Когда весенний первый гром (Cuando el primer trueno primaveral) / Как бы резвяся и играя (Como haciendo travesuras y jugando) / Грохочет в небе голубом (Trona en el cielo azul).

Monitoreo de acciones de usuarios en Flask (SQLAlchemy)

| Comments

Suponemos que en nuestro proyecto de Flask hay un modelo Client definidao usando Flask-SQLAlchemy y queremos monetorear los cambios que se realizan sobre los objetos de ese modelo.

Para esto agregamos tres señales:

models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
from sqlalchemy import event

from main.signals import receive_before_update, receive_before_insert, receive_before_delete

class Client(db.Model):
    id = Column(Integer, primary_key=True)
    name = Column(String(255))
    email = Column(String(255), unique=True)
    phone = Column(String(255))

event.listen(Client, 'before_insert', receive_before_insert)
event.listen(Client, 'before_update', receive_before_update)
event.listen(Client, 'before_delete', receive_before_delete)

EN el gódigo de cada señal llamamos los métodos inspect() y get_history() para detectar los cambios sobre el objeto:

1
2
3
state = db.inspect(client_object)
for attr in state.attrs:
     hist = state.get_history(attr.key, True)

Por ejemplo, para el atributo name:

1
2
3
4
{
    'added': ['Company A'],
    'deleted': ['Company B'],
}

El mégoto get_history() nos devuelve un objeto sqlalchemy.orm.attributes.History que tiene los siguientes atributos:

  • added - listado de valores agregados al atributo de nuestro objeto
  • deleted - listado de valores eliminados del atributo de nuestro objeto
  • unchanged - listado de valores del atributo de nuestro objeto que se quedaron intactos
  • has_changes() - método que retorna True si no habían ningunos cambios de valor de nuestro atributo.

Ahora, usando la variable current_user de la biblioteca Flask-Login, podemos guargar el usuario que realizó los cambios:

signals.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from flask_login import current_user

def save_changes(target, action):
    try:
        state = db.inspect(target)
        changes = {}
        for attr in state.attrs:
            hist = state.get_history(attr.key, True)
            if not hist.has_changes():
                continue
            added = format_changes_value(hist.added)
            deleted = format_changes_value(hist.deleted)
            if added != deleted:
                changes[attr.key] = {
                    'added': added,
                    'deleted': deleted,
                }
        if changes:
            mongo.db.user_logs.insert_one(dict(
                current_user_id=current_user.id,
                action=action,
                table_name=target.__tablename__,
                object_id=target.id,
                changes=changes,
                created_at=datetime.datetime.utcnow(),
            ))
    except Exception as e:
        pass

def receive_before_insert(mapper, connection, target):
    save_changes(target, 'create')


def receive_before_update(mapper, connection, target):
    save_changes(target, 'update')


def receive_before_delete(mapper, connection, target):
    save_changes(target, 'delete')

Las temporadas

| Comments

A veces me parece que aquí el tiempo no se mueve. A veces me digo: “El verano pasado…” – o – “El próximo invierno”, y luego me doy cuenta que no hay ningún verano, ni invierno, ni primavera, ni otoño. Y eso da el sentido que no cambia nada, pero cuando uno mira atrás, así llega uno a horrorizarse de cuánto tiempo ha pasado.

Pero antes todo era diferente…

Todo el verano sentía euforia de que por fin hacía calor y todo alrededor estaba verde. Podía mirar por horas cómo se movían las ramas de los árboles con el viento, aspirar el aire lleno de olores y escuchar los sonidos del bosque. Parecía que todo el mundo estaba feliz: los niños por fin tenían sus vacaciones, sacaban sus bicicletas y patines y salían a jugar afuera, las muchachas se desvestían tratando de exponer más de su cuerpo al sol. Constantemente había que acordarse de que eso se iba a acabar pronto, de que teníamos muy poco tiempo para disfrutarlo, entonces había que aprovechar cada momento, y por eso la gente se enloquecía.

En junio o julio a veces hace tanto calor que parece que el asfalto se funde. Realmente, todo se funde. Pero en agosto la llegan los vientos del norte trayendo las decepciones. La mente todavía no puede aceptar que el verano se acabó tan rápido, y la mente no manda al cuerpo que tiene que vestirse. Entonces llegamos al otoño con mocos y tos.

El otoño es un poco incómodo, porque uno no sabe cómo vestirse: de día es todavía bastante cálido, pero por la mañana hace mucho frío. Muchísimo. Entonces todos andan muy abrigados con muchas prendas quitándose sus sacos uno por uno. Después del verano caliente, cinco grados centígrados se siente como uno estuviera en el Polo norte. Pero ese es el precio que pagamos para ver esa abundancia de colores: las hojas de los árboles pierden el pigmento verde y el bosque se convierte en un lugar mágico. Siempre trataba de no levantar mucho las piernas cuando andaba para hacer crujir las hojas cecas de los árboles.

Luego, inesperadamente (como cada año), llega la nieve, y es inesperado porque los servicios de aseo nunca están preparados. De verdad, nadie está preparado. Creo que es porque todos tienen muy por dentro una pequeña esperanza de que puede ser éste año el invierno no llegue. Los árboles se vuelven completamente siniestros y se ven como muertos.

El diciembre el mundo se queda sumido en la oscuridad. Lo más doloroso era despertarse por la mañana para ir al colegio:

A las siete de la mañana suena el despertador, uno abre los ojos, pero todo está completamente oscuro, como a la medianoche. Los ojos se cierran lentamente y te vuelves a terminar de ver el último sueño. Pero luego llega el dolor – alguien prendió la luz. La luz entra a través de los párpados cerrados, y es insoportable. Uno trata de entreabrir los ojos, pero el brillo amarillo les ciega, entonces uno tiene que cerrarlos inmediatamente. Así con los ojos medio abiertos uno desayuna, se viste y sale de la casa a la oscuridad para patullar por la nieve. Claro que el barrendero también tuvo pereza y lo había limpiado las calles, entonces tocaba de nuevo abrir el camino hasta el colegio.

Las imágenes tomadas de https://ssl.panoramio.com/user/2301915.

“Rewire”

| Comments

Hace unos meses me di cuenta de que casi no leía noticias de Colombia, y era bastante difícil empezar a hacerlo, a pesar de que ya vivía aquí por un tiempo significativo. En Rusia, empezando desde el bachillerato, me demoré varios años leyendo toda la basura que publicaban en la prensa y en Internet para al fin formar mi lista de periódicos favoritos y periodistas que escribían textos interesantes y relativamente objetivos. Mientras que aquí en Colombia todo era desconocido: los artículos que encontraba al principio me parecían muy secos, llenos de descripciones de los hechos y casi sin análisis. No los disfrutaba ni siquiera desde el punto de vista literario y al final, después de torturarme con varios textos de la revista Semana, pasaba a mi mundo cómodo y organizado de mis fuentes de noticias rusas preseleccionadas.

Claro que me demoré tanto en empezar a leer las noticias locales en parte por la falta de perspectiva: sin conocer los nombres de los políticos y sus pareceres, sin conocer bien la historia y la mentalidad de la gente, es bastante difícil percibir la nueva información que proviene de ese contexto histórico y cultural.

Analizando esa situación, me puse a reflexionar acerca del cosmopolitismo general, y qué tantas noticias recibimos acerca de los otros países. Así, encontré el libro de Ethan Zuckerman, llamado “Rewire”: Cosmopolitas Digitales en la Era de la Conexión.

Ethan Zuckerman es director del MIT Center for Civic Media, blogger y activista de Internet. En su libro él escribe acerca de cómo las redes sociales y las nuevas tecnologías cambian nuestras vidas. Ahora, cuando tanta gente tiene acceso a Internet, parece que estamos rodeados de textos y noticias de todo el mundo, pero en realidad, todas esas herramientas nos ayudan a encontrar lo que buscamos y ya queremos saber, pero no la información que debemos conocer y que sería útil para nosotros.

En estos días, prestamos más la atención a las noticias de nuestro barrio, a lo qué ha pasado con nuestros amigos de Facebook, y no a lo que está pasando al otro lado del océano. Zuckerman escribe: “La vida de nuestros amigos nos interesa más que la vida de algunos desconocidos.” Y eso se refleja en las fuentes de información que usamos desde los periódicos hasta las redes sociales: ellos no nos ayudan a encontrar lo que necesitamos saber, sino lo que queremos saber. Zuckerman hizo un análisis de los periódicos de del pasado, comparando con los de hoy y se dió cuenta de que a pesar de que tenemos televisión satelital e Internet, que nos permiten transmitir la información desde cualquier parte del mundo, nos enfrentamos con una imagen del mundo más limitada que antes. Ahora el problema no está en la disponibilidad de la información, sino en la atención que estamos dispuestos a darla. Y ese problema se ve agravado por nuestro deseo natural de prestar más atención a lo que está pasando en el nuestro entorno y lo que tiene impacto directo sobre nosotros, nuestros amigos y familiares.

Zuckerman dice que debemos empezar a vernos no sólo como a los ciudadanos de un país en particular, sino también como los ciudadanos del mundo. Pero aunque uno de los mayores logros de Internet es la posibilidad de encontrar en la red las cosas más inesperadas, en la práctica lo que encontramos más a menudo, es algo que ya está cerca a nuestra casa. Al leer demasiados artículos de los autores que comparten nuestras opiniones, y al comunicarnos exclusivamente con las personas de ideas afines corremos el riesgo de radicalizarlos.

El proyecto de Ethan Zuckerman Global Voices: es.globalvoices.org
El libro Rewire: www.goodreads.com/book/show/16233761-rewire

Imagen: www.flickr.com/photos/brewbooks/

Somos de una sangre por Roman Super

| Comments

Somos de una sangre, tú y yo" - dijo Mowgli...

Rudyard Kipling El Libro De La Selva

La entrevista con Roman Super y la periodista Elena Vanina para la revista Afisha. Traducción a español:

Tu libro es no es sólo una historia acerca de cómo tú y tu esposa Yulia vencieron el cáncer. Es una historia de amor extraordinaria. Linda y asombrosa.

Simplemente, es que yo siempre tuve suerte con las niñas. Con mi mamá, que alguna vez también fue niña. Con mis profesoras en el colegio y en la universidad, quienes también fueron niñas e alguna época. Y con mi esposa, quien era niña, cuando nos conocimos.

¿Eso pasó hace mucho tiempo?

Sí. Yo estudiaba en el colegio y tenía ganas de ingresar a la universidad y asistía a los cursos para los postulantes, que daba una estudiante de la facultad de periodismo. Yulia era amiga de esa muchacha y un día por casualidad entró al salón donde estaba yo. Así nos conocimos. Después yo la quité a su novio, con quien iba a casarse. Después yo mismo me volví su novio, luego el esposo, y más tarde el papá de nuestro niño. Así fue.

Ustedes eran jóvenes, estaban felices y hacía poco habían tenido un hijo. Ustedes esperaban de la vida cualquier cosa, pero no eso. Y de repente les cae un diagnóstico horroroso - el cáncer. ¿Recuerdas cómo fue eso?

Me asusté mucho. Empecé a imaginar un funeral, un cementerio. Empecé a imaginar cómo iba a criar a nuestro hijo solo y trabajar al mismo tiempo. Por supuesto, en una situación como esa, lo primero que uno debe hacer es llamar a la persona que pueda decirle qué hacer. En mi caso esa persona era Katya Gordeeva (una autora la las películas documentales y del libro “Superar el cancer”), quien es una experta en la materia. Nosotros hablamos, y Katya me hizo aclarar mis pensamientos. Y eso ayudó. Tú estás nervioso, preocupado, temes a todo. Y todos tus temores te distraen de las cosas en las cuales tienes que concentrarte. Y tú tienes que entender, que toda tu vida posterior va a convertirse en un trabajo poco agradable, que va a sacar muchas fuerzas de ti. Tendrás que tranquilizarte constantemente.

El miedo. En Rusia, perece, que para todos es un sinónimo de cáncer. Una vez estaba caminando en Berlin y hacía mi corría un grupo de personas enfermas con unas camisetas de colores vivos con la frase “Vencemos el cáncer.” Ellos sonreían. Los vi y en ese momento de la forma automática miré al otro lado: no-no, por supuesto, no tengo miedo, simplemente al otro lado de la calle hay una cosa muy bonita. Se impone una sensación, de que esconderse es un reflejo universal.

Es un problema muy grande. Mi suegro es una persona muy enferma, y ante los ojos de él su hija se enfermó, estaba en el hospital y se curó, pero no sé qué tendría que pasar para que él vaya al hospital. No importa si es por alguna cosa pequeña o por algo grave. No sé cómo explicarlo de una forma racional. Y hay muchos ejemplos de ese estilo. Pero todo debería ser diferente: te asustaste, entonces corre al doctor. Probablemente, la gente que tiene recursos, debe difundir esa idea. Yo escribía mi libro y pensaba, que era posible que en el futuro se pueda tomarlo como un manual. Cuando viene una desgracia, tú no sabes qué hacer, a dónde ir, en qué pensar. Es muy fácil volverse loco. Yo quería escribir acerca de eso. ¿Mi libro o el libro de Katya Gordeeva son capaces de cambiar algo al nivel estructural? No lo creo. Pero si incluso mil de personas miran el problema de otra forma, será un éxito.

Cuando yo vi a mis conocidos, cuyas parejas tenían cáncer, a veces me parecía que la persona enferma se mantenía más firme comparando con sus familiares. ¿Es así en realidad?

Sí, es verdad. Lo primero que uno quiere hacer es desanimarse, estancarse y escapar del problema. Pero así llegaría el fin. Nada resultaría. Yo vi cómo Yulia estaba bajo los cuentagotas, que la quemaban desde adentro, la afectaban mucho físicamente. Durante esos seis sesiones de quimioterapia ella se quejó o dio rienda suelta a sus emociones sólo una vez y media o dos veces. Yo lo hacía con más frecuencia.

¿Tu hijo fue alguna vez al hospital donde estaba tu esposa?

Por supuesto que no. Yo vi unos niños por allá, pero me parece que no es lugar para ellos. Luka era demasiado pequeño para explicarle que es oncología. Él entendía, que la mamá estaba enferma, que en algún momento se volvió clava. Pero tratábamos de volverlo una broma: “ay, la mamá de volvió calva. La mamá se enfermó y luego se recuperó.”

¿Era difícil quedarte solo con el hijo?

El tratamiento de Yulia cayó en los meses de verano, entonces la gran parte del tiempo Luka estaba en la dacha con sus abuelos. En este aspecto tuvimos suerte. Por otro lado, yo ya tenía experiencia en estar con mi hijo sin la mamá. Un tiempo antes la mamá de Yulia también tuvo cáncer. Así somos de “suertudos”. Yulia era como la enfermera de su mamá, y yo estaba con Luka. Entonces me acostumbré. Lo más difícil era actuar frente el niño como si no hubiera pasado nada grave. Con la mitad de tu cerebro tienes que pensar en los helados, la plazoleta de juegos, diversiones y los dibujos animados. Y con la otra - que la mamá de este niño cayó en desgracia. No es fácil, pero es lo que pone las cosas en su lugar. Tú revaluaslas prioridades en tu vida. Después de que Yulia se enfermó, no hemos peleado. Ni una sola vez. Y Luka resultó la fuente principal de las fuerzas para nosotros. Nos dimos cuanta de que nos gustaría un día estar en la fiesta de su matrimonio juntos, que queremos ayudarle a escapar el servicio militar, que queremos mostrarle las películas que nos gustan y recomendarle libros…

¿Qué fue lo más difícil durante el tratamiento?

Lo más duro empezó un año después del tratamiento. La radioterapia es como un pequeño Chernobyl para una persona. Pasa un tiempo, y te empiezan a alcanzar los efectos secundarios, de los cuales no te habían advertido. Se daña la tiroides, dejas de poder controlar tu peso, no comes nada, pero igual te engordas, o de repente te despiertas por la noche con la taquicardia, que normalmente no le da a una persona. Y eso asusta mucho. Porque pensabas que ya te curaste, que empezó una vida nueva, que todo lo malo ha quedado atrás. Y de repente tienes esa tensión como el de un caballo. El tratamiento del cáncer también incluye un periodo de la rehabilitación, el cual en Rusia nadie se encarga. Te hemos curado el tumor y adiós. Que pena. Y cómo vas a seguir viviendo es tu problema.

Al mirar ese camino que ustedes han pasado juntos, ¿se puede decir que te enseño algo?

La cuestión principal, como me parece, que tienes que preguntarte en una situación así no es ¿por qué? Es ¿para qué? Porque para la pregunta ¿por qué? no hay respuesta. Y sobre la pregunta ¿para qué? vale la pena reflexionar. Acerca de eso escribí en mi libro. Después de la enfermedad trato de pasar cada segundo libre con mi familia, simplemente siempre queremos estar juntos. Antes no era así. Ésta visa es muy correcta. Ella da origen a muchos sensaciones agradables, de las cuales nos estamos privando. Puede ser que para eso.

El libro de Roman Super en Bookmate: https://bookmate.com/books/IRInDaCY

Cómo obtener el nombre del día de la semana en Python

| Comments

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
> import calendar
> calendar.day_name[0]
'Monday'
> calendar.day_name[1]
'Tuesday'
> calendar.day_name[2]
'Wednesday'
> calendar.day_name[3]
'Thursday'
> calendar.day_name[4]
'Friday'
> calendar.day_name[5]
'Saturday'
> calendar.day_name[6]
'Sunday'

Si para nosotros la semana empieza el Domindo, podemos escribirlo de la siguiente forma:

1
2
3
4
5
6
7
> sunday = 0
> calendar.day_name[sunday - 1 % 7]
'Sunday'

> tuesday = 2
> calendar.day_name[tuesday - 1 % 7]
'Tuesday'

Espías rusos

| Comments

La pareja de los agentes de los servicios de inteligencia nacidos en Rusia – Andrey Bezrukov y Elena Vavilova – llegaron a Canada para cumplir su misión bajo los nombres de Donald Heathfield y Tracey Foley [1], y empezaron a construir su nueva vida. Posteriormente ellos tuvieron dos hijos: Tim y Alex Foley, a quienes recientemente les entrevistó el periodista de Guardian Shaun Walker [2]. Los muchachos le contaron acerca de su vida después de la revelación de sus padres y su trauma psíquico: no era fácil de aceptar a los 20 años de edad que toda la vida de ellos era una mentira…

En el año 2010 arrestaron a diez residentes de EEUU bajo la acusación de espionaje. Su actividad se reveló a causa de la traición de uno de los empleados del Servicio de Inteligencia Exterior de la Federación de Rusia [3]. A Bezrukov y Vavilova les arrestaron en su casa en Cambridge (en el estado de Massachusetts). Todo era como en una película: un grupo armado irrumpió violentamente en casa con el grito “¡FBI!”, agarraron a los espías y los llevaron dentro de unos carros negros. A los niños les dijeron que tenían un cuarto de hotel reservado para ellos, porque iban a efectuar un registro en la casa. Los policías llevaron absolutamente todo, incluyendo las fotos y la consola de videojuegos. Todas las cuentas bancarias de Donald y Tracey fueron bloqueadas, por eso los muchachos se quedaron sólo con el efectivo que tenían en sus bolsillos en ese momento [4].

Al principio, a los muchachos les parecía que todo eso era un error, y que los viajes frecuentes de negocios de su padre hicieron desconfiar a la policía. Pero resultó que no hubo ningún error y sus padres de verdad eran unos espías rusos.

Según Tim y Alex, ellos tenían una vida normal, incluso un poco aburrida…

Tracey Foley dio a luz a su primer hijo Tim en 1990. Después de un año del nacimiento de Alex la familia se mudó a Paris, donde un tiempo después Donald obtuvo su MBA. Al volver de Europa, él entró a la Escuela de Gobierno John F. Kennedy de la Universidad de Harvard, y empezó a trabajar en una consultaría. Tracey era un ama de casa, pero cuando los niños crecieron, ella empezó a trabajar como agente inmobiliario. Según Tim y Alex, ellos tenían una vida normal, incluso un poco aburrida: en Boston, a donde su familia se mudó en 1999, ellos iban al colegio, salían con sus papás a vacaciones y a veces recibían regalos de sus abuelos de Canadá. Los muchachos vieron a sus abuelos sólo una vez en su vida, pero cuando eran todavía muy pequeños. Probablemente por eso ellos no se dieron cuenta de que los abuelos no sabían hablar inglés. Las fotos con la nieve canadiense en el fondo, que les enviaron, fueron hechos en Siberia, de donde en realidad era su padre. En 2008 la familia recibió la ciudadanía estadounidense, pero Tim y Alex siempre se sentían como ciudadanos canadienses y estaban orgullosos de su patria.

En el verano 2010, cuando arrestaron a sus papás, a los muchachos les dieron pasaportes rusos y ellos tuvieron que irse a Moscú. Tim se convirtió en Timoféy y Alex – en Alexander Vavilov. Como decía Tim, se les dificultaba mucho pronunciar sus nuevos nombres.

Entrevista con Andrey Bezrukov publicada en la revista Experto [5]:

– Dicen que durante todo el tiempo de su servicio usted no dijo ni una palabra en ruso. ¿Es verdad?

– Sí, es verdad. Es la particularidad del trabajo ilegal. Tú no puedes hablar tu lengua materna incluso en la casa, todo está bajo un autodominio. Aunque después de unos años de trabajo eso se vuelve algo natural. Incluso tienes sueños en otros idiomas.

– ¿Su esposa también trabajaba con usted?

– Sí, mi esposa Elena es una espía profesional y estuvimos trabajando juntos hasta el último día.

– Dinero, el negocio, que hay que mantener – es toda una vida completa en el extranjero…

– Sí, por supuesto. En general , al verlo desde un punto de vista profesional, cuando una persona se encuentra en el exterior en una situación como la mía, se tiene que construir una nueva vida: resolver la situación económica y familiar. Prácticamente, esa persona empieza su vida desde ceros. Se puede decir, que te sientes como una persona diferente. Nosotros con mi esposa nos fuimos a la comisión de servicio sólo con una maleta. Tuvimos que graduarnos de nuevo de universidad, buscar trabajo, crear el negocio y no solo uno. Y todo sin ninguna ayuda y con los recursos mínimos – tú entiendas la situación en la que estaba nuestro país en esa época. Y a pesar de eso, teníamos que cumplir nuestra misión – realizar el trabajo que nos dieron.

La imagen tomada de nytimes.com

SQL to SQLAlchemy conversions

| Comments

Some examples on how to convert raw SQL to SQLAlchemy query:

SELECT

1
SELECT COUNT(*)
1
2
> from sqlalchemy import text, func
> db.session.query(func.count()).all()

Add labels

1
SELECT COUNT(*) as requiests
1
2
3
4
> rows = db.session.query(func.count().label('requests')).all()
> row = rows[0]
> row.requests
12

SUM function

1
SELECT SUM(status) as rides
1
2
3
4
> rows = db.session.query(func.sum(Book.status).label('books')).all()
> row = rows[0]
> row.books
12

COUNT and DISTINCT

1
SELECT COUNT(DISTINCT(author_id)) as authors
1
2
3
4
from sqlalchemy import distinct
> rows = db.session.query(
    func.count(distinct(Book.author_id)).label('authors')
).all()

Query a date range (BETWEEN)

1
2
3
4
> now = datetime.datetime.utcnow()
> db.session.query(Book).filter(
    Book.created_at.between(now - datetime.timedelta(hours=5), now)
).all()

Conditional SUM

1
SELECT SUM(((status IN (4, 7))::int)) as books ...
1
2
3
4
5
6
> from sqlalchemy.sql.expression import case
> db.session.query(
    func.sum(case([(Book.status.in_((4, 7)), 1)], else_=0)).label('books'),
).filter(
    # ...
).all()

IN clause

1
2
3
> Book.query.filter(
    Book.status.in_((BOOK_CONFIRMED, BOOK_FINISHED)),
).count()

For NOT IN just add ~ symbol:

1
2
3
> Book.query.filter(
    ~Book.status.in_((BOOK_CONFIRMED, BOOK_FINISHED)),
).count()

Labels and AS clause

In this example we’ll make a fingle table out of books and authors tables, labeling books.title and authors.last_name columns as name:

1
2
3
SELECT books.title AS name
FROM books UNION ALL SELECT authors.last_name AS name
FROM authors

And that’s how out SQL converts to SQLAlchemy:

1
2
3
4
5
db.session.query(
    label('name', Book.title)
).union_all(db.session.query(
    label('name', Author.last_name)
)).all()

Now we can also filter our result table by ǹame column:

1
2
3
4
5
db.session.query(
    label('name', Book.title)
).union_all(db.session.query(
    label('name', Author.last_name)
)).filter_by(name='some string')

LIKE and ILIKE

1
2
Book.query.filter(Book.title.like('%tale%')).all()
Book.query.filter(Book.title.ilike('%tale%')).all()

GROUP BY

Group books my month name:

1
2
3
4
SELECT to_char(created_at, 'Mon'), count(created_at)
FROM books
GROUP BY to_char(created_at, 'Mon')
ORDER BY to_char(created_at, 'Mon')
1
2
3
4
5
| Month    | Count |
|----------|-------|
| January  | 12    |
| March    | 29    |
| November | 8     |
1
2
3
4
5
6
books = db.session.query(
    func.to_char(Book.created_at, 'MM'),
    func.count(Book.created_at)
).group_by(
    func.to_char(Book.created_at, 'MM')
).order_by(func.to_char(Book.created_at, 'MM')).all()