30 de marzo de 2012

Añadiendo usuario al grupo de sudo

Con esta orden permitiéremos ejecutar ordenes con sudo al usuario <username> ya creado

sudo usermod -a -G sudo <username>

Evitando:

is not in the sudoers file. This incident will be reported.

26 de marzo de 2012

Instalando node.js + npm Ubuntu 11.10

Instalación node.js + npm sin calentarnos la cabeza y de forma local en tu carpeta de usuario.

Requerimientos:

$ sudo apt-get install build-essential g++

Instalación:

19 de marzo de 2012

PHP library for OpenERP - openerplib

openerplib (https://github.com/b3ni/openerplib),

es una librería que escrito en PHP para facilitar operaciones xmlrpc con OpenERP. Está inspirada en el ORM de Django y montada encima de la librería xmlrpc.inc


Métodos disponibles:
  • CRUD sobre modelos
  • Navegabilidad many2one / one2many
  • Ejecutar métodos de modelos
  • Añadir adjuntos
  • ...

Un ejemplo de navegabilidad:

$open = new OpenERP();
$p = $open->res_partner('country')->get(1); 
print $p->id;
print $p->country->id; //many2one => res.country 
print $p->country('name')->name;

Ejemplo de búsquedas:

$fields = array('street', 'email');
$results = $open->res_partner_address($fields)->search('email', '=', 'foo@bar.com');
foreach ($results as $id => $address) {
 print "<h1>" . $id . "</h1>";
 print "<pre>" . $address->info() . "</pre>";
 print "<hr>";
}

7 de marzo de 2012

Mis Plugins para Eclipse

Mi lista de plugins actuales para Eclipse y desarrollo web.

Eclipse

Me baso en: Eclipse IDE for JavaScript Web Developers. Este plugin trae:
  • Coloreado de syntasis, html, javascript, css,...
  • Autocompletado de css. Muy util para no ir buscando las propiedades que quieres aplicar.
  • Formateo de xml. Pretty print para ficheros xml, a veces es necesario
  • ...
Donwload: http://www.eclipse.org/downloads/packages/eclipse-ide-javascript-web-developers/indigosr2

Gestión de versiones


Subclipse
Para gestionar repositorios Subversion, el sucesor de CVS.

URL: http://marketplace.eclipse.org/node/979
Download: Desde Eclipse MarketPlace



Git
Muy de moda últimamente por sitios como Github y Bitbucket. En otro post ya indique como configurar Git en Eclipse.

URL: http://www.eclipse.org/egit/
Download: Desde Eclipse MarketPlace



Python + Django

Pydev
Editor por excelencia en Eclipse. Muchas posibilidades como: sintaxis, autocompletado, debugger, formateo de código,...

Una utilidad que he descubierto hace poco, es integralo con pep8.py, para chequear tu código con las convenciones de estilos definidas en Style Guide for Python Code.

Ahora tu código python será aún más bonito.

URL: http://pydev.org/
Download: Desde Eclipse MarketPlace



Django Editor
Plugin para editor de plantillas de Django. Simple pero efectivo.

URL: http://eclipse.kacprzak.org/
Download: Añadiendo una fuente en Install New Software.




Otros

Markdown Editor

Plugin para editar cómodamente fichero .md con posibilidad de vista prévia.


URL: http://www.winterwell.com/software/markdown-editor.php
Download: Añadiendo una fuente en Install New Software.

Nota: para poder instalarlo en Eclipse 3.5, en la ventana de añadir nuevo software, hay que desactivar la opción: "Group items by category"



¿que plugin es para ti esencial?

20 de diciembre de 2011

Django + Socket.io

Si queremos Websocket en nuestra aplicación Django, hay que calentarse un poco la cabeza.

La versión actual de mod_wsgi no es posible tener websocket. Aquí se discute como extender el módulo de Apache para permitir estas conexiones. Lo dejamos en espera.

Podemos utilizar el webserver Tornado, un server no bloqueante desarrollado por FriendFeed (Facebook). O utilizar soluciones con gevent. Esta librería de python nos permite realizar peticiones asíncronas tirando de libevent.

Para no complicarnos, podemos utilizar la aplicación django_socketio.

Con esta app tenemos un websocket y el cliente para javascript de socket.io con todas las dependencias que necesitamos.

Al turrón...

Instalamos django-socketio.

$ sudo apt-get install python-dev build-essential libevent-1.4-2 libevent-dev
$ sudo pip install django_socketio
[...]
Successfully installed django-socketio gevent-socketio sphinx-me gevent-websocket gevent greenlet

Añadimos la aplicación al settings.py

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',

    # Uncomment the next line to enable the admin:
    'django.contrib.admin',

    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',

    # socket
    'django_socketio',
)

Añadimos a urls.py

urlpatterns += patterns('',
    ("", include("django_socketio.urls")),

    [otras urls]
)

Ahora creamos las vistas que serán el punto de entrada para los eventos del websocket.

@events.on_subscribe(channel="^canal-")
def menssaje(request, socket, context, channel):
    if not request.user.is_authenticated():
        socket.send_and_broadcast_channel({'action': 'connect', 'text': 'Bienvenido Invitado'}, channel=channel)
    else:
        socket.send_and_broadcast_channel({'action': 'connect', 'text': 'Bienvenido %s' % str(request.user.username)}, channel=channel)

Hay diferentes decoradores para recibir los eventos que se envíen al socket. (Consultar sección Broadcast and Send Methods en el proyecto)

En este ejemplo, los usuarios se subscribirán a canales con nombre "canal-ID". Cuando lo hagan se enviarán mensajes, tanto al usuario que se ha suscrito, como al resto de clientes conectados al mismo canal.

Otra vista podría ser del tipo:

@events.on_message(channel="^canal-")
def message(request, socket, context, message):
    message = message[0]

    action = message["action"]
    text = message["text"]

    if action == 'talk':
        print text

        socket.broadcast_channel({'action': 'talk', 'text': text}, channel)

Un usuario envía al socket un mensaje que será enviado al resto de clientes.

Como se ve, se ha definido un protocolo de comunicación entre el cliente y el servidor. Con el parámetro action, se controla las diferentes acciones que se pueden hacer en nuestra aplicación.

Ahora la parte del cliente que se comunica con el server. (simplifico al máximo)

template.html


Para arrancar la aplicación

$ ./manage.py runserver_socketio

Ya veremos en próximas entregas como pasarlo a un entorno de producción.

Referencias:
https://github.com/stephenmcd/django-socketio
http://socket.io/