Rockola en Flujos.org

La rockola

rockola.flujos.org

Flujos.org es un laboratorio de radio y streaming por Internet, entre las cosas desarrolladas es la versión de flujos vivos el cual es una distribución basada en debian booteable el cual tiene todo lo necesario para empezar a trasmitir.

Desde hace algunos meses se empezo con el subproyecto la rockola el cual es un concentrado de las trasmisiones y a la vez un auditeka, para esto estamos haciendo uso de octopress(A blogging framework for hackers), jQuery corriendo sobre HTML5, el proyecto lo administramos con git.

Proyecto:

https://github.com/kyv/rockola

Descargando gallerias de Televisa Deportes

Hola que tal después de un tiempo sin escribir entrada alguna, posteo algo que hice al  tomarme un rato libre.

Uno de mis pasatiempo es en ocasiones ver imágenes de muchachonas por la nube, debo confesar(con algo de vergüenza) que en ocasiones suelo visitar sitios como el de televisadeportes.com . Y en esta ocasión dejo un par de instrucciones del como descargar una galería completa de la pagina http://www.televisadeportes.com/fotogalerias/, esto a a través de un script al cual he denominado tIdiotizaGallery.py y que comparto:

http://gist.github.com/355585

Descarga las imágenes de una galería de televisadeportes.com

Descarga las imágenes de una galería de televisadeportes.com

Corrida de Ejemplo:

#1ro descargamos el script
wget http://gist.github.com/raw/355585/5977f5ba1cc95e9d548cd23e5566e01c540554a0/tIdiotizaGallery.py
#2do le damos permisos de ejecución al script
chmod +x tIdiotizaGallery.py
#3ro lo ejecutamos con la url de la galeria que queremos descargar
./tIdiotizaGallery.py URL_GaleriaTelevisaDeportes.com

Aqui les dejo el ejemplo en un video:

llegando mas lejos:

Para aquellos que no solo se conforman con el código si no también desean una explicación de su funcionamiento, ahí les va una breve explicación:

Resulta que televisadeportes.com al igual que muchas paginas ocupan JavaScript para hacer dinámicas las transiciones de sus imágenes en sus galerías, es nos da una gran ventaja ya  que al estar en un lenguaje de programación esto implica que la información se encuentra en un lenguaje de la forma ‘normal’ y puede ser fácilmente parseable.

Estudiando el code de televisa deportes:

Si observamos el código que nos devuelve la siguiente galería http://www.televisadeportes.com/fotos/bellezas-torneo-bicentenario-2010/18495 encontraremos que el código que nos interesa es :

<script language="javascript">
		var comment_tpl = "little";
		// Nombre de la Galería
		var gallery_name = 'Bellezas del Bicentenario J-13';
		// Imágenes de los Slides de la Fotogalería
		var gallery_images = new Array();
				gallery_images[0] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_01-1418e900-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[1] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_02-14a5026e-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[2] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_03-15377a86-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[3] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_04-15be0d62-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[4] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_05-163946ee-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[5] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_06-16bf186e-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[6] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_07-173f0628-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[7] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_08-17beed48-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[8] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_10-183bdeac-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[9] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_11-18c12062-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[10] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_12-1947dc6a-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[11] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_13-19b8f170-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[12] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_14-1a38cfe4-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[13] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_15-1abaacd0-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
</script>

