November 5, 2018

Learning how to parse

Intro 

I already forgot why my compilers class was not good, it was the teacher or it was not in my speciallity in electronic. But I heard once that if you know how to parse files you can do any challenge that presents.

I think it is not sure but I think it is a great skill that I want to have. 4 months ago I did some work generating code in Golang and I feel to generate code and compile it is a great feeling.

What and how decide to learn parsing

Well I always wanted to read the official compilers book (the one with the red dragon) but it starts with lex and flex, it is interesting but I want something newer. And because I just want the skill. I was fine with flex and bison but it turns out that I can't parse utf8 in a simple way and the actions could be only in c/c++. So I decide to start from the end. I will learn Antlr4.


Only Perl can parse Perl 6

Right now I am working with Perl and I was wondering: "should be nice if you can parse Perl to other languages" It is a hard task to parse any language to other but. After google and read  I found that Perl can only be parsed with Perl. So I was thinking in stop wondering. But there is a little hope.

It is called PPI Parse, Analyze and Manipulate Perl (without perl) that was interesting. And this is an example:

PPI - Parse, Analyze and Manipulate Perl (without perl)

There is other plan where I want to use the parser skill.

But that is other story

September 10, 2018

flow.state@work

I just change to a new gig and it feels awesome, you know this smell a new is so nice. 

When I told about my new job to a friend from my first work ever he just laugh and tag me as millennial. I feel a little contraried but at the end he was right so I continue with my life.

The things I like most is all this culture around Linux, there are very talented people in the company so I am actually learning new stuff related to Linux.
So this use of ssh and servers and commands and command line is like wow I enjoy it. 

So today I noticed that I was in the flow state when I finished and felt good about the work that I had done during this day when I suddenly remember that I need to pick up my daughters. And I was 8 minutes late.

June 19, 2018

What I like about go generate

I like when a project that uses it, compiles and runs before and after go generate. That is a powerful concept, in the example you have constants shown as numbers when they are printed, but after go generate the stringer generated prints the names of that constants.

Go generate is like having make instructions inside your code. Of course you need a lot of imagination to think that a go generate comment is equivalent to  a makefile instruction.

Besides there is not dependency control at all. Like when run depends on build and stuff like that. But it allows you to run commands using the command go generate.

Anything else are just helper functions

Well I am over simplifying here, the fact that go comes with packages to parse, modified and write updated code is very nice but that part could be done with any other tools( like antlr or lex and yacc).

In the last project

It was decided to have a config to describe what to take from a HTTP request (get something from query, header or cookie), then we describe functions that receive that data and returns other data and finally we specified which data need to be stored and how.

The POC

So the first implementation was a Proof of concept in which show how to do all the process using a config file. In the past a new service was created to do the same work and there was 4 or 8 of them in production. So the POC shows that it would be easier to port them to this new service just by adding some simple configurations.

The first implementation

The first implementation was though to cover any case possible. It will be super generic code. The idea was just implement what is needed but left all the indirections in place so it would be easy to just implement other parts. 

This didn't finish good, because time bugdet issues. We finish with a room with foundations of a cathedral that had space for the future buttress that maybe would not be required. There was a communication problem because there was time.

The second implementation

So it starts as a POC but it was so simple that it stays and now is running in production. Basically now that the config was well specified, A generator was created to output http.Handlers base on configurations.

The service runs without go generate (not handlers registered). But after it runs, it register the handlers.

All the indirections were removed. Thanks that I received an advice from someone that I respect, he recommend just make something that works and test it, refine and test it and so on.

My life were never more easy I was preparing a service for the future but the future is uncertain.  The only thing we can do is fail fast (Implement and receive feedback as soon as possible.). 

Which is now my new motto.

June 8, 2018

How I became a golang programmer

Tldr: by casualty

Well that's it, I was programming in python for 4 years, in a great team when there was a project to try to port one of our services in go. A friend and I started the port effort.

In parallel there was other team doing the same but in Scala. And it was kind of a competition.

The mistakes

