Blog personal

Gonzalo Murillo

Author: gonzalo (page 1 of 7)

NFS version 3

https://docs.oracle.com/cd/E19620-01/805-4448/z4000027624/index.html
https://tools.ietf.org/pdf/rfc1813.pdf

Estimación de zonas

 

John Carmack interviews

This is a document with John Carmack interviews

http://fd.fabiensanglard.net/doom3/pdfs/johnc-interviews.pdf

Reamde de Neal Stephenson

Me gusta la ciencia ficción y mis autores favoritos son Neal Stephenson , Willian Gibson y Bruce Sterling.

Empecé a leer la novela “REAMDE” de Stephenson durante un viaje a Noruega en 2013, y estamos acabando 2017, ¡así que he tardado casi cuatro años en leerla!

Este retraso no es debido a que no me gustara, sino que al  haberla leído de forma tan relajada, he tenido que empezar varias veces desde el principio para recordar la trama y personajes principales.

Una novela, desde mi punto de vista, muy recomendable, con el particular estilo de Neal de mezclar e interrelacionar muchos tecnologías y conceptos diferentes.

Estilo barroco, humor y tecnología ¡ La he disfrutado!

A por la siguiente, que posiblemente será Criptonomicón, otra novela que dejé inconclusa.

 

 

¿Cuál es la forma más Pythonica de abrir un fichero?

En Python se habla de que algo es “Pythonic” o “Pythonica” como yo lo he traducido,  cuando cumple con la filosofía del lenguaje Python.

¿Y cuál es dicha filosofía?

Muy sencillo, si abrimos el interprete de Python y tecleamos “import this”, lo veremos:

>>> import this

The Zen of Python, by Tim Peters

Beautiful is better than ugly.

Explicit is better than implicit.

Simple is better than complex.

Complex is better than complicated.

Flat is better than nested.

Sparse is better than dense.

Readability counts.

Special cases aren’t special enough to break the rules.

Although practicality beats purity.

Errors should never pass silently.

Unless explicitly silenced.

In the face of ambiguity, refuse the temptation to guess.

There should be one– and preferably only one –obvious way to do it.

Although that way may not be obvious at first unless you’re Dutch.

Now is better than never.

Although never is often better than *right* now.

If the implementation is hard to explain, it’s a bad idea.

If the implementation is easy to explain, it may be a good idea.

Namespaces are one honking great idea — let’s do more of those!

>>>

Así que algo es “Pythonic” o “Pythonico” si cumple el Zen del lenguaje Python.

Partiendo de esa premisa, ¿cuál es la forma más “Pythonica” de usar ficheros?

Supongamos que queremos leer de un fichero.
La primera forma en la que pensamos, sería algo así:

f = open('file.txt')
a = f.read()
print a
f.close()

Sin embargo esta forma, no es considerada Pythonica

¿Por qué motivo?

Porque si ocurre una excepción el fichero no será cerrado.
¿Cuál es entonces la forma “Pythonica” de hacer esto?

Con la sentencia with

with open(‘file.txt) as f:
for line in f:
print(f)

Lo que asegura with es que si se produce cualquier excepción dentro del bloque with, el fichero se cerrará, y por eso se considera la forma Pythonica de hacerlo.

Función enumerate en Python

La función enumerate es una función incorporada al propio lenguaje Python que permite añadir un contador a un elemento iterable.

Veamos un ejemplo:

Supongamos que tenemos la siguiente lista que contiene frutas

frutas=[‘pera’,’manzana’,’platano’,’ciruela’,’fresa’]

Queremos recorrerla, e indicar el número de ocupa esa posición dentro de la lista.

¿Cómo conseguimos hacer esto en Python?

Con la función incorporada enumerate

for pos, fruta in enumerate(frutas):
print(pos,fruta)

Si ejecutamos el código anterior, obtenemos la siguiente salida:

/usr/bin/python2.7
(0, ‘pera’)
(1, ‘manzana’)
(2, ‘platano’)
(3, ‘ciruela’)
(4, ‘fresa’)

Como podemos apreciar el contador empieza en 0. Si queremos que el contador empiece en otro número cualquiera, podemos indicárselo a la función enumerate.

Supongamos que queremos que empiece en 1, en lugar de en 0.

Tendríamos que indicárselo a la función enumerate de la siguiente forma:

for pos, fruta in enumerate(frutas,1):
print(pos,fruta)

