martes, enero 01, 2019

Acceso a Webservices básico con requests y Parseando HTML con Python, BeautyfulSoup 4 en Pythonista

Pythonista es un entorno de trabajo muy sencillo e intuitivo. Incluye la documentación del lenguaje y existe un montón de documentación en linea. No obstante hay que tener cuidado con lo que encontramos en la web, pues a medida que iOS va avanzando versiones va añadiendo  funcionalidades necesarias para convertir el iPad en una plataforma de computación independiente. Y nos podemos encontrar con un montón de hacks para hacer algo que con iOS 12 ( o la versión que haya cuando leas este ) ya da de saque.

El primer problema que tengo que resolver en mi proyecto es conectarme a un servicio web que desarrollé para un plugin de wordpress hace un tiempo. Python 3 ofrece una nueva libreria para acceder a webservices. Acceder a un servicio GET es tan sencillo como:

import requests 
url=“La url de mi servicio web por GET”
uh = requests.get(url);
data = uh.text; 

Así de facil.

Una de las funciones de mi api cutre, es tan cutre que devuelve información en un formulario HTML. Ahora necesito la información del formulario HTML en una estructura de datos, y no quiero tocar el webservice en el servidor pues ya está en producción. Así que toca parsear el HTML.

Para ello pythonista me ofrece BeautyfulSoup 4 (bs4) un parser html muy potente. Aqui hay un buen tutorial de como usarlo http://omz-software.com/pythonista/docs/ios/beautifulsoup_guide.html






Aprendiendo pythonista y retomando Python - retomando este blog

Hace tiempo que no escribo en este blog. He estado concentrado en otros proyectos como http://aprendizdeluthier.com (Guitarras y Lutheria), http://pansingluten.net (Panificación y bolleria sin gluten ), http://estudiarmejor.net (Educación), http://ososdeviaje.com (Viajes y estilo de vida) http://creapodcast.com (grabación y producción de audio para podcasting) y mis proyectos de podcasting más sérios: http://mossegalapoma.cat ( Podcast en català de Cultura, Tecnología y Ciencia ), http://zetatesters.com (Podcast de desarrollo personal) y (last but not least) http://cabalgaelcometa.com (Podcast sobre cambio tecnológico y su impacto en la sociedad).

Si, he estado ocupado.

Este blog en su dia fué de gran ayuda para agregar escritos sobre frikadas, intereses personales y temas relacionados con mi tesis doctoral (que leí hace 10 años, ¿ya?).

Asi pues voy a volver a usar este blog para volcar información y reflexiones sobre cosas, que quiero recuperar yo mismo.

Para empezar, acabo de abrir un proyecto de desarrollo de un app para ios y voy a usar Python. ¿Porqué python? Pues proqué no tengo ganas de meterme en xcode y aprender nuevos lenguajes como c# o swift. Python es un lenguaje perfecto para el proyecto personal y acotado que quiero atacar, además que me permite imporvisar trabajar con mi estilo ecléctico de programación. Teniendo en cuenta que no tengo que coordinarme con otros developers y no planeo hacerlo en el futuro creo que es la elección adecuada. Seguro que hay opciones mejores, pero Python es la mejor opción para mi y la energia que quiero dedicar al proyecto.

Dicho esto, uno de los atractivos adicionales, es que voy a desarrollar la app en el pròpio iPad. Usaré Pythonista, un entorno de desarrollo para iOS en python que corre como app en el pròpio iOS.

Ya os iré contando...



martes, enero 03, 2017

Lectura:Winter is comming, de Gary Kasparov


Gary Kasparov no precisa presentación, pero por si las moscas recordemos que: Fue el mejor jugador del mundo de ajedrez desde los 22 años hasta que se retiró hace una década. Pasará a la historia por sus partidas contra Deep Blue, el software de IBM, a quien ganó en 2005 y contra quien perdió en 2006. IBM no concedió la revancha/desempate.

Pero además de ser un héroe deportivo Kasparov fue una de las voces críticas internas contra el régimen soviético antes de la caída del muro de Berlin en 1991. Kasparov abandonó su carrera de ajedrecista - estando en la cumbre del ajedrez, no lo olvidemos - para dedicarse al activismo político oponiéndose al régimen dictatorial de Vladimir Puttin.