I wanted to port all the functionality. For a POC I think is not good to implement all the features. Because you have like a month to finish your port, and you are trying to implement 5 years changes.

Worse I took function by function and I tried to implement them in go. Today I know that I should focus only in produce a  "minimum viable product". Then extend it when needed.

The struggle

 It's difficult to switch your mind from a dynamic typed language like Python to other that is strong typed. The project was programmed in the language, which means that was using a lot of specific features it.

My approach to learn

I didn't really dedicate time to learn the language, I thought that I would just program and ask google how to do stuff but in go. Go by example was very cool resource but incomplete (now I think is complete, but at that time not)

That was a bad idea. Because my mind was so oriented to Python, that I didn't realize like in a spoken language sometimes there is not a direct translation.

The balance

After some time, I started to forget Python and my mind just switch to solutions with the tools that go have. I improved my fluidity. (I did the advent of code 2017 in go, that helped a lot). In other words the old advice is true. There is nothing better than practice, practice and practice.

And then when you kind of start to be intermediate in go, your old experience "kick in" and you start to think "hey I can do that in go with this" That experience was amazing.

Like a fractal

For me golang is like a fractal that looks very simple when you look it from far away. But oh boy! each time I have an interest I can dig in and I can't see the bottom. It is like a fractal each time you zoom in there is more content.

The past week I was interested to learn templates and go generates and wow, is just very cool what you can do with that. And I felt that I only saw the tip of the iceberg.

Go won

Well that was relative at the end, the go project was finished in a fraction of the time of the Scala team. (They were using play framework and during the time of the project a new version appears that change everything, the team wanted to jump in to the new changes. Sometimes the features stability of go is underestimated).

But

Scala was faster due the implementation of couchbase lib, I think with more time we could improve the performance. But the experiment end there.

The team continue working in python and I moved to other company as a go developer.

August 3, 2012

¿Qué fue primero?


En una desértica ciudad en el norte de México hay un joven que en dos días cumplirá la mayoría de edad y al igual que todo joven no puede evitar hacerse preguntas sobre el futuro -que en su caso es sobre el pasado, pero eso, él no lo sabe-.

Raul es un chico normal o promedio que ha crecido en una situación económica precaria, su padre tiene que trabajar muy duro al igual que su madre, para sacar adelante a su único hijo.

Su hijo ha escuchado en la escuela rumores sobre lo que sucede con los que cumplen la mayoría de edad y se pregunta como en pleno año 2000 aun hay ritos para dejar de ser niños y convertirse en hombres.

Esta estrictamente prohibido que los jóvenes se enteren de lo que les va a suceder, debido a que muchas cosas pasaran en muy poco tiempo. Y solo pueden confiar en adultos para que el secreto que se devela al cumplir la mayoría de edad sea guardad como se debe.

Pero a que padre no le gustaría ayudar a su hijo preparándolo para lo que se avecina. Es algo tentador en un momento en el que la información seria mas valiosa que el oro. Pero de que serviría ayudar, a lo mejor la ignorancia seria el mayor regalo para su hijo.

Raul por fin cae dormido después de llegar a una decisión preguntar a su padre sobre los rumores.

#
A la mañana siguiente Raul esta listo para hacer las preguntas pertinentes.

-Buenos días papá, ¿Como amaneciste?
-Muy bien, un poco cansado ¿por qué preguntas?
-No es nada simplemente me preocupo por ti.
-Si claro, ¿que quieres? tu no eres así.
Raul esta ansioso por preguntar pero se contiene pues de precipitarse no obtendrá la información que tanto desea conocer.
-Papá ¿qué va a pasar mañana?
-Esa es una pregunta que no puedo contestar ahora, a lo mejor mañana.
Esa es una respuesta que pudiera dejar al niño triste y decepcionado porque lo mas seguro es que ese mañana nunca llegue, pero en este caso su padre hablaba en sentido literal.
-Bueno es que no se que va a pasar mañana que cumpla los 18 años.
-No te preocupes, nada puede ir mal mañana.
-Eso lo dices porque ya pasaste por eso.
-No creo que debas preocuparte pero debes prometer no contar lo que te voy a contarte.
-¿En serio? ¿Me lo contaras? ¿Estas bromeando? No seria justo que jugaras con mis sentimientos precisamente cuando mis sentimientos están tan perplejos por todas las ideas que me imaginó. Y con lo que se cuenta en la escuela.
-Creo que ya es hora de que estés enterado. Ademas tengo que transmitirte un mensaje del abuelo.

