jQuery injection en HTML con Objective-C

Posted in Hints, Objective-C with tags , , , , on March 11, 2012 by anizzomc

No siempre es posible utilizar el parser de XML provisto por el framework para archivos HTML. El HTML, que en teoría es un XML, puede estar bien formado, o puede contener construcciones sin mucho sentido, que los browsers han cometido el error de interpretar, en lugar de castigar al programador por sacrilego. Pero por suerte, al menos JavaScript sigue funcionando con HTMLs mal formados.

La clase UIWebView para visualizar páginas HTML permite cargar una página a partir de un string y además permite ejecutar código JavaScript con un método ejecutado directamente sobre el objeto. Así que la estrategia a utilizar es, cargar el string que representa la página. Lo vamos a alterar para injectar jQuery.

El tag HEAD puede estar en cualquier lado, y puede haber espacios de por medio, así que lo más seguro
sería reemplazar el tag, por el tag más el código para cargar jQuery, luego cargamos el WebView con el html modificado. (en este punto podríamos remover las imágenes para que no se carguen y acelerar la carga)

 NSURL *url = [[NSURL alloc] initWithString: @"yourURL"];
 NSUIWebView *webView = [[NSUIWebView alloc] init];
 WebDelegate *webDelegate = [[WebDelegate alloc] init];
/*Cargamos el string desde internet.*/
 NSMutableString *html = [[NSMutableString alloc] initWithContentsOfURL:url];
//Modificamos el html ha nuestro gusto. Sería mejor una copia local de jQuery.
[html replaceOccurrencesOfString:@"<head>" withString:@"<head><script src=\"http://code.jquery.com/jquery-latest.js\" type=\"text/javascript\"></script>" options:NSCaseInsensitiveSearch range:NSMakeRange(0, 100)];
 [webView setDelegate:webDelegate];	
 [webView loadHTMLString:html baseURL:url];

Luego, modificamos el código del método delegado que es ejecutado cuando termina de cargar la página.

- (void) webViewDidFinishLoad:(UIWebView *)webView {
   NSString *ret = [webView stringByEvaluatingJavaScriptFromString:@"$('title').text()"];
   NSLog(@"%@", ret);
}

Y así podemos utilizar para jQuery para parsear una página, devolver un formato que sea más facil de parsear del lado de Objective-C.

Recordar que el script solo puede usar hasta 10 Mbs de memoria y solo puede ejecutar durante 10 segundos. Si hay errores en el código JavaScript, no se puede ver claramente, así que recomiendo probarlo directamente en un browser y luego utilizarlo en el WebView.

Físicos Modernos

Posted in Uncategorized on December 11, 2011 by anizzomc

Modern Physics fathers

Physics

La foto más épica de la física moderna.

Cómo ejecutar Maven desde consola

Posted in Hints, Java, Maven with tags , , on October 31, 2011 by anizzomc

Maven es un framework muy poderoso. Su función principal es el manejo de dependencias y de arquetipos. Así es muy facil armar un proyecto rápidamente con cualquier estructura que algún framework necesite. Además tiene la funcionalidad de luego armar jars, wars, etc listos para ejecutarlos.

Para ejecutar un proyecto Maven sin empaquetarlo es molesto, ya que hay que llamar a Maven, indicar el goal exec, decirle que busque la clase con el método main y por último pasar los parámetros. Hay que escribir al menos 90 caracteres. Algo un poco tedioso para escribir por consola.

Imaginense que tenemos la siguiente clase en Java

public class MavenExecute {
       public static void main(String[] args) {
             for(String s:args) System.out.println(s);
       }
}

$> mvn exec:java -Dexec.mainClass="ar.com.scripthis.tests.MavenExecute" -Dexec.args="hello world" 

Más sencillo es armar un pequeño archivo de script para escribir todo esto, y además… que nos pase los parámetros!

La solución al problema es armar el siguiente script

#!/bin/bash
mvn exec:java -Dexec.mainClass="ar.com.scripthis.tests.mavenExecute" -Dexec.args="$@"

Y luego ejecutar nuestra app de la siguiente forma

$> run.sh hello world

Y seamos felices!

Bloques de código en WordPress.com

Posted in Hints with tags on June 21, 2011 by anizzomc