A través de la entrevista a Kasparov en el podcast, no extento de controversia, de Sam Harriss, entró en mi radar el último libro de Kasparov: Winter is Comming.

A parte de aprender mucho sobre la historia reciente de Russia y política internacional ...

¿Que idea que quedo de este libro?

 Las democracias (y la gente) deben establecer valores morales claros y actuar en consecuencia. Cuando no lo hacen, y no plantan cara a la injusticia y actos contra los derechos humanos, por miedo a confrontación, esto sólo alienta a los villanos, los matones, los señores de la guerra y los dictadores. Y al final las cosas sólo empeoran.

Kasparov señala ciertas similitudes en el trato tímido que se da a Puttin con el que recibió cierto señor en Alemania hace 80 años aproximadamente.




jueves, noviembre 03, 2016

El impacto de la tecnología: Multiplicate por infinito


Cada innovación científica y tecnológica tiene un potencial transformador en la sociedad en la que se introduce. Analizar este potencial nos puede ofrecer nuevas maneras de observar nuestra historia … y nuestro futuro, más o menos inmediato.
Una forma muy interesante de ilustrar el potencial transformador de una tecnología es su factor multiplicador. Ideado por mi amigo Miquel Barceló, profesor de la Facultad de Informática de Barcelona, el factor multiplicador de una tecnología mide en cuantas veces supera una nueva tecnología a su alternativa previa. Por ejemplo transportar mercancías en un camioneta respecto a cargarlas en un burro mejora la capacidad de carga en 100 veces más (de 30 kg a 3.000 kg) y mejora la velocidad media en 10 veces más (de 8 km/h a 80km/h , si el tránsito lo permite claro). Combinada la mejora de capacidad de carga y la velocidad podemos obtener un factor multiplicador de 1000. 
El análisis a lo largo de la historia del factor multiplicador de las nuevas tecnologías (así como el conocimiento y ciencia que las hacen posibles), nos podría proporcionar una visión alternativa de la historia distinta a la que nos suelen contar, donde la técnica y la ciencia suelen ocupar un segundo lugar. 
Por ejemplo, sabemos durante el siglo XX cual ha sido el potencial transformador de la tecnología del automóvil y como ha afectado al comercio, la industria, la sociedad, la política, la guerra… Todos los aspectos de la vida humana se vieron transformados en pocas décadas por esta tecnología cuyo factor multiplicador estimamos en 1000.
!Solo 1000! 
A los 13 años tuve un Sinclair ZX-81 de segunda mano, un microordenador con un procesador de 1 MHz, tenia un KB de memoria RAM y almacenaba información en cintas de casete que cargaba desde un Walkman. El procesador que hacia un millón de operaciones aritméticas por segundo(aproximadamente). Un factor multiplicador de un 1.000.000!  Si combinamos mi viejo ZX-81 con un módem de la época que permitía transferir por la línea telefónica datos a 1200 Bits por segundo, o sea que en 6 segundos transfería un KiloByte, aproximadamente una página de texto, una carta, que por correo – el que funciona con sellos y buzones amarillos, ¿los recuerdan? – con suerte tardaría 3 días: 43.200 veces más. Combinado el 1.000.000 del ZX-81 con el 43.000 del módem tenemos un 4,3 con 9 ceros detrás de factor multiplicador. 4.300.000.000
¿De cuanto era el factor multiplicador del automóvil? ¿mil? !Já! 
Usando este factor multiplicador de las tecnologías de la información y la comunicación (TIC) como oráculo podríamos prever un gran efecto transformador. Pero aun así no podríamos prever la que se nos viene encima en términos de cambio tecnológico y su impacto en nuestras vidas presentes y futuro inmediato.  
Escribo este articulo 28 años más tarde en un “viejo” Macbook Air  que comparado con el ZX-81 es 10.000 veces más rápido, con 4.000.000 más memoria y dispone de una conexión a internet 20.000 veces más rápida. ¿Alguien se anima a calcular el factor multiplicador?  
Es imposible. 
El 1965 Gordon E Moore formuló en un celebre articulo una observación sobre la mejora continuada de la capacidad de computación: se dobla cada 24 meses. Esta observación que ya se considera una ley : La ley de Moore, se viene cumpliendo desde entonces. Cada vez que parecía que el avance tecnológico languidecía y la capacidad de los procesadores – tamaño de las memorias, discos, velocidad de las conexiones – un nuevo descubrimiento ha mantenido inexorable el cumplimiento de esta ley. 
Las tecnologías de la información y la comunicación no solo tienen actualmente un factor multiplicador ya absurdo, sino que este factor se duplica y ira duplicando  cada dos años en una progresión exponencial. Una de esas que llegan tarde o temprano valores infinitos.
¿Que sucede cuando se introduce en – literalmente – todas las facetas de la vida humana una tecnología de factor multiplicador infinito?