#
El padre de Raul aunque parezca sorprendente nació años después que su hijo, eso podría parecer un sin sentido de no ser por que en 1981 se invento el primer teletransportador y en 1983 se invento la maquina del tiempo. Grandes inventos si me permiten decirlo pero eran aparatos muy diferentes a como los conocemos en las historias de ficción.

Cuando se invento la maquina del tiempo esta, solo enviaba cosas vivas o inertes que estaban dentro, no las enviaba con todo y maquina del tiempo. Si lo piensas mejor es como un microondas tu metes tu comida en el microondas y no se calienta la comida y el microondas. Lo mismo pasaba con la maquina del tiempo y el teletransportador.

Tu creerías que se podrías hacer una maquina del tiempo mas grande y poner adentro otra maquina del tiempo y dentro de esta otra podrías poner a una persona, pero construir dos maquinas del tiempo para un viaje no ha sido rentable antes, ni mucho menos ahora. Aun con la ciencia avanzando y los costes disminuyendo.

Hubo héroes y heroínas que al igual que Laika sacrificaron su vida para descubrir lo que se sabe ahora. Y los seguirá habiendo mientras no sepamos la información que necesitamos. Para seguir adelante.

Bueno antes de pasar a lo siguiente hay que comentar que no fue sino hasta el 2004 cuando se pudo integrar la maquina del tiempo y el teletransportador en un solo aparato capaz de enviar cosas en el tiempo y teletransportarlas al lugar en que la tierra se encontraría en el momento de aparecer.

Lo que nos lleva a que en realidad el aparato este, fue funcional hasta el 2010 cuando se pudo calcular con cierta precisión la posición de la tierra en el tiempo para ello se tuvo que inventar un sistema de coordenadas que fuera independiente de la tierra. Usando cálculos en cuatro dimensiones y un origen en movimiento perpetuo.

El aparato revoluciono la manera en la que se hicieron los viajes en el mundo pero no fue hasta el 2012 que se tuvo listo para su uso publico y masivo.

Podrías pensar “pero que personas tan caritativas dando a las masas un gran invento que no debería tomarse a la ligera”, pero no fue la caridad el motivo sino la necesidad. Y es que si recuerdas el mundo en el que creciste, cualquier cosa que sea la salvación de toda la raza, primero la venderían cara, luego se abarataría, y después seria de uso común.

Sin embargo no era un dispositivo que uno tuviera en la cochera de la casa, no, tampoco te imagines llendo a trabajar por la mañana aunque te levantaras a la hora que quisieras. No, en realidad se construyeron terminales y salas de espera. Y convenientemente los aeropuertos dejaron de tener sentido y se les nombro Garitas.

Explicar porque hubo tal necesidad nos lleva al siguiente evento significativo. El 12 de Diciembre del 2012 se descubre el meteorito que hará impacto con la tierra. Lo suficientemente grande para acabar con la vida en la tierra. Con esas noticias varios países se rindieron y se dio el caos. Y es cuando el meteorito ya se puede ver a simple vista -inclusive a luz de día- cuando surge un plan. Y no solo un plan sino también un país, el país que sabia que hacer, no había tiempo para unirse a las nuevas religiones que se habían creado, no había tiempo para pelear -pues no tenia sentido- pero si tuvieron tiempo para unirse y formar el Gobierno Mundial.

El gobierno socialista que nacería de las cenizas de otros países capitalistas, cenizas en lenguaje figurado pues el meteorito aun no había caído.

¿Qué si se opusieron? Claro que se opusieron, pero como no había tiempo. Se fundo el Gobierno Mundial que daría ciudadanía a todos los habitantes del 2012 y les conseguiría el asilo en diferentes épocas del pasado dependiendo del poder adquisitivo de las personas y de sus habilidades en el nuevo régimen.