Como podemos observar las imágenes se encuentran en una variable la cual es un arreglo de datos, y cada una puede ser atrapada a través de la expresión regular(‘gallery_images\[([0-9]+)\] \=\[([^]]+)‘) de la linea 52 del script, por otra parte el nombre de la carpeta a crear y que sera la contenedora tendra por nombre el de la galería la cual es el valor de la variable gallery_name y para atrapar dicho valor hago uso de la función String.find(s) en las lineas 47,48 y 49. Para ser honesto creo que hubiera quedado mas elegante con una sola expresión regular, pero en fin así se me ocurrió en el momento de desarrollar el script y así quedo :¬(.

Version HTML del script

El script en python funciona perfectamente pues del análisis del caso del que se basa es correcto, sin embargo comprendo que muchos usuarios no estan familiarizados con python y el ejecutar el script les pueda resultar difícil(sobre todo a usuarios q usan distribuciones de S.O. donde python no viene instalado por defecto) . por esta razón paso el script a una versión html(con javascript) disponible:

Genera links de galerias d televisaDeportes y esMas.com

Genera links de galerias d televisaDeportes y esMas.com

http://gist.github.com/425877

 

Versión Bash

.

En bash creo que se puede hacer una implementación bastante simple, dejo aquí una nueva versión que agrego:

Versión en bash

Versión en bash

Diseñando un logo para mononeurona.org

Mononeurona.org es un sitio de Internet de colaboración mutua entre usuarios, hace apenas algunos días a través de este blog (mi blog personal) tuve una entrada en el área de contactos por parte del usuario rnstux a el cual contacte a través del twitter (salu2 x Cierto), bueno el caso es que al  informarme un poco sobre el, observe que pertenecía a Mononeurona.org note que también había una convocatoria la cual se me hizo interesante, me inscribí al portal y aquí esta mi primera aportación un par de layouts para el logotipo para el sitio, espero les sea de su agrado.

Logo1 este logotipo esta mas apegado al diseño original del sitio la verdad desconozco q tan radical quieran el cambio de su logotipo por estas razones preferí mantener los colores y la idea del diseño anterior.

Primer Layout para el logo de monoNeurona.org

Primer Layout para el logo de monoNeurona.org

En el segundo layout solo hice un par de modificaciones sobre el concepto del celebro.

Segundo Layout para el logo de monoNeurona.org

Segundo Layout para el logo de monoNeurona.org

Ambos logotipos están desarrollados con el programa de SL Inskcape (dibuja Libremente) y son descargables desde mi open-art en:

http://openart.googlecode.com/files/monoNeurona_logos.zip

Caso el Bruto.es

ElBruto.es

Genesis:

Hace un par de meses me inscribi a la página del elbruto.es (http://fitorec.elbruto.es/)  no soy muy adepto a jugar, pero en el juego se me hiso bastante entretenido, en una ocacion cuando estaba en Oaxaca en la SicaUnitierra platicando con @eymard y @nierox me dijeron que si le entrabamos y armabamos un clan yo le dije que si, y fuee como inicia este caso.

Estudio del caso:

Pues bien el bruto resulta que es un juego desarrollado por motion-twin la forma en como interactuan los brutos es algo rara,  pues existen diversos servidores de elbruto:

Grafico red elbruto.es

Grafico red elbruto.es

Entre toda esta complegidad en la red un detalle importante a destacar es que el el bruto.es (de España) se se conecta para extraer datos del  labrute.fr (de Francia) esto lo hace atravez del usuarios data es por esta razón que no es posible crear el usuario data y si intentamos accedes a los datos de dicho usuario p.e (http://data.elbruto.es/) nos indicara “error: 404 page no found” .

¿Entonces como poder ganar en el bruto?

El problema principal es poder jugar el bruto y subir rapido de nivel, veamos como es esto posible, consideraciones:

1.-Cuando te inscribes en el bruto el primer dia te dan 6 peleas.

2.- Los siguientes dias solo tienes derecho a combatir 3 veces por dia.

3.- Por cada combate que ganes a un bruto de nivel igual al tuyo o superior, te daran 2 puntos de experiencia.

4.- Por cada pelea perdida o ganada(a un bruto de nivel inferior) solo optendras 1 punto de experiencia.

5.- Por cada alumno nuevo que tengas (Se debera registrar con una IP distinta) te daran 1 punto de experiancia.

6.-Cuando un alumno sube de nivel te daran 1 punto de experiencia.

Si nos ponemos a pensar un poquito nos daremos cuenta que existen muchas formas de poder conseguir puntos de experiencia de forma rapida, una de ellas es procurar que nuestro bruto siempre gane las peleas esto para que siempre nos den 2 puntos de experiencia, entonces la pregunta seria ¿como hacerle para que nuestro bruto siempre gane?,esta pregunta es algo complicada yo le estuve pensando en como hacerle la forma como se me ocurrio fue la de buscar a los brutos mas perdedores, esto de alguna manera asegura que nuestro bruto estadisticamente tiene mas probabilidades de ganar.

Cuando nos logeamos en el bruto y nos vamos a la arena para combatir el sistema nos muestra una lista de oponentes de nuestro mismo nivel, como se muestra en la siguiente figura.

arene

¿De todos ellos quien es rival mas debil?, pues en realidad es dificil de decidir, pero podemos explorar a cada uno de ellos para ver sus estadisticar por ejemplo para ver los datos del que esta en la esquina inferior derecha (somdavgs) si podriamos ver sus datos estadisticos en su celda la cual seria la siguiente url: http://somdavgs.elbruto.es/cellule aqui mismo podemos ver datos como: nivel,puntos de vida, fuerza, velocidad, numero total de peleas ganadas; pero hay unos datos muy especiales que son las ultimas 7 actividades de nuestro bruto.

Estas por lo regular son las ultimas 7 peleas, para cada una de ellas nos dice contra quien fue y ademas si el bruto en cuestion la perdio o gano, resulta un poco evidente que a los brutos contra los que gano deberan ser más debiles.

Mi Solución :

La solucion esta implicita en la explicacion previa, en la siguiente imagen intento explicar dicho concepto:

spider

La figura ilustra como el spider(programa que inspecciona las páginas del World Wide Web de forma metódica y automatizada)  selecciona a (Zukoo,4d38,felixxxx31)  como los siguientes candidatos (costado izquierdo) y en un determinado momento llega al usuario el cual tiene todas las peleas perdidas siendo este el rival mas debil(costado derecho).

mi idea fue la de hacer un script que haga:

1.- Que atraves del nick y el pass de nuestro usuario inicie sesion en  la pagina del bruto.

2.-Seleccione a los 6 oponentes candidatos.

3.- Para cada oponente candidato

3.1.- Extraiga los datos estadisticos de cada uno de ellos

3.2. Si el bruto ha perdido sus ultimas  peleas ->

3.2.1  Recomendar combatir contra el.

3.3. Repetir paso(3.1) Para cada bruto que halla perdido

3.- Este paso se repetira asta que halla recorrido un nivel de 3 entre las relaciones

Implementacion:

De la implementación no hay mucho que decir(pues lo importante esta arriba), para realizar mi idea primero pense en Perl, sin embargo todavia no me siento muy comodo con dicho lenguaje asi que me cambie a Python el cual es un lenguaje que llevo utilizando de un corto tiempo para aqui, pero que cada vez me gusta más.

Codigo en python:

acceder al codigo

acceder al codigo

Dejo la documentacion de la que me apoye:

Python doc Internet Protocols and Support: Documentacion oficial(ingles).

http://docs.python.org/library/internet.html

Interactuar con webs en Python : Breve explicación muy intuitiva con ejemplos y en español

http://mundogeek.net/archivos/2008/04/15/interactuar-con-webs-en-python/

 

Conclusión:

Es posible el hacer que nuestros bruto gane siempre solo es cuestion de enfrentarlo contra el rival adecuado, por otra parte seria bueno el crear un script en el cual se conecte atraves de multiples proxy’s y nos creen alumnos si podriamos subir de puntos rapidamente.

Bueno espero que le sirva a alguien este caso.

p.d. Por favor creenme un alumno desde http://fitorec.elbruto.es/

 

Hotmail y sus problemas de seguridad:

Hace apenas unos días un amigo me pregunto de respecto a la opción “de seguridad mejorada” que nos proporciona hotmail.

Bueno para aquellos que no se han dado cuenta hotmail en su pagina principal de logeo nos ofrece una opción entre si logearse en modo “normal” o logearse por medio de seguridad mejorada.

logeo hotmail

logeo hotmail

Antes de responder me tome unos minutos para reflexionar y se me vinieron otras preguntas, como:

¿por que gmail no, nos da esa opción de: “seguridad mejorada”?

Seguramente algún iluso dirá: Por que Todavía gmail no lo implementa!.

Cuando en realidad la respuesta es por que gmail trabaja con seguridad mejorada siempre :¬D

Entonces que es lo que hace específicamente hotmail cuando ¿presionamos el botón de seguridad mejorada?, y que ¿hace cuando no e iniciamos sesión simplemente?.

Bueno pues en realidad Hotmail trabaja con un nivel de seguridad bastante bajo en donde los datos son trasferidos de manera no segura por distintos servidores en la Internet.

Esto es por que cuando iniciamos sesión de manera “normal” en hotmail los datos son trasferidos bajo una forma definida, bajo un “protocolo” el cual se denomina http(Hypertext Transfer Protocol) que es como funcionan la mayoría de los sitios.

Y cuando presionamos el botón de “seguridad mejorada” los datos son trasferidos pero en esta ocasión bajo otro protocolo, bajo el protocolo “https(Hypertext Transfer Protocol Secure)”.

Cuando realizamos la solicitud https://fitorec.wordpress.com estamos diciendo que queremos que nos transfieran por http lo que esta en fitorec.wordpress.com, pues igual pasa con el correo electrónico cuando le decimos https le decimos que queremos que los datos nos los trasfieran por https, como se puede observar en las capturas en la urls generadas:

Hotmail en  modo normal (http)

Hotmail en modo normal (http)

Hotmail en  modo seguro (https)

Hotmail en modo seguro (https)

Gmail en  modo normal (https)

Gmail en modo normal (https)

Esto se me hace muy irónico, ¿por que hotmail ocupa por predeterminado el logeo no seguro?, que no se supone representa la empresa de mayor desarrollo del software, esta misma empresa tolera los virus…

Desgraciadamente muchos tenemos cuenta de hotmail(lo digo con pena) por cuestiones sociales es por esto que solo nos queda difundir a nuestros contactos que cuando inicien sesión en hotmail lo hagan de modo “seguridad mejorada” , aunque en realidad Hotmail y su seguridad siguen dando mucho que desear.

CakePHP un buen FrameWork

Cakephp

Cakephp

CakePHP es un marco de desarrollo [framework] rápido para PHP, de código abierto. Se trata de una estructura que sirve de base a los programadores para que éstos puedan crear aplicaciones Web. El principal objetivo es que se pueda trabajar de forma estructurada y rápida, sin pérdida de flexibilidad.

Diagrama MVC (Model View Controller)

Diagrama MVC (Model View Controller)

Hace uso del patrón de diseño conocido como MVC (Modelo Vista Controlador), disminuyendo los costos de desarrollo y ayuda a los desarrolladores escribir menos código, además CakePHP tiene un equipo de desarrolladores y una comunidad activos, lo que añade valor al proyecto. Con CakePHP, además de no tener que reinventar la rueda.

En el sitio oficial existe un ejemplo de como construir un pequeño blog en solo un par de minutos, ademas dejo aqui un pequeño video de como configurar CakePHP espero sirva.

Donde obtener mas información:

sitio official: http://cakephp.org/

Documentacion Official: http://book.cakephp.org/

Traduccion esp. Doc. Official: http ://book.cakephp.org/es

Grupo usuarios google CakePHP:  http://groups.google.com/group/cakephp-esp

Creando un Buscador para Mozilla Firefox con OpenSearch

Normalmente cuando queremos realizar una búsqueda en alguna página para esto lo que hacemos es que primero introducimos la dirección de dicha pagina a nuestro navegador y posteriormente que cargue realizamos nuestra búsqueda y por ultimo nos esperamos a que nos devuelva el resultado, en cambio este proceso se reduce a la mitad si en cambio realizamos nuestra búsqueda desde los motores de búsqueda incluidos en el Firefox.

En general existen multiples buscadores creados por las compañias de busquedas p.e. google, yahoo, amazon, etc.. en la siguient liga podras agregar algunos a tu firefox.

https://addons.mozilla.org/en-US/firefox/browse/type:4/cat:all?sort=name

Sin embargo falta el nuestro hace apenas algunos días que hemos estado desarrollando la página de mundosica.com me puse a desarrollar un buscador para el Firefox.

Aquí en esta entrada expongo mi experiencia en el desarrollo de esta simple pero potente herramienta que nos ayuda mucho a reducir el tráfico.

buscador OpenSearch

buscador OpenSearch mundosica.com

Indice:

1. Generar nuestro archivo con especificación OpenSearch

2. Insertando el vinculo de instalación.

3.- Poniendo refenrencia de nuestro buscador en la cabecera del sitio.

Paso 1.- Generar nuestro archivo con especificación OpenSearch:

OpenSearch expecificación

OpenSearch expecificación

OpenSearch es un conjunto de formatos simples para el intercambio de resultados de búsqueda.

El documento de descripción OpenSearch formato se puede utilizar para describir un motor de búsqueda a fin de que pueda ser utilizada por las aplicaciones cliente de búsqueda (en nuestro Caso El firefox).

La respuesta OpenSearch elementos se pueden utilizar para ampliar los formatos de sindicación, como RSS y Atom, con el extra de metadatos necesarios para devolver los resultados de la búsqueda.

Para realizar esto nos basamos en el ejemplo de la siguente liga:

http://www.opensearch.org/Specifications/OpenSearch/1.1#Examples

Regresar al Indice

De este ejemplo gener el siguiente archivo: http://mundosica.com/openSearchSICA.xml



 	 Buscador para Mozilla-Firefox code basado en la doc. de .opensearch.or

Buscador para Mozilla-Firefox code basado en la doc. de .opensearch.or

Como podemos ver existen algunos camops importantes tales como:

Los parámetros simples son:

ShortName  : Nombre abreviado de nuestro buscador
LongName   : Nombre de nuestro buscador.
Description: una descripción breve de nuestro buscador.
Contact    : Nuestro contacto como desarrollador.
Developer  : Nuestro contacto como desarrolladores
Attribution: Licencia
Language   : idioma es-mx para México
OutPutEncoding: Codificación de texto que genera como resultado nuestro sitio.
IntPutEncoding: Codificación de texto que recibe como entrada nuestro sitio.

Para los campos de URL
Para type=”text/html” aquí ponemos la dirección que responde cuando le enviamos una consulta en nuestro caso.

http://mundosica.com/09/index.php?searchword={searchTerms}&amp;ordering=&amp;searchphrase=all&amp;option=com_search

Nota: {searchTerms} es la consulta que le estamos enviando a nuestro sitio.
Por ejemplo si queremos hacer un openSearch para google solo pondriamos:
http://www.google.com.mx/search?q={searchTerms}
Pues si queremos buscar por ejemplo fitorec en google basta con acceder a la url:
http://www.google.com.mx/search?q=fitorec

Para los campos Image
Son las imágenes de 64 y 16 pixeles y llevan la ruta absoluta(URL) de las imagenes respectivamente (estas pueden ser png, gif, jpg,etc..).

si quieres tener la imagen como datos en el archivo xml esta herramienta te ayudara mucho.

http://software.hixie.ch/utilities/cgi/data/data

Al cual le mandamos una imagen de 16×16 (de nuestra maquina o una URL) la cual queremos que sea nuestro icono y nos devuelve los datos en la barra URL del navegador.

Para mayor referencia ir al sitio oficial (esta en ingles):

http://www.opensearch.org

Regresar al Indice

Paso 2 .- Insertando el vinculo de instalación.

Para esto nos basamos en una funcion en JavaScript la cual permite agregar un openSearch la documentación adecuada esta en el sitio oficial de firefox pongo la liga.

https://developer.mozilla.org/en/Adding_search_engines_from_web_pages

Este script debera ir en nuestra pagina web les recomiendo que se ponga entre las etiquetas head para que cargue la funcion antes que del boton la manda a llamar.

veamos el script.

IInstalador del openwebSearch en javascript

Instalador del openwebSearch en javascript

Nota: las URL que se le ponga a la funcion addSearchEngine deberan ser absolutas p.e. http://misitio.com/ruta-absoluta/file.xml

Ahora solo es necesario poner la llamada en la funcion a algun evento del usuario p.e. cuando le da click a una imagen, veamos como seria esto:


imagen con accion al instalador

codigo imagen con accion al instalador

Regresar al Indice

Paso 3.- Poniendo refenrencia de nuestro buscador en la cabecera del sitio.

Aunque en este momento ya es complemente funcional nuestro buscador, y desde un boton el usurio instalar en ocaciones no queremos poner mas botones en nuestro sitio o si lo que queremos es que el firefox se de cuenta que en nuestro sitio si es que existe una aplicacion para instalar como se puedeen el la siguiente imagen.

Instalacion desde el administrador de buscadores Firefox

Instalacion desde el administrador de buscadores Firefox

Para que el FireFox identifique los elementos instalables en nuestro sitio tenemos que incruir dicha informacion en nuestra página esto lo realizamos poniendo el siguiente codigo en la cabecera (<head> </head>) de nuestro sitio.


Codigo para que el navegador detecte el buscador

Codigo para que el navegador detecte el buscador

Nota: el parametro href lo debemos cambiar de igual forma por la ruta absoluta en donde se encuentra nuestro archivo xml al igual que el title por el titulo de nuestro buscador.

Realmente espero que esto le sirva a alguien, es por esto que subi el codigo en un archivo comprimido para la descarga directa desde la pagina de mundosica.com.

Deseo mejorar el mundo pero todavia no tengo su codigo fuente!.
Regresar al Indice