Regalando cosas por Bluetooth

Posted: August 12th, 2009 | Author: FreedomCoder | Filed under: Open Source, Programming, linux | Tags: , , , | No Comments »

El año pasado Movistar había lanzado una campaña muy pedorra en el subte, en donde unos carteles en el piso te invitaban a prender tu Bluetooth y te enviaban un file. Lo que te enviaban era una simple imagen, con tanto texto que en mi celular era casi ilegible y no tenía consigna alguna.

Sin embargo esto sirvió para que me encaprichara y quisiera armar algo similar para la oficina, orientado a que un cliente que viene a una reunión se pueda llevar un regalo, que en este caso es un juego J2ME.

Hacerlo realmente es una boludez. El real problema, que no voy a tratar acá, es tener una placa Bluetooth soportada por Linux (creo que esta solución aplica Windows, pero no lo probé), lo que puede resultar complicado. Yo en mi anterior laptop fallé en cada intento. Hoy en día en mi MacBook anda todo out-of-the-box por suerte así que pude jugar un poco.

El protocolo que se utiliza para intercambiar cosas es Object Exchange (OBEX) y tenemos una excelente biblioteca llamada OpenObex. A nosotros nos interesa particularmente ObexFTP que nos da el File Transfer sobre Obex.

El primer problema que tuve es que en Jaunty no está el binding de ruby, por lo que me tuve que bajar el source y diff de Karmic y crear mis libobexftp-ruby_0.22-1_i386.deb y sus dependencias.

Salvando eso, con los ejemplos del wiki sale muy fácil. La biblioteca nos permite descubrir devices, abrir channels y enviar archivos en pocas líneas. Acá un en ruby ejemplo :

#!/usr/bin/env ruby
 
require 'obexftp'
 
puts "Scanning BT..."
intfs = Obexftp.discover(Obexftp::BLUETOOTH)
dev = intfs.first # Es un array, podríamos iterar sobre todas las encontradas
 
channel = Obexftp.browsebt(dev, Obexftp::PUSH)
 
cli = Obexftp::Client.new(Obexftp::BLUETOOTH)
puts cli.connectpush(dev, channel)
puts cli.put_file('ver.jpg')
puts cli.disconnect

Hacer lo mismo en Python, Perl o cualqueir otro lenguaje soportado es igual de simple.

Obviamente es muy minimalista: agarra el primer device encontrado, abre un channel para hacer un PUSH (si el device no soporta PUSH retorna -1 según creo), luego abre la conexión y le envía el archivo.

Desde el celular vemos un mensaje de que se está abriendo una conexión y luego el detalle de lo que se quiere enviar, nombre del archivo, tipo de archivo, tamaño, etc. Podemos aceptarlo o rechazarlo. De aceptarlo se descarga pero no se guarda ni se instala, es un paso extra que debemos decidir si lo hacemos o no.

Un problema que encontramos para enviar juegos es que algunos celulares están bloqueados para esa función (para así vendértelos por el portal WAP oficial de tu carrier). Ya lo pudimos probar con varios celulares Nokia, Motorola y Samsung y funciona razonablemente bien.

Sobre este ejemplo nosotros tenés un poco más de trabajo, ya que guardamos los device ID y el contenido enviado, así cuando volvés te damos un contenido diferente :) . Si además no podés recibir el juego, te pasamos una imágen simpática :P .

(Via El Futirifoken.) Original Link: Regalando cosas por Bluetooth


Configurar passenger con nginx

Posted: June 7th, 2009 | Author: FreedomCoder | Filed under: Open Source, Programming, linux | Tags: , , , | 1 Comment »

Instalar Ruby Enterprise Edition

sudo apt-get install build-essential zlib1g-dev libssl-dev libreadline5-dev
wget http://rubyforge.org/frs/download.php/51100/ruby-enterprise-1.8.6-20090201.tar.gz
tar xvfz ruby-enterprise-1.8.6-20090201.tar.gz
rm ruby-enterprise-1.8.6-20090201.tar.gz
cd ruby-enterprise-1.8.6-20090201/
sudo ./installer

Agregar ruby entrerprise al path del sistema

echo "export PATH=/opt/ruby-enterprise-1.8.6-20090201/bin:$PATH" >> ~/.profile && . ~/.profile

Nginx

sudo /opt/ruby-enterprise-1.8.6-20090201/bin/passenger-install-nginx-module

Elegir la opcion 1. Yes: download, compile and install Nginx for me. (recommended)

Script de inicio Nginx

Agregar el siguiente codigo en

/etc/init.d/nginx
sudo chown root:root /etc/init.d/nginx