Básicamente había dos lineas de investigación que eran vitales para la supervivencia, las investigaciones que tenían que ver con la simulación de la caída del meteorito y saber que se salvaría, y la otra conocer cuando se podría considerar a la tierra otra vez segura. Por eso seria normal ver en tu formulario de mayoría de edad, la posible ocupación de kamikaze.

De esta forma las personas al cumplir la mayoría de edad tenían que escoger el periodo de tiempo en el que querían vivir con la inflación y la economía del 2012. Y era acumulativa a tus hijos, por ejemplo si tu tienes un hijo en 1980 después de ser reubicado, tu hijo tendrá que vivir en una economía equivalente a la inflación de 2030.

Porque aunque el Gobierno Mundial era dueño de todos los recursos naturales que quedaron en el 2012 tenia que explotarlos antes de que fueran destruidos y tampoco podía permitirse el lujo de que sus ciudadanos le quitaran en el pasado los recursos que utilizaría para negociar con los países del pasado, que alojarían a sus ciudadanos. Pero el Gobierno Mundial lo justifico de otra forma, pues no era justo que una persona de Mexico ganara lo mismo que una persona del Gobierno Mundial siendo que esta ultima usaría el territorio que le compartiría la primera.

Y de esta forma el Gobierno Mundial firmo tratados con los países en diferentes épocas. Y mediante un sistema económico socialista y con la inflación y devaluación a los niveles del futuro se permitió a estos ciudadanos vivir en el extranjero. Aunque casi siempre coincidía con el mismo lugar geográfico.

#

Pero lo mas importante que quería contarle a su hijo es que su abuelo trazo otro plan, un plan para nuestra familia y todo parte de una duda. Y es que el abuelo recuerda que cuando el vivió antes de ser reubicado, no había dinosaurios descubiertos en formas de fósiles.

Y están los kamikazes personas que vive una vida sin inflación y cuando viajan, lo hacen no al pasado si no al futuro, la idea es que se envíen tantos kamikazes que estos sean capaces de desarrollar la tecnología necesaria para viajar en el tiempo, y poder avisar al Gobierno Mundial cuando la tierra podrá ser habitada nuevamente.

No es tan fácil, pero tampoco es tan difícil, es cierto que los kamikazes en caso de llegar a una era en la que el planeta esta recuperado, llegarían al equivalente a la edad de piedra o menos, pero con ellos llevan información sobre la tecnología. Entonces como pueden ver no es fácil, pero tampoco es tan difícil.

Y si no hay guerras en el futuro la idea es que desde el otro lado, puedan decir  cuando es posible que el Gobierno Mundial pueda dejar de enviar a su gente al pasado y lo haga al futuro como debe ser.

Pero ahí es donde tu abuelo empezó a reunir rumores, que no son muchos, y me los paso a mi un día antes de que yo cumpliera la mayoría de edad y yo te los paso a ti.

Tu deber hijo mío es seguir investigando descubrir quien miente, si los kamikazes o el Gobierno Mundial y es que realmente cualquiera puede ser un kamikaze por eso es extraño pero y si los primeros dinosaurios en realidad no hayan sido del pasado sino del futuro y que cuando la raza humana se extinguió fueron los dinosaurios los que surgieron y no al revés. ¿ Significaría esto, una prueba de que -en el futuro- los kamikazis ya tienen construida la maquina del tiempo?

Tu abuelo sospecha que en realidad son los kamikazes los que enviaron a los dinosaurios al pasado remoto antes del meteorito que se supone los destruyo.

No es posible contactar a tu abuelo tan fácilmente, pero seguramente tendrá unos 10 años ahora, pero si tu, o tu hijo o el hijo de tu hijo logran saber quien miente, deben avisarle a esta dirección y fecha justo antes de que sea mayor de edad y toda nuestra familia podría estar viviendo en el futuro pero antes debemos conocer quien miente. O estar seguros que no es una mentira.