<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10spanishfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
 
 <title>Jam Blog</title>
 
 <link href="http://blog.jam.net.ve" />
 <updated>2012-05-17T13:57:35-07:00</updated>
 <id>http://blog.jam.net.ve</id>
 <author>
   <name>Jesus Marin</name>
   <email>jam@jam.net.ve</email>
 </author>

 
 <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/jamunixblog" /><feedburner:info uri="jamunixblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>jamunixblog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/content?lg=es&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fjamunixblog" src="http://eur.i1.yimg.com/eur.yimg.com/i/es/my/addto1.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.feedness.com/alta/http://feeds.feedburner.com/jamunixblog" src="http://www.feedness.com/ayuda/wp-content/square_b_sh_feed.gif">Subscribe with Feedness</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjamunixblog" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/jamunixblog" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjamunixblog" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fjamunixblog" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjamunixblog" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjamunixblog" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Fjamunixblog" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Fjamunixblog" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2Fjamunixblog" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fjamunixblog" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fjamunixblog" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fjamunixblog" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjamunixblog" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjamunixblog" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fjamunixblog" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjamunixblog" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2Fjamunixblog" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><entry>
   <title>Instalando rbenv en linux</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/aH7nnAvCDFg/instalando-rbenv-en-linux" />
   <updated>2012-04-27T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2012/04/27/instalando-rbenv-en-linux</id>
   <content type="html">&lt;h1&gt;rbenv&lt;/h1&gt;

&lt;p&gt;Es una herramienta en linea de comandos que nos permite administrar y cambiar fácilmente
entre nuestras múltiples instalaciones de diversas versiones de Ruby. Es muy sencillo, discreto,
y sigue la tradicion UNIX.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/sstephenson/rbenv"&gt;Rbenv&lt;/a&gt;&lt;/strong&gt; a diferencia de &lt;strong&gt;RVM&lt;/strong&gt; solo nos permite en su instalacion
por defecto administrar multiples versiones de Ruby, lo que nos lleva a una solucion mas limpia y
simple con menos peculiaridades y trampas. &lt;strong&gt;rbenv&lt;/strong&gt; fue creado por &lt;a href="http://sstephenson.us/"&gt;Sam Stephenson&lt;/a&gt; de
&lt;a href="http://37signals.com/"&gt;37Signal&lt;/a&gt; el cual creo el Framework JavaScript &lt;a href="http://prototypejs.org/"&gt;Prototype&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;Que hace rbenv?&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Nos permite cambiar la versión de Ruby global de usuario.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Proporciona soporte para las versiones de Ruby en pre-proyecto o desarrollo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Permite reemplazar la version de Ruby con variables de entorno.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h1&gt;En contraste con RVM, rbenv no...&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Necesita ser cargado en una terminal.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No sobreescribe comandos de consola como &lt;code&gt;cd&lt;/code&gt;.&lt;/strong&gt; Eso es peligroso y propenso a errores.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tiene un archivo de configuracion. No hay nada que configurar excepto que version de Ruby quieres usar.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Instala Ruby.&lt;/strong&gt; Tu puedes compilar e instalar Ruby por tu cuenta, o usar &lt;a href="https://github.com/sstephenson/ruby-build"&gt;ruby-build&lt;/a&gt; para automatizar el proceso.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Administra gemas.&lt;/strong&gt; Para ese trabajo existen muy buenas herramientas dedicadas como &lt;a href="http://gembundler.com/"&gt;Bundler&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Exige cambios de las librerias Ruby para compatibilidad.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pregunta con advertencias cuando cambios a un proyecto.&lt;/strong&gt; En lugar de ejecutar código arbitrario, rbenv lee solo el nombre de la version de cada proyecto.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h1&gt;Instalacion.&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Antes que nada tengo que advertirte que rbenv no es compatible con RVM&lt;/strong&gt; por lo que si estas usandolo
te aconsejo desinstalarlo. Como lo puedes hacer? simplemente elimina la carpeta &lt;code&gt;~/.rvm&lt;/code&gt; y borra cualquier
referencia hacia &lt;strong&gt;RVM&lt;/strong&gt; en tu &lt;code&gt;~/.bashrc&lt;/code&gt; o &lt;code&gt;~/.bash_profile&lt;/code&gt; o &lt;code&gt;~/.zshrc&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Antes de instalar rbenv debes instalar algunas dependencias basicas&lt;/strong&gt; para compilar Ruby entre otras cosas,
probablemente ya las tengas instaladas pero si obtienes algun error compilando Ruby te recomiendo leer
mi &lt;strong&gt;&lt;a href="http://blog.jam.net.ve/2011/05/17/instalando-rvm-ruby-rails-en-ubuntu/"&gt;Guia de instalacion de RVM&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;En primer lugar clonamos &lt;strong&gt;rbenv&lt;/strong&gt; desde su repositorio Github a una carpeta en &lt;code&gt;~/.rbenv&lt;/code&gt; ejecutanto en la terminal:&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;git clone git://github.com/sstephenson/rbenv.git .rbenv
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Agregamos &lt;code&gt;~/.rbenv/bin&lt;/code&gt; a nuestro &lt;code&gt;$PATH&lt;/code&gt; para acceder al comando &lt;code&gt;rbenv&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;eval &amp;quot;$(rbenv init -)&amp;quot;&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bash_profile
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;En caso de que uses Zsh&lt;/strong&gt; modifica &lt;code&gt;~/.zshrc&lt;/code&gt; en lugar de &lt;code&gt;~/.bash_profile&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agrega &lt;code&gt;rbenv init&lt;/code&gt; a tu shell para activar shims y autocompletado:&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;eval &amp;quot;$(rbenv init -)&amp;quot;&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bash_profile
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;En caso de que uses Zsh&lt;/strong&gt; modifica &lt;code&gt;~/.zshrc&lt;/code&gt; en lugar de &lt;code&gt;~/.bash_profile&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reinicia tu terminal, simplemente cierrala y vuelve a abrirla o ejecuta:&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nv"&gt;$SHELL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;FELICITACIONES!!! Con esto ya tienes instalado rbenv!!!&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;Instalacion de Ruby.&lt;/h1&gt;

&lt;p&gt;Existen dos metodos de instalar Ruby con rbenv:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1-&lt;/strong&gt; Compilando desde sus fuentes:&lt;/p&gt;

&lt;p&gt;Tan solo instala la versionde Ruby que desees en &lt;code&gt;~./rbenv/versions&lt;/code&gt; por ejemplo si queremos instalar Ruby 1.9.3-p194:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Descargamos los fuentes desde &lt;a href="http://ftp.ruby-lang.org/pub/ruby/1.9/"&gt;ftp.ruby-lang.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;luego descomprimes el archivo, entramos a el en una terminal y ejecutamos los siguientes comandos:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;./configure --prefix&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;/.rbenv/versions/1.9.3-p194
&lt;span class="nv"&gt;$ &lt;/span&gt;make
&lt;span class="nv"&gt;$ &lt;/span&gt;make install
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Con esto ya tendriamos instalado Ruby, tan solo nos faltaria reconstruir los archivos shim (calce) binarios:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;rbenv rehash
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Nota&lt;/strong&gt; Esto lo debemos hacer cada vez que se instala un nuevo binario de Ruby como por ejemplo cuando
instalamos una nueva version de Ruby o cuando instalamos una Gema que contiene un binario como por ejemplo rake.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2-&lt;/strong&gt; Por medio de el plugin &lt;a href="https://github.com/sstephenson/ruby-build"&gt;ruby-build&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tan solo debemos instalarlo como plugins para rbenv dentro de &lt;code&gt;~/.rbenv/plugins&lt;/code&gt; ejecutando los siguientes comandos:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;mkdir -p ~/.rbenv/plugins
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.rbenv/plugins
&lt;span class="nv"&gt;$ &lt;/span&gt;git clone git://github.com/sstephenson/ruby-build.git
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Luego de esto puedes usar el comando &lt;code&gt;rbenv install&lt;/code&gt; por ejemplo si queremos instalar Ruby 1.9.2-p318 ejecutamos:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;rbenv install 1.9.2-p318
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; debido a que &lt;strong&gt;ruby-build&lt;/strong&gt; usa una especie de &lt;a href="https://github.com/sstephenson/ruby-build/tree/master/share/ruby-build"&gt;recipes o definiciones de compilacion&lt;/a&gt; para descargar, compilar e instalas las distintas versiones de Ruby, al momento de ser liberada una nueva version de ruby te recomiendo&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Antes&lt;/strong&gt; de intentar instalarla, actualizar el plugin &lt;strong&gt;ruby-build&lt;/strong&gt; ejecutando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.rbenv/plugins/ruby-build
&lt;span class="nv"&gt;$ &lt;/span&gt;git pull
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Si luego de esto todavia no puedes instalar la nueva version de Ruby es posible que no este todavia actualizado
el repositorio de ruby-build por lo que deberas instalar descargando los fuentes y compilandolos tal cual
explico en el 1er metodo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; Recuerda ejecutar &lt;code&gt;rbenv rehash&lt;/code&gt; cada vez que instales una version de Ruby o instales una gema que
contenga binarios, esto es lo unico en lo que hay que tener cuidado con &lt;strong&gt;rbenv&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;Actualizando rbenv.&lt;/h1&gt;

&lt;p&gt;Debido a que rbenv se descarga desde su repositorio de desarrollo Github usando &lt;code&gt;git&lt;/code&gt;, podemos actualizarlo a
la ultima version facilmente ejecutando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.rbenv
&lt;span class="nv"&gt;$ &lt;/span&gt;git pull
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;h1&gt;Usos basicos de rbenv.&lt;/h1&gt;

&lt;p&gt;Bien ya tenemos instalado rbenv y algunas versiones de Ruby, ahora nos toca ver como podemos cambiar entre
las distintas versiones que tenemos instaladas.&lt;/p&gt;

&lt;p&gt;rbenv determina cual version de Ruby sera utilizada con un simple modelo de prioridad:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;global &gt; local &gt; shell&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;El parametro &lt;strong&gt;global&lt;/strong&gt; le indica a rbenv que se usara la version de Ruby indicada en todo el sistema y todas
las consolas que se abran.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;code&gt;rbenv global 1.9.3-p194&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;El parametro &lt;strong&gt;local&lt;/strong&gt; le indica a rbenv que se usara la version de Ruby indicada solo en la carpeta
(y subcarpetas) o proyecto en el que te encuentres, y lo configura creando un archivo oculto &lt;strong&gt;.rbenv-version&lt;/strong&gt;
en la raiz de la carpeta en la que estas.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;code&gt;rbenv local 1.9.2-p318&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;El parametro &lt;strong&gt;shell&lt;/strong&gt; le indica a rbenv que se usara la version de ruby indicada solo en esa sesion shell
en ejecucion, por lo que al cerrar esa terminal y volverla abrir se fijara la version de
Ruby indicada en el parametro &lt;strong&gt;global&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;code&gt;rbenv shell 1.9.3-p125&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Existe un parametro especial que le indica a rbenv usar la version de Ruby instalada en el sistema.
para acceder a ella tan solo ejecuta:&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;code&gt;rbenv system&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Para mas comandos utiles de rbenv puedes ejecutar &lt;code&gt;rbenv help&lt;/code&gt; para leer la ayuda.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JFsWPYnS10_ZCRYz69X0jOgVHog/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JFsWPYnS10_ZCRYz69X0jOgVHog/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JFsWPYnS10_ZCRYz69X0jOgVHog/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JFsWPYnS10_ZCRYz69X0jOgVHog/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=aH7nnAvCDFg:7N1TrY0w2Sg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=aH7nnAvCDFg:7N1TrY0w2Sg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=aH7nnAvCDFg:7N1TrY0w2Sg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=aH7nnAvCDFg:7N1TrY0w2Sg:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=aH7nnAvCDFg:7N1TrY0w2Sg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=aH7nnAvCDFg:7N1TrY0w2Sg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=aH7nnAvCDFg:7N1TrY0w2Sg:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=aH7nnAvCDFg:7N1TrY0w2Sg:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=aH7nnAvCDFg:7N1TrY0w2Sg:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=aH7nnAvCDFg:7N1TrY0w2Sg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=aH7nnAvCDFg:7N1TrY0w2Sg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=aH7nnAvCDFg:7N1TrY0w2Sg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=aH7nnAvCDFg:7N1TrY0w2Sg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=aH7nnAvCDFg:7N1TrY0w2Sg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=aH7nnAvCDFg:7N1TrY0w2Sg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=aH7nnAvCDFg:7N1TrY0w2Sg:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=aH7nnAvCDFg:7N1TrY0w2Sg:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/aH7nnAvCDFg" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2012/04/27/instalando-rbenv-en-linux</feedburner:origLink></entry>
 
 <entry>
   <title>Flisol Margarita 2012 - Venezuela</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/9cx98OGn-6Q/flisol-margarita-2012-venezuela" />
   <updated>2012-03-18T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2012/03/18/flisol-margarita-2012-venezuela</id>
   <content type="html">&lt;p&gt;El &lt;a title="Web Flisol" href="http://www.flisol.org.ve/" rel="nofollow" target="_blank"&gt;FLISOL&lt;/a&gt; (&lt;a title="Festival" href="../tag/festival/" rel="nofollow"&gt;Festival&lt;/a&gt; Latinoamericano de Instalación de Software Libre) es un evento que se realiza en las comunidades de todo el mundo en donde todas las personas interesadas en probar y/o instalar una distribución Linux puede llevar su PC y un colaborador de la feria le instalara la distro que deseas Totalmente Gratis!!!.   Además de esto se realizaran charlas sobre la filosofía y los beneficios del uso de Linux y software libre.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/YX5sY"&gt;&lt;img src="http://i.imgur.com/YX5sY.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Este es un tipo de festival que se realiza en todo el mundo, y este &lt;strong&gt;28 de Abril de 2012&lt;/strong&gt; se realizara en 17 ciudades de Venezuela entre ellas la Isla De &lt;strong&gt;Margarita&lt;/strong&gt;. Para ver las demás ciudades participantes click &lt;a href="http://flisol.org.ve/ciudades/" rel="nofollow"&gt;Aqui&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Así que si vives en Margarita y te gusta el software libre o tienes curiosidad en conocer Linux y sus beneficios no dudes en ir, ¡¡¡la asistencia es totalmente libre y gratuita!!!. En Margarita el evento sera realizado en el Auditorio de la &lt;strong&gt;UDO Nueva Esparta&lt;/strong&gt; (UDONE) el &lt;strong&gt;Sábado 28 de Abril de 2012 desde las 9:00 AM hasta las 4:00PM&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Si deseas que te instalemos una distribución Linux de tu preferencia, &lt;strong&gt;primero debes inscribirte&lt;/strong&gt; en la pagina web del &lt;a title="Flisol" href="../tag/flisol/" rel="nofollow"&gt;Flisol&lt;/a&gt; &lt;a title="Venezuela" href="../tag/venezuela/"&gt;Venezuela&lt;/a&gt; para la sede&lt;a href="http://flisol.org.ve/ciudades/margarita/"&gt; Nva Esparta &lt;/a&gt;y hacer click en “Registro para asistentes” y llena el formulario con los datos solicitados, luego en el dia del evento debes llevar tu PC o Laptop para realizar la instalación y puesta a punto.&lt;/p&gt;

&lt;p&gt;Debido a que estoy  ocupado incluso los sábados, intentare ver si puedo asistir al evento aunque sea las ultimas horas...&lt;/p&gt;

&lt;p&gt;Aprovecho para comentar que tenia unos 7 meses sin escribir en el blog, lo tenia bastante abandonado ya que últimamente he estado muy ocupado y/o no he tenido ganas de escribir. En todo este tiempo que el blog no fue actualizado hice unos cuantos cambios que tendrán influencias en este blog, el mas importante es que he migrado hace unos 8 meses de Ubuntu 10.10 a ArchLinux... Si! ya no soy Ubuntero!!! ArchLinux es una distro que desde hace años me ha estado llamando la atención por su característica Rolling Release, por su frecuencia de actualización entre otras ventajas.&lt;/p&gt;

&lt;p&gt;El tercer aniversario del blog paso desapercibido!!! no tuve muchos animo de escribir en esos dias ni tampoco de hacerle un lavado de cara al blog, pero es algo que esta en las "cosas por hacer", por ultimo tengo pensado escribir otro blog pero mas que todo orientado al desarrollo en Ruby/Rails, este segundo blog ya esta online desde hace un mes, pero sin contenido a modo de prueba, el blog sera algo mas sencillo y ligero al ser completamente "estático" gracias a que es potenciado por la gema Jekyll.&lt;/p&gt;

&lt;p&gt;En fin, se vienen cambios en el blog, mas artículos, nuevo diseño y un segundo blog complementario aunque ya no sera con la misma frecuencia de antes, en todo caso intentare en lo posible seguir manteniendo online esta bitácora de un solo autor y pocas visitas.&lt;/p&gt;

&lt;p&gt;Saludos.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-HtQH7JvCle2jbpPI8jZhhhK8y8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-HtQH7JvCle2jbpPI8jZhhhK8y8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-HtQH7JvCle2jbpPI8jZhhhK8y8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-HtQH7JvCle2jbpPI8jZhhhK8y8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=9cx98OGn-6Q:QYMZp3_BMK4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=9cx98OGn-6Q:QYMZp3_BMK4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=9cx98OGn-6Q:QYMZp3_BMK4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=9cx98OGn-6Q:QYMZp3_BMK4:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=9cx98OGn-6Q:QYMZp3_BMK4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=9cx98OGn-6Q:QYMZp3_BMK4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=9cx98OGn-6Q:QYMZp3_BMK4:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=9cx98OGn-6Q:QYMZp3_BMK4:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=9cx98OGn-6Q:QYMZp3_BMK4:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=9cx98OGn-6Q:QYMZp3_BMK4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=9cx98OGn-6Q:QYMZp3_BMK4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=9cx98OGn-6Q:QYMZp3_BMK4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=9cx98OGn-6Q:QYMZp3_BMK4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=9cx98OGn-6Q:QYMZp3_BMK4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=9cx98OGn-6Q:QYMZp3_BMK4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=9cx98OGn-6Q:QYMZp3_BMK4:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=9cx98OGn-6Q:QYMZp3_BMK4:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/9cx98OGn-6Q" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2012/03/18/flisol-margarita-2012-venezuela</feedburner:origLink></entry>
 
 <entry>
   <title>Una prueba para aprender Jekyll con la ayuda de Jekyll Bootstrap</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/tHVnJcGOp2c/una-prueba-para-aprender-jekyll-con-la-ayuda-de-jekyll-bootstrap" />
   <updated>2012-02-05T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2012/02/05/una-prueba-para-aprender-jekyll-con-la-ayuda-de-jekyll-bootstrap</id>
   <content type="html">&lt;p&gt;Este es un blog (y un articulo) de prueba para aprender a usar Jekyll con la ayuda de
Jekyll-Bootstrap.&lt;/p&gt;

&lt;h3&gt;Que es Jekyll?&lt;/h3&gt;

&lt;p&gt;Se preguntaran algunos. Bueno &lt;a href="http://jekyllrb.com/"&gt;Jekyll&lt;/a&gt; es una &lt;em&gt;gema Ruby&lt;/em&gt;
que nos permite crear simples paginas estaticas pero con el detalle de que el
contenido (y el formato) de estas se escriben en MarkDown.&lt;/p&gt;

&lt;h3&gt;Que es Jekyll-Bootstrap?&lt;/h3&gt;

&lt;p&gt;Pues &lt;a href="http://jekyllbootstrap.com"&gt;Jekyll-Bootstrap&lt;/a&gt; es una especie de &lt;em&gt;Framework&lt;/em&gt; que nos permite crear simples
blogs o cualquier pagina estatica, usando Jekyll.&lt;/p&gt;

&lt;h3&gt;Que tiene de bueno/interesante todo esto?&lt;/h3&gt;

&lt;p&gt;Mucho!!! en primer lugar:
- Puedes crear tus paginas/blogs estaticos.
- Al ser estaticos tienen la ventaja de que no requieren una base de datos para almacenar su informacion, son mas ligeros ya que los archivos estaticos de una pagina suelen ser pequenos y cargar rapido.
- Al carecer de una BD las paginas no requieren de consultas y el cliente no tiene que esperar un tiempo extra mientras se renderiza la pagina para que luego la descargue.
- Es mucho mas facil de alojar una pagina estatica.&lt;/p&gt;

&lt;p&gt;Quieres probar Jekyll? pues bueno tan solo instala ejecutando en la terminal:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;gem install jekyll
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Recuerda que para esto debes tener previamente instalado Ruby y RubyGems.&lt;/p&gt;

&lt;p&gt;Saludos.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-qv02XncEIDNJu7bQCW9tx9AFfw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-qv02XncEIDNJu7bQCW9tx9AFfw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-qv02XncEIDNJu7bQCW9tx9AFfw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-qv02XncEIDNJu7bQCW9tx9AFfw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=tHVnJcGOp2c:rkX-FJ3aZWs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=tHVnJcGOp2c:rkX-FJ3aZWs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=tHVnJcGOp2c:rkX-FJ3aZWs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=tHVnJcGOp2c:rkX-FJ3aZWs:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=tHVnJcGOp2c:rkX-FJ3aZWs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=tHVnJcGOp2c:rkX-FJ3aZWs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=tHVnJcGOp2c:rkX-FJ3aZWs:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=tHVnJcGOp2c:rkX-FJ3aZWs:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=tHVnJcGOp2c:rkX-FJ3aZWs:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=tHVnJcGOp2c:rkX-FJ3aZWs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=tHVnJcGOp2c:rkX-FJ3aZWs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=tHVnJcGOp2c:rkX-FJ3aZWs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=tHVnJcGOp2c:rkX-FJ3aZWs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=tHVnJcGOp2c:rkX-FJ3aZWs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=tHVnJcGOp2c:rkX-FJ3aZWs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=tHVnJcGOp2c:rkX-FJ3aZWs:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=tHVnJcGOp2c:rkX-FJ3aZWs:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/tHVnJcGOp2c" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2012/02/05/una-prueba-para-aprender-jekyll-con-la-ayuda-de-jekyll-bootstrap</feedburner:origLink></entry>
 
 <entry>
   <title>Actualizando de Android 2.1 Eclair a Android 2.2.1 Froyo (CyanogenMod 6.1.1 Alpha 8.4) en un Samsung Galaxy Spica i5700 Digitel</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/EADcFZf5cSU/actualizando-de-android-2-1-eclair-a-android-2-2-1-froyo-cyanogenmod-6-1-1-alpha-8-4-en-un-samsung-galaxy-spica-i5700-digitel" />
   <updated>2011-10-08T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2011/10/08/actualizando-de-android-2-1-eclair-a-android-2-2-1-froyo-cyanogenmod-6-1-1-alpha-8-4-en-un-samsung-galaxy-spica-i5700-digitel</id>
   <content type="html">&lt;p&gt;Sigo aprendiendo cada vez mas sobre Android, aunque con algunos tropezones. Hace unas semanas comentaba como actualice mi &lt;a title="Actualizar de Android 1.5 Cupcake a Android 2.1 Eclair en un Galaxy Spica I5700" href="http://blog.jam.net.ve/2011/09/17/actualizando-de-android-1-5-cupcake-a-android-2-1-eclair-en-un-samsung-galaxy-spica-i5700-digitel-venezuela/" target="_blank"&gt;Galaxy Spica I5700 de Android 1.5 Cupcake (Oficial Digitel) a Android 2.1 Eclair (Oficial Digitel)&lt;/a&gt;, las mejoras eran ya muy notables en esa actualización pero... se puede mejorar mucho mas!!! si actualizamos a alguna de las tantas Rom personalizadas de Android 2.2 Froyo. Pues estuve leyendo sobre las ventajas de hacer una nueva actualización y a la final note que me convenía mucho.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/qGAuu"&gt;&lt;img src="http://i.imgur.com/qGAuu.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pues bien la room que elegí fue CyanogenMod 6.1.1 Spica Alpha 8.4 la cual esta basada en Froyo 2.2.1 e incluye mejoras interesantes como soporte 3D y soporte MultiTouch, al ser Froyo también corrige el bug en Eclair de la cámara que se queda oscura cuando se toman fotos estando conectada al Wifi. Por ser una room modificada, incluye un kernel actualizado con muchas mejoras como por ejemplo tener un &lt;a title="Recovery Wiki en Samdroid.net" href="http://forum.samdroid.net/wiki/showwiki/Recovery" target="_blank"&gt;recovery&lt;/a&gt; el cual es una muy buena utilidad que nos permitiria hacer cosas como por ejemplo ser root desde que enciendes el teléfono :D, hacer respaldos, aplicar actualizaciones y/o modificaciones comprimidas en .zip, instalar nuevas room, particionar la MicroSD, entre muchas otras funciones (tambien depende del kernel que instales).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OJO estos pasos fueron realizados partiendo de un Samsung Galaxy Spica I5700 con Android 2.1 Eclair actualizado mediante Kies mini (Room oficial de samsung), si este no es tu caso NO HAGAS NADA!!!&lt;/strong&gt; ya que podrías tener un kernel distinto que podría no ser compatible con los que aquí se usan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Notas antes de comenzar, si no cumples con algunas de estas notas NO HAGAS NADA!!!&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Tu teléfono debe estar cargado al 100%. lo mismo va en caso de que estés desde una Laptop, y muy recomendable estar conectado a un UPS, no valla a ser que &lt;strong&gt;CortoElec&lt;/strong&gt; le de por quitarte la luz en pleno proceso de actualización.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;En el teléfono ve a &lt;strong&gt;“Configuración”&lt;/strong&gt; o &lt;strong&gt;“Ajustes”&lt;/strong&gt;  luego &lt;strong&gt;“Aplicaciones”&lt;/strong&gt;  luego &lt;strong&gt;“Desarrollo”&lt;/strong&gt; y por ultimo asegurare de que &lt;strong&gt;“Depuración de USB”&lt;/strong&gt; esta marcada.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Entra en teléfono como si fueses a marcar un numero para llamar, pero teclea &lt;strong&gt;*#7284#&lt;/strong&gt; y verifica que &lt;strong&gt;UART&lt;/strong&gt;  y &lt;strong&gt;USB&lt;/strong&gt; &lt;a href="http://jam.net.ve/capt/phoneutils.png" target="_blank"&gt;esten marcados en &lt;strong&gt;PDA&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Has un &lt;a title="respaldo" href="../tag/respaldo/"&gt;respaldo&lt;/a&gt; de tus contactos y archivos en tu MicroSD. recomendable sincronizar los contactos con tu cuenta de Google/Gmail para que queden respaldados allí y luego puedas recuperarlos fácilmente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recomendable: instalar la aplicación &lt;a href="https://market.android.com/details?id=com.riteshsahu.APNBackupRestore&amp;amp;feature=search_result" rel="nofollow"&gt;APN Backup &amp;amp; Restore&lt;/a&gt; para que respaldes tus APN la guardes en la memoria MicroSD o tu PC y las puedas restaurar luego.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Si harás la actualización en una PC de &lt;a title="escritorio" href="../tag/escritorio/"&gt;escritorio&lt;/a&gt; conecta el cable USB del teléfono a un conector USB que sea directo a la Tarjeta Madre de la PC. no uses los puertos delanteros o laterales del gabinete de la PC ya que suelen ser de pobre calidad y suelen fallar mucho, tampoco uses concentradores o Hub.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rezar dos Padres Nuestros y tres Ave Maria.  &lt;img src="../wp-includes/images/smilies/icon_razz.gif" alt=":P" /&gt; es broma, pero de seguro querrás tener a Dios de tu lado en este momento &lt;img src="../wp-includes/images/smilies/icon_biggrin.gif" alt=":D" /&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;strong&gt;Requerimientos:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Descargar &lt;a title="Odin 4.03 Spica OPS" href="http://www.jam.net.ve/capt/Odin_4.03_Spica_ops.zip" target="_blank"&gt;Odin 4.03 &lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://forum.samdroid.net/f53/cyanogenmod-6-1-1-spica-alpha8-4-a-4716/" target="_blank"&gt;Descargar CyanogenMod-6.1.1-Spica-alpha8.4&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://files.samdroid.net/files/2forum/i5700_LK2-08_PDA.7z" target="_blank"&gt;Descargar&lt;/a&gt; el kernel de Leshak para &lt;strong&gt;&lt;a href="http://forum.samdroid.net/f55/lk2-08-original-firmwares-root-new-superuser-wifi-tether-bb-12-07-2010-a-1193/" target="_blank"&gt;Firmware Original&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;strong&gt;OJO&lt;/strong&gt; claramente dice Firmware original, Android 2.1 de agencia o actualizado mediante Kies Mini como en mi caso, si este no es tu situacion, &lt;strong&gt;NO HAGAS NADA!!!&lt;/strong&gt; ya que podrías tener un kernel distinto que podría &lt;strong&gt;no ser compatible&lt;/strong&gt; con los que aquí se usan.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Necesitas tener instalados los drivers necesarios para conectar el teléfono a la PC, si en tu caso ya tienes instalado Samsung NPS (New PC Studio) o el Kies Mini, entonces ya tienes los drivers instalados, pero cabe aclarar un detalle debes desactivar el inicio automatico de Kies o NPS, puedes hacerlo mediante el Ccleaner. sino  lo que puedes hacer es entrar en la carpeta donde esta instalado NPS y/o Kies, debe haber por alli algun ejecutable llamado SAMSUNG_USB_Driver_for_Mobile_Phones.exe de unos 18.6Mb (Version 1.3.850) respaldalo en alguna otra ubicación, des instala el Kies y/o el NPS, limpia registros y demas con Ccleaner, reinicia la PC, luego instala los drivers que respaldaste y vuelve a reiniciar.  si no quieres hacer todo esto puedes descargar los drivers desde &lt;a href="http://files.samdroid.net/files/drivers/SAMSUNG_USB_Driver_for_Mobile_Phones.rar" target="_blank"&gt;aqui.&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Desactivar el inicio automático de tu antivirus, esto es para evitar posibles problema con los drivers.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;strong&gt;Procedimientos:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Una vez que tengas instalado los drivers, ayas descargado Odin, la Room de Froyo para tu Spica, descargado el kernel de leshak &lt;strong&gt;i5700_LK2-08_PDA.7z&lt;/strong&gt; y hayas configurado y reiniciado la PC para que NPS, Kies y tu antivirus no se inicien, entonces toca flashear para obtener root y recovery.&lt;/p&gt;

&lt;p&gt;0- Descomprime el &lt;strong&gt;Odin_4.03_Spica_ops.zip&lt;/strong&gt;, obtendrás una carpeta con el Odin y dos archivos.&lt;/p&gt;

&lt;p&gt;1- Descomprime el kernel de leshak &lt;strong&gt;i5700_LK2-08_PDA.7z&lt;/strong&gt;, deberías obtener &lt;strong&gt;i5700_LK2-08_PDA.tar&lt;/strong&gt; (&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;OJO no lo descomprimas nuevamente, déjalo así&lt;/span&gt;&lt;/strong&gt;) de unos 15.2Mb y copíalo dentro de la carpeta donde tienes el Odin&lt;/p&gt;

&lt;p&gt;2- Copia la room &lt;strong&gt;CM-6.1.1-Spica-a8.4_update.zip&lt;/strong&gt; en la raíz de la tarjeta MicroSD, luego apaga tu teléfono, &lt;strong&gt;retira la tarjeta SIM y la MicroSD&lt;/strong&gt;, luego colocalo en &lt;strong&gt;modo Download&lt;/strong&gt;, presionando las teclas &lt;strong&gt;Volumen abajo + Camara + End o Apagar&lt;/strong&gt; .&lt;/p&gt;

&lt;p&gt;3- Abre el Odin (&lt;strong&gt;si estas en Windows Vista/Windows 7 abrelo como Administrador&lt;/strong&gt;) Conecta el teléfono a la PC, espera un ratico que Windows reconozca el dispositivo. El Odin deberia reconocerlo marcando en la casilla de Messages Added!!! y Detected!!!, ademas deberia aparecer con fondo amarillo la casilla COM Port Mapping y un numero de puerto COM.&lt;/p&gt;

&lt;p&gt;4-  En el Odin presiona el boton Reset Files, presiona el boton &lt;strong&gt;OPS&lt;/strong&gt; y agrega el archivo &lt;strong&gt;spica_jc3.ops&lt;/strong&gt;, luego presiona el boton &lt;strong&gt;PDA&lt;/strong&gt; y agrega el archivo &lt;strong&gt;i5700_LK2-08_PDA.tar&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;5- Verifica que todo se vea similar a esto:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/uVOwV"&gt;&lt;img src="http://i.imgur.com/uVOwV.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6- Si todo esta bien, entonces le damos al boton Start, Odin debería comenzar a Flashear el nuevo kernel en tu teléfono, el proceso no debería tardar mas que unos pocos segundos ya que el archivo es bastante pequeño.  El teléfono se reiniciara y entrara en el Recovery, (no es necesario, pero por seguridad espera al menos unos dos minutos y verifica que en el teléfono siga mostrándote el recovery) una vez dentro del recovery puedes desconectar el teléfono de la PC y Listo!!! ya tienes tu teléfono Rooteado y con Recovery :D&lt;/p&gt;

&lt;p&gt;7- Apaga el Teléfono, quita la batería, coloca la tarjeta MicroSD (solo la MicroSD no coloques la tarjeta SIM) que en la cual copiaste la Room, coloca nuevamente la batería y entra ahora en el modo Recovery tecleando &lt;strong&gt;Volumen Abajo + Tecla de llamada + Tecla de terminar llamada/Apagar&lt;/strong&gt;. Dejalo unos segundos presionado hasta que veas el menu del Recovery.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/0Eqgy"&gt;&lt;img src="http://i.imgur.com/0Eqgy.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8- Este es el famoso Recovery :D se maneja usando los botones del teléfono y las confirmaciones que nos pide la hacemos seleccionando el boton de Home (no se usa tocando la pantalla). lo recomendable en este punto seria hacer un respaldo (por si las moscas) para eso ve a la opción "&lt;strong&gt;Samdroid 0.2.1 Backup&lt;/strong&gt;" y de una vez comenzara a realizarse el respaldo el cual tarda unos minutos o unas 5 o 6 lineas. este respaldo luego en caso de inconvenientes podemos flashearlo mediante el Odin.&lt;/p&gt;

&lt;p&gt;9- Ahora ve a la opcion "&lt;strong&gt;Wipe, Choose what&lt;/strong&gt;" y luego aplica los 3 wipe que aparecen los cuales son "&lt;strong&gt;wipe data/cache&lt;/strong&gt;", "&lt;strong&gt;wipe cache&lt;/strong&gt;" y "&lt;strong&gt;Wipe Dalvik cache&lt;/strong&gt;" tal como dice el recovery necesitas confirmar la opción a aplicar, presionando el botón Home (el botón de la casita)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/8lqPE"&gt;&lt;img src="http://i.imgur.com/8lqPE.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;10- Luego de esto vuelve al menú principal del Recovery y selecciona la opcion "Apply any zip from SD" y elegimos el archivo &lt;strong&gt;CM-6.1.1-Spica-a8.4_update.zip&lt;/strong&gt; que copiamos anteriormente en la MicroSD. confirmamos la opción presionando Home, ahora se comenzara a instalar la nueva room, podrás ver el estado del proceso en la pantalla con todo lo que se esta realizando, también veras en el fondo una barra amarilla cargándose. Es posible que el teléfono se reinicie incluso unas 5 veces,  no te preocupes, pues esto es normal. Espera hasta que en la pantalla te diga algo como "&lt;strong&gt;Install from sd complete&lt;/strong&gt;" y vuelva al recovery.  en este punto ya debe de haberse instalado tu nueva version de Android 2.2.1 Froyo :D tan solo reinicia el telefono en la opcion "&lt;strong&gt;Reboot system now&lt;/strong&gt;" y ahora tu Spica se iniciara por primera vez con Froyo :D. no te preocupes si el primer inicio demora mas de lo normal, esto es normal. En mi caso demoro creo que como 5min aunque con el miedo y las bolas en las gargantas me parecieron como 15min LOOL&lt;/p&gt;

&lt;p&gt;11- Una vez que tu Spica cargue Froyo por primera vez, veras que aparecerá el menú de configuración inicial. pero si hiciste los pasos tal cual aparecen aquí es probable que no tengas puesta la tarjeta &lt;strong&gt;SIM&lt;/strong&gt;, por lo que debes preferiblemente cambiar el idioma a tu preferido, omitir toda la configuración inicial y apagar el teléfono. luego saca la batería, coloca la tarjeta &lt;strong&gt;SIM&lt;/strong&gt;, vuelve a colocar la batería y enciende el teléfono nuevamente. Ahora si podras completar la configuración inicial y comenzar a disfrutar de Android 2.2.1 Froyo con multitouch, drivers 3D y rooteado desde el inicio :D&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/eau2R"&gt;&lt;img src="http://i.imgur.com/eau2R.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Posibles problemas:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Por suerte yo no tuve problemas graves, pero si tuve uno que me comió por varias semanas. Resulta que cuando conectaba el teléfono a la PC, el Odin me lo reconocía sin problemas, marcaba su puerto COM con fondo azul y todo lo demás como la imagen arriba. pero al hacer click en Start el Odin se quedaba sin hacer nada mas que mostrarme el mensaje "&lt;strong&gt;&amp;lt;1&amp;gt;&lt;/strong&gt; &lt;strong&gt;setup connection...&lt;/strong&gt;" en la casilla de mensajes.&lt;/p&gt;

&lt;p&gt;Luego de unas cuantas semanas investigando, probando sugerencias que me fueron recomendadas en varios foros, etc. recibí por Twitter una recomendación por parte de &lt;a href="http://twitter.com/IIKndyII"&gt;IIKndyII &lt;/a&gt; (Muuuuchas gracias!!!!!) que fue la que soluciono mi problema. Cuando se quede el Odin en "&lt;strong&gt;&amp;lt;1&amp;gt;&lt;/strong&gt; &lt;strong&gt;setup connection...&lt;/strong&gt;" proceda a cerrar el Odin, luego desconecte el teléfono de la PC, apáguelo (quitando la batería y colocándosela nuevamente) inicie nuevamente en modo download, abra el Odin, cargue los archivos necesarios y conecte nuevamente el teléfono, espere unos 2 minutos  (yo me puse a ver un video de como se flasheaba un kernel al Spica :D) y luego presione el boton Start.   Y tal cual como me dijo &lt;strong&gt;IIKndyII&lt;/strong&gt;... seguro ahora si lo reconoce y Odin comienza a flashear :D&lt;/p&gt;

&lt;p&gt;En caso de que Odin te tenga rabia y te siga mostrando el mensaje, reintenta esta recomendación o reinicia la PC y vuelve a intentar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Primeras impresiones:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Esta actualización yo la realice el Lunes de esta semana, por lo que no tengo ni una semana con la room, pero las primeras impresiones han sido muy favorables con respecto a Eclair actualizado desde Kies (oficial). lo mas destacable es que con esta room  la batería me esta durando muuuuchisimo mas que con Eclair. y como muestra les comento que la ultima vez que cargue el teléfono fue el martes en la noche, y hasta el dia de hoy sábado todavía no lo e puesto a cargar, si! lleva casi 4 dias sin cargarse!!! y todavía la bateria esta al 60%.  claro esta tengo las conexiones 2G/3G desactivadas y solo estoy usando la conexión WiFi de mi casa. no he usado mucho el teléfono, tan solo he hecho unas 4 llamadas de menos de 1min C/U, actualice unas 3 aplicaciones desde el market (este mismo se actualizo a la version 3.1.5) e instale unas 4 aplicaciones. use unos 5min el GPS con la aplicación Navitel + los mapas de mi área y todavía tengo batería!!!! :P&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ajbDA_se36UB7cl_BRZEt_mPw9g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ajbDA_se36UB7cl_BRZEt_mPw9g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ajbDA_se36UB7cl_BRZEt_mPw9g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ajbDA_se36UB7cl_BRZEt_mPw9g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=EADcFZf5cSU:I90Gz_sUkjg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=EADcFZf5cSU:I90Gz_sUkjg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=EADcFZf5cSU:I90Gz_sUkjg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=EADcFZf5cSU:I90Gz_sUkjg:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=EADcFZf5cSU:I90Gz_sUkjg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=EADcFZf5cSU:I90Gz_sUkjg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=EADcFZf5cSU:I90Gz_sUkjg:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=EADcFZf5cSU:I90Gz_sUkjg:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=EADcFZf5cSU:I90Gz_sUkjg:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=EADcFZf5cSU:I90Gz_sUkjg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=EADcFZf5cSU:I90Gz_sUkjg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=EADcFZf5cSU:I90Gz_sUkjg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=EADcFZf5cSU:I90Gz_sUkjg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=EADcFZf5cSU:I90Gz_sUkjg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=EADcFZf5cSU:I90Gz_sUkjg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=EADcFZf5cSU:I90Gz_sUkjg:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=EADcFZf5cSU:I90Gz_sUkjg:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/EADcFZf5cSU" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2011/10/08/actualizando-de-android-2-1-eclair-a-android-2-2-1-froyo-cyanogenmod-6-1-1-alpha-8-4-en-un-samsung-galaxy-spica-i5700-digitel</feedburner:origLink></entry>
 
 <entry>
   <title>Actualizando de Android 1.5 Cupcake a Android 2.1 Eclair en un Samsung Galaxy Spica i5700 Digitel</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/mMYjUo6Tn1M/actualizando-de-android-1-5-cupcake-a-android-2-1-eclair-en-un-samsung-galaxy-spica-i5700-digitel-venezuela" />
   <updated>2011-09-17T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2011/09/17/actualizando-de-android-1-5-cupcake-a-android-2-1-eclair-en-un-samsung-galaxy-spica-i5700-digitel-venezuela</id>
   <content type="html">&lt;p&gt;Hace poco mas de una semana adquirí un teléfono con S.O Android, específicamente el Samsung Galaxy Spica I5700 de Digitel, luego de jurungarlo por unas cuantas horas viendo y probando todas sus funciones me encontré con que no podía instalar muchas de las mejores aplicaciones disponibles para Android por el simple hecho de que el teléfono viene con Android 1.5 Cupcake, el cual es ya una versión desactualizada, por lo que para exprimir mejor las funciones del equipo debería actualizar como mínimo a Android 2.1 Eclair o superiores.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/rHHwV"&gt;&lt;img src="http://i.imgur.com/rHHwV.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;
&lt;a href="http://imgur.com/3zjoa"&gt;&lt;img src="http://i.imgur.com/3zjoa.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;
&lt;a href="http://imgur.com/KHhzg"&gt;&lt;img src="http://i.imgur.com/KHhzg.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Buscando en internet encontré mucha información para actualizar el Galaxy Spica i5700  a Eclair o incluso ir mas allá y actualizar a Froyo o Gingerbread, pero muchas de ellas se realizan con métodos un tanto extraños (Flasheando con Odin y/o aplicar roms con Recovery) a simple  vista para alguien como yo que apenas tenia unas horas de experiencia en Android y teléfonos inteligentes, por lo que decidí dejarlas a un lado para estudiar mejor los procedimientos e intentarlo de forma segura en un futuro cercano.&lt;/p&gt;

&lt;p&gt;Por suerte en la pagina de &lt;a href="http://www.samsung.com/ve/"&gt;Samsung Venezuela &lt;/a&gt; ofrecen una actualización a Eclair (no es Froyo ni Gingerbread pero al menos es algo.) con un método un tanto mas directo, con menos pasos y podría decirse que mas seguro ya
que en la &lt;a href="http://www.digitel.com.ve//Secciones/Persona_Detalle.aspx?level=18&amp;Seccion=92&amp;Menu=A5&amp;Control=pla_equ_03.ascx&amp;Equ_id=623"&gt;pagina de Digitel&lt;/a&gt; dicen que hay una actualización disponible para este equipo en la pagina de Samsung (al menos lo incitan a uno a actualizar con ese método, si algo saliera mal ellos "deberían" poder responder sin rechistar.), por lo que decidí actualizar de esta forma:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lo unico malo de todo esto es que hay que usar Windows :(  pero bueh no queda de otra (por ahora)... en mi caso yo use Windows 7 64bits.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;strong&gt;Notas antes de comenzar, si no cumples con algunas de estas notas NO HAGAS NADA!!!:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Tu teléfono debe estar cargado al 100%. lo mismo va en caso de que estés desde una Laptop, y muy recomendable estar conectado a un UPS, no valla a ser que &lt;strong&gt;CortoElec&lt;/strong&gt; le de por quitarte la luz en pleno proceso de actualización.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;En el teléfono ve a &lt;strong&gt;"Configuración"&lt;/strong&gt; o &lt;strong&gt;"Ajustes"&lt;/strong&gt;  luego &lt;strong&gt;"Aplicaciones"&lt;/strong&gt;  luego &lt;strong&gt;"Desarrollo"&lt;/strong&gt; y por ultimo asegurare de que &lt;strong&gt;"Depuración de USB"&lt;/strong&gt; esta marcada.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Has un respaldo de tus contactos, recomendable sincronizar los contactos con tu cuenta de Google/Gmail para que queden respaldados allí y luego puedas recuperarlos fácilmente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recomendable: instalar la aplicación &lt;a href="https://market.android.com/details?id=com.riteshsahu.APNBackupRestore&amp;amp;feature=search_result"&gt;APN Backup &amp;amp; Restore&lt;/a&gt; para que respaldes tus APN la guardes en la memoria MicroSD o tu PC y las puedas restaurar luego.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Estar conectado a internet con una conexión rápida y estable.  ya que Kies se descargara los archivos necesarios y son como 115Mb Aprox. yo me conecte desde un módem USB Movistar que es muy rápido en mi zona, pero sospecho que este fue la causa de  un error que explicare mas adelante, si cuentas con un internet Wifi o cableado de alta velocidad usalo en vez del módem para estar mas seguro.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Si harás la actualización en una PC de escritorio conecta el cable USB del teléfono a un conector USB que sea directo a la Tarjeta Madre de la PC. no uses los puertos delanteros o laterales del gabinete de la PC ya que suelen ser de pobre calidad y suelen fallar mucho, tampoco uses concentradores o Hub.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rezar dos Padres Nuestros y tres Ave Maria.  :P es broma, pero de seguro querrás tener a Dios de tu lado en este momento :D&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;strong&gt;Procedimiento:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Primero que todo debemos descargar la aplicación  &lt;a href="http://org.downloadcenter.samsung.com/downloadfile/ContentsFile.aspx?CDSite=UNI_VE&amp;amp;CttFileID=4050765&amp;amp;CDCttType=SW&amp;amp;ModelType=N&amp;amp;ModelName=GT-I5700L&amp;amp;VPath=SW/201107/20110727165853433/Kiesmini_1.0.0.11074_2.exe"&gt;Kies Mini&lt;/a&gt; desde la pagina de Samsung Venezuela.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;la instalamos, en la ventana donde pregunta el país elige España e idioma Español ya que Venezuela no aparece por ningún lado :S&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Si por casualidad tienes instalado NPS (Samsung New PC Studio) cierralo por completo, que no haya procesos de el ejecutándose (verifica en la bandeja de sistema y en el administrador de tareas).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Abre el Kies Mini, y en el menú elige "Instalar controladores" para que se instalen los drivers y reinicia la PC.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; a pesar de que en alguno otros tutoriales de flasheo con Odin y similares recomiendan quitar la MicroSD y la SIM, en este método no es necesario. en mi caso yo no se lo quite.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Abre nuevamente el Kies, conecta el teléfono a la PC y espera que lo reconozca, al cabo de unos segundos debería marcarte que hay una actualización. una vez te diga que existe una, comienza el proceso de actualización.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;El proceso comienza descargando los archivos necesarios (Roms y demás)  de internet, por lo que el tiempo depende de que tan rápida y estable sea tu conexión. (en mi caso demoro como 10min).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; en caso de que estando en el proceso de descargas estés se cancele y te muestre error, desconecta el teléfono apagalo quita la pila, colocala nuevamente y enciendelo, cierra el Kies, abrelo nuevamente , conecta el teléfono e intenta de nuevo. en mi caso completo la descarga al tercer intento. :S&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;una vez termine la descarga el teléfono se reiniciara para entrar en "modo download" (pantalla negra con logo y letras de fondo azul) y el Kies comenzara a copiar los archivos descargados al teléfono, veras el proceso de copiado en el teléfono mediante una barra azul que se va llenando.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;una vez terminado, el teléfono se reiniciara nuevamente y ahora mostrara una pantalla negra con un logo de una cajita con una barra abajo que se va llenando (en mi caso no se lleno mucho), supongo que en este paso se instalan y aplican los archivos descargados. En este paso es probable que el Kies te diga que ya ha sido completada la actualización, pero Espera!!! no le hagas caso que el teléfono sigue haciendo algo, mantenlo conectado a la PC.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;cuando termine la instalación, (no demora mucho) el teléfono se reiniciara, cargara Android 2.1 Eclair, entraras en tu escritorio (el del teléfono) y eso sera todo :D&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;strong&gt;Posibles problemas:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bueno a pesar de que este método parece mas directo, corto y sencillo no es a prueba de errores.  en mi caso cuando termino la descarga de los archivos desde internet, y luego de que el teléfono se reiniciara para entrar en &lt;strong&gt;"Modo download"&lt;/strong&gt;  Windows comenzó a instalar unos drivers para reconocer el dispositivos y para remate me pidió reiniciar (ni loco iba yo a reiniciar en pleno proceso de actualización), luego de instalado el drivers y detectado el dispositivo el modem USB se desconecto (eyecto) al igual que el teléfono (quedándose este con el logo de Samsung en la pantalla) y el Kies me mostró un mensaje en el que decía que la actualización no podo ser completada y sugiriendo hacer una recuperación de emergencia. :O  en ese momento tenia las bolas en la garganta!!!!.&lt;/p&gt;

&lt;p&gt;En ese momento lo único que se me ocurrió fue terminar de desconectar el teléfono a la laptop, quitar la pila, volverla a colocar y encender el teléfono. Para mi alivio inicio normalmente y sin problemas a Android Cupcake  (si allí se bajaron las que te conté a su lugar LOOL ).  al cabo de un rato decidí volver a intentarlo, pero para mi sorpresa al  abrir el Kies este  me mostraba que había un intento de actualización que no se completo y me pedía que hiciera una &lt;strong&gt;"recuperación de emergencia"&lt;/strong&gt;  y me paso a mostrar los pasos para realizarla los cuales son simplemente colocar el teléfono uno mismo en &lt;strong&gt;"modo Download"&lt;/strong&gt; presionando las teclas Volumen abajo + Camara + End o Apagar estando apagado el teléfono y luego conectarlo a la PC y darle a "Recuperación de emergencia" en el Kies. Esto lo que hizo fue copiar al teléfono los archivos descargados, pero esta vez si los instalo y los aplico por lo que al cabo de unos segundos el teléfono se reinicio y entro a Android 2.1 Eclair :D&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/w3fsUq9AfUo5w-gaC9Hs0_jmqbQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w3fsUq9AfUo5w-gaC9Hs0_jmqbQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/w3fsUq9AfUo5w-gaC9Hs0_jmqbQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w3fsUq9AfUo5w-gaC9Hs0_jmqbQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mMYjUo6Tn1M:CjEMVW2zQpA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mMYjUo6Tn1M:CjEMVW2zQpA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mMYjUo6Tn1M:CjEMVW2zQpA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mMYjUo6Tn1M:CjEMVW2zQpA:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mMYjUo6Tn1M:CjEMVW2zQpA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=mMYjUo6Tn1M:CjEMVW2zQpA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mMYjUo6Tn1M:CjEMVW2zQpA:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mMYjUo6Tn1M:CjEMVW2zQpA:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=mMYjUo6Tn1M:CjEMVW2zQpA:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mMYjUo6Tn1M:CjEMVW2zQpA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mMYjUo6Tn1M:CjEMVW2zQpA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=mMYjUo6Tn1M:CjEMVW2zQpA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mMYjUo6Tn1M:CjEMVW2zQpA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mMYjUo6Tn1M:CjEMVW2zQpA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=mMYjUo6Tn1M:CjEMVW2zQpA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mMYjUo6Tn1M:CjEMVW2zQpA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=mMYjUo6Tn1M:CjEMVW2zQpA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/mMYjUo6Tn1M" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2011/09/17/actualizando-de-android-1-5-cupcake-a-android-2-1-eclair-en-un-samsung-galaxy-spica-i5700-digitel-venezuela</feedburner:origLink></entry>
 
 <entry>
   <title>Implementa una aplicacion rails 3 en CloudFoundry</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/rCIO3AlRo2w/implementa-una-aplicacion-rails-3-en-cloudfoundry" />
   <updated>2011-08-15T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2011/08/15/implementa-una-aplicacion-rails-3-en-cloudfoundry</id>
   <content type="html">&lt;p&gt;&lt;a href="http://cloudfoundry.com/"&gt;CloudFoundry&lt;/a&gt; es la plataforma abierta como proyecto de servicios iniciada por VMware la cual puede soportar múltiples frameworks, varios servicios cloud de algunos proveedores , y múltiples aplicaciones de servicios. todo esto en una plataforma escalable en la nube.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/NLWkg"&gt;&lt;img src="http://i.imgur.com/NLWkg.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Estos servicios están actualmente en version Beta, por lo que de momento son gratuitos pero se requiere de una invitación que puedes solicitar en la pagina de CloudFoundry. casualmente hoy me llego mi invitación (apenas la había pedido ayer) por lo me pude darle un vistazo rápido a la plataforma y hacer unas primeras pruebas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instalación de VMC CLI y configuración:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lo primero en que me di cuenta es que el servicio se administra mediante una CLI (Command Line Interface) o interfaz de linea de comandos (si todavía no tienes ni P!##@ idea, lo administras desde la terminal!!! ). que se &lt;strong&gt;instala&lt;/strong&gt; mediante una gema ruby llamada VMC (de VMware Cloud... creo!!!) por lo que tenemos que teclear en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;gem install vmc
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;luego de esto debemos ejecutar:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;vmc target api.cloudfoundry.com
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Ahora podemos iniciar sesion en el servicio tecleando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;vmc login
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;colocamos nuestro dirección de correos, la contraseña &lt;strong&gt;temporal&lt;/strong&gt; que se nos envió con la invitación y tal cual dice la invitación, aprovechamos de cambiar la contraseña temporal por una fija tecleando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;vmc passwd
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Implementacion de una aplicación Rails 3:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En mi caso yo use un sencillo blog con registro de usuarios usando la gema Devise. la aplicación no es gran cosa y usa Sqlite 3 como Base de datos.&lt;/p&gt;

&lt;p&gt;para esto me muevo en la terminal y entrar a la carpeta donde esta la aplicación, una vez alli tecleo en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;vmc push
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Esto nos hará una serie de preguntas:&lt;/p&gt;

&lt;p&gt;- Would you like to deploy from the current directory?:&lt;/p&gt;

&lt;p&gt;respondemos  &lt;strong&gt;Y&lt;/strong&gt; - si&lt;/p&gt;

&lt;p&gt;- Application Name: colocamos aqui el nombre de la apliacion&lt;/p&gt;

&lt;p&gt;- Application Deployed URL: 'blogdevisejam.cloudfoundry.com'?&lt;/p&gt;

&lt;p&gt;nos muestra la URL a la cual podremos acceder y ver nuestra aplicacion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; si no me equivoco las url son únicas, por lo que si ya existe una aplicación con la url que queremos usar, deberemos pensar en otra.&lt;/p&gt;

&lt;p&gt;- Detected a Rails Application, is this correct? [Yn]:&lt;/p&gt;

&lt;p&gt;nos descubrieron!!! pillaron que queremos subir una aplicacion rails, por lo que no le mentimos y contestamos &lt;strong&gt;Y.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;- Memory Reservation [Default:256M] (64M, 128M, 256M, 512M or 1G)&lt;/p&gt;

&lt;p&gt;respondemos 256M - podemos darle simplemente enter y tomara el valor por defecto el cual es 256M.&lt;/p&gt;

&lt;p&gt;Deja de preguntarnos vainas y comienza a instalar y configurar la aplicacion:&lt;/p&gt;

&lt;p&gt;&lt;img class="aligncenter" title="Selección_065" src="http://blog.jam.net.ve/imagenes/uploads/2011/08/Selección_065-300x102.jpg" alt="" width="300" height="102" /&gt;&lt;/p&gt;

&lt;p&gt;Y listo!!!&lt;/p&gt;

&lt;p&gt;podemos ir a la url indicada en el "cuestionario" y ver nuestra aplicación en ejecución.&lt;/p&gt;

&lt;p&gt;así de fácil :D&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/zm5RV"&gt;&lt;img src="http://i.imgur.com/zm5RVs.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Claro esta, esto es solo el principio, aplicaciones mas complejas requieren configuraciones y pasos mas complejos.&lt;/p&gt;

&lt;p&gt;Cloudfoundry ademas de Rails (ruby) soporta aplicaciones Node.js (javascript del lado servidor), Spring (Java), Sinatra (Ruby) y Grails. se pueden usar bases de datos como MongoDB, Redis y MySQL.&lt;/p&gt;

&lt;p&gt;a simple vista tiene buena pinta el servicio, uno mas a la lista de hosting "de momento gratuito" que podemos  usar para probar aplicaciones en Internet. habría que esperar a que salga de la etapa beta, ver que otras características se agregan y demás.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WbL6Yi95SlgXxcLXK1UVbRZr2h0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WbL6Yi95SlgXxcLXK1UVbRZr2h0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WbL6Yi95SlgXxcLXK1UVbRZr2h0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WbL6Yi95SlgXxcLXK1UVbRZr2h0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rCIO3AlRo2w:w3UlhqobjkE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rCIO3AlRo2w:w3UlhqobjkE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rCIO3AlRo2w:w3UlhqobjkE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rCIO3AlRo2w:w3UlhqobjkE:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rCIO3AlRo2w:w3UlhqobjkE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=rCIO3AlRo2w:w3UlhqobjkE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rCIO3AlRo2w:w3UlhqobjkE:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rCIO3AlRo2w:w3UlhqobjkE:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=rCIO3AlRo2w:w3UlhqobjkE:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rCIO3AlRo2w:w3UlhqobjkE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rCIO3AlRo2w:w3UlhqobjkE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=rCIO3AlRo2w:w3UlhqobjkE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rCIO3AlRo2w:w3UlhqobjkE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rCIO3AlRo2w:w3UlhqobjkE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=rCIO3AlRo2w:w3UlhqobjkE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rCIO3AlRo2w:w3UlhqobjkE:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=rCIO3AlRo2w:w3UlhqobjkE:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/rCIO3AlRo2w" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2011/08/15/implementa-una-aplicacion-rails-3-en-cloudfoundry</feedburner:origLink></entry>
 
 <entry>
   <title>Instalando ZSH + OhMyZSH en Ubuntu/Linux</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/2FjvVvIsWG8/instalando-zsh-ohmyzsh-en-ubuntulinux" />
   <updated>2011-08-09T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2011/08/09/instalando-zsh-ohmyzsh-en-ubuntulinux</id>
   <content type="html">&lt;p&gt;Extraído de Wikipedia:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ZSH:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Es un potente intérprete de comandos para sistemas operativos de tipo Unix, como por ejemplo los BSD o GNU/Linux.1 La primera versión de zsh fue escrita por Paul Falstad en 1990, cuando era estudiante en la Universidad de Princeton. Zsh se diseñó para poder usarse interactivamente. Se le han incorporado muchas de las características principales de otras shells de Unix como, bash, ksh, o tcshy además posee características propias originales&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Una de las características de Zsh que enamoran al usuario es su alta capacidad de personalización y ser compatible con Bash. pues bien estas dos características justamente son las que me hicieron probar por unos meses Zsh y luego usarla como Shell por defecto en mi PC y Laptop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OhMyZsh:&lt;/strong&gt; Es un framework impulsado por la comunidad para la administración de las configuraciones de Zsh, el cual le agrega características como auto-completado, corrección de escritura y viene con mas de 50 plugins opcionales que agregan aun mas funcionalidades a la shell. no conforme con esto también incluye la posibilidad de personalizar la forma en que se muestra tu shell y la información que esta muestre mediante themes que puedes crear tu mismo, o usar uno de los que incluye &lt;a title="OhMyZsh on Github" href="https://github.com/robbyrussell/oh-my-zsh"&gt;OhMyZsh&lt;/a&gt; (mas de 90).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instalación:&lt;/strong&gt; Para instalar Zsh en Ubuntu tan solo debemos ejecutar en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo aptitude install zsh
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;con esto ya tendremos instalado Zsh con las caracteristicas que vienen por defecto, pero como en este caso queremos es explotar sus capacidades de personalización necesitaremos instalar OhMyZsh.&lt;/p&gt;

&lt;p&gt;OhMyZsh se instala descargándolo desde su &lt;a href="https://github.com/robbyrussell/oh-my-zsh"&gt;repositorio en GitHub&lt;/a&gt;, el autor ofrece un comando que automatiza la descarga e instalacion del mismo, pero para poder ejecutarlo necesitas tener instalado Git para clonar el repositorio, esto lo haces son un simple: &lt;strong&gt;sudo aptitude install&lt;/strong&gt; git una vez instalado Git puedes instalar OhMyZsh tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;wget --no-check-certificate https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Con este comando se descargara &lt;a href="https://github.com/robbyrussell/oh-my-zsh"&gt;OhMyZsh&lt;/a&gt; desde su repo en github y lo clonara en la carpeta ~/.oh-my-zsh de tu usuario, luego de eso podrás comenzar a usarlo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instalación Manual:&lt;/strong&gt; el metodo mas largo (la verdad no tanto) para instalar &lt;a href="https://github.com/robbyrussell/oh-my-zsh"&gt;OhMyZsh&lt;/a&gt; es simple, tan solo clona el repositorio en una carpeta oculta llamada &lt;strong&gt;.oh-my-zsh&lt;/strong&gt; tecleando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;luego de esto creas tu archivo de configuracion &lt;strong&gt;.zshrc&lt;/strong&gt; copiando la plantilla que OhMyZsh trae por defecto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Por ultimo ajusta Zsh para que sea tu shell predeterminada:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;chsh -s /usr/bin/zsh
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;ya luego de esto solo debes reiniciar o abrir una nueva terminal para ver Zsh+OhMyZsh funcionando.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Personalización:&lt;/strong&gt; si vas a la carpeta ~/.oh-my-zsh/themes  y ~/.oh-my-zsh/plugins veras los themes y plugins disponibles para personalizar tu shell y activar nuevas funcionalidades.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Para activar y usar un plugins tan solo debes abrir con tu editor favorito el archivo ~/.zshrc y buscar la linea:&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;git&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y agregar dentro de los paréntesis el nombre del plugins que quieres usar, por ejemplo en las ultimas actualizaciones de han agregado plugins como cloudapp el cual es una herramienta para subir imágenes desde la terminal  a el hosting de imagenes en getcloudapp.com que hasta donde se puede ver en la pagina solo ofrece soporte para MacOS, pero como dispone de una API, podemos usarlo tambien en Linux :P  asi que para agregarlo tan solo escribimos:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;git cloudapp&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Para activar y usar themes es similar a como hicimos para ctivar plugins. pero en vez de buscar la linea plugins, buscamos la linea:&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;ZSH_THEME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;robbyrussell&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y cambiamos "robbyrussell" por el nombre del theme que quieras usar.&lt;/p&gt;

&lt;p&gt;yo en mi caso me hice mi &lt;a href="https://github.com/jesusangelm/Jam-Zsh-Theme"&gt;propio theme&lt;/a&gt; modificando y combinando funciones de varios themes que vienen incluidos, mi theme lo llame "&lt;a href="https://github.com/jesusangelm/Jam-Zsh-Theme"&gt;jam&lt;/a&gt;" por lo que en mi caso esta linea se ve asi:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;ZSH_THEME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;jam&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y mi shell se ve asi:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/GqNVC"&gt;&lt;img src="http://i.imgur.com/GqNVCl.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FqFj3EUWODX-5PSXp3GDiN0S0d4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FqFj3EUWODX-5PSXp3GDiN0S0d4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FqFj3EUWODX-5PSXp3GDiN0S0d4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FqFj3EUWODX-5PSXp3GDiN0S0d4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=2FjvVvIsWG8:q3UM8h_VReU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=2FjvVvIsWG8:q3UM8h_VReU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=2FjvVvIsWG8:q3UM8h_VReU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=2FjvVvIsWG8:q3UM8h_VReU:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=2FjvVvIsWG8:q3UM8h_VReU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=2FjvVvIsWG8:q3UM8h_VReU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=2FjvVvIsWG8:q3UM8h_VReU:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=2FjvVvIsWG8:q3UM8h_VReU:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=2FjvVvIsWG8:q3UM8h_VReU:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=2FjvVvIsWG8:q3UM8h_VReU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=2FjvVvIsWG8:q3UM8h_VReU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=2FjvVvIsWG8:q3UM8h_VReU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=2FjvVvIsWG8:q3UM8h_VReU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=2FjvVvIsWG8:q3UM8h_VReU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=2FjvVvIsWG8:q3UM8h_VReU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=2FjvVvIsWG8:q3UM8h_VReU:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=2FjvVvIsWG8:q3UM8h_VReU:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/2FjvVvIsWG8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2011/08/09/instalando-zsh-ohmyzsh-en-ubuntulinux</feedburner:origLink></entry>
 
 <entry>
   <title>Instalando RVM + Ruby + Rails en Ubuntu</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/zSLH-02w2Lk/instalando-rvm-ruby-rails-en-ubuntu" />
   <updated>2011-05-17T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2011/05/17/instalando-rvm-ruby-rails-en-ubuntu</id>
   <content type="html">&lt;p&gt;Hace unos días atras estaba intentando instalar Ruby 1.9.2  desde los repositorios, como ya mi laptop tenia la versión 1.8.7 me di a la tarea de desinstalar por completo esta versión. Luego de terminal de instalar Ruby 1.9.2 y hacer la primera prueba, me encontré con que con que no había salido todo bien, algunas aplicaciones como Gem y Rake estaban buscando el ejecutable de Ruby 1.8.7 (que ya no estaba) y no el de Ruby 1.9.2.  Leyendo en internet encontré algunas posibles soluciones en las que sugerían crear enlaces simbólicos para que de este modo las aplicaciones que buscaran determinadas versiones de Ruby (1.8.7 en mi caso) usara la versión instalada (Ruby 1.9.2). asi lo hice, pero no fue la solución optima ya que muchas aplicaciones no estaban trabajando del todo bien y seguían mostrando algunos errores.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/zRyar"&gt;&lt;img src="http://i.imgur.com/zRyar.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;De vuelta a los buscadores,  intentando encontrar alguna forma de tener Ruby 1.9.2 + Rails 3.0.7 y demás acompañantes en su ultima versión trabajando en armonía y sin problemas, me tope con  &lt;a href="https://rvm.beginrescueend.com"&gt;RVM&lt;/a&gt; (Ruby Version Manager) el cual es una aplicación de linea de comandos que nos permite instalar, administrar y poder trabajar con múltiples versiones (o sabores) de Ruby y otras aplicaciones en gemas. Esto quiere decir que si asi lo queremos podríamos tener instalado en nuestra computadora Ruby 1.8.7, Ruby 1.9.2, Rails 2.x, Rails 3.07  y usar en cualquier momento la version que mas nos convenga. En este caso yo instale Ruby 1.9.2 + Rails 3.0.7 En Ubuntu 10.10 64bits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instalación:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Si nos vamos a la guia de&lt;a href="https://rvm.beginrescueend.com/rvm/install/" target="_blank"&gt; instalación&lt;/a&gt; en la pagina oficial, lo primero que nos dice es que tenemos dos formas de instalación a elegir:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instalación para un solo usuario&lt;/strong&gt; es la mas comun, y la recomendada en la cual todo el contenido de RVM y la versión de Ruby y Gems a elegir estarán ubicadas en la carpeta del usuario que realice la instalación.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instalación multi-usuario (root)&lt;/strong&gt; este método es similar a como cuando instalas Ruby u otro paquete desde los repositorios usando privilegios de administrador, este metodo permise que todos los usuarios en el sistema puedan usar la instalacion de RVM y Ruby.&lt;/p&gt;

&lt;p&gt;Como yo soy el único que usa esta Laptop y tan solo quiero Ruby para aprender y hacer pruebas, me basta con la primera opción, ademas de que me da la ventaja de mantener mi configuración en caso de que decida reinstalar el S.O tan solo haciendo un respaldo de mi carpeta personal y luego restaurándola en otra PC.&lt;/p&gt;

&lt;p&gt;Para instalar RVM tecleamos en una terminal:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; este comando requiere algunas dependencias instaladas, tan solo teclean &lt;strong&gt;sudo aptitude install build-essential git-core curl&lt;/strong&gt; en la terminal y luego continua con:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;bash &amp;lt;&amp;lt;&lt;span class="o"&gt;(&lt;/span&gt;curl -s https://rvm.beginrescueend.com/install/rvm&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Esto nos descargara un script en bash (el cual recomiendan leer &lt;a href="https://rvm.beginrescueend.com/install/rvm" target="_blank"&gt;aqui&lt;/a&gt;) que luego es ejecutado por... ¡adivinen! :P  ¡si! por Bash. este script lo que hace es clonar RVM de su repositorio en &lt;a href="https://github.com/wayneeseguin/rvm" target="_blank"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez terminada la instalacion, el contenido de RVM se ubicara en la carpeta &lt;strong&gt;.rvm&lt;/strong&gt; que se encuentra dentro de tu carpeta de usuario &lt;strong&gt;~/ &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cargando RVM en tu sesion Shell como funcion:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para que nuestra terminal pueda trabajar sin problemas con RVM debemos agregar la siguiente linea al archivo &lt;strong&gt;~/.bash_profile&lt;/strong&gt;, para esto tecleamos en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;[[ -s &amp;quot;$HOME/.rvm/scripts/rvm&amp;quot; ]] &amp;amp;&amp;amp; . &amp;quot;$HOME/.rvm/scripts/rvm&amp;quot; # Load RVM function&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ~/.bash_profile
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Recargando la configuración de Shell y primera prueba:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cierra y abre tu terminal en uso, (o abre una nueva) y teclea en ella la siguiente linea para recargar la configuración nueva:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nb"&gt;source&lt;/span&gt; .bash_profile
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Luego teclea la siguiente linea para hacer una prueba y ver si todo esta trabajando bien:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nb"&gt;type &lt;/span&gt;rvm | head -1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Si todo ha ido bien, nos deberia responder &lt;strong&gt;rvm: es una función&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ahora debemos verificar algunas otras dependencias a instalar antes de continuar:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;rvm notes
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Esto nos devuelve algo como esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;Notes &lt;span class="k"&gt;for &lt;/span&gt;Linux &lt;span class="o"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;DISTRIB_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Ubuntu
&lt;span class="nv"&gt;DISTRIB_RELEASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10.10
&lt;span class="nv"&gt;DISTRIB_CODENAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;maverick
&lt;span class="nv"&gt;DISTRIB_DESCRIPTION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Ubuntu 10.10&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;)&lt;/span&gt;

NOTE: &lt;span class="s1"&gt;&amp;#39;ruby&amp;#39;&lt;/span&gt; represents Matz&lt;span class="s1"&gt;&amp;#39;s Ruby Interpreter (MRI) (1.8.X, 1.9.X)&lt;/span&gt;
&lt;span class="s1"&gt;             This is the *original* / standard Ruby Language Interpreter&lt;/span&gt;
&lt;span class="s1"&gt;      &amp;#39;&lt;/span&gt;ree&lt;span class="s1"&gt;&amp;#39;  represents Ruby Enterprise Edition&lt;/span&gt;
&lt;span class="s1"&gt;      &amp;#39;&lt;/span&gt;rbx&lt;span class="s1"&gt;&amp;#39;  represents Rubinius&lt;/span&gt;

&lt;span class="s1"&gt;bash &amp;gt;= 3.2 is required&lt;/span&gt;
&lt;span class="s1"&gt;curl is required&lt;/span&gt;
&lt;span class="s1"&gt;git is required (&amp;gt;= 1.7 recommended)&lt;/span&gt;
&lt;span class="s1"&gt;patch is required (for ree and some ruby-head&amp;#39;&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt;.

If you wish to install rbx and/or Ruby 1.9 head &lt;span class="o"&gt;(&lt;/span&gt;MRI&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;eg. 1.9.2-head&lt;span class="o"&gt;)&lt;/span&gt;,
&lt;span class="k"&gt;then &lt;/span&gt;you must install and use rvm 1.8.7 first.

If you wish to have the &lt;span class="s1"&gt;&amp;#39;pretty colors&amp;#39;&lt;/span&gt; again,
  &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;export rvm_pretty_print_flag=1&amp;#39;&lt;/span&gt; in ~/.rvmrc.

dependencies:
&lt;span class="c"&gt;# For RVM&lt;/span&gt;
  rvm: bash curl git

&lt;span class="c"&gt;# For Ruby (MRI &amp;amp;amp; ree)  you should install the following OS dependencies:&lt;/span&gt;
  ruby: /usr/bin/apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev

&lt;span class="c"&gt;# For JRuby (if you wish to use it) you will need:&lt;/span&gt;
  jruby: /usr/bin/apt-get install curl g++ openjdk-6-jre-headless
  jruby-head: /usr/bin/apt-get install ant openjdk-6-jdk

&lt;span class="c"&gt;# In addition to ruby: dependencies,&lt;/span&gt;
  ruby-head: subversion

&lt;span class="c"&gt;# For IronRuby (if you wish to use it) you will need:&lt;/span&gt;
  ironruby: /usr/bin/apt-get install curl mono-2.0-devel
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Si leemos detenidamente notamos que una de las dependencias de RVM es Bash, Curl y Git, pero no necesitaremos instalarla ya que de seguro lo hiciste cuando ejecutaste el comando junto a la primera nota antes de instalar RVM, de lo contrario no estarías aqui :P También podemos ver que hay dependencia de acuerdo a la simplemente de Ruby que deseamos usar, en mi caso usare Ruby ('ruby' represents Matz's Ruby Interpreter (MRI) (1.8.X, 1.9.X)) el cual es el mas común ya uqe Jruby es una implementacion de Ruby+Java y Ironruby es implementacion de Ruby+plataforma .Net/Mono. por lo tanto las dependencias a instalar para Ruby serian:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo aptitude install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;¡Felicidades! ya has instalado RVM, pero todavia no hemos terminado...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instalando Ruby + Rails:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bien aquí viene la parte mas divertida, primero instalaremos Ruby, recuerden que en mi caso elegi la version 1.9.2 por lo que tecleo en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;rvm install 1.9.2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Este proceso puede llevar algunos minutos ya que el comando descargara las fuentes de Ruby, las extraerá en la carpeta ~/.rvm , lo compilara y luego lo instalara.&lt;/p&gt;

&lt;p&gt;Una vez terminado el proceso deberás elegir la versión de Ruby a usar, en nuestro caso instalamos Ruby 1.9.2 por lo que tecleamos en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;rvm use 1.9.2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Bien ahora a comprobar que hemos hecho todo bien, tecleamos en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;ruby -v
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;lo que nos deberá responder algo similar a: &lt;strong&gt;ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;comprobación extra:&lt;/strong&gt; si tecleamos el comando &lt;strong&gt;which ruby&lt;/strong&gt; podremos ver donde se encuentra el ejecutable de Ruby, en mi caso es: &lt;strong&gt;/home/angel/.rvm/rubies/ruby-1.9.2-p180/bin/ruby&lt;/strong&gt; Si hubiésemos instalado ruby desde los repos la ubicacion seria algo como &lt;strong&gt;/usr/bin/ruby&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Si queremos usar esta version de Ruby por defecto, deberemos teclear en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;rvm use 1.9.2 --default
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Pero hay algo que debemos corregir&lt;/strong&gt;, ya que si por ejemplo reiniciamos la PC y al entrar abrimos una terminal y tecleamos &lt;strong&gt;ruby -v&lt;/strong&gt; de seguro obtendremos un error que nos dira que no tenemos ruby instalado, ¡como que no si lo acabo de hacer!, para solventar esto abrimos con tu editor de texto favorito el archivo &lt;strong&gt;.bashrc&lt;/strong&gt; ubicado en tu carpeta de usuario &lt;strong&gt;~/.bashrc&lt;/strong&gt; y al final del archivo coloca la siguiente linea:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nb"&gt;source&lt;/span&gt; &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.rvm/scripts/rvm
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Ruby 1.9.2 incluye rubygems, asi que lo mas que podriamos hacer seria actualizar tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;gem update --system&amp;lt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;revisamos la versión de gem tecleando &lt;strong&gt;gem -v&lt;/strong&gt; en la terminal&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instalación de Rails:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;gem install rails
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;verificamos la version de rails tecleando en la terminal &lt;strong&gt;rails -v&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Si eres de los que usas &lt;strong&gt;IRB&lt;/strong&gt; (Ruby Interactivo) de seguro al ejecutarlo te mostrara un mensaje de error referente a &lt;strong&gt;readline&lt;/strong&gt;, ademas en IRB no podras mover el cursor entre los caracteres y/o no tendrás auto-completado. Para solucionar esto tecleamos en la terminal estos tres comandos:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; .rvm/src/ruby-1.9.2-p180/ext/readline/
ruby extconf.rb
make install
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Para verificar abre de nuevo IRB, si todo ha salido bien, notaras que puedes mover el cursor entre los caracteres y tendrás auto-completado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mejora Extra en IRB:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;si deseas tener coloreado en IRB instala las gemas wirble y hirb:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;gem install wirble hirb
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Luego abre el archivo &lt;strong&gt;.irbrc&lt;/strong&gt; ubicado en tu carpeta de usuario &lt;strong&gt;~/.irbrc&lt;/strong&gt; (crealo si no existe) y agrega lo siguiente:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="ruby"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;rubygems&amp;#39;&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;wirble&amp;#39;&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;hirb&amp;#39;&lt;/span&gt;
&lt;span class="no"&gt;Wirble&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;init&lt;/span&gt;
&lt;span class="no"&gt;Wirble&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;colorize&lt;/span&gt;
&lt;span class="c1"&gt;# hirb (active record output format in table)&lt;/span&gt;
&lt;span class="no"&gt;Hirb&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;View&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;enable&lt;/span&gt;

&lt;span class="c1"&gt;# IRB Options&lt;/span&gt;
&lt;span class="no"&gt;IRB&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:AUTO_INDENT&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
&lt;span class="no"&gt;IRB&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:SAVE_HISTORY&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;
&lt;span class="no"&gt;IRB&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:EVAL_HISTORY&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;

&lt;span class="c1"&gt;# Log to STDOUT if in Rails&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;include?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;RAILS_ENV&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;amp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;amp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="no"&gt;Object&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;const_defined?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;RAILS_DEFAULT_LOGGER&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;logger&amp;#39;&lt;/span&gt;
  &lt;span class="no"&gt;RAILS_DEFAULT_LOGGER&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Logger&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;STDOUT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="c1"&gt;#IRB.conf[:USE_READLINE] = true&lt;/span&gt;

  &lt;span class="c1"&gt;# Display the RAILS ENV in the prompt&lt;/span&gt;
  &lt;span class="c1"&gt;# ie : [Development]&amp;amp;gt;&amp;amp;gt;&lt;/span&gt;
  &lt;span class="no"&gt;IRB&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:PROMPT&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="ss"&gt;:CUSTOM&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="ss"&gt;:PROMPT_N&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;[&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;RAILS_ENV&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;capitalize&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;]&amp;amp;gt;&amp;amp;gt; &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="ss"&gt;:PROMPT_I&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;[&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;RAILS_ENV&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;capitalize&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;]&amp;amp;gt;&amp;amp;gt; &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="ss"&gt;:PROMPT_S&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="ss"&gt;:PROMPT_C&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;?&amp;amp;gt; &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="ss"&gt;:RETURN&lt;/span&gt; &lt;span class="o"&gt;=&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;=&amp;gt;; %s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;# Set default prompt&lt;/span&gt;
  &lt;span class="no"&gt;IRB&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:PROMPT_MODE&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;:CUSTOM&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;# We can also define convenient methods (credits go to thoughtbot)&lt;/span&gt;
&lt;span class="c1"&gt;# def me&lt;/span&gt;
&lt;span class="c1"&gt;#  User.find_by_email(&amp;quot;me@gmail.com&amp;quot;)&amp;lt;/pre&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Bien esto es todo, ya queda de tu parte instalar las gemas que mas uses y adaptarlo de acuerdo a tus necesidades. :)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Fes6LQPz6-_8VwGg3T2PYVKdecs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fes6LQPz6-_8VwGg3T2PYVKdecs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Fes6LQPz6-_8VwGg3T2PYVKdecs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fes6LQPz6-_8VwGg3T2PYVKdecs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zSLH-02w2Lk:XllbJvjbt9U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zSLH-02w2Lk:XllbJvjbt9U:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zSLH-02w2Lk:XllbJvjbt9U:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zSLH-02w2Lk:XllbJvjbt9U:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zSLH-02w2Lk:XllbJvjbt9U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=zSLH-02w2Lk:XllbJvjbt9U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zSLH-02w2Lk:XllbJvjbt9U:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zSLH-02w2Lk:XllbJvjbt9U:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=zSLH-02w2Lk:XllbJvjbt9U:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zSLH-02w2Lk:XllbJvjbt9U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zSLH-02w2Lk:XllbJvjbt9U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=zSLH-02w2Lk:XllbJvjbt9U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zSLH-02w2Lk:XllbJvjbt9U:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zSLH-02w2Lk:XllbJvjbt9U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=zSLH-02w2Lk:XllbJvjbt9U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zSLH-02w2Lk:XllbJvjbt9U:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=zSLH-02w2Lk:XllbJvjbt9U:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/zSLH-02w2Lk" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2011/05/17/instalando-rvm-ruby-rails-en-ubuntu</feedburner:origLink></entry>
 
 <entry>
   <title>MongoEngine un ODM para conectar a MongoDB desde Python</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/HZBHGaYHz0k/mongoengine-un-odm-para-conectar-a-mongodb-desde-python" />
   <updated>2011-01-14T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2011/01/14/mongoengine-un-odm-para-conectar-a-mongodb-desde-python</id>
   <content type="html">&lt;p&gt;&lt;a href="http://mongoengine.org/"&gt;MongoEngine&lt;/a&gt; es un ODM (Object Document Mapper) que nos permite mapear la estructura de nuestra base de datos a objetos en nuestras aplicaciones &lt;a href="http://blog.jam.net.ve/tag/python/"&gt;Python&lt;/a&gt; que se conectan a instancias &lt;a href="http://blog.jam.net.ve/tag/mongodb/"&gt;MongoDB&lt;/a&gt;, esto con el fin de poder usar la informacion en nuestra base de datos somo si se tratasen de un objeto. Esto nos ofrece la ventaja de que podemos escribir de una manera mas comoda nuestra aplicacion, definir un esquema para la base de datos y mejorar nuestro codigo, entre otras ventajas mas.&lt;/p&gt;

&lt;p&gt;Para instar MongoEngine en Linux tan solo debemos escribir en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo easy_install mongoengine
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; debido a que MongoEngine usa el driver PyMongo para conectar nuestras aplicaciones Python a bases de datos NoSQL MongoDB, es capaz de detectar si tenemos o no instalado el driver PyMongo, por lo que si no lo tenemos instalado MongoEngine lo instalara automaticamente. De todos modos puedes instalar PyMongo de forma separada tecleando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo easy_install pymongo
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Si leyeron mi articulo anterior sobre &lt;a href="http://blog.jam.net.ve/2011/01/12/ejemplo-de-consulta-mapreduce-en-mongodb/"&gt;Ejemplos de Consultas Map/Reduce en MongoDB&lt;/a&gt; de seguro habran leido que al final del articulo mencionaba que en especifico esa consulta map/reduce podriamos mejorarla y hacerlas de una forma mas sencilla y sin funciones JavaScript si usaramos un ODM, pues bien MongoEngine es uno de los ODM con los que podemos mejorar el codigo de la aplicacion RegistroDeTransferencias.&lt;/p&gt;

&lt;p&gt;Usando el ODM MongoEngine nuestra aplicacion quedaria similar a esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="c"&gt;#! /usr/bin/env python&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;mongoengine&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;time&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Rsubida&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Document&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
 &lt;span class="n"&gt;subida&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FloatField&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
 &lt;span class="n"&gt;fecha_agregado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StringField&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
 &lt;span class="n"&gt;hora_agregado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StringField&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Rbajada&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Document&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
 &lt;span class="n"&gt;bajada&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FloatField&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
 &lt;span class="n"&gt;fecha_agregado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StringField&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
 &lt;span class="n"&gt;hora_agregado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StringField&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Conectando a la Base de datos en la instancia Local&amp;quot;&lt;/span&gt;
&lt;span class="c"&gt;#Conectando a la instancia MongoDB local en la base de datos &amp;quot;bdregistrotransgerenciamdb&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;bdregistrotransgerenciamdb&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;la_subida&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Introdusca la cantidad de datos Enviados: &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;la_bajada&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Introdusca la cantidad de datos Recibidos: &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="n"&gt;fecha&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;fechaagregado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fecha&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s"&gt;-%m-%y&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;horaagregado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;%I:%M %p&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Los datos ingresados son:&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Subida: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;la_subida&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Bajada: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;la_bajada&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Fecha Agregado &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;fechaagregado&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Hora Agregado &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;horaagregado&lt;/span&gt;

&lt;span class="n"&gt;respuesta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Estos datos son correctos? introdusca solo (s/n): &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;respuesta&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;s&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="n"&gt;regsubida&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Rsubida&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subida&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;la_subida&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fecha_agregado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fechaagregado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hora_agregado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;horaagregado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="n"&gt;regbajada&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Rbajada&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bajada&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;la_bajada&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fecha_agregado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fechaagregado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hora_agregado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;horaagregado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

 &lt;span class="n"&gt;regsubida&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;save&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
 &lt;span class="n"&gt;regbajada&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;save&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Registros de Subida y Bajada ALMACENADOS con Exito!&amp;quot;&lt;/span&gt;

&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Cancelado!!!&amp;quot;&lt;/span&gt;

&lt;span class="c"&gt;#Algunas consultas&lt;/span&gt;
&lt;span class="n"&gt;respuesta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Deseas ver algunas consultas? introdusca solo (s/n): &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;respuesta&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;s&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="c"&gt;#Mostrando todos los registros de bajada en la coleccion&lt;/span&gt;
 &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;rbajada&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;Rbajada&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Bajada: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbajada&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bajada&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

 &lt;span class="c"&gt;#Sumatoria de todos los registros de bajada :)&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Total datos Bajada: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Rbajada&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;bajada&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot; MB&amp;quot;&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Total datos Subida: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Rsubida&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;subida&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot; MB&amp;quot;&lt;/span&gt;
 &lt;span class="n"&gt;tbajada&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Rbajada&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;bajada&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="n"&gt;tsubida&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Rsubida&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;subida&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tbajada&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;tsubida&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Total Consumido: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot; MB&amp;quot;&lt;/span&gt;

&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Cancelado!&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Como podemos ver en las primeras lineas del codigo, creamos dos clases llamadas &lt;strong&gt;Rsubida&lt;/strong&gt; y &lt;strong&gt;Rbajada&lt;/strong&gt;, estas clases contienen lo que es la estructura y tipo de datos de lo que contendran nuestros documentos. De esta forma podemos establecer un esquema predeterminado para la informacion que se almacenara en nuestra base de datos. Cabe destacar tambien que por cada clase que se crea, MongoEngine generara una coleccion correspondiente en la base de datos, por lo que en en este ejemplo nuestra base de datos contendra dos colecciones &lt;strong&gt;rsubida&lt;/strong&gt; que contendra los registros de subida y &lt;strong&gt;rbajada &lt;/strong&gt;que contendra los registros de bajada.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consultas:&lt;/strong&gt; Aqui esta la parte que mas nos interesa, si nos fijamos en todo el codigo, no vemos por ningun lado las funciones JavaScript Map/Reduce, esto es porque simplemente no las necesitamos para realizar especificamente las consultas que ya teniamos:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="c"&gt;#Mostrando todos los registros de bajada en la coleccion&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;rbajada&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;Rbajada&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Bajada: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbajada&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bajada&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;el ejemplo de salida de esta seccion del codigo seria algo como esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;Bajada: 36.3
Bajada: 123.0
Bajada: 66.4
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Esta seccion del codigo nos mostrara los registros de bajadas que estan contenido en el campo bajada, notese que en esta ocacion no nos devuelve un documento JSON con los datos solicitados (incluyendo su corchetes y comillas), sino que simplemente nos devuelve el valor en especifico.&lt;/p&gt;

&lt;p&gt;La seccion del codigo con la que sustituimos las consultas map/reduce y su codigo en javascript es la siguiente:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Total datos Bajada: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Rbajada&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;bajada&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot; MB&amp;quot;&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Total datos Subida: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Rsubida&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;subida&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot; MB&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;lo que nos devolvera algo como:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;Total datos Bajada: 225.7 MB
Total datos Subida: 142.3 MB
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Coo vez aqui estamos aprovechando una de los beneficios de usar un ODM, y usar el contenido de nuestra base de datos como si de simples objetos se tratasen ya que con simplemente elegir la clase Rbajada y seleccionando su atributo (variable) "bajada" y haciendo uso del metodo sum() podremos realizar la sumatoria de todo los registros de bajada en en la coleccion Rbajada. Todo esto sin usar map/reduce ni funciones javascript :P&lt;/p&gt;

&lt;p&gt;Con esto podemos completar la aplicacion y mostrar el total consumido, es decir, la suma de los datos de subida con los datos de bajada.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="n"&gt;tbajada&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Rbajada&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;bajada&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;tsubida&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Rsubida&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;subida&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tbajada&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;tsubida&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Total Consumido: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot; MB&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;los que nos muestra:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;Total Consumido: 368.0 MB
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Como vemos, un ODM nos puede facilitar mucho la vida y mejorar nuestras aplicaciones, ademas de acortar un poco el codigo ya que si se fijan. hay muchas menos lineas y mas funciones que la version anterior de la aplicacion que no usa MongoEngine.&lt;/p&gt;

&lt;p&gt;Esta aplicacion planeo mejorarla cada vez mas mientras continue aprendiendo sobre Python y MongoDB por loq eu e puesto a disposicion su codigo en &lt;a href="http://github.com/jesuangelm/RegistroDeTransferencias_Mdb_Meng"&gt;GitHub&lt;/a&gt; para los que quieran descargarlo o solo si les parece util. :)&lt;/p&gt;

&lt;p&gt;Saludos y espero les sirva!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-Fo_iv0OB3SzJYEcpJK4UUZ44Rw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-Fo_iv0OB3SzJYEcpJK4UUZ44Rw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-Fo_iv0OB3SzJYEcpJK4UUZ44Rw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-Fo_iv0OB3SzJYEcpJK4UUZ44Rw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=HZBHGaYHz0k:SsM6uu74lkA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=HZBHGaYHz0k:SsM6uu74lkA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=HZBHGaYHz0k:SsM6uu74lkA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=HZBHGaYHz0k:SsM6uu74lkA:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=HZBHGaYHz0k:SsM6uu74lkA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=HZBHGaYHz0k:SsM6uu74lkA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=HZBHGaYHz0k:SsM6uu74lkA:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=HZBHGaYHz0k:SsM6uu74lkA:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=HZBHGaYHz0k:SsM6uu74lkA:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=HZBHGaYHz0k:SsM6uu74lkA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=HZBHGaYHz0k:SsM6uu74lkA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=HZBHGaYHz0k:SsM6uu74lkA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=HZBHGaYHz0k:SsM6uu74lkA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=HZBHGaYHz0k:SsM6uu74lkA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=HZBHGaYHz0k:SsM6uu74lkA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=HZBHGaYHz0k:SsM6uu74lkA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=HZBHGaYHz0k:SsM6uu74lkA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/HZBHGaYHz0k" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2011/01/14/mongoengine-un-odm-para-conectar-a-mongodb-desde-python</feedburner:origLink></entry>
 
 <entry>
   <title>Ejemplo de consulta Map/Reduce en MongoDB</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/W--xn6n6tJU/ejemplo-de-consulta-mapreduce-en-mongodb" />
   <updated>2011-01-12T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2011/01/12/ejemplo-de-consulta-mapreduce-en-mongodb</id>
   <content type="html">&lt;p&gt;Hace unos articulos atras les mostre un ejemplo de como podriamos usar Python y el driver PyMongo para almacenar informacion en MongoDB, el ejemplo que vimos fue mi aplicacion de &lt;a href="http://blog.jam.net.ve/2011/01/10/almacenando-datos-en-mongodb-desde-python/"&gt;RegistroDeTransferencias&lt;/a&gt;. Al final de dicho articulo  explico como podriamos ver y consultar los datos almacenados usando la consola interactiva de MongoDB, pero... ¿y si queremos que sea la misma aplicacion que nos muestre algunas consultas?. Pues a eso vamos, en este articulo haremos que RegistroDeTransferencias nos muestre el total de datos de subida y bajada.&lt;/p&gt;

&lt;p&gt;Para que nuestra aplicacion nos muestre esta informacion necesitamos crear dos funciones &lt;strong&gt;Map/Reduce&lt;/strong&gt; escritas en JavaScript.&lt;/p&gt;

&lt;p&gt;La funcion &lt;strong&gt;Map&lt;/strong&gt; para los datos de &lt;strong&gt;subida&lt;/strong&gt; seria algo como esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="javascript"&gt;&lt;span class="nx"&gt;ms&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Code&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;quot;&amp;quot;function() {&lt;/span&gt;
&lt;span class="s2"&gt; emit(&amp;quot;&lt;/span&gt;&lt;span class="nx"&gt;Subida&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;, this.subida);&lt;/span&gt;
&lt;span class="s2"&gt; }&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y su funcion Reduce seria algo como:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;rs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; Code&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;quot;&amp;quot;function(k, v) {&lt;/span&gt;
&lt;span class="s2"&gt; var i, sum = 0;&lt;/span&gt;
&lt;span class="s2"&gt; for (i in v) {&lt;/span&gt;
&lt;span class="s2"&gt; sum += v[i];&lt;/span&gt;
&lt;span class="s2"&gt; }&lt;/span&gt;
&lt;span class="s2"&gt; return sum;&lt;/span&gt;
&lt;span class="s2"&gt; }&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Nota&lt;/strong&gt; Para que el metodo &lt;strong&gt;Code()&lt;/strong&gt; que contiene las funciones &lt;strong&gt;Map/Reduce&lt;/strong&gt; funcione es necesario hacer uso del modulo &lt;strong&gt;BSON&lt;/strong&gt; e importar &lt;strong&gt;Code&lt;/strong&gt;, por lo que al inicio del archivo debemos agregar lo siguiente:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;bson.code&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Code&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;En la funcion &lt;strong&gt;Map (ms)&lt;/strong&gt; lo que hara sera seleccionarnos todos registros del campo &lt;strong&gt;subida&lt;/strong&gt; en nuestra coleccion y emitirlos como parametro &lt;strong&gt;VALUE&lt;/strong&gt;, mientras que la funcion &lt;strong&gt;Reduce (rs)&lt;/strong&gt; recibira como parametro en  la &lt;strong&gt;KEY VALUE (v)&lt;/strong&gt; los registros de &lt;strong&gt;subida&lt;/strong&gt; que seleccionamos en nuestra funcion &lt;strong&gt;Map&lt;/strong&gt; y a continuacio en una secuencia for, sumara todos los valores de subida existentes, lo que nos devolvera el total de subida.&lt;/p&gt;

&lt;p&gt;Para ejecutar nuestras funciones Map/Reduce y hacer que nos genere y muestre la informacion que solicitamos debemos agregar en nuestra aplicacion lo siguiente:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Sumatoria de SUBIDA&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;resultado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;colsubida&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;map_reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;subida&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;subida&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Como podemos ver, se elige la coleccion colsubida que contiene los registros de subida y a continuacion usamos el metodo &lt;strong&gt;map_reduce()&lt;/strong&gt; pasandole como parametro nuestras funciones &lt;strong&gt;Map (ms)&lt;/strong&gt; y funcion &lt;strong&gt;Reduce (rs)&lt;/strong&gt;. Luego de esto la recorremos en un for y mostramos el resultado.&lt;/p&gt;

&lt;p&gt;De forma similar podriamos usar otra funcion &lt;strong&gt;Map/Reduce&lt;/strong&gt; para mostrar el total de bajada, si modificamos el codigo de la aplicacion RegistroDeTransferencias y añadimos lo que hemos visto, nos quedaria algo como esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pymongo&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;time&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;bson.code&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Code&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Conectando al Servidor de Base de Datos Local...&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;conexion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Connection&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c"&gt;# Conexion local por defecto&lt;/span&gt;

&lt;span class="c"&gt;#conexion = Connection(&amp;quot;usuario:contraseña@servidor.com:27075/basededato&amp;quot;) #Conexion a un servidor remoto&lt;/span&gt;

&lt;span class="c"&gt;#creando/obteniendo un objeto que referencie a la base de datos.&lt;/span&gt;
&lt;span class="n"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;conexion&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;bdregistrodetransferencias&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c"&gt;#base de datos a usar&lt;/span&gt;

&lt;span class="c"&gt;#creando/obteniendo un objeto que referencie a la coleccion.&lt;/span&gt;
&lt;span class="n"&gt;colbajada&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;bajada&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c"&gt;#coleccion con registros de bajada&lt;/span&gt;
&lt;span class="n"&gt;colsubida&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;subida&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c"&gt;#coleccion con registros de subida&lt;/span&gt;

&lt;span class="c"&gt;#solicitando los datos de subida y bajada&lt;/span&gt;
&lt;span class="n"&gt;la_subida&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Introdusca la cantidad de datos Enviados: &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;la_descarga&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Introdusca la cantidad de datos Recibidos: &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c"&gt;# obteniendo la fecha, hora y almacenandolas en variables.&lt;/span&gt;
&lt;span class="n"&gt;fecha&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;fecha_agregado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fecha&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s"&gt;-%m-%y&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;hora_agregado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;%I:%M %p&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Los datos ingresados son:&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Subida: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;la_subida&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Bajada: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;la_descarga&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Fecha Agregado &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;fecha_agregado&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Hora Agregado &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;hora_agregado&lt;/span&gt;
&lt;span class="n"&gt;respuesta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Estos datos son correctos? introdusca solo (s/n): &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;respuesta&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;s&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="c"&gt;#creando el diccionario con los documentos de subida y bajada&lt;/span&gt;
 &lt;span class="n"&gt;registrobajada&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;bajada&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;la_descarga&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;fecha_agregado&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;fecha_agregado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;hora_agregado&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hora_agregado&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="n"&gt;registrosubida&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;subida&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;la_subida&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;fecha_agregado&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;fecha_agregado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;hora_agregado&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hora_agregado&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;#insertando los datos en la BD&lt;/span&gt;
 &lt;span class="n"&gt;colbajada&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;registrobajada&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="n"&gt;colsubida&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;registrosubida&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Documento Guardado con EXITO!&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Cancelado!!!&amp;quot;&lt;/span&gt;

&lt;span class="n"&gt;respuesta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Deseas ver la sumatoria de subida/bajada? (s/n): &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;respuesta&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;s&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="n"&gt;ms&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Code&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;quot;&amp;quot;function() {&lt;/span&gt;
&lt;span class="s"&gt; emit(&amp;quot;Subida&amp;quot;, this.subida);&lt;/span&gt;
&lt;span class="s"&gt; }&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

 &lt;span class="n"&gt;rs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Code&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;quot;&amp;quot;function(k, v) {&lt;/span&gt;
&lt;span class="s"&gt; var i, sum = 0;&lt;/span&gt;
&lt;span class="s"&gt; for (i in v) {&lt;/span&gt;
&lt;span class="s"&gt; sum += v[i];&lt;/span&gt;
&lt;span class="s"&gt; }&lt;/span&gt;
&lt;span class="s"&gt; return sum;&lt;/span&gt;
&lt;span class="s"&gt; }&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

 &lt;span class="n"&gt;mb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Code&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;quot;&amp;quot;function() {&lt;/span&gt;
&lt;span class="s"&gt; emit(&amp;quot;Bajada&amp;quot;, this.bajada);&lt;/span&gt;
&lt;span class="s"&gt; }&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

 &lt;span class="n"&gt;rb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Code&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;quot;&amp;quot;function(k, v) {&lt;/span&gt;
&lt;span class="s"&gt; var i, sum = 0;&lt;/span&gt;
&lt;span class="s"&gt; for (i in v) {&lt;/span&gt;
&lt;span class="s"&gt; sum += v[i];&lt;/span&gt;
&lt;span class="s"&gt; }&lt;/span&gt;
&lt;span class="s"&gt; return sum;&lt;/span&gt;
&lt;span class="s"&gt; }&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Sumatoria de SUBIDA&amp;quot;&lt;/span&gt;
 &lt;span class="n"&gt;resultado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;colsubida&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;map_reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

 &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;subida&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;subida&lt;/span&gt;

 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Sumatoria de BAJADA&amp;quot;&lt;/span&gt;
 &lt;span class="n"&gt;resultado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;colbajada&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;map_reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rb&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

 &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;bajada&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;bajada&lt;/span&gt;

&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Cancelado!!!&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Al ejecutar la aplicacion y responder afirmativamente a la pregunta "Deseas ver la sumatoria de subida/bajada? (s/n): " veremos algo similar a esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;Deseas ver la sumatoria de subida/bajada? &lt;span class="o"&gt;(&lt;/span&gt;s/n&lt;span class="o"&gt;)&lt;/span&gt;: s
Sumatoria de SUBIDA
&lt;span class="o"&gt;{&lt;/span&gt;u&lt;span class="s1"&gt;&amp;#39;_id&amp;#39;&lt;/span&gt;: u&lt;span class="s1"&gt;&amp;#39;Subida&amp;#39;&lt;/span&gt;, u&lt;span class="s1"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;: 126.10999999999999&lt;span class="o"&gt;}&lt;/span&gt;
Sumatoria de BAJADA
&lt;span class="o"&gt;{&lt;/span&gt;u&lt;span class="s1"&gt;&amp;#39;_id&amp;#39;&lt;/span&gt;: u&lt;span class="s1"&gt;&amp;#39;Bajada&amp;#39;&lt;/span&gt;, u&lt;span class="s1"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;: 805.0&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Como vemos, no es muy dificil realizar consultas &lt;strong&gt;Map/Reduce&lt;/strong&gt; en MongoDB, aunque comparandola a como lo haciamos en CouchDB es un tanto mas largo y posiblemente engorroso.&lt;/p&gt;

&lt;p&gt;Lo bueno de esto es que, esta misma consulta podriamos realizarla tal cual, hacer que nos devuelva unicamente solo numeros y no un documento JSON ({u'_id': u'Subida', u'value': 126.10999999999999}) si usamos un ODM :D y lo mejor,  sin usar funciones Map/Reduce lo que hara tambien que nuestra aplicacion tenga menos lineas de codigo... Pero esto se los mostrare proximamente :P&lt;/p&gt;

&lt;p&gt;Saludos y espero les sirva!.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VaOInHPSUZh3d5AsiDuv4cXmXow/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VaOInHPSUZh3d5AsiDuv4cXmXow/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VaOInHPSUZh3d5AsiDuv4cXmXow/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VaOInHPSUZh3d5AsiDuv4cXmXow/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=W--xn6n6tJU:PYtmYvQO5uo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=W--xn6n6tJU:PYtmYvQO5uo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=W--xn6n6tJU:PYtmYvQO5uo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=W--xn6n6tJU:PYtmYvQO5uo:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=W--xn6n6tJU:PYtmYvQO5uo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=W--xn6n6tJU:PYtmYvQO5uo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=W--xn6n6tJU:PYtmYvQO5uo:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=W--xn6n6tJU:PYtmYvQO5uo:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=W--xn6n6tJU:PYtmYvQO5uo:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=W--xn6n6tJU:PYtmYvQO5uo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=W--xn6n6tJU:PYtmYvQO5uo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=W--xn6n6tJU:PYtmYvQO5uo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=W--xn6n6tJU:PYtmYvQO5uo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=W--xn6n6tJU:PYtmYvQO5uo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=W--xn6n6tJU:PYtmYvQO5uo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=W--xn6n6tJU:PYtmYvQO5uo:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=W--xn6n6tJU:PYtmYvQO5uo:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/W--xn6n6tJU" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2011/01/12/ejemplo-de-consulta-mapreduce-en-mongodb</feedburner:origLink></entry>
 
 <entry>
   <title>Instalando RockMongo - Interfaz de Administracion web para MongoDB</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/H1Gauh-aQdk/instalando-rockmongo-interfaz-de-administracion-web-para-mongodb" />
   <updated>2011-01-11T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2011/01/11/instalando-rockmongo-interfaz-de-administracion-web-para-mongodb</id>
   <content type="html">&lt;p&gt;En el mundo de las bases de datos relacionales, una de las formas mas usadas para administrar una base de datos es usando una interfaz web, esto sobretodo si el usuario no cuenta con un acceso shell a su cuenta de hosting. En las bases de datos relacionales por lo general se usa aplicaciones escritas en PHP como phpMyAdmin para MySQL y phpPgAdmin para PostgreSQL.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/ZgBVN"&gt;&lt;img src="http://i.imgur.com/ZgBVNl.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bien en el mundo de las bases de datos NoSQL hay aplicaciones web similares, una de ellas es &lt;a href="https://code.google.com/p/rock-php/"&gt;RockMongo&lt;/a&gt; la cual esta escrita en PHP y posee una interfaz bastante intuitiva y un tanto similar a phpMyAdmin. Instalar RockMongo es sumamente sencillo y al estar escrita en PHP lo unico que requerimos es tener instalado y corriendo un servicio web como Nginx, Apache o similares, el lenguaje PHP y el driver correspondiente para accesar a MongoDB desde PHP.&lt;/p&gt;

&lt;p&gt;Bien por suerte hace unos dias explique &lt;a href="http://blog.jam.net.ve/2011/01/04/instalando-nginx-con-soporte-php5-en-ubuntu/"&gt;como instalar Nginx con soporte PHP5 en Ubuntu&lt;/a&gt;, por lo que siguiendo dicho articulo tendremos mas de medio camino listo! (¡Todos mis articulos estan friamente calculados! jajajaja :P ). Nos queda nada mas instalar el driver PHP para MongoDB y descargar e instalar RockMongo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instalando el Driver MongoDB y PHP:&lt;/strong&gt; Bien para instalar este driver tan solo abrimos una terminal y escribimos en ella:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo pecl install mongo
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;esto nos instalara el driver para poder acceder a MongoDB desde PHP, ahora debemos configurar nuestro archivo &lt;strong&gt;php.ini &lt;/strong&gt;y agregar la siguiente linea:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;extension&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mongo.so
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; si seguiste mi articulo sobre &lt;a href="blog.jam.net.ve/2011/01/04/instalando-nginx-con-soporte-php5-en-ubuntu/"&gt;como instalar Nginx con soporte PHP5 en Ubuntu&lt;/a&gt;, en la carpeta &lt;strong&gt;/etc/php5&lt;/strong&gt; encontraras varios archivos &lt;strong&gt;php.ini&lt;/strong&gt;, el que debemos editar sera aquel que se encuentre dentro de la carpeta &lt;strong&gt;fpm&lt;/strong&gt;, es decir la ruta del archivo seria algo como &lt;strong&gt;/etc/php5/fpm/php.ini&lt;/strong&gt; ¿porque editamos especificamente este archivo? pues simple, porque siguiendo ese tutorial estamos corriendo PHP mediante &lt;strong&gt;FastCGI&lt;/strong&gt; usando PHP5-FPM, de todos modos y si asi lo deseas, puedes agregar la linea en las demas archivos php.ini sin problemas.&lt;/p&gt;

&lt;p&gt;luego de editar el archivo php.ini debemos reiniciar PHP5-FPM para que los cambios tengan efecto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo service php5-fpm restart
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Ahora nos queda instalar RockMongo, para esto tan solo debemos &lt;a href="https://code.google.com/p/rock-php/downloads/list"&gt;descargar&lt;/a&gt; la ultima version desde la pagina oficial. Al momento de escirbir esto la ultima version es la 1.0.11 con buenas mejoras como traduccion al Español, insertar y modificar documentos en formato JSON (en versiones anteriores habia que escribir los documentos en arrays PHP).&lt;/p&gt;

&lt;p&gt;una ves descargardo, lo descomprimimos y obtendremos una carpeta llamada &lt;strong&gt;rockmongo&lt;/strong&gt; la cual debemos copiar en la raiz de nuestro servidor web, en nustro caso debemos copiar dicha carpeta en &lt;strong&gt;/var/www&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; recuerda que el directorio &lt;strong&gt;/var/www&lt;/strong&gt; por lo general pertenece a root (administrador) por lo que necesitaras privilegios de administrador para copiar la carpeta rockmongo dicho directorio.&lt;/p&gt;

&lt;p&gt;si lo deseas puedes abrir con tu editor favorito y ver el archivo config.php, encontraremos algo como esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="php"&gt;&lt;span class="x"&gt;$MONGO[&amp;quot;servers&amp;quot;] = array(&lt;/span&gt;
&lt;span class="x"&gt; array(&lt;/span&gt;
&lt;span class="x"&gt; &amp;quot;host&amp;quot; =&amp;gt; &amp;quot;localhost&amp;quot;, // Replace your MongoDB host ip or domain name here&lt;/span&gt;
&lt;span class="x"&gt; &amp;quot;port&amp;quot; =&amp;gt; &amp;quot;27017&amp;quot;, // MongoDB connection port&lt;/span&gt;
&lt;span class="x"&gt; &amp;quot;username&amp;quot; =&amp;gt; null, // MongoDB connection username&lt;/span&gt;
&lt;span class="x"&gt; &amp;quot;password&amp;quot; =&amp;gt; null, // MongoDB connection password&lt;/span&gt;
&lt;span class="x"&gt; &amp;quot;auth_enabled&amp;quot; =&amp;gt; true,//Enable authentication, set to &amp;quot;false&amp;quot; to disable authentication&lt;/span&gt;
&lt;span class="x"&gt; &amp;quot;admins&amp;quot; =&amp;gt; array(&lt;/span&gt;
&lt;span class="x"&gt; &amp;quot;admin&amp;quot; =&amp;gt; &amp;quot;admin&amp;quot;, // Administrator&amp;#39;s USERNAME =&amp;gt; PASSWORD&lt;/span&gt;
&lt;span class="x"&gt; //&amp;quot;iwind&amp;quot; =&amp;gt; &amp;quot;123456&amp;quot;,&lt;/span&gt;
&lt;span class="x"&gt; ),&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;como ves, RockMongo nos permite configurarlo para conectarse a instancias locales o remotas de MongoDB, asi como tambien ver y cambiar los datos de usuario y contraseña del admin para iniciar sesion en Rockmongo. Si dejamos el archivo tal como esta, rockmongo se conectara a nuestra instancia local de mongodb y usaremos para iniciar sesion em rockmongo el nombre de usuario "admin"  y contraseña "admin".&lt;/p&gt;

&lt;p&gt;Bien ya tenemos instalado y configurado RockMongo y ya podemos comenzar a usarlo, tan solo debemos ingresar en nuestro navegador y escirbir en la barra de direcciones:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;http://localhost/rockmongo
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;luego de loguearte como admin veras algo como esto:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/gMehz"&gt;&lt;img src="http://i.imgur.com/gMehzs.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; es probable que al teclear esta direccion en el navegador no veas nada o veas un error, es posible que requieras darle los permisos de lectura-escritura-ejecucion necesarios a la carpeta rockmongo y sus archivos.&lt;/p&gt;

&lt;p&gt;tecleando el comando estando ubicado en &lt;strong&gt;/var/www&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo chmod 777 rockmongo/*
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;te podria sacar del apuro, pero ojo no es lo mas recomendable en un servidor.&lt;/p&gt;

&lt;p&gt;Bien ya con esto tienes instalado y funcionando RockMongo por lo que ya puedes usarlo para "jugar" con MongoDB. Por supuesto este no es la unica interfaz de administracion para MongoDB, existen muchas otras como FangOfMongo la cual esta programada en Python y Django, pero en mis pruebas no me convencio mucho. Existen tambien phpMoAdmin la cual es bastante liviana y viene escrita en tan solo 1 archivo .php, pero la interfaz no me parece muy intuitiva, ademas de ser extremadamente simple. Si conocer las demas Gui de Administarcion ta solo visita la documentacion oficial de &lt;a href="http://www.mongodb.org/display/DOCS/Admin+UIs"&gt;MongoDB&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Saludos y espero les sirva :D&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/eBxoeHELK8rO25YIso2Rzo9nzCI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eBxoeHELK8rO25YIso2Rzo9nzCI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/eBxoeHELK8rO25YIso2Rzo9nzCI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eBxoeHELK8rO25YIso2Rzo9nzCI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=H1Gauh-aQdk:e63YsagCAWQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=H1Gauh-aQdk:e63YsagCAWQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=H1Gauh-aQdk:e63YsagCAWQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=H1Gauh-aQdk:e63YsagCAWQ:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=H1Gauh-aQdk:e63YsagCAWQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=H1Gauh-aQdk:e63YsagCAWQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=H1Gauh-aQdk:e63YsagCAWQ:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=H1Gauh-aQdk:e63YsagCAWQ:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=H1Gauh-aQdk:e63YsagCAWQ:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=H1Gauh-aQdk:e63YsagCAWQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=H1Gauh-aQdk:e63YsagCAWQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=H1Gauh-aQdk:e63YsagCAWQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=H1Gauh-aQdk:e63YsagCAWQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=H1Gauh-aQdk:e63YsagCAWQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=H1Gauh-aQdk:e63YsagCAWQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=H1Gauh-aQdk:e63YsagCAWQ:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=H1Gauh-aQdk:e63YsagCAWQ:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/H1Gauh-aQdk" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2011/01/11/instalando-rockmongo-interfaz-de-administracion-web-para-mongodb</feedburner:origLink></entry>
 
 <entry>
   <title>Almacenando datos en MongoDB desde Python</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/sasXPynd9uY/almacenando-datos-en-mongodb-desde-python" />
   <updated>2011-01-10T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2011/01/10/almacenando-datos-en-mongodb-desde-python</id>
   <content type="html">&lt;p&gt;Mas NoSQL :D ... luego de ver como &lt;a href="http://blog.jam.net.ve/2010/12/13/instalando-couchdbkit-y-almacenando-datos-en-couchdb-desde-python/"&gt;almacenabamos informacion en CouchDB desde una aplicacion en Python&lt;/a&gt;, veremos como hacer lo mismo pero esta vez enviando los datos a una base de datos MongoDB.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/ZgBVN"&gt;&lt;img src="http://i.imgur.com/ZgBVNl.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para este caso usaremos la misma aplicacion de &lt;a href="http://blog.jam.net.ve/2010/12/23/programando-una-aplicacion-de-registrodetransferencias-en-python-y-couchdb/"&gt;RegistroDeTransferencias&lt;/a&gt; que programe anteriormente y que almacena los datos en CouchDB, solo que esta vez modificare el codigo para que almacene la informacion en MongoDB. :P&lt;/p&gt;

&lt;p&gt;Para poder conectar nuestras aplicaciones Python a MongoDB y que estas utilicen dicha base de datos NoSQL para almacenar la informacion necesitamos del driver correspondiente el cual se llama &lt;a href="http://api.mongodb.org/python"&gt;PyMongo&lt;/a&gt;. Para instalar el driver para python en Ubuntu lo haremos de forma similar a como lo hicimos con CouchDB usando  Easy_Install, para esto abrimos una terminal y escribimos:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo easy_install pymongo
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Ya con esto tendremos instalado Pymongo y podremos comenzar a usarlo para que nuestras aplicaciones en python se conecten a MongoDB.&lt;/p&gt;

&lt;p&gt;Como les decia, la aplicacion que usaremos en este ejemplo es mi aplicacion de &lt;strong&gt;RegistroDeTransferencias&lt;/strong&gt; que programe anteriormente y que almacena los datos en CouchDB, pero luego de hacerle unos pequeños cambios pasara a almacenar la informacion en MongoDB. La aplicacion se compone de un simple archivo llamado &lt;strong&gt;rdtmongo.py&lt;/strong&gt; y el codigo es el siguiente:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pymongo&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;time&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;


&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Conectando al Servidor de Base de Datos Local...&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;conexion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Connection&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c"&gt;# Conexion local por defecto&lt;/span&gt;

&lt;span class="c"&gt;#conexion = Connection(&amp;quot;usuario:contraseña@servidor.com:27075/basededato&amp;quot;) #Conexion a un servidor remoto&lt;/span&gt;

&lt;span class="c"&gt;#creando/obteniendo un objeto que referencie a la base de datos.&lt;/span&gt;
&lt;span class="n"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;conexion&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;bdregistrodetransferencias&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c"&gt;#base de datos a usar&lt;/span&gt;

&lt;span class="c"&gt;#creando/obteniendo un objeto que referencie a la coleccion.&lt;/span&gt;
&lt;span class="n"&gt;colbajada&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;bajada&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c"&gt;#coleccion con registros de bajada&lt;/span&gt;
&lt;span class="n"&gt;colsubida&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;subida&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c"&gt;#coleccion con registros de subida&lt;/span&gt;

&lt;span class="c"&gt;#solicitando los datos de subida y bajada&lt;/span&gt;
&lt;span class="n"&gt;la_subida&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Introdusca la cantidad de datos Enviados: &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;la_descarga&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Introdusca la cantidad de datos Recibidos: &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c"&gt;# obteniendo la fecha, hora y almacenandolas en variables.&lt;/span&gt;
&lt;span class="n"&gt;fecha&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;fecha_agregado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fecha&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s"&gt;-%m-%y&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;hora_agregado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;%I:%M %p&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Los datos ingresados son:&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Subida: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;la_subida&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Bajada: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;la_descarga&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Fecha Agregado &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;fecha_agregado&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Hora Agregado &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;hora_agregado&lt;/span&gt;
&lt;span class="n"&gt;respuesta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Estos datos son correctos? introdusca solo (s/n): &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;respuesta&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;s&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="c"&gt;#creando el diccionario con los documentos de subida y bajada&lt;/span&gt;
 &lt;span class="n"&gt;registrobajada&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;bajada&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;la_descarga&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;fecha_agregado&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;fecha_agregado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;hora_agregado&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hora_agregado&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="n"&gt;registrosubida&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;subida&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;la_subida&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;fecha_agregado&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;fecha_agregado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;hora_agregado&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hora_agregado&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;#insertando los datos en la BD&lt;/span&gt;
 &lt;span class="n"&gt;colbajada&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;registrobajada&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="n"&gt;colsubida&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;registrosubida&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Documento Guardado con EXITO!&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Cancelado!!!&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Como ven es una aplicacion super sencilla y basica, en este ejemplo yo separe los registros de subida y bajada en en dos colecciones &lt;strong&gt;subida&lt;/strong&gt; y &lt;strong&gt;bajada&lt;/strong&gt; almacenadas en la base de datos &lt;strong&gt;bdregistrodetransferencias&lt;/strong&gt; de esta forma los registros en la base de datos quedan mejor organizados y nos ayuda a la hora de buscar o consultar un documento.&lt;/p&gt;

&lt;p&gt;Para ejecutar esta aplicacion en la terminal tan solo tecleamos:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;python rdtmongo.py
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y veremos algo como esto&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/3yw6W"&gt;&lt;img src="http://i.imgur.com/3yw6Wl.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si nos vamos a la consola interactiva de MongoDB y nos movemos a la base de datos bdregistrodetransferencias:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;use bdregistrodetransferencias
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;podremos ver las colecciones tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;show collections
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;tambien podremos ver todos los documentos de la coleccion &lt;strong&gt;subida&lt;/strong&gt; y &lt;strong&gt;bajada&lt;/strong&gt; teclando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;db.subida.find&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;




&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;db.bajada.find&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;respectivamente, lo cual nos devolvera algo como esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="javascript"&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;_id&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ObjectId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;4d2150de5ff0885b8b000001&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;subida&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;2.9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;fecha_agregado&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;03-01-11&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;hora_agregado&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;12:00 AM&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;_id&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ObjectId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;4d2164dd5ff0887868000001&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;subida&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;7.02&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;fecha_agregado&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;03-01-11&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;hora_agregado&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;01:25 AM&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;_id&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ObjectId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;4d2221855ff0884395000001&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;subida&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;5.57&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;fecha_agregado&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;03-01-11&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;hora_agregado&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;02:50 PM&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;_id&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ObjectId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;4d22b1505ff08829ab000001&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;subida&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;11.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;fecha_agregado&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;04-01-11&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;hora_agregado&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;01:04 AM&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Por supuesto podriamos ejecutar consultas simples para visualizar los datos de subida y bajada o consultas Map/Reduce para calcular un total de datos de subida o bajada consumidos, pero eso se los mostrare proximamente :D&lt;/p&gt;

&lt;p&gt;Tambien has estado probando MongoDB ??? ya has realizado una aplicacion??? cuentanos tu experiencia con MongoDB!!!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/I6AXfwBvAFP_jefzezQBZDO07Bo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/I6AXfwBvAFP_jefzezQBZDO07Bo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/I6AXfwBvAFP_jefzezQBZDO07Bo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/I6AXfwBvAFP_jefzezQBZDO07Bo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=sasXPynd9uY:L9DkuoxLiHs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=sasXPynd9uY:L9DkuoxLiHs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=sasXPynd9uY:L9DkuoxLiHs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=sasXPynd9uY:L9DkuoxLiHs:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=sasXPynd9uY:L9DkuoxLiHs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=sasXPynd9uY:L9DkuoxLiHs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=sasXPynd9uY:L9DkuoxLiHs:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=sasXPynd9uY:L9DkuoxLiHs:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=sasXPynd9uY:L9DkuoxLiHs:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=sasXPynd9uY:L9DkuoxLiHs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=sasXPynd9uY:L9DkuoxLiHs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=sasXPynd9uY:L9DkuoxLiHs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=sasXPynd9uY:L9DkuoxLiHs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=sasXPynd9uY:L9DkuoxLiHs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=sasXPynd9uY:L9DkuoxLiHs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=sasXPynd9uY:L9DkuoxLiHs:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=sasXPynd9uY:L9DkuoxLiHs:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/sasXPynd9uY" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2011/01/10/almacenando-datos-en-mongodb-desde-python</feedburner:origLink></entry>
 
 <entry>
   <title>Usos basicos de MongoDB Console</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/JGmJRLVYNYE/usos-basicos-de-mongodb-console" />
   <updated>2011-01-09T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2011/01/09/usos-basicos-de-mongodb-console</id>
   <content type="html">&lt;p&gt;Y seguimos con mas pruebas de &lt;a href="http://blog.jam.net.ve/category/nosql/"&gt;NoSQL&lt;/a&gt; :D ... Hace unos dias comentaba como &lt;a href="http://blog.jam.net.ve/2011/01/03/instalando-mongodb-en-ubuntu/"&gt;instalar MongoDB en Ubuntu 10.10&lt;/a&gt;, ahora veremos algunos usos basicos de la consola de administracion que incluye MongoDB para almacenar informacion, hacer algunas consultas entre otras tareas administrativas.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/ZgBVN"&gt;&lt;img src="http://i.imgur.com/ZgBVNl.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para acceder a la consola administrativa de MongoDB tan solo debemos escribir en la teminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;mongo
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;esto nos devolvera:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;MongoDB shell version: 1.6.5
connecting to: &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Al hacer esto ejecutaremos la consola de MongoDB la cual por defecto intenta conectarse a la instancia MongoDB local (en tu PC) por lo que conviene tener MongoDB ejecutandoce con anterioridad. Cuando arrancamos la consola de esta manera y sin parametros, la misma se conecta a una base de datos llamada "&lt;strong&gt;test&lt;/strong&gt;" en la que podemos hacer nustras primeras pruebas, esto lo podemos comprobar ejecutando el siguiente comando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;db
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;lo cual nos devolvera el nombre de la base de datos en la qeu estamos la cual es &lt;strong&gt;test&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creando/Usando una base de datos&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Para crear la nueva base de datos llamada "pruebas" tan solo debemos escribir el siguiente comando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;use pruebas
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;esto nos devolvera algo como:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&amp;gt; use pruebas
switched to db pruebas
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Este comando creara la base de datos "pruebas" y nos movera hacia ella, una detalle en este comando es que si por ejemplo la base de datos ya existe, tan solo nos mueve hacia ella para poder usarla, en caso de no existir la base de dato, el sistema la crea.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creando Colecciones e insertando documentos:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Como les comentaba en el articulo "&lt;a href="http://blog.jam.net.ve/2011/01/03/instalando-mongodb-en-ubuntu/"&gt;instalando MongoDB en Ubuntu&lt;/a&gt;"  MongoDB es una base de datos del tipo documentos en la que almacena dichos  documentos en una especie de agrupaciones conocidas como colecciones, estas colecciones vendrian siendo algo asi como las tablas en MySQL.&lt;/p&gt;

&lt;p&gt;Para crear una coleccion llamada "&lt;strong&gt;prueba01&lt;/strong&gt;" y y almacenar documentos en ella podemos usar el siguiente comando de ejemplo:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;db.prueba01.insert&lt;span class="o"&gt;({&lt;/span&gt;titulo: &lt;span class="s2"&gt;&amp;quot;Primera prueba&amp;quot;&lt;/span&gt;, contenido: &lt;span class="s2"&gt;&amp;quot;Mi primera prueba de insercion de un documento&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;en donde:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;prueba01&lt;/strong&gt; es el nombre de la coleccion donde se encuentra el documento.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;{titulo: "Primera prueba", contenido: "Mi primera prueba de insercion de un documento"} &lt;/strong&gt;es el documento que estamos insertando en la coleccion.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Podemos añadir mas documentos en formato JSON con campos iguales o diferentes al que  acabamos de añadir y estos seran almacenados sin ningun problema, justamente esta es una de las ventajas de las bases de datos NoSQL.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;db.prueba01.insert&lt;span class="o"&gt;({&lt;/span&gt;titulo: &lt;span class="s2"&gt;&amp;quot;Segunda prueba&amp;quot;&lt;/span&gt;, contenido: &lt;span class="s2"&gt;&amp;quot;Mi segunda prueba de insercion de un documento&amp;quot;&lt;/span&gt;, hora: &lt;span class="s2"&gt;&amp;quot;03:20 PM&amp;quot;&lt;/span&gt;, fecha: &lt;span class="s2"&gt;&amp;quot;9/01/2011&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Mostrar los documentos almacenados en una coleccion:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para ver todos los documentos almacenados en nuestra coleccion &lt;strong&gt;prueba01&lt;/strong&gt; podemos usar el siguiente comando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;db.prueba01.find&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;lo cual nos devolvera algo como esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="javascript"&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;_id&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ObjectId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;4d2a1f5f9d3ceffc299d0fad&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;titulo&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Primera prueba&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;contenido&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Mi primera prueba de insercion de un documento&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;_id&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ObjectId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;4d2a223b9d3ceffc299d0fae&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;titulo&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Segunda prueba&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;contenido&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Mi segunda prueba de insercion de un documento&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;hora&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;03:20 PM&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;fecha&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;9/01/2011&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;en nuestro caso solo hemos almacenado dos documento y esto es lo unico que nos muestra. pero si por ejemplo queremos ver solo un resultado podemos ejecutar el siguiente comando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;db.prueba01.findOne&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;el cual nos devolvera algo como:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="javascript"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="s2"&gt;&amp;quot;_id&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ObjectId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;4d2a1f5f9d3ceffc299d0fad&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
 &lt;span class="s2"&gt;&amp;quot;titulo&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Primera prueba&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="s2"&gt;&amp;quot;contenido&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Mi primera prueba de insercion de un documento&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Listando las bases de datos:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Si queremos obtener un listado de las bases de datos que estan en nuestra instancia MongoDB tan solo tecleamos:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;show dbs
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y esto nos mostrara las bases de datos que tenemos... en nuestro caso puede devolvernos:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&amp;gt; show dbs
admin
&lt;span class="nb"&gt;local&lt;/span&gt;
pruebas
&lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Listando las colecciones en una base de datos:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para obtener un listado de las colecciones almacenadas en la base de datos en la que nos encontramos podemos teclear:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;show collections
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;el cual nos devolvera&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&amp;gt;show collections
perros
prueba01
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Consultas "super basicas":&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;usando el comando &lt;strong&gt;db.prueba01.find()&lt;/strong&gt; podemos realizar una consulta sencilla pasandole al metodo &lt;strong&gt;find()&lt;/strong&gt; un parametro el cual sera un documento, este documento sera una especie de ejemplo de lo que queremos que sea buscado. Por ejemplo si queremos que se nos muestre el documento en donde esta contenida la Key/Value &lt;strong&gt;"hora" : "03:20 PM"&lt;/strong&gt; podemos pasarle eso mismo como documento:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;db.prueba01.find&lt;span class="o"&gt;({&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;hora&amp;quot;&lt;/span&gt; : &lt;span class="s2"&gt;&amp;quot;03:20 PM&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;esto nos devolvera el segundo documento que añadimos hace un rato y en el cual contiene el campo hora : 03:20 PM:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="javascript"&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prueba01&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;find&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;hora&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;03:20 PM&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;_id&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ObjectId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;4d2a223b9d3ceffc299d0fae&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;titulo&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Segunda prueba&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;contenido&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Mi segunda prueba de insercion de un documento&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;hora&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;03:20 PM&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;fecha&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;9/01/2011&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Por supuesto, esta es una consulta super basica, MongoDB incluye muchas maneras de realizar consultas de este tipo (pasando un documento JSON como parametro), pero uno de los metodos mas potentes es usando funciones &lt;strong&gt;Map/Reduce&lt;/strong&gt; un tanto parecido a como se hace en CouchDB.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Eliminando documentos:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para eliminar un documento podemos realizarlo de manera similar a como hicimos la consulta anterior, es decir pasar un documento JSON como parametro a una funcion, solo que en este caso la funcion se llama &lt;strong&gt;remove()&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;db.prueba01.remove&lt;span class="o"&gt;({&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;hora&amp;quot;&lt;/span&gt; : &lt;span class="s2"&gt;&amp;quot;03:20 PM&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Este comando nos elimino el documento que contenia el campo "hora" : "03:20 PM" de la coleccion. prueba a realizar la consulta anterior y veras que ya no aparece dicho documento en la coleccion.&lt;/p&gt;

&lt;p&gt;Por supuesto MongoDB y su consola interactiva tiene muchas otras caracteristicas y funciones que requeririan un libro entero para ser explicada en detalle.&lt;/p&gt;

&lt;p&gt;como complemento podemos usar el comando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nb"&gt;help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;para visualizar un listado de comandos que podemos usar en la consola MongoDB.&lt;/p&gt;

&lt;p&gt;Si deseas aprender mas sobre MongoDB visita:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.mongodb.org/display/DOCSES/Vistazo+a+la+consola+interactiva+MongoDB"&gt;Vistaso a la consola interactiva MongoDB&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.mongodb.org/display/DOCSES/Operaciones+DBA+desde+la+consola"&gt;Operaciones DBA desde la consola&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.mongodb.org/display/DOCSES/Referencia+de+la+consola+%28dbshell%29"&gt;Referencias de la consola.&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.mongodb.org/display/DOCSES/Consultar"&gt;Consultas.&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vu_bpMRg8SNyKIZAMt3QZuMviYY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vu_bpMRg8SNyKIZAMt3QZuMviYY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vu_bpMRg8SNyKIZAMt3QZuMviYY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vu_bpMRg8SNyKIZAMt3QZuMviYY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=JGmJRLVYNYE:HPTc5JtaASE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=JGmJRLVYNYE:HPTc5JtaASE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=JGmJRLVYNYE:HPTc5JtaASE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=JGmJRLVYNYE:HPTc5JtaASE:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=JGmJRLVYNYE:HPTc5JtaASE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=JGmJRLVYNYE:HPTc5JtaASE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=JGmJRLVYNYE:HPTc5JtaASE:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=JGmJRLVYNYE:HPTc5JtaASE:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=JGmJRLVYNYE:HPTc5JtaASE:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=JGmJRLVYNYE:HPTc5JtaASE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=JGmJRLVYNYE:HPTc5JtaASE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=JGmJRLVYNYE:HPTc5JtaASE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=JGmJRLVYNYE:HPTc5JtaASE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=JGmJRLVYNYE:HPTc5JtaASE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=JGmJRLVYNYE:HPTc5JtaASE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=JGmJRLVYNYE:HPTc5JtaASE:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=JGmJRLVYNYE:HPTc5JtaASE:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/JGmJRLVYNYE" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2011/01/09/usos-basicos-de-mongodb-console</feedburner:origLink></entry>
 
 <entry>
   <title>Instalando Nginx con soporte PHP5 en Ubuntu.</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/4zSG1YfdTm4/instalando-nginx-con-soporte-php5-en-ubuntu" />
   <updated>2011-01-04T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2011/01/04/instalando-nginx-con-soporte-php5-en-ubuntu</id>
   <content type="html">&lt;p&gt;Hace unos meses atras escribi un articulo en el que explicaba como &lt;a href="http://blog.jam.net.ve/2010/02/16/instalando-nginx-en-centos/"&gt;Instalar Nginx en CentOS&lt;/a&gt;,  en aquellos tiempos tenia el servidor dedicado con CentOS en el que hacia las pruebas.  Ahora les paso a explicar como instalar el servicio web &lt;a href="http://nginx.org/"&gt;Nginx&lt;/a&gt; con soporte para PHP5 (a travez de &lt;a href="http://php-fpm.org/"&gt;PHP-FPM&lt;/a&gt; - Administrador de procesos FastCGI ) en &lt;a href="http://blog.jam.net.ve/category/ubuntu/"&gt;Ubuntu&lt;/a&gt; 10.10 y asi tener un servidor web local para hacer pruebas con PHP, instalar algun CMS, instalar alguna interfaz de administracion para &lt;a href="http://blog.jam.net.ve/tag/mongodb/"&gt;MongoDB&lt;/a&gt; :P , etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/hn3A1"&gt;&lt;img src="http://i.imgur.com/hn3A1.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para esto lo primero que debemos hacer es instalar Nginx tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo aptitude install nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;con esto tendremos el servidor web Nginx instalado y funcionando en Ubuntu. Lo podemos comprobar escribiendo en el navegador:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;http://localhost
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Es probable que veas un mensaje &lt;strong&gt;404 Not Found &lt;/strong&gt;y esto es porque en Ubuntu 10.10 el directorio raiz de Nginx por defecto es &lt;strong&gt;/var/www &lt;/strong&gt;y alli no hay ningun &lt;strong&gt;index.html&lt;/strong&gt;, sino que esta en &lt;strong&gt;/var/www/nginx-default&lt;/strong&gt; .  Para solucionar esto copia el contenido de este ultimo directorio en &lt;strong&gt;/var/www&lt;/strong&gt; y entra de nuevo en &lt;strong&gt;http://localhost&lt;/strong&gt; Ahora si veras la pagina de Bienvenida de Nginx.&lt;/p&gt;

&lt;p&gt;Ahora debemos instalar PHP5, PHP5-FPM y algunos extras, mas para esto teclamos en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo aptitude install php5-cgi php5-fpm php5-dev php5-curl php5-cli php5-imagick php5-sqlite php-pear
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Con esto ya deberiamos tener instalado PHP5 y ejecutandose PHP5-FPM (PHP5 sobre FastCGI).&lt;/p&gt;

&lt;p&gt;Ahora nos queda configurar un poco Nginx para que pueda dar soporte PHP sobre FastCGI&lt;/p&gt;

&lt;p&gt;Para esto debemos abrir el archivo de configuracion de sitios en Nginx y modificarlo un poco, lo abrimos con Vim teclando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo vim /etc/nginx/sites-available/default
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y lo modificamos para que se vea como esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="apache"&gt;&lt;span class="c"&gt;# You may add here your&lt;/span&gt;
&lt;span class="c"&gt;# server {&lt;/span&gt;
&lt;span class="c"&gt;#    ...&lt;/span&gt;
&lt;span class="c"&gt;# }&lt;/span&gt;
&lt;span class="c"&gt;# statements for each of your virtual hosts&lt;/span&gt;

&lt;span class="nb"&gt;server&lt;/span&gt; {

 &lt;span class="nb"&gt;listen&lt;/span&gt;   &lt;span class="m"&gt;80&lt;/span&gt;; ## listen for ipv4
 &lt;span class="nb"&gt;listen&lt;/span&gt;   [::]:80 default ipv6only=on; ## listen for ipv6

 &lt;span class="err"&gt;server_&lt;/span&gt;&lt;span class="nb"&gt;name&lt;/span&gt;  localhost;

 &lt;span class="err"&gt;access_&lt;/span&gt;&lt;span class="nb"&gt;log&lt;/span&gt;  &lt;span class="sx"&gt;/var/log/nginx/localhost.access.log&lt;/span&gt;;

 &lt;span class="nb"&gt;location&lt;/span&gt; / {
 &lt;span class="nb"&gt;root&lt;/span&gt;   &lt;span class="sx"&gt;/var/www&lt;/span&gt;;
 &lt;span class="nb"&gt;index&lt;/span&gt;  index.php index.html index.htm;
 &lt;span class="err"&gt;}&lt;/span&gt;

 &lt;span class="nb"&gt;location&lt;/span&gt; &lt;span class="sx"&gt;/doc&lt;/span&gt; {
 &lt;span class="nb"&gt;root&lt;/span&gt;   &lt;span class="sx"&gt;/usr/share&lt;/span&gt;;
 &lt;span class="nb"&gt;autoindex&lt;/span&gt; &lt;span class="k"&gt;on&lt;/span&gt;;
 &lt;span class="nb"&gt;allow&lt;/span&gt; &lt;span class="m"&gt;127.0.0.1&lt;/span&gt;;
 &lt;span class="nb"&gt;deny&lt;/span&gt; &lt;span class="k"&gt;all&lt;/span&gt;;
 &lt;span class="err"&gt;}&lt;/span&gt;

 &lt;span class="nb"&gt;location&lt;/span&gt; &lt;span class="sx"&gt;/images&lt;/span&gt; {
 &lt;span class="nb"&gt;root&lt;/span&gt;   &lt;span class="sx"&gt;/usr/share&lt;/span&gt;;
 &lt;span class="nb"&gt;autoindex&lt;/span&gt; &lt;span class="k"&gt;on&lt;/span&gt;;
 &lt;span class="err"&gt;}&lt;/span&gt;

 &lt;span class="c"&gt;#error_page  404  /404.html;&lt;/span&gt;

 &lt;span class="c"&gt;# redirect server error pages to the static page /50x.html&lt;/span&gt;
 &lt;span class="c"&gt;#&lt;/span&gt;
 &lt;span class="c"&gt;#error_page   500 502 503 504  /50x.html;&lt;/span&gt;
 &lt;span class="nb"&gt;location&lt;/span&gt; = &lt;span class="sx"&gt;/50x.html&lt;/span&gt; {
 &lt;span class="nb"&gt;root&lt;/span&gt;   &lt;span class="sx"&gt;/var/www&lt;/span&gt;;
 &lt;span class="err"&gt;}&lt;/span&gt;

 &lt;span class="c"&gt;# proxy the PHP scripts to Apache listening on 127.0.0.1:80&lt;/span&gt;
 &lt;span class="c"&gt;#&lt;/span&gt;
 &lt;span class="c"&gt;#location ~ \.php$ {&lt;/span&gt;
 &lt;span class="c"&gt;#proxy_pass   http://127.0.0.1;&lt;/span&gt;
 &lt;span class="c"&gt;#}&lt;/span&gt;

 &lt;span class="c"&gt;# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000&lt;/span&gt;
 &lt;span class="c"&gt;#&lt;/span&gt;
 &lt;span class="nb"&gt;location&lt;/span&gt; ~ \.php$ {
 &lt;span class="err"&gt;fastcgi_&lt;/span&gt;&lt;span class="nb"&gt;pass&lt;/span&gt;   &lt;span class="m"&gt;127.0.0.1&lt;/span&gt;:9000;
 &lt;span class="err"&gt;fastcgi_&lt;/span&gt;&lt;span class="nb"&gt;index&lt;/span&gt;  index.php;
 &lt;span class="err"&gt;fastcgi_&lt;/span&gt;&lt;span class="nb"&gt;param&lt;/span&gt;  SCRIPT_FILENAME  &lt;span class="sx"&gt;/var/www&lt;/span&gt;$fastcgi_script_name;
 &lt;span class="nb"&gt;include&lt;/span&gt; fastcgi_params;
 &lt;span class="err"&gt;}&lt;/span&gt;

 &lt;span class="c"&gt;# deny access to .htaccess files, if Apache&amp;#39;s document root&lt;/span&gt;
 &lt;span class="c"&gt;# concurs with nginx&amp;#39;s one&lt;/span&gt;
 &lt;span class="c"&gt;#&lt;/span&gt;
 &lt;span class="nb"&gt;location&lt;/span&gt; ~ /\.ht {
 &lt;span class="nb"&gt;deny&lt;/span&gt;  &lt;span class="k"&gt;all&lt;/span&gt;;
 &lt;span class="err"&gt;}&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;La parte mas importante de todo es el bloque &lt;strong&gt;location ~ .php$&lt;/strong&gt; ...  en el que se especifica como Nginx va a trabajar con FastCGI.&lt;/p&gt;

&lt;p&gt;Una vez realizado esto reiniciamos Nginx con:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo service nginx restart
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Para comprobar que Nginx trabaja perfectamente con PHP5 nos vamos al directorio /var/www y con nano agregamos  el archivo info.php:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo vim info.php
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;en dicho archivo agregamos lo siguiente:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="php"&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; 
    &lt;span class="nb"&gt;phpinfo&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Lo guardamos, cerramos y en el navegador escribimos:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;http://localhost/info.php
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;si todo a ido bien veremos algo como esto:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/RBYxA"&gt;&lt;img src="http://i.imgur.com/RBYxAl.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bien ya tienes instalado Nginx con soporte PHP5 mediante FastCGI (php5-fpm) :P&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TNiFdJtIYqh9yAwrBlasoBsHx9M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TNiFdJtIYqh9yAwrBlasoBsHx9M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TNiFdJtIYqh9yAwrBlasoBsHx9M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TNiFdJtIYqh9yAwrBlasoBsHx9M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=4zSG1YfdTm4:AuRo2Jq1Rx0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=4zSG1YfdTm4:AuRo2Jq1Rx0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=4zSG1YfdTm4:AuRo2Jq1Rx0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=4zSG1YfdTm4:AuRo2Jq1Rx0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=4zSG1YfdTm4:AuRo2Jq1Rx0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=4zSG1YfdTm4:AuRo2Jq1Rx0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=4zSG1YfdTm4:AuRo2Jq1Rx0:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=4zSG1YfdTm4:AuRo2Jq1Rx0:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=4zSG1YfdTm4:AuRo2Jq1Rx0:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=4zSG1YfdTm4:AuRo2Jq1Rx0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=4zSG1YfdTm4:AuRo2Jq1Rx0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=4zSG1YfdTm4:AuRo2Jq1Rx0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=4zSG1YfdTm4:AuRo2Jq1Rx0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=4zSG1YfdTm4:AuRo2Jq1Rx0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=4zSG1YfdTm4:AuRo2Jq1Rx0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=4zSG1YfdTm4:AuRo2Jq1Rx0:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=4zSG1YfdTm4:AuRo2Jq1Rx0:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/4zSG1YfdTm4" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2011/01/04/instalando-nginx-con-soporte-php5-en-ubuntu</feedburner:origLink></entry>
 
 <entry>
   <title>Instalando MongoDB en Ubuntu</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/VtDq4PISrkc/instalando-mongodb-en-ubuntu" />
   <updated>2011-01-03T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2011/01/03/instalando-mongodb-en-ubuntu</id>
   <content type="html">&lt;p&gt;Despues de unos cuantos articulos dedicados a la Base de Datos &lt;a href="http://blog.jam.net.ve/category/nosql/"&gt;NoSQL&lt;/a&gt; &lt;a href="http://blog.jam.net.ve/tag/couchdb/"&gt;CouchDB&lt;/a&gt; pasare a comentarles algunas pruebas que e realizado usando MongoDB&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/ZgBVN"&gt;&lt;img src="http://i.imgur.com/ZgBVNl.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.mongodb.org"&gt;MongoDB&lt;/a&gt; es otro de los sistemas de bases de datos NoSQL, similar a CouchDB que a tenido mayor popularidad, este sistema de base de datos algunos los llaman "La MySQL de las NoSQL" y esto es porque a parte de tener la aceptacion y popularidad que tubo MySQL en sus inicios, MongoDB comparte muchas caracteristicas que son similares a las ya vistas en MySQL pero orientada a el movimiento NoSQL.  Una de estas caracteristicas por ejemplo es que en MongoDB no existen Tablas (claro es una NoQSL) pero si existen Colecciones las cuales podrian ser algo asi como las tablas, solo que estas no se rigen por ningun esquema predefinido  y cualquier coleccion puede contener muchos documentos  con distintos campos. Esto es algo que en lo personal me a gustado mucho en MongoDb ya que ayudan a organizar y clasificar mejor la informacion almacenada ademas de facilitar las consultas y agilizar las mismas.&lt;/p&gt;

&lt;p&gt;MongoDB es tambien una base de datos NoSQL orientada a documentos, por lo que estos documentos son muy similares a los ya vistos en CouchDB en formato JSON, pero añadiendo algunos tipos de datos adicionales como date, object id, binary data, code, etc. Se dice (nolo e comprobado todavia) que MongoDB ofrece un rendimiento en inserciones mucho mayor que CouchDB y un poco mejor que MySQL a cosa de sacrificar caracteristicas como las transacciones. MongoDB a diferencia de CouchDB no incluye una interfaz web para administrar nuestros documentos e informacion, en su lugar nos ofrece una Shell para manejar desde ella la instancia de manera muy similar a la shell en MySQL.  Pero al igual que como hacemos con MySQL podemos instalar alguna interfaz de administracion web para administrar. Lo que si podemos encontrar en MongoDB  es una interfaz de administracion para monitorear la instancia y en la que podemos observar informaciones basicas del servidor MongoDB, esta interfaz la podemos encontrar en:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;http://localhost:28017
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Un ejemplo de documento en MongoDB seria algo como esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="javascript"&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;_id&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ObjectId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;4d2219e103a143a4cd4b1205&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;nombre&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Angel&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;nick&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;JamUnix&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;web&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;www.jam.net.ve&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Para instalar MongoDB en &lt;a href="http://blog.jam.net.ve/tag/ubuntu/"&gt;Ubuntu&lt;/a&gt; 10.10 debemos agregar su respectivo repositorio en nuestro sources.list, para ello usaremos nuestro editor favorito y agregaremos el repo respectivo a la distribucion que usemos:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo nano /etc/apt/sources.list
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y agregamos el repo correspondiente a Ubuntu 10.10 el cual es:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;deb http://downloads.mongodb.org/distros/ubuntu 10.10 10gen
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; Si usas otra version de Ubuntu revisa el &lt;a href="http://www.mongodb.org/display/DOCS/Ubuntu+and+Debian+packages"&gt;listado de repos disponibles.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Luego de esto debemos agregar la llave GPG del repo:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;ahora tan solo actualizamos el listado de paquetes con:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo aptitude update
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Instalamos MongoDB con:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo aptitude install mongodb-stable
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Con esto tendremos MongoDB instalado y ejecutandose en nuestra PC :D&lt;/p&gt;

&lt;p&gt;Si deseas aprender mas acerca de MongoDB puedes visitar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.mongodb.org/display/DOCSES/Inicio"&gt;Documentacion Oficial en Español&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Articulo: &lt;a href="http://4tic.com/es/blog/40-blgo/69-mongodb-la-mysql-del-nosql"&gt;MongoDB La MySQL de las NoSQL&lt;/a&gt; en 4tic.com&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Proximamente publicare mas articulos en los que explicare algunos usos basicos de la Shell de MongoDB, como podemos instalarnos alguna interfaz de administracion web y como podriamos crear una aplicacion en Python que almacene datos en MongoDB :P&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hIqHAuURt93863F20qkMrm0MmIo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hIqHAuURt93863F20qkMrm0MmIo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hIqHAuURt93863F20qkMrm0MmIo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hIqHAuURt93863F20qkMrm0MmIo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VtDq4PISrkc:TR7FqSGKnJA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VtDq4PISrkc:TR7FqSGKnJA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VtDq4PISrkc:TR7FqSGKnJA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VtDq4PISrkc:TR7FqSGKnJA:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VtDq4PISrkc:TR7FqSGKnJA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=VtDq4PISrkc:TR7FqSGKnJA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VtDq4PISrkc:TR7FqSGKnJA:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VtDq4PISrkc:TR7FqSGKnJA:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=VtDq4PISrkc:TR7FqSGKnJA:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VtDq4PISrkc:TR7FqSGKnJA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VtDq4PISrkc:TR7FqSGKnJA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=VtDq4PISrkc:TR7FqSGKnJA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VtDq4PISrkc:TR7FqSGKnJA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VtDq4PISrkc:TR7FqSGKnJA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=VtDq4PISrkc:TR7FqSGKnJA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VtDq4PISrkc:TR7FqSGKnJA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=VtDq4PISrkc:TR7FqSGKnJA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/VtDq4PISrkc" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2011/01/03/instalando-mongodb-en-ubuntu</feedburner:origLink></entry>
 
 <entry>
   <title>Ejemplos de vistas/consultas en CouchDB</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/GSCAZ95_5w4/ejemplos-de-vistasconsultas-en-couchdb" />
   <updated>2010-12-26T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2010/12/26/ejemplos-de-vistasconsultas-en-couchdb</id>
   <content type="html">&lt;p&gt;Continuando con mis practicas y articulos sobre CouchDB traigo ahora algunos ejemplos de vistas/consultas para mostrar nuestros datos almacenados, recordemos que en CouchDB las vistas se crean usando funciones escritas en el lenguaje JavaScript, aunque se puede usar otros lenguajes como Ruby, Python, etc mediante plugins.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/EUNoH"&gt;&lt;img src="http://i.imgur.com/EUNoH.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Las vistas que crearemos a continuacion sera para consultar y organizar los datos almacenados por la &lt;a href="http://blog.jam.net.ve/2010/12/23/programando-una-aplicacion-de-registrodetransferencias-en-python-y-couchdb/"&gt;aplicacion RegistroDeTransferencias&lt;/a&gt; la cual explique hace unos dias, por lo que recomiendo que primero sigas dicho articulo antes de continuar para que asi no estes tan perdido.&lt;/p&gt;

&lt;p&gt;Como comentaba anteriormente cuando programaba la &lt;a href="http://blog.jam.net.ve/2010/12/23/programando-una-aplicacion-de-registrodetransferencias-en-python-y-couchdb/"&gt;aplicacion de RegistroDeTransferencias&lt;/a&gt;, la misma almacenaba en CouchDB los datos de &lt;strong&gt;subida&lt;/strong&gt; y &lt;strong&gt;bajada&lt;/strong&gt; transferidos durante una sesion, ademas de almacenar tambien la &lt;strong&gt;fecha&lt;/strong&gt; y &lt;strong&gt;hora&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Para crear vistas en CouchDB primero debemos ingresar en Futon, seleccionar nuestra base de datos y luego en el listbox "&lt;strong&gt;View&lt;/strong&gt;" de la parte superior derecha seleccionar "&lt;strong&gt;Temporary view...&lt;/strong&gt;"  Una vez alli veremos una seccion llamada "&lt;strong&gt;View Code&lt;/strong&gt;" la cual contiene dos cajas de textos, una llamada "&lt;strong&gt;Map Function&lt;/strong&gt;" en donde escribiremos la mayoria de nuestras funciones Map para crear vistas, y otra caja de texto llamada "&lt;strong&gt;Reduce Function&lt;/strong&gt;" en donde podremos escribir funciones Reduce que filtren, realicen operaciones u organicen mejor los datos seleccionados por las funciones Map, Estas funciones Reduce son opcionales y no son estrictamente necesarias a menos que algun caso especial las requiera. si te fijas bien ya esta escrito una funcion en la caja de texto Map, esta es uan funcion de ejemplo muy basica que luego de presionar el boton "&lt;strong&gt;Run&lt;/strong&gt;" nos mostrara en el campo "&lt;strong&gt;Value&lt;/strong&gt;" todos los documentos en la base de datos&lt;/p&gt;

&lt;p&gt;Una vista sencilla que podriamos programar podria ser por ejemplo aquella en la que me muestre todos los registros de &lt;strong&gt;bajada&lt;/strong&gt; organizado por &lt;strong&gt;fecha&lt;/strong&gt; y &lt;strong&gt;hora&lt;/strong&gt;. Esta vista la podriamos hacer escribiendo lo siguiente en el textbox de las funciones Map:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="javascript"&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nx"&gt;emit&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fecha_agregado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hora_agregado&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bajada&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Esta funcion nos devolvera algo como esto:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/lrc6l"&gt;&lt;img src="http://i.imgur.com/lrc6ll.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como podemos ver, en el campo Key (llave) nos muestra la fecha y hora en la que se tomo el documento y en el campo Value (valor) nos muestra los datos de &lt;strong&gt;bajada&lt;/strong&gt; para cada documento en la base de datos. de forma similar podemos crear una vista para mostrar los valores de &lt;strong&gt;subida&lt;/strong&gt;. Esta funcion nos sirve por ejemplo para ver cuantos datos nos descargamos en X dia.&lt;/p&gt;

&lt;p&gt;Una de las bellezas de CouchDB es que estas vistas podemos almacenarlas en la misma base de datos para asi consultarla cuando lo queramos sin necesidad de volver a escribir la misma funcion :D esto lo hacemos haciendo click en el boton "&lt;strong&gt;Save As...&lt;/strong&gt;" y en "&lt;strong&gt;Desing document:&lt;/strong&gt;" colocamos un nombre cualquiera que nos identifique el uso de esas consultas (algo asi como una categoria de consultas), por ejemplo: "&lt;strong&gt;vista_subida-bajada&lt;/strong&gt;" y en "&lt;strong&gt;View Name:&lt;/strong&gt;" colocamos el nombre de la vista que acabamos de escribir, por ejemplo: "&lt;strong&gt;bajada&lt;/strong&gt;".&lt;/p&gt;

&lt;p&gt;Otro ejemplo de vistas que podemos crear es una en la que por ejemplo muestre unicamente los datos de subida (en el campo Key) y bajada (en el campo Value), esta vista la podriamos ver escribiendo lo siguiente en el campo Map Function:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="javascript"&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nx"&gt;emit&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;Subida&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;subida&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Bajada&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bajada&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Esto nos devolvera algo como:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/kDt7I"&gt;&lt;img src="http://i.imgur.com/kDt7Il.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como podemos ver se le a agregado la leyenda Subida y Bajada junto a los datos de subida y bajada para asi identificarlos mejor.&lt;/p&gt;

&lt;p&gt;Bien hasta ahora hemos usado dos sencillas funciones Map pero ninguna combinada con una funcione Reduce, bien es hora de ver como son estas fuciones y un ejemplo de uso de las mismas. :D&lt;/p&gt;

&lt;p&gt;Una vista que podriamos escribir usando funciones Map y Reduce podria ser aquella en la que nos muestre el valor total de datos de bajada, esto se haria por ejemplo selecionando todos los documentos con la llave bajada y luego haciendo una sumatoria de sus valores, la funcion &lt;strong&gt;Map&lt;/strong&gt; seria algo como esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="javascript"&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nx"&gt;emit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;bajada&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bajada&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y la funcion Reduce seria algo como esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="javascript"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;rereduce&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Esto nos mostrara algo como esto:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/tMWkk"&gt;&lt;img src="http://i.imgur.com/tMWkkl.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como vemos solo nos devuelve una sola fila con la leyenda Bajada en el campo Key y en el campo Value nos muestra la suma total de los datos de &lt;strong&gt;bajada&lt;/strong&gt;; 2.498Mb :O y mi plan es de 3000Mb estoy casi qeu sin internet :( LOL.&lt;/p&gt;

&lt;p&gt;Este mismo ejemplo podemos usarlo para calcular el consumo total de &lt;strong&gt;subida&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Por ultimo podriamos hacer una modificacion a la ultima funcion para mostrar y calcular de una sola vez y en una misma vista los datos tanto de subida como de bajada :P&lt;/p&gt;

&lt;p&gt;la funcion Map seria algo como esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="javascript"&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nx"&gt;emit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;subida&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;subida&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;emit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;bajada&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bajada&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Y la funcion Reduce seria algo como:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="javascript"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;rereduce&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Esto nos mostrara algo como:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/8fOzE"&gt;&lt;img src="http://i.imgur.com/8fOzEl.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como podemos observar esto nos mostrara dos filas en la que vemos el total de datos de &lt;strong&gt;subida&lt;/strong&gt; como el total de datos de &lt;strong&gt;bajada &lt;/strong&gt;en el campo Value ademas de su respectiva leyenda en el campo Key.&lt;/p&gt;

&lt;p&gt;Bien esto es todo por el momento pero no es para nada complejo ya que estas mismas vistas las podemos usar desde la aplicacion RegistroDeTransferencia para que sea desde ella misma donde hagamos las consultas previamente creadas y asi no tener que estar visitando Futon cada vez que queramos ver y consultar nuestra informacion en la base de datos, pero eso es algo en lo que estoy practicando y aprendiendo asi que por lo tanto se los muestrare en otra ocasion :D&lt;/p&gt;

&lt;p&gt;Saludos&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ny9s_eiWUvlFaHdEW4tjyzLyqOc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ny9s_eiWUvlFaHdEW4tjyzLyqOc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ny9s_eiWUvlFaHdEW4tjyzLyqOc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ny9s_eiWUvlFaHdEW4tjyzLyqOc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GSCAZ95_5w4:lsWsh_ThN2g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GSCAZ95_5w4:lsWsh_ThN2g:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GSCAZ95_5w4:lsWsh_ThN2g:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GSCAZ95_5w4:lsWsh_ThN2g:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GSCAZ95_5w4:lsWsh_ThN2g:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=GSCAZ95_5w4:lsWsh_ThN2g:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GSCAZ95_5w4:lsWsh_ThN2g:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GSCAZ95_5w4:lsWsh_ThN2g:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=GSCAZ95_5w4:lsWsh_ThN2g:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GSCAZ95_5w4:lsWsh_ThN2g:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GSCAZ95_5w4:lsWsh_ThN2g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=GSCAZ95_5w4:lsWsh_ThN2g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GSCAZ95_5w4:lsWsh_ThN2g:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GSCAZ95_5w4:lsWsh_ThN2g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=GSCAZ95_5w4:lsWsh_ThN2g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GSCAZ95_5w4:lsWsh_ThN2g:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=GSCAZ95_5w4:lsWsh_ThN2g:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/GSCAZ95_5w4" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2010/12/26/ejemplos-de-vistasconsultas-en-couchdb</feedburner:origLink></entry>
 
 <entry>
   <title>Programando una aplicacion de RegistroDeTransferencias en Python y CouchDB</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/zTtnaUA_qgc/programando-una-aplicacion-de-registrodetransferencias-en-python-y-couchdb" />
   <updated>2010-12-23T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2010/12/23/programando-una-aplicacion-de-registrodetransferencias-en-python-y-couchdb</id>
   <content type="html">&lt;p&gt;Una de las ventajas de ser programador es que puedes escribir uno mismo sus aplicaciones para resolver un problema determinado que se tenga, y pues yo tenia un problema :D . Resulta que mi unica conexion a internet es mediante un Modem USB, estos modem vienen con un software que solo funciona bajo Windows (algunos funcionan en MacOS) que te permite llevar un registro de las transferencias de datos consumidas y asi saber cuando estas a punto de consumirte tu cuota mensual de datos. Pues como solo uso &lt;a href="http://blog.jam.net.ve/category/linux/"&gt;Linux&lt;/a&gt; estos registros los llevava era en notas (tomboy) escribiendo los datos de subida y bajada que consumia despues de desconectarme.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/EUNoH"&gt;&lt;img src="http://i.imgur.com/EUNoH.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Este metodo que usaba me era un tanto engorroso y no era muy fiable ya que mas de una vez perdi algunas notas o las borraba accidentalmente. Luego de aprender las funciones mas basicas de CouchDB, Python y Couchdbkit se me ocurrio escribir una aplicacion de consola que me facilite el registro de mis transferencias y que los almacene en un entorno confiable.&lt;/p&gt;

&lt;p&gt;Ya les e comentado &lt;a href="http://blog.jam.net.ve/2010/12/12/instalando-couchdb-en-ubuntu/"&gt;como instalar CouchDB en Ubuntu&lt;/a&gt; y tambien como &lt;a href="http://blog.jam.net.ve/2010/12/13/instalando-couchdbkit-y-almacenando-datos-en-couchdb-desde-python"&gt;instalar Couchdbkit y programar la primera aplicacion basica&lt;/a&gt;, por lo que  si todavia no has instalado Couchdb y/o no tienes instalado Couchdbkit deberas pasar por estos articulos antes de continuar.&lt;/p&gt;

&lt;p&gt;Como les decia, esta aplicacion de &lt;strong&gt;RegistroDeTransferencias&lt;/strong&gt; es super basica y no es nada del otro mundo programarla. Al igual que la aplicacion anterior de Lista de Contactos  esta estara escrita en Python y usara el framework Couchdbkit para gestionar la conexion con la base de datos CouchDB.&lt;/p&gt;

&lt;p&gt;Esta aplicacion que se ejecuta desde la terminal solicitara los datos de subida y bajada transferidos (en Mb), luego los mostrara para verificar que sean correctos y luego tras confirmar se almacenaran en CouchDB.  Al verificar en Futon (la interfaz de Administracion web de couchdb) los documentos creados ademas de ver los datos de subida y bajada previamente introducidos, veremos la fecha y hora en la que se almaceno ese documento. Estos dos ultimos datos se obtienen automaticamente desde la PC usando los modulos time y datetime de Python.  Esta aplicacion esta conformada por dos archivos: &lt;strong&gt;registrodetransferencias.py&lt;/strong&gt; y &lt;strong&gt;registrodetransferenciasapp.py&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El contenido de &lt;strong&gt;registrodetransferencias.py&lt;/strong&gt; es:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;couchdbkit.schema&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Document&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;couchdbkit.schema.properties&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;registrodetransferencias&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Document&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="n"&gt;subida&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FloatProperty&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;bajada&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FloatProperty&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;fecha_agregado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StringProperty&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;hora_agregado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StringProperty&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Y el Contenido de &lt;strong&gt;registrodetransferenciasapp.py&lt;/strong&gt; es:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="c"&gt;#Importando los modulos necesarios&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;registrodetransferencias&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;registrodetransferencias&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;couchdbkit&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;time&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Conectando al Servidor de Base de Datos...&amp;quot;&lt;/span&gt;
&lt;span class="c"&gt;#Creando el objeto &amp;quot;Servidor&amp;quot; y colocando los datos de conexion&lt;/span&gt;
&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://usuario:contrasena@localhost:5984&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;#Creando/Accesando a la base de dato (no tengo muy claro esto&lt;/span&gt;
&lt;span class="c"&gt;#pero al parecer el metodo se encarga de verificar que la base&lt;/span&gt;
&lt;span class="c"&gt;#de datos ya exista, si existe crea una session y se conecta&lt;/span&gt;
&lt;span class="c"&gt;#si no existe crea la base de datos.&lt;/span&gt;
&lt;span class="n"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_or_create_db&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;bdregistrodetransferencias&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;la_subida&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Introdusca la cantidad de datos Enviados: &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;la_descarga&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Introdusca la cantidad de datos Recibidos: &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Los datos ingresados son:&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Subida: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;la_subida&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Bajada: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;la_descarga&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;respuesta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Estos datos son correctos? introdusca solo (s/n): &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;respuesta&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;s&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="c"&gt;#Asocia &amp;quot;Bookmark&amp;quot; a la base de datos (NPI LOL)&lt;/span&gt;
&lt;span class="n"&gt;registrodetransferencias&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_db&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;fecha&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c"&gt;#Los datos del documento a guardar.&lt;/span&gt;
&lt;span class="n"&gt;registro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;registrodetransferencias&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="n"&gt;subida&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;la_subida&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="n"&gt;bajada&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;la_descarga&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="n"&gt;fecha_agregado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fecha&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s"&gt;-%m-%y&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="n"&gt;hora_agregado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;%I:%M %p&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Guardando el documento al Servidor CouchDB...&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;#guargando el documento&lt;/span&gt;
&lt;span class="n"&gt;registro&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;save&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Documento Guardado con EXITO!&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Cancelado!!!&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; no se mucho de programacion en Python (estoy aprendiendo) y tengo fallas en programacion orientada a objetos por lo que el programa puede contener errores o ser muy basico.&lt;/p&gt;

&lt;p&gt;Como ven, es una aplicacion sumamente sencilla y facil de hacer muy similar a lista de contactos que se hizo en articulos anteriores. esta aplicacion podria ser mejorado por ejemplo si hacemos que el mismo programa tome los valores de subida y bajada de la PC y los almacene sin necesidad de que uno mismo los introdusca (similar a como se hace con la fecha y hora), pero todavia no encuentro la manera de hacer eso :-( .&lt;/p&gt;

&lt;p&gt;Para ejecutarlo en la terminal tan solo escribimos en la misma:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;python registrodetransferenciasapp.py
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y veremos algo como esto:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/pFFp0"&gt;&lt;img src="http://i.imgur.com/pFFp0l.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Al ingresar en Futon para verificar los documentos creados veremos algo como esto:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/Q9qZ4"&gt;&lt;img src="http://i.imgur.com/Q9qZ4s.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para visualizar de una forma sencilla en Futon los datos almacenados y/o calcular el total consumido podriamos usar las funciones Map/Reduce escritas en JavaScript, pero esto se los mostrare en otro articulo proximamente. :P&lt;/p&gt;

&lt;p&gt;Si eres de los que no quieren tener una base de datos corriendo en su PC pero quieres probarla y aprender a usarla entonces estas de suerte ya que &lt;a href="http://www.couchone.com/get"&gt;CouchOne&lt;/a&gt; y &lt;a href="https://cloudant.com/"&gt;Cloudant&lt;/a&gt; ofrecen hosting Cloud de CouchDB Gratis!!! con lo que prodras tener una interfaz Futon online en donde administrar tus bases de datos.&lt;/p&gt;

&lt;p&gt;Tambien has estado probando CouchDB ??? ya has realizado una aplicacion??? cuentanos tu experiencia con CouchDB!!!&lt;/p&gt;

&lt;p&gt;Espero les sirva!!!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0ltON5kC57H7K2JFCHLZqHHYars/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0ltON5kC57H7K2JFCHLZqHHYars/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0ltON5kC57H7K2JFCHLZqHHYars/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0ltON5kC57H7K2JFCHLZqHHYars/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zTtnaUA_qgc:9F6jdL_uFi4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zTtnaUA_qgc:9F6jdL_uFi4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zTtnaUA_qgc:9F6jdL_uFi4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zTtnaUA_qgc:9F6jdL_uFi4:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zTtnaUA_qgc:9F6jdL_uFi4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=zTtnaUA_qgc:9F6jdL_uFi4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zTtnaUA_qgc:9F6jdL_uFi4:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zTtnaUA_qgc:9F6jdL_uFi4:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=zTtnaUA_qgc:9F6jdL_uFi4:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zTtnaUA_qgc:9F6jdL_uFi4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zTtnaUA_qgc:9F6jdL_uFi4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=zTtnaUA_qgc:9F6jdL_uFi4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zTtnaUA_qgc:9F6jdL_uFi4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zTtnaUA_qgc:9F6jdL_uFi4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=zTtnaUA_qgc:9F6jdL_uFi4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=zTtnaUA_qgc:9F6jdL_uFi4:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=zTtnaUA_qgc:9F6jdL_uFi4:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/zTtnaUA_qgc" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2010/12/23/programando-una-aplicacion-de-registrodetransferencias-en-python-y-couchdb</feedburner:origLink></entry>
 
 <entry>
   <title>Instalando Couchdbkit y almacenando datos en CouchDB desde Python</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/CuTKRofhd4U/instalando-couchdbkit-y-almacenando-datos-en-couchdb-desde-python" />
   <updated>2010-12-13T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2010/12/13/instalando-couchdbkit-y-almacenando-datos-en-couchdb-desde-python</id>
   <content type="html">&lt;p&gt;Ayer les comentaba que tenia meses leyendo sobre CouchDB, sus usos y &lt;a href="http://blog.jam.net.ve/2010/12/12/instalando-couchdb-en-ubuntu/"&gt;como instalarlo en Ubuntu&lt;/a&gt;. Pues hoy les mostrare como instalar Couchdbkit y como crear una sencilla aplicacion de ejemplo que almacena informacion en nuestra base de datos CouchDB.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/EUNoH"&gt;&lt;img src="http://i.imgur.com/EUNoH.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para los que no saben, &lt;a href="http://couchdbkit.org/"&gt;Couchdbkit&lt;/a&gt; es un Framework que le permite a nuestras aplicaciones Python conectarse a una base de datos CouchDB.&lt;/p&gt;

&lt;p&gt;Para instalar Couchdbkit  podemos valernos de &lt;strong&gt;easy_install&lt;/strong&gt; por lo que debemos instalarlo primero (en caso que no lo tengas ya) tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;curl -O http://peak.telecommunity.com/dist/ez_setup.py
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;luego de esto tecleamos:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo python ez_setup.py -U setuptools
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y por ultimo instalamos Couchdbkit tecleando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo easy_install -U Couchdbkit
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Ya con esto tendremos instalado Couchdbkit y podremos usarlo para conectar todas nuestras aplicaciones a un sistema de base de datos NoSQL CouchDB.&lt;/p&gt;

&lt;p&gt;Bien la aplicacion de ejemplo que e realizado para demostrar como podemos usar Couchdkit junto con Python es una sencilla &lt;strong&gt;Lista de Contactos&lt;/strong&gt; que se ejecutara desde la terminal,  esta aplicacion solicitara diferentes datos de un contacto y los almacenara en una base de datos CouchDB. Esta aplicacion esta conformada por dos archivos, uno llamado &lt;strong&gt;contactos.py&lt;/strong&gt; y el otro &lt;strong&gt;contactosapp.py&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El contenido de el archivo &lt;strong&gt;contactos.py&lt;/strong&gt; es el siguiente:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;couchdbkit.schema&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Document&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;couchdbkit.schema.properties&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
 
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;contactos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Document&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
 &lt;span class="n"&gt;nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StringProperty&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
 &lt;span class="n"&gt;apellido&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StringProperty&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
 &lt;span class="n"&gt;correo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StringProperty&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
 &lt;span class="n"&gt;telefono&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StringProperty&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
 &lt;span class="n"&gt;fecha_agregado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StringProperty&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y el codigo correspondiente para contactosapp.py es el siguiente:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="c"&gt;#Importando los modulos necesarios&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;contactos&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;contactos&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;couchdbkit&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
 
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Conectando al Servidor de Base de Datos...&amp;quot;&lt;/span&gt;
&lt;span class="c"&gt;#Creando el objeto &amp;quot;Servidor&amp;quot; y colocando los datos de conexion&lt;/span&gt;
&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://usuario:contrasena@localhost:5984&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 
&lt;span class="c"&gt;#Creando/Accesando a la base de dato (no tengo muy claro esto&lt;/span&gt;
&lt;span class="c"&gt;#pero al parecer el metodo se encarga de verificar que la base&lt;/span&gt;
&lt;span class="c"&gt;#de datos ya exista, si existe crea una session y se conecta&lt;/span&gt;
&lt;span class="c"&gt;#si no existe crea la base de datos.&lt;/span&gt;
&lt;span class="n"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_or_create_db&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;listacontactos&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;#cambiar listacontactos por el nombre de tu base de datos.&lt;/span&gt;
 
&lt;span class="n"&gt;el_nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Introdusca el Nombre de su nuevo contacto: &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;el_apellido&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Introdusca el Apellido de su nuevo contacto: &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;el_correo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Introdusca el Correo de su nuevo contacto: &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;el_telefono&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Introdusca el Telefono de su nuevo contacto:&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Nombre: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;el_nombre&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Apellido: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;el_apellido&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Correo: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;el_correo&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Telefono: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;el_telefono&lt;/span&gt;
 
&lt;span class="c"&gt;#Asocia &amp;quot;Bookmark&amp;quot; a la base de datos (NPI LOL)&lt;/span&gt;
&lt;span class="n"&gt;contactos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_db&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 
&lt;span class="n"&gt;fecha&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c"&gt;#Los datos del documento a guardar.&lt;/span&gt;
&lt;span class="n"&gt;contacs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;contactos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
 &lt;span class="n"&gt;nombre&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;el_nombre&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="n"&gt;apellido&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;el_apellido&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="n"&gt;correo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;el_correo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="n"&gt;telefono&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;el_telefono&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="n"&gt;fecha_agregado&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;fecha&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s"&gt;-%m-%y&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
 
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Guardando el documento al Servidor CouchDB...&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;#guargando el documento&lt;/span&gt;
&lt;span class="n"&gt;contacs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;save&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Documento Guardado con EXITO!&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; no se mucho de programacion en Python (estoy aprendiendo) y tengo fallas en programacion orientada a objetos por lo que el programa puede contener errores o ser muy basico.&lt;/p&gt;

&lt;p&gt;estos dos archivos los podemos guardar (con extencion .py ) juntos en una carpeta y desde la terminal lo ejecutamos de este modo:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;python contactosapp.py
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;con esto te solicitara los datos del contacto (nombre, apellido, correo y telefono), generara el documento y lo almacenara en la base de datos CouchDB  :-)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/CAOhd"&gt;&lt;img src="http://i.imgur.com/CAOhdl.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aqui podemos ver la aplicacion ejecutandose... y como pueden observar es sumamente sencilla. Si ahora abrimos Futon en el navegador y observamos nuestra base de datos nos encontraremos con el documento recien almacenado que contienen los datos del contacto que acabamos de añadir:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/Ln0io"&gt;&lt;img src="http://i.imgur.com/Ln0ios.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si eres de los que no quieren tener una base de datos corriendo en su PC pero quieres probarla y aprender a usarla entonces estas de suerte ya que &lt;a href="http://www.couchone.com/get"&gt;CouchOne&lt;/a&gt; y &lt;a href="https://cloudant.com/"&gt;Coudant&lt;/a&gt; ofrecen hosting Cloud de CouchDB Gratis!!! con lo que prodras tener una interfaz Futon online en donde administrar tus bases de datos.&lt;/p&gt;

&lt;p&gt;Si quieres descargar la aplicacion de ejemplo haz click &lt;a href="http://blog.jam.net.ve/guias/democontactos.zip"&gt;Aqui!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tambien has estado probando CouchDB ??? ya has realizado una aplicacion??? cuentanos tu experiencia con CouchDB!!! :D&lt;/p&gt;

&lt;p&gt;Espero les sirva tanto como a mi...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VtFn5TO3jIDwbH6Eyh4qGFgngR0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VtFn5TO3jIDwbH6Eyh4qGFgngR0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VtFn5TO3jIDwbH6Eyh4qGFgngR0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VtFn5TO3jIDwbH6Eyh4qGFgngR0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=CuTKRofhd4U:uPQkgvbVM3g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=CuTKRofhd4U:uPQkgvbVM3g:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=CuTKRofhd4U:uPQkgvbVM3g:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=CuTKRofhd4U:uPQkgvbVM3g:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=CuTKRofhd4U:uPQkgvbVM3g:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=CuTKRofhd4U:uPQkgvbVM3g:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=CuTKRofhd4U:uPQkgvbVM3g:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=CuTKRofhd4U:uPQkgvbVM3g:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=CuTKRofhd4U:uPQkgvbVM3g:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=CuTKRofhd4U:uPQkgvbVM3g:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=CuTKRofhd4U:uPQkgvbVM3g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=CuTKRofhd4U:uPQkgvbVM3g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=CuTKRofhd4U:uPQkgvbVM3g:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=CuTKRofhd4U:uPQkgvbVM3g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=CuTKRofhd4U:uPQkgvbVM3g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=CuTKRofhd4U:uPQkgvbVM3g:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=CuTKRofhd4U:uPQkgvbVM3g:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/CuTKRofhd4U" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2010/12/13/instalando-couchdbkit-y-almacenando-datos-en-couchdb-desde-python</feedburner:origLink></entry>
 
 <entry>
   <title>Instalando CouchDB en Ubuntu</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/GRNtI1NYgEI/instalando-couchdb-en-ubuntu" />
   <updated>2010-12-12T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2010/12/12/instalando-couchdb-en-ubuntu</id>
   <content type="html">&lt;p&gt;Desde hace un mes aproximadamente e estado leyendo sobre sistemas de bases de datos del tipo &lt;a href="http://es.wikipedia.org/wiki/NoSQL"&gt;NoSQL&lt;/a&gt;, estos sistemas de bases de datos se estan poniendo de moda entre las grandes compañias que requieren alta escalabilidad y performance a bajo costo. Los sistemas de bases de datos NoSQL no son para nada similares a los sistemas de bases de datos Relacionales a los que estamos acostumbrado, en los Sistemas de Administracion de Bases de Datos Relacionales (RDBMS) se acostumbra a organizar los datos en forma de tablas las cuales contienen filas, columnas y un campo clave o ID por lo general autoincremental, ademas de que se usan esquemas de relaciones entre otras tablas.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/EUNoH"&gt;&lt;img src="http://i.imgur.com/EUNoH.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bien en los Sistemas NoSQL casi nada de esto existe, CouchDB es un sistema de bases de datos NoSQL que almacena la informacion en forma de documentos, estos documentos reflejan los datos en formato &lt;a href="http://www.json.org/json-es.html"&gt;JSON&lt;/a&gt;, es decir organiza la los datos en Clave:Valor y no en tablas. Estos documentos JSON contienen una ID unica No-Incremental que puede ser autogenerada o que puede definir uno mismo.&lt;/p&gt;

&lt;p&gt;Una de las ventajas de &lt;a href="http://couchdb.apache.org/"&gt;CouchDB&lt;/a&gt; frente a otros sistemas NoSQL del tipo documento es que incluye una interfaz web (FUTON) de facil manejo desde la que podemos administrar nuestras bases de datos, CouchDB ademas soporta accesibilidad por REST/HTTP por lo que podemos administrar nuestra base de datos mediante una URL. Otra de las ventajas de couchDB es el soporte de replicaciones del tipo Mestro-Esclavo, Maestro-Maestro y Replicacion incremental con deteccion/resolucion de conflictos bidireccional.&lt;/p&gt;

&lt;p&gt;Un documento sencillo en CouchDB podria ser algo como esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="s2"&gt;&amp;quot;_id&amp;quot;&lt;/span&gt; : &lt;span class="s2"&gt;&amp;quot;ksjfhk65464f65g464f68465cx4665&amp;quot;&lt;/span&gt;,
&lt;span class="s2"&gt;&amp;quot;_rev&amp;quot;&lt;/span&gt; : &lt;span class="s2"&gt;&amp;quot;1-6d4f654d5fv5fz3214fd45d45&amp;quot;&lt;/span&gt;,
&lt;span class="s2"&gt;&amp;quot;Nombre&amp;quot;&lt;/span&gt; : &lt;span class="s2"&gt;&amp;quot;Angel&amp;quot;&lt;/span&gt;,
&lt;span class="s2"&gt;&amp;quot;Nick&amp;quot;&lt;/span&gt; : &lt;span class="s2"&gt;&amp;quot;JamUnix&amp;quot;&lt;/span&gt;,
&lt;span class="s2"&gt;&amp;quot;Web&amp;quot;&lt;/span&gt; : &lt;span class="s2"&gt;&amp;quot;www.jam.net.ve&amp;quot;&lt;/span&gt;,
&lt;span class="s2"&gt;&amp;quot;Lenguajes_conocidos&amp;quot;&lt;/span&gt; : &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Vb.Net&amp;quot;&lt;/span&gt;, &lt;span class="s2"&gt;&amp;quot;HTML5&amp;quot;&lt;/span&gt;, &lt;span class="s2"&gt;&amp;quot;CSS3&amp;quot;&lt;/span&gt;, &lt;span class="s2"&gt;&amp;quot;otros mas...&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Para instalar CouchDB en Ubuntu y comenzar a "jugar" con el y aprender como funciona una base de datos NoSQL tan solo teclea en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo aptitude install couchdb
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Con esto tendremos CouchDB instalado y ejecutandoce en nuestra PC, para comprobarlo podemos ir a la terminal y mediante Curl teclear:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;curl http://localhost:5984
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;lo que nos devolvera algo como:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;couchdb&amp;quot;&lt;/span&gt;:&lt;span class="s2"&gt;&amp;quot;Welcome&amp;quot;&lt;/span&gt;,&lt;span class="s2"&gt;&amp;quot;version&amp;quot;&lt;/span&gt;:&lt;span class="s2"&gt;&amp;quot;1.0.1&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;CouchDB ofrece una interfaz web llamada Futon en la que podemos administrar las bases de datos, para entrar en Futon tan solo debemos abrir nuestro navegador y colocar la siguiente URL:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;http://localhost:5984/_utils
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Con lo que veras algo como esto:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/vbyGB"&gt;&lt;img src="http://i.imgur.com/vbyGBs.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por ahora no hay mucha documentacion en Español sobre CouchDB, pero si te interesa aprender mas sobre este sistema puedes leer este &lt;a href="http://4tic.com/blog/40-blgo/63-couchdb-una-bd-diferente"&gt;primer&lt;/a&gt; y &lt;a href="http://4tic.com/en/blog/40-blgo/64-couchdb-una-base-de-datos-diferente-2"&gt;segundo&lt;/a&gt; articulo publicado en 4tic.com&lt;/p&gt;

&lt;p&gt;Tambien puedes visitar la &lt;a href="http://wiki.apache.org/couchdb/"&gt;Wiki de CouchDB&lt;/a&gt; o leer &lt;a href="http://guide.couchdb.org/"&gt;la Guia&lt;/a&gt; en Ingles.&lt;/p&gt;

&lt;p&gt;Pronto publicare mas articulos acerca de como crear documentos sencillos usando Futon, los usos con curl y un ejemplo de como conectar y almacenar datos usando Python y el Framework &lt;a href="http://couchdbkit.org/"&gt;CouchDBKit.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pxPZhWxcN8YYO5OCIUyXoGilR_Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pxPZhWxcN8YYO5OCIUyXoGilR_Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pxPZhWxcN8YYO5OCIUyXoGilR_Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pxPZhWxcN8YYO5OCIUyXoGilR_Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GRNtI1NYgEI:lYECCXuScd8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GRNtI1NYgEI:lYECCXuScd8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GRNtI1NYgEI:lYECCXuScd8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GRNtI1NYgEI:lYECCXuScd8:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GRNtI1NYgEI:lYECCXuScd8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=GRNtI1NYgEI:lYECCXuScd8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GRNtI1NYgEI:lYECCXuScd8:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GRNtI1NYgEI:lYECCXuScd8:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=GRNtI1NYgEI:lYECCXuScd8:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GRNtI1NYgEI:lYECCXuScd8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GRNtI1NYgEI:lYECCXuScd8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=GRNtI1NYgEI:lYECCXuScd8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GRNtI1NYgEI:lYECCXuScd8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GRNtI1NYgEI:lYECCXuScd8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=GRNtI1NYgEI:lYECCXuScd8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=GRNtI1NYgEI:lYECCXuScd8:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=GRNtI1NYgEI:lYECCXuScd8:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/GRNtI1NYgEI" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2010/12/12/instalando-couchdb-en-ubuntu</feedburner:origLink></entry>
 
 <entry>
   <title>Acelerometro y Ubuntu</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/bI1SJDG8yiU/acelerometro-y-ubuntu" />
   <updated>2010-11-21T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2010/11/21/acelerometro-y-ubuntu</id>
   <content type="html">&lt;p&gt;Hasta hace unas horas no sabia que podia usar el Acelerometro (lis3lv02d) que tiene mi laptop en Linux, tan solo sabia que lo usa en Windows la aplicacion HP 3D DriveGuard para proteger el disco duro en casos de una posible caida  y golpe contra el suelo. Pero en Linux es posible sacarle provecho al acelerometro para algo mas que proteger el disco duro.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/Qg7uI"&gt;&lt;img src="http://i.imgur.com/Qg7uI.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una manera de saber que nuestra laptop posee un acelerometro es tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;cat /sys/devices/platform/lis3lv02d/position
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;si nos devuelve algo como:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="o"&gt;(&lt;/span&gt;18,36,936&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;entonces quiere decir que tenermos un acelerometro correctamente reconocido por Linux, el valor en (18,36,936) representa el eje X,Y,Z .&lt;/p&gt;

&lt;p&gt;Buscando en google me encontre con un script en Bash el cual usa el acelerometro de la laptop para rotar las caras del cubo de escritorio de Compiz. el script en cuestion se encuentra en los &lt;a href="https://bbs.archlinux.org/viewtopic.php?id=78031"&gt;foros de ArchLinux&lt;/a&gt; y fue escrito por el usuario &lt;a href="https://bbs.archlinux.org/viewtopic.php?id=78031"&gt;SamoTurk&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Este script requiere que tengamos instalado el paquete wmctrl, por lo que si no lo tienes aun tendras que instalarlo tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo aptitude install wmctrl
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;En realidad son dos script:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="c"&gt;# lis3lv02d-rotate&lt;/span&gt;
&lt;span class="c"&gt;#&lt;/span&gt;
&lt;span class="c"&gt;# Author: Samo Turk&lt;/span&gt;
&lt;span class="c"&gt;#&lt;/span&gt;
&lt;span class="c"&gt;# Released under GPLv3&lt;/span&gt;
&lt;span class="nv"&gt;COUNTER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;  &lt;span class="nv"&gt;$COUNTER&lt;/span&gt; -lt 100 &lt;span class="o"&gt;]&lt;/span&gt;; &lt;span class="k"&gt;do&lt;/span&gt;
sleep 2
&lt;span class="nv"&gt;POS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;cat /sys/devices/platform/lis3lv02d/position | awk -F , &lt;span class="s1"&gt;&amp;#39;{print$1}&amp;#39;&lt;/span&gt; | awk -F &lt;span class="s2"&gt;&amp;quot;(&amp;quot;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;{print$2}&amp;#39;&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$POS&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;$POS&lt;/span&gt; -ge 350 &lt;span class="o"&gt;]&lt;/span&gt;; &lt;span class="k"&gt;then&lt;/span&gt;
./compiz-rotate-wmctrl left
&lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;$POS&lt;/span&gt; -le -350 &lt;span class="o"&gt;]&lt;/span&gt;; &lt;span class="k"&gt;then&lt;/span&gt;
./compiz-rotate-wmctrl right
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;span class="nb"&gt;let &lt;/span&gt;&lt;span class="nv"&gt;COUNTER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;COUNTER+1
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Este script lo guardaremos en un archivo llamado "lis3lv02d-rotate"&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="c"&gt;#&lt;/span&gt;
&lt;span class="c"&gt;# compiz-rotate-wmctrl - Rotate the cube using wmctrl&lt;/span&gt;
&lt;span class="c"&gt;#&lt;/span&gt;
&lt;span class="c"&gt;# Author: Shang-Feng Yang&lt;/span&gt;
&lt;span class="c"&gt;# Released under GPLv3&lt;/span&gt;
&lt;span class="nv"&gt;VER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;function &lt;/span&gt;rotate&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="c"&gt;# The target face number (begins with 0)&lt;/span&gt;
&lt;span class="nv"&gt;TVPN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$((&lt;/span&gt; &lt;span class="nv"&gt;$1&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NF&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="k"&gt;))&lt;/span&gt;
&lt;span class="c"&gt;# The X coordinate of the target viewport&lt;/span&gt;
&lt;span class="nv"&gt;TVPX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$((&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TVPN&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;WW&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="k"&gt;))&lt;/span&gt;
&lt;span class="c"&gt;# Change to the target viewport&lt;/span&gt;
wmctrl -o &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TVPX&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;,0
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;function &lt;/span&gt;usage&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; -e &lt;span class="s2"&gt;&amp;quot;$(basename $0) v${VER}\n&amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; -e &lt;span class="s2"&gt;&amp;quot;Usage:\n&amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; -e &lt;span class="s2"&gt;&amp;quot;\t$(basename $0) {left|right|#}\n&amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; -e &lt;span class="s2"&gt;&amp;quot;\tWhere:\n&amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; -e &lt;span class="s2"&gt;&amp;quot;\t\tleft - rotate the cube to the left&amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; -e &lt;span class="s2"&gt;&amp;quot;\t\tright - rotate the cube to the right&amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; -e &lt;span class="s2"&gt;&amp;quot;\t\t# - rotate to #th face (begins with 0)\n\n&amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; -e &lt;span class="s2"&gt;&amp;quot;Author: Shang-Feng Yang &amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; -e &lt;span class="s2"&gt;&amp;quot;Released under GPLv3&amp;quot;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="c"&gt;# The action to be performed. $ACT could be &amp;#39;left&amp;#39; or &amp;#39;right&amp;#39; to rotate&lt;/span&gt;
&lt;span class="c"&gt;# left or right, accordingly. $ACT could also be the number of the face&lt;/span&gt;
&lt;span class="c"&gt;# to rotate into.&lt;/span&gt;
&lt;span class="nv"&gt;ACT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$1&lt;/span&gt; |tr &lt;span class="s1"&gt;&amp;#39;[A-Z]&amp;#39;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;[a-z]&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;x$ACT&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;x&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; usage; &lt;span class="nb"&gt;exit &lt;/span&gt;1; &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nv"&gt;$ACT&lt;/span&gt; in
left|right|&lt;span class="o"&gt;[&lt;/span&gt;0-9&lt;span class="o"&gt;]&lt;/span&gt;|&lt;span class="o"&gt;[&lt;/span&gt;0-9&lt;span class="o"&gt;][&lt;/span&gt;0-9&lt;span class="o"&gt;])&lt;/span&gt;
;;
*&lt;span class="o"&gt;)&lt;/span&gt;
usage
&lt;span class="nb"&gt;exit &lt;/span&gt;1
;;
&lt;span class="k"&gt;esac&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="c"&gt;# The informations about the desktop&lt;/span&gt;
&lt;span class="nv"&gt;INFO&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;wmctrl -d&lt;span class="k"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;# The width of the desktop&lt;/span&gt;
&lt;span class="nv"&gt;DW&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;${INFO}&amp;quot;&lt;/span&gt;| awk &lt;span class="s1"&gt;&amp;#39;{sub(/x[0-9]+/, &amp;quot;&amp;quot;, $4); print $4}&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;# The width of the workarea&lt;/span&gt;
&lt;span class="nv"&gt;WW&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;${INFO}&amp;quot;&lt;/span&gt;| awk &lt;span class="s1"&gt;&amp;#39;{sub(/x[0-9]+/, &amp;quot;&amp;quot;, $9); print $9}&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;# The number of faces on the cube&lt;/span&gt;
&lt;span class="nv"&gt;NF&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$((&lt;/span&gt;&lt;span class="nv"&gt;$DW&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$WW&lt;/span&gt;&lt;span class="k"&gt;))&lt;/span&gt;
&lt;span class="c"&gt;# The X coordinate of the viewport&lt;/span&gt;
&lt;span class="nv"&gt;CVPX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;${INFO}&amp;quot;&lt;/span&gt; |awk &lt;span class="s1"&gt;&amp;#39;{sub(/,[0-9]+/, &amp;quot;&amp;quot;, $6); print $6}&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;# Current number of the face in all faces (begins with 0)&lt;/span&gt;
&lt;span class="nv"&gt;CVPN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$((&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CVPX&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;WW&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="k"&gt;))&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;$ACT&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;right&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="nv"&gt;ACT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$((&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CVPN&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="k"&gt;))&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;$ACT&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;left&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="nv"&gt;ACT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$((&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CVPN&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="k"&gt;))&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
rotate &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ACT&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Y este segundo script lo guardaremos en un archivo llamado "compiz-rotate-wmctrl" en la misma carpeta donde esta el primer script luego le agregamos permisos de ejecucion a ambos archivos.&lt;/p&gt;

&lt;p&gt;Para probar este script ejecutamos desde la terminal tecleando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sh ./lis3lv02d-rotate
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Ahora solo nos queda inclinar la laptop a la izquierda o derecha y el cubo de escritorio deberia cambiar  en ese sentido similar a como lo muestra este &lt;a href="http://www.youtube.com/watch?v=CtWywn1zbjA"&gt;video&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Otras de las utilidades que le posemos dar a el acelerometro es en los juegos NeverBall en el que podemos mover la esfera inclinando la laptop hacia los lados como se ve en este &lt;a href="http://www.youtube.com/watch?v=a92VXK-mURk"&gt;video.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una tercera utilidad que encontre para el acelerometro es unirse al proyecto &lt;a href="http://qcn.stanford.edu/"&gt;Quake-Catcher&lt;/a&gt; Network en el cual se usan las laptops con acelerometros como una especie de sismografos conectados a internet y asi detectar posibles temblores y terremotos en tu localidad, lamentablemente  no todo el software que se necesita es soportado en Linux  y al parecer solo esta disponible para Mac y Windows.&lt;/p&gt;

&lt;p&gt;Por ultimo siempre podremos volver a la utilidad principal para la que el fabricante coloco el acelerometro en las laptops, es decir Proteger nuestro disco duro. En linux podemos usar  el software HPfall el cual usara el acelerometro para detectar movimientos bruscos o caidas y proteger el disco duro en esas situaciones para asi evitar daños o perdida de datos.&lt;/p&gt;

&lt;p&gt;Para instalar HPfall debemos agregar el repositorio del autor tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo apt-add-repository ppa:pmjdebruijn/ppa
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;actualizamos la lista de paquetes&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo aptitude update
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;ahora instalamos HPFALL&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo aptitude install hpfall
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Esto nos ejecutara un demonio en cada inicio el cual estara monitoreando junto con el acelerometro los movimientos para asi proteger el disco en caso de una caida.&lt;/p&gt;

&lt;p&gt;Este software no tiene ninguna interfaz de configuracion, asi que no te sorprendas si estas buscando un icono en el menu aplicaciones y no encuentras nada, a fin de cuentas el HP 3D DriveGuard tampoco trae mucha cosa que se diga.&lt;/p&gt;

&lt;p&gt;Me gustaria probar alguna otra utilidad pero de momento no encuentro mas, me gustaria un software en el que pueda ver en tiempo real los valores de X,Y,Z mientras muevo la laptop pero por ahora no e encontrado nada parecido mas que usar el comando cat /sys/devices/platform/lis3lv02d/position&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-gXoSHQt97VF1obGbmrvAszhT0w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-gXoSHQt97VF1obGbmrvAszhT0w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-gXoSHQt97VF1obGbmrvAszhT0w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-gXoSHQt97VF1obGbmrvAszhT0w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bI1SJDG8yiU:jwgAPSwktQc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bI1SJDG8yiU:jwgAPSwktQc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bI1SJDG8yiU:jwgAPSwktQc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bI1SJDG8yiU:jwgAPSwktQc:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bI1SJDG8yiU:jwgAPSwktQc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=bI1SJDG8yiU:jwgAPSwktQc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bI1SJDG8yiU:jwgAPSwktQc:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bI1SJDG8yiU:jwgAPSwktQc:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=bI1SJDG8yiU:jwgAPSwktQc:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bI1SJDG8yiU:jwgAPSwktQc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bI1SJDG8yiU:jwgAPSwktQc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=bI1SJDG8yiU:jwgAPSwktQc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bI1SJDG8yiU:jwgAPSwktQc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bI1SJDG8yiU:jwgAPSwktQc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=bI1SJDG8yiU:jwgAPSwktQc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bI1SJDG8yiU:jwgAPSwktQc:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=bI1SJDG8yiU:jwgAPSwktQc:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/bI1SJDG8yiU" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2010/11/21/acelerometro-y-ubuntu</feedburner:origLink></entry>
 
 <entry>
   <title>Guia de restauracion del Grub con Ubuntu</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/VpiSIxNMM0Q/guia-de-restauracion-del-grub-con-ubuntu" />
   <updated>2010-11-13T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2010/11/13/guia-de-restauracion-del-grub-con-ubuntu</id>
   <content type="html">&lt;p&gt;Bueno el amigo &lt;a href="https://wiki.ubuntu.com/NelsonDelgado"&gt;Nejode&lt;/a&gt; lo a vuelto a hacer y nos a sorprendido nuevamente con otra de sus guias,  hace unas semanas puso a disposicion la &lt;a href="http://blog.jam.net.ve/2010/11/04/guia-de-conexion-escritorio-remoto-en-ubuntu/"&gt;guia para conexiones a escritorios remotos&lt;/a&gt;, pero en esta ocasion nos ofrece una guia de Grub2 en la que nos explica como podemos usar &lt;a href="http://blog.jam.net.ve/category/ubuntu/"&gt;Ubuntu&lt;/a&gt; para recuperar el Grub  (gestor de arranque) en nuestro disco duro.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://db.tt/QpQzgCr1"&gt;&lt;img src="http://i.imgur.com/iJ4Lsl.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No es extraño que en ocasiones uno pueda perder el arranque de nuestro pc luego de una instalacion de Winxp/Vista/7  y este daño el arranque de nuestro Linux que ya teniamos en otra particion, pues bien si este es tu caso (o cualquien otro en donde hayas perdido el Grub o el arranque del sistema) entonces ya no tienes escusa para ponerte manos a la obra y recuperar  tu sistema restaurando el Grub.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nota: Esta guia se a publicado en &lt;a href="http://blog.jam.net.ve/"&gt;JamUnix Blog&lt;/a&gt; con el permiso explicito del autor.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IFeAibcDc_Iqvv6UhbDoFf2MnAw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IFeAibcDc_Iqvv6UhbDoFf2MnAw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IFeAibcDc_Iqvv6UhbDoFf2MnAw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IFeAibcDc_Iqvv6UhbDoFf2MnAw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VpiSIxNMM0Q:nX2kE8vDJ0o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VpiSIxNMM0Q:nX2kE8vDJ0o:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VpiSIxNMM0Q:nX2kE8vDJ0o:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VpiSIxNMM0Q:nX2kE8vDJ0o:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VpiSIxNMM0Q:nX2kE8vDJ0o:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=VpiSIxNMM0Q:nX2kE8vDJ0o:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VpiSIxNMM0Q:nX2kE8vDJ0o:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VpiSIxNMM0Q:nX2kE8vDJ0o:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=VpiSIxNMM0Q:nX2kE8vDJ0o:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VpiSIxNMM0Q:nX2kE8vDJ0o:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VpiSIxNMM0Q:nX2kE8vDJ0o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=VpiSIxNMM0Q:nX2kE8vDJ0o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VpiSIxNMM0Q:nX2kE8vDJ0o:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VpiSIxNMM0Q:nX2kE8vDJ0o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=VpiSIxNMM0Q:nX2kE8vDJ0o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=VpiSIxNMM0Q:nX2kE8vDJ0o:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=VpiSIxNMM0Q:nX2kE8vDJ0o:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/VpiSIxNMM0Q" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2010/11/13/guia-de-restauracion-del-grub-con-ubuntu</feedburner:origLink></entry>
 
 <entry>
   <title>Entendiendo la notacion octal de los permisos del sistema en Linux</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/TJQkMyQXZ2E/entendiendo-la-notacion-octal-de-los-permisos-del-sistema-en-linux" />
   <updated>2010-11-11T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2010/11/11/entendiendo-la-notacion-octal-de-los-permisos-del-sistema-en-linux</id>
   <content type="html">&lt;p&gt;Si administras un servidor, una cuenta de hosting o usas una distro Linux es muy probable que en algun momento hayas tenido que cambiar los permisos a alguna carpeta o archivo. En sistemas Linux comunmente se usa el comando chmod seguido de un conjunto de letras y simbolos (notacion simbolica) o seguido de una cifra de 3 digitos (notacion octal), pero en ocasiones usamos estos permisos sin saber que significan o que estan haciendo realmente ya que copiamos el comando de alguna guia o pagina.&lt;/p&gt;

&lt;p&gt;Bien en esta ocasion explicare un poco como es el funcionamiento de la notacion octal y como saber el significado de esos numeros que colocamos.&lt;/p&gt;

&lt;p&gt;En primer lugar la notacion octal consiste en un conjunto de valores de 3 o 4 digitos en base 8. cuando escribimos un permiso en notacion octal de 3 digitos, cada numero representa un un componente de permisos a establecer.&lt;/p&gt;

&lt;p&gt;Para saber que permisos le estamos asignando a un archivo o carpeta podemos valernos del significado de cada numero. por ejemplo:&lt;/p&gt;

&lt;p&gt;4 - &lt;span style="color: #00ff00;"&gt;Lectura&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;2 - &lt;span style="color: #3366ff;"&gt;Escritura&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;1 - &lt;span style="color: #ff0000;"&gt;Ejecucion&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;La posicion de estos numeros en la cifra tambien tiene un significado, por ejemplo:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="text"&gt;7 x x
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;La primera posicion en la cifra significa que ese permiso sera valido para el usuario (propietario del archivo o carpeta).&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="text"&gt;x 7 x
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;La segunda posicion en la cifra significa que ese permiso sera valido para el grupo.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;x x 7
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;La tercera posicion en la cifra significa que ese permiso sera valido para el publico.&lt;/p&gt;

&lt;p&gt;Si por ejemplo escribimos un comando como este:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;chmod 421 archivo.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Lo que estariamos haciendo es:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Permitirle al dueño &lt;span style="color: #00ff00;"&gt;leer&lt;/span&gt; (abrir/ver) el archivo.txt&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Permitirle al grupo &lt;span style="color: #3366ff;"&gt;escribir&lt;/span&gt; (editar) el archivo.txt&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Permitirle al resto de los usuarios o el publico &lt;span style="color: #ff0000;"&gt;ejecutar&lt;/span&gt; el archivo.txt&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Hasta aqui todo se entiende a simple vista, pero de seguro te estaras preguntando ¿como hacer si quiero que el usuario tenga permisos de lectura-escritura y permisos de solo lectura a los grupos y el publico? Pues bien muy facil, los valores octales pueden conbinarse (sumarse), veamos este ejemplo:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;chmod 644 archivo.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Aqui estariamos combinando (sumando) el valor octal para el permiso de &lt;span style="color: #00ff00;"&gt;lectura&lt;/span&gt; y el valor octal para el permiso de&lt;span style="color: #00ffff;"&gt; &lt;span style="color: #3366ff;"&gt;escritura&lt;/span&gt;&lt;/span&gt;, los que nos daria como resultado 6 que seria igual a el permiso &lt;span style="color: #00ff00;"&gt;Lectura&lt;/span&gt;-&lt;span style="color: #3366ff;"&gt;Escritura&lt;/span&gt;.  Al grupo y al publico se le asigna el valor octal 4 que seria el equivalente al permiso de solo &lt;span style="color: #00ff00;"&gt;lectura&lt;/span&gt;.&lt;/p&gt;

&lt;p&gt;Otro caso podria ser este ejemplo:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;chmod 750 archivo.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;En este caso estariamos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Asignandole permisos de &lt;span style="color: #00ff00;"&gt;lectura&lt;/span&gt;-&lt;span style="color: #3366ff;"&gt;escritura&lt;/span&gt;-&lt;span style="color: #ff0000;"&gt;ejecucion&lt;/span&gt; al usuario.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Asignandole permisos de &lt;span style="color: #00ff00;"&gt;lectura&lt;/span&gt;-&lt;span style="color: #ff0000;"&gt;ejecucion&lt;/span&gt; al grupo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quitandole todo los permisos al publico.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;En este caso al la posicion correspondiente al publico se le asigna el valor "0" lo que significa que no se le esta dando ningun tipo de permisos, es decir el publico no puede ver/abrir archivo.txt, no puede escribir/editar en archivo.txt ni tampoco puede ejecutar archivo.txt.&lt;/p&gt;

&lt;p&gt;Despues de ver esto ya no seria problemas leer o asignar permisos a un archivo o una carpeta tanto en tu pc con  linux como en un servidor remoto o un hosting accesandi via FTP.&lt;/p&gt;

&lt;p&gt;Espero les sirva tanto como a mi.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lCmrWUfrHzxgW9lrw21SII4lH-k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lCmrWUfrHzxgW9lrw21SII4lH-k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lCmrWUfrHzxgW9lrw21SII4lH-k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lCmrWUfrHzxgW9lrw21SII4lH-k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TJQkMyQXZ2E:mEkxK-1oMmg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TJQkMyQXZ2E:mEkxK-1oMmg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TJQkMyQXZ2E:mEkxK-1oMmg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TJQkMyQXZ2E:mEkxK-1oMmg:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TJQkMyQXZ2E:mEkxK-1oMmg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=TJQkMyQXZ2E:mEkxK-1oMmg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TJQkMyQXZ2E:mEkxK-1oMmg:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TJQkMyQXZ2E:mEkxK-1oMmg:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=TJQkMyQXZ2E:mEkxK-1oMmg:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TJQkMyQXZ2E:mEkxK-1oMmg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TJQkMyQXZ2E:mEkxK-1oMmg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=TJQkMyQXZ2E:mEkxK-1oMmg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TJQkMyQXZ2E:mEkxK-1oMmg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TJQkMyQXZ2E:mEkxK-1oMmg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=TJQkMyQXZ2E:mEkxK-1oMmg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TJQkMyQXZ2E:mEkxK-1oMmg:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=TJQkMyQXZ2E:mEkxK-1oMmg:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/TJQkMyQXZ2E" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2010/11/11/entendiendo-la-notacion-octal-de-los-permisos-del-sistema-en-linux</feedburner:origLink></entry>
 
 <entry>
   <title>Guia de Conexion a Escritorios remotos en Ubuntu</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/Jt3G02bqUgU/guia-de-conexion-escritorio-remoto-en-ubuntu" />
   <updated>2010-11-04T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2010/11/04/guia-de-conexion-escritorio-remoto-en-ubuntu</id>
   <content type="html">&lt;p&gt;De seguro muchos se han topado con la necesidad de conectarse remotamente con su PC para realizar alguna tarea sin estar frente a ella pero se han vuelto un ocho intentando lograr la conexion. es por esto que les traigo una buena guia escrita por el amigo &lt;a href="https://wiki.ubuntu.com/NelsonDelgado"&gt;Nejode&lt;/a&gt; Miembro del Grupo de Usuarios &lt;a href="http://www.ubuntu-ve.org"&gt;Ubuntu de Venezuela&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://db.tt/vXNBRtzo"&gt;&lt;img src="http://i.imgur.com/ambFHl.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con esta guia podran realizar la configuracion y conexion de escritorios remotos (VNC) usando entre dos PC usando Vino y Vinagre. Cabe destacar que la guia esta muy bien explicada por lo que de seguro no tendran problemas en realizar la configuracion.
Nota: Esta guia se a publicado en &lt;a href="http://blog.jam.net.ve"&gt;JamUnix Blog&lt;/a&gt; con el permiso explicito del autor.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Gpp8MuX5ObKBQwcFjJpKJktd9xo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Gpp8MuX5ObKBQwcFjJpKJktd9xo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Gpp8MuX5ObKBQwcFjJpKJktd9xo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Gpp8MuX5ObKBQwcFjJpKJktd9xo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=Jt3G02bqUgU:b-HU0nHef2E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=Jt3G02bqUgU:b-HU0nHef2E:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=Jt3G02bqUgU:b-HU0nHef2E:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=Jt3G02bqUgU:b-HU0nHef2E:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=Jt3G02bqUgU:b-HU0nHef2E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=Jt3G02bqUgU:b-HU0nHef2E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=Jt3G02bqUgU:b-HU0nHef2E:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=Jt3G02bqUgU:b-HU0nHef2E:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=Jt3G02bqUgU:b-HU0nHef2E:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=Jt3G02bqUgU:b-HU0nHef2E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=Jt3G02bqUgU:b-HU0nHef2E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=Jt3G02bqUgU:b-HU0nHef2E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=Jt3G02bqUgU:b-HU0nHef2E:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=Jt3G02bqUgU:b-HU0nHef2E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=Jt3G02bqUgU:b-HU0nHef2E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=Jt3G02bqUgU:b-HU0nHef2E:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=Jt3G02bqUgU:b-HU0nHef2E:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/Jt3G02bqUgU" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2010/11/04/guia-de-conexion-escritorio-remoto-en-ubuntu</feedburner:origLink></entry>
 
 <entry>
   <title>Montando Particiones NTFS en Linux</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/I23-cl_dfDE/montando-particiones-ntfs-en-linux" />
   <updated>2010-10-30T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2010/10/30/montando-particiones-ntfs-en-linux</id>
   <content type="html">&lt;p&gt;Esto es algo que ya hay en muchos blogs, foros, etc...  pero lo coloco aqui en &lt;a href="http://blog.jam.net.ve/" target="_blank"&gt;JamUnix Blog&lt;/a&gt; a modo de respaldo para tenerlo a mano cuando lo necesite ya que cuando instalo una nueva version de &lt;a href="http://blog.jam.net.ve/category/ubuntu/" target="_blank"&gt;Ubuntu&lt;/a&gt; u otra distro como Debian o Arch &lt;a href="http://blog.jam.net.ve/category/linux/"&gt;Linux&lt;/a&gt;, siempre ando buscando como automontar mis particiones NTFS.&lt;/p&gt;

&lt;p&gt;Bien comencemos, para automontar particiones usaremos la aplicacion ntfs-3g la cual nos facilitara mucho la tarea, por lo que lo primero que haremos sera instalarla tecleando en una terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo aptitude install ntfs-3g
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Luego de esto creamos una carpeta llamada "JamNTFS"en /media en la cual montaremos la particion NTFS.  Por supuesto podemos colocarle el nombre que queramos a la carpeta.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;mkdir /media/jamunixNTFS
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Ahora debemos averiguar en donde se encuentra nuestra particion NTFS a montar, para ver esto tecleamos en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo fdisk -l
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Esto nos mostrara un listado de las particiones que tenemos, es algo similar a esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;Dispositivo Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sda1   *           1          13      102400    7  HPFS/NTFS
La partición 1 no termina en un límite de cilindro.
/dev/sda2              13       25843   207478784    7  HPFS/NTFS
/dev/sda3           25843       31984    49324032   83  Linux
/dev/sda4           31984       38914    55663617    5  Extendida
/dev/sda5           31984       32233     1998848   82  Linux swap / Solaris
/dev/sda6           32233       38914    53663744   83  Linux
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Como podemos ver tenemos 2 particiones NTFS sda1 y sda2, y la que yo configurare para que se automonte sera la sda2.&lt;/p&gt;

&lt;p&gt;Para hacer dicho montaje de la particion /dev/sda2 en la carpeta /media/JamNTFS que ya creamos mas arriba, tecleamos en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;mount -t ntfs-3g /dev/sda2 /media/JamNTFS
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Ya con esto tendremos montada nuestra particion NTFS.&lt;/p&gt;

&lt;p&gt;Ahora haremos una configuracion mas para que se automonte la particion cada vez que iniciemos el S.O para esto editaremos el archivo fstab tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo gedit /etc/fstab
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y agregamos la siguiente linea al final del archivo:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;/dev/sda2 /media/JamNTFS ntfs-3g defaults,locale&lt;span class="o"&gt;=&lt;/span&gt;es_ES.UTF8 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;guardamos, cerramos y reiniciamos para ver al siguiente inicio nuestra particion NTFS montada de manera automatica.&lt;/p&gt;

&lt;p&gt;Saludos y espero les sirva tanto como a mi.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/G4-0XGDC3D9ryAEA74nh235h1fE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G4-0XGDC3D9ryAEA74nh235h1fE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/G4-0XGDC3D9ryAEA74nh235h1fE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G4-0XGDC3D9ryAEA74nh235h1fE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=I23-cl_dfDE:EJVk8E8FMYU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=I23-cl_dfDE:EJVk8E8FMYU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=I23-cl_dfDE:EJVk8E8FMYU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=I23-cl_dfDE:EJVk8E8FMYU:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=I23-cl_dfDE:EJVk8E8FMYU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=I23-cl_dfDE:EJVk8E8FMYU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=I23-cl_dfDE:EJVk8E8FMYU:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=I23-cl_dfDE:EJVk8E8FMYU:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=I23-cl_dfDE:EJVk8E8FMYU:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=I23-cl_dfDE:EJVk8E8FMYU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=I23-cl_dfDE:EJVk8E8FMYU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=I23-cl_dfDE:EJVk8E8FMYU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=I23-cl_dfDE:EJVk8E8FMYU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=I23-cl_dfDE:EJVk8E8FMYU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=I23-cl_dfDE:EJVk8E8FMYU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=I23-cl_dfDE:EJVk8E8FMYU:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=I23-cl_dfDE:EJVk8E8FMYU:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/I23-cl_dfDE" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2010/10/30/montando-particiones-ntfs-en-linux</feedburner:origLink></entry>
 
 <entry>
   <title>Monitoreando nuestro sistema vigilando los archivos de registro  (Logs)</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/QkRD1Hx4ZG0/monitoreando-nuestro-sistema-vigilando-los-archivos-de-registro-logs" />
   <updated>2010-10-26T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2010/10/26/monitoreando-nuestro-sistema-vigilando-los-archivos-de-registro-logs</id>
   <content type="html">&lt;p&gt;Los archivos de registros o archivos log como se conocen comummente, son archivos en donde se van almacenando un registro de todos los eventos que ocurren en un sistema durante un periodo de tiempo en particular. Estos archivos son usados tanto por el sistema operativo como por las aplicaciones o demonios (procesos) para registrar datos o informacion sobre un evento en particular.  En un sistema Linux podemos encontrar estos archivos de registro o logs en la carpeta /var/log  En esta carpeta encontraremos casi todos los archivos de registros de un sistema, pero cabe destacar que muchas aplicaciones crean estos archivos en sus propias carpetas fuera de /var/log.&lt;/p&gt;

&lt;p&gt;Ahora bien, ¿En que nos sirve los logs para monitorear nuestro sistema? pues muy sencillo, los principales archivos logs que estan en la carpeta /var/log van almacenando informacion de casi todos los eventos que ocurren en tu PC practicamente desde que la enciendes y en ellos podremos ver por ejemplo que pasa internamente en Linux cuando conectas una Memoria USB, un &lt;a href="http://blog.jam.net.ve/tag/modem/"&gt;Modem&lt;/a&gt; USB o cuando estas conectado a internet puedes ver los intentos de entrada bloqueados por tu firewall.   En otras circunstancias podremos ser capaces de observar algun mensaje de error que se pueda producir cuando estas conectando algun hardware nuevo o si tienes un servicio web instalado podras ver quienes estan conectados a tu equipo.&lt;/p&gt;

&lt;p&gt;Aqui en &lt;a href="http://blog.jam.net.ve/"&gt;JamUnix Blog&lt;/a&gt; veremos algunos archivos Logs y sus usos:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;/var/log/messages
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Este es el archivo principal de registros y almacena la mayoria de los mensajes de interes.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;/var/log/auth.log
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Muestra mensajes sobre autenticacion de usuarios y permisos&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;/var/log/daemon.log
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Muestra mensajes sobre demonios (permisos) o servicios corriendo en el sistema.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;/log/dmesg
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Muestra mensajes del nucleo Linux.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;/var/log/dpkg.log
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Muestra un registro de los paquetes binarios instalado.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;/var/log/kern.log
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Muestra mensajes del Kernel&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;/var/log/boot.log
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Muestra mensajes referentes al arranque del sistema.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;/var/log/debug
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Muestra mensajes de depuracion.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;/var/log/lpr.log
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Muestra mensajes sobre la impresora&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;/var/log/mail.err

/var/log/mail.info

/var/log/mail.warn

/var/log/mail.log
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Archivos varios que muestran mensajes sobre error, informacion, alertas y registro (respectivamente) para los correos (requiere tener un servicio de correos funcionando).&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;/var/log/mysql.*
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Archivos varios de registro para el servicio mysql (requiere tener un servicio mysql).&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;/var/log/user.log
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Muestra informacion acerca de los procesos usados por el usuario&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;/var/log/Xorg.0.log
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Muestra registros de Xorg&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;/var/log/apache2/*
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Archivos de registro varios que muestra informacion sobre el servicio web Apache (requiere tener apache instalado).&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;/var/log/lighttpd/*
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Archivos de registro varios que muestran informacion sobre el servicio web &lt;a href="http://blog.jam.net.ve/tag/lighttpd/"&gt;Lighttpd&lt;/a&gt; (requiere tener instalado Lighttpd)&lt;/p&gt;

&lt;p&gt;...   Entre otros.&lt;/p&gt;

&lt;p&gt;Por supuesto existen mucho mas archivos de logs, ya que muchos de los programas y aplicaciones que instales de seguro colocara su propio archivo de registro en /var/log o en su propia carpeta.  Por ejemplo, si instalamos el gestor de paquetes Aptitude, podremos ver un buen logs de los paquetes que instalamos con el en el archivos /var/log/aptitude&lt;/p&gt;

&lt;p&gt;Estos archivos tambien pueden variar dependiendo de la distribucion &lt;a href="http://blog.jam.net.ve/category/linux/"&gt;Linux&lt;/a&gt; que se use.&lt;/p&gt;

&lt;p&gt;Un tips importante es que podemos ver estos archivos desde la terminal usando comandos como tail, cat, less o grep. un ejemplo podria ser tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;tail -f  /var/log/message
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Con esto podriamos dejar abierta la terminal y detectar en tiempo real cualquier nuevo registro en el archivo log&lt;/p&gt;

&lt;p&gt;Saludos y espero les sirva.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4iu9Zs6FQpB5H9nytmZYajIMfXI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4iu9Zs6FQpB5H9nytmZYajIMfXI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4iu9Zs6FQpB5H9nytmZYajIMfXI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4iu9Zs6FQpB5H9nytmZYajIMfXI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=QkRD1Hx4ZG0:NAj0uEWxh5Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=QkRD1Hx4ZG0:NAj0uEWxh5Q:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=QkRD1Hx4ZG0:NAj0uEWxh5Q:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=QkRD1Hx4ZG0:NAj0uEWxh5Q:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=QkRD1Hx4ZG0:NAj0uEWxh5Q:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=QkRD1Hx4ZG0:NAj0uEWxh5Q:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=QkRD1Hx4ZG0:NAj0uEWxh5Q:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=QkRD1Hx4ZG0:NAj0uEWxh5Q:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=QkRD1Hx4ZG0:NAj0uEWxh5Q:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=QkRD1Hx4ZG0:NAj0uEWxh5Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=QkRD1Hx4ZG0:NAj0uEWxh5Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=QkRD1Hx4ZG0:NAj0uEWxh5Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=QkRD1Hx4ZG0:NAj0uEWxh5Q:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=QkRD1Hx4ZG0:NAj0uEWxh5Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=QkRD1Hx4ZG0:NAj0uEWxh5Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=QkRD1Hx4ZG0:NAj0uEWxh5Q:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=QkRD1Hx4ZG0:NAj0uEWxh5Q:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/QkRD1Hx4ZG0" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2010/10/26/monitoreando-nuestro-sistema-vigilando-los-archivos-de-registro-logs</feedburner:origLink></entry>
 
 <entry>
   <title>6 Sencillas herramientas de monitoreo de red utiles</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/LXo9mclnf7Q/6-sencillas-herramientas-de-monitoreo-de-red-utiles" />
   <updated>2010-10-17T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2010/10/17/6-sencillas-herramientas-de-monitoreo-de-red-utiles</id>
   <content type="html">&lt;p&gt;Desde hace unos meses para aca e estado leyendo un poco de las grandes posibilidades que ofrece la terminal y su gran poder para controlar y administar practicamente toda tu PC.  Ultimamente e estado viendo aplicaciones y comandos para la terminal que me permitan ver y monitoriar las conexiones a internet por lo que les traigo aqui 3 comandos y 3 aplicaciones de terminal utiles para monitoriar tu red.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aplicaciones:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Iptraf:  Es una aplicacion basada en la terminal de estadisticas de red. tiene como caracteristicas el conteo de bytes y monitoreo de conexiones de paquetes TCP. Tambien ofrece estadisticas de las interfaces de red (eth0, ppp0, wlan0, etc) e indicadores de actividad, tambien nos muestra las interrupciones de trafico TCP/UDP.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;a href="http://imgur.com/kVLFF"&gt;&lt;img src="http://i.imgur.com/kVLFFl.gif" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para instalarlo tan solo tecleamos en una terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo aptitude install iptraf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y luego lo ejecutamos con:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo iptraf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Iftop: Escucha el trafico que hay en una interfaz de red y nos muestra en una tabla el ancho de banda consumido ademas del nombre de host remoto al cual estamos conectados y el puerto usado para la conexion.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;a href="http://imgur.com/K8pwa"&gt;&lt;img src="http://i.imgur.com/K8pwal.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para instalarlo tan solo debemos teclear en una terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo aptitude install iftop
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y lo ejecutamos tecleando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo iftop -i ppp0
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Nota: cambie ppp0 por su interfaz de red. ejemplo: eth0 (cableada), wlan0 (inalambrica), ppp0 (modem), etc...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ifstat: es una herramienta para informarnos sobre el ancho de banda de las interfaces de red muy similar a  vmstat/iostat.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;a href="http://imgur.com/Woif2"&gt;&lt;img src="http://i.imgur.com/Woif2l.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para instalarlo tan solo ejecutamos en una terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo aptitude install ifstat
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y lo ejecutamos tecleando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;ifstat -i ppp0
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Nota: cambie ppp0 por su interfaz de red. ejemplo: eth0 (cableada), wlan0 (inalambrica), ppp0 (modem), etc...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Comandos:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;lsof&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo lsof -i4
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Segun el Man (Manual) de lsof, nos dice que este comando lista los archivos abiertos (de alli deriva su nombre: ls "listar",  o &gt; de open y f &gt; de file = lsof ) por lo que al ejecutarlo veremos una lista de las conexiones abiertas, que aplicacion, proceso o archivo la esta usando y tambien el puerto por el cual se realiza dicha conexion. Una salida de este comando mostraria algo similar a esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="text"&gt;COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
avahi-dae 1056   avahi   13u  IPv4   7319      0t0  UDP *:mdns
avahi-dae 1056   avahi   15u  IPv4   7321      0t0  UDP *:53814
dnsmasq   1214 dnsmasq    4u  IPv4   7595      0t0  UDP *:domain
dnsmasq   1214 dnsmasq    5u  IPv4   7596      0t0  TCP *:domain (LISTEN)
cupsd     1327    root    6u  IPv4   7752      0t0  TCP localhost.localdomain:ipp (LISTEN)
xchat     2805  usuario   14u  IPv4  22697      0t0  TCP Pc-Linux:43198-&amp;gt;antonieta.freenode.net:8001 (ESTABLISHED)
pidgin    2807   usuario    9w  IPv4  24691      0t0  TCP Pc-Linux:59995-&amp;gt;baymsg1.gateway.messenger.live.com:msnp (ESTABLISHED)
pidgin    2807   usuario   17u  IPv4  24548   0t0  TCP Pc-Linux:57466-&amp;gt;1e100.net:xmpp-client (ESTABLISHED)
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Para saber mas sobre este comando lee su manual tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;man lsof
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;netstat:&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo netstat -lptu
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;netstat es un comando que nos puede mostrar las conexiones de red, tablas de enrutamiento, estadisticas de las diferentes interfaces de red,  conexiones enmascaradas entre otras funciones. Con la opcion -lptu en realidad le estamos diciendo a netstat que nos muestre multiples opciones de informacion (cada letra equivale a una opcion) por lo que en este caso le estamos pidiendo que liste los sockets abierto "l", nos mueste los programas que estan usando esos sockets "p" y que sean mediante protocolos TCP "t" y UTP "u"&lt;/p&gt;

&lt;p&gt;una salida tipica de este comando seria similar a esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="text"&gt;Conexiones activas de Internet (solo servidores)
Proto  Recib Enviad Dirección local         Dirección remota       Estado       PID/Program name
tcp        0      0 *:domain                *:*                        ESCUCHAR    1214/dnsmasq
tcp        0      0 localhost.localdoma:ipp *:*                     ESCUCHAR    1327/cupsd
tcp6       0      0 [::]:domain             [::]:*                     ESCUCHAR    1214/dnsmasq
tcp6       0      0 PC-Linux:ipp          [::]:*                      ESCUCHAR    1327/cupsd
udp        0      0 *:mdns                  *:*                                 1056/avahi-daemon:
udp        0      0 *:domain                *:*                                 1214/dnsmasq
udp        0      0 *:53814                 *:*                                 1056/avahi-daemon:
udp6       0      0 [::]:mdns               [::]:*                              1056/avahi-daemon:
udp6       0      0 [::]:42850              [::]:*                              1056/avahi-daemon:
udp6       0      0 [::]:domain             [::]:*                              1214/dnsmasq
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Para saber mas de este comando y sus posibilidades teclea en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;man netstat
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;ss:&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;ss -o
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;ss es un comando muy similar a netstat que nos sirve para investigar cualquier informacion acerca de los sockets y conexiones abiertas. ademas de volcado de datos.&lt;/p&gt;

&lt;p&gt;Una salida tipica de este comando seria algo como esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="text"&gt;State      Recv-Q Send-Q                Local Address:Port                         Peer Address:Port
ESTAB      0      0                                     127:xx:xx:xx:34123             69:xx:xx:xx:www
CLOSE-WAIT 1      0                                 127:xx:xx:xx:42456       69:xx:xx:xx:www
ESTAB      0      0                                     127:xx:xx:xx:59995             69:xx:xx:xx:msnp
ESTAB      0      0                                     127:xx:xx:xx:37673              69:xx:xx:xx:www
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Para saber mas de este comando teclea en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;man ss
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Saludos.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kmAlVYNbDwwk0Jb2JVufF_8nIwI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kmAlVYNbDwwk0Jb2JVufF_8nIwI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kmAlVYNbDwwk0Jb2JVufF_8nIwI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kmAlVYNbDwwk0Jb2JVufF_8nIwI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=LXo9mclnf7Q:Lnvpq8ImnCM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=LXo9mclnf7Q:Lnvpq8ImnCM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=LXo9mclnf7Q:Lnvpq8ImnCM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=LXo9mclnf7Q:Lnvpq8ImnCM:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=LXo9mclnf7Q:Lnvpq8ImnCM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=LXo9mclnf7Q:Lnvpq8ImnCM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=LXo9mclnf7Q:Lnvpq8ImnCM:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=LXo9mclnf7Q:Lnvpq8ImnCM:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=LXo9mclnf7Q:Lnvpq8ImnCM:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=LXo9mclnf7Q:Lnvpq8ImnCM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=LXo9mclnf7Q:Lnvpq8ImnCM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=LXo9mclnf7Q:Lnvpq8ImnCM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=LXo9mclnf7Q:Lnvpq8ImnCM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=LXo9mclnf7Q:Lnvpq8ImnCM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=LXo9mclnf7Q:Lnvpq8ImnCM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=LXo9mclnf7Q:Lnvpq8ImnCM:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=LXo9mclnf7Q:Lnvpq8ImnCM:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/LXo9mclnf7Q" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2010/10/17/6-sencillas-herramientas-de-monitoreo-de-red-utiles</feedburner:origLink></entry>
 
 <entry>
   <title>Realizando capturas de una web con Shutter</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/UEEKZZA0p7c/realizando-capturas-de-una-web-con-shutter" />
   <updated>2010-09-23T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2010/09/23/realizando-capturas-de-una-web-con-shutter</id>
   <content type="html">&lt;p&gt;Shutter es una de las mejores herreamientas que hay en Linux para realizar capturas por sus cantidad de caracteristicas y facilidad de uso. Con Shutter podemos realizar capturas de pantalla del escritorio completo, solo una seleccion, una ventana, secciones de una ventana, un menu, textos de ayuda y capturas de sitios web entre otras caracteristicas.&lt;/p&gt;

&lt;p&gt;Primero que nada debemos instalar Shutter si no lo tenemos, por lo que debemos teclear en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo apt-get install shutter
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Con esto tendremos instalado Shutter, pero si se fijan, la opcion de capturas de sitios web esta desabilitada y nos dice que tenemos que instalar un paquete gnome-web-photo. Pues bien lo instalamos tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo apt-get install gnome-web-photo
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y con esto tendremos habilitada la opcion de capturas web.&lt;/p&gt;

&lt;p&gt;Bien para realizar la captura a un sitio web abrimos Shutter:&lt;/p&gt;

&lt;p&gt;Aplicaciones &gt; Accesorios &gt; Shutter&lt;/p&gt;

&lt;p&gt;Nota: Antes que nada deberiamos configurar el ancho del navegador virtual que usara Shutter para realizar una correcta captura. Por lo que luego de abrir Shutter nos vamos a:&lt;/p&gt;

&lt;p&gt;Editar &gt; Preferencias. y seleccionamos la pestaña "Avanzado"&lt;/p&gt;

&lt;p&gt;Al final de la ventana esta la opcion "ancho del navegador virtual" en ella podremos seleccionar el ancho de nuestro monitor.&lt;/p&gt;

&lt;p&gt;Continuamos, para realizar la captura hacemos click en la opcion respectiva (icono del planeta tierra)&lt;/p&gt;

&lt;p&gt;Una vez seleccionada la opcion se nos abrira una ventana que nos pide la URL de la pagina web a capturar, bien colocamos la direccion de la pagina que deseamos capturar como por ejemplo:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;http://blog.jam.net.ve
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y le damos a "Capturar"&lt;/p&gt;

&lt;p&gt;Ya con esto Shutter procesara la pagina y realizara la captura respectiva.  y lo que nos devolvera seria algo como esto:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/BrLp1"&gt;&lt;img src="http://i.imgur.com/BrLp1s.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Saludos y espero les sirva!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/l2Zkbt7BMHQ2HFo_rQEPpSWoz0Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l2Zkbt7BMHQ2HFo_rQEPpSWoz0Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/l2Zkbt7BMHQ2HFo_rQEPpSWoz0Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l2Zkbt7BMHQ2HFo_rQEPpSWoz0Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=UEEKZZA0p7c:dOTy-rz9sBQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=UEEKZZA0p7c:dOTy-rz9sBQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=UEEKZZA0p7c:dOTy-rz9sBQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=UEEKZZA0p7c:dOTy-rz9sBQ:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=UEEKZZA0p7c:dOTy-rz9sBQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=UEEKZZA0p7c:dOTy-rz9sBQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=UEEKZZA0p7c:dOTy-rz9sBQ:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=UEEKZZA0p7c:dOTy-rz9sBQ:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=UEEKZZA0p7c:dOTy-rz9sBQ:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=UEEKZZA0p7c:dOTy-rz9sBQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=UEEKZZA0p7c:dOTy-rz9sBQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=UEEKZZA0p7c:dOTy-rz9sBQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=UEEKZZA0p7c:dOTy-rz9sBQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=UEEKZZA0p7c:dOTy-rz9sBQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=UEEKZZA0p7c:dOTy-rz9sBQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=UEEKZZA0p7c:dOTy-rz9sBQ:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=UEEKZZA0p7c:dOTy-rz9sBQ:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/UEEKZZA0p7c" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2010/09/23/realizando-capturas-de-una-web-con-shutter</feedburner:origLink></entry>
 
 <entry>
   <title>Exportar tus contrasenas de lastpass a keepassx</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/plm6Om85iSQ/exportar-tus-contrasenas-de-lastpass-a-keepassx" />
   <updated>2010-09-14T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2010/09/14/exportar-tus-contrasenas-de-lastpass-a-keepassx</id>
   <content type="html">&lt;p&gt;Para los que no conocen &lt;a href="http://lastpass.com"&gt;LastPass&lt;/a&gt; es un servicio online gratuito que nos permite guardar las
contraseñas de todas las paginas a las cuales estamos registrados y nos facilita la tarea de loguearnos o
registrarnos en dichas paginas autorellenando los formularios. Y para los que no conoscan &lt;a href="http://www.keepassx.org/"&gt;KeePassX&lt;/a&gt;
es una aplicacion con caracteristicas similares a LastPass solo que este se ejecuta como aplicacion
de escritorio y guarda las contraseñas en tu PC.&lt;/p&gt;

&lt;p&gt;Para muchos paranoicos no les agrada mucho la idea de usar LastPass ya que este al ser un servicio gratuito y online esta
propenso a ataques o a que los mismos creadores escudriñen en nuestras contraseñas (a fin de cuentas ellos son
los que tienen acceso a esos datos). Por lo que si tu ya tienes unas cuantas contraseñas almacenadas en
LastPass y deseas almacenarlas en tu PC podemos valernos del Script
&lt;a href="http://github.com/nazariuskappertaal/lastpass2keepass"&gt;LastPass2KeePass&lt;/a&gt; que nos permite importarlas en .XML y
exportarlas en KeePassX para administrarlas desde este ultimo y no desde LastPass.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Para hacer esto tan solo debemos descargarnos el Script haciendo click &lt;a href="http://github.com/nazariuskappertaal/lastpass2keepass/raw/master/lastpass2keepass.py"&gt;Aqui&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;strong&gt;Nota: articulo Actualizado el 22-02-2011, Salte al final para saber mas y luego continué a partir de aqui&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Una vez descargado el script le damos permiso de ejecucion tecleando en la terminal:&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo chmod +x lastpass2keepass.py
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ahora solo necesitamos exportar las contraseñas almacenadas en LastPast en un archivo, si por ejemplo usas
el plugins de LastPass en tu navegador basta con hacer click en el icono Herramientas  Exportar a  Archivo CVS LastPass.
Le colocas un nombre al archivo y lo guardas en la misma carpeta donde tengas el script LastPass2KeePass&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ahora nos vamos a la terminal y ejecutamos el script de importacion tecleando en la terminal:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo python lastpass2keepass.py contraseñasLastPass contraseñaskeepass.xml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Donde:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;contraseñasLastPass : Es el nombre del archivo donde estan las contraseñas exportadas desde LastPass.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;contraseñaskeepass.xml :  Es el nombre que quieres que tenga el archivo con tus contraseñas convertidas a formato XML de KeePassX.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ahora tan solo debemos Importar las contraseñas en KeePassX, para esto solo abrimos la aplicacion y nos vamos
a Fichero - Importar desde... - KeePassX XML (*.xml)  Y elegimos nuestro archivo exportado que en nuestro
caso se llama contraseñaskeepass.xml&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Ya con esto tendras tus contraseñas de LastPass almacenadas en KeePassX y desde ahora podras administrarla
desde este ultimo teniendo la seguridad de que solo tu eres el que las puedes ver y tocar :-)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Actualizacion: 22-02-2011:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El repositorio en Github donde se encontraba la aplicacion lastpass2keepass.py ya no esta disponible a la fecha, por tal motivo copio a continuacion el codigo que compone la aplicacion:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="c"&gt;# lastpass2keepass&lt;/span&gt;
&lt;span class="c"&gt;# Supports:&lt;/span&gt;
&lt;span class="c"&gt;# Keepass XML - keepassxml&lt;/span&gt;
&lt;span class="c"&gt;# USAGE: python lastpass2keepass.py exportedTextFile&lt;/span&gt;
&lt;span class="c"&gt;# The LastPass Export format;&lt;/span&gt;
&lt;span class="c"&gt;# url,username,password,1extra,name,grouping(\ delimited),last_touch,launch_count,fav&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;time&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;itertools&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;re&lt;/span&gt; &lt;span class="c"&gt;# Toolkit&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;xml.etree.ElementTree&lt;/span&gt; &lt;span class="kn"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;ET&lt;/span&gt; &lt;span class="c"&gt;# Saves data, easier to type&lt;/span&gt;

&lt;span class="c"&gt;# Strings&lt;/span&gt;

&lt;span class="n"&gt;fileError&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;You either need more permissions or the file does not exist.&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;lineBreak&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;____________________________________________________________&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;formattedPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;lineBreak&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;lineBreak&lt;/span&gt;

&lt;span class="c"&gt;# Files&lt;/span&gt;
&lt;span class="c"&gt;# Check for existence/read/write.&lt;/span&gt;

&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="n"&gt;inputFile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="n"&gt;formattedPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;USAGE: python lastpass2keepass.py exportedTextFile&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inputFile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;IOError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="n"&gt;formattedPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Cannot read file: &amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt;&amp;#39; Error: &amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;&amp;quot;&amp;quot; % (inputFile, fileError) )&lt;/span&gt;
 &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c"&gt;# Create XML file.&lt;/span&gt;
&lt;span class="n"&gt;outputFile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inputFile&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;.export.xml:&lt;/span&gt;

&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;outputFile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;w&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c"&gt;# Clean.&lt;/span&gt;
 &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;outputFile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;aw&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;IOError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="n"&gt;formattedPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Cannot write to disk... exiting. Error: &amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileError&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c"&gt;# Parser&lt;/span&gt;
&lt;span class="c"&gt;# Create a csv dialect and extract the data to a reader object.&lt;/span&gt;
&lt;span class="n"&gt;dialect&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Sniffer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sniff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;seek&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;reader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dialect&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Create a list of the entries, allow us to manipulate it.&lt;/span&gt;
&lt;span class="c"&gt;# Can&amp;#39;t be done with reader object.&lt;/span&gt;

&lt;span class="n"&gt;allEntries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="n"&gt;allEntries&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;allEntries&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;# Remove LP format string.&lt;/span&gt;

&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c"&gt;# Close the read file.&lt;/span&gt;

&lt;span class="c"&gt;# Keepass XML generator&lt;/span&gt;

&lt;span class="c"&gt;# Add doctype to head, clear file.&lt;/span&gt;
&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;lt;!DOCTYPE KEEPASSX_DATABASE&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Generate Creation date&lt;/span&gt;
&lt;span class="c"&gt;# Form current time expression.&lt;/span&gt;
&lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;formattedNow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;%Y-%m-&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s"&gt;T%H:%M&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Initialize tree&lt;/span&gt;
&lt;span class="c"&gt;# build a tree structure&lt;/span&gt;
&lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ET&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Element&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;database&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;doc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ET&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ElementTree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Dictionary of failed entries&lt;/span&gt;
&lt;span class="n"&gt;failed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="n"&gt;formattedPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;DEBUG of &amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt;&amp;#39; file conversion to the KeePassXML format, outputing to the &amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt;&amp;#39; file.&amp;quot;&amp;quot; %(inputFile,outputFile))&lt;/span&gt;

&lt;span class="c"&gt;# A dictionary, organising the categories.&lt;/span&gt;
&lt;span class="n"&gt;resultant&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="c"&gt;# Parses allEntries into a resultant.&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;allEntries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="n"&gt;categories&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;r&amp;quot;[/&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;]&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="c"&gt;# Grab final category.&lt;/span&gt;
 &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;categories&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="n"&gt;resultant&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setdefault&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;categories&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;# Sort by categories.&lt;/span&gt;
 &lt;span class="k"&gt;except&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="c"&gt;# Catch illformed entries&lt;/span&gt;
 &lt;span class="c"&gt;# Grab entryElement position&lt;/span&gt;
 &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;allEntries&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
 &lt;span class="n"&gt;failed&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Failed to format entryElement at line &lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Initilize and loop through all entries&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;categoryEntries&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;resultant&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iteritems&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;

 &lt;span class="c"&gt;# Create head of group elements&lt;/span&gt;
 &lt;span class="n"&gt;headElement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ET&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SubElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;group&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="n"&gt;ET&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SubElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;headElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="n"&gt;ET&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SubElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;headElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;icon&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span class="c"&gt;# Lastpass does not retain icons.&lt;/span&gt;

 &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;categoryEntries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="c"&gt;# entryElement information&lt;/span&gt;
 &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="c"&gt;# Each entryElement&lt;/span&gt;
 &lt;span class="n"&gt;entryElement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ET&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SubElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;headElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;entry&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="c"&gt;# entryElement tree&lt;/span&gt;
 &lt;span class="n"&gt;ET&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SubElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entryElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
 &lt;span class="n"&gt;ET&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SubElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entryElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;username&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
 &lt;span class="n"&gt;ET&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SubElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entryElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
 &lt;span class="n"&gt;ET&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SubElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entryElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;url&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
 &lt;span class="n"&gt;ET&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SubElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entryElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;comment&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
 &lt;span class="n"&gt;ET&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SubElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entryElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;icon&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;
 &lt;span class="n"&gt;ET&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SubElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entryElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;creation&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;formattedNow&lt;/span&gt;
 &lt;span class="n"&gt;ET&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SubElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entryElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;lastaccess&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
 &lt;span class="n"&gt;ET&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SubElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entryElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;lastmod&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
 &lt;span class="n"&gt;ET&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SubElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entryElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;expire&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Never&amp;quot;&lt;/span&gt;
 &lt;span class="k"&gt;except&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="c"&gt;# Catch illformed entries&lt;/span&gt;
 &lt;span class="c"&gt;# Grab entry position&lt;/span&gt;
 &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;allEntries&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
 &lt;span class="n"&gt;failed&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Failed to format entry at line &lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Check if it was a clean conversion.&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;failed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="c"&gt;# Create a failed list.&lt;/span&gt;
 &lt;span class="n"&gt;failedList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s"&gt; : &lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;failed&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;()]&lt;/span&gt;
 &lt;span class="n"&gt;formattedPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;The conversion was not clean.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;You need to manually import the below entries from the &amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt;&amp;#39; file, as listed by below.&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inputFile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="n"&gt;formattedPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Line Number : entryElement&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;failedList&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;

&lt;span class="c"&gt;# Write out tree&lt;/span&gt;
&lt;span class="c"&gt;# wrap it in an ElementTree instance, and save as XML&lt;/span&gt;
&lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;lineBreak&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt;&amp;#39; has been succesfully converted to the KeePassXML format.&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inputFile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Converted data can be found in the &amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt;&amp;#39; file.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;outputFile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;lineBreak&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Guardelo con el nombre &lt;strong&gt;lastpass2keepass.py&lt;/strong&gt; y continue con el articulo debajo de la nota.&lt;/p&gt;

&lt;p&gt;Existen dos fork en Github, el de &lt;a href="https://github.com/haridsv/lastpass2keepass"&gt;harisdsv&lt;/a&gt; y el
de &lt;a href="https://github.com/anirudhjoshi/lastpass2keepass"&gt;anirudhjoshi&lt;/a&gt;, pero en las pruebas que
realice, estos no me funcionaron a la perfección.&lt;/p&gt;

&lt;p&gt;Saludos y Espero les sirva...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9kIn5TBikNMdADIKAm-Bi-p9_mo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9kIn5TBikNMdADIKAm-Bi-p9_mo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9kIn5TBikNMdADIKAm-Bi-p9_mo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9kIn5TBikNMdADIKAm-Bi-p9_mo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=plm6Om85iSQ:k0Ax6qmZSd4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=plm6Om85iSQ:k0Ax6qmZSd4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=plm6Om85iSQ:k0Ax6qmZSd4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=plm6Om85iSQ:k0Ax6qmZSd4:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=plm6Om85iSQ:k0Ax6qmZSd4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=plm6Om85iSQ:k0Ax6qmZSd4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=plm6Om85iSQ:k0Ax6qmZSd4:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=plm6Om85iSQ:k0Ax6qmZSd4:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=plm6Om85iSQ:k0Ax6qmZSd4:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=plm6Om85iSQ:k0Ax6qmZSd4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=plm6Om85iSQ:k0Ax6qmZSd4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=plm6Om85iSQ:k0Ax6qmZSd4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=plm6Om85iSQ:k0Ax6qmZSd4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=plm6Om85iSQ:k0Ax6qmZSd4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=plm6Om85iSQ:k0Ax6qmZSd4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=plm6Om85iSQ:k0Ax6qmZSd4:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=plm6Om85iSQ:k0Ax6qmZSd4:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/plm6Om85iSQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2010/09/14/exportar-tus-contrasenas-de-lastpass-a-keepassx</feedburner:origLink></entry>
 
 <entry>
   <title>Vuela en internet usando una cache DNS - Dnsmasq en Ubuntu</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/uPdjUcSojXo/vuela-en-internet-usando-una-cache-dns-dnsmasq-en-ubuntu" />
   <updated>2010-08-20T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2010/08/20/vuela-en-internet-usando-una-cache-dns-dnsmasq-en-ubuntu</id>
   <content type="html">&lt;p&gt;Desde hace unos meses para aca mi internet HSDPA ha estado presentando molestos inconveniente los cuales me obligan a
recargar o solicitar las paginas mas de una vez para que estas puedan presentarse completamente y sin errores por lo que
decidi usar una cache DNS con Dnsmasq para probar como puede esto ayudar a mi conexion y que las paginas cargen a la primera
solicitud y sin problemas.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.thekelleys.org.uk/dnsmasq/doc.html"&gt;Dnsmasq&lt;/a&gt; es un servidor DHCP y  DNS ligero y de bajo impacto
para el sistema que nos permite usarlo cachear las peticiones DNS  hacia internet que realiza nuestro computador
pra resolver la IP de un dominio, de manera que cuando se desee accesar de nuevo a un dominio ya resuelto, no se
tenga que volver a solicitar a los servidores DNS en internet sino que se resuelven en la misma PC ya que esta
conoce de antemano la ip correspondiente.&lt;/p&gt;

&lt;p&gt;Antes de instalar Dnsmasq vemos los tiempos aproximados que se tarda mi conexion en resolver la ip de un dominio:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/CdclQ"&gt;&lt;img src="http://i.imgur.com/CdclQl.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para instalar Dnsmasq tan solo debemos ejecutar en la terminal la siguiente orden, pero antes asegurese de tener
activado los repositorios "universe"&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo apt-get install dnsmasq
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Luego de esto pasamos a configurar dnsmasq editando el archivo dnsmasq.conf tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo gedit /etc/dnsmasq.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;descomentamos y modificamos la linea que contiene:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="c"&gt;#listen-address=&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;para que quede de esta manera:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;listen-address&lt;span class="o"&gt;=&lt;/span&gt;127.0.0.1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Luego de esto nos toca editar el cliente DHCP tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo gedit /etc/dhcp3/dhclient.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y nos aseguramos que las siguientes lineas:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;prepend domain-name-servers 127.0.0.1;
request subnet-mask, broadcast-address, &lt;span class="nb"&gt;time&lt;/span&gt;-offset, routers,
domain-name, domain-name-servers, domain-search, host-name,
netbios-name-servers, netbios-scope, interface-mtu,
rfc3442-classless-static-routes, ntp-servers;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;esten descomentada y tenga la IP  127.0.0.1&lt;/p&gt;

&lt;p&gt;Por ultimo nos toca editar el archivo resolv.conf  y agregar la ip de nuestro servidor cache dns local tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo vim /etc/resolv.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y colocamos nuestra IP local de primero en la lista de modo que quede similar a esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;nameserver 127.0.0.1
nameserver 208.67.222.222
nameserver 208.67.220.220
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;por ultimo reiniciamos dnsmasq para que aplique la configuracion:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo /etc/init.d/dnsmasq restart
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Por ultimo consultamos 2 veces el mismo dominio para ver el tiempo que se toma ahora ¿porque dos veces? la primera
para que haga la consulta a internet y permitir que dnsmasq la almacene en cache y la segunda para que se realice
la consulta de manera local ya que dnsmasq conoce ya la ip resultante y no se necesita hacer consultas al exterior.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/hFRl9"&gt;&lt;img src="http://i.imgur.com/hFRl9l.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;como ven ahora es mucho mas rapido si se realizan consultas locales a dominios ya resueltos con anterioridad.&lt;/p&gt;

&lt;p&gt;Saludos y espero le sirva.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/w_Mg5Yo09llZOOohkfcLgyU3vMc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w_Mg5Yo09llZOOohkfcLgyU3vMc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/w_Mg5Yo09llZOOohkfcLgyU3vMc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w_Mg5Yo09llZOOohkfcLgyU3vMc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=uPdjUcSojXo:wXebHZppKaQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=uPdjUcSojXo:wXebHZppKaQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=uPdjUcSojXo:wXebHZppKaQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=uPdjUcSojXo:wXebHZppKaQ:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=uPdjUcSojXo:wXebHZppKaQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=uPdjUcSojXo:wXebHZppKaQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=uPdjUcSojXo:wXebHZppKaQ:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=uPdjUcSojXo:wXebHZppKaQ:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=uPdjUcSojXo:wXebHZppKaQ:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=uPdjUcSojXo:wXebHZppKaQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=uPdjUcSojXo:wXebHZppKaQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=uPdjUcSojXo:wXebHZppKaQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=uPdjUcSojXo:wXebHZppKaQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=uPdjUcSojXo:wXebHZppKaQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=uPdjUcSojXo:wXebHZppKaQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=uPdjUcSojXo:wXebHZppKaQ:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=uPdjUcSojXo:wXebHZppKaQ:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/uPdjUcSojXo" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2010/08/20/vuela-en-internet-usando-una-cache-dns-dnsmasq-en-ubuntu</feedburner:origLink></entry>
 
 <entry>
   <title>Obten tu Ubicacion desde la terminal en Linux - Ubuntu</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/bLm9lFJ51GQ/obten-tu-ubicacion-desde-la-terminal-en-linux-ubuntu" />
   <updated>2010-08-04T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2010/08/04/obten-tu-ubicacion-desde-la-terminal-en-linux-ubuntu</id>
   <content type="html">&lt;p&gt;Navegando por internet me encontre con este script escrito en Bash  que nos permite obtener nuestra ubicacion con tan solo ejecutarlo en la terminal.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;/bin/echo &lt;span class="s1"&gt;&amp;#39;{&amp;quot;version&amp;quot;: &amp;quot;1.1.0&amp;quot;,&amp;quot;host&amp;quot;: &amp;quot;maps.&amp;lt;a title=&amp;quot;google&amp;quot; href=&amp;quot;http://blog.jam.net.ve/tag/google/&amp;quot;&amp;gt;google&amp;lt;/a&amp;gt;.com&amp;quot;,&amp;quot;request_address&amp;quot;: true,&amp;quot;address_language&amp;quot;: &amp;quot;en_GB&amp;quot;, &amp;quot;wifi_towers&amp;quot;: [{&amp;quot;mac_address&amp;quot;: &amp;quot;&amp;#39;&lt;/span&gt; &lt;span class="k"&gt;$(&lt;/span&gt; iwlist wlan0 scan | grep Address | head -1 | awk &lt;span class="s1"&gt;&amp;#39;{print $5}&amp;#39;&lt;/span&gt; | sed -e &lt;span class="s1"&gt;&amp;#39;s/ //g&amp;#39;&lt;/span&gt; &lt;span class="k"&gt;)&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;quot;,&amp;quot;signal_strength&amp;quot;: 8,&amp;quot;age&amp;quot;: 0}]}&amp;#39;&lt;/span&gt;  | sed -e &lt;span class="s1"&gt;&amp;#39;s/&amp;quot; /&amp;quot;/&amp;#39;&lt;/span&gt; -e &lt;span class="s1"&gt;&amp;#39;s/ &amp;quot;/&amp;quot;/g&amp;#39;&lt;/span&gt; &amp;gt; /tmp/post.&lt;span class="nv"&gt;$$&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; curl -X POST -d @/tmp/post.&lt;span class="nv"&gt;$$&lt;/span&gt; http://www.google.com/loc/json | sed -e &lt;span class="s1"&gt;&amp;#39;s/{/n/g&amp;#39;&lt;/span&gt; -e &lt;span class="s1"&gt;&amp;#39;s/,/n/g&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Hay que tener en cuenta de que para que el script funcione correctamente se debe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ejecutar como usuario Root, tecleando sudo antes del script&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deberias estar conectado a una punto de acceso inalambrico Wi-Fi&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;El adaptador de red inalambrico de tu pc debe llamarse wlan0 si no es tu caso cambialo en el script.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;a href="http://imgur.com/KUg90"&gt;&lt;img src="http://i.imgur.com/KUg90l.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Saludos y espero les sirva...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/e3DI84CBOiwa91P78_zRcx-rxbc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e3DI84CBOiwa91P78_zRcx-rxbc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/e3DI84CBOiwa91P78_zRcx-rxbc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e3DI84CBOiwa91P78_zRcx-rxbc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bLm9lFJ51GQ:DGKeciFfB4s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bLm9lFJ51GQ:DGKeciFfB4s:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bLm9lFJ51GQ:DGKeciFfB4s:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bLm9lFJ51GQ:DGKeciFfB4s:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bLm9lFJ51GQ:DGKeciFfB4s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=bLm9lFJ51GQ:DGKeciFfB4s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bLm9lFJ51GQ:DGKeciFfB4s:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bLm9lFJ51GQ:DGKeciFfB4s:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=bLm9lFJ51GQ:DGKeciFfB4s:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bLm9lFJ51GQ:DGKeciFfB4s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bLm9lFJ51GQ:DGKeciFfB4s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=bLm9lFJ51GQ:DGKeciFfB4s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bLm9lFJ51GQ:DGKeciFfB4s:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bLm9lFJ51GQ:DGKeciFfB4s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=bLm9lFJ51GQ:DGKeciFfB4s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=bLm9lFJ51GQ:DGKeciFfB4s:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=bLm9lFJ51GQ:DGKeciFfB4s:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/bLm9lFJ51GQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2010/08/04/obten-tu-ubicacion-desde-la-terminal-en-linux-ubuntu</feedburner:origLink></entry>
 
 <entry>
   <title>Instalando Lighttpd en Centos 5.4 - Otro ligero servicio web a tener en cuenta</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/YT9XQWTtw-8/instalando-lighttpd-en-centos-5-4-otro-ligero-servicio-web-a-tener-en-cuenta" />
   <updated>2010-04-04T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2010/04/04/instalando-lighttpd-en-centos-5-4-otro-ligero-servicio-web-a-tener-en-cuenta</id>
   <content type="html">&lt;p&gt;Como algunos de mis 0.000 lectores ya saben hace ya casi un mes me donaron un servidor dedicado el cual eh estado usando para aprender y estudiar la administracion de servidores y VPS.  Bien, debido a los bajos recursos que tiene este servidor muchos me han recomendado usar servicios web ligeros que consuman pocos procesos y memoria ram. Pues bien como el unico que conocia hasta entonces es &lt;a href="http://blog.jam.net.ve/2010/02/16/instalando-nginx-en-centos/" target="_blank"&gt;Nginx&lt;/a&gt; del cual ya les e hablado y e publicado una explicacion de como instalarlo, fue el primero que instale y configure en el servidor dedicado.&lt;/p&gt;

&lt;p&gt;Pero luego de unos dias de configuracion me tope con un inconveniente, Nginx no me dejaba accesar a phpMyAdmin usando un alias y entrando en la direccion http://miservidor.net.ve/phpmyadmin/.  Despues de casi un mes de busqueda e intento de posibles soluciones, el alias con Nginx nunca me quiso trabajar por lo que tube que dejar Nginx a un lado e intentar con otro servicio web.&lt;/p&gt;

&lt;p&gt;Lighttpd es un servicio web de bajos recursos y muy ligero que me recomendaron varias veces, asi que me decidi a instalarlo y probarlo a  ver que tal tabaja y si hacia lo que queria.&lt;/p&gt;

&lt;p&gt;Bien para instalarlo segui tan solo estos pasos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Primero que nada y al igual a como lo hice en &lt;a href="http://blog.jam.net.ve/2010/02/16/instalando-nginx-en-centos/" target="_blank"&gt;mi publicacion de Nginx&lt;/a&gt;, debemos agregar los repositorios EPEL tecleando en la terminal y dependiendo de la arquitectura de tu S.O&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Para Centos 64bit&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo rpm  -Uvh http://download.fedora.redhat.com/pub/epel/5Server/x86_64/epel-release-5-3.noarch.rpm
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Para Centos 32bit&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo rpm -Uvh http://download.fedora.redhat.com/pub/epel/5Server/i386/epel-release-5-3.noarch.rpm
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Luego de esto ya podemos continuar e instalar Lighttpd tecleando en la terminal:&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;yum install lighttpd
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Luego de esto ya tendremos instalado Lighttpd.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ahora podemos iniciar el servicio tecleando en la terminal:&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;service lighttpd start
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Si nos vamos a el navegador y entramos la ip o dominio de nuestro servidor, podremos ver la pagina predeterminada que coloca Lighttpd. curiosamente la pagina predeterminada te mostrara un error 404 - Not Found, esto se debe a que el directorio raiz de Lighttpd esta vacio y no hay ningun archivo index.html en ella.&lt;/p&gt;

&lt;p&gt;Para cambiar esto tan solo debemos agregar alguna pagina html en el directorio raiz el cual es:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;/srv/www/lighttpd
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Bien para poder tener soporte PHP y poder montar paginas escritas en este lenguaje debemos instalar fastcgi y hacer algunas configuraciones extras.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instalamos los paquetes lighttpd-fastcgi y php-cli&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;yum install lighttpd-fastcgi php-cli
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;luego de esto configuramos lighttpd para que soporte php, abrimos el archivo /etc/php.ini tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;vim /etc/php.ini
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y agregamos al final del archivo esta linea:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;cgi.fix_pathinfo &lt;span class="o"&gt;=&lt;/span&gt; 1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;luego de esto abrimos /etc/lighttpd/lighttpd.conf tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;vim /etc/lighttpd/lighttpd.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y descomentamos la linea que dice mod_fastcgi y mod_alias (quitamos el # ) de modo que quede similar a esta:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;server.modules              &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;
&lt;span class="c"&gt;#                               &amp;quot;mod_rewrite&amp;quot;,&lt;/span&gt;
&lt;span class="c"&gt;#                               &amp;quot;mod_redirect&amp;quot;,&lt;/span&gt;
                                &lt;span class="s2"&gt;&amp;quot;mod_alias&amp;quot;&lt;/span&gt;,
                                &lt;span class="s2"&gt;&amp;quot;mod_access&amp;quot;&lt;/span&gt;,
&lt;span class="c"&gt;#                               &amp;quot;mod_cml&amp;quot;,&lt;/span&gt;
&lt;span class="c"&gt;#                               &amp;quot;mod_trigger_b4_dl&amp;quot;,&lt;/span&gt;
&lt;span class="c"&gt;#                               &amp;quot;mod_auth&amp;quot;,&lt;/span&gt;
&lt;span class="c"&gt;#                               &amp;quot;mod_status&amp;quot;,&lt;/span&gt;
&lt;span class="c"&gt;#                               &amp;quot;mod_setenv&amp;quot;,&lt;/span&gt;
                                &lt;span class="s2"&gt;&amp;quot;mod_fastcgi&amp;quot;&lt;/span&gt;,
&lt;span class="c"&gt;#                               &amp;quot;mod_proxy&amp;quot;,&lt;/span&gt;
&lt;span class="c"&gt;#                               &amp;quot;mod_simple_vhost&amp;quot;,&lt;/span&gt;
&lt;span class="c"&gt;#                               &amp;quot;mod_evhost&amp;quot;,&lt;/span&gt;
&lt;span class="c"&gt;#                               &amp;quot;mod_userdir&amp;quot;,&lt;/span&gt;
&lt;span class="c"&gt;#                               &amp;quot;mod_cgi&amp;quot;,&lt;/span&gt;
&lt;span class="c"&gt;#                               &amp;quot;mod_compress&amp;quot;,&lt;/span&gt;
&lt;span class="c"&gt;#                               &amp;quot;mod_ssi&amp;quot;,&lt;/span&gt;
&lt;span class="c"&gt;#                               &amp;quot;mod_usertrack&amp;quot;,&lt;/span&gt;
&lt;span class="c"&gt;#                               &amp;quot;mod_expire&amp;quot;,&lt;/span&gt;
&lt;span class="c"&gt;#                               &amp;quot;mod_secdownload&amp;quot;,&lt;/span&gt;
&lt;span class="c"&gt;#                               &amp;quot;mod_rrdtool&amp;quot;,&lt;/span&gt;
                                &lt;span class="s2"&gt;&amp;quot;mod_accesslog&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Mas abajo buscamos fastcgi.server y descomentamos de modo que quede similar a esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="c"&gt;#### fastcgi module&lt;/span&gt;
&lt;span class="c"&gt;## read fastcgi.txt for more info&lt;/span&gt;
&lt;span class="c"&gt;## for PHP don&amp;#39;t forget to set cgi.fix_pathinfo = 1 in the php.ini&lt;/span&gt;
fastcgi.server             &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;.php&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;
                               &lt;span class="o"&gt;(&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;localhost&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;
                                 &lt;span class="o"&gt;(&lt;/span&gt;
                                   &lt;span class="s2"&gt;&amp;quot;socket&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&amp;gt; &lt;span class="s2"&gt;&amp;quot;/tmp/php-fastcgi.socket&amp;quot;&lt;/span&gt;,
                                   &lt;span class="s2"&gt;&amp;quot;bin-path&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&amp;gt; &lt;span class="s2"&gt;&amp;quot;/usr/bin/php-cgi&amp;quot;&lt;/span&gt;
                                 &lt;span class="o"&gt;)&lt;/span&gt;
                               &lt;span class="o"&gt;)&lt;/span&gt;
                            &lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Guardamos los cambios y salimos del editor.&lt;/p&gt;

&lt;p&gt;Nota: si en esta seccion de tu lighttpd.conf en la propiedad "socket" aparece alguna otra ruta distinta a /tmp/php-fastcgi.socket cambialo y dejalo igual a como aparece arriba.&lt;/p&gt;

&lt;p&gt;Luego de esto debes reiniciar Lighttpd para que se apliquen los cambios tecleando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;service lighttpd restart
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;con esto ya tendremos Lighttpd funcionando y ejecutando script php mediante fastcgi, podemos comprobar el funcionamiento colocando en el directorio raiz cualquier archivo .php y accesando a el por medio de la ip o dominio del servidor.&lt;/p&gt;

&lt;p&gt;Pero bueno como les comentaba mas arriba lo que me hizo cambiar de Nginx a Lighttpd es probar y configurar un alias que me permitiera accesar al phpmyadmin, esto lo hice de la siguiente manera:&lt;/p&gt;

&lt;p&gt;abrimos una vez mas el archivo lighttpd.conf tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;vim /etc/lighttpd/lighttpd.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y agregamos en cualquier parte del archivo la siguiente linea:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;alias.url &lt;span class="o"&gt;=(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;/phpmyadmin/&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;  &lt;span class="s2"&gt;&amp;quot;/tu/ruta/al/phpmyadmin/&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Nota: cambiar "/tu/ruta/al/phpmyadmin/" por la direccion donde tienes instalado phpmyadmin, por ejemplo en mi servidor esta en "/usr/share/phpmyadmin"&lt;/p&gt;

&lt;p&gt;guardamos los cambios y reiniciamos de nuevo el servicio Lighttpd.&lt;/p&gt;

&lt;p&gt;una vez realizado el cambio podemos comprobar que funciona ingresando en el navegador http://tuservidor.net.ve/phpmyadmin&lt;/p&gt;

&lt;p&gt;si todo a ido bien, ya deberias poder entrar a phpMyAdmin.&lt;/p&gt;

&lt;p&gt;Saludos y espero les sirva tanto como a mi.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GTuuCN6TrhuzxX0ehm70ea9JsMg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GTuuCN6TrhuzxX0ehm70ea9JsMg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GTuuCN6TrhuzxX0ehm70ea9JsMg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GTuuCN6TrhuzxX0ehm70ea9JsMg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=YT9XQWTtw-8:dYO3aRoAXwc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=YT9XQWTtw-8:dYO3aRoAXwc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=YT9XQWTtw-8:dYO3aRoAXwc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=YT9XQWTtw-8:dYO3aRoAXwc:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=YT9XQWTtw-8:dYO3aRoAXwc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=YT9XQWTtw-8:dYO3aRoAXwc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=YT9XQWTtw-8:dYO3aRoAXwc:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=YT9XQWTtw-8:dYO3aRoAXwc:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=YT9XQWTtw-8:dYO3aRoAXwc:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=YT9XQWTtw-8:dYO3aRoAXwc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=YT9XQWTtw-8:dYO3aRoAXwc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=YT9XQWTtw-8:dYO3aRoAXwc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=YT9XQWTtw-8:dYO3aRoAXwc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=YT9XQWTtw-8:dYO3aRoAXwc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=YT9XQWTtw-8:dYO3aRoAXwc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=YT9XQWTtw-8:dYO3aRoAXwc:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=YT9XQWTtw-8:dYO3aRoAXwc:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/YT9XQWTtw-8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2010/04/04/instalando-lighttpd-en-centos-5-4-otro-ligero-servicio-web-a-tener-en-cuenta</feedburner:origLink></entry>
 
 <entry>
   <title>Migrando tu blog Wordpress de hosting - Un metodo mas</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/8eV-aX8St0I/migrando-tu-blog-wordpress-de-hosting-un-metodo-mas" />
   <updated>2010-03-15T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2010/03/15/migrando-tu-blog-wordpress-de-hosting-un-metodo-mas</id>
   <content type="html">&lt;p&gt;Desde que empece este blog e tenido que aprender por mi cuenta y en ocasiones de mala manera la administracion, uso y configuracion de
Wordpress. Una de las cosas que tube que aprender a hacer y que en un principio siempre me daban fallos al realizarlas es migrar el blog
de hosting. Como ninguno de mis lectores saben y ya han podido leer aqui, hubo un tiempo en el que tenia
&lt;a href="http://blog.jam.net.ve/2009/08/17/de-nuevo-problemas-con-el-hosting/"&gt;innumerables problemas&lt;/a&gt; con mi anterior proveedor
de hosting el cual me migraba a cada rato de servidor para intentar solventar la situacion.  En esas migraciones el traslado
del contenido del blog y la base de datos se hacia sacando backups con las herramientas del panel de control web cPanel y luego
eran restauradas en el nuevo servidor, No se porque pero siempre me quedaba mal el blog luego de estas migraciones y restauraciones
mediante cPanel.&lt;/p&gt;

&lt;p&gt;Uno de los motivos de estos errores me di cuenta que era que al migrar la base de datos esta quedaba con la vieja ruta de la cuenta de
hosting en donde estaba el contenido del blog en el servidor, por lo que en el nuevo servidor si esta ruta no era la misma, se terminaba
el mundo.&lt;/p&gt;

&lt;p&gt;Bien luego de esto y en otro proceso de migracion de servidor mas, me propuse hacerlo yo mismo y a mi modo y paso a explicar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primero que nada debemos realizar un respaldo de los archivos del blog, si tu blog esta en una carpeta podemos comprimir esta y
descargarla para luego trasladarla al nuevo servidor. Esto lo podemos hacer por medio del cPanel con la herramienta
"Administrador de Archivos" seleccionamos la carpeta con el contenido del blog y le damos a "Comprimir"&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;a href="http://imgur.com/sfcjt"&gt;&lt;img src="http://i.imgur.com/sfcjtl.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/lV9ph"&gt;&lt;img src="http://i.imgur.com/lV9phl.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Luego de esto debemos sacar un respaldo a la Base de Datos del blog, esto lo podemos hacer usando el PhpMyAdmin que esta en el
cPanel, dandole a la pestaña "Exportar" luego seleccionamos la base de datos en el recuadro del lado superior izquierdo y marcamos la
opcion "SQL" en la parte inferior izquierda. Si deseamos comprimir la base de datos la comprimimos seleccionando cualquiera de los dos
formatos disponibles y le damos a continuar. Esto nos iniciara la descarga de la base de datos de nuetro blog.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;a href="http://imgur.com/Dn9rU"&gt;&lt;img src="http://i.imgur.com/Dn9rUl.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/L7m68"&gt;&lt;img src="http://i.imgur.com/L7m68l.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/mmTy0"&gt;&lt;img src="http://i.imgur.com/mmTy0s.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Antes que nada deberiamos verificar que en el nuevo servidor nuestro directorio home se llame igual que en el servidor anterior, 
esto en cPanel lo podemos verificar en el panel superior izquierda en donde dice "Directorio Home" si es el mismo podemos pasar a
importar la base de datos en el nuevo servidor por medio de phpMyAdmin, de lo contrario debemos editar la base de datos como explico
a continuacion.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bien una vez descargada la base de datos pasamos a abrir el archivo .sql en tu editor de codigo favorito
(si usas Windows y la base de datos es de unos cuantos megas no uses el blog de notas, simplemente no esta hecho para esto)
y buscamos la linea en donde este la direccion de nuestro directorio home es algo similar a esto:&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;  /home/usuarioviejoservidor/public_html/blog/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y cambiamos el nombre de usuario para que quede&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;  /home/usuarionuevoservidor/public_html/blog/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;una vez editada la base de datos guardamos los cambios y podemos proceder a importarla en el nuevo servidor por medio de phpMyAdmin
seleccionando la pestaña "Importar" y luego agregando la ruta de la base de datos en nuestra pc por medio del boton
"Browse" le damos al boton "Continuar"&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/KD0fs"&gt;&lt;img src="http://i.imgur.com/KD0fss.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;si todo a ido bien deberiamos tener importada con exito la base de datos de nuetro blog en el nuevo servidor.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ahora debemos importar en el nuevo servidor los archivos de nuestro blog, para hacer esto podemos subir el archivo comprimido
por medio de nuestro cliente FTP favorito o tambien por medio de la terminal situandonos en la raiz de nuestra carpeta web
publica (public_html o httpd o html) usando el comando "wget" de este modo:&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;  wget http://www.tuviejohosting.com/archivos-blog.zip
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;una ves transferido los archivos al nuevo hosting debemos descomprimirlo, para esto podemos usar de nuevo el
"Administrador de archivos" en el cPanel, seleccionamos el archivo compromido y le damos a la opcion "Extraer"&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/lV9ph"&gt;&lt;img src="http://i.imgur.com/lV9phl.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bien ahora solo nos falta configurar la nueva conexion entre el blog y la base de datos, para esto debemos crear el usuario
de la base de datos en el nuevo servidor y otorgarles sus respectivos privilegios, esto lo podemos hacer en el mismo cPanel
en la opcion "MySql Basesde Datos".&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;a href="http://imgur.com/ftMQd"&gt;&lt;img src="http://i.imgur.com/ftMQdl.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como nombre de usuarios puedes usar los mismos que tenias en el anterior hosting, al igual que la contraseña
(aunque es aconsejable cambiarla para mayor seguridad).  Tambien en esta misma seccion del cPanel debemos añadir el usuario
que acabas de crear a la base de datos que acabamos de importar para que este sea el que tenga privilegios de uso
de esa base de datos en especifico.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bien por ultimo ya solo debemos  editar el archivo wp-config.php de nuestro blog y agregar los nuevos datos de conexion
como el nombre de la base de datos, el usuario y la contraseña.  Una vez listo tan solo debemos subirlo y remplazarlo por
el que ya estaba en el nuevo hosting con la informacion del viejo servidor.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Bien para este momento ya deberia estar todo bien y funcionando correctamente, pero si como yo tienes las url de
los permalinks (enlaces permanentes) personalizadas, deberas apuntar tu viejo dominio a el nuevo hosting y esperar
a que los cambios en los DNS se rieguen por todo internet para poder ver correctamente el contendido del blog y
para que puedan funcionar los enlaces. Esto por lo general dura como mucho unas horas o mas, pero tambien puede
que este en mucho menos tiempo, asi que tan solo queda esperar y listo.&lt;/p&gt;

&lt;p&gt;Saludos y espero que les haya servido tanto como a mi.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iPnpePI4vlEkNL2-ymQgTgfzBNo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iPnpePI4vlEkNL2-ymQgTgfzBNo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iPnpePI4vlEkNL2-ymQgTgfzBNo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iPnpePI4vlEkNL2-ymQgTgfzBNo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=8eV-aX8St0I:PM8UXl0pcQo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=8eV-aX8St0I:PM8UXl0pcQo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=8eV-aX8St0I:PM8UXl0pcQo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=8eV-aX8St0I:PM8UXl0pcQo:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=8eV-aX8St0I:PM8UXl0pcQo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=8eV-aX8St0I:PM8UXl0pcQo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=8eV-aX8St0I:PM8UXl0pcQo:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=8eV-aX8St0I:PM8UXl0pcQo:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=8eV-aX8St0I:PM8UXl0pcQo:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=8eV-aX8St0I:PM8UXl0pcQo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=8eV-aX8St0I:PM8UXl0pcQo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=8eV-aX8St0I:PM8UXl0pcQo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=8eV-aX8St0I:PM8UXl0pcQo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=8eV-aX8St0I:PM8UXl0pcQo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=8eV-aX8St0I:PM8UXl0pcQo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=8eV-aX8St0I:PM8UXl0pcQo:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=8eV-aX8St0I:PM8UXl0pcQo:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/8eV-aX8St0I" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2010/03/15/migrando-tu-blog-wordpress-de-hosting-un-metodo-mas</feedburner:origLink></entry>
 
 <entry>
   <title>Instalando Webmin en VPS con CentOS/Debian</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/TuexCMMGQu0/instalando-webmin-en-centos-debian" />
   <updated>2010-02-16T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2010/02/16/instalando-webmin-en-centos-debian</id>
   <content type="html">&lt;p&gt;Hace unos cuantos meses me dio por  leer un poco, investigar y aprender como administrar servidores web tanto dedicados como VPS, para mis primeras pruebas instale Debian 5.03 en mi PC y le agrege todo lo necesario como para tener un servidor web en la plataforma LAMP ademas del servidor Open-SSH para poder conectarnos de forma remota y administrar por medio de SSH.&lt;/p&gt;

&lt;p&gt;Una de las cosas que tambien quise agregarle al servidor y que me facilitaria algo la administracion del servidor es tener un panel de control, pero en este caso uno gratuito ya que por los momentos este servidor seria solo para pruebas, ademas no hay fuertes como para pagar licencias jejejeje.&lt;/p&gt;

&lt;p&gt;El panel que elegi es &lt;a href="http://webmin.com" target="_blank"&gt;Webmin&lt;/a&gt; el cual es gratuito y tiene todo o casi todo lo necesario como para administrar el servidor.&lt;/p&gt;

&lt;p&gt;Para instalarlo nos podemos descargar el paquete .deb de Webmin tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;wget -c http://prdownloads.sourceforge.net/webadmin/webmin_1.500_all.deb
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Pero antes de instalarlo debemos cumplir e instalar algunas dependencias de webmin, para esto tecleamos en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="c"&gt;# apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl libmd5-perl&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;una ves descargado e instalada las dependencias, lo instalamos webmin teclando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;dpkg --install webmin_1.500_all.deb
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Si todo nos a salido bien deberiamos terner instalado Webmin, para comprobarlo y accesar de una vez a nuestro panel de control abrimos el navegador y colocamos  en la barra de direcciones:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;http://localhost:10000
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;El puerto 10000 es en el que el servicio de webmin escucha para poder permitirnos entrar al panel, pero en ocaciones y luego de una instalacion no es posible accesar ya que el servicio de webmin no esta corriendo. para iniciarlo teclamos en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt; service webmin start
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;e ingresamos de nuevo http://localhost:10000 en el navegador.&lt;/p&gt;

&lt;p&gt;y listo tenemos nuestro panel de control instalado y funcionando.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/HCRI4"&gt;&lt;img src="http://i.imgur.com/HCRI4l.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bien pero el post menciona tambien a CentOS, pues hace unas semanas pude tener acceso a un VPS para hacer pruebas, y una de las primeras cosas que hice fue instalar Webmin. Este VPS tiene como sistema operativo CentOS 5.4 y los pasos para instalar Webmin son basicamente los mismo.&lt;/p&gt;

&lt;p&gt;En primer lugar nos descargamos el paquete .rpm de Webmin tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;wget -c http://prdownloads.sourceforge.net/webadmin/webmin-1.500-1.noarch.rpm
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;una ves descargado, lo instalamos tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;rpm -U webmin-1.500-1.noarch.rpm
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Si todo nos a salido bien deberiamos terner instalado Webmin, para comprobarlo y accesar de una vez a nuestro panel de control abrimos el navegador y colocamos  en la barra de direcciones:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;http://localhost:10000
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;en caso de que el servicio no tampoco este corriendo podemos hacer igual que con debian y teclear el comando para iniciar el servicio de Webmin.&lt;/p&gt;

&lt;p&gt;Otro inconveniente que puede suceder es que algunos de los modulos de Firewall que estes corriendo en Linux, te este bloqueando el puerto de escucha de webmin, para añadir una exepcion y permitirnos accesar al panel de control de webmin desde el navegador debemos editar el archivo correspondiente a nuestra distribucion.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Para sistemas &lt;strong&gt;RedHat&lt;/strong&gt; y derivados como por ejemplo &lt;strong&gt;Fedora&lt;/strong&gt; o &lt;strong&gt;CentOS&lt;/strong&gt; editamos el archivo &lt;strong&gt;iptables&lt;/strong&gt; ubicado en &lt;strong&gt;/etc/sysconfig/iptables&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Para editarlo tecleamos en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;nano /etc/sysconfig/iptables
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y agregamos esta linea :&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;-A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Para sistemas &lt;strong&gt;Debian&lt;/strong&gt; y derivados como&lt;strong&gt; Ubuntu&lt;/strong&gt; editamos el mismo archivo &lt;strong&gt;iptables&lt;/strong&gt; pero en este caso lo ubicaremos en &lt;strong&gt;/var/lib/iptables&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Para editarlo tecleamos en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;nano /var/lib/iptables
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y agregamos la linea:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;-A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;ahora reiniciamos iptables tecleando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;sudo /etc/init.d/iptables
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Listo espero que le sirvan tanto como a mi.&lt;/p&gt;

&lt;p&gt;Links de interes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://webmin.com/download.html" target="_blank"&gt;Descarga de Webmin&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://webmin.com/deb.html" target="_blank"&gt;Instalacion desde paquete .Deb&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://webmin.com/rpm.html" target="_blank"&gt;Instalacion desde paquete .Rpm&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://webmin.com/firewall.html" target="_blank"&gt;Añadiendo exepcion al firewall&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/S6yRKQRaT2ptaKlsYl4spZ6_t9M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/S6yRKQRaT2ptaKlsYl4spZ6_t9M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/S6yRKQRaT2ptaKlsYl4spZ6_t9M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/S6yRKQRaT2ptaKlsYl4spZ6_t9M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TuexCMMGQu0:WCUzFFnqzms:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TuexCMMGQu0:WCUzFFnqzms:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TuexCMMGQu0:WCUzFFnqzms:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TuexCMMGQu0:WCUzFFnqzms:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TuexCMMGQu0:WCUzFFnqzms:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=TuexCMMGQu0:WCUzFFnqzms:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TuexCMMGQu0:WCUzFFnqzms:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TuexCMMGQu0:WCUzFFnqzms:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=TuexCMMGQu0:WCUzFFnqzms:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TuexCMMGQu0:WCUzFFnqzms:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TuexCMMGQu0:WCUzFFnqzms:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=TuexCMMGQu0:WCUzFFnqzms:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TuexCMMGQu0:WCUzFFnqzms:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TuexCMMGQu0:WCUzFFnqzms:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=TuexCMMGQu0:WCUzFFnqzms:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=TuexCMMGQu0:WCUzFFnqzms:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=TuexCMMGQu0:WCUzFFnqzms:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/TuexCMMGQu0" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2010/02/16/instalando-webmin-en-centos-debian</feedburner:origLink></entry>
 
 <entry>
   <title>Instalando Nginx en CentOS</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/gnlAivg7YOY/instalando-nginx-en-centos" />
   <updated>2010-02-16T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2010/02/16/instalando-nginx-en-centos</id>
   <content type="html">&lt;p&gt;En mi anterior post  les explicaba como &lt;a href="http://blog.jam.net.ve/2010/02/16/instalando-webmin-en-centos-debian/" target="_blank"&gt;instalar el panel de control Webmin&lt;/a&gt; y les comentaba que me habia hecho con un VPS para pruebas y aprendizaje  el cual tiene CentOS como Sistema Operativo. Bueno este VPS que me fue ofrecido es Unmanaged, es decir "No Administrado" lo que significa que el proveedor no me ofrece soporte tecnico completo.  en pocas palabras:  "que yo debo hacer absolutamente todo".  Bien eso es lo que me gusta puesto que la idea principal es aprender.&lt;/p&gt;

&lt;p&gt;Uno de los principales problemas con lo que me tope apenas tube los datos de acceso en mis manos fue que el VPS tiene poca memoria Ram, unos 128Mb para ser exactos. Esto me pone el trabajo un poco mas dificil pues no es memoria suficientes como para instalar y poner a funcionar simultaneamente y sin muchas configuraciones el Apache, MySQL, PHP, Bind, FTP, Webmin, correos POP3/SMTP/IMAP, etc....   Bien ya con esto entendi que no podia hacer ni exigirle mucho al VPS, pero algo tenia que hacer, al menos deberia poder lograr agregarle un dominio para accesar por medio de ese dominio  y no por la ip, y poder montar por lo menos una pagina estatica y quitar la que estaba por defecto.&lt;/p&gt;

&lt;p&gt;Una de las cosas en la que me fije es que el servicio web Apache consume considerablemente la poca memoria ram disponible y junto al servicio DNS Bind y el servicio de Webmin se tiraban los 128Mb de ram poniendo el VPS en riesgo de que se reinicie o cuelgue.  Bien el servicio Webmin solo se ejecuta cuando quiero accesar al panel, asi que el resto del tiempo esta detenido y sin consumir ni un solo kb de la ram. El servicio Bind, por los momentos no e hallado manera de hacer que consuma menos ram pero es de vital importancia tenerlo ejecutandose para que pueda resolver los dominios y demas configuraciones DNS que le tengo.&lt;/p&gt;

&lt;p&gt;Asi que esto de momento me deja con Apache en la mira, pues bien le tengo un sustituto que consume muy poca memoria ram y se ejecuta en tan solo dos procesos contra los nueve que me muestra el Apache. El servidor web que les menciono se llama &lt;a href="http://www.nginx.org/" target="_blank"&gt;Nginx&lt;/a&gt; y es un servidor web gratuito cuyas principales ventajas es que es super rapido, estable y lo mas importante, muy ligero.&lt;/p&gt;

&lt;p&gt;Para instalarlo en CentOS primero debemos instalar los Repositorios EPEL tecleando en la terminal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Para versiones de 64Bits&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo rpm -Uvh http://download.fedora.redhat.com/pub/epel/5Server/x86_64/epel-release-5-3.noarch.rpm
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Para versiones de 32Bits&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo rpm -Uvh http://download.fedora.redhat.com/pub/epel/5Server/i386/epel-release-5-3.noarch.rpm
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Instalado dichos repositorios ahora podremos instalar Nginx usando el comando Yum, para esto tecleamos en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo yum install nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Durante el proceso se te preguntara si deseas importar la llave GPG de EPEL y te aparecera algo como esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID 217521f6 Importing GPG key 0x217521F6 Fedora EPEL epel@fedoraproject.org from /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL Is this ok &lt;span class="o"&gt;[&lt;/span&gt;y/N&lt;span class="o"&gt;]&lt;/span&gt;:
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Presionamos la tecla "Y"  para aceptar y finalizar con la instalacion.&lt;/p&gt;

&lt;p&gt;Ahora ya deberiamos tener instalado nuestro servidor web de bajo consumo en el servidor, tan solo nos falta iniciarlo tecleando en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;service nginx start
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y nos vamos a nuestro navegador ingresamos nuestra ip o dominio si el servidor esta online, o "localhost" si es una instalacion local en nuestra pc.&lt;/p&gt;

&lt;p&gt;con esto veremos la pagina por defecto de Nginx la cual es algo como esto&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/N3UNu"&gt;&lt;img src="http://i.imgur.com/N3UNul.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bien a mi este cambio de Apache a Nginx me a ido como anillo al dedo pues e podido ahorrar algo de memoria ram y procesos en el cpu que puedo invertir para ejecutar otras aplicaciones que necesite o para no quedarme tan corto en cuanto a memoria ram disponible.&lt;/p&gt;

&lt;p&gt;Aqui podemos ver el consumo de memoria y procesos en ejecucion teniendo Apache ejecutandose como servidor web.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/z4TUu"&gt;&lt;img src="http://i.imgur.com/z4TUu.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;y aqui vemos como nos a quedado el VPS ejecutando Nginx como servidor web.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/VRgUx"&gt;&lt;img src="http://i.imgur.com/VRgUx.png" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Un ahorro de aproximadamente 15Mb de memoria Ram y un ahorro de 7 procesos menos en ejecucion!!!!!&lt;/p&gt;

&lt;p&gt;Saludos y espero les sirva tanto como a mi.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EVZB2VKjAgkxZw9Qa6zQNgTX2o0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EVZB2VKjAgkxZw9Qa6zQNgTX2o0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EVZB2VKjAgkxZw9Qa6zQNgTX2o0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EVZB2VKjAgkxZw9Qa6zQNgTX2o0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=gnlAivg7YOY:-MMyh7GREHk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=gnlAivg7YOY:-MMyh7GREHk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=gnlAivg7YOY:-MMyh7GREHk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=gnlAivg7YOY:-MMyh7GREHk:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=gnlAivg7YOY:-MMyh7GREHk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=gnlAivg7YOY:-MMyh7GREHk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=gnlAivg7YOY:-MMyh7GREHk:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=gnlAivg7YOY:-MMyh7GREHk:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=gnlAivg7YOY:-MMyh7GREHk:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=gnlAivg7YOY:-MMyh7GREHk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=gnlAivg7YOY:-MMyh7GREHk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=gnlAivg7YOY:-MMyh7GREHk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=gnlAivg7YOY:-MMyh7GREHk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=gnlAivg7YOY:-MMyh7GREHk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=gnlAivg7YOY:-MMyh7GREHk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=gnlAivg7YOY:-MMyh7GREHk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=gnlAivg7YOY:-MMyh7GREHk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/gnlAivg7YOY" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2010/02/16/instalando-nginx-en-centos</feedburner:origLink></entry>
 
 <entry>
   <title>Instalando Drivers Madwifi en Ubuntu 9.10 (Atheros Ar928X)</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/KSd6dGce7D8/instalando-drivers-madwifi-en-ubuntu-9-10-atheros-ar928x" />
   <updated>2009-12-14T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2009/12/14/instalando-drivers-madwifi-en-ubuntu-9-10-atheros-ar928x</id>
   <content type="html">&lt;p&gt;Hace unas semanas atras estaba comentando que habia instalado Ubuntu 9.10 en mi laptop y que estaba intentando colocar el chip inalambrico en modo monitor para hacer auditorias wifi (contra mi router), Por fin e logrado instalar los drivers Madwifi para mi tarjeta inalambrica la cual es una Atheros AR5009 o como en la web de Madwifi se conoce como AR928X.&lt;/p&gt;

&lt;p&gt;Despues de buscar un manual o explicacion para instalarlos, la verdad encontre demasiadas formas de hacerlo, ademas de 3 drivers distintos que podia usar (compat-wireless-2.6.31-rc7, madwifi-hal-0.10.5.6-r4100-20090929 y el madwifi-0.9.4-current) me fui por la explicacion de la pagina &lt;a title="Drivers para Ath9k" href="http://linuxwireless.org/en/users/Drivers/ath9k" target="_blank"&gt;LinuxWireless&lt;/a&gt; e instale el driver madwifi-hal-0.10.5.6-r4100-20090929  ya que me parecio el mas completo de los tres (en realidad es el mas pesado 4.2Mb).&lt;/p&gt;

&lt;p&gt;Para instalarlo solo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Descague el Drivers desde el &lt;a href="http://snapshots.madwifi-project.org/" target="_blank"&gt;Snapshot de Madwifi&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Luego Descomprimimos y abrimos la carpeta en la terminal&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;madwifi-hal-0.10.5.6-r4100-20090929
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;-Ahora  compilamos.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo make
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y ahora instalamos&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo make install
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;con esto ya deberia de tener corrctamente instalado los drivers.&lt;/p&gt;

&lt;p&gt;pero como ando buscando es colocarlo en modo monitor entonces instale el Aircrack-ng:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo apt-get install aircrack-ng
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y configure la inalambrica en modo monitor en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;airmon-ng start wlan0
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;con esto deberia de haber activado el modo monitor, para comprobarlo teclee en la terminal:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;iwconfig
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;el cual me devolvio algo como esto:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;lo        no wireless extensions.
eth0      no wireless extensions.
wlan0     IEEE 802.11abgn  ESSID:&amp;amp;quot;Mi Router&amp;amp;quot;
 Mode:Managed  Frequency:2.437 GHz  Access Point: XX:XX:XX:XX:XX:XX
 Bit &lt;span class="nv"&gt;Rate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;54 Mb/s   Tx-Power&lt;span class="o"&gt;=&lt;/span&gt;20 dBm
 Retry  long limit:7   RTS thr:off   Fragment thr:off
 Power Management:on
 Link &lt;span class="nv"&gt;Quality&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;70/70  Signal &lt;span class="nv"&gt;level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;-31 dBm
 Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
 Tx excessive retries:0  Invalid misc:0   Missed beacon:0

mon0      IEEE 802.11abgn  Mode:Monitor  Frequency:2.437 GHz  Tx-Power&lt;span class="o"&gt;=&lt;/span&gt;20 dBm
 Retry  long limit:7   RTS thr:off   Fragment thr:off
 Power Management:on
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;notese que se agrego una nueva interfaz el cual se llama "mon0"  esta es la interfaz que se utilizara para trabajar en modo monitor, capturar e inyectar paquetes.&lt;/p&gt;

&lt;p&gt;solo resta ahora instalar algunas otras herramientas al gusto de cada quien, en mi caso aparte de Aircrack instale Kismet el cual me instalo a la vez el WireShark. Con este ultimo puedo usar la interfaz mon0 como interfaz de captura para (valga la rebusnancia ) capturar paquetes.&lt;/p&gt;

&lt;p&gt;Espero que les sirva esta info tanto como a mi.&lt;/p&gt;

&lt;p&gt;Saludos.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xQI52EUMxuIr3LbaBauucDEcxnE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xQI52EUMxuIr3LbaBauucDEcxnE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xQI52EUMxuIr3LbaBauucDEcxnE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xQI52EUMxuIr3LbaBauucDEcxnE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=KSd6dGce7D8:h3__o66YgAQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=KSd6dGce7D8:h3__o66YgAQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=KSd6dGce7D8:h3__o66YgAQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=KSd6dGce7D8:h3__o66YgAQ:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=KSd6dGce7D8:h3__o66YgAQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=KSd6dGce7D8:h3__o66YgAQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=KSd6dGce7D8:h3__o66YgAQ:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=KSd6dGce7D8:h3__o66YgAQ:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=KSd6dGce7D8:h3__o66YgAQ:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=KSd6dGce7D8:h3__o66YgAQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=KSd6dGce7D8:h3__o66YgAQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=KSd6dGce7D8:h3__o66YgAQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=KSd6dGce7D8:h3__o66YgAQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=KSd6dGce7D8:h3__o66YgAQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=KSd6dGce7D8:h3__o66YgAQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=KSd6dGce7D8:h3__o66YgAQ:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=KSd6dGce7D8:h3__o66YgAQ:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/KSd6dGce7D8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2009/12/14/instalando-drivers-madwifi-en-ubuntu-9-10-atheros-ar928x</feedburner:origLink></entry>
 
 <entry>
   <title>Instalar, Reconfigurar y Eliminar Xorg sin Reinstalar Ubuntu.</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/IrbLKAm07QQ/instalar-reconfigurar-y-eliminar-xorg-sin-reinstalar-ubuntu" />
   <updated>2009-09-27T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2009/09/27/instalar-reconfigurar-y-eliminar-xorg-sin-reinstalar-ubuntu</id>
   <content type="html">&lt;p&gt;X.Org es una implementación de código abierto del sistema X Windows System.   Para instalar, configurar o eliminar xorg sin reinstalar Ubuntu tan solo abre la consola y teclea el comando segun sea tu caso:&lt;/p&gt;

&lt;p&gt;-  Instalar Xorg&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo apt-get install xserver-xorg
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Configurar Xorg&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo dpkg-reconfigure xserver-xorg
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Eliminar Xorg&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo apt-get remove --purge xserver-xorg
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Espero les sea de utilidad.&lt;/p&gt;

&lt;p&gt;Fuente: &lt;a href="http://www.ubuntugeek.com/ubuntu-tiphow-to-removeinstall-and-reconfigure-xorg-without-reinstalling-ubuntu.html" target="_blank"&gt;UbuntuGeek&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3h0IZpBUb0LgSURoXLnMWmEv8ZA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3h0IZpBUb0LgSURoXLnMWmEv8ZA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3h0IZpBUb0LgSURoXLnMWmEv8ZA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3h0IZpBUb0LgSURoXLnMWmEv8ZA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=IrbLKAm07QQ:hmtpK1dG1f0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=IrbLKAm07QQ:hmtpK1dG1f0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=IrbLKAm07QQ:hmtpK1dG1f0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=IrbLKAm07QQ:hmtpK1dG1f0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=IrbLKAm07QQ:hmtpK1dG1f0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=IrbLKAm07QQ:hmtpK1dG1f0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=IrbLKAm07QQ:hmtpK1dG1f0:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=IrbLKAm07QQ:hmtpK1dG1f0:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=IrbLKAm07QQ:hmtpK1dG1f0:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=IrbLKAm07QQ:hmtpK1dG1f0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=IrbLKAm07QQ:hmtpK1dG1f0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=IrbLKAm07QQ:hmtpK1dG1f0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=IrbLKAm07QQ:hmtpK1dG1f0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=IrbLKAm07QQ:hmtpK1dG1f0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=IrbLKAm07QQ:hmtpK1dG1f0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=IrbLKAm07QQ:hmtpK1dG1f0:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=IrbLKAm07QQ:hmtpK1dG1f0:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/IrbLKAm07QQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2009/09/27/instalar-reconfigurar-y-eliminar-xorg-sin-reinstalar-ubuntu</feedburner:origLink></entry>
 
 <entry>
   <title>Antena Sectorial Ranurada de 8 agujeros</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/-Ik4T8u-oCY/antena-sectorial-ranurada-de-8-agujeros" />
   <updated>2009-07-28T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2009/07/28/antena-sectorial-ranurada-de-8-agujeros</id>
   <content type="html">&lt;p&gt;Bueno como les habia dicho hace meses en un comentario de la antena parabolica DTV, estaba por hacer la antena ranurada de 8 agujeros.&lt;/p&gt;

&lt;p&gt;Este fin de semana porfin me puse a fabricarla y aqui se la muestro:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/D4YZA"&gt;&lt;img src="http://i.imgur.com/D4YZAl.jpg" title="Antena Sectorial Ranurada" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Increiblemente alli en donde esta, detectaba la señal del AP a unos 500mts (claro muy baja la señal y con muchas caidas) :D&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/cjvBS"&gt;&lt;img src="http://i.imgur.com/cjvBSs.jpg" title="Senal baja" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/VrYTE"&gt;&lt;img src="http://i.imgur.com/VrYTEs.jpg" title="Antena Elevada" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como en donde la tenia colocada, no me generaba una buena señal, la eleve un poco ( esto es lo mas que pude) para conseguir una mejor señal&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/mREaQ"&gt;&lt;img src="http://i.imgur.com/mREaQs.jpg" title="AP a 500mts" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Este AP esta ubicado a unos 450Mts o 500 Mts de distancia, la linea de vista no es la mejor ya que hay muchos arboles altos (junto a la sectoria hay uno que la tapa toda ) , techos de las casas, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/hAiYU"&gt;&lt;img src="http://i.imgur.com/hAiYUs.jpg" title="Senal alta" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;con todo y ese estorbo en la linea de vista, logre realizar la conexion con el AP y mejorar la seña tal como se ve aca.&lt;/p&gt;

&lt;p&gt;Bueno, para realizar esta antena se utilizo:&lt;/p&gt;

&lt;p&gt;- 1 Conector N  macho crimpeable.&lt;/p&gt;

&lt;p&gt;- 1 Conector N hembra de chasis.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cable RG58U - 6mts&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;- 1 Tubo de aluminio 765mm (76.5cm) de largo, 100mm (10cm) de ancho y 40mm (4cm) de profundo.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1 Lata de Aluminio (cerverza o refresco) para el cono del conector.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;personalmente me guie mas con los planos que estan el la web de &lt;a href="http://www.calabozo-wireless.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=19&amp;amp;Itemid=2" target="_blank"&gt;Calabozo-Wireless&lt;/a&gt;. alli estan los planos bien detallados y entendibles.&lt;/p&gt;

&lt;p&gt;Tambien les puede servir los planos y explicaciones de la web &lt;a href="http://www.sorgonet.com/network/guiaondasranurada/" target="_blank"&gt;Songonet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Esta diseño de antena fue creado por &lt;a href="http://www.trevormarshall.com/" target="_blank"&gt;Trevor Marshall&lt;/a&gt;, &lt;a href="http://www.trevormarshall.com/waveguides.htm" target="_blank"&gt;aqui&lt;/a&gt; puedes leer la teoria de esta antena y sus especificaciones.&lt;/p&gt;

&lt;p&gt;y puedes leer la traduccion al español en la web de &lt;a href="http://www.paramowifix.net/antenas/guiaondas_marshall.html" target="_blank"&gt;ParamoWifix&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Espero les guste y le sirva para realizar su propia antena.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ngp2E8e2ILJO09dcBLSMa5WrZmY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ngp2E8e2ILJO09dcBLSMa5WrZmY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ngp2E8e2ILJO09dcBLSMa5WrZmY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ngp2E8e2ILJO09dcBLSMa5WrZmY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=-Ik4T8u-oCY:O3E6SsmzjOI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=-Ik4T8u-oCY:O3E6SsmzjOI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=-Ik4T8u-oCY:O3E6SsmzjOI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=-Ik4T8u-oCY:O3E6SsmzjOI:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=-Ik4T8u-oCY:O3E6SsmzjOI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=-Ik4T8u-oCY:O3E6SsmzjOI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=-Ik4T8u-oCY:O3E6SsmzjOI:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=-Ik4T8u-oCY:O3E6SsmzjOI:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=-Ik4T8u-oCY:O3E6SsmzjOI:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=-Ik4T8u-oCY:O3E6SsmzjOI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=-Ik4T8u-oCY:O3E6SsmzjOI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=-Ik4T8u-oCY:O3E6SsmzjOI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=-Ik4T8u-oCY:O3E6SsmzjOI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=-Ik4T8u-oCY:O3E6SsmzjOI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=-Ik4T8u-oCY:O3E6SsmzjOI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=-Ik4T8u-oCY:O3E6SsmzjOI:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=-Ik4T8u-oCY:O3E6SsmzjOI:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/-Ik4T8u-oCY" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2009/07/28/antena-sectorial-ranurada-de-8-agujeros</feedburner:origLink></entry>
 
 <entry>
   <title>Configurar Modem 3G ZTE MF626 Digitel en Linux</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/rrgaHKSsm1c/configurar-modem-3g-zte-mf626-digitel-en-linux" />
   <updated>2009-05-08T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2009/05/08/configurar-modem-3g-zte-mf626-digitel-en-linux</id>
   <content type="html">&lt;p&gt;Este es otra guia que encontre para configurar el modem ZTE MF626 del Bam 3G de Digitel. Lo que deben hacer es lo Siguiente:&lt;/p&gt;

&lt;p&gt;1)  Ir a esta pagina web (&lt;a title="http://www.draisberghof.de/usb_modeswitch/" href="http://www.draisberghof.de/usb_modeswitch/"&gt;http://www.draisberghof.de/usb_modeswitch/&lt;/a&gt;) y descargar el archivo “usb_modeswitch-0.9.6.tar.bz2 en la seccion Downloads.&lt;/p&gt;

&lt;p&gt;2)  Hacer click derecho en el archivo y seleccionar Extraer Aqui.&lt;/p&gt;

&lt;p&gt;3) Abrir Terminal, ir al directorio en el que descomprimio todo y ejecutar&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo make install
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;va a pedir password de root.&lt;/p&gt;

&lt;p&gt;4) Editar el archivo de configuracion “usb_modeswitch.conf”. Para eso en terminal ejecutar&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo gedit /etc/usb_modeswitch.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y se abrira el editor de textos de Gedit.&lt;/p&gt;

&lt;p&gt;5) Buscarmas o menos por la linea 393 del archivo, el nombre del modem “ZTE MF626" y sacar los comentarios, el (#) y el (;), hasta que quede algo asi:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;ZTE MF628+ &lt;span class="o"&gt;(&lt;/span&gt;tested version from Telia / Sweden&lt;span class="o"&gt;)&lt;/span&gt;
ZTE MF626

Contributor: Joakim Wennergren

&lt;span class="nv"&gt;DefaultVendor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;  0×19d2
&lt;span class="nv"&gt;DefaultProduct&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; 0×2000

&lt;span class="nv"&gt;TargetVendor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;   0×19d2
&lt;span class="nv"&gt;TargetProduct&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;  0×0031

&lt;span class="nv"&gt;MessageEndpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0×01

&lt;span class="nv"&gt;MessageContent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;”555342431234567820000000800o0

c85010101180101010101000000000000
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;6) Guardar y Salir.&lt;/p&gt;

&lt;p&gt;7) Enchufar el modem, esperar unos segundos y ejecutar en Terminal “lsusb”. Aqui uno de los dispositivos deberia tener el ID 19d2:2000.&lt;/p&gt;

&lt;p&gt;8) Ejecutar en Terminal&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo /usr/sbin/usb_modeswitch -W -c /etc/usb_modeswitch.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Con esto le cambiaremos el modo y ahora el sistema lo va a ver como un modem.
Si hacen “lsusb” de nuevo, deberia haber cambiado a ID 19d2:0031&lt;/p&gt;

&lt;p&gt;9) Ejecutamos en Terminal&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo /sbin/modprobe usbserial &lt;span class="nv"&gt;vendor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0×19d2 &lt;span class="nv"&gt;product&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0×0031
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;10)  Ahora deberia andar como modem… se puede definir un archivo para que lo reconozca el network manager, haciendo en la terminal&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo gedit /usr/share/hal/fdi/information/20thirdparty/20-zte-mf626.fdi
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Esto abrira un archivo en blanco al que hay que escribirle esto adentro, guardarlo y salir.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;!– -*- SGML -*- –
deviceinfo &lt;span class="nv"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;”0.2
device
!– ZTE MF626 HSDPA USB Modem –
match &lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;”@info.parent:usb.vendor_id” &lt;span class="nv"&gt;int&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;”0×19d2
match &lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;”@info.parent:usb.product_id” &lt;span class="nv"&gt;int&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;”0×0031
match &lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;”@info.parent:usb.interface.number” &lt;span class="nv"&gt;int&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;”3
append &lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;”modem.command_sets” &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;”strlist” GSM-07.07 /append
append &lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;”modem.command_sets” &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;”strlist” GSM-07.05 /append
append &lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;”info.capabilities” &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;”strlist” modem /append
/match
/match
/match
/device
/deviceinfo
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;ya en este momento nuestro modem esta listo para usarse. Solo falta definir los parametros de la conexion con DIGITEL 3G. OJO, la conexion es parecida a la de los telefonos celulares solo cambian algunos parametros. Actualmente solo me he podido conectar con WVDIAL. aqui les dejo mi wvdial.conf y mi /etc/ppp/options para que vean la conexion. Es importante recalcar que por defecto ppp autentica con PAP, y la conexion digitel usa CHAP.&lt;/p&gt;

&lt;p&gt;Para configurar su conexion ahora utilizamos wvdialconf. Con esta apliacion de wvdial se tiene una configuracion incial que luego vamos a cambiar:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo gedit /etc/wvdial.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Y hacemos cambios para que se vea así&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="c"&gt;#La conexion de Digitel lleva el pin de la sim card   0000&lt;/span&gt;
&lt;span class="nv"&gt;Init1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; ATZ+CPIN&lt;span class="o"&gt;=&lt;/span&gt;”0000?
&lt;span class="nv"&gt;Init2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; ATQ0 V1 E1 +FCLASS&lt;span class="o"&gt;=&lt;/span&gt;0

&lt;span class="nv"&gt;Init3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; AT+CGDCONT&lt;span class="o"&gt;=&lt;/span&gt;1,”IP”,”gprsweb.digitel.ve”

Modem &lt;span class="nv"&gt;Type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; Analog Modem

&lt;span class="nv"&gt;Phone&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; *99#

&lt;span class="nv"&gt;ISDN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 0

&lt;span class="nv"&gt;Username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; Digitel

&lt;span class="nv"&gt;Password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; Digitel

&lt;span class="nv"&gt;Modem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; /dev/ttyUSB2

&lt;span class="nv"&gt;Baud&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 9600
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;la ubicacion de este modem por lo general es en /dev/ttyUSB2 pero se han visto casos donde varia puesto a que el ocupa los espacios ttyUSB0 al ttyUSB3.&lt;/p&gt;

&lt;p&gt;En el archivo /etc/ppp/options debemos comentar la autenticacion con PAP y activar la conexion con CHAP.&lt;/p&gt;

&lt;p&gt;nos ubicamos en esta sección y nos aseguramos que este así.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="c"&gt;# Require the peer to authenticate itself using PAP.&lt;/span&gt;
&lt;span class="c"&gt;#+pap&amp;lt;/span&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;# Don’t agree to authenticate using PAP.&lt;/span&gt;
&lt;span class="c"&gt;#-pap&lt;/span&gt;

&lt;span class="c"&gt;# Require the peer to authenticate itself using CHAP [Cryptographic&lt;/span&gt;
&lt;span class="c"&gt;# Handshake Authentication Protocol] authentication.&lt;/span&gt;
+chap

&lt;span class="c"&gt;# Don’t agree to authenticate using CHAP.&lt;/span&gt;
&lt;span class="c"&gt;#-chap&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Bueno ya con esto debemos estar listos para navegar.&lt;/p&gt;

&lt;p&gt;Cada vez que queramos conectarnos&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo /usr/sbin/usb_modeswitch -W -c /etc/usb_modeswitch.conf
&lt;span class="nv"&gt;$sudo&lt;/span&gt; wvdial
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;y debido a que la forma en que nos estamos conectado no aplica al escritorio que estemos usando. debemos asegurarnos que nuestro navegador no este trabajando en modo sin conexion.&lt;/p&gt;

&lt;p&gt;Fuente:  &lt;a href="http://effiejayx.velugmaracaibo.org.ve/" target="_blank"&gt;BsF 0.10...&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/t1DCel5gCExmiV4Cx9Rcq6ksASI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t1DCel5gCExmiV4Cx9Rcq6ksASI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/t1DCel5gCExmiV4Cx9Rcq6ksASI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t1DCel5gCExmiV4Cx9Rcq6ksASI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rrgaHKSsm1c:EJ34Z9F1fvc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rrgaHKSsm1c:EJ34Z9F1fvc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rrgaHKSsm1c:EJ34Z9F1fvc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rrgaHKSsm1c:EJ34Z9F1fvc:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rrgaHKSsm1c:EJ34Z9F1fvc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=rrgaHKSsm1c:EJ34Z9F1fvc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rrgaHKSsm1c:EJ34Z9F1fvc:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rrgaHKSsm1c:EJ34Z9F1fvc:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=rrgaHKSsm1c:EJ34Z9F1fvc:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rrgaHKSsm1c:EJ34Z9F1fvc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rrgaHKSsm1c:EJ34Z9F1fvc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=rrgaHKSsm1c:EJ34Z9F1fvc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rrgaHKSsm1c:EJ34Z9F1fvc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rrgaHKSsm1c:EJ34Z9F1fvc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=rrgaHKSsm1c:EJ34Z9F1fvc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=rrgaHKSsm1c:EJ34Z9F1fvc:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=rrgaHKSsm1c:EJ34Z9F1fvc:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/rrgaHKSsm1c" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2009/05/08/configurar-modem-3g-zte-mf626-digitel-en-linux</feedburner:origLink></entry>
 
 <entry>
   <title>Configurar Modem 3G Huawei E160E Digitel en Linux</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/_aByLuaj2rM/configurar-modem-3g-huawei-e160e-digitel-en-linux" />
   <updated>2009-05-08T00:00:00-07:00</updated>
   <id>hhttp://blog.jam.net.ve/2009/05/08/configurar-modem-3g-huawei-e160e-digitel-en-linux</id>
   <content type="html">&lt;p&gt;Bueno navegando por alli encontre este post para realizar la configuracion de la conexion a internet con los famosos Modems 3.5G  del servicio Bam de Digitel.&lt;/p&gt;

&lt;p&gt;Tan solo debes conectar el Modem a tu Pc con Linux y al conectarlo veremos algo así:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;USB Serial support registered &lt;span class="k"&gt;for &lt;/span&gt;GSM modem &lt;span class="o"&gt;(&lt;/span&gt;1-port&lt;span class="o"&gt;)&lt;/span&gt;
option 1-5:1.0: GSM modem &lt;span class="o"&gt;(&lt;/span&gt;1-port&lt;span class="o"&gt;)&lt;/span&gt; converter detected
usb 1-5: GSM modem &lt;span class="o"&gt;(&lt;/span&gt;1-port&lt;span class="o"&gt;)&lt;/span&gt; converter now attached to ttyUSB0
option 1-5:1.1: GSM modem &lt;span class="o"&gt;(&lt;/span&gt;1-port&lt;span class="o"&gt;)&lt;/span&gt; converter detected
usb 1-5: GSM modem &lt;span class="o"&gt;(&lt;/span&gt;1-port&lt;span class="o"&gt;)&lt;/span&gt; converter now attached to ttyUSB1
usbcore: registered new interface driver option
option: v0.7.2:USB Driver &lt;span class="k"&gt;for &lt;/span&gt;GSM modems
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Luego, teniendo instalado wvdial, tenemos que configurar los datos para conectar, escribimos:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;wvdialconf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Esto detectara el modem, y creará un archivo: &lt;strong&gt;&lt;em&gt;/etc/wvdial.conf&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lo editamos solo un poco, acá un ejemplo:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;Init1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; ATZ
&lt;span class="nv"&gt;Init2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; ATQ0 V1 E1 &lt;span class="nv"&gt;S0&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &amp;amp;amp;C1 &amp;amp;amp;D2 +FCLASS&lt;span class="o"&gt;=&lt;/span&gt;0
&lt;span class="nv"&gt;Phone&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; *99#
;&lt;span class="nv"&gt;ISDN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 0
&lt;span class="nv"&gt;Username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; digitel
&lt;span class="nv"&gt;Password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 0000
&lt;span class="nv"&gt;Modem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; /dev/ttyUSB0
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Guardamos y listo, escribimos &lt;strong&gt;&lt;em&gt;wvdial&lt;/em&gt;&lt;/strong&gt; para conectar.&lt;/p&gt;

&lt;p&gt;Segun el autor esta configuracion se hizo usando kernel 2.6.28 en archlinux, pero en las demás distros no debería existir mayor problema.&lt;/p&gt;

&lt;p&gt;Fuente:  &lt;a href="http://jhuss.com/2009/03/31/digitel-3g-con-huawei-e160e/" target="_blank"&gt;jhuss.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/C2oZRdQNAa6eBgyxzQo_-aLOe2s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C2oZRdQNAa6eBgyxzQo_-aLOe2s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/C2oZRdQNAa6eBgyxzQo_-aLOe2s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C2oZRdQNAa6eBgyxzQo_-aLOe2s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=_aByLuaj2rM:mAnaVUbAnBg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=_aByLuaj2rM:mAnaVUbAnBg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=_aByLuaj2rM:mAnaVUbAnBg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=_aByLuaj2rM:mAnaVUbAnBg:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=_aByLuaj2rM:mAnaVUbAnBg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=_aByLuaj2rM:mAnaVUbAnBg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=_aByLuaj2rM:mAnaVUbAnBg:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=_aByLuaj2rM:mAnaVUbAnBg:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=_aByLuaj2rM:mAnaVUbAnBg:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=_aByLuaj2rM:mAnaVUbAnBg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=_aByLuaj2rM:mAnaVUbAnBg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=_aByLuaj2rM:mAnaVUbAnBg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=_aByLuaj2rM:mAnaVUbAnBg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=_aByLuaj2rM:mAnaVUbAnBg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=_aByLuaj2rM:mAnaVUbAnBg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=_aByLuaj2rM:mAnaVUbAnBg:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=_aByLuaj2rM:mAnaVUbAnBg:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/_aByLuaj2rM" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2009/05/08/configurar-modem-3g-huawei-e160e-digitel-en-linux</feedburner:origLink></entry>
 
 <entry>
   <title>Instala Xampp en Ubuntu 8.10</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/mc2ZlpDrxLo/instala-xampp-en-ubuntu-810" />
   <updated>2009-03-08T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2009/03/08/instala-xampp-en-ubuntu-810</id>
   <content type="html">&lt;p&gt;Xampp es una aplicacion que instala y configura en tu maquina todo lo necesario para tener un servidor funcional como el servidor web Apache, Lenguaje PHP, Bases de datos MySql y su interfaz web PhpMyAdmin, pero xampp va mas alla e incluye tambien lenguaje Perl, el servidor FTP ProFTPD, servidor de correos y muchos mas.&lt;/p&gt;

&lt;p&gt;Para instalar Xampp en nuestro Ubuntu tan solo debemos ir a la web de &lt;a title="Web Oficial Xampp" href="http://www.apachefriends.org/en/xampp-linux.html" target="_blank"&gt;ApacheFriends&lt;/a&gt; y descargarlo (version actual 1.7 al momento de escribir esto).&lt;/p&gt;

&lt;p&gt;Una vez descargado hay que descomprimir para instalar, debemos abrir la consola o terminal, cambiar con el comando &lt;strong&gt;&lt;em&gt;CD&lt;/em&gt;&lt;/strong&gt; al directorio donde lo guardamos y loguearnos como Root con el comando &lt;strong&gt;&lt;em&gt;SU&lt;/em&gt;&lt;/strong&gt;, o simplemente tecleamos&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt; &lt;span class="nv"&gt;$ &lt;/span&gt;sudo tar xvfz xampp-linux-1.7.tar.gz -C /opt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Esto descomprime el archivo descargado y lo copia en el directorio &lt;strong&gt;/opt&lt;/strong&gt; quedando asi &lt;strong&gt;/opt/lampp&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ahora solo nos resta iniciar Xampp, lo haremos tecleando en la consola&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt; &lt;span class="nv"&gt;$ &lt;/span&gt;/opt/lampp/lampp start
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Si todo a ido bien nos mostrara un texto como este:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;Starting XAMPP 1.7...
LAMPP: Starting Apache...
LAMPP: Starting MySQL...
LAMPP started.
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Si ves esto en la terminal, FELICITACIONES !!! tienes Xampp corriendo en tu PC, ahora solo teclea en el navegador:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;http://localhost
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Y veras la pagina principal de Xampp.&lt;/p&gt;

&lt;p&gt;Si deseas detener xampp tan solo teclea en la consola&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;  &lt;span class="nv"&gt;$ &lt;/span&gt;/opt/lampp/lampp stop
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Si te aburriste, (aunque no lo creo) y quieres desintalar xampp solo teclea en la consola&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;rm -rf /opt/lampp&lt;span class="o"&gt;[&lt;/span&gt;/bash&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Espero le sirva a alguien esta breve explicacion.  :)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nRiXkZ8b7RRLo5OjHlY0iZgPUko/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nRiXkZ8b7RRLo5OjHlY0iZgPUko/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nRiXkZ8b7RRLo5OjHlY0iZgPUko/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nRiXkZ8b7RRLo5OjHlY0iZgPUko/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mc2ZlpDrxLo:DyPz7A9__Gk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mc2ZlpDrxLo:DyPz7A9__Gk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mc2ZlpDrxLo:DyPz7A9__Gk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mc2ZlpDrxLo:DyPz7A9__Gk:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mc2ZlpDrxLo:DyPz7A9__Gk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=mc2ZlpDrxLo:DyPz7A9__Gk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mc2ZlpDrxLo:DyPz7A9__Gk:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mc2ZlpDrxLo:DyPz7A9__Gk:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=mc2ZlpDrxLo:DyPz7A9__Gk:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mc2ZlpDrxLo:DyPz7A9__Gk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mc2ZlpDrxLo:DyPz7A9__Gk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=mc2ZlpDrxLo:DyPz7A9__Gk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mc2ZlpDrxLo:DyPz7A9__Gk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mc2ZlpDrxLo:DyPz7A9__Gk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=mc2ZlpDrxLo:DyPz7A9__Gk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=mc2ZlpDrxLo:DyPz7A9__Gk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=mc2ZlpDrxLo:DyPz7A9__Gk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/mc2ZlpDrxLo" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2009/03/08/instala-xampp-en-ubuntu-810</feedburner:origLink></entry>
 
 <entry>
   <title>Antena Wi-Fi con Parabolica DirecTv !!!</title>
   <link href="http://feedproxy.google.com/~r/jamunixblog/~3/eHTidbjnxB4/antena-wi-fi-con-parabolica-directv" />
   <updated>2009-02-11T00:00:00-08:00</updated>
   <id>hhttp://blog.jam.net.ve/2009/02/11/antena-wi-fi-con-parabolica-directv</id>
   <content type="html">&lt;p&gt;Bueno se que esto no es software libre ni mucho menos linux, pero quiero compartir una antena que hice para  realizar conexiones Wi-Fi a larga distancia.&lt;/p&gt;

&lt;p&gt;Esta antena esta hecha con materiales caseros por lo tanto es sencilla de hacer y relativamente economica. Y digo relativamente porque puede que, al igual que yo tengas problemas en conseguir los materiales como el cable, conectores, etc. Lo cual puede hacer que los adquieras en el unico sitio que consigas, y en mi caso ese sitio vende muy caro :-(&lt;/p&gt;

&lt;p&gt;La antena esta hecha principalmente usando una parabolica de DirecTV, tambien puedes usar cualquier otra parabolica de cualquier tamaño. Pero ojo si consigues una mas grande Mucho Mejor!!!.  A dicha parabolica le e quitado el LNB (es la cajita en la punta de la parabolica) y e colocado un pote de Leche el cual tiene adentro un simple alambre de cobre soldado a un Conector Tipo "N" Hembra atornillado al pote.&lt;/p&gt;

&lt;p&gt;El pigtail o cable esta hecho de cable RG-58U (Recomendable LMR-200 o similar)  el cual tiene crimpado un Conector Tipo N Macho (Este se enrroscara en el conector N hembra que esta en el pote de la antena)  en un extremo y en el otro extremo, un Conector RP-SMA Macho que sera enrroscado en la tarjeta Wi-Fi PCI de la PC&lt;/p&gt;

&lt;p&gt;Los Materiales usados son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Una Parabolica.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Conector Tipo N Macho&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Conector Tipo N Hembra (de Chasis 4 tornillos o Chasis enrroscable)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Conector RP-SMA  Macho.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cable RG-58 o LMR-200 o superior.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Si usa cable RG-58 usa la menor cantidad posible e intenta conseguir el que es doble apantallado ya que este presenta cantidad similar al Lmr-200 y es mas economico.&lt;/p&gt;

&lt;p&gt;Aqui algunas imagenes de la Antena:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://img234.imageshack.us/my.php?image=pantallazo20st0.png"&gt; &lt;img class="alignnone" title="Cantena+DTV" src="http://img234.imageshack.us/img234/3994/pantallazo20st0.th.png" alt="" width="150" height="128" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://img104.imageshack.us/my.php?image=imagen037tr2.jpg"&gt;&lt;img class="alignnone" src="http://img104.imageshack.us/img104/4514/imagen037tr2.th.jpg" alt="" width="150" height="128" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://img509.imageshack.us/my.php?image=imagen035sz7.jpg"&gt;&lt;img class="alignnone" title="Cantenna+DVT-3" src="http://img509.imageshack.us/img509/2283/imagen035sz7.th.jpg" alt="" width="150" height="128" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://img509.imageshack.us/my.php?image=imagen026ri6.jpg"&gt;&lt;img src="http://img509.imageshack.us/img509/8347/imagen026ri6.th.jpg" alt="Cantenna+DVT-4" width="150" height="128" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://img103.imageshack.us/my.php?image=imagen025ui9.jpg"&gt;&lt;img class="alignnone" title="Cantena+DTV-5" src="http://img103.imageshack.us/img103/8282/imagen025ui9.th.jpg" alt="" width="150" height="128" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://img210.imageshack.us/my.php?image=imagen017bs6.jpg"&gt;&lt;img class="alignnone" title="Cantenna+DVT-6" src="http://img210.imageshack.us/img210/6257/imagen017bs6.th.jpg" alt="" width="150" height="128" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OVJ3b-RSe8IRCyYkjVg6Aayo3K8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OVJ3b-RSe8IRCyYkjVg6Aayo3K8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OVJ3b-RSe8IRCyYkjVg6Aayo3K8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OVJ3b-RSe8IRCyYkjVg6Aayo3K8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=eHTidbjnxB4:XMjKHzSk3mk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=eHTidbjnxB4:XMjKHzSk3mk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=eHTidbjnxB4:XMjKHzSk3mk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=eHTidbjnxB4:XMjKHzSk3mk:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=eHTidbjnxB4:XMjKHzSk3mk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=eHTidbjnxB4:XMjKHzSk3mk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=eHTidbjnxB4:XMjKHzSk3mk:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=eHTidbjnxB4:XMjKHzSk3mk:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=eHTidbjnxB4:XMjKHzSk3mk:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=eHTidbjnxB4:XMjKHzSk3mk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=eHTidbjnxB4:XMjKHzSk3mk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=eHTidbjnxB4:XMjKHzSk3mk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=eHTidbjnxB4:XMjKHzSk3mk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=eHTidbjnxB4:XMjKHzSk3mk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=eHTidbjnxB4:XMjKHzSk3mk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jamunixblog?a=eHTidbjnxB4:XMjKHzSk3mk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jamunixblog?i=eHTidbjnxB4:XMjKHzSk3mk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jamunixblog/~4/eHTidbjnxB4" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.jam.net.ve/2009/02/11/antena-wi-fi-con-parabolica-directv</feedburner:origLink></entry>
 
 
</feed>

