Instalando Node con Homebrew en Mac OS X

Yo soy un fan full de Homebrew y trato de instalar todos los paquetes a través de Homebrew para actualizar, verificar actualizaciones y todo lo demás con los mismos comandos en los mismos directorios. Hace poco comencé a aprender Node.js y pude notar que no es tan sencillo de instalar como la mayoría de los paquetes que uno instala usualmente con Homebrew. Hay una serie de pasos extra que hay que ejecutar para configurarlo y ponerlo a funcionar correctamente, así que decidí poner una guía corta para ayudar a cualquiera que se encuentre con el mismo problema.

Lo primero que voy a asumir es que ya tienes Homebrew instalado. Si no, puedes visitar el website de homebrew para ver como obtenerlo, los comandos, configuraciones, etc … También podrías correr el siguiente script para instalarlo bien rápido.

ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

Es bueno correr brew doctor para verificar que en el sistema está todo bien.

brew doctor

Homebrew va a mostrar una serie de información, seguro algunas sugerencias, tu puedes elegir si seguirlas o continuar con la instalación.

brew install node

OK, todo muy simple, pero hay un pequeño asunto con instalar Node con Homebrew y es que el Node Package Manager (NPM) no viene con Node desde Homebrew, por tanto debes hacer una serie de pasos extra.

Corre curl para descargar e instalar NPM

curl http://npmjs.org/install.sh | sh

Listo, pero como instalamos Node con Homebrew, debemos apuntar el NODE_PATH al lugar correcto donde encontrar los módulos de Node.

export NODE_PATH="/usr/local/lib/node"

Finalmente debes modificar el $PATH porque los módulos de Node deben ejecutar archivos

export PATH="/usr/local/share/npm/bin:$PATH"

Ahora corre:

echo $PATH

Asegúrate de que “/usr/local/share/npm/bin” se encuentre en la lista de directorios, si está ahí ya estás listo para instalar módulos de Node sin problemas. Yo comencé instalando Express.

sudo npm install -g express

Muchos módulos de Node van a requerir que se instalen con sudo.

Usando Sinatra con SASS

He estado trabajando últimamente mucho con Sinatra y Sass, al mismo tiempo he estado buscando soluciones mas sencillas para automatizar mis procesos de trabajo. Uno de los procesos que hago casi automáticamente es lanzar una consola y escribir …

sass --watch public/css/layout.sass

… funciona correctamente, solo tengo que linkear el archivo css correspondiente y listo.

Pero no funciona tan automáticamente, cada vez que voy a trabajar con ese proyecto tengo que hacer ese proceso y mantener un tab de la terminal abierta mientras esté trabajando con ese archivo. Yo quisiera que el proceso de trabajar con Sass en Sinatra tenga algunas de las funcionalidades que ofrece el Assets Manager en Rails.

Para comenzar tuve que utilizar Sinatra de la forma modular, por eso en el tope del archivo de la aplicación incluí esta línea:

require 'sinatra/base'

Manejando los llamados a los archivos CSS

Tuve que crear una aplicación de Sinatra para manejar las llamadas a los CSS. Cuando haga un request a un archivo CSS directamente, esta aplicación va a leer el archivo .sass con el mismo nombre y va a mostrar el resultado en lugar del CSS que estamos llamando.

class SassHandler < Sinatra::Base
  set :views, File.dirname(__FILE__) + '/templates/sass'

  get '/css/*.css' do
    filename = params[:splat].first
    sass filename.to_sym
  end
end

Línea por línea SassHandler es una clase que hereda de Sinatra::Base por tanto es una aplicación standalone de Sinatra.

En la primera línea configuré esta aplicación para que el directorio donde el va a buscar los views sea templates/sass ahí guardo los archivos Sass y desde ahí la aplicación los va a cargar para convertirlos en CSS.

Luego capturé todas las rutas dirigidas a archivos CSS dentro del folder css, nótese que el parametro del archivo está definido por un Wildcard *. Dentro del bloque tomé el nombre del archivo desde la URL utilizando params[:splat].first.

Luego simplemente se convierte el nombre del archivo en símbolo y se le pasa como parametro a la función de Sass.

Usando el SassHandler y la aplicación

El segundo paso fué crear la aplicación en si.