Cómo es sabido, WordPress.com no permite la instalación de Plug-ins de terceros, ya que estos presentan potenciales vulnerabilidades de seguridad.

Entonces, es imposible instalar un plug-in para escribir lineas de código y compartir las ideas. Así que mandé un mail para pedir que me instalen el plug-in. Me redireccionaron a una página que “intenta” explicar como utilizar los bloques de código, sin embargo, esto lo logré probando por mi cuenta.

Resulta que ya existe un plug-in activo funcionando….

El plug-in está bastante bueno, se basa en JavaScript, busca los tags de código y los reemplaza por su “equivalente” en código. De esta forma, no se agrega código al sistema de wordpress.

El siguiente bloque:

     public class Main {
          public static void main(String[] args){
                for (String s: args)
                       System.out.println(s);
          }
     }

puede ser escrito:

[code language="java"]
     public class Main {
          public static void main(String[] args){
                for (String s: args)
                       System.out.println(s);
          }
     }
[/code]

Además, estos bloques pueden recibir argumentos, cómo el bloque de código anterior, donde se le especifica que lenguaje se está mostrando. Un argumento muy útil es el highlight, que indica que lineas resaltar. Se pueden resaltar varias lineas, separadas por comas.

Por ejemplo:

     while (value <= 10) {  
         value++;
         //Esta linea resaltada
     }

Puede ser generado:
[code language="c" highlight="3"]
     while (value <= 10) {
         value++;
         //Esta linea resaltada
     }
[/code]

El resto de los argumentos los pueden ver en este link: http://en.support.wordpress.com/code/posting-source-code/

Como funciones interesantes, existe la posibilidad de copiar al ver el código fuente, copiar al portapapeles y enviar a imprimir.

Lo que sería interesante por parte de WordPress.com es mostrar la documentación necesaria directamente en el sitio para no tener que estar pidiendo soporte y marearse por la imposibilidad de instalar adicionales.

Damocles64

Posted in Damocles on March 31, 2011 by anizzomc

Damocles fue un trabajo práctico para la materia “Arquitecturas de las Computadoras” que tenía como objectivo enseñar la arquitectura básica de una computadora i386 y como utilizar sus funcionalidades construyendo un mini kernel que era capaz de leer el teclado y ejecutar comandos. El mismo trabajo práctico se utilizó como base para la materia “Sistemas Operativos”, con el cual administramos memoria y procesos (hilos de ejecución en realidad).

Desde que soy ayudante de la materia “Arquitectura de las Computadoras”, estuvimos investigando con el titula de cátedra, Santiago Válles, cómo funciona una arquitectura moderna amd64.

Primero investigamos como era la ABI para el pasaje de parámetros para esa arquitectura y luego como administrar los recursos de la misma con un ejemplo. Así nació Damocles64, el objetivo es construir un mini kernel capaz de administrar la memoria (en amd64 es necesario activar paginación), manejar interrupciones y ser capaz ejecutar comandos.

Está diseñado para ser levantado por el bootloader Pure64 y utilizar su mapa de memoria, aunque futuras implementación serán independientes del bootloader utilizado.

Actualmente tiene implementado un pequeño driver de video y un manejo de memoria sencillo capaz de mapear 1GB de zonas altas de memoria (en 65 GB adelante) a 2MB en zonas bajas y comparar como esta página se modifica.

Está hosteado en un repositorio de GoogleCode y es de fines puramente educativos y no posee garantía de ningún tipo.

A medida que se vallan agregando actualizaciones voy a ir posteandolas en el blog.

Nuevo Intento

Posted in Scripthis! Blog on March 12, 2011 by anizzomc

Me rindo, ya hice bastantes intentos de tener mi blog para publicar ideas y desarrollos. Siempre intentando mantener el control del blog. Pasé por Dattatec que de un día para otro me duplicó el precio del hosting y después probé con un hosting gratis que me permitía apuntar mi dominio al hosting, que de un día para otro, por temas de seguridad decidió desabilitarmelo.

Me rindo, hoy voy con WordPress, y a scripthis.com.ar lo apuntaré acá de alguna forma.

Proximamente, veremos comentarios sobre lo que estoy haciendo con 64 bits.

Saludos!

Follow

Get every new post delivered to your Inbox.