mas saludos personalizados
March 9th, 2010 Posted in Uncategorized | No Comments »saludos a nayi que anda chismoseando por aca
ella es buena chica, una persona muy simpatica, la quiero mucho
saludos a nayi que anda chismoseando por aca
ella es buena chica, una persona muy simpatica, la quiero mucho
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
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á
Le envio saludos a mi amiga “Fulanita” desde aca, porque se que anda leyendo bastante del blog xD
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.
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
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
Empezaron carnavales en Barranquilla
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.
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:
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/
Fíjense bien en el tiempo de arranque