Esto cambiaría la salida del programa del siguiente modo:

/usr/bin/python2.7
(1, ‘pera’)
(2, ‘manzana’)
(3, ‘platano’)
(4, ‘ciruela’)
(5, ‘fresa’)

Process finished with exit code 0

Como podemos ver el contador en este lugar empieza en 1, y no en 0.

Bucles en Python al estilo C

La forma habitual de recorrer los elementos de un conjunto en Python es la siguiente

for variable in secuencia:
	Declaración1
	Declaración2	
	...
	Declaraciónn

Así por ejemplo, si tenemos una lista, y queremos visualizar todos sus elementos, la forma de hacerlo sería la siguiente:

lista=[1,2,3,4,5,6,7,8,9,10]

for elemento in lista:

print(elemento)

Al ejecutar el anterior script Python, obtendríamos lo siguiente:

/usr/bin/python2.7
1
2
3
4
5
6
7
8
9
10

Process finished with exit code 0

Es decir, se ha recorrido cada elemento en la lista, y cada uno de ellos se ha visualizado por pantalla.

No obstante, los que venimos del lenguaje de programación C, estamos acostumbrados a la siguiente construcción de bucle…

for(i=0;i<n;i++)

{

printf(“%d”,i)

}

¿Cómo se migra esa construcción tan característica del lenguaje C a Python?

Necesitamos conocer la función incorporada al lenguaje Python range()

La función range se usa para generar una lista de progresiones aritméticas.

Su sintaxis es: range (inicio, fin, paso)

Un ejemplo:

rango=range(1,10)
print(rango)

¿Qué creéis que mostrará la ejecución del anterior script?

A priori, podría pensarse que mostrará una lista de números del 1 al 10 ¿verdad?
No es el caso, lo que muestra es una lista de números del 1 al 9, tal y como sigue:

/usr/bin/python2.7
[1, 2, 3, 4, 5, 6, 7, 8, 9]

El valor de fin en la función range, es el número inmediatamente superior al que queremos obtener en la progresión.

Combinando range con for.

Así que la manera de imitar el comportamiento de un bucle for en Python es combinar for y range.

Vamos a migrar el siguiente bucle C a Python

for (i=0;i<=10;i=i+2)

{

}

Dicho bucle en Python se escribiría del siguiente modo

for i in range(0,11,2):

¡A programar!

PlotMyTraining

Al hilo de lo comentado en mi post anterior, he decidido entrenar con método durante 2018, para lo cual estoy siguiendo el entrenamiento propuesto en la WEB entrenamientociclista.com

De momento me está gustando mucho la plataforma, pero un problema que encontré fue que los entrenamientos están descritos siguiendo una fórmula como la que sigue:

Rodillo
1h a intensidad 135 ~ 144ppm.

Sesión I

3 x (4´ 145 ~ 153ppm. / 6´ 98 ~ 123ppm.) 

Lo anterior quiere decir que hay que entrenar una hora de rodillo a una intensidad de 135 a 144 pulsaciones por minuto y dentro de esta hora meter 3 series de 4 repeticiones a un ritmo cardiaco de entre 145 y 153 pulsaciones por minuto, seguidas de 6 minutos de una serie entre 98 y 123 pulsaciones por minuto).

No me gusta este método de expresarlo porque resulta un poco lío de seguir, prefiero simplemente cuando estoy en el rodillo, mirar una gráfica y ver por dónde voy y cuál es el próximo cambio de intervalo.

Algo tal y como lo que sigue:

En la gráfica anterior podemos ver que los primeros 30 minutos entrenamos a 135 pulsaciones por minuto con una cadencia de 80, para después realizar 4 minutos a 145 ppm y cadencia 80, seguidos de seis minutos a 115 ppm…

En definitiva, es una representación gráfica del entrenamiento descrito por entrenamientociclista.com, en la que además se muestran las zonas cardiacas.

¿Cómo he hecho esto?

Pues con un script en Python que me he programado y que te puedes descargar aquí

El programa te pide tus datos personales, y un fichero donde está el entrenamiento.

El formato de dicho fichero debe ser el siguiente:

minutosxppmxcadencia
minutosxppmxcadencia
minutosxppmxcadencia

Donde cada línea es una serie a realizar. Tantas líneas como sea necesario, con un salto de línea entre series.

Por ejemplo, si queremos dibujar un entrenamiento de 30 minutos a unas pulsaciones por minuto de 120 con una cadencia de 80, seguidas luego por 20 minutos a 135 y cadencia 95, sería así:

