<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>TopoRojo</title>
	<atom:link href="http://toporojo.es/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://toporojo.es/blog</link>
	<description>Un pouco de todo e moito de nada</description>
	<lastBuildDate>Wed, 10 Apr 2013 16:01:57 +0000</lastBuildDate>
	<language>es-ES</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Crear un portal web con Django-CMS Fase III</title>
		<link>http://toporojo.es/blog/2012/12/21/crear-un-portal-web-con-django-cms-fase-iii/</link>
		<comments>http://toporojo.es/blog/2012/12/21/crear-un-portal-web-con-django-cms-fase-iii/#comments</comments>
		<pubDate>Fri, 21 Dec 2012 21:55:59 +0000</pubDate>
		<dc:creator>chucu</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Django-CMS]]></category>

		<guid isPermaLink="false">http://toporojo.es/blog/?p=127</guid>
		<description><![CDATA[Extensión para incluir noticias en nuestro portal web Al igual que en los pasos anteriores, lo primero que debemos hacer es descargar la extensión de noticias para Django-CMS, podemos hacerlo desde aquí. Una vez descargada, extraeremos la carpeta &#8220;cmsplugin_advancednews&#8221; en el raíz de nuestro proyecto, quedando la siguiente estructura: mycmsproject/ manage.py mycmsproject/ ... admin_tools/ ... [...]]]></description>
				<content:encoded><![CDATA[<h2>Extensión para incluir noticias en nuestro portal web</h2>
<p>Al igual que en los pasos anteriores, lo primero que debemos hacer es descargar la extensión de noticias para Django-CMS, podemos hacerlo desde <a title="cmsplugin-advancednews" href="https://bitbucket.org/bercab/cmsplugin-advancednews" target="_blank">aquí</a>. Una vez descargada, extraeremos la carpeta &#8220;cmsplugin_advancednews&#8221; en el raíz de nuestro proyecto, quedando la siguiente estructura:</p>
<pre>mycmsproject/
    manage.py
    mycmsproject/
        ...
    admin_tools/
        ...
    cmsplugin_advancednews/
        ...</pre>
<p><span id="more-127"></span>Editaremos nuestro fichero settings.py y añadiremos al final de &#8220;INSTALLED_APPS&#8221; las siguiente lí­nea:</p>
<pre>    ...
    'cmsplugin_advancednews',
) #se cierra INSTALLED_APPS

CMS_APPLICATIONS_URLS = (
    ('cmsplugin_advancednews.urls', 'News'),
)
CMS_NAVIGATION_EXTENDERS = (
    ('cmsplugin_advancednews.navigation.get_nodes','News navigation'),
)</pre>
<p>Sin embargo, esta extensión en concreto, tiene como dependencia django-hvad y <tt class="docutils literal"><span class="pre">django-nani</span></tt>, dado que permite subir noticias en diferentes idiomas. Para cubrir dicha dependencia, necesitamos descargar django-hvad desde <a title="django-hvad" href="https://github.com/KristianOellegaard/django-hvad" target="_blank">aquí</a> y extraer la carpeta hvad y nani en la raíz de nuestro proyecto e incluir en settings.py, dentro de  INSTALLED_APPS, encima de &#8216;cmsplugin_advancednews&#8217; la línea:</p>
<pre>'hvad',</pre>
<p>Una vez realizado este paso, si en consola ejecutamos:</p>
<pre>python manage.py syncdb --all</pre>
<p>Vamos a obtener un error:</p>
<pre>Traceback (most recent call last):
  File "manage.py", line 10, in 
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 231, in execute
    self.validate()
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 266, in validate
    num_errors = get_validation_errors(s, app)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/validation.py", line 30, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/loading.py", line 158, in get_app_errors
    self._populate()
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/loading.py", line 64, in _populate
    self.load_app(app_name, True)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/loading.py", line 88, in load_app
    models = import_module('.models', app_name)
  File "/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/home/alejandro/Proyectos/mycmsproject/cmsplugin_advancednews/models.py", line 19, in 
    class News(TranslatableModel):
  File "/home/alejandro/Proyectos/mycmsproject/cmsplugin_advancednews/models.py", line 37, in News

Select Available Plutins &gt; Text &gt; Add a plugin'))   
  File "/usr/local/lib/python2.7/dist-packages/cms/models/fields.py", line 20, in __init__
    super(PlaceholderField, self).__init__(Placeholder, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/related.py", line 928, in __init__
    Field.__init__(self, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'language_aware'</pre>
<p>Esto es normal, para solucionarlo es necesario modificar un par de ficheros, para ello lo que vamos hacer es descargar Django-CMS desde <a title="Django CMS" href="http://django-cms.org" target="_blank">aquí.</a></p>
<p>Una vez descargado, extraemos las carpetas &#8220;menus&#8221; y &#8220;cms&#8221; a la raíz de nuestro proyecto y editamos dentro de &#8220;cms/forms/&#8221; el fichero widgets.py</p>
<p>Buscamos la línea &#8220;180&#8243; y modificamos:</p>
<pre>def __init__(self, request, filter_func):
        self.request = request
        self.filter_func = filter_func</pre>
<p>por:</p>
<pre>def __init__(self, request, filter_func, language_aware=False):
        self.request = request
        self.filter_func = filter_func
        self.language_aware = language_aware</pre>
<p>En ese mismo fichero, modificamos en la línea &#8220;198&#8243; ( más o menos ) modificamos :</p>
<pre class="line">language = get_language_from_request(self.request)</pre>
<p>por:</p>
<pre>language = get_language_from_request(self.request)
if self.language_aware:
    plugin_list = plugin_list.filter(language=language)</pre>
<p>Guardamos el fichero y modificamos cms/models/fields.py, buscando en la línea &#8220;11&#8243;:</p>
<pre class="line"> def __init__(self, slotname, default_width=None, actions=PlaceholderNoAction, **kwargs):
        validate_placeholder_name(slotname)
        if kwargs.get('related_name', None) == '+':
            raise ValueError("PlaceholderField does not support disabling of related names via '+'.")
        self.slotname = slotname
        self.default_width = default_width
        self.actions = actions()</pre>
<p>Y modificándolo, por:</p>
<pre>def __init__(self, slotname, default_width=None, language_aware=False, actions=PlaceholderNoAction, **kwargs):
        validate_placeholder_name(slotname)
        if kwargs.get('related_name', None) == '+':
            raise ValueError("PlaceholderField does not support disabling of related names via '+'.")
        self.slotname = slotname
        self.default_width = default_width
        self.actions = actions()
        self.language_aware = language_aware</pre>
<p>por último, en el mismo fichero, en la línea &#8220;32&#8243;, cambiamos:</p>
<pre class="line">widget = PlaceholderPluginEditorWidget(request, filter_func)</pre>
<p>por:</p>
<pre>widget = PlaceholderPluginEditorWidget(request, filter_func, language_aware=self.language_aware)</pre>
<p>Guardamos el fichero, vamos a la consola y ejecutamos:</p>
<pre>python manage.py syncdb --all
python manage.py migrate --fake</pre>
<p>Lanzamos el servidor:</p>
<pre>python manage.py runserver</pre>
<p>Ahora ya podremos incluir noticias en nuestro portal web, y en diferentes idiomas. Para finalizar el proyecto, faltaría poner un diseño &#8220;bonito&#8221; <img src='http://toporojo.es/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  pero eso ya os lo dejo a vosotros.</p>
<p>Podéis descargar el proyecto completo <a title="django-cms-mycmsproject-toporojo" href="https://bitbucket.org/chucu/django-cms-mycmsproject-toporojo/" target="_blank">aquí</a>.</p>
<p>Saludos.</p>
<p>&nbsp;</p>
<table class="diff-table">
<tbody>
<tr id="cms-forms-widgets-py-P6">
<td class=" diff-line">
<pre class="line">self.request = request</pre>
</td>
</tr>
<tr id="cms-forms-widgets-py-P7">
<td class="line_numbers linkable-line-number" id="L0L182">182</td>
<td class="line_numbers linkable-line-number" id="L0R182">182</td>
<td class=" diff-line">
<pre class="line">         self.filter_func = filter_func</pre>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://toporojo.es/blog/2012/12/21/crear-un-portal-web-con-django-cms-fase-iii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crear un portal web con Django-CMS Fase II</title>
		<link>http://toporojo.es/blog/2012/12/11/crear-un-portal-web-con-django-cms-fase-2/</link>
		<comments>http://toporojo.es/blog/2012/12/11/crear-un-portal-web-con-django-cms-fase-2/#comments</comments>
		<pubDate>Tue, 11 Dec 2012 20:23:56 +0000</pubDate>
		<dc:creator>chucu</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Django-CMS]]></category>

		<guid isPermaLink="false">http://toporojo.es/blog/?p=107</guid>
		<description><![CDATA[En el último post creamos una estructura base con Django-CMS de una manera rápida y sencilla. Ahora vamos a completar un poco más nuestro portal web incluyendo en la parte pública una sección de noticias y un calendario de eventos, además vamos a utilizar admin-tools para mejorar es aspecto de nuestro administrador.  Mejorar el aspecto [...]]]></description>
				<content:encoded><![CDATA[<p>En el <a title="Crear un portal web con Django-CMS Fase I" href="http://toporojo.es/blog/2012/11/15/portal-web-django-cms-fase-1/" target="_blank">último post</a> creamos una estructura base con Django-CMS de una manera rápida y sencilla. Ahora vamos a completar un poco más nuestro portal web incluyendo en la parte pública una sección de noticias y un calendario de eventos, además vamos a utilizar admin-tools para mejorar es aspecto de nuestro administrador.</p>
<h2> Mejorar el aspecto visual del administrador de Django</h2>
<p>Para ello vamos a utilizar django-admin-tools, lo podemos descargar desde <a title="django-admin-tools" href="https://bitbucket.org/izi/django-admin-tools/downloads/django-admin-tools-0.4.1.tar.gz">aquí</a>.</p>
<p><span id="more-107"></span></p>
<p>Una vez descargado descomprimiremos la carpeta admin_tools al raíz de nuestro proyecto, quedando la siguiente estructura:</p>
<pre>mycmsproject/
    manage.py
    mycmsproject/
        ...
    admin_tools/
        ...</pre>
<p>Llegados a este punto, editaremos nuestro fichero settings.py, dejando el inicio de INSTALLED_APPS de la siguiente manera:</p>
<pre>INSTALLED_APPS = (
    'admin_tools',
    'admin_tools.theming',
    'admin_tools.menu',
    'admin_tools.dashboard',
    #Resto de apps
    ....</pre>
<p>Tras añadir admin_tools a nuestro settings.py, abriremos una consola y en la raíz de nuestro proyecto ejecutaremos:</p>
<pre>python manage.py syncdb
python manage.py migrate admin_tools.dashboard
python manage.py migrate admin_tools.menu</pre>
<p>Modificaremos urls.py, añadiendo al principio de urlpatterns esta línea:</p>
<pre> url(r'^admin_tools/', include('admin_tools.urls')),</pre>
<p>Por último, antes de volver a lanzar el servidor ejecutaremos:</p>
<pre>python manage.py collectstatic</pre>
<p>Ahora ya podemos lanzar de nuevo el sevidor de Django:</p>
<pre>python manage.py runserver</pre>
<p>Y al acceder a nuestro administrador, obtendremos el siguiente resultado:</p>
<div id="attachment_112" class="wp-caption aligncenter" style="width: 310px"><a href="http://toporojo.es/blog/wp-content/uploads/2012/12/admin_tools.png"><img class="size-medium wp-image-112" title="Administrador con admin tools" src="http://toporojo.es/blog/wp-content/uploads/2012/12/admin_tools-300x144.png" alt="Administrador con admin tools" width="300" height="144" /></a><p class="wp-caption-text">Administrador con admin tools</p></div>
<p>Más información <a title="django-admin-tools" href="http://django-admin-tools.readthedocs.org/en/latest/" target="_blank">aquí</a>.</p>
<h2>Extensión para incluir noticias en nuestro portal web</h2>
<p>Al igual que en el paso anterior, lo primero que vamos hacer es descargar una de las extensiones para la gestión de eventos que hay para Django-CMS. Podemos hacerlo desde <a title="django-cms-simple-events" href="https://bitbucket.org/chucu/django-cms-simple-events" target="_blank">aquí</a>.<br />
Una vez descargada, extraeremos la carpeta &#8220;simple_events&#8221; en el raíz de nuestro proyecto, quedando la siguiente estructura:</p>
<pre>mycmsproject/
    manage.py
    mycmsproject/
        ...
    admin_tools/
        ...
    simple_events/
        ...</pre>
<p>Editaremos nuestro fichero settings.py y añadiremos al final de &#8220;INSTALLED_APPS&#8221; las siguiente línea:</p>
<pre>    ...
    'simple_events',
) #Aquí se cierra INSTALLED_APPS</pre>
<p>Luego abriremos una consola y en la raíz de nuestro proyectos ejecutaremos:</p>
<pre>python manage.py syncdb --all
python manage.py runserver</pre>
<p>Ahora si accedemos al administrador ( http://localhost:8000/admin ) vermos que tenemos la aplicación de eventos instalada.</p>
<div id="attachment_119" class="wp-caption aligncenter" style="width: 310px"><a href="http://toporojo.es/blog/wp-content/uploads/2012/12/eventos.png"><img class="size-medium wp-image-119" title="django-simple-events" src="http://toporojo.es/blog/wp-content/uploads/2012/12/eventos-300x182.png" alt="django-simple-events" width="300" height="182" /></a><p class="wp-caption-text">django-simple-events en administrador</p></div>
<p>Por último, vamos a crear una nueva página en el CMS, por ejemplo con el nombre &#8220;Agenda&#8221;, una vez creada la página desplegaremos las opciones avanzadas y seleccionaremos la aplicación de eventos.</p>
<div id="attachment_120" class="wp-caption aligncenter" style="width: 310px"><a href="http://toporojo.es/blog/wp-content/uploads/2012/12/seleccion.png"><img class="size-medium wp-image-120" title="seleccion de la aplicación" src="http://toporojo.es/blog/wp-content/uploads/2012/12/seleccion-300x212.png" alt="seleccion de la aplicación" width="300" height="212" /></a><p class="wp-caption-text">Seleccion de la aplicación de eventos</p></div>
<p>Guardamos la página y listo.</p>
<p>Este módulo nos permite añadir un calendario de eventos en cualquier página del CMS.</p>
<p>Para la integración de un sistema de noticias, dado que voy a usar el plugin: <a title="cmsplugin-advancednews" href="https://bitbucket.org/bercab/cmsplugin-advancednews" target="_blank">cmsplugin-advancednews</a> voy a crear otro post, dado que requiere de un pequeño retoque en el código del CMS y el uso de django-hvad.</p>
<p>Post relacionados: <a title="Enlace a... Crear un portal web con Django-CMS Fase I" href="http://toporojo.es/blog/2012/11/15/portal-web-django-cms-fase-1/" rel="bookmark">Crear un portal web con Django-CMS Fase I</a></p>
]]></content:encoded>
			<wfw:commentRss>http://toporojo.es/blog/2012/12/11/crear-un-portal-web-con-django-cms-fase-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crear un portal web con Django-CMS Fase I</title>
		<link>http://toporojo.es/blog/2012/11/15/portal-web-django-cms-fase-1/</link>
		<comments>http://toporojo.es/blog/2012/11/15/portal-web-django-cms-fase-1/#comments</comments>
		<pubDate>Thu, 15 Nov 2012 22:44:54 +0000</pubDate>
		<dc:creator>chucu</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Django-CMS]]></category>

		<guid isPermaLink="false">http://toporojo.es/blog/?p=89</guid>
		<description><![CDATA[Después de varios meses desaparecido&#8230; hoy me apetecía hablar de como montar un portal web rápido y de forma sencilla. Y para hacerlo he decidido utilizar Django-CMS, por ningún motivo en especial, hay muchos y muy buenos en varios lenguajes de programación. Como intento que este blog pueda seguirlo todo el mundo, antes de empezar [...]]]></description>
				<content:encoded><![CDATA[<p>Después de varios meses desaparecido&#8230; hoy me apetecía hablar de como montar un portal web rápido y de forma sencilla. Y para hacerlo he decidido utilizar Django-CMS, por ningún motivo en especial, hay muchos y muy buenos en varios lenguajes de programación.</p>
<p>Como intento que este blog pueda seguirlo todo el mundo, antes de empezar voy a aclarar algunos conceptos:</p>
<h2>¿ Qué es un CMS ?</h2>
<p>Un sistema de gestión de contenidos (en inglés Content Management System, abreviado CMS) es un programa que permite crear una estructura de soporte (framework) para la creación y administración de contenidos, principalmente en páginas web, por parte de los administradores, editores, participantes y demás roles.</p>
<p>Más info <a title="CMS" href="http://es.wikipedia.org/wiki/Sistema_de_gesti%C3%B3n_de_contenidos" target="_blank">aquí</a> [ Fuente Wikipedia ]</p>
<h2>¿ Qué es Django-CMS ?</h2>
<p>Django CMS es un proyecto de código abierto de Suiza. Es un sistema de gestión de contenido que se basa en el marco django web y está escrito en python.</p>
<p>Más información <a title="Django CMS" href="https://www.django-cms.org/" target="_blank">aquí</a>. [ Fuente Django CMS ]</p>
<p><span id="more-89"></span></p>
<h2>¿ Como empezar ?</h2>
<p>Si no tenemos instalado en nuestro equipo python, django ni django-cms, así como sus dependencias, vamos hacer lo siguiente:</p>
<pre>sudo aptitude install python python-setuptools python-imaging
sudo easy_install pip
sudo pip install django django-cms south</pre>
<p>Una vez intalado Django-CMS, vamos a crear un proyecto, en mi caso lo crearé en el home de mi usuario</p>
<pre>django-admin.py startproject mycmsproject
cd mycmsproject/mycmsproject
rm settings.py
rm urls.py
wget https://gist.github.com/raw/4234872/settings.py
wget https://gist.github.com/raw/4234895/urls.py</pre>
<p>Lo que hicimos en la parte superior, es crear nuestro proyecto y borrar el settings.py y el urls.py cambiándolos por otros con una pre-configuración ( estés pasos están sacados de la página de Django-CMS pweo los ficheros están modificados. )</p>
<p>Seguiremos creando una carpeta para nuestras plantillas y descargando unas plantillas pre-configuradas.</p>
<pre>mkdir templates
cd templates
wget https://gist.github.com/raw/4234956/example.html</pre>
<p>Por ultimo crearemos nuestra base de datos y arrancaremos el servidor.</p>
<pre>cd ../..
python manage.py syncdb --all
python manage.py migrate --fake
python manage.py runserver</pre>
<p>Lo que veremos al acceder a http://localhost:8000 , será lo siguiente:</p>
<div id="attachment_100" class="wp-caption aligncenter" style="width: 310px"><a href="http://toporojo.es/blog/wp-content/uploads/2012/11/Pantallazo.png"><img class="size-medium wp-image-100" title="Página inicial Django-CMS" src="http://toporojo.es/blog/wp-content/uploads/2012/11/Pantallazo-300x141.png" alt="Página inicial Django-CMS" width="300" height="141" /></a><p class="wp-caption-text">Página inicial Django-CMS</p></div>
<p>Con estos sencillos pasos, ya tendremos montado Django-CMS. En posteriores capítulos explicaré como añadir extensiones ( podéis encontrarlas en: https://www.django-cms.org/en/extensions/ ).</p>
<p>En el siguiente capítulo, intentaré que sea la próxima semana, instalaremos:</p>
<ul>
<li><a title="django-admin-tools" href="https://bitbucket.org/izi/django-admin-tools/wiki/Home" target="_blank">django-admin-tools</a></li>
<li><a title="cmsplugin-advancednews" href="https://bitbucket.org/bercab/cmsplugin-advancednews" target="_blank">cmsplugin-advancednews</a></li>
<li><a title="django-cms-simple-events" href="https://bitbucket.org/chucu/django-cms-simple-events" target="_blank">django-cms-simple-events</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://toporojo.es/blog/2012/11/15/portal-web-django-cms-fase-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Instalar virtualenv + OpenERP 6.1 desde cero</title>
		<link>http://toporojo.es/blog/2012/05/17/instalar-virtualenv-openerp-6-1-desde-cero/</link>
		<comments>http://toporojo.es/blog/2012/05/17/instalar-virtualenv-openerp-6-1-desde-cero/#comments</comments>
		<pubDate>Thu, 17 May 2012 08:15:19 +0000</pubDate>
		<dc:creator>chucu</dc:creator>
				<category><![CDATA[OpenERP]]></category>

		<guid isPermaLink="false">http://toporojo.es/blog/?p=65</guid>
		<description><![CDATA[Bueno, esto más que una entrada en el blog, es una nota mental de como instalar desde cero OpenERP 6.1 usando un entorno virtual con virtualenv. Requisitos previos $ sudo aptitude install build-essential python-dev postgresql libpq-dev libfreetype6-dev python-pip bzr libxml2-dev python-virtualenv libxslt1-dev libjpeg62-dev liblcms1-dev libpng12-dev Instalación y configuración OpenERP 6.1 En la carpeta que deseemos [...]]]></description>
				<content:encoded><![CDATA[<p>Bueno, esto más que una entrada en el blog, es una nota mental de como instalar desde cero <strong>OpenERP 6.1</strong> usando un entorno virtual con <strong>virtualenv</strong>.</p>
<h2>Requisitos previos</h2>
<pre><code>$ sudo aptitude install build-essential python-dev postgresql libpq-dev libfreetype6-dev python-pip bzr libxml2-dev python-virtualenv libxslt1-dev libjpeg62-dev liblcms1-dev libpng12-dev </code></pre>
<h2>Instalación y configuración OpenERP 6.1</h2>
<p>En la carpeta que deseemos en mi caso en ~/Proyectos</p>
<pre><code>$ mkdir openerp6.1 &amp;&amp; cd openerp6.1 
$ bzr branch lp:openobject-server/6.1 server 
$ bzr branch lp:openobject-addons/6.1 addons 
$ bzr branch lp:openerp-web/6.1 web </code></pre>
<p>Y también la <strong>localización española</strong> de OpenERP:</p>
<pre><code>$ bzr branch lp:openerp-spain/6.1 openerp-spain</code></pre>
<p><span id="more-65"></span>Crear un usuario de <strong>postgresql</strong> para el OpenERP 6.1</p>
<pre>$ sudo -u postgres -i
$ createuser --createdb --username postgres --no-createrole --pwprompt openuser
$ exit</pre>
<p>Crear el <strong>entorno virtual</strong> para aislar el OpenERP 6.1 del resto del sistema.</p>
<pre>$ virtualenv --no-site-packages -p python oerp_venv</pre>
<p>Bajar de launchpad el fichero requisitos</p>
<pre>$ bzr branch lp:~chucu/+junk/OERP6.1-requirements</pre>
<p>y montar el entorno virtual</p>
<pre>$ ./oerp_venv/bin/pip install -r OERP6.1-requirements/requirements.txt</pre>
<p>Instalar pychart a mano, esta puesto de último.</p>
<p>en la carpeta /oerp_venv ejecuta:</p>
<pre>$ wget http://download.gna.org/pychart/PyChart-1.39.tar.gz
$ tar xzf PyChart-1.39.tar.gz &amp;&amp; cd PyChart-1.39
$ ../bin/python setup.py install</pre>
<p>Configurar addons_path, editando openerp_serverrc</p>
<pre> $ nano ~/.openerp_serverrc</pre>
<p>A mi me queda de la siguiente manera:</p>
<pre>addons_path = ~/Proyectos/openerp6.1/openerp-spain,~/Proyectos/openerp6.1/addons,~/Proyectos/openerp6.1/web/addons</pre>
<p>y probar a lanzar el server:</p>
<pre>$ ./oerp_venv/bin/python server/openerp-server</pre>
<h2>Cliente GTK</h2>
<p>Para el cliente GTK es necesaria la libreria pyGTK, se puede instalar con pip o a mano.</p>
<p>Y bajarse el cliente desde Launchpad.</p>
<pre>$ bzr branch lp:openobject-client/6.1 client</pre>
<p>Para lanzar el cliente GTK</p>
<pre>$ ./oerp_venv/bin/python client/bin/openerp-client.py</pre>
<p><strong>Fuente:</strong> <a href="https://code.launchpad.net/~proge-team/+junk/openerp.pt-br-localiz-proge" target="_blank">Launchpad.net, “Proge Team” </a></p>
<p>P.D: Esto esta realizado bajo Linux Mint Lisa</p>
]]></content:encoded>
			<wfw:commentRss>http://toporojo.es/blog/2012/05/17/instalar-virtualenv-openerp-6-1-desde-cero/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La ética de Facebook, el estado &#8220;In memoriam&#8221;</title>
		<link>http://toporojo.es/blog/2012/02/28/la-etica-de-facebook-el-estado-in-memoriam/</link>
		<comments>http://toporojo.es/blog/2012/02/28/la-etica-de-facebook-el-estado-in-memoriam/#comments</comments>
		<pubDate>Tue, 28 Feb 2012 00:59:48 +0000</pubDate>
		<dc:creator>chucu</dc:creator>
				<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Redes Sociales]]></category>
		<category><![CDATA[defunción]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[in memorian]]></category>
		<category><![CDATA[moral]]></category>

		<guid isPermaLink="false">http://toporojo.es/blog/?p=42</guid>
		<description><![CDATA[Bueno, lo primero que quiero aclarar, es que no quiero faltar a nadie, ni herir los sentimientos de nadie con este post. Pero como el estado &#8220;In memoriam&#8221; de Facebook me parece de broma o por lo menos de una falta terrible de moralidad por parte de la Red Social, la mayoría de este post [...]]]></description>
				<content:encoded><![CDATA[<p>Bueno, lo primero que quiero aclarar, es que no quiero faltar a nadie, ni herir los sentimientos de nadie con este post. Pero como el estado &#8220;In memoriam&#8221; de Facebook me parece de broma o por lo menos de una falta terrible de moralidad por parte de la Red Social, la mayoría de este post va a intentar sacar unas risas al lector, humor negro. Si no te gusta reírte de la muerte, no sigas leyendo. Yo aviso. <img src='http://toporojo.es/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p><span id="more-42"></span></p>
<p>Lo primero de todo, para aquellos que no lo sepáis, <strong>¿Que pasa con la cuenta de Facebook si mueres?</strong></p>
<p>La solución que se les ocurrió a los lumbreras de Facebook es crear un nuevo estado &#8220;In memoriam&#8221; y digo yo, ¿por que no borrar la cuenta? Pues simple, por que la información a día de hoy es un bien muy preciado y aunque mueras tu información sigue valiendo dinero. Eso, y por que la gente de Facebook &#8220;pensó&#8221; que sería precioso conseguir la vida eterna, aunque fuera en Facebook.</p>
<p><strong>¿Qué diferencia el estado &#8220;In memoriam&#8221; de cualquier otro estado?</strong></p>
<p>Realmente poca cosa, bueno, una fundamental que el propietario de la cuenta esta muerto, así que por mucho que le escribas en el muro no te va contestar. Además de eso, pues nada. Por que Facebook te sigue avisando para que lo felicites por su cumpleaños, puedes seguir comentando/etiquetándolo en las fotos,&#8230; vamos lo de siempre ( no pude probar si además de recordarte su cumpleaños, también te recuerda su funeral o el día de su muerto, pero me parecería muy sádico, aunque a título informativo muy practico <img src='http://toporojo.es/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  ). Incluso seguro que a alguno se le ocurrió hacer una aplicación tipo &#8220;<strong>ouija</strong>&#8221; para intentar comunicarse con él. Sino me pondré a ello, que puede ser un TOP 10 <img src='http://toporojo.es/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p><strong>¿Como informar sobre el perfil de una persona fallecida?</strong></p>
<p>Esta parte es sin duda la mejor, muy bien pensada y razonada por la gente de Facebook. Intento ponerme en su lugar, imaginaos un &#8220;<strong>Brainstorm</strong>&#8221; ( por llamarlo de alguna forma ) de la gente Facebook, diciendo, y ¿como &#8220;enterramos&#8221; a los usuario de Facebook que hayan muerto en la vida real?</p>
<ul>
<li>Por que no cerramos su perfil ( ya lo conteste arriba ), RECHAZADO!.</li>
<li>Y si bloqueamos el perfil cuando reciba X condolencias, RECHAZADO!.</li>
<li>Ah, podemos mantener el perfil, pero cambiando el estado a &#8220;In memoriam&#8221; tipo capilla ardiente en internet o altar en el ciberespacio. Y que a través de un sencillo formulario un familiar o amigo nos comunique su defunción, APROBADO!.</li>
</ul>
<p>Y tachán, <a title="Informar sobre persona fallecida, Facebook" href="https://www.facebook.com/help/contact.php?show_form=deceased" target="_blank">aquí</a> tenéis ese sencillo formulario que hay que cubrir para informar sobre el perfil en Facebook de una persona fallecida. ( <a title="Informar sobre persona fallecida, Facebook" href="https://www.facebook.com/help/contact.php?show_form=deceased" target="_blank">Aquí de nuevo el enlace al formulario</a> )</p>
<div id="attachment_43" class="wp-caption aligncenter" style="width: 568px"><a href="http://toporojo.es/blog/wp-content/uploads/2012/02/formulario-facebook.png"><img class="size-full wp-image-43" title="formulario-facebook" src="http://toporojo.es/blog/wp-content/uploads/2012/02/formulario-facebook.png" alt="formulario para informar de persona fallecida a facebook" width="558" height="477" /></a><p class="wp-caption-text">Formulario para informar de persona fallecida a facebook</p></div>
<p>El formulario se las trae, ya empieza diciendo&#8230; &#8220;Bajo pena de <a title="Qué es perjurio" href="http://es.wikipedia.org/wiki/Perjurio" target="_blank">perjurio</a>&#8221; pero vamos a ver, bajo que juramento estoy al entrar en internet, o en una página Facebook, por que así según lo ponen acojona, o no?</p>
<p>Pero bueno, el término &#8220;<strong>Perjurio</strong>&#8221; no existe como termino jurídico en España aplicándose el <strong>Falso Testimonio</strong> por lo que &#8220;técnicamente&#8221; podemos dedicarnos tranquilamente a enterrar gente en Facebook, bueno, enterrar suena muy fuerte, pero a convertir las cuentas de Facebook de nuestros amigos en cuentas &#8220;conmemorativas&#8221; ( que visto como esta actualmente el mercado laboral en España, la profesión de &#8220;enterrador a sueldo en Facebook&#8221; puede tener mucha salida&#8230; xDD )</p>
<p>Siguiendo con el formulario, tras unas preguntas &#8220;normales&#8221; lleva la apoteosis, la prueba de todas las pruebas, demostrar a Facebook que la persona esta muerta. Bueno, pues esto es muy fácil dado que en la prueba del fallecimiento a Facebook le llega con una <strong><em>esquela</em></strong> ( se pueden falsificar ), un <strong><em>artículo periodístico</em></strong> ( tampoco es muy difícil falsificarlo ) o algo similar.</p>
<p>Que vamos a ver, ya una vez puestos a pedir pruebas, por lo menos pedir algo más serio, a mi a vote pronto se me ocurre el certificado de defunción, pero siendo un poco bruto, la nota de suicidio, un vídeo del entierro subido a Youtube,  que no tienes vídeo del entierro&#8230; da igual un vídeo de la lectura del testamento o una fotocopia de este también nos vale&#8230; xD</p>
<p>Bueno, y ya para acabar, que podría seguir, pero creo que ya quede bastante como un cretino por hoy, y viendo el posible filón que pueden ser dentro de unos años las cuentas &#8220;In memoriam&#8221; o &#8220;conmemorativas&#8221;, alguien se anima a desarrollar aplicaciones para Facebook, a mi se me ocurren varias:</p>
<ul>
<li>&#8220;<strong>Vídeo esquela</strong>&#8220;, una aplicación que primero te dice que día vas a morir, y luego te permite grabar un vídeo invitando a tus amigos a tu funeral.</li>
<li>&#8220;<strong>Cambio de estado póstumo</strong>&#8220;, cada año celebrando el aniversario de tu muerte, la aplicación cambia tu estado, por ejemplo: &#8220;Visitando a Fraga&#8221;, &#8220;De cañas con Kurt Kovain&#8221;, y lo que tu nos digas.</li>
<li>&#8220;<strong>El fantasma</strong>&#8220;, una vez tengas tu cuenta &#8220;In memoriam&#8221; con esta aplicación podrás colgar publicaciones preseleccionadas en las cuentas de tus amigos/familiares para que nunca se olviden de ti.</li>
</ul>
<p>Vale, se de sobra que la última parte es una burrada, pero no me quedaba tranquilo si no lo ponía, si Facebook puede meterse con la muerte, yo también <img src='http://toporojo.es/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> .</p>
<p>Saludos.</p>
<p>Fuente: <a href="http://revistareplicante.com/columnas/parentesis/la-imposibilidad-de-morirse-en-facebook/" target="_blank">http://revistareplicante.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://toporojo.es/blog/2012/02/28/la-etica-de-facebook-el-estado-in-memoriam/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Desarrollo web con Python: Pylons</title>
		<link>http://toporojo.es/blog/2012/02/11/desarrollo-web-con-python-pylons/</link>
		<comments>http://toporojo.es/blog/2012/02/11/desarrollo-web-con-python-pylons/#comments</comments>
		<pubDate>Sat, 11 Feb 2012 01:50:10 +0000</pubDate>
		<dc:creator>chucu</dc:creator>
				<category><![CDATA[Pylons]]></category>

		<guid isPermaLink="false">http://toporojo.es/blog/?p=15</guid>
		<description><![CDATA[Empezando por el principio, ¿por que desarrollar webs en Python? Pues copiando lo que leí en xergio.net (muy recomendable) por su relación calidad/sencillez/comunidad. ¿Qué es Pylons? Pylons es un framework de aplicaciones web open source que implementa el patrón modelo-vista-controlador. Pylons usa intensivamente el estandard Web Server Gateway Interface (WSGI).Pylons posee una fuerte influencia de [...]]]></description>
				<content:encoded><![CDATA[<p>Empezando por el principio, ¿por que desarrollar webs en Python? Pues copiando lo que leí en xergio.net (muy recomendable) por su relación calidad/sencillez/comunidad.</p>
<h1><strong>¿Qué es Pylons?</strong></h1>
<p>Pylons es un framework de aplicaciones web open source que implementa el patrón modelo-vista-controlador. Pylons usa intensivamente el estandard Web Server Gateway Interface (WSGI).<a href="http://toporojo.es/blog/wp-content/uploads/2012/02/pylons.png"><img class="aligncenter  wp-image-30" title="pylons" src="http://toporojo.es/blog/wp-content/uploads/2012/02/pylons.png" alt="" width="358" height="167" /></a>Pylons posee una fuerte influencia de Ruby on Rails. Dos de sus principales componentes Routes and WebHelpers son reimplementaciones de Rails en Python.</p>
<p><span id="more-15"></span></p>
<h1><strong>Crear un blog sencillo desde cero en Pylons</strong></h1>
<h2><strong>1. Instalación, configuración y modelo.</strong></h2>
<p>Lo primero que necesitamos, es instalar Pylons</p>
<pre>easy_install Pylons
easy_install SQLAlchemy #ORM</pre>
<p>En este caso vamos usar como base de datos PostgreSQL 9,1 por lo que necesitamos psycopg2</p>
<pre># En nuestra carpeta de usuario ( o donde queramos )
paster create -t pylons MyBlog    # Cuando nos pregunte por el tipo de
# plantillas seleccionaremos mako.
# Cuando pregunte por incluir SQLAlchemy, marcaremos True.
cd MyBlog</pre>
<p>Editamos el fichero <strong>development.ini</strong> y en la sección [app:main], indicamos la configuración de la base de datos.</p>
<pre>sqlalchemy.url = postgres://username:password@host:port/database</pre>
<p>Luego con ayuda de sqlalchemy, creamos el modelo en <strong><strong>~/MyBlog</strong>/myblog/model/__ init __.py</strong></p>
<p>Dejándolo de la siguiente manera:</p>
<pre>import sqlalchemy as sa
from sqlalchemy import types

from myblog.model.meta import Session, Base

def init_model(engine):
    """Llamado antes de usar cualquiera de las tablas o clases en el modelo"""
    Session.configure(bind=engine)

class Blog(Base):
    __tablename__ = "Blog"
    __mapper_args__ = dict(order_by="date desc")

    id = sa.Column(types.Integer, primary_key=True)
    subject = sa.Column(types.Unicode(255))
    author = sa.Column(types.Unicode(255))
    date = sa.Column(types.DateTime())
    content = sa.Column(types.Text())</pre>
<p>Ahora es necesario editar <strong>~/MyBlog/myblog/websetup.py</strong> :</p>
<pre>"""Setup the MyBlog application"""
import logging

import pylons.test

from myblog.config.environment import load_environment
from myblog.model.meta import Session, Base

log = logging.getLogger(__name__)

def setup_app(command, conf, vars):
    """Place any commands to setup myblog here"""
    # Don't reload the app if it was loaded under the testing environment
    if not pylons.test.pylonsapp:
        load_environment(conf.global_conf, conf.local_conf)

    # Create the tables if they don't already exist
    log.info("Creating database tables")
    Base.metadata.create_all(bind=Session.bind)
    log.info("Finished setting up")</pre>
<p>Por último, en este primer paso, dentro de la carpeta general del proyecto, en este caso MyBlog, ejecutaremos:</p>
<pre>paster setup-app development.ini</pre>
<p>que se ocupará de crear nuestra base de datos.</p>
<h2><strong>2. Controladores</strong></h2>
<p>Pylons basa sus aplicaciones en una serie de controladores, así que vamos a crear el controlador del blog.</p>
<p>De nuevo en la carpeta raíz del proyecto, ejecutaremos:</p>
<pre>paster controller blog</pre>
<p>Modificamos el controlador del blog, en <strong>~/MyBlog/myblog/controllers/blog.py</strong> dejándolo de esta manera:</p>
<pre>import logging

from pylons import request, response, session, tmpl_context as c, url
from pylons.controllers.util import abort, redirect

from myblog.lib.base import BaseController, render
from myblog import model

log = logging.getLogger(__name__)

class BlogController(BaseController):
    # Recuperamos los 5 últimos post y los enviamos a la plantilla.
    def index(self):
        q = model.Session.query(model.Blog)
        c.posts = q.limit(5)
        return render("/blog/index.mako")</pre>
<p>Crearemos la plantilla en la ruta <strong><strong>~/MyBlog</strong>/myblog/templates/blog/index.mako</strong></p>
<pre>&lt;%inherit file="site.mako" /&gt;
&lt;%def name="title()"&gt;MyBlog Home&lt;/%def&gt;

&lt;p&gt;${c.posts.count()} new blog posts!&lt;/p&gt;

% for post in c.posts:
&lt;p class="content" style="border-style:solid; border-width:1px"&gt;
        &lt;span class="h3"&gt; ${post.subject} &lt;/span&gt;
        &lt;span class="h4"&gt;Posted on: ${post.date} by ${post.author}&lt;/span&gt;
        &lt;br&gt;
          ${post.content}
&lt;/p&gt;
% endfor</pre>
<p>Por último en este paso, necesitamos crear el HTML base del sitio, lo crearemos en la siguiente ruta <strong>~/MyBlog/myblog/templates/blog/site.mako</strong> dejándolo, por ejemplo,  de la siguiente manera:</p>
<pre>&lt;%def name="title()"&gt;&lt;/%def&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;
        &lt;title&gt;MyBlog: ${self.title()}&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h1&gt;${self.title()}&lt;/h1&gt;

&lt;!-- *** BEGIN page content *** --&gt;
${self.body()}
&lt;!-- *** END page content *** --&gt;

    &lt;/body&gt;
&lt;/html&gt;</pre>
<h2><strong>3. Prueba de la aplicación</strong></h2>
<p>Para ejecutar la aplicación, ejecutaremos en el directorio raíz de la aplicación:</p>
<pre> paster serve --reload development.ini</pre>
<p>Ahora podremos ver nuestro blog en <a href="http://translate.googleusercontent.com/translate_c?hl=es&amp;ie=UTF8&amp;prev=_t&amp;rurl=translate.google.es&amp;sl=en&amp;tl=es&amp;twu=1&amp;u=http://localhost:5000/blog&amp;usg=ALkJrhgQc_DtlWcP5mYEb2dlTOiRyUHyYw" rel="nofollow">http://localhost:5000/blog</a></p>
<p>Si nos movemos a <a href="http://translate.googleusercontent.com/translate_c?hl=es&amp;ie=UTF8&amp;prev=_t&amp;rurl=translate.google.es&amp;sl=en&amp;tl=es&amp;twu=1&amp;u=http://localhost:5000/blog&amp;usg=ALkJrhgQc_DtlWcP5mYEb2dlTOiRyUHyYw" rel="nofollow">http://localhost:5000/ </a>veremos la página por defecto de Pylons, podemos situar nuestro blog en la raíz, con dos sencillos pasos:</p>
<ol>
<li>Borrar o renombrar el fichero ~/MyBlog/myblog/public/index.html</li>
<li>Añadiendo una nueva regla de enrutamiento en el fichero <strong>~/MyBlog/myblog/config/routing.py</strong> de la siguiente manera:</li>
</ol>
<p>Debajo del comentario &#8220;# CUSTOM ROUTES HERE&#8221;, añadiremos esta línea:</p>
<pre>map.connect('/', controller='blog', action='index')</pre>
<h2><strong>4. Añadir una interfaz de administrador</strong></h2>
<p>Creamos el controlador con el nombre seleccionado, en este caso &#8220;toolkit&#8221; lanzando el siguiente comando en desde el directorio raíz.</p>
<pre>paster controller toolkit</pre>
<p>Crearemos las plantillas del &#8220;administrador&#8221;, una para el inicio y otra con el formulario para incluir nuevos posts.</p>
<pre>mkdir ~/MyBlog/myblog/templates/toolkit</pre>
<p><strong>~/MyBlog/myblog/templates/toolkit/index.mako</strong></p>
<pre>&lt;%inherit file="/blog/site.mako" /&gt;
&lt;%def name="title()"&gt;Admin Control Panel&lt;/%def&gt;

This is home of the toolkit. &lt;br&gt;
For now you can only
&lt;a href="${url(controller="toolkit", action="blog_add")}"&gt;add&lt;/a&gt;
blog posts.
&lt;p&gt;
Later on you'll be able to delete and edit also.</pre>
<p><strong>~/MyBlog/myblog/templates/toolkit/add.mako</strong></p>
<pre>&lt;%inherit file="/blog/site.mako" /&gt;
&lt;%def name="title()"&gt;Add Blog Post&lt;/%def&gt;

&lt;span class="h3"&gt; Post a Comment &lt;/span&gt;
${h.form(url(controller='toolkit', action='blog_add_process'))}
&lt;label&gt;Subject: ${h.text('subject')}&lt;/label&gt;&lt;br&gt;
&lt;label&gt;Author: ${h.text('author')}&lt;/label&gt;&lt;br&gt;
&lt;label&gt;Post Content: ${h.textarea('content')}&lt;/label&gt;&lt;br&gt;
${h.submit('post', 'Post New Page')}
${h.end_form()}</pre>
<p>Añadimos:</p>
<p><strong>~/MyBlog/myblog/lib/helpers.py</strong></p>
<pre>from webhelpers.html.tags import form, text, textarea, submit, end_form</pre>
<p>Y creamos el controlador.</p>
<p><strong>~/MyBlog/myblog/controllers/toolkit.py</strong></p>
<pre>import datetime
import logging

from pylons import request, response, session, tmpl_context as c, url
from pylons.controllers.util import abort, redirect

from myblog.lib.base import BaseController, render
from myblog import model

log = logging.getLogger(__name__)

class ToolkitController(BaseController):

    def index(self):
        return render('/toolkit/index.mako')

    def blog_add(self):
        return render('/toolkit/add.mako')

    def blog_add_process(self):
        # Create a new Blog object and populate it.
        newpost = model.Blog()
        newpost.date = datetime.datetime.now()
        newpost.content = request.params['content']
        newpost.author = request.params['author']
        newpost.subject = request.params['subject']
        # I didn't set ID because it will get a value automatically.

        # Attach the object to the session.
        model.Session.add(newpost)

        # Commit the transaction.
        model.Session.commit()

        # Redirect to the blog home page.
        redirect(url(controller="blog", action="index"))</pre>
<p>Una vez creado, podremos añadir nuevos posts a nuestro blog en la siguiente URL</p>
<p>http://localhost:5000/toolkit/index</p>
<p>O entrar directamente al formulario.</p>
<p>http://localhost:5000/toolkit/blog_add</p>
<p>Saludos.</p>
<p>Fuente: <a title="wiki.pylonshq.com" href="http://wiki.pylonshq.com" target="_blank">wiki.pylonshq.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://toporojo.es/blog/2012/02/11/desarrollo-web-con-python-pylons/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Instalar OpenERP 6.1</title>
		<link>http://toporojo.es/blog/2012/02/09/instalar-openerp-6-1/</link>
		<comments>http://toporojo.es/blog/2012/02/09/instalar-openerp-6-1/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 21:47:44 +0000</pubDate>
		<dc:creator>chucu</dc:creator>
				<category><![CDATA[OpenERP]]></category>

		<guid isPermaLink="false">http://toporojo.es/blog/?p=8</guid>
		<description><![CDATA[Bueno, vamos a empezar, con algo relativamente sencillo, instalar en nuestro equipo OpenERP, en su versión 6.1 Lo primero, yo estoy usando para esta instalación Linux Mint 12. Sinceramente, nunca lo instalé en Windows, así que no puedo decir como se hace. Primer paso Empezaremos bajándonos los repositorios de launchpad con bazaar Tendrémos que bajarnos [...]]]></description>
				<content:encoded><![CDATA[<p>Bueno, vamos a empezar, con algo relativamente sencillo, instalar en nuestro equipo OpenERP, en su versión 6.1</p>
<p>Lo primero, yo estoy usando para esta instalación Linux Mint 12. Sinceramente, nunca lo instalé en Windows, así que no puedo decir como se hace. <img src='http://toporojo.es/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Primer paso</h2>
<p>Empezaremos bajándonos los repositorios de launchpad con <a title="Que es bazaar" href="http://es.wikipedia.org/wiki/Bazaar_%28software%29" target="_blank">bazaar</a></p>
<p>Tendrémos que bajarnos los siguientes repositorios:</p>
<ul>
<li>bzr branch lp:openobject-addons</li>
<li>bzr branch lp:openobject-server</li>
<li>bzr branch lp:openerp-web</li>
<li>bzr branch lp:openerp-spain/6.1</li>
</ul>
<p>Estos habrá que cambiarlos una vez que liberen la versión estable ya que ahora hacen referencia a trunk y los cambiarán después de publicarla.</p>
<p><span id="more-8"></span></p>
<p>Para el correcto funcionamiento, yo utilizo, Python 2.7 y Postgresql 9.0, debería funcionar con Python 2.6 y versiones anteriores de Postgresql</p>
<h2>Paquetes necesarios</h2>
<p>Puede que me deje alguno, pero los fundamentales son:</p>
<ul>
<li>python-werkzeug</li>
<li>python-openid</li>
<li>python-yaml</li>
<li>python-reportlab</li>
<li>python-pychart</li>
<li>python-pybabel</li>
<li>python-openid</li>
</ul>
<h2>Configurar el arranque de OpenERP</h2>
<p>El arranque del servidor está algo cambiado con respecto a versiones anteriores de OpenERP, en mi caso, baje los repositorios de OpenERP a la ruta ( /opt/openerp/ ):</p>
<p>Existe un script en la raíz del repositorio del servidor que se llama &#8220;openerp-server&#8221; y hay un archivo de configuración en la carpeta install &#8220;openerp-server.conf&#8221;</p>
<p>En ese archivo configuraremos el usuario y servidor de postgresql, existen varias opciones para arrancarlo pero de inicio,usaremos las básicas.</p>
<p>Añadiremos el parametro &#8220;addons_path&#8221; y le pondrémos el valor de las rutas a todos los directorios de addons separados por comas.</p>
<p>Estos directorios serán, el repositorio de la localización española, el repositorio de addons y la carpeta de addons del repositorio del cliente web.</p>
<p>Por ejemplo:</p>
<p><code>addons_path = opt/openerp/openerp-spain,/opt/openerp/openobject-addons,/opt/openerp/openerp-web/addons</code></p>
<p>En el ejemplo, falta la carpeta de la localización española, es necesario ponerla de primera porque los módulos tienen prioridad según el orden.</p>
<p>Si necesitamos algún módulo de extra-addons, podemos meter el repositorio entero ( no es muy recomendable ) o solo añadir la ruta de los módulos que vayamos a usar.</p>
<h2>Arrancar el servidor de OpenERP</h2>
<p>Como no hemos configurado OpenERP para que arranque automáticamente ( eso en posteriores post ), paraBueno, vamos a empezar, con algo relativamente sencillo, instalar en nuestro equipo OpenERP, en su versión 6.1 arrancarlo manualmente, debemos de usar el siguiente comando:</p>
<p><code>./openerp-server -c ./install/openerp-server.conf</code></p>
<p>El servidor web arrancará directamente, siendo accesible desde el puerto 8069 desde la web, o en el puerto 8070 desde el cliente de escritorio GTK.</p>
<p>&nbsp;</p>
<p>Esto es todo por hoy, el próximo día que me aburra, seguimos. <img src='http://toporojo.es/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Saludos</p>
<p>Como no hemos configurado OpenERP para que arranque automáticamente ( eso en posteriores post ), para arrancarlo manualmente, debemos de usar el siguiente comando:</p>
]]></content:encoded>
			<wfw:commentRss>http://toporojo.es/blog/2012/02/09/instalar-openerp-6-1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Vamos que nos vamos&#8230;</title>
		<link>http://toporojo.es/blog/2012/02/09/vamos-que-nos-vamos/</link>
		<comments>http://toporojo.es/blog/2012/02/09/vamos-que-nos-vamos/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 21:12:55 +0000</pubDate>
		<dc:creator>chucu</dc:creator>
				<category><![CDATA[OpenERP]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[openERP]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://toporojo.es/blog/?p=1</guid>
		<description><![CDATA[Después de mucho tiempo de &#8220;silencio&#8221; por lo menos en el blog, hoy aprovechando que estoy con gripe y que cuando me acuesto no doy respirado, voy empezar una serie de post a cerca de programación en python, especialmente dedicado a OpenERP. ¿Por qué? Bueno, es bastante fácil, durante los últimos 3 años de mi [...]]]></description>
				<content:encoded><![CDATA[<p>Después de mucho tiempo de &#8220;silencio&#8221; por lo menos en el blog, hoy aprovechando que estoy con gripe y que cuando me acuesto no doy respirado, voy empezar una serie de post a cerca de programación en python, especialmente dedicado a OpenERP.</p>
<h2>¿Por qué?</h2>
<p>Bueno, es bastante fácil, durante los últimos 3 años de mi vida, me dediqué a programar sobre todo en Django, pero actualmente, es necesario que programe para OpenERP, y pensé&#8230; era bueno documentarlo todo&#8230; y &#8220;zas&#8221; por que no revivir el blog, así lo puedo mirar desde cualquier sitio ( sí, no tengo previsión de muchas visitas&#8230; xD)</p>
<p><span id="more-1"></span></p>
<h3>¿Qué es OpenERP?</h3>
<p>Para contestar esta pregunta, me remito a la Wikipedia.</p>
<p>Open ERP es un sistema ERP y CRM. Tiene componentes separados en esquema Cliente-servidor. Dispone de interfaces XML-RPC, y SOAP. Anteriormente se le conoció como TinyErp.</p>
<p>Entre sus características están la contabilidad analítica, contabilidad financiera, gestión de almacenes/inventario, gestión de ventas y compras, automatización de tareas, campañas de marketing, ayuda técnica (Helpdesk) y punto de venta. Dentro de la construcción misma del software se hace uso intensivo de flujos de trabajo que se pueden integrar con los módulos.</p>
<p>El programa es Software libre liberado bajo la GPL.</p>
<p>Es multiplataforma, funciona sobre Linux y Windows, y la interfaz de usuario está construida sobre Gtk+, también hay una alternativa construida sobre Qt. Adicionalmente hay un cliente para ambiente Web llamado Etiny que fue construido sobre TurboGears.</p>
<p>OpenERP se describe así mismo como el ERP de Código abierto más destacado y sencillo que existe hasta el momento.</p>
<p>Emplea a Postgresql como Sistema manejador de bases de datos y ha sido programado con Python, lo cual permite que su adecuación e implantación sea limpia y pueda tener una curva bastante menor que otras soluciones.</p>
<p><strong>Anotaciones personales</strong></p>
<ul>
<li>Actualmente muchos módulos tienen licencia AGPL (invenciones de los belgas para sacar la versión Enterprise)</li>
<li>Tiene una gran comunidad, sin embargo la documentación de los módulos creados por la comunidad es escasa o inexistente,<br />
además ¿borran los comentarios del código cuando se publican los módulos? parece que sí.<br />
muchos módulos están sin completar.</li>
<li>No es sencilla la migración entre versiones, OpenERP no informa claramente de las mejoras, cambios que realiza entre las versiones, o por lo menos no encontré donde.</li>
<li>El cliente GTK esta medio abandonado, y el web actual (6.1) esta bien, pero aún en desarrollo.</li>
</ul>
<h2>Conclusión</h2>
<p>Sinceramente, con lo poco que estuve trabajando con OpenERP, creo que puede ser entretenido, aunque creo que deben mejorar en muchos aspectos, sin embargo a día de hoy parece ser el mejor ERP &#8220;libre&#8221; del mercado. Os seguiré contando.</p>
<p>En el próximo capítulo, como instalar OpenERP 6.1 desde cero para una PYME. Saludos</p>
]]></content:encoded>
			<wfw:commentRss>http://toporojo.es/blog/2012/02/09/vamos-que-nos-vamos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
