<?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>Juan Ramón Díaz</title>
	<atom:link href="http://www.juanramon.me/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.juanramon.me</link>
	<description></description>
	<lastBuildDate>Sun, 20 May 2012 11:57:09 +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>Cómo crear un usuario en GlotPress</title>
		<link>http://www.juanramon.me/como-crea-un-usuario-en-glotpress/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-crea-un-usuario-en-glotpress</link>
		<comments>http://www.juanramon.me/como-crea-un-usuario-en-glotpress/#comments</comments>
		<pubDate>Sat, 12 May 2012 18:49:09 +0000</pubDate>
		<dc:creator>Juan Ramón</dc:creator>
				<category><![CDATA[GlotPress]]></category>

		<guid isPermaLink="false">http://www.juanramon.me/?p=123</guid>
		<description><![CDATA[GlotPress es un herramienta web open-source de traducción desarrollada por WordPress. Por defecto no incorpora ninguna gestión de usuarios. Solo se crea un usuario durante la instalación y es el administrador. Si tienes un blog con WordPress, no debería ser un problema ya que puedes usar los mismos usuarios del blog simplemente definiendo en el [...]]]></description>
			<content:encoded><![CDATA[<p><em><a href="http://blog.glotpress.org/">GlotPress</a> es un herramienta web open-source de traducción desarrollada por WordPress.</em></p>
<p>Por defecto no incorpora ninguna gestión de usuarios. Solo se crea un usuario durante la instalación y es el administrador. Si tienes un blog con WordPress, no debería ser un problema ya que puedes usar los mismos usuarios del blog simplemente definiendo en el fichero <em>gp-config.php</em> de que tablas quieres que coja los datos:</p>
<pre class="prettyprint">define('CUSTOM_USER_TABLE', 'wp_users');
define('CUSTOM_USER_META_TABLE', 'wp_usermeta');</pre>
<p>Hay que tener en cuenta que las tablas de GlotPress y WordPress tienen que estar en la misma base de datos. Si no quieres instalar WordPress para añadir nuevos usuarios, puedes usar el siguiente script:</p>
<pre class="prettyprint">&lt;?php
    require_once dirname( dirname( __FILE__ ) ) . '/gp-load.php';

    class GP_Script_Add_User extends GP_CLI {

        var $short_options = 'u:e:p:';

        var $usage = "-u &lt;username&gt; -e &lt;e-mail&gt; [-p &lt;password&gt;]";

        function run() {
            if ( !isset( $this-&gt;options['u'] ) || !isset( $this-&gt;options['e'] ) ) {
                $this-&gt;usage();
            }

            $user_by_login = GP::$user-&gt;by_login( $this-&gt;options['u'] );
            if ( $user_by_login ) {
                $this-&gt;to_stderr( sprintf("User '%s' already exists.", $this-&gt;options['u']) );
                exit( 1 );
            }

            $user_by_email = GP::$user-&gt;by_email( $this-&gt;options['e'] );
            if ( $user_by_email ) {
                $this-&gt;to_stderr( sprintf("Email '%s' already exists.", $this-&gt;options['e']) );
                exit( 2 );
            }

            $args = array();
            $args['user_login'] = $this-&gt;options['u'] ;
            $args['user_nicename'] = $this-&gt;options['u'] ;
            $args['display_name'] = $this-&gt;options['u'] ;
            $args['user_email'] = $this-&gt;options['e'] ;
            if( isset( $this-&gt;options['p']) ) {
                $args['user_pass'] = $this-&gt;options['p'] ;
            }

            $user = GP::$user-&gt;create( $args ) ;
            if( !$user ) {
                $this-&gt;to_stderr( sprintf("User '%s' hasn't been added.", $this-&gt;options['u']) );
                exit( 3 );
            }

            $this-&gt;to_stderr( "New user has been added:" );
            $this-&gt;to_stderr( sprintf(" - user: %s", $user-&gt;user_login) );
            $this-&gt;to_stderr( sprintf(" - e-mail: %s", $user-&gt;user_email) );
            $this-&gt;to_stderr( sprintf(" - pass: %s", $user-&gt;plain_pass) );
        }
    }

    $gp_script_add_user = new GP_Script_Add_User;
    $gp_script_add_user-&gt;run();
?&gt;</pre>
<p>Este fichero va en la carpeta de scripts de GlotPress. En mi caso lo he llamado <em>add-user.php</em>:</p>
<pre class="prettyprint">php scripts/add-user.php -u &lt;username&gt; -e &lt;e-mail&gt; [-p &lt;password&gt;]</pre>
<p>El parámetro password es opcional, en caso de no ponerlo generará uno aleatorio:</p>
<pre class="prettyprint">$&gt; php scripts/add-user.php -u glotpress -e glotpress@juanramon.me
New user has been added:
- user: glotpress
- e-mail: glotpress@juanramon.me
- pass: 1Owg6XO3x@xp</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.juanramon.me/como-crea-un-usuario-en-glotpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo usar el ShareActionProvider de Android</title>
		<link>http://www.juanramon.me/como-usar-shareactionprovider-android/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-usar-shareactionprovider-android</link>
		<comments>http://www.juanramon.me/como-usar-shareactionprovider-android/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 21:54:21 +0000</pubDate>
		<dc:creator>Juan Ramón</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://www.juanramon.me/?p=118</guid>
		<description><![CDATA[En la versión 4.0 de Android, ICS, se añadió una nueva forma de compartir contenido a través del ActionBar. Gracias a la versión 4.0.1 de ActionBarSherlock se puede usar en todas las versiones de Android. La documentación explica bien como implementar esta funcionalidad, pero me gustaría explicar un par de detalles en los que no he [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">En la <a href="http://android-developers.blogspot.com.es/2011/10/android-40-platform-and-updated-sdk.html">versión 4.0</a> de Android, <a href="http://www.android.com/about/ice-cream-sandwich/">ICS</a>, se añadió una nueva forma de compartir contenido a través del ActionBar. Gracias a la <a href="https://plus.google.com/114268356313062412418/posts/TQs9i1jWodP">versión 4.0.1</a> de <a href="http://actionbarsherlock.com/">ActionBarSherlock</a> se puede usar en todas las versiones de Android. La <a href="http://developer.android.com/guide/topics/ui/actionbar.html#ActionProvider">documentación</a> explica bien como implementar esta funcionalidad, pero me gustaría explicar un par de detalles en los que no he caído y que me han estado causando problemas:</p>
<ul>
<li>Es muy importante definir correctamente el atributo <em>android:actionProviderClass</em>. En el ejemplo usa la clase nativa de Android, pero se ha de tener en cuenta que al usar ActionBarSherlock el provider es diferente, con lo cual quedaría algo así:
<pre class="prettyprint">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;menu xmlns:android="http://schemas.android.com/apk/res/android"&gt;
    &lt;item android:id="@+id/menu_share"
          android:title="@string/share"
          android:showAsAction="ifRoom"
          <strong>android:actionProviderClass="com.actionbarsherlock.widget.ShareActionProvider"</strong> /&gt;
    ...
&lt;/menu&gt;</pre>
</li>
<li>Se ha de hacer set al share de nuevo si el contenido cambia dinámicamente. En mi caso, como estaba usando un ViewPager, he creado un listener para hacer un set al share intent cada vez que cambiaba la página. Ha quedado de la siguiente forma:
<pre class="prettyprint">private class ViewPageChangeListener extends ViewPager.SimpleOnPageChangeListener {
    @Override
    public void onPageSelected(int pos) {
        if (mShareActionProvider != null) {
            mShareActionProvider.setShareIntent(createShareIntent());
        }
    }
}</pre>
</li>
</ul>
<p>Para mi son los dos puntos más importantes a tener en cuenta a la hora de implementar el nuevo share action.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.juanramon.me/como-usar-shareactionprovider-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como borrar un tag remoto en git</title>
		<link>http://www.juanramon.me/como-borrar-un-tag-remoto-en-git/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-borrar-un-tag-remoto-en-git</link>
		<comments>http://www.juanramon.me/como-borrar-un-tag-remoto-en-git/#comments</comments>
		<pubDate>Mon, 05 Mar 2012 20:13:15 +0000</pubDate>
		<dc:creator>Juan Ramón</dc:creator>
				<category><![CDATA[Git]]></category>

		<guid isPermaLink="false">http://www.juanramon.me/?p=109</guid>
		<description><![CDATA[No es muy común borrar un tag en git, y menos en remoto. Pero por si lo necesitáis, a continuación explico como: git tag -d v1.0 git push origin :refs/tags/v1.0 En este caso el nombre del tag a borrar sería v1.0]]></description>
			<content:encoded><![CDATA[<p>No es muy común borrar un tag en git, y menos en remoto. Pero por si lo necesitáis, a continuación explico como:</p>
<pre class="prettyprint">
<code>git tag -d v1.0
git push origin :refs/tags/v1.0
</code>
</pre>
<p>En este caso el nombre del tag a borrar sería <strong>v1.0</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.juanramon.me/como-borrar-un-tag-remoto-en-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Cómo girar la pantalla del emulador de Android?</title>
		<link>http://www.juanramon.me/como-girar-la-pantalla-del-emulador-de-android/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-girar-la-pantalla-del-emulador-de-android</link>
		<comments>http://www.juanramon.me/como-girar-la-pantalla-del-emulador-de-android/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 00:18:55 +0000</pubDate>
		<dc:creator>Juan Ramón</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[emulator]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.juanramon.me/?p=100</guid>
		<description><![CDATA[Uno de los principales inconvenientes de Android es la fragmentación. Los que no tenemos 20 móviles y/o tables para probar la aplicación tenemos que recurrir al emulador (un horror, es muy lento).  Si quieres cambiar la orientación de la pantalla, girarlo de vertical a horizontal solo tienes que pulsar CTRL + F12; lo mismo para [...]]]></description>
			<content:encoded><![CDATA[<p>Uno de los principales inconvenientes de Android es la fragmentación. Los que no tenemos 20 móviles y/o tables para probar la aplicación tenemos que recurrir al emulador (un horror, es muy lento).  Si quieres cambiar la orientación de la pantalla, girarlo de vertical a horizontal solo tienes que pulsar <strong>CTRL + F12</strong>; lo mismo para volver a la posición original.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.juanramon.me/como-girar-la-pantalla-del-emulador-de-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

