mas saludos personalizados

March 9th, 2010 Posted in Uncategorized | No Comments »

saludos a nayi que anda chismoseando por aca :P

ella es buena chica, una persona muy simpatica, la quiero mucho

Heavy metal Ruby SOAP client library (now reloaded with brand-old ugly NTLM Auth thx to Guille xD!!!)

February 28th, 2010 Posted in Uncategorized | 1 Comment »

Recientemente me ha tocado trabajar con WebServices basados SOAP en Ruby con tan mala suerte de que ninguno de las librerías para manejo de SOAP disponibles en Ruby tenia soporte para autenticación NTLM que es bastante común en este tipo de servicios, muchos están hechos en .NET, entonces es normal que esten alojados en servidores IIS bajo Windows y que usen NTLM Auth, tal vez los ejemplos mas comunes de estos WebServices son los que vienen con SharePoint y con Exchange.

Para solventar el problema me di a la tarea de buscar en Internet y encontre el gem rubyntlm, bastante viejo (actualizado por ultima vez en 2006) pero que tenia implementado todo lo necesario para autenticación via NTLM, solo basto con integrarlo en el gem Savon que fue el que escogí para el manejo de SOAP (porque todas las demas opciones no me convencieron) y parchearlo para agregar el metodo ntlm_auth a Net::HTTP::Get (analogo al metodo basic_auth)

El resultado de todo este experimento esta en el repositorio en GitHub del fork que hice y espero que el codigo pueda ser integrado en el repositorio oficial de Savon

Como Usarlo

Si usan rubygems 1.3.5 actualicen a 1.3.6 para que usen el repositorio de rubygems.org por defecto, alli es donde esta alojado el gem:

% sudo gem update --system

Proceden a instalar el gem:

% sudo gem install guilleiguaran-savon

Y finalmente usarlo es sencillo:


require 'rubygems'
require 'savon'

client = Savon::Client.new "http://localhost/?wsdl"
client.request.ntlm_auth "user", "pass"

Para mas informacion sobre Savon visiten su Wiki

Grooveshark para iPhone

February 27th, 2010 Posted in Uncategorized | No Comments »

Grooveshark

Ya en el pasado he hablado por aca sobre lo que es Grooveshark. Ademas de estar en la nube, tambien esta disponible para los sistemas de escritorio (gracias a Adobe Air), en WebOS, Blackberry y en Android, sin embargo no estaba disponible para iPhone (a pesar de que la tenian lista desde hace muchos meses) por la sencilla razón de que a Apple no le gusta que una aplicación que pueda robarle mercado a iTunes este disponible en sus moviles.

Pero no todo son malas noticias, despues de meses de espera para ser rechazados por Apple los chicos de Grooveshark han decidido publicar la aplicacion en Cydia para los usuarios VIP de su servicio. Aunque es necesario pagar 30usd por año para ser VIP realmente vale la pena por la cantidad de canciones que tiene todo el catalogo de Grooveshark (con 30usd podrian comprar 30 canciones en iTunes por ejemplo…) y porque ayudamos a salir adelante a tan magnifico servicio.

Para instalar la aplicacion solo la buscan en Cydia y aparecerá de inmediato, no necesitan agregar ningun otro repositorio adicional. Para hacerse miembros VIP: acá

Fulanita

February 27th, 2010 Posted in Uncategorized | No Comments »

Le envio saludos a mi amiga “Fulanita” desde aca, porque se que anda leyendo bastante del blog xD

Escalando aplicaciones Rails con memcached.

February 8th, 2010 Posted in Uncategorized | No Comments »

Si alguna vez han leido acerca de escalibilidad en grandes sitios, probablemente has escuchado acerca de memcached. memcached (pronunciado mem-cash-dee ) es un sistema distribuido de caché de objetos en memoria creado originalmente por Danga Interactive para LiveJournal pero que ahora es usado por grandes páginas como Twitter, Youtube, Flickr, Wikipedia, Digg, Wordpress o el gigantesco Facebook (que se mantiene en pie gracias a los mas de 800 servidores con memcached que usa).