class MyApp < Sinatra::Base
  use SassHandler

  set :public_dir, File.dirname(__FILE__) + '/public'
  set :views, File.dirname(__FILE__) + '/templates'
  set :root, MyApp.root

  get '/' do
    haml :index
  end

end

Esta vez la clase MyApp es otra aplicación de Sinatra, pero en esta es que vamos a llamar nuestras URL’s como siempre que usamos Sinatra.

Lo primero que hacemos dentro de la clase es incluir la funcionalidad de SassMaster cuando se ejecute nuestra aplicación de Sinatra.

Luego definí algunas configuraciones como donde va a estar el directorio para los archivos públicos (public), el directorio para los views (templates) y cual va a ser el root de la aplicación.

Cuando tuve todo listo, el último paso fué correr la aplicación.

 MyApp::run! if __FILE__ == $0

En el template Haml llamé el CSS de esta manera:

%link{:rel => "stylesheet", :href => "css/layout.css" }

Para llegar a esta solución fue muy importante leer sobre la configuración de una app de Sinatra y sobre Sinatra::Base – Middleware, Libraries, and Modular Apps.

Ruby.do – Devise Authentication

Hoy fué la reunión de Ruby.do con el tema de Devise. El tema fué muy interesante por que casi todas las aplicaciones con Rails llevan de una forma u otra algún método de authentication y el Devise Gem es muy completo y flexible.

La charla la impartió el Sr. Luis Urraca con mucho dominio del tema y con ejemplos que mostraron como con pocas líneas de código podemos tener un sistema de authentication completo y con funcionalidades complejas.

Lo que yo pude entender de la charla fue que:

  • Devise es un gem para authentication para aplicaciones de Ruby on Rails bien flexible y completo.
  • Es una aplicación de Rails en si misma (Engine).
  • Es completamente modular, lo que nos permite utilizar solo las funcionalidades que nos interesan para nuestro proyecto.

Mas Información sobre Devise se puede encontrar en la página del repositorio en Github donde hay algunos ejemplos básicos  sobre como usar Devise. En Railscasts hay un episodio dedicado a introducir Devise.

El 13 de junio hay otra reunión de Ruby.do en el mismo lugar, las oficinas de Pixel Perfect Tree, el link a la invitación para el evento está en Google +

El costo del cambio

Siempre buscamos herramientas que nos ayuden a trabajar mejor, a trabajar mas rápido, a hacer las cosas con menos código, pero, una de las principales razones que debemos tomar en cuenta antes de comenzar a utilizar son las facilidades que nos ofrece cuando cambiemos de idea.

El cambio es parte de todos los proyectos, aunque no esté en los planes, siempre las especificaciones que fueron aceptadas hoy pueden cambiar mañana. Es muy probable que todo lo que pueda cambiar, efectivamente cambie.

Ya que el cambio es inminente, si tenemos procesos muy largos y que involucren muchas cosas, si las herramientas, frameworks o lenguajes de programación que usemos no nos permiten cambiar rápidamente, vamos a incurrir en una deuda tecnológica que va a subir el costo del cambio quizás para el cliente, pero también para el developer. Los resultados a corto y largo plazo le ponen una etiqueta a tu prestigio como profesional y el costo del cambio influye mucho en los resultados que puedes ofrecer.

Before the Big Bang

Un mix en 8tracks con música para volar. Por lo regular escucho esto cuando estoy codeando alrededor de las 3 de la madrugada.

Before the Big Bang from wilburhimself on 8tracks Radio.

Week-Log.1

106 Excuses That Prevent You From Ever Becoming Great: Cuantas veces nos saboteamos a nosotros mismos? Cuantas veces tenemos cosas por hacer y simplemente ponemos miles de excusas, o una sola excusa … Esta es una lista de las 106 excusas mas comunes que no permitan que seas grandioso. – http://www.chrisbrogan.com/106/

Blogging for Local SEO: Como un negocio local, te vales de tu website para atraer ventas? pero, solo escribir fuerte contenido SEO es suficiente para lograr resultados sorprendentes con cualquier Search Engine? - http://www.local-one.com/learning/blogging-for-local-seo/

Three quick tips to help the responsive web design process - http://t.co/fDCcs2Fb

40 CSS3 Button Tutorials For Designershttp://t.co/Heh4QdFJ

Getting started with Githttp://t.co/rPOhyI8d

Customizando el $submitted en Drupal 7

