martes, 13 de marzo de 2018

La mejor entrevista que me han hecho como desarrollador en Ruby on Rails

Bueno, no pude evitarlo. Quiero explicar es agradable experiencia independientemente de que continue (que espero que si) o no el proceso.

Tuve una sesion en Skype con el CTO de una gran empresa con sede en Alemania. Empezamos con una breve intro acerca de mi y de el.
Unos minutos despues me dijo que iba a preguntarme algunas preguntas teoricas acerca de ruby y de rails.
Las preguntas no tienen desperdicio:
Empezamos con lo más básico.

Cual es la diferencia entre una clase y un modulo. A groso modo Classes se pueden instanciar y pueden tener herencia de otras clases modulos no. Los modulos sirven más separar codigo y ordenarlo.

Que es un "singleton method" es una forma de "garantizar que una clase sólo tenga una instancia, y proporcionar un punto de acceso global a ella".
Segun wikipedia:


En ingeniería de software, singleton o instancia única es un patrón de diseño que permite restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto.
Su intención consiste en garantizar que una clase sólo tenga una instancia y proporcionar un punto de acceso global a ella.
El patrón singleton se implementa creando en nuestra clase un método que crea una instancia del objeto sólo si todavía no existe alguna. Para asegurar que la clase no puede ser instanciada nuevamente se regula el alcance del constructor (con modificadores de acceso como protegido o privado).

Que clases de variables hay en un modulo? Esta pregunta es trampa y no lo habia pensado. De hecho no estoy seguro.  Le dije que obviamente las "instance variables" solo se pueden usar para una clase. Habra que revisar eso. Luego tambien que el alcance de una variable es solo dentro del modulo, nada nuevo en eso.

Cual es la diferencia entre extende e include.
En resumen seria, cuando añadimos un modulo en el objeto con include añadimos metodos en la cadena de herenncia de ese objeto.

Cuando usamos extend es lo mismo que include con el objeto de clase "singleton"
ejemplos.

class A
  include M
end

A.ancestors # => [A, M, Object...]

####
class A
  extend M
end
A.singleton_class.ancestors # =>  [M, Class, Module...]

Auque podemos llamar extend en una instancia asi.
a = A.new

a.extend(M)

> a.singleton_class.ancestors
# => [M, A, Object, Kernel, BasicObject]

Por que usar rspec . Le dije que en lo personal me gusta por que es muy descriptivo y es lo más parecido al pseudocódigo para saber por donde empezar a trabajar haciendo test driven development. adermás de que si estsan bien escritos es muy facil encontrar errores.

Rails. como usar helper? Me preguntó como accedia helper y bueno, me maté la cabeza tratando de entederlo pero simplemente es automatico está incluido detro de rails. Le dije que lo importante aquí es que helper lo usamos para añadir metodos para las vistas y que en los modelos normalmente guardamos la logica y en controller es solo el director de la orquesta que distribuye y lleva los metodos de model a las vistas.

problema de usar n+1 en activerecord queries. Aquí me confundi. Se me habia olvidado este concepto. El final me explico lo que se me habia olvidado. n+1 significa cuado estmos haciendo loops en los datos para tomar un metodo especifico y así obtener un atributo dentro de las peticiones(queries). En lugar de hacer ese loop que es muy costoso en memoria podemos hacer una peticion connnnn where y find. Este tema y los anteriores los desarollare en otros posts. Por ahora quí queda.

Me gusto muchisimo la entrevista. El hombre era humilde directo, con preguntas muy acertadas y encima capaz de empatizar y explicarme en lo que habia fallado.

Por ultimo y algo que me parecio digno también de reconocimiento es que me explico antes de que yo preguntara todo lo que queria saber acerca del workflow, metas y problemas actuales, tecnologias que usan, buenas practicas, arquitectura .

Así fue y para mi gusto, así deberian las entrevistas.

Pragmaticas, constructivas, humildes y trasparentes.

Sin duda alguna, una de las mejores entrevistas que me han hecho, quiza la mejor.

sábado, 3 de marzo de 2018

Instalar Linux desde cero

Elige la distro de tu preferencia, teniendo en cuenta tus GB en RAM, procesador, experiencia en linux y documentación disponible o conociendo que usa tu equipo.

En mi caso tengo 1GB en RAM y un pentum Celeron ual core a 1.5 , si si lo sé necesito un Portatil/Laptop  nuevo...

Así que mis opciones se estrechan a 4-5 distros decentes.

1. Lubuntu, muy rapido y funcional para un equipo viejo como el mio
2. Xubuntu, Bastante bien de diseño, casi igual que ubuntu, solo que para equipos más viejos.
3. LXLE Una version diferente de Lubuntu, mucho más bonita y funcional
4. Elementary OS, el mejor diseño de los 4 con prestaciones parecidas a Xubuntu pero más moderno y rapido para empezar, aunque luego hace falta un poco más de dedicación para personaizarlo y trabajar con un entrono de desarollador.

Al final me decidí por LXLE aunque tuve problemas con la instalación varias veces e hice un cambio de planes a ultima hora por elementary. Mis unicas quejas son que tuve que costumizar muchos de los shortcuts ya que está pensado mas para usuarios muy principiantes y poco para usuarios de Ubuntu ( que fue y es la distro con la que me siento más comodo pero que no puedo usarla por que piden 2GB en RAM como minimo y 4GB recomendados).

Ok. Así que, una vez instalado Elementary fuí añadiendo cosas:

Temas para Pantheon-Elementary (La terminal por defecto de Elementary OS)
1. https://github.com/Mayccoll/Gogh/blob/master/content/themes.md

Luego para cambiar iconos etc, aquí esta la mejor fuente que he encotrado:
2. http://www.linuxandubuntu.com/home/how-to-install-themes-or-icons-in-elementary-os

Ahor vamos a lo básico como developer.

Felizmente alguien se me adelanto con todo esto, y que mejor que un developer amante de Elementary OS!

https://adam.merrifield.ca/2016/09/20/web-development-on-elementary-os-0-4-0-loki/

Para instalar Rails. Siempre he usado y me ha gustado
https://gorails.com/setup/ubuntu/16.04

Un error común es cuando tenemos instalado Ruby en el sistema operativo por defecto. Por lo menos en RVM hay un problema. Pirmero hay que desinstalar Ruby y luego instalar RVM y ruby desde RVM.

Para Instalar Docker!
https://docs.docker.com/install/linux/docker-ce/ubuntu/#set-up-the-repository