A groso modo memcached almacena en memoria objetos usando el par llave/valor (valor = datos guardados, llave = identificador para acceder a los datos) que son resultados de consultas a base de datos, llamadas a API o render de paginas.

En aplicaciones donde se realiza muchas veces la misma consulta, ¿valdria realmente la pena que se haga 1000 veces la misma consulta obteniendo el mismo resultado?. Imaginen por ejemplo si Twitter consultara en una base de datos los tweets de cada uno de los usuarios incluso cuando estos lleven dias, semanas o meses sin escribir ni una palabra ¿cuanto tiempo puede haberse perdido haciendo dichas consultas? En este caso indudablemente resulta mejor almacenar los resultados de la primera consulta y luego

Entrando ya en la parte interesante, muchos estaran impacientes de saber como hacer que nuestro framework favorito se integre con memcached.

Integrando Rails con memcached

La tarea de integrar Rails con memcached resulta bastante facil gracias a que existen multiples gems que se encargan de la tarea, uno de los mas interesantes que he encontrado es el Cache Money, hecho por Nick Kallen (ingeniero de Twitter) y que ya se encuentra corriendo en produccion en los servidores de Twitter (of course)

Puesta en marcha

0. Instalar memcached
$ sudo aptitude install memcached

1. Instalar Cache Money
$ gem sources -a http://gems.github.com
$ sudo gem install nkallen-cache-money

2. Configurar memcached
$ vim config/memcached.yml


test:
ttl: 604800
namespace: ...
sessions: false
debug: false
servers: localhost:11211

development:
....

3. Hacer un initializer para el gem
$ config/initializers/cache_money.rb


require 'cache_money'

config = YAML.load(IO.read(File.join(RAILS_ROOT, "config", "memcached.yml")))[RAILS_ENV]
$memcache = MemCache.new(config)
$memcache.servers = config['servers']

$local = Cash::Local.new($memcache)
$lock = Cash::Lock.new($memcache)
$cache = Cash::Transactional.new($local, $lock)

class ActiveRecord::Base
is_cached :repository => $cache
end

4. Agregar indices a nuestros modelos ActiveRecord
cache-money almacena en el cache las consultas del tipo User.find(1), pero es necesario configurar indices para que lo haga con consultas mas complejas como User.find(:first, :conditions => {:screen_name => ‘anteseraotro’}), o User.direct_messages. Los indices se agregan facilmente:


class User < ActiveRecord::Base
index :screen_name
end


class DirectMessage < ActiveRecord::Base
index :user_id
index [:user_id, :id]
end

El ultimo ejemplo [:user_id, :id] es para el caso en que la consulta involucre varios parametros como User.find(:first, :conditions => {:id => 1, :user_id => 20})

5. Beber cerveza mientras ves como el rendimiento de la página mejora magicamente

Sin mas que decir, cito al autor

A version of this code is in production use at Twitter and is one part of the reason Twitter’s uptime has improved so much over the last several months. This is real, pragmatic, unmagical, production-ready code that can be a big part of your Rails scaling strategy. It is designed with massive datasets and real-world operational challenges in mind. And it’s almost effortless to use, since it requires no changes to how you use ActiveRecord.

Mas memcached
Codigo fuente de memcached en GitHub

Mas sobre cache-money
Codigo fuente de cache-money

Heroku: Hosting gratuito para aplicaciones Sinatra

February 6th, 2010 Posted in Uncategorized | No Comments »

Antes se registran en Heroku, acá encuentran como hacerlo

$ sudo gem install heroku
$ mkdir myapp
$ cd myapp
$ vim myapp.rb


require "rubygems"
require "sinatra"

get '/' do
"Sinatra has taken the stage"
end

$ vim config.ru


require 'myapp'

run Sinatra::Application

$ git init
$ git add .
$ git commit -m “My first commit”
$ heroku create
$ git push heroku master

P.D: Escribo esto para que no se me olvide luego :P

Facebook presenta un conversor de PHP a C++

February 2nd, 2010 Posted in Uncategorized | No Comments »

Mi análisis es solo uno: ¿Por qué escribir codigo en un lenguaje interpretado para que luego este sea transformado a un lenguaje compilado que seguramente tiene rendimiento menor a que si lo hubieras hecho directamente en el lenguaje compilado?