30x120x80
20x135x95

Esto lo guardaríamos como fichero de texto que pasaríamos al script plotmytraining.py

El script require Python 2.7 y tener instalada la librería matplotlib

Espero que a alguien más le sea útil.

 

Bendita crisis de los 40

Es habitual, cuando se cumplen 40 años, entrar en profunda crisis existencial.

Lo comprendo, pero no ha sido mi caso. Mi crisis existencial sucedió por adelantado, cuando tenía 35 años; fue dura, pero mirando en retrospectiva me hizo mejorar como persona.

También me enseñó muchas cosas que desconocía acerca de la hipocresía y las falsas apariencias de las personas, así como acerca de qué es lo que sucede cuando se descuidan las relaciones, y por qué una relación hay que trabajarla día a día.

Así que supongo que he llegado a los 40 con los deberes hechos, y quiero pensar que ese ha sido el motivo por lo que estos doce últimos meses que ahora culminan, han sido maravillosamente dulces para mi.

Sea como fuere Diciembre es momento de echar la vista atrás y mirar con retrospectiva al año que termina…

¿Qué me ha deparado 2017?

A nivel personal no me puede haber ido mejor. Inicié el año con el objetivo de ser padre, y lo he conseguido. Mar, nuestra preciosa hija, nació el 6 de Diciembre a las 2:40 AM, y es uno de los regalos más bellos que me ha hecho la vida.

A nivel profesional he conseguido ascender de posición, pasando a ser “Senior Advisor for Enterprise Solutions” en DELL, algo que me enorgullece y por lo que llevaba mucho tiempo peleando.

A nivel de adquisición de conocimientos, 2017 ha sido el año del aprendizaje de Python, un fantástico lenguaje de programación del que cada vez soy más fan, y que me permite una directa aplicación al trabajo. Quiero seguir programando día a día, y seguir aprendiendo cosas nuevas de este fabuloso lenguaje de programación, así como de otros. Programar me fascinó desde niño, y aunque lo abandoné por un tiempo, la pasión ha rebrotado en mi con fuerza ahora.

A nivel de proyectos personales, he conseguido escribir regularmente, y publicar varios textos y artículos tanto en LinkedIn como en Amazon. Es algo en lo que quiero seguir profundizando durante 2018, y acabar varios proyectos que tengo medio empezados.

También he podido “trastear” un poco con el vídeo, y grabar y editar pequeñas comosiciones. Me ha divertido, y quizás invierta más tiempo en aprender más, y algo de dinero en material apropiado.

Finalmente, a nivel deportivo 2017 también ha sido un año fabuloso, habiendo participado en varias pruebas XC Marathon como: Madrid – Segovia, Titan de La Mancha, TransHighLands, XC Maratón Oropesa del Mar, etc.

¿Qué le pido a 2018?

A nivel personal: simplemente que las cosas continúen como hasta ahora. Que podamos criar a nuestra hija Mar, en paz y armonía.

A nivel profesional un poco lo mismo, que las cosas continúen como hasta ahora, y que siga mejorando profesionalmente día a día. Me he propuesto pulir el CV durante 2018 para que se mantenga “afilado” y que mi perfil sea siempre adecuado a mis objetivos profesionales.

A nivel deportivo, me gustaría poder seguir participando en retos, y no solo acabarlos, sino mejorar mis puestos en la tabla de clasificación final dentro de mi categoría MASTER 40.

También, continuando con lo deportivo, quiero que 2018 sea un año de preparación, pues en 2019 me gustaría participar de manera digna en una prueba MTB por etapas, como la Andalucía Bike Race, así que tengo que ir construyendo una buena forma física durante el año próximo para lograr ese reto futuro.

Pero no todo es preparación para 2019, en el año 2018 quiero hacer alguna clásica de bicicleta de carretera como Lagos de Covadonga, así como participar en alguna carrera MTB de XC Marathón. Aúnque de esta última aún no tengo decidida cuál.

En definitiva, y por todo lo anterior: tengo que entrenar mejor.
Hasta ahora no he llevado ningún entrenamiento específico, simplemente salir a pedalear y hacer un poco lo que me apetecía en cada momento.

Es evidente que pedalear así es divertido, pero limita el rendimiento final alcanzada, así que este año 2018 me voy a centrar en añadir planificación a mi entrenamiento, para ver hasta dónde soy capaz de mejorar y llegar con cuarenta y un años.

