<?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>Iker Perez de Albeniz &#187; google</title>
	<atom:link href="http://www.ikeralbeniz.net/tag/google/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ikeralbeniz.net</link>
	<description>mi propio egolog sobre tecnología y frikadas varias</description>
	<lastBuildDate>Mon, 26 Apr 2010 15:54:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Usar/Crear Filtros para las plantillas de django/Google App Engine</title>
		<link>http://www.ikeralbeniz.net/2010/03/11/usarcrear-filtros-para-las-plantillas-de-djangogoogle-app-engine/</link>
		<comments>http://www.ikeralbeniz.net/2010/03/11/usarcrear-filtros-para-las-plantillas-de-djangogoogle-app-engine/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 11:17:03 +0000</pubDate>
		<dc:creator>Iker</dc:creator>
				<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[filters]]></category>
		<category><![CDATA[filtros]]></category>
		<category><![CDATA[gae]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google App Engine]]></category>
		<category><![CDATA[plantillas]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[templates]]></category>

		<guid isPermaLink="false">http://www.ikeralbeniz.net/?p=193</guid>
		<description><![CDATA[Una de los temas mas interesante en Google App Engine es la posibilidad de usar plantillas. En la página de GAE existen<a href="http://code.google.com/intl/es/appengine/docs/python/gettingstarted/templates.html"> ejemplos sencillos de cómo utilizar plantillas</a>.El problema empieza cuando dentro de esas plantillas quieres hacer tratamiento de los datos para mostrar los datos correctamente. En esta articulo intentaremos explicar como usar esos filtros y como crear propios.]]></description>
			<content:encoded><![CDATA[<p>Una de los temas mas interesante en Google App Engine es la posibilidad de usar plantillas. En la página de GAE existen<a href="http://code.google.com/intl/es/appengine/docs/python/gettingstarted/templates.html"> ejemplos sencillos de cómo utilizar plantillas</a>.El problema empieza cuando dentro de esas plantillas quieres hacer tratamiento de los datos para mostrar los datos correctamente. En esta articulo intentaremos explicar como usar esos filtros y como crear propios.</p>
<p>Como habéis podido ver en el ejemplo de la pagina de GAE, la forma de mostrar un valor en la plantilla es usando la sintaxis <strong>{{ variable }}</strong>. En la mayoría de los casos dichas variables serán de tipo string o integer por lo que su visualización no tendrá mayor problema. Pero por ejemplo en el caso de variables tipo datetime u otro tipo de objeto propio, el sistema de plantillas no es capaz de mostrar el contenido de dichas variables, ya que solo es capaz de mostrar valores tipo string o integer.</p>
<p>Para los tipos de datos mas comunes existen ya filtros por defecto como es el caso de los valores datetime. La forma de aplicar un filtro es la siguiente:</p>
<div class="codesnip-container" >
<div class="python codesnip" style="font-family:monospace;"><span class="br0">&#123;</span><span class="br0">&#123;</span>variable|filtro<span class="br0">&#125;</span><span class="br0">&#125;</span></div>
</div>
<p>Y en algunos casos:</p>
<div class="codesnip-container" >
<div class="python codesnip" style="font-family:monospace;"><span class="br0">&#123;</span><span class="br0">&#123;</span>variable|filtro:argumento<span class="br0">&#125;</span><span class="br0">&#125;</span></div>
</div>
<p>En el caso de los valores datetime que hemos comentado antes, para mostrar un valor de fecha deberemos usar el filtro date de la siguiente manera:</p>
<div class="codesnip-container" >
<div class="python codesnip" style="font-family:monospace;"><span class="br0">&#123;</span><span class="br0">&#123;</span>mydatevar|date:<span class="st0">&quot;j&quot;</span><span class="br0">&#125;</span><span class="br0">&#125;</span></div>
</div>
<p>Esto seria equivalente a ejecutar una función <strong>date(mydatevar,”j”)</strong> y lo que estoy haciendo es mostrar el día del mes (<a href="http://docs.python.org/library/datetime.html#strftime-behavior">código %j</a>) similar a como se hace en otros lenguajes de programación.</p>
<p><a href="http://docs.djangoproject.com/en/dev/ref/templates/builtins/">Aquí</a> podéis encontrar un listado con los principales filtros predeterminados en django</p>
<p>El problema es cuando estas funciones no son suficientes para hacer lo que nosotros queremos, o queremos tratar tipos de objetos poco comunes o propios.</p>
<p>Por ejemplo imaginemos que queremos tenemos un libro de visitas donde los usuarios puede escribir entradas, e indican su dirección de correo. Pero no queremos que esa dirección de correo sea visible para que no pueda ser rastreada por spammers, por lo que optamos por mostrar solo los 5 primeros caracteres de el nombre de usuario de la cuenta de correo mas tres puntos suspensivos (algo parecido a lo que se hace en las listas de distribución). Es decir para <strong>estoesunaprueba@gmail.com</strong> nos generara una dirección del tipo <strong>estoe…@gmail.com</strong>.</p>
<p>Por tanto nuestra función en python seria algo así como:</p>
<div class="codesnip-container" >
<div class="python codesnip" style="font-family:monospace;"><span class="kw1">def</span> securemail <span class="br0">&#40;</span>mail<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> mail.<span class="me1">split</span><span class="br0">&#40;</span>‘@’<span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span>:<span class="nu0">5</span><span class="br0">&#93;</span>+”…@”+ mail.<span class="me1">split</span><span class="br0">&#40;</span>‘@’<span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span></div>
</div>
<p>Es decir, dividimos la dirección en usuario y dominio con la función split y el carácter @, y generamos una nueva dirección con los primeros 5 caracteres de el usuario mas tres puntos suspensivos la arroba y el dominio.</p>
<p>Para poder usar esta función en nuestras plantillas haremos lo siguiente. Crearemos un script customfilters.py donde guardaremos todas nuestros filtros. Dicho script tendrá la siguiente forma</p>
<div class="codesnip-container" >
<div class="python codesnip" style="font-family:monospace;"><span class="kw1">from</span> google.<span class="me1">appengine</span>.<span class="me1">ext</span> <span class="kw1">import</span> webapp<br />
<span class="kw1">from</span> <span class="kw3">datetime</span> <span class="kw1">import</span> <span class="kw3">datetime</span><br />
&nbsp;<br />
register = webapp.<span class="me1">template</span>.<span class="me1">create_template_register</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp;<br />
<span class="kw1">def</span> securemail <span class="br0">&#40;</span>mail<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> mail.<span class="me1">split</span><span class="br0">&#40;</span>‘@’<span class="br0">&#41;</span><span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#91;</span>:5<span class="br0">&#93;</span>+”…@”+ mail.<span class="me1">split</span><span class="br0">&#40;</span>‘@’<span class="br0">&#41;</span><span class="br0">&#91;</span>1<span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
register.<span class="kw2">filter</span><span class="br0">&#40;</span>securemail<span class="br0">&#41;</span></div>
</div>
<p>Para importar los filtros en nuestra aplicación añadiremos la siguiente sentencia justo después de los imports.</p>
<div class="codesnip-container" >
<div class="python codesnip" style="font-family:monospace;">webapp.<span class="me1">template</span>.<span class="me1">register_template_library</span><span class="br0">&#40;</span><span class="st0">&#8216;customfilters&#8217;</span><span class="br0">&#41;</span></div>
</div>
<p>De esta forma podremos usar nuestro filtro de la siguiente manera:</p>
<div class="codesnip-container" >
<div class="python codesnip" style="font-family:monospace;"><span class="br0">&#123;</span><span class="br0">&#123;</span>mail|securemail<span class="br0">&#125;</span><span class="br0">&#125;</span></div>
</div>
<p>Imaginemos que damos la opción al usuario que la función securemail muestre su cuenta de dos modos, uno, el por defecto que es el funcionamiento explicado anteriormente, y otro, que hace que solo se muestre el usuario sin el dominio. Por tanto deberemos definir un parámetro en la función para poder elegir el tipo de ofuscación. La función en este caso nos quedaría así:</p>
<div class="codesnip-container" >
<div class="python codesnip" style="font-family:monospace;"><span class="kw1">def</span> securemail <span class="br0">&#40;</span>mail,default=true<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> default:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> mail.<span class="me1">split</span><span class="br0">&#40;</span>‘@’<span class="br0">&#41;</span><span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#91;</span>:5<span class="br0">&#93;</span>+”…@”+ mail.<span class="me1">split</span><span class="br0">&#40;</span>‘@’<span class="br0">&#41;</span><span class="br0">&#91;</span>1<span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> mail.<span class="me1">split</span><span class="br0">&#40;</span>‘@’<span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span></div>
</div>
<p>Por tanto si la variable mail tomara el valor estoesunaprueba@gmail.com este seria el resultado para las diferentes expresiones:</p>
<div class="codesnip-container" >
<div class="python codesnip" style="font-family:monospace;"><span class="br0">&#123;</span><span class="br0">&#123;</span>mail|securemail<span class="br0">&#125;</span><span class="br0">&#125;</span> <span class="co1">#estoe…@gmail.com</span><br />
<span class="br0">&#123;</span><span class="br0">&#123;</span>mail|securemail:true<span class="br0">&#125;</span><span class="br0">&#125;</span> <span class="co1">#estoe…@gmail.com</span><br />
<span class="br0">&#123;</span><span class="br0">&#123;</span>mail|securemail:false<span class="br0">&#125;</span><span class="br0">&#125;</span> <span class="co1">#estoesunaprueba</span></div>
</div>
<p>De esta forma podemos controlar y procesar la información a mostrar en nuestra plantilla cuando esta se trata de un objeto no string (o integer).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ikeralbeniz.net/2010/03/11/usarcrear-filtros-para-las-plantillas-de-djangogoogle-app-engine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Consulta tu PageRank de Google con Python</title>
		<link>http://www.ikeralbeniz.net/2010/03/05/contulta-tu-pagerank-de-google-con-python/</link>
		<comments>http://www.ikeralbeniz.net/2010/03/05/contulta-tu-pagerank-de-google-con-python/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 07:17:49 +0000</pubDate>
		<dc:creator>Iker</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[PageRank]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.ikeralbeniz.net/?p=187</guid>
		<description><![CDATA[A todos los que os interese el SEO seguramente habréis consultado alguna vez el <a href="http://www.guia-buscadores.com/posicionamiento/el-pagerank.html">PageRank</a> de vuestra pagina. La forma mas sencilla de obtenerlo es instalando la <a href="http://www.google.com/intl/es/toolbar/ff/index.html">ToolBar de Google</a> en vuestro navegador. Pero seguramente si queréis realizar un seguimiento de vuestra pagina a lo largo del tiempo necesitareis automatizar un proceso que consulte el PageRank. La API de acceso al PageRank de google no es abierta, pero googleando un poco (o con <a href="http://www.wireshark.org/">Wireshark</a>) es posible obtener el modo de consultar este dato. Parece que Google no le interesa que consultemos este dato, por lo que modifica la API bastante a menudo. En este artículo, te muestro una implementación en Python de un cliente para consultar el PageRank de una pagina, usando la API mas actual.]]></description>
			<content:encoded><![CDATA[<p>A todos los que os interese el SEO seguramente habréis consultado alguna vez el <a href="http://www.guia-buscadores.com/posicionamiento/el-pagerank.html">PageRank</a> de vuestra pagina. La forma mas sencilla de obtenerlo es instalando la <a href="http://www.google.com/intl/es/toolbar/ff/index.html">ToolBar de Google</a> en vuestro navegador. Pero seguramente si queréis realizar un seguimiento de vuestra pagina a lo largo del tiempo necesitareis automatizar un proceso que consulte el PageRank. La API de acceso al PageRank de google no es abierta, pero googleando un poco (o con <a href="http://www.wireshark.org/">Wireshark</a>) es posible obtener el modo de consultar este dato. Parece que Google no le interesa que consultemos este dato, por lo que modifica la API bastante a menudo. En este artículo, te muestro una implementación en Python de un cliente para consultar el PageRank de una pagina, usando la API mas actual.</p>
<div class="codesnip-container" >
<div class="python codesnip" style="font-family:monospace;"><span class="co1">#!/usr/bin/env python</span><br />
<span class="co1"># -*- coding: utf-8 -*-</span><br />
<span class="co1"># GPL (C) 2010 Iker Perez de Albeniz</span><br />
<span class="co1"># ported in Python from the Php code by HM2K (http://www.hm2k.com/projects/pagerank)</span><br />
<span class="co1"># http://www.ikeralbeniz.net/2010/03/05/contulta-tu-pagerank-de-google-con-python/</span></p>
<p><span class="kw1">import</span> <span class="kw3">sys</span><br />
<span class="kw1">import</span> <span class="kw3">urllib</span><br />
&nbsp;<br />
<span class="kw1">from</span> <span class="kw3">urllib</span> <span class="kw1">import</span> urlencode<br />
<span class="kw1">from</span> <span class="kw3">pprint</span> <span class="kw1">import</span> <span class="kw3">pprint</span></p>
<p><span class="kw1">def</span> strToNum<span class="br0">&#40;</span>Str, Check, Magic<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; Int32Unit = 4294967296<br />
&nbsp; &nbsp; &nbsp; &nbsp; length = <span class="kw2">len</span><span class="br0">&#40;</span>Str<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span>0,length<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Check <span class="sy0">*</span>= Magic<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>Check <span class="sy0">&gt;</span>= Int32Unit<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Check = <span class="br0">&#40;</span>Check &#8211; Int32Unit <span class="sy0">*</span> <span class="kw2">int</span><span class="br0">&#40;</span>Check/Int32Unit<span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> Check <span class="sy0">&lt;</span> -2147483648:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Check = Check + Int32Unit<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Check += <span class="kw2">ord</span><span class="br0">&#40;</span>Str<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> Check<br />
&nbsp; &nbsp; <br />
<span class="kw1">def</span> hashURL<span class="br0">&#40;</span><span class="kw3">string</span><span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; check1 = strToNum<span class="br0">&#40;</span><span class="kw3">string</span>, 0&#215;1505, 0&#215;21<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; check2 = strToNum<span class="br0">&#40;</span><span class="kw3">string</span>, 0, 0&#215;1003F<span class="br0">&#41;</span><br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; check1 <span class="sy0">&gt;&gt;</span>= 2<br />
&nbsp; &nbsp; &nbsp; &nbsp; check1 = <span class="br0">&#40;</span><span class="br0">&#40;</span>check1 <span class="sy0">&gt;&gt;</span> 4<span class="br0">&#41;</span> <span class="sy0">&amp;</span> 0&#215;3FFFFC0 <span class="br0">&#41;</span> | <span class="br0">&#40;</span>check1 <span class="sy0">&amp;</span> 0&#215;3F<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; check1 = <span class="br0">&#40;</span><span class="br0">&#40;</span>check1 <span class="sy0">&gt;&gt;</span> 4<span class="br0">&#41;</span> <span class="sy0">&amp;</span> 0&#215;3FFC00 <span class="br0">&#41;</span> | <span class="br0">&#40;</span>check1 <span class="sy0">&amp;</span> 0&#215;3FF<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; check1 = <span class="br0">&#40;</span><span class="br0">&#40;</span>check1 <span class="sy0">&gt;&gt;</span> 4<span class="br0">&#41;</span> <span class="sy0">&amp;</span> 0&#215;3C000 <span class="br0">&#41;</span> | <span class="br0">&#40;</span>check1 <span class="sy0">&amp;</span> 0&#215;3FFF<span class="br0">&#41;</span><br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; T1 = <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span>check1 <span class="sy0">&amp;</span> 0&#215;3C0<span class="br0">&#41;</span> <span class="sy0">&lt;&lt;</span> 4<span class="br0">&#41;</span> | <span class="br0">&#40;</span>check1 <span class="sy0">&amp;</span> 0&#215;3C<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">&lt;&lt;</span>2 <span class="br0">&#41;</span> | <span class="br0">&#40;</span>check2 <span class="sy0">&amp;</span> 0xF0F <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; T2 = <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span>check1 <span class="sy0">&amp;</span> 0xFFFFC000<span class="br0">&#41;</span> <span class="sy0">&lt;&lt;</span> 4<span class="br0">&#41;</span> | <span class="br0">&#40;</span>check1 <span class="sy0">&amp;</span> 0&#215;3C00<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">&lt;&lt;</span> 0xA<span class="br0">&#41;</span> | <span class="br0">&#40;</span>check2 <span class="sy0">&amp;</span> 0xF0F0000 <span class="br0">&#41;</span><br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span>T1 | T2<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
<span class="kw1">def</span> checkHash<span class="br0">&#40;</span>hashnum<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; checkByte = <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; flag = <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; HashStr = <span class="st0">&#8216;%s&#8217;</span> <span class="sy0">%</span> hashnum<br />
&nbsp; &nbsp; &nbsp; &nbsp; length = <span class="kw2">len</span><span class="br0">&#40;</span>HashStr<span class="br0">&#41;</span><br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span>0,length<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Re = <span class="kw2">int</span><span class="br0">&#40;</span>HashStr<span class="br0">&#91;</span><span class="br0">&#40;</span>length &#8211; 1<span class="br0">&#41;</span>-i<span class="br0">&#93;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>1 == <span class="br0">&#40;</span>flag <span class="sy0">%</span> 2<span class="br0">&#41;</span><span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Re += Re<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Re = <span class="kw2">int</span><span class="br0">&#40;</span><span class="br0">&#40;</span>Re / 10<span class="br0">&#41;</span> + <span class="br0">&#40;</span>Re <span class="sy0">%</span> 10<span class="br0">&#41;</span><span class="br0">&#41;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; checkByte += <span class="kw2">int</span><span class="br0">&#40;</span>Re<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flag = flag + 1</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; checkByte <span class="sy0">%</span>= 10<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>0 <span class="sy0">!</span>= checkByte<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; checkByte = 10 &#8211; checkByte<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>1 == <span class="br0">&#40;</span>flag <span class="sy0">%</span> 2<span class="br0">&#41;</span> <span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>1 == <span class="br0">&#40;</span>checkByte <span class="sy0">%</span> 2<span class="br0">&#41;</span><span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; checkByte += 9<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; checkByte <span class="sy0">&gt;&gt;</span>= 1<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="st0">&#8216;7%s%s&#8217;</span> <span class="sy0">%</span><span class="br0">&#40;</span>checkByte,HashStr<span class="br0">&#41;</span></p>
<p><span class="kw1">def</span> getCh<span class="br0">&#40;</span>url<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; <span class="kw1">return</span> checkHash<span class="br0">&#40;</span>hashURL<span class="br0">&#40;</span>url<span class="br0">&#41;</span><span class="br0">&#41;</span></p>
<p><span class="kw1">def</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; response = <span class="st0">&quot;Error: No URL defined.<span class="es0">\n</span>Usage: googrng.py &lt;url&gt; [[proxyuser:proxypass@]proxyhost:poxyport]&quot;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">len</span><span class="br0">&#40;</span><span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> 1:<br />
&nbsp; &nbsp; &nbsp; &nbsp; myurl = <span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; url = <span class="st0">&quot;http://toolbarqueries.google.es/search?features=Rank&amp;sourceid=navclient-ff&amp;client=navclient-auto-ff&amp;googleip=O;208.117.235.17;97&amp;iqrn=8VdB&amp;querytime=4P&amp;orig=0X557&amp;swwk=-1&amp;ch=%s&amp;q=info:%s&quot;</span> <span class="sy0">%</span><span class="br0">&#40;</span>getCh<span class="br0">&#40;</span>myurl<span class="br0">&#41;</span>,<span class="kw3">urllib</span>.<span class="me1">quote_plus</span><span class="br0">&#40;</span>myurl<span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">len</span><span class="br0">&#40;</span><span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">2</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxies = <span class="br0">&#123;</span><span class="st0">&#8216;http&#8217;</span>: <span class="st0">&#8216;http://&#8217;</span>+<span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span>1<span class="br0">&#93;</span><span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f = <span class="kw3">urllib</span>.<span class="me1">urlopen</span><span class="br0">&#40;</span>url, proxies=proxies<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f = <span class="kw3">urllib</span>.<span class="me1">urlopen</span><span class="br0">&#40;</span>url<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; response = f.<span class="me1">read</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; f.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="kw1">print</span> response</p>
<p><span class="kw1">if</span> __name__ == <span class="st0">&quot;__main__&quot;</span>:<br />
&nbsp; &nbsp; main<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.ikeralbeniz.net/2010/03/05/contulta-tu-pagerank-de-google-con-python/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Primeros pasos con Buzz</title>
		<link>http://www.ikeralbeniz.net/2010/02/11/primeros-pasos-con-buzz/</link>
		<comments>http://www.ikeralbeniz.net/2010/02/11/primeros-pasos-con-buzz/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 11:10:07 +0000</pubDate>
		<dc:creator>Iker</dc:creator>
				<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[buzz]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.ikeralbeniz.net/?p=148</guid>
		<description><![CDATA[Ha llegado <a href="http://www.google.com/buzz" target="buzz">Buzz</a> y a primera vista lo que parece es un Twitter avanzado o un Facebook simplificado, como se vea. Pero mmas allá de esta primera aproximación, me interesaba concer que funcionalidades se escondian tras esta nueva funcionalidad de Google. Por tanto el mejor sitio para empezar a buscar es el propio Google y su portal de APIs.]]></description>
			<content:encoded><![CDATA[<p>Ha llegado <a href="http://www.google.com/buzz" target="_blank">Buzz</a> y a primera vista lo que parece es un Twitter avanzado o un Facebook simplificado, como se vea. Pero mas allá de esta primera aproximación, me interesaba concer que funcionalidades se escondian tras esta nueva funcionalidad de Google. Por tanto el mejor sitio para empezar a buscar es el propio Google y su portal de APIs.</p>
<p><strong><em>http://code.google.com/intl/es-ES/apis/buzz/</em></strong></p>
<p>Actualmente solo existen dos opciones de integración disponibles:</p>
<ul>
<li>De Buzz a tu Web</li>
<li>De tu Web a Buzz</li>
</ul>
<p>
<strong><u>De Buzz a tu Web</u></strong></p>
<p>Buzz permite generar un RSS con tus comentarios en Buzz con lo que es posible generar plugins al estilo Twitter para tu blog. La forma de acceder a dicho RSS es la siguiente:</p>
<p><strong><em>http://buzz.googleapis.com/feeds/{user_id}/public/posted</em></strong></p>
<p>El user id es posible obtenerlo dirigiéndote a “<em>Perfil de Google</em>”..</p>
<p>En mis caso la dirección de mi perfil es la:</p>
<p><strong><em>http://www.google.com/profiles/111738004311961586383</em></strong></p>
<p>Por lo que mi user_id es 111738004311961586383 y mi url de RSS</p>
<p><strong><em>http://buzz.googleapis.com/feeds/111738004311961586383/public/posted</em></strong></p>
<p>
<strong><u>De tu Web a Buzz</u></strong></p>
<p>Buzz automáticamente permite que se integren en Buzz tus aplicaciones de Google, es decir, se generará un comentario cada vez que añadas una imagen a Picasa o subas un video a Youtube..</p>
<p>Si quieres que se genere un comentario cada vez que añades una entrada a tu blog debes conectar tu blog y Buzz bidireccionalmente:</p>
<p>Por un lado debes añadir una etiqueta en la cabecera de tu pagina de la siguiente manera:</p>
<p><strong>&lt;link rel=&#8221;me&#8221; type=&#8221;text/html&#8221; href=&#8221;{user_id}&#8221;/&gt;</strong></p>
<p>En mi caso será de la siguiente manera</p>
<p><strong>&lt;link rel=&#8221;me&#8221; type=&#8221;text/html&#8221; href=&#8221;http://www.google.com/profiles/111738004311961586383&#8243;/&gt;</strong></p>
<p>Además debes añadir tu Web como Web de confianza,  para ello dirígete a tu perfil de Google:</p>
<p><strong>http://www.google.com/profiles/me/editprofile</strong></p>
<p>y en la sección <em>Enlaces</em> añade un enlace a tu Web</p>
<p>Una vez terminado este proceso cada entrada nueva será comentada en tu Buzz.
</p>
<p>Listo!</p>
<p><a href="http://www.ikeralbeniz.net/2010/02/11/primeros-pasos-con-buzz-segunda-parte-un-widget-de-buzz-para-wordpress/"> segunda parte &raquo;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ikeralbeniz.net/2010/02/11/primeros-pasos-con-buzz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Primeros pasos en ChromeOS (Parte II)</title>
		<link>http://www.ikeralbeniz.net/2009/11/28/primeros-pasos-en-chromeos-ii/</link>
		<comments>http://www.ikeralbeniz.net/2009/11/28/primeros-pasos-en-chromeos-ii/#comments</comments>
		<pubDate>Sat, 28 Nov 2009 15:57:14 +0000</pubDate>
		<dc:creator>Iker</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[chromeOS]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[VMWare]]></category>

		<guid isPermaLink="false">http://www.ikeralbeniz.net/?p=81</guid>
		<description><![CDATA[Segunda entrega del tutorial de instalación y customización de ChomeOS instalado en una VMWare. Los primeros que lo probasteis os daríais cuenta que el teclado y el idioma por defecto era ingles, haciendo incomodas numerosas acciones como la utilización de símbolos como la @. En el siguiente post indicaremos como cambiar el idioma de teclado y entorno a castellano.]]></description>
			<content:encoded><![CDATA[<p>En el post anterior vimos como instalar ChromeOS en una maquina virtual VMWare. Los primeros que lo probasteis os daríais cuenta que el teclado y el idioma por defecto era ingles, haciendo incomodas numerosas acciones como la utilización de símbolos como la @. En el siguiente post indicaremos como cambiar el idioma de teclado y entorno a castellano.</p>
<p>Como comenté en el post anterior, ChromeOS se trata de una distribución tipo Debian, por lo que la forma de cambiar la configuración del teclado es acceder a la configuración de la xorgs. El primer paso es acceder a una shell de bash como root. Para lo cual una vez logeados, deberemos pulsar CTR+ALT+T y se nos mostrara un terminal.</p>
<p>Deberemos pasar a root usando sudo -s y para ello usaremos la contraseña de root &#8220;chronos&#8221;</p>
<fieldset>$> sudo -s<br />
password: chronos</fieldset>
<p>El sistema raiz esta montado en modo solo lectura por lo que lo &#8220;remontaremos&#8221; con acceso a escritura</p>
<fieldset>mount -o remount /</fieldset>
<p>ya podemos editar cualquier archivo de conflagración. En nuestro caso editaremos el archivo /etc/X11/xrog.conf y editaremos los siguientes parámetros del apartado &#8220;Keyboard&#8221;</p>
<fieldset>Option “XkbModel” “pc105″<br />
Option “XkbLayout” “es”</fieldset>
<p>De este modo indicaremos que nuestro teclado es un teclado estándar de 105 teclas y en español. Para que los cambios tengan efecto debereis reiniciar el sistema mediante el comando rebooot.</p>
<fieldset>$> reboot</fieldset>
<p>Pero mejor es dejar el reinicio para mas tarde y seguir configurando el sistema en castellano. Para lo cual deberemos cambiar las variables LANGUAGE y LANG a castellano editando el archivo /etc/enviroment</p>
<fieldset>$> vi /etc/environment</p>
<p>LANGUAGE=&#8221;es_Es:es&#8221;<br />
LANG=es_ES.UTF-8</fieldset>
<p>Ahora ya podemos reiniciar el sistema y vereis como el teclado ya esta en castellano, por lo que sera mas cómodo manejarlo.</p>
<p>NOTA: Hasta cambiar el idioma, de cara a poder usar VI es importante tener en cuenta que los símbolos : y . están en la Ñ.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ikeralbeniz.net/2009/11/28/primeros-pasos-en-chromeos-ii/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Primeros pasos en ChromeOS (Parte I)</title>
		<link>http://www.ikeralbeniz.net/2009/11/26/primeros-pasos-en-chromeos-i/</link>
		<comments>http://www.ikeralbeniz.net/2009/11/26/primeros-pasos-en-chromeos-i/#comments</comments>
		<pubDate>Thu, 26 Nov 2009 14:15:55 +0000</pubDate>
		<dc:creator>Iker</dc:creator>
				<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[chorme]]></category>
		<category><![CDATA[chromeOS]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[VMWare]]></category>

		<guid isPermaLink="false">http://www.ikeralbeniz.net/?p=58</guid>
		<description><![CDATA[<img class="alignleft" src="http://farm3.static.flickr.com/2519/4135594059_7599c193a2.jpg" alt="Pantalla Principal (Loging) de ChomeOS" title="Pantalla Principal (Loging) de ChomeOS" longdesc="Pantalla Principal (Login) de ChromeOS de color azul donde insertar usuario y contrase&#038;ntildea" width="200" height="117" />Aquí so dejo un tutorial paso de paso de cómo empezar a probar Google ChromeOS instalándola en una Maquina Virtual mediante VMWare. A primera vista decir que es un sistema operativo es un pelín exagerado ya que básicamente se trata de una distribución GNU/Linux, mas concretamente una Ubuntu, con las xorg y librerías GTK instaladas. Lo suficiente para lanzar el navegador Web de Google llamado, como no, Chrome.]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">La verdad es que hace unos días que ya estaba disponible el nuevo sistema operativo de Google, pero hasta hoy no me he puesto a probarlo y cacharrear con el. A primera vista decir que es un sistema operativo es un pelin exagerado ya que básicamente se trata de una distribución GNU/Linux, mas concretamente una Ubuntu, con las xorg y librerías GTK instaladas. Lo suficiente para lanzar el navegador Web de Google llamado, como no, Chrome. Básicamente podemos hacer los mismo instalando una Ubuntu Server, las xorg y añadir una línea en rc.local para que lance un navegador al iniciar la sesión. Aun así, en el caso de Chrome OS es algo un poco mas elaborado ya que dispone de un sistema de login que se autentica a través de http con Google usando tu cuenta de Google. Por tanto ChromeOS, como ya habian manifestado de de Google, es un sistema operativo basado en su navegador y en “aplicaciones en la nube”.</p>
<p style="text-align: left;"><strong>Manos a la obra</strong></p>
<p style="text-align: left;">Para empezar lo mejor es instalar ChromeOs en una VMWare y hacer las pruebas desde la maquina virtual. Para lo cual podemos bajarnos una imagen desde:</p>
<p style="text-align: left;"><a href="http://gdgt.com/google/chrome-os/download/" target="_blank">http://gdgt.com/google/chrome-os/download/</a></p>
<p style="text-align: left;">Una vez descargada la imagen crearemos una nueva maquina virtual.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://farm3.static.flickr.com/2753/4135548465_3d19a8f6ef_o.jpg" alt="VmWare: Accedemos a Archivo, Nuevo, Maquina Virtual" title="VmWare: Accedemos a Archivo, Nuevo, Maquina Virtual" longdesc="VmWare: En la barra de menu accedemos a Archivo, Nuevo, Maquina Virtual" width="528" height="131" /></p>
<p style="text-align: left;">Crearemos una Maquina virtual típica y seleccionaremos “Instalare el sistema operativo mas tarde”. Como sistema operativo seleccionaremos Linux y la distribución UBUNTU.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://farm3.static.flickr.com/2796/4135548593_8ddcc45911_o.jpg" alt="WmWare: elejimos tipica" title="WmWare: elejimos tipica" longdesc="VmWare: En el menu de seleccion de tipo de maquina virtual elejimos tipica" width="432" height="372" /><img class="alignnone" src="http://farm3.static.flickr.com/2785/4135548595_58c213502c_o.jpg" alt="" width="432" height="372" /><img class="alignnone" src="http://farm3.static.flickr.com/2548/4135548599_8b45893560_o.jpg" alt="" width="432" height="372" /><img class="alignnone" src="http://farm3.static.flickr.com/2579/4135548603_49c5a26152_o.jpg" alt="" width="432" height="372" /></p>
<p style="text-align: left;">En nuestro caso llamaremos a nuestra Maquina Virtual ChromeOS. Una vez creada descomprimiremos la imagen de Crome descargada anteriormente y la copiaremos dentro del directorio ChromeOS donde hemos creado la maquina virtual.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://farm3.static.flickr.com/2776/4135548607_f4f7d83edf_o.jpg" alt="" /></p>
<p style="text-align: center;"><img class="alignnone" src="http://farm3.static.flickr.com/2752/4135550435_563cb6d464_o.jpg" alt="" /></p>
<p style="text-align: left;">A continuación añadiremos la imagen descargada y la configuraremos como disco duro principal. Para lo cual iremos a configuración. En el listado de Hardware pulsaremos Añadir y elegiremos añadir un Disco Duro. En nuestro caso elegiremos usar una Imagen ya existente.</p>
<p style="text-align: center;"><img class="alignnone" src="http://farm3.static.flickr.com/2550/4135550437_f713160efa_o.jpg" alt="" /></p>
<p style="text-align: left;"><img class="aligncenter" src="http://farm3.static.flickr.com/2619/4135550441_57fd1a7708_o.jpg" alt="" width="432" height="372" /></p>
<p style="text-align: left;">Por tanto seleccionaremos la imagen descargada y la añadiremos manteniendo el formato original. Una vez añadida la nueva imagen podemos eliminar la imagen creada por defecto.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://farm3.static.flickr.com/2692/4135550443_2d313fb6a0_o.jpg" alt="" width="565" height="367" /><img class="aligncenter" src="http://farm3.static.flickr.com/2768/4135550445_77628cfc89_o.jpg" alt="" width="506" height="233" /></p>
<p style="text-align: left;">Ya tenemos la Maquina Virtual instalada por lo que ya solo nos queda ejecutar la maquina virtual y empezar a usar ChromeOS.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://farm3.static.flickr.com/2519/4135594059_7599c193a2.jpg" alt="" width="500" height="293" /></p>
<p style="text-align: left;">Para logearnos deberemos usar nuestra cuenta de Google. En caso de tener problemas con la conexión aseguraros que la tarjeta de red esta en modo bridge.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://farm3.static.flickr.com/2560/4136311470_1a682e317c_o.jpg" alt="" width="514" height="590" /></p>
<p style="text-align: left;">Si aun así no conseguis logearos podéis usar el usuario local.</p>
<p style="text-align: left;"><strong>Username:</strong> chronos<br />
<strong>Password:</strong> &lt;en_blanco&gt;<strong><br />
</strong></p>
<p style="text-align: left;">En las próximas entradas explicare como acceder como root a la consola y configurar ChromeOS en Castellano y la posibilidad de conectarse a través de un Proxy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ikeralbeniz.net/2009/11/26/primeros-pasos-en-chromeos-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Posibilidades de la nueva funcionalidad de Google Translate</title>
		<link>http://www.ikeralbeniz.net/2009/11/18/posibilidades-de-la-nueva-funcionalidad-de-google-translate/</link>
		<comments>http://www.ikeralbeniz.net/2009/11/18/posibilidades-de-la-nueva-funcionalidad-de-google-translate/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 14:16:03 +0000</pubDate>
		<dc:creator>Iker</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[presentaciones]]></category>
		<category><![CDATA[sordos]]></category>
		<category><![CDATA[traducir]]></category>
		<category><![CDATA[translate]]></category>

		<guid isPermaLink="false">http://www.ikeralbeniz.net/?p=47</guid>
		<description><![CDATA[<img alt="" src="http://www.google.com/intl/es/images/logos/translate_logo.gif" class="alignright" width="211" height="40" />Google ha actualizado su <a href="http://translate.google.com/#" target="_blank">sistema de traducción</a> con una nueva funcionalidad: es posible escuchar el texto y así comprobar la pronunciación. La verdad es que el resultado (probado en Ingles) es bastante bueno e imagino que dentro de algún tiempo estará disponible en castellano.

Por curiosidad he estado mirando como podría usarse esta funcionalidad por parte de aplicaciones de terceros y he obtenido que el audio se genera a partir de un script al que es posible llamar de la siguiente manera.]]></description>
			<content:encoded><![CDATA[<p>Google ha actualizado su <a href="http://translate.google.com/#" target="_blank">sistema de traducción</a> con una nueva funcionalidad: es posible escuchar el texto y así comprobar la pronunciación. La verdad es que el resultado (probado en Ingles) es bastante bueno e imagino que dentro de algún tiempo estará disponible en castellano.</p>
<p>Por curiosidad he estado mirando como podría usarse esta funcionalidad por parte de aplicaciones de terceros y he obtenido que el audio se genera a partir de un script al que es posible llamar de la siguiente manera:</p>
<p>http://translate.google.com/translate_tts?q=<strong>&lt;testo_codificado&gt;</strong> &amp;tl=<strong>&lt;lenguaje&gt;</strong></p>
<p>Donde <strong>&lt;texto_codificado&gt;</strong> es el texto a pronunciar codificado con la función URLEncode (que es posible encontrar en casi todos los lenguajes) y donde <strong>&lt;lenguaje&gt;</strong> es el código del lenguaje en el que esta el texto (por ahora solo parece funcionar con Ingles “en”).</p>
<p>Un ejemplo de cómo quedaría seria el siguiente:</p>
<p><a href="http://translate.google.com/translate_tts?q=This%20is%20a%20text%20in%20English%20that%20can%20be%20heard&amp;tl=en" target="_blank">http://translate.google.com/translate_tts?q=This%20is%20a%20text%20in%20English%20that%20can%20be%20heard&amp;tl=en</a></p>
<p>La forma de generar este tipo de URLs de forma dinámica en PHP seria la siguiente:</p>
<fieldset>&lt;?php</p>
<p>function getTranslatedSound($string){<br />
$string=str_replace(&#8221; &#8220;,&#8221;%20&#8243;,$string);<br />
$string = &#8220;?q=&#8221;.$string.&#8221;&amp;tl=en&#8221;;<br />
$string = &#8220;http://translate.google.com/translate_tts&#8221;.$string;<br />
return  $string;<br />
}</p>
<p>$string = getTranslatedSound(&#8220;This is a text in English that can be heard&#8221;);<br />
echo $string;<br />
?&gt;</p>
</fieldset>
<p>Con lo que las posibilidades son enormes:</p>
<ul>
<li>Adaptar páginas para ciegos</li>
</ul>
<ul>
<li>Crear Presentaciones Dinámicas con audio</li>
</ul>
<ul>
<li>Escuchar una conferencia en directo sin necesidad de streaming usando Twitter o similares.</li>
</ul>
<ul>
<li>Etc,…</li>
</ul>
<p>Es decir, la combinación de esta funcionalidad con tecnologías como Ajax o Flash podría revolucionar muchos de los servicios actuales. Ahora toca correr a aquellas personas que quieran ser los primeros en dar ese servicio y colocarse en una posición dominante en el mercado.</p>
<p><strong>Actualización [18/11/2009 16:33]</strong></p>
<p>He añadido un ejemplo con javascript para crear un CHAT de voz.</p>
<fieldset>
&lt;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD XHTML 1.0 Strict//EN&#8221;<br />
&#8220;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&#8221;&gt;<br />
&lt;html xmlns=&#8221;http://www.w3.org/1999/xhtml&#8221; lang=&#8221;en&#8221; xml:lang=&#8221;en&#8221;&gt;<br />
&lt;head&gt;<br />
&lt;script&gt;<br />
function DHTMLSound(surl) {<br />
document.getElementById(&#8220;output&#8221;).innerHTML = document.getElementById(&#8220;output&#8221;).innerHTML + &#8220;&lt;br/&gt;&#8221; + surl;<br />
surl = surl.replace(new RegExp(/\s/g),&#8221;%20&#8243;);<br />
document.getElementById(&#8217;sound&#8217;).value = &#8220;&#8221;;<br />
document.getElementById(&#8220;dummyspan&#8221;).innerHTML=&#8221;&lt;embed src=&#8217;http://translate.google.com/translate_tts?q=&#8221;+surl+&#8221;&amp;tl=en&#8217; hidden=true autostart=true loop=false&gt;&#8221;;</p>
<p>}<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;span id=dummyspan&gt;&lt;/span&gt;<br />
&lt;form&gt;<br />
&lt;textarea id=&#8221;sound&#8221;&gt;&lt;/textarea&gt;<br />
&lt;input type=&#8221;button&#8221; value=&#8221;Play Sound&#8221; onClick=&#8221;DHTMLSound(document.getElementById(&#8217;sound&#8217;).value)&#8221;&gt;<br />
&lt;/form&gt;<br />
&lt;span id=&#8221;output&#8221;&gt;&lt;/span&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
</fieldset>
]]></content:encoded>
			<wfw:commentRss>http://www.ikeralbeniz.net/2009/11/18/posibilidades-de-la-nueva-funcionalidad-de-google-translate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://translate.google.com/translate_tts?q=" length="0" type="audio/mpeg" />
<enclosure url="http://translate.google.com/translate_tts?q=This%20is%20a%20text%20in%20English%20that%20can%20be%20heard&amp;amp" length="12672" type="audio/mpeg" />
		</item>
		<item>
		<title>Instalando ANDROID + ECLIPSE en WINDOWS (2000 o XP)</title>
		<link>http://www.ikeralbeniz.net/2007/11/15/instalando-android-eclipse-en-windows-2000-o-xp/</link>
		<comments>http://www.ikeralbeniz.net/2007/11/15/instalando-android-eclipse-en-windows-2000-o-xp/#comments</comments>
		<pubDate>Thu, 15 Nov 2007 10:37:34 +0000</pubDate>
		<dc:creator>Iker</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Manuales]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.ikeralbeniz.net/?p=131</guid>
		<description><![CDATA[En el artículo anterior explicábamos como <a href="http://bendertheandroid.blogspot.com/2007/11/instalando-android-eclipse-en-ubuntu.html">instalar ANDROID y  ECLIPSE  en UBUNTU</a>. Ahora toca el turno a Windows y puesto que la configuración de eclipse es la misma en ambos sistemas operativos solo se explicara como se instalan el SDK y ECILPSE en el ordenador.]]></description>
			<content:encoded><![CDATA[<p>En el artículo anterior explicábamos como <a href="http://bendertheandroid.blogspot.com/2007/11/instalando-android-eclipse-en-ubuntu.html">instalar ANDROID y  ECLIPSE  en UBUNTU</a>. Ahora toca el turno a Windows y puesto que la configuración de eclipse es la misma en ambos sistemas operativos solo se explicara como se instalan el SDK y ECILPSE en el ordenador.</p>
<p>El primer paso es instalar el SDK, para lo cual nos lo descargaremos de esta dirección:</p>
<p><a href="http://dl.google.com/android/android_sdk_windows_m3-rc20a.zip">http://dl.google.com/android/android_sdk_windows_m3-rc20a.zip</a></p>
<p>Una vez descargado y descomprimida cambiamos el nombre de la carpeta  <b>“android_sdk_windows_m3-rc20a”</b> por <b>“android_sdk”</b> y la movemos a nuestro <b>C:\Archivos de Programa\</b>.</p>
<p>Para terminar la instalación solo falta añadir la ruta del SDK al path, para lo cual vamos a <b>INICIO> Configuración > Panel de Control</b> y entramos en <b>Sistema</b>.</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_YsgLljqoEIQ/Rzwoy0NpOiI/AAAAAAAAAB8/ibv9pc1xZSM/s1600-h/android.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_YsgLljqoEIQ/Rzwoy0NpOiI/AAAAAAAAAB8/ibv9pc1xZSM/s320/android.png" alt="" id="BLOGGER_PHOTO_ID_5133022528769964578" border="0" /></a></p>
<p>Dentro del panel de Sistema vamos a la pestaña <b>Opciones Avanzadas</b> y pulsamos en <b>Variables de Entorno</b></p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_YsgLljqoEIQ/RzwpPENpOjI/AAAAAAAAACE/yaMAYr1LG6U/s1600-h/android1.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_YsgLljqoEIQ/RzwpPENpOjI/AAAAAAAAACE/yaMAYr1LG6U/s320/android1.png" alt="" id="BLOGGER_PHOTO_ID_5133023014101269042" border="0" /></a></p>
<p>Se nos mostraran dos listas de variables: <b>Variables de usuario para usuario</b> y <b>variables del sistema</b>. En nuestro caso añadiremos una variable y cambiaremos el path en la lista de <b>Variables del sistema</b> para que todos los usuarios tengan acceso al SDK.</p>
<p>Por tanto pulsaremos en <b>Nueva</b> y nos aparecerá un cuadro de dialogo donde meteremos el nombre de la variable y su ruta. En el caso del SDK pondremos como nombre SDK_ROOT y la ruta C:\Archivos de Programa\android_sdk y pulsamos <b>Aceptar</b>. La nueva variable se añadirá a la lista.</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YsgLljqoEIQ/RzwpaUNpOkI/AAAAAAAAACM/mcUYYG9UVg8/s1600-h/android2.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_YsgLljqoEIQ/RzwpaUNpOkI/AAAAAAAAACM/mcUYYG9UVg8/s320/android2.png" alt="" id="BLOGGER_PHOTO_ID_5133023207374797378" border="0" /></a></p>
<p>Ya solo falta añadir la ruta al path, por tanto, buscamos la variable <b>PATH</b> de la lista de Variables del sistema, y pulsamos sobre ella dos veces. Se nos aparecerá el mismo cuadro de dialogo de antes peor esta vez completo con el nombre PATH un montón de rutas que están añadidas al path separadas por <b>“;”</b>. Por tanto añadiremos los siguiente al final del campo Valor de la variable: <b>;%SDK_ROOT%\tools</b></p>
<p>NOTA: no olvidar el <b>“;”</b> ni los <b>“%”</b></p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YsgLljqoEIQ/RzwplkNpOlI/AAAAAAAAACU/C7A-PMFrZ-A/s1600-h/android3.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_YsgLljqoEIQ/RzwplkNpOlI/AAAAAAAAACU/C7A-PMFrZ-A/s320/android3.png" alt="" id="BLOGGER_PHOTO_ID_5133023400648325714" border="0" /></a></p>
<p>Pulsamos <b>Aceptar</b> a todas las ventanas hasta cerrarlas todas y ya tenemos el SDK instalado.</p>
<p>Y asolo faltaría instalar <a href="http://www.eclipse.org/">Eclipse</a>. Para instalar eclipse solo hay que descargarse eclipse del siguiente <a href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/20071103/eclipse-java-europa-fall2-win32.zip&amp;url=http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/technology/epp/downloads/release/20071103/eclipse-java-europa-fall2-win32.zip&amp;mirror_id=17">enlace</a>, descomprimirlo y mover la carpeta a <b>C:\Archivos de Programa\</b>. (para que esté todo mas ordenado..)</p>
<p>A partir de aquí faltaría configurar y plugin de android para eclipse. Los pasos son idénticos que en Ubuntu así que podéis seguir los mismos pasos que se indican en el articulo anterior.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ikeralbeniz.net/2007/11/15/instalando-android-eclipse-en-windows-2000-o-xp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
