Noticias
Noticias en general
Noticias en general
Este sábado dentro de las iniciativas llevadas a cabo por GTUG (Google Technology User Group) Bilbao, se va a llevar a impartir un curso de iniciación a la plataforma Google App Engine. El curso será este Sábado 19 de Febrero en la sede de Creativity Zentrum Bilbao a las diez de la mañana.
El curso básicamente va a ser una introducción a la plataforma y se realizará la guía “Getting Started” de forma interactiva, mientras se resuelven dudas realizando todos los ejemplos y alguna prueba mas que pueda ser de interés. Se supondrá que los usuarios tienen cierto conocimiento en Python, aunque al tratarse de un lenguaje muy sencillo con tener conocimientos en lenguajes orientados a objetos seria suficiente.
Así que si no tenéis planes para este sábado a la mañana y siempre habéis tenido ganas de hincarle el diente a este servicio de Google no lo dudéis y confirmar vuestra asistencia en el siguiente enlace: http://doodle.com/wm7a4ucbaf4xhmxi
Como anuncié a bombo y platillo semanas antes y publiqué (no lo suficiente) en las redes sociales, el día 2 de Febrero (2011) aparecía en el programa NickDutNik de ETB producido por Factoria Crossmedia. En la entrevista presentaba mi aplicación de Bizkaibus para Android y además explicaba las razones y motivaciones que me llevaron a desarrollar esta aplicación. Pinchando en la imagen podéis ver el video de la entrevista.
Google acaba de sacar su sistema de acortador de URLs, y la verdad es que es muy interesante. Por un lado al estar logeado con la cuanta de Google permite mantener un registro de las urls generadas en los últimos días además de datos estadisticos sobre cuantos clicks han hecho sobre nuestro enlace. Este tipo de acortadores son muy utilizados por los spammers para enmascarar urls de spam y phishing ya que las tecnologías antispam no pueden detectar estos enlaces sin correr el riesgo de detectar enlaces validos como spam con el prejuicio que estos supone, por eso, Google a integrado un sistema de detección de spam y phishing para evitar que estos acortadores sea explotados por los spammers.
Como prueba he publicado la url acortada que apunta a este articulo en Facebook y Twitter para probar el sistema de estadísticas. En próximas actualizaciones publicare los resultados.
Una vulnerabilidad en el método onmouseover se esta convirtiendo en la broma de moda en Twitter.. el problema es que esta vulnerabilidad de broma no tiene nada ya que permite ejecutar código javascript solo al pasar el ratón por encima de nuestro twitt.. Yo he probado a hacer una prueba con el hashtag #zinemaldia. Imaginaos las de visitas que podría conseguir bombardeando los hashtags de los trending topics.
La sentencia que he probado es la siguiente:
<br /> #zinemaldia http://twitter.com/RainbowTwtr#@"onmouseover="javascript:window.location = 'http://www.ikeralbeniz.net/';"/<br />
Lo que hago es una redirección a mi sitio.. por lo que si queréis hacer un poco el tonto podéis probar:
<br /> #zinemaldia http://twitter.com/RainbowTwtr#@"onmouseover="javascript: alert(‘no me pises por favor!’);"/<br />
Desde eitb.com llevan años trabajando para la integración de las nuevas tecnologías y redes sociales en la programación de los canales del grupo, para intentar que sus contenidos sean más interactivos. Además coincide que he sido un firme opositor a los sistemas de SMS de pago en los programas de televisión ya que siempre he creído que eran una forma de estafa encubierta sobre todo en programas que tenían un publico claramente menor de edad.
Por tanto la idea de sustituir los mensajitos de marras por Tweets que se ha llevado acabo en el programa “El conquis” (programa de debate del reality “El conquistador del Fin del Mundo”) me llamo la atención desde el primer momento y me pareció una iniciativa digna de aplaudir y de dar a conocer de cara a que estas practicas sean mas populares en los medios de comunicación.
En el caso de este programa el sistema es muy sencillo: se define un hashtag (#conquis) y los usuarios pueden enviar comentarios a través de sus cuentas de Twitter añadiendo dicho hashtag en sus comentarios. Desde el programa se sigue el feed generado a partir del hashtag y se muestra en la parte inferior de la pantalla.

Esperemos que estas iniciativas que se están llevando a cabo en diferentes medios de comunicación se popularicen en detrimento de otras practicas menos recomendables.
Plugin para WordPress que permite mostrar la información de tu propia aplicación o aplicación preferida para Android. Se conecta automáticamente a Android Market descargando de forma periódica la información sobre tu aplicación como: valoración de los usuarios, descargas, comentarios, versión,.. etc.
Además facilita la instalación de la aplicación por parte de los usuarios ya que al pulsar “Instalar” se muestra un código de barras que permite acceder a la aplicación en Android Market directamente.
La aplicación se conecta a Androd Market mediante una pequeña implementación de protocolo usado por Google para acceder al Market a través de los terminales Android. Esta implementación es aun muy simple y se ira mejorando en próximas versiones.
WordPress plugin for displaying the information of your own or preferred Android application. Widget automatically connects to Android Market downloading the information about your application like: rating, downloads, reviews, release, .. etc.
It also facilitates the installation of the application by users. Pressing “Install” shows a bar code that allows access to the Android Market application directly.
The application connects to Androd Market with a small implementation of the protocol used by Google to access the Market through the Android terminals. This implementation is still very simple and it will be improved in future releases.
Mas información/More info:
http://wordpress.org/extend/plugins/android-application-widget/
Ya esta disponible en Android Market la versión BETA de Eitb Irratia. Esta versión esta aun en desarrollo pero es completamente funcional. Existen bugs conocidos en los cuales estoy centrando los esfuerzos. Actualmente las líneas de trabajo principales son:
Descarga la aplicación desde aquí o con un lector de código de barras.
Si señores, parece que Vodafone ha decidido que conectar tu SIM a un HTC Magic es suficiente para darte de alta un servicio de tarifa plana de datos sin ningún tipo de firma de contrato ni consentimiento del usuario. Es decir, que si alguien te presta su HTC Magic por alguna razón (te has quedado sin batería, te lo ha prestado temporalmente porque se te ha roto el tuyo…) Vodafone es capaz de detectar que tu SIM esta conectada a un HTC Magic y da de alta automáticamente la tarifa plana de datos.
Todo empezó hace un mes cuando mi novia me presto su HTC Magic para hacer unas pruebas con unas aplicaciones que estaba desarrollando yo mismo. Como sabia que yo no tenía ninguna tarifa plana asociada, para que no me saliera la torta un pan, instale APNDroid para evitar que el terminal se conectara a Internet ya que para las pruebas usaría la red WIFI local mía. La verdad es que no me podía quejar, las pruebas iban bien y el terminal, aunque quizá un poco justo de recursos funcionaba correctamente con mis aplicaciones.
Tengo la mala costumbre de no leer las facturas, pero ayer me llego una factura de Vodafone y se me ocurrió mirar los importes. En la factura aparecía un importe de 24€ en la sección otros servicios, por lo que llamé a Vodafone para informarme. Tras hablar con un agente me comenta que tengo mi SIM conectada a un HTC Magic y que ese teléfono tiene asociada una Tarifa plana de datos. Le digo que el terminal no es mío, que lo tengo prestado y que la tarifa plana la tendrá el dueño del terminal que fue quien firmo el contrato de adquisición del terminal. Me dice que eso es igual, el terminal parece ser tiene un efecto “Vírico” (no se conforman con distribuir mariposas y confickers) y a cada SIM que se conecta al terminal se le da de alta la tarifa plana de datos. Ante mi asombro, le pregunto como es posible que insertar una SIM en un teléfono me comprometa a un servicio sin que haya ninguna intervención mía o contrato de por medio. El agente me comenta que eso es así y que no hay mas vueltas que darle, por tanto, le solicito que me remitan una carta o documento en el que se me confirme que la respuesta oficial de Vodafone es esa, a fin de presentarlo como prueba donde fuera necesario. El agente me confirma que Vodafone no remite ningún tipo de documento, por lo que paso a preguntarle su nombre completo. El agente solo me facilita su nombre de pila y cuando la insisto en solicitarle su apellido la llamada se cuelga inesperadamente.
Aun así no entiendo porque me aparece 24€ si la tarifa son 15€, e intentando acceder a el servicio Mi Vodafone para comprobar las facturas, veo que la pagina esta inaccesible. Por tanto vuelvo a llamar a Vodafone para solicitar más información y dar de baja el servicio. El agente me comunica que el servicio de gestión interna esta caído y que deja un aviso para que en cuanto este disponible se me de de baja el servicio. Como no es posible acceder a mis facturas, el agente no es capaz de darme la información sobre la facturación en ese momento. Le pregunto si es cierto que si vuelvo a conectar mi SIM al terminal se me volverá a dar de alta la tarifa de datos y el me confirma que “en principio si”.
Al de una hora recibo un mensaje en el que se me confirma la baja del servicio de datos. Pero hoy estoy con unas facturas en las que se me ha cobrado unos servicios que no uso y la duda de que pasara si vuelvo a conectar mi SIM o de otra persona a este terminal.
Esta mañana iré a la oficina del consumidor a informarme con lo que actualizare este post con mas información a lo largo de la mañana.
Actualización [16/03/2010 14:00]:
He llamado de nuevo a Vodafone y no se si el articulo habrá tenido efecto o ha sido que ayer les pille en una hora mala, pero la chica que me ha atendido muy amablemente me ha pasado a anular la tarifa y a abonarme la diferencia. En cuanto a los 24€ me han confirmado lo que alguien ya había dicho en algún post de menéame: son lo 15€ + 9€ de consumo mínimo que luego se descuentan.
Por ultimo estaría bien que Vodafone aclarara cual es su política o que redefiniera su protocolo de actuación en estos casos. Sí entiendo que ante los problemas que podrían surgir de facturas astronómicas, esta sea la mejor solución para ellos, pero no es la mejor solución para todos sus clientes. Desde el que no sabe ni que tiene un Android hasta el que hace ingeniería inversa.
A todos los que os interese el SEO seguramente habréis consultado alguna vez el PageRank de vuestra pagina. La forma mas sencilla de obtenerlo es instalando la ToolBar de Google 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 Wireshark) 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.
<br />
#!/usr/bin/env python<br />
# -*- coding: utf-8 -*-<br />
# GPL (C) 2010 Iker Perez de Albeniz<br />
# ported in Python from the Php code by HM2K (http://www.hm2k.com/projects/pagerank)<br />
# http://www.ikeralbeniz.net/2010/03/05/contulta-tu-pagerank-de-google-con-python/</p>
<p>import sys<br />
import urllib</p>
<p>from urllib import urlencode<br />
from pprint import pprint</p>
<p>def strToNum(Str, Check, Magic):<br />
Int32Unit = 4294967296<br />
length = len(Str);<br />
for i in range(0,length):<br />
Check *= Magic;<br />
if (Check >= Int32Unit):<br />
Check = (Check - Int32Unit * int(Check/Int32Unit))<br />
if Check < -2147483648:<br />
Check = Check + Int32Unit</p>
<p> Check += ord(Str[i])<br />
return Check</p>
<p>def hashURL(string):<br />
check1 = strToNum(string, 0x1505, 0x21)<br />
check2 = strToNum(string, 0, 0x1003F)</p>
<p> check1 >>= 2<br />
check1 = ((check1 >> 4) & 0x3FFFFC0 ) | (check1 & 0x3F)<br />
check1 = ((check1 >> 4) & 0x3FFC00 ) | (check1 & 0x3FF)<br />
check1 = ((check1 >> 4) & 0x3C000 ) | (check1 & 0x3FFF)</p>
<p> T1 = ((((check1 & 0x3C0) << 4) | (check1 & 0x3C)) <<2 ) | (check2 & 0xF0F )<br />
T2 = ((((check1 & 0xFFFFC000) << 4) | (check1 & 0x3C00)) << 0xA) | (check2 & 0xF0F0000 )</p>
<p> return (T1 | T2);</p>
<p>def checkHash(hashnum):<br />
checkByte = 0;<br />
flag = 0;</p>
<p> HashStr = '%s' % hashnum<br />
length = len(HashStr)</p>
<p> for i in range(0,length):<br />
Re = int(HashStr[(length - 1)-i])<br />
if (1 == (flag % 2)):<br />
Re += Re<br />
Re = int((Re / 10) + (Re % 10))</p>
<p> checkByte += int(Re)<br />
flag = flag + 1</p>
<p> checkByte %= 10<br />
if (0 != checkByte):<br />
checkByte = 10 - checkByte<br />
if (1 == (flag % 2) ):<br />
if (1 == (checkByte % 2)):<br />
checkByte += 9</p>
<p> checkByte >>= 1<br />
return '7%s%s' %(checkByte,HashStr)</p>
<p>def getCh(url):<br />
return checkHash(hashURL(url))</p>
<p>def main():</p>
<p> response = "Error: No URL defined.\nUsage: googrng.py <url> [[proxyuser:proxypass@]proxyhost:poxyport]"<br />
if len(sys.argv) > 1:<br />
myurl = sys.argv[1]<br />
url = "http://toolbarqueries.google.es/search?features=Rank&sourceid=navclient-ff&client=navclient-auto-ff&googleip=O;208.117.235.17;97&iqrn=8VdB&querytime=4P&orig=0X557&swwk=-1&ch=%s&q=info:%s" %(getCh(myurl),urllib.quote_plus(myurl))<br />
if len(sys.argv) > 2:<br />
proxies = {'http': 'http://'+sys.argv[1]}<br />
f = urllib.urlopen(url, proxies=proxies)<br />
else:<br />
f = urllib.urlopen(url)<br />
response = f.read()<br />
f.close()<br />
print response</p>
<p>if __name__ == "__main__":<br />
main()<br />
En el articulo anterior analizábamos la API de acceso a Buzz. Una vez analizada ya podemos ver como integrar Buzz en nuestra pagina. Para eso vamos a utilizar la API de Google para leer feeds y un script propio que lo que hará es mostrarnos el código HTML de los comentarios en in iframe refrescándolo cada 1 segundo. De este modo es posible crear un widget de Buzz para nuestro wordpress.
Antes de nada hay que tener en cuenta dos aspectos importantes:
sample.html
<br /> <html><br /> <head><br /> <script type="text/javascript" src="http://www.google.com/jsapi?key=ABQIAAAAMGph6fpNzf-ET0oBGVVHJxRpfcICevY5tQgqnPHEJCivekQnPxSD1FOWXFY6-VJtM6TmsT-tOJc9mg"></script><br /> <script type="text/javascript" src="buzz.js"></script><br /> </head><br /> <body></p> <div id="buzz" style="width:300px;background-color:#e1f3fa;"> <h1 style="font:20px Verdana;Color:#2193c5;margin:7px;">Iker.perez</h1> <hr style="border: 1px dotted #CCCCCC;margin:5px 7px 0px 7px;"> <iframe id="buzz_msg_box" style="margin:0px 7px 0px 7px;border:0px; width:286px; height:450px;background-color:#ffffff;"></iframe></p> <hr style="border: 1px dotted #CCCCCC;margin:0px 7px 0px 7px;"> <img src="buz.png" style="margin: 7px" width="100px"> </div> <p> </body><br /> </html><br />
buzz.js
<br />
google.load("feeds", "1");<br />
var Editor;<br />
window.onload = function()<br />
{<br />
Editor = document.getElementById(‘buzz_msg_box’).contentWindow.document;<br />
Editor.designMode = "on";</p>
<p>}</p>
<p>function initialize() {<br />
var feed = new google.feeds.Feed("http://buzz.googleapis.com/feeds/111738004311961586383/public/posted");<br />
feed.setNumEntries(20);<br />
feed.load(function(result) {<br />
if (!result.error) {<br />
var alltest = "";<br />
var simplepost = "";<br />
for (var i = 0; i < result.feed.entries.length; i++) {<br />
simplepost = "";<br />
var entry = result.feed.entries[i];</p>
<p>simplepost +’
<div id="message" style="font: 12px Verdana;"><b>’+entry.publishedDate.split(" -")[0]+’:</b><br/>’+entry.content+’</div>
<p>\r\n’;<br />
simplepost = simplepost +’<br />
<hr style="border: 1px dotted #CCCCCC;"/>\r\n’;<br />
//entry.title+"<br>"+;<br />
alltest = alltest + simplepost ;</p>
<p>}<br />
Editor.body.innerHTML = alltest;<br />
}<br />
});<br />
}</p>
<p>function reloadComments() {<br />
google.setOnLoadCallback(initialize);<br />
setTimeout(‘reloadComments()’,1000);<br />
}</p>
<p>reloadComments();<br />
