Tutoriales 52
Javascript, lo bueno y lo malo
Me encontré con este espectacular video sobre javascript, explica muchas de las mañas del lenguaje, se debaten muchos de los puntos por los cuales yo solía mencionar que era un mal lenguaje y la persona que defiendo los puntos no es nada menos que una de las máximas autoridades en javascript y creador del estándar JSON, Douglas Crockford, así que véanlo.
Dentro del video hay demasiados temas destacables, desde porque el tema de los brackets de javascript no es sólo una cosa de estilo, la importancia de los closures, el problema de las variables globales y por que hay que evitar el operador NEW. Es un tremendo video que no requiere de muchos conocimientos técnicos para verlo pero si los tienes y trabajas en javascript te va a convertir en un mejor programador.
Instalando PostgreSQL para Ruby on Rails en OSX
PostgreSQL es un excelente motor de bases de datos pero para los que estamos acostumbrados a las bondades de OSX de que todo sea una simple aplicación que se descarga y estamos listos puede ser frustrante.
Este error lo obtenemos cuando tenemos declarada la gema pg en el gemfile (aunque sea exclusivamente para el entorno de producción) y nosotros no la tenemos dentro de nuestro computador. Si no queremos ocupar la gema pg lo que podemos hacer es decirle a bundle que no la instale localmente, esto se puede lograr con:
bundle install --without production
Pero, ¿Qué pasa si realmente queremos instalar la gema para poder homologar el entorno de desarrollo con el entorno de producción, o, queremos descargar la base de datos de heroku (que está en Postgres) y ocuparla dentro de nuestro computador?
Instalando PostgresSQL
Paso 1: Descargar e instalar postgresAPP
Paso 2:
Agregar al path la carpeta de binarios Este paso es ligeramente más complejo, hay que abrir con sublime, vim, nano o el editor que quieras el archivo .bash_profile que se encuentra oculto en la carpeta de usuarios (todo los archivos que empiezan con un punto están ocultos en OSX y en Linux), ahí dentro tienes que agregar al final:
PATH="/Applications/Postgres.app/Contents/Versions/9.3/bin:$PATH"
Y con eso estaríamos listos, ahora tienes que abrir una nueva terminal (cada vez que modificas el path tienes que abrir una terminal nueva para que cargue, vas a la carpeta de tu proyecto rails y bundle install.
Te gustaría descargar la base de datos de Heroku para ocuparla localmente?, aquí los pasos para descargarla y usarla.
Imágenes de fondo con Background-cover de CSS3
Antes de CSS3 teníamos que recurrir a plugins como backstretch para poner una imagen de fondo en una página web, ahora podemos ocupar la propiedad background-cover, si queremos ponerla en toda la página podemos utilizar el siguiente código:
html {
background: url(images/bg.jpg) no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
}
Ahora claro que no estamos obligados a poner la imagen en todo el sitio, podemos aplicarla a un div o una sección, cambiando la parte de html por el id o clase de la etiqueta(s) respectiva(s).
La gran ventaja de esta solución es que la imagen se adapta al ancho de la pantalla y por lo tanto no afectará a la responsividad de nuestro sitio.
El problema de las n+1 queries en Ruby on Rails
El Active Record de Ruby on Rails tiene muchas cosas geniales, pero algunas de ellas si no las manejas bien pueden repercutir negativamente en el rendimiento de la aplicación.
Uno de los errores más frecuentes de los desarrolladores novatos de rails es el problema de las N+1 queries.
El problema sucede cuando intentando realizar una sola consulta a la base de datos termina haciendo N+1 consultas, y aunque cuando uno tiene una base de datos con pocos datos el efecto es casi invisible, a medida de que crece el número de datos y el número de clientes este problema puede llegar a impactar de forma muy dura en el rendimiento de tu aplicación a tal punto de botarla.
¿Cuándo ocurre?
El problema ocurre cuando se itera sobre los hijos de uno de los objetos del modelo, para analizarlo sobre un caso práctica imaginemos que tenemos 2 modelos, uno de usuario y el otro de pins y cada usuario tiene muchos pins.
Específicamente el problema se hace visible en la iteración de los resultados.
Ahora cuando uno trabaja bajo un paradigma MVC es raro que uno tenga el código de esta forma, lo más probable es que el llamado a todos los usuarios se haga en la página index y luego dentro de la vista usuario se itere sobre los resultados mostrando por ejemplo los 5 mejores pins de cada usuario, pero el resultado es exactamente el mismo, n+1 llamados a la base de datos.
Para este caso de pruebas se tienen 2 usuarios, Diego y Gonzalo y uno tiene 3 pins y el otro ninguno, y aquí podemos observar que que se hicieron 2 queries a la base de datos en lugar de solo 1.
Para solucionarlo en el mismo momento que hacemos el query debemos incluir a los hijos del modelo, en nuestro caso el query inicial debió haber sido.
User.all.includes(:pin)
De esta forma se hace una sola consulta a la base de datos, ahora repitamos el experimento anterior y comparemos resultados.
Cómo Instalar Apache Cordova En OSX
Paso 0: Instalar Xcode
Paso 0.5 Abrir Xcode y aceptar la licencia. (Ahora lo puedes cerrar sin problemas)
Paso 1: Instalar Brew
Ingresa a la aplicación terminal y ahí dentro copia y pega la siguiente linea, esto instalará brew
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Paso 2: Instalar GIT
$ brew install nodejs
Paso 2.5 (Actualizar que Brew hayan quedado bien instalado)
$ brew update
$ brew doctor
Paso 3 Instalar node a través de brew
$ brew install nodejs
Paso 4: Instalar Apache Cordova
$ sudo npm install -g cordova
Paso 5: crear una primera aplicación
$ cordova create hello com.example.hello e
Paso 5: Instalar el SDK de android
$ brew install android-sdk
Paso 6: Agregamos una plataforma, (dentro de la aplicación)
$ cd hello
$ cordova platform add android
Si el paso anterior falla puesto que no está definida la variable ANDROID_HOME puedes arreglarlo con:
$ export ANDROID_HOME=`brew --prefix android`
Paso 7 Si todavía falla el problema es que no tienes el jdk de java instalado, entra a la página de java y descarga el dmg del SDK
Paso 8 Probar compilando el proyecto
$ cordova build
Paso 9: Correr el programa con el emulador para probar que todo haya salido bien
Si esta dentro de la carpeta del proyecto HelloWorld puedes probar corriendo la línea
$ cordova run android