En fin, cada loco con su tema. Por cierto, lo consigues como no, en GitHub

Garabato del Country

January 29th, 2010 Posted in Uncategorized | No Comments »

Empezaron carnavales en Barranquilla

365 dias

December 31st, 2009 Posted in Uncategorized | 4 Comments »

365 DIAS

2009

Hoy es el ultimo día de un largo año, un año de muchas alegrías y tristezas, de buenos y malos momentos, de muchos momentos locos y divertidos y otros bastante aburridos pero sobre todo un año de muchos cambios.

Cuando inicio el año no hubiera pensado q me gustaría trabajar en una oficina, la simplemente idea de estar todos los días en el mismo escritorio me atormentaba peor ahora que lo hago me parece divertido en parte porque el ambiente de trabajo es increíble, los compañeros de oficina son de lo mejor y los proyectos en los que trabajamos son interesantes.

En enero tenia novia y andábamos felices y completábamos casi un año juntos pero esa felicidad que teníamos se fue desvaneciendo y hoy termino el año solo y con alguna decepción amorosa mas reciente pero no por ello triste porque he aprendido a no depender de alguien mas para ser feliz.

He conocido muchas personas interesantes que se han convertido en grandes amigos y a otras personas que han logrado decepcionar me en tan corto tiempo. Resalto en especial haber conocido a mi amiga Moni, que en poco tiempo se ha convertido en una persona importante, ha hecho el papel de asesora en distintos aspectos de mi vida y me entretengo mucho charlar con ella.

Otra cosa importante para resaltar es haber conocido Twitter, esa red de microblogging donde cada quien plasma lo que quiera en 140 caracteres, quien necesita mas!!, es el lugar donde cada quien puede enfocarse solo en expresar sus pensamientos sin tener el poco de distracciones como los hay en otras redes sociales. El contenido de Twitter es generado directa mente por las mentes de los usuarios y puedes seguir a los usuarios cuyo contenidos quieras leer, ahora mismo tengo la modesta cantidad de 250 seguidores que para muchos son muy pocos pero que para mi son personas bastante valiosas.

2010

Para finalizar el 2009 y empezar el 2010 quiero dejar una lista de propósitos para el año que empieza, así podre saber a final de año cuales cumplí y cuales no:

  • Finalizar con honores el Pregrado
  • Empezar un Postgrado
  • Aprender a hacer aplicaciones de iPhone y MacOSX
  • Convertirme en Senior en Rails
  • Comprar un Macbook
  • Comprar un iPhone
  • Mejorar mucho mi ingles
  • Retomar el aprendizaje del sueco
  • Comenzar a ahorrar para un carro
  • Salir de rumba mas seguido
  • No olvidarme tantos de mis amigos
  • Conocer a mas twitteros personalmente
  • Hacer algún viaje interesante
  • Hacer algo de ejercicio
  • Levantar novia :D
  • Escribir posts interesantes en mi blog xD
  • Hacer el reality de mi vida cotidiana
  • Cumplir mis propósitos

Resalte la penúltima porque queria seguir hablando de esta interesante que propone el amigo @alejandroangel para el 2010: “La vida es un reality, ¿Por que no contarla en imagenes?”.

Explicado en palabras de Alejandro: “Casi todos nosotros hemos hecho de nuestras vidas un reality y vamos contando en tiempo real lo que hacemos, vemos y leemos, ¿porqué no contarlo también en imagenes?”, “esta nueva quijotada consiste básicamente en grabar un plano cada día, esto puede ser un plano estático, secuencia, delante o detrás de cámaras, hablando frente a cámara o dejando que la realidad hable por si misma, da igual, lo importante es que se narre algo de mi cotidianidad, de lo que me estoy tropezando”. Usare mi nuevo Tumblr para realizar este reto: http://realitydemivida.tumblr.com/

FELIZ AÑO NUEVO

Google ChromeOS: Demo

November 27th, 2009 Posted in Uncategorized | No Comments »

Fíjense bien en el tiempo de arranque