Y por concluir mi lista de deseos para 2018, añadiré que lo que pretendo es seguir aprovechando cada segundo de mi vida, pues uno nunca sabe cuándo su tiempo se detendrá; y quiero seguir siendo cada día yo mismo, sin importar lo que digan o piensen los demás, porque al final no puedes (y no debes) vivir la vida que otros te dictan, sino la tuya propia, y es entonces cuando alcanzas realmente la felicidad.

¡Bienvenido 2018 …. a por todas!

Mess with the right people

Because you only grow up in expertise when you mix with people that are better than yourself in a particular area of knowledge, it can be easily understood the importance of using the limited available time wisely. It is mandatory (if you want to improve) to spend time with people that make you grow, rather than with people that just waste your time and sink you into deep waters.

I am aware that this could sound a little bit like a “Nazi manifesto”, but is not at all. I firmly believe that everyone excels in something, and therefore no one should be measured just by the performance displayed in one particular field.

As the said says: “Everyone is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid.” Or in other words: maths could be not your thing, but you could be an exceptional writer. Hence using a fixed rule to measure performance is not how life works, and the reason why some people that underdelivered academically in his/her early years, lately overpass in achievements those that did. They were simply measured wrongly. Once life moves on and goes from the school desks to the real day to day life, is when people that did not do well at school (but had another life skills) have an opportunity to glow up.

Normally they always take advantage to demonstrate their real potential, because they were frustrated at school, and that stuck to themselves. Therefore when they have the chance to demonstrate that they were not stupids (just measured by criteria not suitable for them), they embrace it as an opportunity and they normally crush it.

Following up on the above (the importance to be measured by your own parameters), there are two things that become utterly important:

1) Knowing by heart which one is your area of interest.

2) Acknowledging the importance of choosing the right people to mix with (at least if you want to keep improving and progressing).

About determining your area of interest. That is a simple question.
The only person that can know what is your favorite area of interest is yourself. You have to be rawly self-honest, but identifying what motivates you is simple: your area of interest is that thing that ignites your passion. That particular thing that makes your time fly, and makes you forget about the environment that surrounds you. Name it writing, programming, reading or cycling. When you feel that your heart beats intensively and happy, you will know that what you are doing at that time is “one of your things”

About mixing with the right people. That is a slightly more complicated question to reply, but actually simple when you remove the emotional variable.

Who are them, the right people? The right people for improving your development are those in your area of interest that are slightly better than yourself on that particular topic that you like and share their knowledge and passion.

Feeling the smarter guy in the room does not normally mean that you actually are, it only means that the circle you have selected is wrong for your development. Because it is a fact that if you mix all the time with people that are worst than you, you will never grow up.

It is also a fact that if you mix with people that have much more level than yourself doing something, it could be daunting and discouraging. So there is a thin balance line here. You need to mix with people that are better than you, but not to the point that you feel intimidated by them.

And where are those people?

Is difficult to find those persons randomly. Is barely impossible that you walk into a bar and find them. Those persons are pursuing her passions currently, or they are dead and pursued their passions in the past (and wrote everything they knew in books).

So where can you find them?

1) On the Internet.

What a marvelous thing Internet is. You can have an interest in a weird subject, and still find forums, wikis, and posts about “your thing”. Internet forums are a good place to find the right people, and to make good contacts among them. People that share your same interests are there, and you can really learn from them. Also, social networks used carefully can put you in contact with brilliant people, so they are not a tool to totally be dismissed.

2) Books.

Books are like the Internet of the past, and also the place where authors put their condensed knowledge. A book is normally knowledge pearls or distilled knowledge. In an era where we have all the data reachable just a few keyboard clicks away, it is becoming more and more important to process data and convert it into useful information. Good books are good precisely at that: “converting raw data into information” The author of a book normally puts a lot of effort into writing it, so you can expect to have a lot of information per page. Books are incredibly powerful. Read the right book and you could end up being transformed forever.

3) Specialized magazines.

I have been a big fan of magazines my whole life, and I still think that they are useful to some extent. A good specialized magazine can cover in deep topics that are appealing to yourself. Just be careful picking the right magazines and subscribe just to those that really have something to contribute.

And remember, keep your passion, never let other people tell you what you have to do or like, and once you find your passion, give it all .

Older posts

© 2018 Blog personal

Theme by Anders NorenUp ↑