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

<channel>
	<title>Blogeek</title>
	<atom:link href="http://www.blogeek.com.ar/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.blogeek.com.ar</link>
	<description>Un Blog geek hecho por Gonto: un geek, nerd, programador y divertido, que mas podes pedir?</description>
	<lastBuildDate>Sat, 12 May 2012 23:30:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Rails Console: Como actualizarla sin tener que reiniciarla</title>
		<link>http://www.blogeek.com.ar/2012/05/12/rails-console-como-actualizarla-sin-tener-que-reiniciarla/</link>
		<comments>http://www.blogeek.com.ar/2012/05/12/rails-console-como-actualizarla-sin-tener-que-reiniciarla/#comments</comments>
		<pubDate>Sat, 12 May 2012 23:30:04 +0000</pubDate>
		<dc:creator>Gonto</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[faster]]></category>
		<category><![CDATA[irb]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[startup]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://www.blogeek.com.ar/?p=123</guid>
		<description><![CDATA[Buenas! Ultimamente he comenzado a trabajar un poco con Ruby y con Rails. Estuve programando mucho con Sublime (Despues les cuento como configurarlo en otro post ) en este lenguaje. Como con Sublime es imposible debuggear con Ruby, me hice muy amigo de la consola de Ruby (irb) y de la consola de Rails. La [...]]]></description>
			<content:encoded><![CDATA[<p>Buenas!</p>
<p>Ultimamente he comenzado a trabajar un poco con Ruby y con Rails. Estuve programando mucho con Sublime (Despues les cuento como configurarlo en otro post <img src='http://www.blogeek.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ) en este lenguaje. Como con Sublime es imposible debuggear con Ruby, me hice muy amigo de la consola de Ruby (irb) y de la consola de Rails.</p>
<p>La Rails Console es igual a la consola de Ruby, solo que levanta todo el entorno rails, permitiendo hacer queries a la base de datos, probar los modelos, probar los controllers, etc.</p>
<p>Yo estuve trabajando el otro dia con ActiveResource y no lo podia hacer andar! Para probarlo, usaba la Rails Console. Cuando veia que no andaba, probaba cambiar algo en el codigo y bajaba la consola y la volvia a levantar. Esto implicaba que tenia que hacer los requires de vuelta y crear el &#8220;contexto&#8221; para poder probarlo de vuelta en la consola.</p>
<p><strong>Es en este momento cuando encontre la solucion. </strong>La cosola de Rails tiene un comando llamado <strong>reload! el cual traera todos los cambios realizados a las clases a la consola ya abierta.</strong> Cual es la ventaja de este comando? Que <strong>los objetos ya creados de esta clase modificada, seguiran existiendo, y su clase sera modificado, permitiendo que podamos ver estos cambios en tiempo real. </strong></p>
<p>Esto que quiere decir?</p>
<p>Suponganse que tenemos los siguiente:</p>
<pre>class HelloString &lt; ActiveRecord::Base

end</pre>
<p>Y levantamos la consola de rails corriendo <strong>rails console</strong>. Ahora suponganse que corremos la siguiente linea:</p>
<pre>1.9.2p320 :003 &gt; HelloString.new.hello
NoMethodError: undefined method `hello' for #
	from (irb):3
	from /home/gonto/.rvm/rubies/ruby-1.9.2-p320/bin/irb:16:in `'
1.9.2p320 :004 &gt;</pre>
<p>Como vemos, nos tira un error diciendo que el metodo hello no existe. Ahora, editemos la clase anterior en Sublime Text 2 y pongamos:</p>
<pre>class HelloString &lt; ActiveRecord::Base
  def hello
     "Hola Gonto"
  end
end</pre>
<p>Ahora, corremos en la consola HelloString.new.hello y aun nos tirara la excepcion. Sin embargo, si ahora tocamos <strong>reload!</strong>, y luego corremos lo mismo que antes veremos:</p>
<pre>1.9.2p320 :009 &gt; HelloString.new.hello
 =&gt; "Hola Gonto"
1.9.2p320 :010 &gt;</pre>
<p>Excelente, no?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogeek.com.ar/2012/05/12/rails-console-como-actualizarla-sin-tener-que-reiniciarla/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Play! Framework 2.0 Hackaton</title>
		<link>http://www.blogeek.com.ar/2012/03/26/play-framework-2-0-hackaton/</link>
		<comments>http://www.blogeek.com.ar/2012/03/26/play-framework-2-0-hackaton/#comments</comments>
		<pubDate>Tue, 27 Mar 2012 01:52:28 +0000</pubDate>
		<dc:creator>Gonto</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Play! Framework]]></category>
		<category><![CDATA[argentina]]></category>
		<category><![CDATA[desarrollo web]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[meetup]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[Netty]]></category>
		<category><![CDATA[play framework]]></category>
		<category><![CDATA[play!]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[WWW]]></category>

		<guid isPermaLink="false">http://www.blogeek.com.ar/?p=113</guid>
		<description><![CDATA[He vuelto a postear! Hace mucho no posteaba la verdad. En esta ocacion, les vengo a contar que estoy organizando junto con 4 personas mas un Hackaton de Play! Framework 2.0 en Buenos Aires. ¿Que es Play! Framework? PlayFramework es un framework integral para crear aplicaciones web con el patron MVC. Trae nuevos aires al [...]]]></description>
			<content:encoded><![CDATA[<p>He vuelto a postear! Hace mucho no posteaba la verdad.</p>
<p>En esta ocacion, les vengo a contar que estoy organizando junto con 4 personas mas un Hackaton de Play! Framework 2.0 en Buenos Aires.</p>
<p><strong>¿Que es Play! Framework?</strong></p>
<p>PlayFramework es un framework integral para crear aplicaciones web con el patron MVC. Trae nuevos aires al desarrollo Web en Java y ahora en Scala.</p>
<p>Si estas cansado de ver muchos XML, mucha configuracion y de realizar mucho boilerplate, entonces este el framework que tenes que probar para realizar aplicaciones web.</p>
<p>Si queres aprender sobre Play! y comaprtir el tiempo con gente que esta interesada en el mismo tambien, sumate a este grupo. Vas a tener la oportunidad de aprender como utilizarlo y poder aplicarlo dia a dia para el desarrollo.</p>
<p>Les dejo el link al meetup para quien este interesado:</p>
<p><a href="http://www.meetup.com/play-argentina/events/57992052/">http://www.meetup.com/play-argentina/events/57992052/</a></p>
<p>En proximos posts les voy a estar contando mis experiencias con Play! 2.0</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogeek.com.ar/2012/03/26/play-framework-2-0-hackaton/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Agregar contactos de Facebook con fechas de cumple a Google Contacts (GMail)</title>
		<link>http://www.blogeek.com.ar/2011/06/06/agregar-contactos-de-facebook-con-fechas-de-cumple-a-google-contacts-gmail/</link>
		<comments>http://www.blogeek.com.ar/2011/06/06/agregar-contactos-de-facebook-con-fechas-de-cumple-a-google-contacts-gmail/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 06:40:52 +0000</pubDate>
		<dc:creator>Gonto</dc:creator>
				<category><![CDATA[GMail]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[contacts]]></category>
		<category><![CDATA[csv]]></category>
		<category><![CDATA[duplicate]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[import]]></category>
		<category><![CDATA[merge]]></category>
		<category><![CDATA[social]]></category>

		<guid isPermaLink="false">http://www.blogeek.com.ar/?p=106</guid>
		<description><![CDATA[Buenas. Al tener un celular Andorid, todos los contactos que tengo en el celu son los de Google Contacts. El tema es que en estos contactos tenia solo Mail y Telefono sin nada mas. Yo queria cuando era posible agregarles las fechas de cumpleaños, paginas de internet, mas mails, cuentas de twitter, messenger, etc. Y [...]]]></description>
			<content:encoded><![CDATA[<p>Buenas.</p>
<p>Al tener un celular Andorid, todos los contactos que tengo en el celu son los de Google Contacts. El tema es que en estos contactos tenia solo Mail y Telefono sin nada mas. Yo queria cuando era posible agregarles las fechas de cumpleaños, paginas de internet, mas mails, cuentas de twitter, messenger, etc. <strong>Y en que lugar la gente pone TODA esa informacion? La respuesta es simple Facebook!</strong></p>
<p>Entonces que decidi hacer? <strong>Importar los contactos de Facebook a Google Contacts.</strong></p>
<p>Para esto, encontre una excelente extension para Chrome.</p>
<p>Lo primero que haremos es entrar al siguiente <a href="https://chrome.google.com/webstore/detail/ficlccidpkaiepnnboobcmafnnfoomga" target="_blank">link</a> y la bajaremos. Es importante notar que <strong>es open source</strong>, por lo cual uno puede ver que dicha exntesion <strong>no se queda con tus datos personales.</strong></p>
<p>Luego de instalar la extension, se agregara un nuevo boton en facebook:</p>
<p><a rel="lightbox" href="http://www.blogeek.com.ar/wp-content/uploads/2011/06/Selection_001.png"><img class="aligncenter size-medium wp-image-107" title="Selection_001" src="http://www.blogeek.com.ar/wp-content/uploads/2011/06/Selection_001-300x42.png" alt="" width="300" height="42" /></a>Al cliquearla veremos una nueva ventana que le daremos Aceptar y luego podremos importar todos nuestros amigos de Facebook. <strong>Es de vital importancia no usar ni cerrar la ventana de Facebook original donde clickeamos en &#8220;Export Friends&#8221;</strong> ya que es usada por la aplicacion.</p>
<p>Una vez terminada la operacion, se nos permitira agregarlos a GMail o exportarlos como CSV. En mi caso los exporte a GMail.</p>
<p>Luego de esto, iremos a <a href="http://www.google.com/contacts" target="_blank">Google Contacts</a> y veremos a la derecha un boton que dice &#8220;Find Duplicates&#8221;. Este mergeara aquellos contactos que sean similares (En mi caso mergeo 200 de lso 400 contactos de Facebook que tenia)</p>
<p><a rel="lightbox" href="http://www.blogeek.com.ar/wp-content/uploads/2011/06/Selection_002.png"><img class="aligncenter size-medium wp-image-108" title="Selection_002" src="http://www.blogeek.com.ar/wp-content/uploads/2011/06/Selection_002-300x180.png" alt="" width="300" height="180" /></a></p>
<p>Luego de esto, los contactos que quedan sera cuestion de Mergearlos a mano seleccionando 2 contactos y marcando la opcion &#8220;Merge contacts&#8221;.</p>
<p>Luego de estos tendremos todos los contactos en Google con todos los datos y si tenemos Android, por ende en el celu tambien <img src='http://www.blogeek.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogeek.com.ar/2011/06/06/agregar-contactos-de-facebook-con-fechas-de-cumple-a-google-contacts-gmail/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Usando Fragments en Android: Lo nuevo que se viene desde HoneyComb</title>
		<link>http://www.blogeek.com.ar/2011/06/02/usando-fragments-en-android-lo-nuevo-que-se-viene-desde-honeycomb/</link>
		<comments>http://www.blogeek.com.ar/2011/06/02/usando-fragments-en-android-lo-nuevo-que-se-viene-desde-honeycomb/#comments</comments>
		<pubDate>Thu, 02 Jun 2011 04:43:07 +0000</pubDate>
		<dc:creator>Gonto</dc:creator>
				<category><![CDATA[Android SDK]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[activity]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[atrix]]></category>
		<category><![CDATA[back]]></category>
		<category><![CDATA[cellphone]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[cycle]]></category>
		<category><![CDATA[fragment]]></category>
		<category><![CDATA[fragments]]></category>
		<category><![CDATA[gingerbread]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[home]]></category>
		<category><![CDATA[honey]]></category>
		<category><![CDATA[honeycomb]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[lifecycle]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[stack]]></category>

		<guid isPermaLink="false">http://www.blogeek.com.ar/?p=97</guid>
		<description><![CDATA[A partir de las nuevas versiones de la SDK de Android se favorece y se va a continuar favoreciendo a los Fragments a partir de la nueva version del SDK donde se mergearan 3.0 (Tablets) y 2.3 (celulares). El objetivo del uso de Fragment es justamente hacer mas facil el desarrollo para apps que funcionen [...]]]></description>
			<content:encoded><![CDATA[<p>A partir de las nuevas versiones de la SDK de Android se favorece y se va a continuar favoreciendo a los Fragments a partir de la nueva version del SDK donde se mergearan 3.0 (Tablets) y 2.3 (celulares). El objetivo del uso de Fragment es justamente hacer mas facil el desarrollo para apps que funcionen bien en tablets y celulares.</p>
<p><strong>Vamos a ver un poco que son?</strong><br />
Fragments son pedazos de una Activity. Un Fragment fuera de una Activity no existe. Son similares a los paneles y justamente por el hecho de tener un codigo y cierta vista seran altamente reutilizables. Podre tener un Fragment usado en varios lugares donde obtendremos en cada uno la data del Intent y la mostraremos.</p>
<p><strong>Porque me ayudan a utilizar celulares vs tablets?</strong><br />
Porque los Fragments me permiten por ejemplo en caso de que sea una tableta mostrar una Activity con 2 fragments (Por ejemplo una lista de ciertos datos y al lado el detalle del dato seleccionado) y en caso de un celular mostrar 2 Activities diferentes cada una con su propio Fragment (Una pantalla tiene la lista, toco click en una y me abre en otra pantalla el detalle).<br />
Como seria esto? Veamos un poco la imagen que se encuentra a continuacion:</p>
<p><a rel="lightbox" href="http://www.blogeek.com.ar/wp-content/uploads/2011/06/fragments.png"><img src="http://www.blogeek.com.ar/wp-content/uploads/2011/06/fragments-300x94.png" alt="" title="fragments" width="300" height="94" class="aligncenter size-medium wp-image-98" /></a></p>
<p>Esto nos permite sin casi tocar codigo reutilizar distintos paneles para hacer la app linda y usable tanto para celulares como para tablets.</p>
<p><strong>Genial, me copo la idea! Ahora&#8230;. como lo uso?</strong><br />
Bueno para usarlo hay que simplemente heredar de Fragment y despues entender un poco su LifeCycle que es similar al de una Activity.<br />
Primero se llama al OnAttach que generalmente no lo usaremos.<br />
Luego se llama al OnCreate del Fragment.<br />
Luego al OnCreateView del Fragment. Este metodo es BASTANTE importante ya que aqui se definira cual es el layout que el Fragment usara! En este metodo se retorna un objeto View. Se pueden usar como en el caso de los menus &#8220;inflaters&#8221; para no crearlos desde codigo.<br />
OnActivityCreated se llamara pasandole la Activity por parametro y se llamara luego de que se llama al OnCreate de la Activity. Generalmente mucho del procesamiento se hace en ESTE metodo.<br />
OnPause y OnResume se utilizan para guardar y obtener estado del Fragment en caso de que la app deje de estar en el Foreground y usandose.</p>
<p>Luego desde el Layout de la Activity que tendra un cierto Fragment se usara:</p>
<pre>&lt;fragment android:name="com.example.news.ArticleListFragment"
            android:id="@+id/list"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" /&gt;</pre>
<p>Siguiendo el ejemplo que hablabamos antes, suponganse que yo de la lista primero veo el detalle de el celular Motorola Atrix 4G y luego el del iPhone. <strong>Yo quiero que al tocar Back estando en el detalle del iPhone me muestre el detalle del Motorola, no quiero que me vaya a la activity anterior. Como hacemos esto?</strong><br />
Lo que tenemos que hacer es justamente agregar los distintos fragments al Activity Stack de la task que estamos ejecutando. Esto se hace realizando el cambio de Fragment mediante el uso de una FragmentTransaction.<br />
Un ejemplo es el siguiente</p>
<pre>Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, newFragment);
// La siguiente linea LO agrego al BackStack. Es de especial importancia
transaction.addToBackStack(null);
transaction.commit();</pre>
<p>Este fue un mini repaso de Fragment que es lo que se viene con mucha fuerza en las nuevas versiones de Android.<br />
Como dice Lionel de Nivel X: Espero que les haya gustado&#8230;&#8230;&#8230;. CHAU</p>
<p>EDIT: Luego de investigar un poco encontre que en realidad si se puede usar en las versiones anteriores a Honey para poder integrarlo con los celulares anteriores.<br />
Nos bajamos el Android Compatibility Package y luego simplemente agregamos en nuestro Manifest el use_library correspondiente a Fragments API.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogeek.com.ar/2011/06/02/usando-fragments-en-android-lo-nuevo-que-se-viene-desde-honeycomb/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GoogleCL: Usando los servicios de Google desde la command line</title>
		<link>http://www.blogeek.com.ar/2011/06/02/googlecl-usando-los-servicios-de-google-desde-la-command-line/</link>
		<comments>http://www.blogeek.com.ar/2011/06/02/googlecl-usando-los-servicios-de-google-desde-la-command-line/#comments</comments>
		<pubDate>Thu, 02 Jun 2011 04:07:32 +0000</pubDate>
		<dc:creator>Gonto</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[blogger]]></category>
		<category><![CDATA[calendar]]></category>
		<category><![CDATA[command]]></category>
		<category><![CDATA[docs]]></category>
		<category><![CDATA[GMail]]></category>
		<category><![CDATA[googlecl]]></category>
		<category><![CDATA[line]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Natty]]></category>
		<category><![CDATA[picassa]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.blogeek.com.ar/?p=89</guid>
		<description><![CDATA[Hace mucho que no escribia nada porque estuve muy ocupado la verdad con facu y trabajo. Hoy vengo a contarles de GoogleCL una herramienta para la linea de comandos de Linux y Mac. Existe hace un tiempo ya, pero la verdad que nunca le habia encontrado mucha utilidad pero desde hoy si Sirve para utilizar [...]]]></description>
			<content:encoded><![CDATA[<p>Hace mucho que no escribia nada porque estuve muy ocupado la verdad con facu y trabajo.</p>
<p>Hoy vengo a contarles de GoogleCL una herramienta para la linea de comandos de Linux y Mac.<br />
Existe hace un tiempo ya, pero la verdad que nunca le habia encontrado mucha utilidad pero desde hoy si <img src='http://www.blogeek.com.ar/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Sirve para utilizar todos los servicios de google desde la linea de comandos.</p>
<p>Por ejemplo queremos saber que tenemos en nuestro calendario hoy? google calendar today<br />
Queremos agregar una nueva tarea en el calendario? google calendar add &#8220;Parcial Inteligencia Artificial next wednesday at 7 pm&#8221;. Y solo reconoce el dia y la fecha!<br />
queres subir un nuevo doc a GDocs? google docs upload PATH/TO/FILE<br />
Queres subir fotos a picassa? picasa post &#8211;title &#8220;My Cat Photos&#8221; photos/cats/*&#8221;</p>
<p>Especificamente funciona con los siguientes servicios:<br />
&#8216;picasa&#8217;, &#8216;blogger&#8217;, &#8216;youtube&#8217;, &#8216;docs&#8217;, &#8216;contacts&#8217;, &#8216;calendar&#8217;, &#8216;finance&#8217;</p>
<p>Y dandole google help [service] nos tira ayuda sobre el servicio y las cosas que le podemos pedir. Por ejemplo google help calendar.</p>
<p>Para instalarlo simplemente hay que hacer:<br />
sudo apt-get install googlecl</p>
<p>Como tip extra, utilizando googlecl hay un launcher para Unity que vos le arrastras un archivo y lo sube solo a GDoc y desde ahi podemos tambien crear documentos.</p>
<p>Para bajarlo debemos correr lo siguiente:</p>
<pre>sudo apt-get install zenity
cd Downloads/
wget http://webupd8.googlecode.com/files/gdocs-unity.tar.gz
tar -xvf gdocs-unity.tar.gz
mv gdocs-unity/gdocs.desktop ~/.local/share/applications
mv gdocs-unity/docs-128.png ~/.icons/
chmod +x ~/Downloads/gdocs-unity/docsHelper
sed -i "s/Exec=\/path\/to\/docsHelper/Exec\=\/home\/$USER\/Downloads\/gdocs-unity\/docsHelper/" ~/.local/share/applications/gdocs.desktop
rm gdocs-unity.tar.gz</pre>
<p>Antes de poder usarlo deberan dar acceso a GDocs. Para eso desde la consola le damos google docs upload y ahi nos va a pedir acceso a nuestra google account la primera vez!</p>
<p>Espero que les sirva!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogeek.com.ar/2011/06/02/googlecl-usando-los-servicios-de-google-desde-la-command-line/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tips para Empathy: Como cerrar la ventana con Esc y cambiar el Shortcut de cambio de ventanas</title>
		<link>http://www.blogeek.com.ar/2011/05/18/tips-para-empathy-como-cerrar-la-ventana-con-esc-y-cambiar-el-shortcut-de-cambio-de-ventanas/</link>
		<comments>http://www.blogeek.com.ar/2011/05/18/tips-para-empathy-como-cerrar-la-ventana-con-esc-y-cambiar-el-shortcut-de-cambio-de-ventanas/#comments</comments>
		<pubDate>Wed, 18 May 2011 23:36:52 +0000</pubDate>
		<dc:creator>Gonto</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[chat]]></category>
		<category><![CDATA[close]]></category>
		<category><![CDATA[ctrl]]></category>
		<category><![CDATA[empathy]]></category>
		<category><![CDATA[esc]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[Natty]]></category>
		<category><![CDATA[pygtk]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[shortcut]]></category>
		<category><![CDATA[tab]]></category>
		<category><![CDATA[window]]></category>

		<guid isPermaLink="false">http://www.blogeek.com.ar/?p=85</guid>
		<description><![CDATA[El otro dia decidi borrar Pidgin de mi Ubuntu 11.04 e instalarme Empathy debido a su gran integracion. Apenas me puse a probar la aplicacion le encontre 2 grandes problemas. No puedo cambiar entre las ventanas con Ctrl + Tab No puedo cerrar la ventana existente con Esc o Escape Segun los creadores de Empathy [...]]]></description>
			<content:encoded><![CDATA[<p>El otro dia decidi borrar Pidgin de mi Ubuntu 11.04 e instalarme Empathy debido a su gran integracion.<br />
Apenas me puse a probar la aplicacion le encontre 2 grandes problemas.</p>
<ol>
<li>No puedo cambiar entre las ventanas con Ctrl + Tab</li>
<li>No puedo cerrar la ventana existente con Esc o Escape</li>
</ol>
<p>Segun los creadores de Empathy estos no son bugs, sino que GNome dice que Escape = Cancelar y Ctrl + Tab = cambiar foco entre elementos de texto. Es por esto que para ser consistentes con GNome no quieren poner en su codigo estas opciones.</p>
<p>Luego de averiguar durante un largo rato encontre la soluciona a este problema.</p>
<p>Hay un archivo en el file system donde estan configuradas todas las acciones que se pueden realizar sobre nuestra ventana de GTK. Dichas acciones tienen lo que se llama &#8220;Accelerators&#8221; que son shortcuts de teclado.</p>
<p>Primero vamos a ir al archivo: /usr/share/empathy/empathy-chat-window.ui</p>
<p>Vamos a editarlo como sudo ( sudo gedit /usr/share/empathy/empathy-chat-window.ui).</p>
<p>Una vez abierto veran que es un XML comun y corriente con diversas acciones.</p>
<p>Primero que nada van a buscar la siguiente linea:</p>
<pre>&lt;object class="GtkAction" id="menu_conv_close"&gt;</pre>
<p>Van a ver que abajo de esta linea habra alguna parecida a:</p>
<pre>&lt;accelerator key="q" modifiers="GDK_CONTROL_MASK"/&gt;</pre>
<p>Esto lo que dice es que para poder cerrar la conversacion se debe tocar Ctrl + K. Nosotros queremos cambiarlo por Escape, entonces cambiamos la linea anterior por:</p>
<pre>&lt;accelerator key="Escape"/&gt;</pre>
<p>y listo <img src='http://www.blogeek.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Yendo al segunda problema de cambiar las ventanas con Ctrl + Tab es un poco mas complicado. Por defecto, GNome no nos deja cambiar las ventanas con Ctrl + Tab y a su vez, no deja a ninguna aplicacion GTK bindear un shortcut a la tecla Tab. Si quisieramos hacer esto, deberiamos tocar el codigo de Empathy y cambiar un FLAG para que nos deje pisar lo que GNome nos dice. Como esto iba a ser mucho trabajo, decidi cambiar Ctrl + Tab y Ctrl + Shift + Tab por Ctrl + A en este caso, lo cual es bastante parecido.</p>
<p>Entonces buscaremos ahora en el mismo archivo las siguientes 2 lineas</p>
<pre>&lt;object class="GtkAction" id="menu_tabs_prev"&gt;</pre>
<pre>&lt;object class="GtkAction" id="menu_tabs_next"&gt;</pre>
<p>Y cambiaremos sus dos accelerators. Los shortcuts actuales dicen que para cambiar de tab hay que usar Ctrl + PageDown, lo cual implica que para ese shortcut tengo que usar 3 manos aproximadamente <img src='http://www.blogeek.com.ar/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> . Entonces los cambie por los siguientes respectivamente:</p>
<pre>&lt;accelerator key="a" modifiers="GDK_CONTROL_MASK|GDK_SHIFT_MASK"/&gt;</pre>
<pre>&lt;accelerator key="a" modifiers="GDK_CONTROL_MASK"/&gt;</pre>
<p>Luego de esto, reiniciamos Empathy y voila!</p>
<p>Les dejo mi archivo de configuracion por deciden pisarlo directamente:</p>
<pre>&lt;?xml version="1.0"?&gt;
&lt;!--*- mode: xml -*--&gt;
&lt;interface&gt;
  &lt;object class="GtkUIManager" id="ui_manager"&gt;
    &lt;child&gt;
      &lt;object class="GtkActionGroup" id="actiongroup1"&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_conv"&gt;
&lt;property name="name"&gt;menu_conv&lt;/property&gt;
&lt;property name="label" translatable="yes"&gt;_Conversation&lt;/property&gt;
          &lt;/object&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_conv_clear"&gt;
&lt;property name="stock_id"&gt;gtk-clear&lt;/property&gt;
&lt;property name="name"&gt;menu_conv_clear&lt;/property&gt;
&lt;property name="label" translatable="yes"&gt;C_lear&lt;/property&gt;
          &lt;/object&gt;
          &lt;accelerator key="L" modifiers="GDK_CONTROL_MASK"/&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_conv_insert_smiley"&gt;
&lt;property name="icon-name"&gt;face-smile&lt;/property&gt;
&lt;property name="name"&gt;menu_conv_insert_smiley&lt;/property&gt;
&lt;property name="label" translatable="yes"&gt;Insert _Smiley&lt;/property&gt;
          &lt;/object&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkToggleAction" id="menu_conv_favorite"&gt;
&lt;property name="name"&gt;menu_conv_favorite&lt;/property&gt;
&lt;property name="label" translatable="yes"&gt;_Favorite Chat Room&lt;/property&gt;
          &lt;/object&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkToggleAction" id="menu_conv_always_urgent"&gt;
&lt;property name="name"&gt;menu_conv_always_urgent&lt;/property&gt;
&lt;property name="label" translatable="yes"&gt;Notify for All Messages&lt;/property&gt;
          &lt;/object&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkToggleAction" id="menu_conv_toggle_contacts"&gt;
&lt;property name="name"&gt;menu_conv_toggle_contacts&lt;/property&gt;
&lt;property name="active"&gt;TRUE&lt;/property&gt;
&lt;property name="label" translatable="yes"&gt;_Show Contact List&lt;/property&gt;
          &lt;/object&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_conv_invite_participant"&gt;
&lt;property name="name"&gt;menu_conv_invite_participant&lt;/property&gt;
&lt;property name="label" translatable="yes"&gt;Invite _Participant…&lt;/property&gt;
          &lt;/object&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_conv_close"&gt;
&lt;property name="stock_id"&gt;gtk-close&lt;/property&gt;
&lt;property name="name"&gt;menu_conv_close&lt;/property&gt;
          &lt;/object&gt;
          &lt;accelerator key="Escape"/&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_contact"&gt;
&lt;property name="name"&gt;menu_contact&lt;/property&gt;
&lt;property name="label" translatable="yes"&gt;C_ontact&lt;/property&gt;
          &lt;/object&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_edit"&gt;
&lt;property name="name"&gt;menu_edit&lt;/property&gt;
&lt;property name="label" translatable="yes"&gt;_Edit&lt;/property&gt;
          &lt;/object&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_edit_cut"&gt;
&lt;property name="stock_id"&gt;gtk-cut&lt;/property&gt;
&lt;property name="name"&gt;menu_edit_cut&lt;/property&gt;
          &lt;/object&gt;
          &lt;accelerator key="X" modifiers="GDK_CONTROL_MASK"/&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_edit_copy"&gt;
&lt;property name="stock_id"&gt;gtk-copy&lt;/property&gt;
&lt;property name="name"&gt;menu_edit_copy&lt;/property&gt;
          &lt;/object&gt;
          &lt;accelerator key="C" modifiers="GDK_CONTROL_MASK"/&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_edit_paste"&gt;
&lt;property name="stock_id"&gt;gtk-paste&lt;/property&gt;
&lt;property name="name"&gt;menu_edit_paste&lt;/property&gt;
          &lt;/object&gt;
          &lt;accelerator key="V" modifiers="GDK_CONTROL_MASK"/&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_edit_find"&gt;
&lt;property name="stock_id"&gt;gtk-find&lt;/property&gt;
&lt;property name="name"&gt;menu_edit_find&lt;/property&gt;
          &lt;/object&gt;
          &lt;accelerator key="F" modifiers="GDK_CONTROL_MASK"/&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_tabs"&gt;
&lt;property name="name"&gt;menu_tabs&lt;/property&gt;
&lt;property name="label" translatable="yes"&gt;_Tabs&lt;/property&gt;
          &lt;/object&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_tabs_prev"&gt;
&lt;property name="name"&gt;menu_tabs_prev&lt;/property&gt;
&lt;property name="label" translatable="yes"&gt;_Previous Tab&lt;/property&gt;
          &lt;/object&gt;
          &lt;accelerator key="a" modifiers="GDK_CONTROL_MASK|GDK_SHIFT_MASK"/&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_tabs_next"&gt;
&lt;property name="name"&gt;menu_tabs_next&lt;/property&gt;
&lt;property name="label" translatable="yes"&gt;_Next Tab&lt;/property&gt;
          &lt;/object&gt;
          &lt;accelerator key="a" modifiers="GDK_CONTROL_MASK"/&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_tabs_undo_close_tab"&gt;
&lt;property name="name"&gt;menu_tabs_undo_close_tab&lt;/property&gt;
&lt;property name="label" translatable="yes"&gt;_Undo Close Tab&lt;/property&gt;
          &lt;/object&gt;
          &lt;accelerator key="t" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_tabs_left"&gt;
&lt;property name="name"&gt;menu_tabs_left&lt;/property&gt;
&lt;property name="label" translatable="yes"&gt;Move Tab _Left&lt;/property&gt;
          &lt;/object&gt;
          &lt;accelerator key="Page_Up" modifiers="GDK_CONTROL_MASK|GDK_SHIFT_MASK"/&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_tabs_right"&gt;
&lt;property name="name"&gt;menu_tabs_right&lt;/property&gt;
&lt;property name="label" translatable="yes"&gt;Move Tab _Right&lt;/property&gt;
          &lt;/object&gt;
          &lt;accelerator key="Page_Down" modifiers="GDK_CONTROL_MASK|GDK_SHIFT_MASK"/&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_tabs_detach"&gt;
&lt;property name="name"&gt;menu_tabs_detach&lt;/property&gt;
&lt;property name="label" translatable="yes"&gt;_Detach Tab&lt;/property&gt;
          &lt;/object&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_help"&gt;
&lt;property name="name"&gt;menu_help&lt;/property&gt;
&lt;property name="label" translatable="yes"&gt;_Help&lt;/property&gt;
          &lt;/object&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_help_contents"&gt;
&lt;property name="stock_id"&gt;gtk-help&lt;/property&gt;
&lt;property name="name"&gt;menu_help_contents&lt;/property&gt;
&lt;property name="label" translatable="yes"&gt;_Contents&lt;/property&gt;
          &lt;/object&gt;
          &lt;accelerator key="F1" modifiers=""/&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkAction" id="menu_help_about"&gt;
&lt;property name="stock_id"&gt;gtk-about&lt;/property&gt;
&lt;property name="name"&gt;menu_help_about&lt;/property&gt;
          &lt;/object&gt;
        &lt;/child&gt;
      &lt;/object&gt;
    &lt;/child&gt;
    &lt;ui&gt;
&lt;menubar name="chats_menubar"&gt;
&lt;menu action="menu_conv"&gt;
&lt;menuitem action="menu_conv_clear"/&gt;
&lt;menuitem action="menu_conv_insert_smiley"/&gt;
&lt;menuitem action="menu_conv_favorite"/&gt;
&lt;menuitem action="menu_conv_always_urgent"/&gt;
&lt;menuitem action="menu_conv_toggle_contacts"/&gt;
&lt;menuitem action="menu_conv_invite_participant"/&gt;
          &lt;separator/&gt;
&lt;menuitem action="menu_conv_close"/&gt;
        &lt;/menu&gt;
&lt;menu action="menu_contact" /&gt;
&lt;menu action="menu_edit"&gt;
&lt;menuitem action="menu_edit_cut"/&gt;
&lt;menuitem action="menu_edit_copy"/&gt;
&lt;menuitem action="menu_edit_paste"/&gt;
          &lt;separator/&gt;
&lt;menuitem action="menu_edit_find"/&gt;
        &lt;/menu&gt;
&lt;menu action="menu_tabs"&gt;
&lt;menuitem action="menu_tabs_prev"/&gt;
&lt;menuitem action="menu_tabs_next"/&gt;
&lt;menuitem action="menu_tabs_undo_close_tab"/&gt;
          &lt;separator/&gt;
&lt;menuitem action="menu_tabs_left"/&gt;
&lt;menuitem action="menu_tabs_right"/&gt;
&lt;menuitem action="menu_tabs_detach"/&gt;
        &lt;/menu&gt;
&lt;menu action="menu_help"&gt;
&lt;menuitem action="menu_help_contents"/&gt;
&lt;placeholder name="LaunchpadItems"/&gt;
&lt;menuitem action="menu_help_about"/&gt;
        &lt;/menu&gt;
&lt;/menubar&gt;
    &lt;/ui&gt;
  &lt;/object&gt;
  &lt;object class="GtkWindow" id="chat_window"&gt;
&lt;property name="title" translatable="yes"&gt;Chat&lt;/property&gt;
&lt;property name="role"&gt;chat&lt;/property&gt;
&lt;property name="default_width"&gt;580&lt;/property&gt;
&lt;property name="default_height"&gt;480&lt;/property&gt;
    &lt;child&gt;
      &lt;object class="GtkVBox" id="chat_vbox"&gt;
&lt;property name="visible"&gt;True&lt;/property&gt;
        &lt;child&gt;
          &lt;object class="GtkMenuBar" constructor="ui_manager" id="chats_menubar"&gt;
&lt;property name="visible"&gt;True&lt;/property&gt;
          &lt;/object&gt;
&lt;packing&gt;
&lt;property name="expand"&gt;False&lt;/property&gt;
&lt;property name="fill"&gt;False&lt;/property&gt;
          &lt;/packing&gt;
        &lt;/child&gt;
        &lt;child&gt;
&lt;placeholder/&gt;
        &lt;/child&gt;
      &lt;/object&gt;
    &lt;/child&gt;
  &lt;/object&gt;
&lt;/interface&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.blogeek.com.ar/2011/05/18/tips-para-empathy-como-cerrar-la-ventana-con-esc-y-cambiar-el-shortcut-de-cambio-de-ventanas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Uso util de DropBox: Instalar programas en celulares Android</title>
		<link>http://www.blogeek.com.ar/2011/05/10/uso-util-de-dropbox-instalar-programas-en-celulares-android/</link>
		<comments>http://www.blogeek.com.ar/2011/05/10/uso-util-de-dropbox-instalar-programas-en-celulares-android/#comments</comments>
		<pubDate>Tue, 10 May 2011 05:00:47 +0000</pubDate>
		<dc:creator>Gonto</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Dropbox]]></category>
		<category><![CDATA[apk]]></category>
		<category><![CDATA[cable]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[espacio]]></category>
		<category><![CDATA[pc]]></category>
		<category><![CDATA[tiempo]]></category>
		<category><![CDATA[utilidad]]></category>

		<guid isPermaLink="false">http://www.blogeek.com.ar/?p=81</guid>
		<description><![CDATA[Una utilidad reciente que le estuve dando a mi DropBox es la de facilitar la instalcion de programas en Android. Uno para instalar un programa en Android puede usar o no el Market. En caso de no usar el market, uno deberia bajarse el programa de la PC, conectar la PC al celular via el [...]]]></description>
			<content:encoded><![CDATA[<p>Una utilidad reciente que le estuve dando a mi DropBox es la de facilitar la instalcion de programas en Android.<br />
Uno para instalar un programa en Android puede usar o no el Market. En caso de no usar el market, uno deberia bajarse el programa de la PC, conectar la PC al celular via el cable, pasar el instalador y luego instalarlo desde el celular.<br />
Este proceso la verdad me resultaba muy tedioso ya que tenia que conectar la PC al celular solo para esto.<br />
Entonces, se me ocurrio crear una carpeta en DropBox que esa Android y ahi poner todos los APKs. Esta carpeta se sincroniza sola con mi cel, donde simplemente bajo el APK y lo instalo de una.<br />
Esto que les estoy contando hoy no es Rocket Science obviamente, pero tal vez a alguno que no se habia dado cuenta le sirva <img src='http://www.blogeek.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p>Slds!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogeek.com.ar/2011/05/10/uso-util-de-dropbox-instalar-programas-en-celulares-android/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Script para elegir, descomprimir, hacer acceso directo y borrar los rars de tus peliculas bajadas</title>
		<link>http://www.blogeek.com.ar/2011/05/10/script-para-elegir-descomprimir-hacer-acceso-directo-y-borrar-los-rars-de-tus-peliculas-bajadas/</link>
		<comments>http://www.blogeek.com.ar/2011/05/10/script-para-elegir-descomprimir-hacer-acceso-directo-y-borrar-los-rars-de-tus-peliculas-bajadas/#comments</comments>
		<pubDate>Tue, 10 May 2011 04:54:21 +0000</pubDate>
		<dc:creator>Gonto</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[acortar]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[ifs]]></category>
		<category><![CDATA[Natty]]></category>
		<category><![CDATA[pelicula]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[serie]]></category>
		<category><![CDATA[torrent]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.blogeek.com.ar/?p=78</guid>
		<description><![CDATA[A continuacion publicare un nuevo script. Este script lo hice para cuando bajo peliculas o series. Basicamente lo que hace es mostrarme todo el contenido de la carpeta de bajado con un numero al lado de cada nombre. Luego elijo los numeros de series o peliculas a ver separados por coma y el programa se [...]]]></description>
			<content:encoded><![CDATA[<p>A continuacion publicare un nuevo script. Este script lo hice para cuando bajo peliculas o series.<br />
Basicamente lo que hace es mostrarme todo el contenido de la carpeta de bajado con un numero al lado de cada nombre. Luego elijo los numeros de series o peliculas a ver separados por coma y el programa se encargara de descomprimir los rars o zip si hay, hacer un acceso directo en la carpeta seleccionada solo de la pelicula, borrando antes los samples en caso de haber uno.<br />
Antes, este script usaba periscope para buscar subtitulos en internet. El problema de este programa es que busca en subtitulos.es y no en subdivx.com asi que por el momento lo saque.<br />
A continuacion añado 2 scripts, uno para listar las peliculas para ver y otro para listar las peliculas a borrar las que fueron ya vistas.</p>
<p>Primero el de listar las peliculas a ver:</p>
<pre>#!/bin/bash
TORRENT_DIR='/home/gonto/downloads/torrents';
VIDEOS_DIR="/home/gonto/Desktop/videos";
pushd .
ls -tr  $TORRENT_DIR | columns -c 1 | awk 'BEGIN {i=0;} {i++; print i,$0}';
echo Que numeros elegis? Separados por coma;
read nums;
#Separando los numeros hechos con doma
OLD_IFS="$IFS"
IFS=","
numsArr=( $nums )

#Itero por cada numero
for num in ${numsArr[@]}
do
PELI=$(ls -tr $TORRENT_DIR | columns -c 1 | sed -n $(echo ${num}p));
if [ -n "$PELI" ]
then
PELI_PATH="$TORRENT_DIR/$PELI"
PELIS_A_MODIFICAR="$PELIS_A_MODIFICAR$PELI_PATH,"
fi
done
pelis=( $PELIS_A_MODIFICAR )
for PELI_PATH in ${pelis[@]}
do
if [ -f "$PELI_PATH" ]
then
    ln -fs "$PELI_PATH" $VIDEOS_DIR
else
    cd "$PELI_PATH"
    find "$PELI_PATH" -name "*rar" | xargs -I "{}" rar e {}
    find "$PELI_PATH" -name "*.[rR]??" | xargs -I "{}" rm {}
    find "$PELI_PATH" -name "*[sS][aA][mM][pP][lL][eE]*" | xargs -I "{}" rm {}
    find "$PELI_PATH" -name "*.[aA][vV][iI]" | xargs -I "{}" ln -s {} $VIDEOS_DIR
    find "$PELI_PATH" -name "*.[mM][kK][vV]" | xargs -I "{}" ln -s {} $VIDEOS_DIR
    popd
fi
done
IFS="$OLD_IFS"</pre>
<p>Y ahora el encargado de borrarlas</p>
<pre>#!/bin/bash
TORRENT_DIR='/home/gonto/downloads/torrents';
VIDEOS_DIR="/home/gonto/Desktop/videos";
ls -tr $TORRENT_DIR | columns -c 1 | awk 'BEGIN {i=0;} {i++; print i,$0}';
echo Que numeros elegis? Separados por coma;
read nums;
#Separando los numeros hechos con doma
OLD_IFS="$IFS"
IFS=","
numsArr=( $nums )
PELIS_A_BORRAR=""
#Itero por cada numero
for num in ${numsArr[@]}
do
PELI=$(ls -tr $TORRENT_DIR | columns -c 1 | sed -n $(echo ${num}p));
if [ -n "$PELI" ]; then
PELI_PATH="$TORRENT_DIR/$PELI"
PELIS_A_BORRAR="$PELIS_A_BORRAR$PELI_PATH,"
fi
done
pelis=( $PELIS_A_BORRAR )
for peli in ${pelis[@]}
do
rm -rf $peli
done
IFS="$OLD_IFS"</pre>
<p>Obviamente para ambos scripts tendran que cambiar el directorio de Torrents y el de videos para los que ustedes queiran listar y hacer accesos directos respectivamente.</p>
<p>Cualquier critica o mejora a los scripts sera bien tomada <img src='http://www.blogeek.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Una persona me sugirio que le agregue al acortador de URLs copiado al clipboard y lo hice <img src='http://www.blogeek.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p>Slds!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogeek.com.ar/2011/05/10/script-para-elegir-descomprimir-hacer-acceso-directo-y-borrar-los-rars-de-tus-peliculas-bajadas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Script para acortar URLs con soporte de Clipboard</title>
		<link>http://www.blogeek.com.ar/2011/05/10/script-para-acortar-urls-con-soporte-de-clipboard/</link>
		<comments>http://www.blogeek.com.ar/2011/05/10/script-para-acortar-urls-con-soporte-de-clipboard/#comments</comments>
		<pubDate>Tue, 10 May 2011 04:43:42 +0000</pubDate>
		<dc:creator>Gonto</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[acortar]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[bitly]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Natty]]></category>
		<category><![CDATA[shorten]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://www.blogeek.com.ar/?p=75</guid>
		<description><![CDATA[Un amigo me acaba de comentar que estaria bueno agregarle al script que ademas de mostrar por consola el resultado de acortar la url, la misma sea mandada al clipboard ya que eventuamente esto va a ser lo que haremos. Para esto, instalaremos primero el programa xclip (con apt-get) y luego reemplazaremos el script existente [...]]]></description>
			<content:encoded><![CDATA[<p>Un amigo me acaba de comentar que estaria bueno agregarle al script que ademas de mostrar por consola el resultado de acortar la url, la misma sea mandada al clipboard ya que eventuamente esto va a ser lo que haremos.</p>
<p>Para esto, instalaremos primero el programa xclip (con apt-get) y luego reemplazaremos el script existente que tenemos para acortar por el siguiente, reemplazando como la otra vez el usuario y la api:</p>
<pre>#!/bin/bash
progname=$(basename $0)
if [ -z "$1" ]
then
        echo -e "Usage:   $progname url"
        exit
fi
URL=$1

BITLYURL='http://api.bit.ly/v3/shorten?login=NOMBRE_USUARIO&amp;apiKey=API_KEY&amp;format=json'
ENCODEDURL=$(python -c "import urllib; print urllib.quote('''$URL''')")
RESPONSE=$(/usr/bin/env curl -s -A Mozilla $BITLYURL'&amp;longUrl='$ENCODEDURL)
TEXT=$(echo $RESPONSE | sed -e 's/[{}]/''/g' | awk -v k="text" '{n=split($0,a,","); for (i=1; i&lt;=n; i++) print a[i]}' | sed -n 4p | cut -c 9- | sed 's/"//g' | sed 's/\\//g')
echo $TEXT
echo $TEXT | xclip -selection c</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.blogeek.com.ar/2011/05/10/script-para-acortar-urls-con-soporte-de-clipboard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Computadora del tamaño de un Pen Drive a 25 USD</title>
		<link>http://www.blogeek.com.ar/2011/05/07/computadora-del-tamano-de-un-pen-drive-a-25-usd/</link>
		<comments>http://www.blogeek.com.ar/2011/05/07/computadora-del-tamano-de-un-pen-drive-a-25-usd/#comments</comments>
		<pubDate>Sat, 07 May 2011 16:53:54 +0000</pubDate>
		<dc:creator>Gonto</dc:creator>
				<category><![CDATA[PC]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[25 dolares]]></category>
		<category><![CDATA[cheap]]></category>
		<category><![CDATA[computadora]]></category>
		<category><![CDATA[develoepr]]></category>
		<category><![CDATA[dolares]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[HDMI]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[monitor]]></category>
		<category><![CDATA[pc]]></category>
		<category><![CDATA[pen drive]]></category>
		<category><![CDATA[pendrive]]></category>
		<category><![CDATA[usb]]></category>
		<category><![CDATA[usd]]></category>

		<guid isPermaLink="false">http://www.blogeek.com.ar/?p=65</guid>
		<description><![CDATA[Una noticia impactante la verdad me toco leer hoy. Un diseñador de video juegos que vive en el reino unido desarrollo una computadora del tamaño de un Pen Drive USB que saldra 25 dolares. Esta computadora tendra instalado por default Ubuntu y sera operable. Vendra con puertos HDMI y USB por ende, le conectamos por [...]]]></description>
			<content:encoded><![CDATA[<p>Una noticia impactante la verdad me toco leer hoy.<br />
Un diseñador de video juegos que vive en el reino unido desarrollo una computadora del tamaño de un Pen Drive USB que saldra 25 dolares.<br />
Esta computadora tendra instalado por default Ubuntu y sera operable.</p>
<p>Vendra con puertos HDMI y USB por ende, le conectamos por HDMI un monitor y un Mouse y teclado por USB y tendremos una computadora funcional.<br />
<a rel="lightbox" href="http://www.blogeek.com.ar/wp-content/uploads/2011/05/qwer.jpg"><img class="aligncenter size-medium wp-image-67" title="PCUsb" src="http://www.blogeek.com.ar/wp-content/uploads/2011/05/qwer-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Esta foto que ven aqui arriba es la computadora entera. Y esta computadora tiene los siguientes componentes:</p>
<ul>
<li>700MHz ARM11</li>
<li>128MB of SDRAM</li>
<li>OpenGL ES 2.0</li>
<li>1080p30 H.264 high-profile decode</li>
<li>Composite and HDMI video output</li>
<li>USB 2.0</li>
<li>SD/MMC/SDIO memory card slot</li>
<li>General-purpose I/O</li>
</ul>
<p>Increible, no? Y solo 25 dolares. Yo quiero una!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogeek.com.ar/2011/05/07/computadora-del-tamano-de-un-pen-drive-a-25-usd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