jueves, octubre 13, 2016

Invocar un script php via POST desde PHP y no morir en el intento

Hacer algo tan sencillo como invocar un script PHP vía POST, algo que desde HTML es tan fácil cómo :


Se vuelve sorprendentemente complicado cuando en vez de invocar el ws.php usamos otro script para invocar, por ejemplo porqué estamos haciendo un plugin para wordpress.

Después de pasar unas cuantas horas debugando y paseando por los foros de stackoverflow he encontrado la solución, que consiste en ajustar bien las cabeceras http, y aquí la dejo para quien pueda ser útil en forma de función.

function ws_envia($data, $url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($ch, CURLOPT_HTTPHEADER,
        array("X-HTTP-Method-Override:'POST'",
            'Content-Type:application/x-www-form-urlencoded',
            'Content-Length: ' . strlen(http_build_query($data))));
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);

    $response = curl_exec($ch);
}

martes, septiembre 13, 2016

Leer ficheros de Excel en formato CSV en PHP.

En teoría parsear un fichero separado por comas, como los que genera EXCEL, es fácil. Al final incluyo un poco de código de ejemplo que puede servir cómo punto de partida. Pero el problema es EXCEL En el Mac Excel genera un tipo de fichero .csv donde  PHP  no reconoce los finales de lineas.
La solución es usar la opción de Excel "guardar como" -> "Valores separados por comas de Windows".
Después de perder un buen rato para darme cuenta he pensado que mejor lo cuento para si le es de útil a alguien.
De nada.

Ah, el código de ejemplo, lee un archivo .cvs, lo carga en un array bidimensional y hace una impresión de prueba. En un fichero cvs estándar generado en un Mac meterá todas las filas en la fila 0. Grr


$csvFile = file("testcerealsWIN.csv");
// print_r($csvFile); // para debug
$data    = array();
$i       = 0;
// linea por línea parseamos el CSV y lo metemos en un array bidimensional $data[][]
while ($i < sizeof($csvFile)) {
    $row      = str_getcsv($csvFile[$i]);
    $data[$i] = $row;
    $i++;
}
// mostramos el array para ver que está bien
$i = 0;
while ($i < sizeof($data)) {
    print_r("___ROW ___________");
    print_r($i);
    print_r("________________");
    print_r($data[$i]);
    $i++;
}
?>     


jueves, junio 02, 2016

Sobre la evolución del software en general, los LMS en particular y Moodle en concreto. (podcast/conferencia)

Hacia casi 4 años que no daba una charla en un evento Moodle, pero Sol Garcia me ha hecho cortar esta racha en el evento que organizaron en Valencia el pasado Mayo de 2016. No hubo streaming ni gravación del video, pero Ludo precavido vale por dos. Por lo que gravé mi ponencia usando el maravilloso Rode Smartlav+ conectado al iphone. Así pues os dejo con el audio de mi presentación, que he maquetado como un episodio 0 de un posible Podcast: Ludo por la mañana. Veremos si la idea me lleva a alguna parte. ( La música es de Ayreon, Day 6, del Álbum extraordinario: The Human Equation. El autor me da permiso para usarlo en el podcast, cosa que le agradezco mucho. ) Audio de la presentación