Como en Drupal 7 la función theme_node_submitted fue removida en Drupal 7, para cambiar el “submitted by” yo uso el hook theme_preprocess_node.

En tu template.php crea una función theme_preprocess_node siempre recordando cambiarle el theme por el nombre de tu theme.

Dentro de la función puedes asignar el valor del “submitted_by” a $variables['submitted'] por ejemplo:

function theme_preprocess_node(&$variables) {
    $variables['submitted'] = t("Enviado por !username en !datetime", array(
        '!username' => $variables['name'],
        '!datetime' => $variables['date'],
    ));
    return $variables;
}

La diferencia entre soñar y hacer que pase

Sería cool ganarse la lotería, volverte millonario, que se te cumpla un sueño, etc …

Pero cuando nuestras aspiraciones dependen de un deseo para lograr colocarnos donde debemos ir, generalmente sacrificamos el esfuerzo que puede hacer mas cercano a la realidad que logremos las cosas que realmente necesitamos. Esperar a que las cosas pasen porque si o de un día para otro es una perdida valiosa de tiempo, y nos distrae del trabajo duro que deberíamos estar haciendo.

Piensa las cosas primero a corto plazo.

Si visualizas que puedes hacer que haya resultados, haz el trabajo.

Si ves que no vas a poder obtener resultados, ignora la posibilidad, es solo una distracción.

Sobre la creatividad

La creatividad está sobrevalorada y la maestría técnica es una habilidad aprendida. De hecho, las dos son cualidades aprendidas al final. Si quieres ser diseñador, cual es el problema?

Además, que otra cosa es el diseño mas que resolver problemas? No se trata de hacer efectos de los que están de moda o cosas originales y así por el estilo. Se trata de resolver problemas. Usa tus habilidades para resolver problemas para que encuentres tu camino como diseñador, se trata de hacer preguntas y aprender cosas nuevas todos los días. Sintetizar muchas piezas de información en algo nuevo que cumpla una meta.

La creatividad no es exclusiva de los diseñadores, todas las profesiones requieren de creatividad. Acaso crees que un plomero no tiene que improvisar y hacer uso de su experiencia para resolver problemas complejos?

——– Actualización ———–

Me enviaron este enlace sobre el mismo tema que estoy hablando de una forma bastante elaborada y recomiendo a todos que lo visiten: Startups, this is how design works. Gracias @macasomedina

Comparaciones

Con que te comparas? Con que comparas tus servicios, lo que le entregas a tus clientes?

Es casi seguro que te comparas con tu competencia, con los servicios que ofrecen y conoces las palabras para asegurarle a cualquiera que haces las cosas mejor y siempre quedas muy bien.

Ahora viene la pregunta de verdad.

Alguna vez te has comparado con algo mágico, con algo imposible, como un unicornio o algo por el estilo, como te ves comparandote con eso?

Los paracaidistas en videoconferencia del Google I/O, el mejor demo de todos los tiempos

Para demostrar algunos de sus productos, Google coordinó con algunos paracaidistas para que se lanzaran desde un dirigible y cayeran en paracaídas sobre el techo del Moscone Center en San Francisco, el edificio donde se estaba celebrando el Google I/O. Los paracaidistas estaban usando un par de lentes Google Glass y Video Chatting en un Hangout de Google+

Como saber si tienes lo necesario para ser un empresario solitario?

Hay algunas cualidades comunes entre los trabajadores independientes, estas les dan ventajas para trabajar por si solos. Algunas de ellas son:

  • Tienes arranque automático. Nadie te tiene que decir para que comiences a poner las cosas en marcha.
  • No te intimidas fácilmente.
  • Disfrutas la competencia.
  • Te sientes cómodo tomando consejos de otros.
  • Eres adaptable a cambiar de condiciones.
  • Comprendes muy bien tus fortalezas y tus debilidades.
  • Tienes fuerza de voluntad y auto-disciplina.
  • Eres capaz de evaluar riesgos y tomar decisiones de negocio rápidamente.
  • No ves los errores como fracaso.

No todo el mundo tiene el corte para correr un negocio en solitario y se necesita mucha reflexión, honesta y profunda, para determinar si ser empresario solitario es la mejor opción para ti.

Que mas se debe tomar en cuenta para saber si emprender un negocio solitario es lo correcto?