<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Dando La Hora</title>
	<atom:link href="http://danlaho.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://danlaho.wordpress.com</link>
	<description>Tutos, explicaciones, ocio, y ps... De todo lo que se me ocurra</description>
	<lastBuildDate>Thu, 19 Jan 2012 13:14:42 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='danlaho.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/219bd8cc88696d10f5a0ed6752e73640?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Dando La Hora</title>
		<link>http://danlaho.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://danlaho.wordpress.com/osd.xml" title="Dando La Hora" />
	<atom:link rel='hub' href='http://danlaho.wordpress.com/?pushpress=hub'/>
		<item>
		<title>The Lion King Rises</title>
		<link>http://danlaho.wordpress.com/2012/01/18/the-lion-king-rises/</link>
		<comments>http://danlaho.wordpress.com/2012/01/18/the-lion-king-rises/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 11:42:52 +0000</pubDate>
		<dc:creator>MaritoCares</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://danlaho.wordpress.com/?p=868</guid>
		<description><![CDATA[No puedo dejar pasar esto&#8230; Y es que me da un escalofrío cada vez que lo veo&#8230; incluso mayor que cuando veo el original.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=868&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-size:small;">No puedo dejar pasar esto&#8230;</span></p>
<p>Y es que me da un escalofrío cada vez que lo veo&#8230; incluso mayor que cuando veo el original.</p>
<span style="text-align:center; display: block;"><a href="http://danlaho.wordpress.com/2012/01/18/the-lion-king-rises/"><img src="http://img.youtube.com/vi/1NRsPDhyHrc/2.jpg" alt="" /></a></span>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danlaho.wordpress.com/868/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danlaho.wordpress.com/868/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danlaho.wordpress.com/868/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danlaho.wordpress.com/868/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danlaho.wordpress.com/868/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danlaho.wordpress.com/868/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danlaho.wordpress.com/868/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danlaho.wordpress.com/868/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danlaho.wordpress.com/868/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danlaho.wordpress.com/868/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danlaho.wordpress.com/868/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danlaho.wordpress.com/868/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danlaho.wordpress.com/868/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danlaho.wordpress.com/868/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=868&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danlaho.wordpress.com/2012/01/18/the-lion-king-rises/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8abaf2e0d541eaecf5ca1727c3265195?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">mariocares</media:title>
		</media:content>
	</item>
		<item>
		<title>Eliminar credenciales Windows</title>
		<link>http://danlaho.wordpress.com/2012/01/11/eliminar-credenciales-windows/</link>
		<comments>http://danlaho.wordpress.com/2012/01/11/eliminar-credenciales-windows/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 13:08:09 +0000</pubDate>
		<dc:creator>MaritoCares</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://danlaho.wordpress.com/?p=863</guid>
		<description><![CDATA[Un pc aquí en la pega funciona como servidor. Me dio por poner el servidor de MongoDB adentro, cosa que todos entráramos aquí. Como usuario, tenía &#8220;Administrador&#8221; y me fijé que NO tenía contraseña. Tonces entré y le puse guardar &#8230; <a href="http://danlaho.wordpress.com/2012/01/11/eliminar-credenciales-windows/">Sigue leyendo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=863&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Un pc aquí en la pega funciona como servidor. Me dio por poner el servidor de MongoDB adentro, cosa que todos entráramos aquí.</p>
<p>Como usuario, tenía &#8220;Administrador&#8221; y me fijé que NO tenía contraseña. Tonces entré y le puse guardar credenciales porque, se suponía, no necesitaba nada más.</p>
<p>Resulta que SI necesitaba una contraseña&#8230; aunque no se por qué&#8230; y cuando entraba</p>
<div id="attachment_864" class="wp-caption aligncenter" style="width: 617px"><a href="http://danlaho.files.wordpress.com/2012/01/captura.png"><img class="size-full wp-image-864" title="Captura" src="http://danlaho.files.wordpress.com/2012/01/captura.png?w=640" alt=""   /></a><p class="wp-caption-text">Sin acceso a la red</p></div>
<p><span id="more-863"></span></p>
<p>Leyendo por ahí, llegue a que las credenciales se pueden borrar.</p>
<p>Se ejecuta <strong>editarasd rundll32 keymgr.dll, KRShowKeyMgr </strong>y tenemos el listado de todos los que guardamos.</p>
<div id="attachment_865" class="wp-caption aligncenter" style="width: 435px"><a href="http://danlaho.files.wordpress.com/2012/01/captura1.png"><img class="size-full wp-image-865" title="Captura" src="http://danlaho.files.wordpress.com/2012/01/captura1.png?w=640" alt=""   /></a><p class="wp-caption-text">Ventanita</p></div>
<p>&nbsp;</p>
<p>En mi caso, elimino el que quedo malo&#8230; y luego vuelvo a entrar <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danlaho.wordpress.com/863/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danlaho.wordpress.com/863/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danlaho.wordpress.com/863/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danlaho.wordpress.com/863/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danlaho.wordpress.com/863/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danlaho.wordpress.com/863/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danlaho.wordpress.com/863/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danlaho.wordpress.com/863/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danlaho.wordpress.com/863/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danlaho.wordpress.com/863/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danlaho.wordpress.com/863/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danlaho.wordpress.com/863/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danlaho.wordpress.com/863/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danlaho.wordpress.com/863/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=863&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danlaho.wordpress.com/2012/01/11/eliminar-credenciales-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8abaf2e0d541eaecf5ca1727c3265195?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">mariocares</media:title>
		</media:content>

		<media:content url="http://danlaho.files.wordpress.com/2012/01/captura.png" medium="image">
			<media:title type="html">Captura</media:title>
		</media:content>

		<media:content url="http://danlaho.files.wordpress.com/2012/01/captura1.png" medium="image">
			<media:title type="html">Captura</media:title>
		</media:content>
	</item>
		<item>
		<title>Pequeña aplicación sapea IPs en VB.NET y MongoDB</title>
		<link>http://danlaho.wordpress.com/2012/01/09/pequena-aplicacion-sapea-ips-en-vb-net-y-mongodb/</link>
		<comments>http://danlaho.wordpress.com/2012/01/09/pequena-aplicacion-sapea-ips-en-vb-net-y-mongodb/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 16:38:20 +0000</pubDate>
		<dc:creator>MaritoCares</dc:creator>
				<category><![CDATA[Aplicación]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[VB]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://danlaho.wordpress.com/?p=857</guid>
		<description><![CDATA[Resulta que en el trabajo me pidieron hacer un listado con todas las IPs de los PCs para usar el VNC Viewer. No eran muchos, unos 10 (en mi lugar de trabajo), y fue cosa de hacer un excel y &#8230; <a href="http://danlaho.wordpress.com/2012/01/09/pequena-aplicacion-sapea-ips-en-vb-net-y-mongodb/">Sigue leyendo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=857&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Resulta que en el trabajo me pidieron hacer un listado con todas las IPs de los PCs para usar el VNC Viewer. No eran muchos, unos 10 (en mi lugar de trabajo), y fue cosa de hacer un excel y listo.</p>
<p>Peeeero, resulta que aquí la red es wi-fi con un dhcp malvado&#8230; vez que reinician el router queda la escoba con el listado&#8230;</p>
<p>Por eso me dio por hacer una pequeñita aplicación que tomara la IP y el nombre de la máquina de la persona y la guardara en una colección <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  así de fácil.</p>
<p>Salto y a picar código <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span id="more-857"></span></p>
<p>Asumo que ya saben cómo instalar mongo (si no, lo pueden buscar atrás en los post), así que me salto esa parte.</p>
<p>Primero, tengo un XML con las configuraciones del servidor. Algo así:</p>
<p><pre class="brush: xml;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;Preferencias&gt;
  &lt;Servidor&gt;192.168.2.113&lt;/Servidor&gt;
  &lt;Puerto&gt;27017&lt;/Puerto&gt;
  &lt;Base&gt;proexsi&lt;/Base&gt;
&lt;/Preferencias&gt;</pre></p>
<p>Se explica bastante claro creo <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Lo segundo es leer las configuraciones. Esto lo metí dentro de una función en mi clase que devuelve el string de conexión:</p>
<p><pre class="brush: vb;">Private Function Preferencias() As String
        Try
            Dim string_preferencias As New StringBuilder
            Dim lector As XmlTextReader = New XmlTextReader(&quot;preferencias.xml&quot;)
            lector.ReadToFollowing(&quot;Servidor&quot;)
            string_preferencias.Append(lector.ReadElementContentAsString).Append(&quot;:&quot;)
            lector.ReadToFollowing(&quot;Puerto&quot;)
            string_preferencias.Append(lector.ReadElementContentAsString).Append(&quot;/&quot;)
            lector.ReadToFollowing(&quot;Base&quot;)
            string_preferencias.Append(lector.ReadElementContentAsString)
            Return &quot;mongodb://&quot; &amp; string_preferencias.ToString
        Catch ex As Exception
            Console.WriteLine(ex.Message)
            Return Nothing
        End Try
    End Function</pre></p>
<p>En el constructor de mi clase <strong>funciones </strong>realizo la conexión y cosas, tomando el parámetro de la función anterior</p>
<p><pre class="brush: vb;">Public Sub New()
        Try
            Dim conString As String = getPreferencias()
            obj_mongoserver = MongoServer.Create(conString)
            proexsiBD = obj_mongoserver.GetDatabase(&quot;proexsi&quot;)
            usuarios = proexsiBD.GetCollection(&quot;usuarios&quot;)
        Catch ex As Exception
            Console.WriteLine(ex.Message)
            Me.error_ = ex.Message
            Console.ReadLine()
            Return
        End Try
    End Sub</pre></p>
<p>Como ven, tengo el servidor, la bd y la colección que vamos a usar. Estos atributos los instanc(s,z)io así:</p>
<p><pre class="brush: vb;"> Private datos_ips As List(Of String)
    Private obj_mongoserver As MongoServer
    Private proexsiBD As MongoDatabase
    Private usuarios As MongoCollection
    Private error_ As String = &quot;Error&quot;</pre></p>
<p>Sigamos. Ahora leemos las IPs con el siguiente código:</p>
<p><pre class="brush: vb;">Private Function IPeses() As List(Of String)
        Dim valores As New List(Of String)
        For Each tmp As IPAddress In Dns.GetHostEntry(Dns.GetHostName).AddressList
            If (tmp.ToString.Length &lt; 15) Then
                valores.Add(Dns.GetHostName)
                valores.Add(tmp.ToString)
                Return valores
            End If
        Next
        Return Nothing
    End Function</pre></p>
<p>Como leen, el Dns.GetHostEntry(&#8220;nombre_de_maquina&#8221;).AddressList devuelve un array, que desmenuzamos con un for each. El array trae la ip, y direcciones MACs. No se me ocurrió otra forma de saber si era IP o MAC <img src='http://s2.wp.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>La función anterior, a su vez, es parámetro de otra, que se encarga de ingresar los valores en la bd. El código es así:</p>
<p><pre class="brush: vb;">Private Function Ingreso(valores As List(Of String)) As Boolean
        Try
            valores.ForEach(Sub(x As String) Console.WriteLine(x))
            Console.WriteLine(&quot;----------------------------------------------------------&quot;)
            Dim usuario As New BsonDocument
            If Not existe(valores(0)) Then
                usuario(&quot;Nombre&quot;) = &quot;usuario&quot;
            End If
            usuario(&quot;PC&quot;) = valores(0)
            usuario(&quot;IP&quot;) = valores(1)
            Console.WriteLine(usuario.Elements.ToJson.ToString)
            Console.WriteLine(&quot;----------------------------------------------------------&quot;)

            If usuario.ElementCount = 3 Then
                usuarios.Insert(usuario)
            Else
                Dim q = Query.EQ(&quot;PC&quot;, valores(0))
                Dim u = Update.Set(&quot;IP&quot;, valores(1))
                usuarios.FindAndModify(q, Nothing, u, True)
            End If
            Return True
        Catch ex As Exception
            Console.WriteLine(ex.Message)
            Return False
        End Try
    End Function</pre></p>
<p>Aquí tenemos un insert y un update set. Básicamente revisamos si es primera vez que se registra el PC o es una actualización de IP.<br />
La manera de crear documentos es bastante simple, y de hecho se parece al ingreso de json <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  . Una vez que lo tenemos listo, simplemente no insertamos tal cual.<br />
Si no, hacemos una actualización de UN ATRIBUTO del documento, no el documento entero ! <strong>q </strong>es el filtro (que la máquina sea = a &#8220;Mario-PC&#8221; por ejemplo) y el valor a actualizar es la IP en la variable <strong>u</strong>. Ingresamos y se acaba el problema <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>La última función, es para ver si el registro es nuevo o no. El código es el siguiente:</p>
<p><pre class="brush: vb;">Private Function existe(pc As String) As Boolean
        Try
            Dim registros As MongoCollection(Of BsonDocument) =
                proexsiBD.GetCollection(Of BsonDocument)(&quot;usuarios&quot;)
            Dim array As New List(Of String)
            array.Add(pc)
            Dim q = Query.All(&quot;PC&quot;, BsonArray.Create(array))
            Console.WriteLine(registros.Find(q).Query)
            Console.WriteLine(&quot;----------------------------------------------------------&quot;)
            If registros.Find(q).Count = 0 Then
                Console.WriteLine(&quot;Nuevo&quot;)
                Return False
            Else
                Console.WriteLine(&quot;Existe&quot;)
                Return True
            End If
        Catch ex As Exception
            Console.WriteLine(&quot;* * * &quot; &amp; ex.Message &amp; &quot; * * *&quot;)
            Return Nothing
        End Try
    End Function</pre></p>
<p>Aquí hacemos una búsqueda de todos los documentos, si el valor de <strong>PC</strong> existe en algún lado con el valor <strong>Mario-PC</strong> Si no encontramos ningún documento que contenga al PC Mario-PC, es uno nuevo. Si no, lo contrario <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Por último, el ejecutable de consola:</p>
<p><pre class="brush: vb;">Sub Main()
        Dim c As New Controlador
        Dim flag As Boolean = c.setIngreso(c.getDatos_ips)
        If flag Then
            Console.Write(&quot;IP Actualizada&quot;)
        Else
            Console.WriteLine(&quot;x_X&quot;)
        End If
        Console.ReadLine()
    End Sub</pre></p>
<p>Se instanc(s,z)ia la clase y eso sería todo <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Como leen, es una aplicación de consola (No necesito que el usuario interactue ni nada <img src='http://s1.wp.com/wp-includes/images/smilies/icon_eek.gif' alt='8O' class='wp-smiley' /> )</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danlaho.wordpress.com/857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danlaho.wordpress.com/857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danlaho.wordpress.com/857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danlaho.wordpress.com/857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danlaho.wordpress.com/857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danlaho.wordpress.com/857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danlaho.wordpress.com/857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danlaho.wordpress.com/857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danlaho.wordpress.com/857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danlaho.wordpress.com/857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danlaho.wordpress.com/857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danlaho.wordpress.com/857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danlaho.wordpress.com/857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danlaho.wordpress.com/857/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=857&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danlaho.wordpress.com/2012/01/09/pequena-aplicacion-sapea-ips-en-vb-net-y-mongodb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8abaf2e0d541eaecf5ca1727c3265195?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">mariocares</media:title>
		</media:content>
	</item>
		<item>
		<title>Los números de 2011</title>
		<link>http://danlaho.wordpress.com/2012/01/02/los-numeros-de-2011/</link>
		<comments>http://danlaho.wordpress.com/2012/01/02/los-numeros-de-2011/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 14:33:39 +0000</pubDate>
		<dc:creator>MaritoCares</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://danlaho.wordpress.com/?p=854</guid>
		<description><![CDATA[Los duendes de las estadísticas de WordPress.com prepararon un reporte para el año 2011 de este blog. Aqui es un extracto La sala de conciertos de la Ópera de Sydney contiene 2.700 personas. Este blog fue visto cerca de 17.000 &#8230; <a href="http://danlaho.wordpress.com/2012/01/02/los-numeros-de-2011/">Sigue leyendo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=854&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Los duendes de las estadísticas de WordPress.com prepararon un reporte para el año 2011 de este blog.</p>
<p><a href="/2011/annual-report/"><img src="http://www.wordpress.com/wp-content/mu-plugins/annual-reports/img/emailteaser.jpg" alt="" width="100%" /></a></p>
<p>Aqui es un extracto</p>
<blockquote><p>La sala de conciertos de la Ópera de Sydney contiene 2.700 personas. Este blog fue visto cerca de <strong>17.000</strong> veces en 2011. Si fuese un concierto en la Ópera, se necesitarían alrededor de 6 actuaciones agotadas para que toda esa gente lo viera.</p></blockquote>
<p><a href="/2011/annual-report/">Haz click para ver el reporte completo.</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danlaho.wordpress.com/854/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danlaho.wordpress.com/854/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danlaho.wordpress.com/854/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danlaho.wordpress.com/854/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danlaho.wordpress.com/854/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danlaho.wordpress.com/854/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danlaho.wordpress.com/854/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danlaho.wordpress.com/854/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danlaho.wordpress.com/854/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danlaho.wordpress.com/854/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danlaho.wordpress.com/854/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danlaho.wordpress.com/854/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danlaho.wordpress.com/854/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danlaho.wordpress.com/854/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=854&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danlaho.wordpress.com/2012/01/02/los-numeros-de-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8abaf2e0d541eaecf5ca1727c3265195?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">mariocares</media:title>
		</media:content>

		<media:content url="http://www.wordpress.com/wp-content/mu-plugins/annual-reports/img/emailteaser.jpg" medium="image" />
	</item>
		<item>
		<title>mongod -help</title>
		<link>http://danlaho.wordpress.com/2011/12/27/mongod-help/</link>
		<comments>http://danlaho.wordpress.com/2011/12/27/mongod-help/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 18:19:29 +0000</pubDate>
		<dc:creator>MaritoCares</dc:creator>
				<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://danlaho.wordpress.com/?p=850</guid>
		<description><![CDATA[La salida help de mongod (el ejecutable del servidor) ** Nota: Utilizando la versión de 32 bits de MongoDB, estamos limitados a 2 GB de datos aprox. Ver http://blog.mongodb.org/post/137788967/32-bit-limitations Opciones Generales: -h [ --help ] Muestra ésta información. &#8211;version Muestra &#8230; <a href="http://danlaho.wordpress.com/2011/12/27/mongod-help/">Sigue leyendo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=850&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>La salida help de mongod (el ejecutable del servidor)</p>
<p>** Nota: Utilizando la versión de 32 bits de MongoDB, estamos limitados a 2 GB de datos aprox. Ver http://blog.mongodb.org/post/137788967/32-bit-limitations</p>
<h1>Opciones Generales:</h1>
<ul>
<li><strong>-h [ --help ]</strong> Muestra ésta información.</li>
<li><strong>&#8211;version</strong> Muestra la versión.</li>
<li><strong>-f [ --config ]</strong> Agrega un archivo de configuración (como parámetro) especificando opciones adicionales.</li>
<li><strong>-v [ --verbose ]</strong> Ser más detallado (Mientras más &#8220;v&#8221;, nivel de detalle ej. -vvvvv)</li>
<li><strong>&#8211;quiet</strong> Salidas más silenciosas (en nivel de detalle)</li>
<li><strong>&#8211;port</strong> Agrega puerto especificado como parámetro</li>
<li><strong>&#8211;bind_ip arg</strong> Listado de direcciones IP, separadas por comas &#8220;,&#8221; de las cuales se escucharán peticiones. Por defecto, se escuchan TODAS las IPs.</li>
<li><strong>&#8211;maxConns</strong> Máximo de conexiones simultaneas como parámetro.</li>
<li><strong>&#8211;objcheck</strong> Inspecciona los datos del cliente para validar la recepción.</li>
<li><strong>&#8211;logpath</strong> Archivo log donde se escriben todas las salidas del servidor, en vez de hacerlo por pantalla. Debe ser un archivo, no una carpeta.</li>
<li><strong>&#8211;logappend</strong> Añadir entradas al logpath en vez de sobre escribirlas.</li>
<li><strong>&#8211;pidfilepath</strong> Ruta absoluta (como parámetro) al pidfile. (Si no se agrega, ningún pidfile es creado).</li>
<li><strong>&#8211;keyFile</strong> pass para la autentificación de clusters (solo para replicas).</li>
<li><strong>&#8211;auth</strong> Se ejecuta en modo seguro.</li>
<li><strong>&#8211;cpu</strong> Periódicamente muestra el uso de cpu e iowait.</li>
<li><strong>&#8211;dbpath</strong> Parámetro ruta del directorio donde almacena los datos.</li>
<li><strong>&#8211;diaglog</strong> arg 0=off 1=W 2=R 3=both 7=W+some reads</li>
<li><strong>&#8211;directoryperdb</strong> Cada bd se almacenará en un directodio personal.</li>
<li><strong>&#8211;journal</strong> enable journaling</li>
<li><strong>&#8211;journalOptions</strong> arg journal diagnostic options</li>
<li><strong>&#8211;journalCommitInterval</strong> arg how often to group/batch commit (ms)</li>
<li><strong>&#8211;ipv6</strong> Habilita soporte para IPv6 (deshabilitado por defecto).</li>
<li><strong>&#8211;jsonp</strong> Permite acceso JSONP via http (implica valores de seguridad).</li>
<li><strong>&#8211;noauth</strong> No se ejecuta en modo seguro.</li>
<li><strong>&#8211;nohttpinterface</strong> Deshabilita interface http.</li>
<li><strong>&#8211;nojournal</strong> disable journaling (journaling is on by defaultfor 64 bit)</li>
<li><strong>&#8211;noprealloc</strong> Deshabilita el prealojamiento de archivos de datos (implica disminución en desempeño).</li>
<li><strong>&#8211;noscripting</strong> Deshabilita motor de scripting.</li>
<li><strong>&#8211;notablescan</strong> No permite búsquedas en tablas.</li>
<li><strong>&#8211;nssize</strong> arg (=16) .ns file size (in MB) for new databases</li>
<li><strong>&#8211;profile</strong> arg 0=off 1=slow, 2=all</li>
<li><strong>&#8211;quota</strong> Limita cada bd a cierta cantidad de archivos (8 por defecto).</li>
<li><strong>&#8211;quotaFiles</strong> Parámetro de cantidad de número de archivos permitidos por bd. Requiere del comando anterior.</li>
<li><strong>&#8211;rest</strong> turn on simple rest api</li>
<li><strong>&#8211;repair</strong> Ejecuta &#8220;reparar&#8221; en todas las bds.</li>
<li><strong>&#8211;repairpath</strong> arg root directory for repair files &#8211; defaults to dbpath</li>
<li><strong>&#8211;slowms</strong> arg (=100) value of slow for profile and console log</li>
<li><strong>&#8211;smallfiles</strong> use a smaller default file size</li>
<li><strong>&#8211;syncdelay</strong> arg (=60) seconds between disk syncs (0=never, but not recommended)</li>
<li><strong>&#8211;sysinfo</strong> print some diagnostic system information</li>
<li><strong>&#8211;upgrade</strong> upgrade db if needed</li>
</ul>
<h1>Windows Service Control Manager options:</h1>
<ul>
<li><strong>&#8211;install</strong> Instala el servidor como un servicio.</li>
<li><strong>&#8211;remove</strong> Lo remueve&#8230;</li>
<li><strong>&#8211;reinstall</strong> Reinstala el servicio (primero lo desinstala y luego lo vuelve a instalar)</li>
<li><strong>&#8211;serviceName</strong> Parámetro para determinar el nombre del servicio (para windows).</li>
<li><strong>&#8211;serviceDisplayName</strong>  Parámetro para determinar el nombre a mostrar del servicio (para windows).</li>
<li><strong>&#8211;serviceDescription</strong>  Parámetro para determinar la descripción del servicio (para windows).</li>
<li><strong>&#8211;serviceUser</strong> Parámetro para determinar el usuario que ejecutará el servicio.</li>
<li><strong>&#8211;servicePassword</strong> Parámetro para la contraseña del usuario usado anteriormente.</li>
</ul>
<h1>Replication options:</h1>
<ul>
<li><strong>&#8211;fastsync</strong> Indica que ésta instancia se inicia desde una ruta de instantánea dbpath del par de replicación.</li>
<li><strong>&#8211;oplogSize</strong> Parámetro que indica el límite del tamaño (en MB) para el log op.</li>
</ul>
<h1>Master/slave options:</h1>
<ul>
<li><strong>&#8211;master</strong> Modo master.</li>
<li><strong>&#8211;slave</strong> Modo slave.</li>
<li><strong>&#8211;source</strong> Parámetro si es slave: especifica al master como &lt;server:port&gt;</li>
<li><strong>&#8211;only</strong> Parámetro si es slave: especifica una única bd a replicars.</li>
<li><strong>&#8211;slavedelay</strong> Parámetro que especifica el retraso (en segundos) a usar cuando se apliquen opciones desde el master al slave.</li>
<li><strong>&#8211;autoresync</strong> Automáticamente resincronisa si los datos del slave son antiguos.</li>
</ul>
<h1>Replica set options:</h1>
<ul>
<li><strong>&#8211;replSet</strong> arg arg is &lt;setname&gt;[/&lt;optionalseedhostlist&gt;] //NI IDEA COMO SE TRADUCE ESTO&#8230;</li>
</ul>
<h1>Sharding options:</h1>
<ul>
<li><strong>&#8211;configsvr</strong> Define que esto es una db configuración de un cluster; puerto por defecto 27019; Directorio por defecto /data/configdb</li>
<li><strong>&#8211;shardsvr</strong> Define que esto es una bd fragmento de un cluster; puerto por defecto 27018</li>
<li><strong>&#8211;noMoveParanoia</strong> Desactiva el ahorro &#8220;paranóico&#8221; para moveChunk. Por defecto viene activado (por ahora).</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danlaho.wordpress.com/850/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danlaho.wordpress.com/850/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danlaho.wordpress.com/850/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danlaho.wordpress.com/850/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danlaho.wordpress.com/850/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danlaho.wordpress.com/850/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danlaho.wordpress.com/850/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danlaho.wordpress.com/850/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danlaho.wordpress.com/850/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danlaho.wordpress.com/850/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danlaho.wordpress.com/850/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danlaho.wordpress.com/850/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danlaho.wordpress.com/850/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danlaho.wordpress.com/850/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=850&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danlaho.wordpress.com/2011/12/27/mongod-help/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8abaf2e0d541eaecf5ca1727c3265195?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">mariocares</media:title>
		</media:content>
	</item>
		<item>
		<title>Android y Json</title>
		<link>http://danlaho.wordpress.com/2011/11/12/android-y-json/</link>
		<comments>http://danlaho.wordpress.com/2011/11/12/android-y-json/#comments</comments>
		<pubDate>Sat, 12 Nov 2011 04:09:47 +0000</pubDate>
		<dc:creator>MaritoCares</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://danlaho.wordpress.com/?p=842</guid>
		<description><![CDATA[Tengo un tiempito loco así que escribo esta entrada En la entrada anterior, vimos como crear un login de usuario consultando un servidor, y dependiendo de la respuesta entramos o no al sistema. La respuesta era super simple y no &#8230; <a href="http://danlaho.wordpress.com/2011/11/12/android-y-json/">Sigue leyendo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=842&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Tengo un tiempito loco así que escribo esta entrada <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>En la entrada anterior, vimos como crear un login de usuario consultando un servidor, y dependiendo de la respuesta entramos o no al sistema. La respuesta era super simple y no escribí nada sobre JSON o cómo entenderlo&#8230; por lo que ahora vamos a verlo.</p>
<p>JSON es una forma de almacenar información de manera ligera. En JSON lo que se guardan son objetos, pero en texto plano. Se organiza de tal manera que es relativamente simple entender en todo momento qué es lo que tenemos <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Todo objeto comienza con su nombre (dah <img src='http://s1.wp.com/wp-includes/images/smilies/icon_eek.gif' alt='8O' class='wp-smiley' /> ), seguido por <strong>:</strong> y luego sus atributos dentro de llaves <strong>{}</strong>. Al ser objetos, puedes tener objetos dentro de objetos, o arreglos de objetos. Los objetos deben ir entre comillas (<strong>&#8221; &#8220;</strong>) para identificar su nombre; de la misma forma sus valores, a menos que sean números.</p>
<p>En el ejemplo anterior (del login) teníamos la siguiente estructura</p>
<p><pre class="brush: jscript;">{&quot;mensaje&quot;: {&quot;Estado&quot;: &quot;OK&quot;, &quot;Unidad&quot;: &quot;Pintura&quot;, &quot;CodUnidad&quot;: 5}}
{&quot;mensaje&quot;: {&quot;Estado&quot;: &quot;ERROR&quot;, &quot;Mensaje&quot;: &quot;Pass incorrecta.&quot;}}</pre></p>
<p><span id="more-842"></span></p>
<p>Leyendo a la rápida, para la primera tenemos el objeto <strong>mensaje</strong>, con 3 atributos (objetos):</p>
<ol>
<li><strong>Estado</strong>, con su valor <strong>OK</strong>.</li>
<li><strong>Unidad</strong>, valor <strong>Pintura</strong></li>
<li><strong>CodUnidad</strong>, valor <strong>5</strong></li>
</ol>
<p>Y el segundo se llama igual, con sus respectivos atributos.</p>
<p>Veamos un ejemplo más largo e incluyendo más datos (La identación no es necesaria, pero lo hice para visualizarlo más rápido <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ).</p>
<p><pre class="brush: jscript;">{
  &quot;Ordenes&quot;: [
    {
      &quot;Orden&quot;: {
	&quot;id&quot;: 5,
	&quot;Nombre&quot;: &quot;5162310 Reparación cubierta Principal - Según Inspección&quot;,
	&quot;Descripcion&quot;: &quot;Reparación cubierta Principal - Según Inspección&quot;,
	&quot;Proyecto&quot;: &quot;BP FIORELLA&quot;
      }
    },
    {
      &quot;Orden&quot;: {
	&quot;id&quot;: 4,
	&quot;Nombre&quot;: &quot;5162240 Cambiar plancha casco sector tunel + canaletas enfriamiento&quot;,
	&quot;Descripcion&quot;: &quot;Cambiar plancha casco sector tunel + canaletas enfriamiento&quot;,
	&quot;Proyecto&quot;: &quot;BP FIORELLA&quot;
      }
    },
    {
      &quot;Orden&quot;: {
	&quot;id&quot;: 3,
	&quot;Nombre&quot;: &quot;5162210 Nuevo Doble fondo&quot;,
	&quot;Descripcion&quot;: &quot;Nuevo Doble fondo&quot;,
	&quot;Proyecto&quot;: &quot;BP FIORELLA&quot;
      }
    },
    {
      &quot;Orden&quot;: {
	&quot;id&quot;: 2,
	&quot;Nombre&quot;: &quot;5162230 Nuevo Forro tunel&quot;,
	&quot;Descripcion&quot;: &quot;Nuevo Forro tunel&quot;,
	&quot;Proyecto&quot;: &quot;BP FIORELLA&quot;
      }
    },
    {
      &quot;Orden&quot;: {
	&quot;id&quot;: 1,
	&quot;Nombre&quot;: &quot;5162220 Bases Descansos Linea de eje&quot;,
	&quot;Descripcion&quot;: &quot;Bases Descansos Linea de eje&quot;,
	&quot;Proyecto&quot;: &quot;BP FIORELLA&quot;
      }
    }
  ],
  &quot;Proyectos&quot;: [
    &quot;BP FIORELLA&quot;
  ]
}</pre></p>
<p>Tenemos 2 objetos en este JSON: <strong>Ordenes</strong> y <strong>Proyectos</strong>. Los 2 son objetos de Arrays. Los JSONArray comienzan con <strong>[]</strong>, y se separan por <strong>,</strong> . El primero es un arrays de objetos y el segundo un array de strings.</p>
<p>Para el primero (<strong>Ordenes</strong>) podemos notar que es un array de objetos porque cada valor del array comienza con <strong>{</strong> , a diferencia de <strong>Proyectos</strong> que solo contiene un atributo.</p>
<div id="attachment_843" class="wp-caption aligncenter" style="width: 519px"><a href="http://danlaho.files.wordpress.com/2011/11/imagen78.png"><img class="size-full wp-image-843" title="imagen78" src="http://danlaho.files.wordpress.com/2011/11/imagen78.png?w=640" alt=""   /></a><p class="wp-caption-text">Árbol</p></div>
<p>Esa fue la salida&#8230; pero cómo se hizo? <img src='http://s1.wp.com/wp-includes/images/smilies/icon_eek.gif' alt='8O' class='wp-smiley' /> </p>
<p>Al ser esto un archivo de texto, puede crearse concatenando un String o usando la librería Json. Concatenar un String es lo más cómodo si tenemos una estructura corta (como la del login), teniendo cuidado de ubicar bien las llaves. Pero si es algo más elaborado, lo mejor es usar las herramientas que nos entrega <a href="http://www.json.org/java/index.html" target="_blank">Json</a> con json.put <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Imaginemos que estamos en un servlet, y nos ha llegado una petición para entregar la estructura de arriba. La forma de llenarlo, es de adentro hacia afuera: Comenzando por el objeto <strong>orden</strong>, dentro del <strong>array</strong> del objeto <strong>ordenes</strong>.</p>
<p>Entonces creamos el objeto <strong>json</strong> de la clase <strong>JSONObject</strong> (suponiendo que están siguiendo el link de arriba. Aquí vamos a contener todo.</p>
<p>Ahora creamos 2 objetos más, de la clase JSONArray: <strong>proyectos  </strong>y <strong>ordenes</strong>. Empezando por el más fácil (<strong>proyectos</strong>) insertamos un valor por cada String. En el ejemplo de arriba solo tengo un elemento, pero si fueran más, quedaría algo así:</p>
<p><pre class="brush: java;">//Array con todos los valores a agregar
ArrayList&lt;String&gt; Arrayproyectos = new ArrayList&lt;String&gt;();
Arrayproyectos.add(&quot;Proyecto 1&quot;); Arrayproyectos.add(&quot;Proyecto 2&quot;); Arrayproyectos.add(&quot;Proyecto 3&quot;);
//Iteramos e ingresamos cada elemento a el JsonArray
for(String s : Arrayproyectos){
   proyectos.put(s);
}
</pre></p>
<p>Y obtenemos algo así:<br />
[Proyecto 1, Proyecto 2, Proyecto 3]</p>
<p>Teniendo nuestro JsonArray <strong>proyectos</strong> listo, lo agregamos al contenedor <strong>json</strong> de la misma manera, pero agregando un parámetro que determina el nombre del valor.</p>
<p><pre class="brush: plain;">json.put(&quot;Proyectos&quot;, proyectos);</pre></p>
<p>Y de esta forma ya tenemos el primer elemento en nuestro contenedor.</p>
<p>Para ingresar el array ordenes, se hace de la misma manera, pero combinando entre array y objeto. Algo así</p>
<p><pre class="brush: java;">/*Suponiendo que vamos a ingresar 5 objetos al array */
JSONArray ordenes = new JSONArray();
for(int i=0; i&lt;5; i++){
//Primero llenamos el objeto orden
   JSONObject orden = new JSONObject();
   orden.put(&quot;id&quot;, VARIABLE_CON_ID);
   orden.put(&quot;Nombre&quot;, VARIABLE_CON_NOMBRE);
   orden.put(&quot;Descripcion&quot;, VARIABLE_CON_DESCRIPCION);
   orden.put(&quot;Proyecto&quot;, VARIABLE_CON_PROYECTO);
//Ahora que lo llenamos, lo metemos en el array
   ordenes.put(orden);
}
//Ya que salimos del for, tenemos 5 ordenes en el array.
//Metemos el array en el contenedor
json.put(&quot;Ordenes&quot;, ordenes); </pre></p>
<p>Y esa es toda la ciencia <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  de esta manera generamos el json. Podemos hacer lo mismo cuantas veces queramos, logrando muchos más niveles de profundidad.</p>
<p>Con esto terminamos la generación del json en el servidor. Vamos ahora a Android para leerlo, aunque se hace de la misma manera, pero a la inversa <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><pre class="brush: java;">
//Creamos el objeto JSONObject y lo instanciamos con el string entregado por el servidor.
//Lo mismo que la entrada pasada.
JSONObject job = new JSONObject(stream.toString());
//Creamos los JSONArrays
JSONArray ordenes = new JSONArray(job.getJSONArray(&quot;Ordenes&quot;).toString());
JSONArray proyectos = new JSONArray(job.getJSONArray(&quot;Proyectos&quot;).toString());
//Recorremos el primer JSONArray
for(int i = 0; i &lt; ordenes.length(); i++){
   //Creamos el objeto para leer lo que viene en la posición i
   JSONObject orden = ordenes.getJSONObject(i);
   //Creamos el objeto orden propiamente tal
   JSONObject o = orden.getJSONObject(&quot;Orden&quot;);
   //Accedemos a los valores
   int id = o.getInt(&quot;id&quot;);
   String nombre = o.getString(&quot;Nombre&quot;);
   //....
}

//Para leer el Array proyectos, lo mismo
for(int i = 0; i &lt; proyectos.length(); i++){
   String proyecto = proyectos.getString(
}</pre></p>
<p> <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danlaho.wordpress.com/842/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danlaho.wordpress.com/842/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danlaho.wordpress.com/842/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danlaho.wordpress.com/842/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danlaho.wordpress.com/842/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danlaho.wordpress.com/842/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danlaho.wordpress.com/842/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danlaho.wordpress.com/842/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danlaho.wordpress.com/842/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danlaho.wordpress.com/842/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danlaho.wordpress.com/842/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danlaho.wordpress.com/842/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danlaho.wordpress.com/842/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danlaho.wordpress.com/842/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=842&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danlaho.wordpress.com/2011/11/12/android-y-json/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8abaf2e0d541eaecf5ca1727c3265195?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">mariocares</media:title>
		</media:content>

		<media:content url="http://danlaho.files.wordpress.com/2011/11/imagen78.png" medium="image">
			<media:title type="html">imagen78</media:title>
		</media:content>
	</item>
		<item>
		<title>Login usuario simple para Android</title>
		<link>http://danlaho.wordpress.com/2011/10/31/login-usuario-simple-para-android/</link>
		<comments>http://danlaho.wordpress.com/2011/10/31/login-usuario-simple-para-android/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 01:38:36 +0000</pubDate>
		<dc:creator>MaritoCares</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://danlaho.wordpress.com/?p=835</guid>
		<description><![CDATA[Siguiendo con los tutos de Android que comencé ayer, esta vez vamos a crear un login de usuario simplecito enviando datos por POST a un servidor, y recibiendo un JSON como respuesta, la cual mostramos con un mensaje Toast Algo &#8230; <a href="http://danlaho.wordpress.com/2011/10/31/login-usuario-simple-para-android/">Sigue leyendo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=835&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Siguiendo con los tutos de Android que comencé ayer, esta vez vamos a crear un login de usuario simplecito enviando datos por POST a un servidor, y recibiendo un JSON como respuesta, la cual mostramos con un mensaje Toast <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Algo así</p>
<div id="attachment_836" class="wp-caption aligncenter" style="width: 650px"><a href="http://danlaho.files.wordpress.com/2011/10/imagen74.png"><img class="size-full wp-image-836" title="imagen74" src="http://danlaho.files.wordpress.com/2011/10/imagen74.png?w=640&#038;h=408" alt="" width="640" height="408" /></a><p class="wp-caption-text">Login Activity</p></div>
<p><span id="more-835"></span>Lo primero entonces es crear el esqueleto del login. Lo hice en una tabla, con 2 textview, 2 edittexts y 1 botón. El código es así:</p>
<p><pre class="brush: xml;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
    &lt;TableLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
        android:layout_width=&quot;fill_parent&quot;
        android:layout_height=&quot;fill_parent&quot;
        android:stretchColumns=&quot;1&quot;&gt;
        &lt;TableRow&gt;
            &lt;TextView android:text=&quot;Usuario: &quot;
                android:id=&quot;@+id/TextView01&quot;
                android:layout_width=&quot;wrap_content&quot;
                android:layout_height=&quot;wrap_content&quot;&gt;
            &lt;/TextView&gt;
            &lt;EditText android:text=&quot;&quot;
                android:id=&quot;@+id/txtUsername&quot;
                android:layout_width=&quot;fill_parent&quot;
                android:layout_height=&quot;wrap_content&quot;&gt;
            &lt;/EditText&gt;
        &lt;/TableRow&gt;
        &lt;TableRow&gt;
            &lt;TextView android:text=&quot;Contraseña: &quot;
                android:id=&quot;@+id/TextView02&quot;
                android:layout_width=&quot;wrap_content&quot;
                android:layout_height=&quot;wrap_content&quot;&gt;
            &lt;/TextView&gt;
            &lt;EditText android:text=&quot;&quot;
                android:id=&quot;@+id/txtPass&quot;
                android:layout_width=&quot;fill_parent&quot;
                android:layout_height=&quot;wrap_content&quot;
                android:password=&quot;true&quot;&gt;
            &lt;/EditText&gt;
        &lt;/TableRow&gt;
        &lt;TableRow&gt;
            &lt;Button android:text=&quot;Conectar&quot;
                android:id=&quot;@+id/btnLogin&quot;
                android:layout_width=&quot;fill_parent&quot;
                android:layout_height=&quot;wrap_content&quot;&gt;
            &lt;/Button&gt;
        &lt;/TableRow&gt;
    &lt;/TableLayout&gt; </pre></p>
<p>Ahora que tenemos el esqueleto, vamos a nuestra clase Activity principal. Primero los imports que se usarán (son bastantes&#8230;):</p>
<p><pre class="brush: java;">package marcoTablet.Android;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.util.Log;

import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.HttpResponse;

import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONException;

import java.util.List;
import java.util.ArrayList;

import java.io.UnsupportedEncodingException;
import java.io.IOException;
import java.io.InputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;

import java.lang.IllegalStateException;
import java.lang.StringBuilder;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;</pre></p>
<p>En el onCreate solamente creo objetos para retener los controles, y al botón le asigno el evento click para empezar el logueo.</p>
<p><pre class="brush: java;">     public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        txtUsername = (EditText)this.findViewById(R.id.txtUsername);
        txtPass = (EditText)this.findViewById(R.id.txtPass);
        btnLogin = (Button)this.findViewById(R.id.btnLogin);
        btnLogin.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v){
                validar(txtUsername.getText().toString(), txtPass.getText().toString());
            }
        });
    }</pre></p>
<p>Ahora, vamos a la función validar que recibe el nombre de usuario y su contraseña, y devuelve un boolean para ver si estamos bien o no.</p>
<p><pre class="brush: java;">private boolean validar(String username, String pass){
        /* Comprobamos que no venga alguno en blanco. */
        if (!username.equals(&quot;&quot;) &amp;&amp; !pass.equals(&quot;&quot;)){
            /* Creamos el objeto cliente que realiza la petición al servidor */
            HttpClient cliente = new DefaultHttpClient();
            /* Definimos la ruta al servidor. En mi caso, es un servlet. */
            HttpPost post = new HttpPost(&quot;http://192.168.0.142:8080/marcoWeb/Login&quot;);

            try{
                /* Defino los parámetros que enviaré. Primero el nombre del parámetro, seguido por el valor. Es lo mismo que hacer un
                 http://192.168.0.142:8080/marcoWeb/Login?username=mario&amp;pass=maritoPass&amp;convertir=no */
                List&lt;NameValuePair&gt; nvp = new ArrayList&lt;NameValuePair&gt;(2);
                nvp.add(new BasicNameValuePair(&quot;username&quot;, username));
                /* Encripto la contraseña en MD5. Definición más abajo */
                nvp.add(new BasicNameValuePair(&quot;pass&quot;, toMd5(pass)));
                nvp.add(new BasicNameValuePair(&quot;convertir&quot;, &quot;no&quot;));
                /* Agrego los parámetros a la petición */
                post.setEntity(new UrlEncodedFormEntity(nvp));
                /* Ejecuto la petición, y guardo la respuesta */
                HttpResponse respuesta = cliente.execute(post);

                try{
                    /* Traspaso la respuesta del servidor (que viene como JSON) a la instancia de JSONObject en job.
                     /* Definición de inputStreamToString() más abajo. */
                    JSONObject job = new JSONObject(this.inputStreamToString(respuesta.getEntity().getContent()).toString());
                    /* Nuevo objeto, que contiene el valor para mensaje (definido en el JSON que crea el servidor */
                    JSONObject mensaje = job.getJSONObject(&quot;mensaje&quot;);
                    /* Muestro la respuesta */
                    Toast.makeText(Login.this, mensaje.getString(&quot;Estado&quot;), Toast.LENGTH_LONG).show();
                    /* Abajo todas los exceptions que pueden ocurrir. Se imprimen en el log */
                    return true;
                }catch(JSONException ex){
                    Log.w(&quot;Aviso&quot;, ex.toString());
                    return false;
                }
            }catch(ClientProtocolException ex){
                Log.w(&quot;ClientProtocolException&quot;, ex.toString());
                return false;
            }catch(UnsupportedEncodingException ex){
                Log.w(&quot;UnsupportedEncodingException&quot;, ex.toString());
                return false;
            }catch(IOException ex){
                Log.w(&quot;IOException&quot;, ex.toString());
                return false;
            }
            catch(IllegalStateException ex){
                Log.w(&quot;IOException&quot;, ex.toString());
                return false;
            }
        }else{
            Toast.makeText(Login.this, &quot;Campo vac'io !&quot;,
                            Toast.LENGTH_LONG).show();
            return false;
        }
    }</pre></p>
<p>La respuesta del servidor es así:<br />
Login OK:</p>
<p><pre class="brush: jscript;">{&quot;mensaje&quot;: {&quot;Estado&quot;: &quot;OK&quot;, &quot;Unidad&quot;: &quot;Pintura&quot;, &quot;CodUnidad&quot;: 5}}</pre></p>
<p>Login MAL</p>
<p><pre class="brush: jscript;">{&quot;mensaje&quot;: {&quot;Estado&quot;: &quot;ERROR&quot;, &quot;Mensaje&quot;: &quot;Pass incorrecta.&quot;}}</pre></p>
<p>La forma de leer los datos de la BD y el traspaso a JSON no lo escribiré, ya que no viene al caso. Solo decir que la cabecera debe ser (en caso de un servidor java) de esta manera</p>
<p><pre class="brush: java;">response.setContentType(&quot;application/json&quot;);
response.setCharacterEncoding(&quot;UTF-8&quot;);</pre></p>
<p>Ahora, para traspasar la respuesta del servidor(que viene como dirección de memoria)hasta el objeto JSON primero la leemos, la pasamos a string, y luego la devolvemos. Con la función <strong>inputStreamToString</strong></p>
<p><pre class="brush: java;">private StringBuilder inputStreamToString(InputStream is) {
        String line = &quot;&quot;;
        StringBuilder total = new StringBuilder();
        //Guardamos la dirección en un buffer de lectura
        BufferedReader rd = new BufferedReader(new InputStreamReader(is));

        //Y la leemos toda hasta el final
        try{
            while ((line = rd.readLine()) != null) {
                total.append(line);
            }
        }catch(IOException ex){
            Log.w(&quot;Aviso&quot;, ex.toString());
        }

        // Devolvemos todo lo leido
        return total;
    }</pre></p>
<p>Por último, la función para convertir la contraseña a MD5.</p>
<p><pre class="brush: java;">private String toMd5(String pass){
        try{
            //Creando Hash MD5
            MessageDigest digest = MessageDigest.getInstance(&quot;MD5&quot;);
            digest.update(pass.getBytes());
            byte messageDigest[] = digest.digest();

            //Creando Hex String
            StringBuffer hexString = new StringBuffer();
            for(int i=0; i&lt;messageDigest.length; i++)
                hexString.append(Integer.toHexString(0xFF &amp; messageDigest[i]));
            Log.w(&quot;Pass en MD5: &quot;, hexString.toString());
            return hexString.toString();
        }catch(NoSuchAlgorithmException ex){
            Log.w(&quot;NoSuchAlgorithmException&quot;, ex.toString());
            return null;
        }
    }</pre></p>
<p>Agregar que esto no funcionará a menos que le demos permiso a la aplicación para que puede conectarse a internet. Para eso vamos al archivo <strong>androidmanifest.xml</strong> y agregamos la siguiente línea antes de la etiqueta de application. <pre class="brush: xml;">&lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&gt; </pre><br />
Y eso es todo. Para ver el log en el que estamos guardando mensajes vamos a la carpeta tools del SDK y ejecutamos ./adb logcat (puede estar bajo platform-tools) <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danlaho.wordpress.com/835/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danlaho.wordpress.com/835/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danlaho.wordpress.com/835/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danlaho.wordpress.com/835/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danlaho.wordpress.com/835/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danlaho.wordpress.com/835/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danlaho.wordpress.com/835/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danlaho.wordpress.com/835/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danlaho.wordpress.com/835/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danlaho.wordpress.com/835/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danlaho.wordpress.com/835/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danlaho.wordpress.com/835/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danlaho.wordpress.com/835/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danlaho.wordpress.com/835/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=835&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danlaho.wordpress.com/2011/10/31/login-usuario-simple-para-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8abaf2e0d541eaecf5ca1727c3265195?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">mariocares</media:title>
		</media:content>

		<media:content url="http://danlaho.files.wordpress.com/2011/10/imagen74.png" medium="image">
			<media:title type="html">imagen74</media:title>
		</media:content>
	</item>
		<item>
		<title>Links para Android</title>
		<link>http://danlaho.wordpress.com/2011/10/30/links-para-android/</link>
		<comments>http://danlaho.wordpress.com/2011/10/30/links-para-android/#comments</comments>
		<pubDate>Sun, 30 Oct 2011 04:30:36 +0000</pubDate>
		<dc:creator>MaritoCares</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://danlaho.wordpress.com/?p=828</guid>
		<description><![CDATA[Simplemente para recolectar toda la información que me ha sido útil http://www.sgoliver.net http://catchmayuri.blogspot.com/2010/12/sample-android-login-application.html http://www.androidsnippets.com/executing-a-http-post-request-with-httpclient http://www.wikihow.com/Execute-HTTP-POST-Requests-in-Android http://developer.android.com/index.html http://blog.donnfelker.com/2010/04/29/android-odd-error-in-defaulthttpclient/ http://www.androidsnippets.com/get-the-content-from-a-httpresponse-or-any-inputstream-as-a-string http://www.androidsnippets.com/create-a-md5-hash-and-dump-as-a-hex-string http://www.javacodegeeks.com/2011/01/android-json-parsing-gson-tutorial.html Demás esta decir que la actualizaré a medida que encuentre algún link útil 8)<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=828&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Simplemente para recolectar toda la información que me ha sido útil <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<ul>
<li><a href="http://www.sgoliver.net" target="_blank">http://www.sgoliver.net</a></li>
<li><a href="http://catchmayuri.blogspot.com/2010/12/sample-android-login-application.html" target="_blank">http://catchmayuri.blogspot.com/2010/12/sample-android-login-application.html</a></li>
<li><a href="http://www.androidsnippets.com/executing-a-http-post-request-with-httpclient" target="_blank">http://www.androidsnippets.com/executing-a-http-post-request-with-httpclient</a></li>
<li><a href="http://www.wikihow.com/Execute-HTTP-POST-Requests-in-Android" target="_blank">http://www.wikihow.com/Execute-HTTP-POST-Requests-in-Android</a></li>
<li><a href="http://developer.android.com/index.html" target="_blank">http://developer.android.com/index.html</a></li>
<li><a href="http://blog.donnfelker.com/2010/04/29/android-odd-error-in-defaulthttpclient/" target="_blank">http://blog.donnfelker.com/2010/04/29/android-odd-error-in-defaulthttpclient/</a></li>
<li><a href="http://www.androidsnippets.com/get-the-content-from-a-httpresponse-or-any-inputstream-as-a-string" target="_blank">http://www.androidsnippets.com/get-the-content-from-a-httpresponse-or-any-inputstream-as-a-string</a></li>
<li><a href="http://www.androidsnippets.com/create-a-md5-hash-and-dump-as-a-hex-string" target="_blank">http://www.androidsnippets.com/create-a-md5-hash-and-dump-as-a-hex-string</a></li>
<li><a href="http://www.javacodegeeks.com/2011/01/android-json-parsing-gson-tutorial.html" target="_blank">http://www.javacodegeeks.com/2011/01/android-json-parsing-gson-tutorial.html</a></li>
</ul>
<p>Demás esta decir que la actualizaré a medida que encuentre algún link útil 8)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danlaho.wordpress.com/828/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danlaho.wordpress.com/828/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danlaho.wordpress.com/828/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danlaho.wordpress.com/828/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danlaho.wordpress.com/828/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danlaho.wordpress.com/828/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danlaho.wordpress.com/828/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danlaho.wordpress.com/828/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danlaho.wordpress.com/828/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danlaho.wordpress.com/828/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danlaho.wordpress.com/828/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danlaho.wordpress.com/828/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danlaho.wordpress.com/828/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danlaho.wordpress.com/828/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=828&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danlaho.wordpress.com/2011/10/30/links-para-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8abaf2e0d541eaecf5ca1727c3265195?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">mariocares</media:title>
		</media:content>
	</item>
		<item>
		<title>Jugando con Android</title>
		<link>http://danlaho.wordpress.com/2011/10/29/jugando-con-android/</link>
		<comments>http://danlaho.wordpress.com/2011/10/29/jugando-con-android/#comments</comments>
		<pubDate>Sat, 29 Oct 2011 15:57:42 +0000</pubDate>
		<dc:creator>MaritoCares</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[NetBeans]]></category>

		<guid isPermaLink="false">http://danlaho.wordpress.com/?p=816</guid>
		<description><![CDATA[Esta entrada es autoActualizable La estoy escribiendo mientras hago cosas Estoy desarrollando un sistema en una empresa, uno de los módulos debe correr en tablets (que vienen con Android) y ps&#8230; nunca he hecho nada D: Ayer fuimos a comprar &#8230; <a href="http://danlaho.wordpress.com/2011/10/29/jugando-con-android/">Sigue leyendo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=816&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Esta entrada es autoActualizable <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  La estoy escribiendo mientras hago cosas <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Estoy desarrollando un sistema en una empresa, uno de los módulos debe correr en tablets (que vienen con Android) y ps&#8230; nunca he hecho nada D:</p>
<p>Ayer fuimos a comprar una tablet para las pruebas y ahora la tengo aquí al lado mio gastando la batería <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Empezamos entonces <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Lo primero es descargar el SDK de Android desde la misma web. Como ya saben, soy usuario Linux así que no se si el funcionamiento es el mismo en otras plataformas 8O <span id="more-816"></span></p>
<p><a href="http://developer.android.com/sdk/index.html" target="_blank">Link Descarga SDK</a>. Ahora que lo descargan, lo descomprimen y lo mueven a donde quieran. Yo lo hice a <strong>/home/luk0s/Documentos/.android-sdk-linux/</strong>pero depende de dónde lo quieran dejar ustedes. Lo segundo, es agregar la carpeta tools al path del sistema, apuntando obviamente a la carpeta que acabamos de descomprimir.</p>
<p><pre class="brush: bash;">export PATH=${PATH}:/home/luk0s/Documentos/.android-sdk-linux/tools</pre></p>
<p>Ahora entramos a la carpeta tools y ejecutamos el archivo <strong>android</strong> (previo cambio de permisos).</p>
<p>Se abre una ventana como ésta</p>
<div id="attachment_817" class="wp-caption aligncenter" style="width: 650px"><a href="http://danlaho.files.wordpress.com/2011/10/imagen64.png"><img class="size-full wp-image-817" title="imagen64" src="http://danlaho.files.wordpress.com/2011/10/imagen64.png?w=640&#038;h=544" alt="" width="640" height="544" /></a><p class="wp-caption-text">Android SDK Manager</p></div>
<p>donde pueden instalar las APIs de las distintas versiones que hasta el momento tiene el sistema. En mi caso, instalé solamente las de Android 2.2 y 2.1 ya que las tablet solo tienen eso instalado&#8230; y como la tablet es del trabajo no le puedo meter mano D:</p>
<p>Y esa es toda la &#8220;instalación&#8221; del cuento&#8230; pueden ir a la <a href="http://developer.android.com/sdk/installing.html" target="_blank">documentación oficial</a> para mayor info.</p>
<p>Ahora, agregamos un plugin a Netbeans (tengo la versión 7) para hacer más simple la creación de apps (que si no sería todo por consola D: )</p>
<p>Entramos al administrador de plugins en Netbeans, creamos una entrada nueva y le agregamos estos datos: <strong>NBAndroid</strong> (o el que quieran) y la URL para obtener la info: http://deadlock.netbeans.org/hudson/job/nbandroid/lastStableBuild/artifact/build/updates/updates.xml <a href="http://danlaho.files.wordpress.com/2011/10/imagen65.png"><img class="aligncenter size-full wp-image-820" title="imagen65" src="http://danlaho.files.wordpress.com/2011/10/imagen65.png?w=640&#038;h=399" alt="" width="640" height="399" /></a> Lo siguiente es buscar los plugins e instalarlos <a href="http://danlaho.files.wordpress.com/2011/10/imagen67.png"><img class="aligncenter size-full wp-image-821" title="imagen67" src="http://danlaho.files.wordpress.com/2011/10/imagen67.png?w=640&#038;h=415" alt="" width="640" height="415" /></a> Listo! Ahora agregamos un nuevo proyecto e ingresamos la info necesaria <a href="http://danlaho.files.wordpress.com/2011/10/imagen68.png"><img class="aligncenter size-full wp-image-822" title="imagen68" src="http://danlaho.files.wordpress.com/2011/10/imagen68.png?w=640&#038;h=457" alt="" width="640" height="457" /></a> Es importante apuntar a la carpeta donde tenemos el sdk (/home/luk0s/Documentos/.android-sdk-linux/) en el botón <strong>Manage Android SDK</strong>. Luego apuntamos la versión que vamos a usar. Y eso sería todo <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  <a href="http://danlaho.files.wordpress.com/2011/10/imagen69.png"><img class="aligncenter size-full wp-image-824" title="imagen69" src="http://danlaho.files.wordpress.com/2011/10/imagen69.png?w=640&#038;h=268" alt="" width="640" height="268" /></a> Para correr las apps que desarrollemos, tenemos que agregar un dispositivo virtual usando el emulador. Para eso abrimos el SDK Manager y en el menú, bajo Tools tenemos <strong>Manage ADV</strong>. Creamos uno con las mismas características que nuestro tablet. El mio por ejemplo es así: <a href="http://danlaho.files.wordpress.com/2011/10/imagen70.png"><img class="aligncenter size-full wp-image-825" title="imagen70" src="http://danlaho.files.wordpress.com/2011/10/imagen70.png?w=640" alt=""   /></a> Ahora la tenemos para jugar con ella <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  En netBeans, le hacemos un <strong>Build</strong> a nuestro proyecto, y luego un <strong>Run</strong>. Automágicamente toma el dispositivo que acabamos de crear. Esperamos que arranque y tadaaaa <a href="http://danlaho.files.wordpress.com/2011/10/imagen71.png"><img class="aligncenter size-full wp-image-826" title="imagen71" src="http://danlaho.files.wordpress.com/2011/10/imagen71.png?w=640&#038;h=424" alt="" width="640" height="424" /></a> (Aunque ahora que lo pienso&#8230; no es igual al del tablet&#8230; creo que era un Android 2.2 <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  pero bue, funciona <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Eso <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Referencia: <a href="http://tarjuccino.com/tutoriales/desarrollo-movil/configuracion-del-android-sdk-en-netbeans-7/" target="_blank">tarjuccino.com</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danlaho.wordpress.com/816/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danlaho.wordpress.com/816/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danlaho.wordpress.com/816/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danlaho.wordpress.com/816/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danlaho.wordpress.com/816/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danlaho.wordpress.com/816/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danlaho.wordpress.com/816/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danlaho.wordpress.com/816/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danlaho.wordpress.com/816/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danlaho.wordpress.com/816/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danlaho.wordpress.com/816/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danlaho.wordpress.com/816/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danlaho.wordpress.com/816/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danlaho.wordpress.com/816/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=816&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danlaho.wordpress.com/2011/10/29/jugando-con-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8abaf2e0d541eaecf5ca1727c3265195?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">mariocares</media:title>
		</media:content>

		<media:content url="http://danlaho.files.wordpress.com/2011/10/imagen64.png" medium="image">
			<media:title type="html">imagen64</media:title>
		</media:content>

		<media:content url="http://danlaho.files.wordpress.com/2011/10/imagen65.png" medium="image">
			<media:title type="html">imagen65</media:title>
		</media:content>

		<media:content url="http://danlaho.files.wordpress.com/2011/10/imagen67.png" medium="image">
			<media:title type="html">imagen67</media:title>
		</media:content>

		<media:content url="http://danlaho.files.wordpress.com/2011/10/imagen68.png" medium="image">
			<media:title type="html">imagen68</media:title>
		</media:content>

		<media:content url="http://danlaho.files.wordpress.com/2011/10/imagen69.png" medium="image">
			<media:title type="html">imagen69</media:title>
		</media:content>

		<media:content url="http://danlaho.files.wordpress.com/2011/10/imagen70.png" medium="image">
			<media:title type="html">imagen70</media:title>
		</media:content>

		<media:content url="http://danlaho.files.wordpress.com/2011/10/imagen71.png" medium="image">
			<media:title type="html">imagen71</media:title>
		</media:content>
	</item>
		<item>
		<title>Activar / Usar plPython en PostgreSQL</title>
		<link>http://danlaho.wordpress.com/2011/10/20/activar-usar-plpython-en-postgresql/</link>
		<comments>http://danlaho.wordpress.com/2011/10/20/activar-usar-plpython-en-postgresql/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 22:29:11 +0000</pubDate>
		<dc:creator>MaritoCares</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[Lenguajes]]></category>
		<category><![CDATA[Pardus]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://danlaho.wordpress.com/?p=810</guid>
		<description><![CDATA[Estoy desarrollando un sistema para una empresa, y me pidieron el clásico: &#8220;Quiero que en el nombre del proyecto diga blablabla Sep 2011&#8220;. En la BD tengo guardados los datos como date, obvio, el tenía que hacer el traspaso del &#8230; <a href="http://danlaho.wordpress.com/2011/10/20/activar-usar-plpython-en-postgresql/">Sigue leyendo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=810&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Estoy desarrollando un sistema para una empresa, y me pidieron el clásico: &#8220;<strong>Quiero que en el nombre del proyecto diga blablabla Sep 2011</strong>&#8220;.</p>
<p>En la BD tengo guardados los datos como date, obvio, el tenía que hacer el traspaso del mes en número a palabra&#8230; obviamente una lata. Hacerlo en la aplicación no era un opción tampoco (se imaginan leer la fecha desde la BD, traspasarla, y recién mostrarla? <img src='http://s1.wp.com/wp-includes/images/smilies/icon_eek.gif' alt='8O' class='wp-smiley' /> ). Me dio por hacerlo directamente en la BD, como una función. Peeero nunca había hecho nada de nada. Leí varios lenguajes y formas de hacerlo&#8230; la cosa más fea que he visto en mi vida <img src='http://s1.wp.com/wp-includes/images/smilies/icon_eek.gif' alt='8O' class='wp-smiley' /> DECLARE, BEGIN, END. Nah&#8230; simplemente no era lo mio.</p>
<p>Hasta que descubrí cómo re diantres programar las funciones en python ! Y de eso trata el tuto <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  <span id="more-810"></span></p>
<p>Lo primero es revisar que tengas la librería para hacerlo. En mi caso (Pardus Linux) lo hice con estos comandos:</p>
<p><pre class="brush: bash;">whereis postgresql
postgresql: /usr/lib/postgresql /usr/include/postgresql /usr/share/postgresql
cd /ust/lib/postgresql/
ls </pre></p>
<p>Y entre los archivos, tenía la librería <strong>plpython.so</strong> necesaria para hacer todo el cuento.</p>
<p>Ahora necesitamos crear algo que maneje la comunicación entre la librería y pgsql. Para eso, creamos una función. Vamos a pgadmin (o por shell) y escribimos lo siguiente:</p>
<p><pre class="brush: sql;">CREATE FUNCTION plpython_call_handler()
RETURNS OPAQUE AS '/usr/lib/postgresql/plpython.so' LANGUAGE 'C';</pre></p>
<p>Dependiendo de la ruta que tengan para la librería.</p>
<p>Lo siguiente es &#8220;crear&#8221; el lenguaje dentro de la BD</p>
<p><pre class="brush: sql;">CREATE LANGUAGE 'plpython' HANDLER plpython_call_handler LANCOMPILER 'PL/pgSQL';</pre></p>
<p>Y listo! Ahora puedo crear la función para el traspaso de mes en números a palabras.</p>
<p><pre class="brush: sql;">CREATE OR REPLACE FUNCTION mes_palabra(num integer) RETURNS character varying AS $$

 arraymeses = ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic']
 return arraymeses[num]
$$
LANGUAGE plpython VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;</pre></p>
<p>y para usarla (en mi caso) simplemente hago esto:</p>
<p><pre class="brush: sql;">SELECT
  proyectos.proyectos_codigo_real,
  (proyectos.proyectos_codigo_comun
  || ' - ' || proyectos.proyectos_desc
  || ' - ' || mes_palabra(EXTRACT
  (MONTH from proyectos.proyectos_inicio)::integer)
  || ' '|| EXTRACT(year from proyectos.proyectos_inicio))
  AS Nombre_Completo
FROM
  public.proyectos
WHERE
  proyectos.proyectos_tipo_proyecto = 3
AND proyectos.proyectos_terminado = FALSE;</pre></p>
<p>teniendo como resultado</p>
<div id="attachment_811" class="wp-caption aligncenter" style="width: 650px"><a href="http://danlaho.files.wordpress.com/2011/10/imagen57.png"><img class="size-full wp-image-811" title="imagen57" src="http://danlaho.files.wordpress.com/2011/10/imagen57.png?w=640&#038;h=359" alt="" width="640" height="359" /></a><p class="wp-caption-text">Tabla con datos crudos y consulta</p></div>
<p>Y eso <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Links que fueron útiles</p>
<ul>
<li>http://johansoft.blogspot.com/2007/09/solucion-error-language-plpgsql-does.html</li>
<li>http://www.arpug.com.ar/trac/wiki/PlPython</li>
<li>http://www.postgresql.org/docs/9.0/static/sql-createfunction.html</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/danlaho.wordpress.com/810/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/danlaho.wordpress.com/810/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/danlaho.wordpress.com/810/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/danlaho.wordpress.com/810/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/danlaho.wordpress.com/810/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/danlaho.wordpress.com/810/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/danlaho.wordpress.com/810/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/danlaho.wordpress.com/810/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/danlaho.wordpress.com/810/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/danlaho.wordpress.com/810/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/danlaho.wordpress.com/810/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/danlaho.wordpress.com/810/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/danlaho.wordpress.com/810/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/danlaho.wordpress.com/810/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=danlaho.wordpress.com&amp;blog=12849388&amp;post=810&amp;subd=danlaho&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://danlaho.wordpress.com/2011/10/20/activar-usar-plpython-en-postgresql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8abaf2e0d541eaecf5ca1727c3265195?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">mariocares</media:title>
		</media:content>

		<media:content url="http://danlaho.files.wordpress.com/2011/10/imagen57.png" medium="image">
			<media:title type="html">imagen57</media:title>
		</media:content>
	</item>
	</channel>
</rss>