Probar una aplicacion rails en nginx
agregar un virtual host

server {
    listen 80;
    # server_name www.mycook.com;
    root /home/deploy/testapp/public;
    passenger_enabled on;
}

(Via Chebyte’s Blog.) Original Link: Configurar passenger con nginx


Instalando Mod_Ruby

Posted: April 22nd, 2009 | Author: FreedomCoder | Filed under: Open Source, Programming, how-to | Tags: , , , , | No Comments »

Bueno dada la escasa y fea documentación que mod_ruby tiene me decidí a escribir un pequeño tutorial de instalación del mismo en debian, que paso a detallar:

Primero instalamos el modulo de apache para ruby (mod_ruby)

apt-get install libapache2-mod-ruby

Luego debemos crear el siguiente archivo:
vi /etc/apache2/mods-available/ruby.conf

y ponemos lo siguiente:

<IfModule mod_ruby.c>
  RubyRequire apache/ruby-run

  <Files *.rbx>
  SetHandler ruby-object
  RubyHandler Apache::RubyRun.instance
  </Files>
</IfModule>

Entre otras cosas le decimos que debe tratar los archivos .rbx como
archivos de ruby.

Luego de esto ya tenemos los dos archivos necesarios para habilitar el módulo en apache:

ruby.load (que secopia al instalar el módulo) y ruby.conf generado por nosotros. Ahora cómo mod_ruby ejecuta los scrips de ruby como CGI necesitamos poner la directiva Options +ExecCGI en el folder dónde vamos a poner nuestros scripts, en mi caso particular necesito que todos los usuarios del sistema puedan ejecutar sus scripts desde su ~/public_html entonces para lograr esto tenemos que editar la configuración del módulo user_dir, editamos el archivo

vi /etc/apache2/mods-available/userdir.conf
y agregamos lo siguiente:
 <IfModule mod_userdir.c>
        UserDir public_html
        UserDir disabled root

        <Directory /home/*/public_html>
                AllowOverride FileInfo AuthConfig Limit Indexes
                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
                # Para poder ejecutar scripts en ruby agregamos la linea de abajo
                Options +ExecCGI
                <Limit GET POST OPTIONS>
                        Order allow,deny
                        Allow from all
                </Limit>
                <LimitExcept GET POST OPTIONS>
                        Order deny,allow
                        Deny from all
                </LimitExcept>
        </Directory>
</IfModule>

No sé si esto muy seguro o tiene alguna consecuencia no deseada, si es así comenten!
Bueno ahora sólo necesitamos habilitar el móludo para esto ejecutamos el siguiente comando:

a2enmod ruby

y hacemos un reload del apache

/etc/init.d apache2 reload

despues de esto para probarlo ponemos un archivo en nuestro home

vi /home/gaston/test-ruby.rb

con un simple:

puts 'hello world'

vamos al navegador a la siguiente url:

http://aca-va-la-url-de-tuserver/~gaston/test-ruby.rb

y vamos a ver un hermoso ‘hello world’ si todo salió bien.

Bueno, con mod_ruby solo para escribir una página web dinámica vamos a tener que hacer algo cómo esto:

puts ‘<h1>Mi Título</h1>’

lo cual es muy molesto, para hacer las cosas un póco más lindas y más fácil debemos usar eruby que nos permite ejecutar código ruby dentro de archivos de text (como por ejémplo un arhivo html)

Entonces comencemos por instalar eruby:

apt-get install eruby

y luego tenemos que modificar nuevamente el archivo /etc/apache2/mods-available/ruby.conf de esta manera:

<IfModule mod_ruby.c>
  RubyRequire apache/ruby-run
  RubyRequire apache/eruby-run

  <Files *.rbx>
  SetHandler ruby-object
  RubyHandler Apache::RubyRun.instance
  </Files>

 <Files *.rhtml>
  SetHandler ruby-object
  RubyHandler Apache::ERubyRun.instance
 </Files>

</IfModule>

Y luego debemos agregar la siguiente directiva al archivo de configuración de apache /etc/apache2/apache2.conf

AddType text/html .rhtml

Con esto recargamos el apache y ya podemos escribir nuestros .rhtml
y poner código ruby entre los tags <%= %>

Links útiles:

http://en.wikipedia.org/wiki/ERuby
http://wiki.modruby.net/ja/?InstallGuide
http://modruby.net/
http://ubuntuforums.org/archive/index.php/t-356350.html
http://www.ruby-doc.org/docs/ProgrammingRuby/html/web.html

(Via Gastón Ramos – Ruby, Rails….) Original Link: Instalando Mod_Ruby