Blog de Daniel Zegarra Rotating Header Image

Tutoriales

Mi primer app para Android

No diré que fue difícil porque la verdad no lo fue. A pesar de que llevo con un dispositivo Android por varios meses ya no he tenido tiempo ni interés suficiente para intentar crear una aplicación por mi mismo. El catalogo de aplicaciones para Android es de por si tan extenso que no había tenido la necesidad de crear algo para el.

Mi intención era compilar una aplicación muy simple en corto tiempo y con el menor esfuerzo posible y para conseguirlo utilice la ayuda del proyecto App Inventor de Google.

App Inventor es una herramienta que te permite crear aplicaciones simples para Android de forma rapida y sin tener que aprender Java. El diseno de la interfaz se crea desde el browser y la logica utilizando un ejecutable java (es necesario tener instalado Java SDK).

Diseño de la aplicación

Diseño de la aplicación

Creando la lógica.

Creando la lógica

Para mi primer experimento elegí crear un catalogo electrónico de cuentas contables, en clase de contabilidad nos han pedido conseguir un listado de las cuentas contables y, ademas de la hoja de excel con los mas de mil cuentas existentes, no he podido encontrar un lugar donde vendan este listado en formato físico. Poder consultar la identidad de una cuenta a partir de su código sera de utilidad en clase.

  1. Instalar el SDK de App Inventor.
    El instalador copia archivos en la pc que son necesarios para compilar la aplicación y probarla en un emulador en el mismo teléfono.
  2. Utilizar el diseñador desde el browser y armar la lógica usado el complemento java.
  3. Probar la aplicación utilizando el emulador que viene con el SDK o en un dispositivo Android compatible.
  4. Compilar la aplicación y copiarla al teléfono. El archivo compilado ya se encuentra con la extensión apk. Por lo tanto, es tan simple como copiarla al teléfono y ejecutarla desde ahí.

Ahora, publicar el instalador en el market no es tan sencillo. Para empezar, el instalador generado no esta preparado para la tienda de Android porque no esta firmado digitalmente ni incluye los datos mínimos requeridos para ser compartido con otros usuarios. App Inventor es un proyecto que aun se encuentra en fase de pruebas y no esta pensado para crear aplicaciones que sean utilizadas en producción, sin embargo hay una forma de modificar el instalador para agregar las características restantes y que este sea aceptado por la tienda.

Los pasos para conseguirlo se pueden encontrar aquí y es necesario que ya tengas el instalador apk generado.

El resultado del experimento puedes descargarlo siguiendo el siguiente enlace:

Descargar AndroidApp: Plan Contable 2011 (Perú)

No he tenido tiempo que prepararlo para la tienda. Por el momento, solo puede instalarse copiandolo manualmente al dispositivo.

Información sobre la aplicación

Emulador de dispositivo

Emulador de dispositivo

Muestra información de la cuenta contable asociada al código ingresado. Ademas muestra la naturaleza del registro y lo que representa. La información la halla de una tabla de google docs compartida. Fue la manera mas rápida que encontré de realizar una búsqueda en una tabla. Como la tabla se encuentra en mi cuenta de google docs requiere de otra cuenta de google valida para tener acceso a la tabla de mi cuenta, sin importar que la tabla de datos sea publica. Por lo tanto te pedirá acceso a tu cuenta de google al realizar la primera consulta. Esto puede parecer sospechoso :P . Repito, esto se debe a que los datos de este ejemplo se encuentran almacenados en una cuenta de google docs. Lo ideal seria que se almacenen en la aplicación (ya que esta data suele no cambiar en años).

Enhanced by Zemanta

Depurar Code Igniter con Eclipse y Zend Debugger

Sin hacer cambios a Code Igniter no se puede. Aun si enable_query_strings esta definido en FALSE Code Igniter leera las variables que PDT pasa usando GET para que Zend Debugger conecte correctamente a la consola. Es una tonteria que Eclipse no nos permita NO pasar estas variables via GET. La solucion mas rapida pero no permanente es abrir el sitio que deseamos depurar en un browser aparte luego de tener a Eclipse esperando la conexion del depurador, pero es una salida molesta.

Lo que hice fue decirle a Code Igniter que ignore ciertas variables entregadas via GET aprovechando los Hooks para no tocar el codigo base de CI.

Para usar este hook sigue estos pasos:

  1. Descarga este archivo y guardalo en tu escritorio.
  2. Descomprime el contenido del archivo en el directorio application de tu instalacion de CI. Si ya tienes registrado algun hook entonces no reemplaces el archivo config/hooks.php. Agrega el contenido del archivo descargado tu archivo hooks.php actual.
  3. Asegurate que enable_hooks es igual a TRUE en el archivo config.php ubicado en CIroot/application/config/.

Luego de hacer esto, intenta depurar tu aplicacion. Deberia correr sin problemas y ya no mostrar el error de que no se encuentra el controlador.

Nota: La intencion de este articulo es solo compartir un archivo fuente para utilizar Zend Debugger con CI. Para informacion de la instalacion de Zend Debugger o su uso con Eclipse PDT  puedes… googlear.

Descargar ZendDebugger&CI Hook

Proxy Web sobre SSH (2da parte)

Parametros de configuracion avanzados de Firefox

Hace unos dias publique un minituto para usar una conexion ssh cualquiera para salir por ella a internet. Lo que no explique en ese post es que hacer cuando el proxy que nos bloquea el acceso libre a internet tambien funciona como un servidor DNS.

Advertencia: Yo supongo que vienes de leer el post Proxy Web sobre SSH. Si tienes dudas sobre algun paso lee este post anterior. No empieces a hacer cambios en tu maquina si no sabes lo que estas haciendo.

Si el computador que usamos utiliza el servidor proxy como servidor DNS entonces es probable que sigamos sin poder navegar libremente ya que si bien los paquetes de datos estan viajando a traves de nuestro tunel encriptado, la resolucion de nombres de dominio (lo que permite convertir www.google.com en 66.102.7.99) sigue realizandose como antes.

Para probar si tenemos salida a internet enganando al proxy podemos hacer lo siguiente:

  1. Buscate una pagina que no puedas entrar, por ejemplo: www.youtube.com o www.facebook.com.
    Usando el terminal de putty hazle un ping a esta direccion para obtener el IP resultante.

    ping www.youtube.com -c 1

    Haciendo un ping a www.google.com

    Nota: Utilizo el argumento -c 1 para realizar un solo intento. El comando ping de linux no tiene limite de intentos por defecto. Si no le pones un limite o lo detienes manualmente no parara hasta cerrarse la sesion.

  2. Apunta y escribe el IP en tu navegador y presiona <Enter>. Si se abre la pagina prohibida significa que solo necesitas usar tu tunel SSH para resolver nombres de dominio. Sigue leyendo para aprender como hacerlo.

Resolver nombres de dominio usando un servidor remoto

Esto es un poco complicado puesto que, como es de esperarse, el servidor proxy este acompanado a su vez de un cortafuegos y este no permite hacer solicitudes de DNS hacia fuera. Y si no utilizas un proxy transparente (osea que debes configurar manualmente la direccion del proxy en Opciones de Internet) Windows no te permitira configurar un proxy a travez de otro proxy.

La solucion mas simple es instalar y usar Firefox.

Mozilla Firefox tiene una opcion que te permite resolver DNSs a travez del proxy que este configurado. Para actvarla sigue estos pasos:

  1. Escribe about:config en la barra de direcciones y presiona <Enter>.
  2. Veras una advertencia de Firefox informandote que puedes joder el browser si te pones a jugar en esta area. Si te riges al tuto no pasara nada, solo no toques lo que no entiendas. Presiona en el unico boton de la advertencia y a continuacion el editor de parametros.
  3. Escribe network.proxy.socks_remote_dns en el filtro para ubicar el parametro que debemos modifcar.

    Parametros de configuracion avanzados de Firefox

    Parametros de configuracion avanzados de Firefox

  4. Como se trata de un parametro de tipo booleano, has doble clic sobre el para alternar entre TRUE o FALSE. Por defecto es FALSE y por lo tanto resuelve nombres usando el gateway configurado en Windows. Si es TRUE, enviara toda peticion de resolucion de nombres por el proxy configurado.

Esta configuracion solo afectara a Firefox. Todas las demas aplicaciones seguiran resolviendo nombres de forma local.

Si deseas restaurar este cambio, realiza los mismos pasos y devuelve el estado FALSE al parametro para dejarlo como estaba al inicio.

Proxy Web sobre SSH

Usando dreamhost.com como proxy

Y bien, volviendo a los temas originales del blog esta vez explicare como usar como un proxy web cualquier servidor al que tengamos acceso via ssh.

Las conexiones ssh son tuneles entre dos computadores (cliente y servidor) que permiten una comunicacion segura entre estas. Yo lo utilizo para configurar remotamente servidores linux y para transferir archivos al servidor de hosting que aloja este blog. Pero el potencial de ssh va mas alla. Lo que vamos a intentar ahora es usar este canal para salir a internet.

Esto es util en los siguientes casos:

  • Te encuentras en una red detras de un proxy y no te deja entrar a… facebook, youtube, etc.
  • Estas conectado a una red wi-fi sin proteccion y quieres proteger tus datos (con ssh todo va encryptado).
  • Deseas tener acceso a contenido que no se encuentra disponible en tu region (pero si en la region donde se encuentra tu servidor ssh).

Para empezar, lo que se necesitas para este experimento es:

  • Un equipo corriendo un servidor ssh que se encuentre en un lugar accesible ( Puede encontrarse en tu misma red o contar con un IP publico para tener acceso a el desde cualquier parte).
  • Tener instalado Putty, si usas Windows o tu cliente ssh si usas Linux.

Nota: Yo tengo un hosting contratado con Dreamhost que me da acceso a mi servidor compartido Linux via ssh. Utilizare este servidor como ejemplo.

En Windows

Ejecutas Putty e ingresas la direccion de tu servidor en el campo Host Name (or IP Address). Asegurate que connection type tenga marcado SSH.

Pantalla inicial de Putty

Pantalla inicial de Putty

Esta primera pantalla es basica. Con llenar esto es suficiente para iniciar la conexion con el servidor pero para lograr lo que queremos hace falta algo mas. En el panel izquierdo ve a Connection > SSH > Tunnels.

En el grupo de campos llamado Add new forwarded port ingresa 8080 en el campo Source port y elije Dynamic de entre los botones de opcion para que quede tal como se ve en la siguiente imagen.

Configurando el nuevo tunel

Configurando el nuevo tunel

Una vez hecho esto dale en el boton Add. Esto ingresara la configuracion dada a la lista de tuneles que deben crearse al conectarse con el servidor. Veras un nuevo elemento con el nombre D8080

Con ayuda del panel izquierdo regresa a la pantalla inicial de Putty (Session) y dale un clic en el boton Open para empezar la conexion con el servidor. Luego de ingresar el nombre de usuario y clave y una vez que el servidor confirme que los datos son correctos Putty redireccionara todos los paquete enviados al puerto 8080 local hacia el servidor.

En Linux

Pues es mas simple. Tan solo corres el siguiente comando:

ssh -D 8080 username@servidor_ssh

Donde el numero seguido de -D es el numero de puerto que se quiere crear, username un nombre de usuario valido y servidor_ssh es la direccion del servidor. Presionas <enter> e ingresas la clave para completar la autenticacion.

Configurar el proxy en el navegador

Yo usare Firefox pero tu puedes usar cualquiera. Te vas al menu Herramientas > Opciones > Avanzado > Red > Conexion > Configuracion y dejas los campos tal como vez en la imagen siguiente.

Configurando un proxy Socket en Firefox

Configurando un proxy Socket en Firefox

Guardas los cambios y firefox saldra a internet por el tunel con tu servidor remoto.

Hacemos la prueba?

Sin el proxy (saliendo a internet con trafafonica)

Salida normal a internet, directamente a traves del router

Salida normal a internet, directamente a traves del router

Y este es el resultado saliendo a traves de xxx.dreamhost.com.

Usando dreamhost.com como proxy

Usando dreamhost.com como proxy

Notas

  • Este proceso redireccionara todo el trafico del browser por este tunel la resolucion de nombre de dominio las seguira haciendo por la via habitual. Si estas detras de un proxy que te bloquea el acceso por el nombre de dominio que utilices necesitas activar la opcion set network.proxy.socks_remote_dns de firefox entrando a about:config para resolver los nombres por el mismo tunel.
  • La version de Putty a la fecha de creacion de este post es la 0.60.

Usando Flex 4 SDK sobre Flex Builder 3

Me descargue el trial de Flash Builder y llevo algunos dias trabajando con el, aprovechando las mejoras. Pero cuando el tiempo de prueba se acabe tendre que volver a Flex Builder y necesito poder continuar con los proyectos que ya tenia creados.

La gran versatilidad es un punto a favor de Eclipse, el IDE elegido por Adobe para Flex Builder y Flash Builder. Eclipse te permite tener varios compiladores y elegir con cual compilar cada proyecto.

Instrucciones para instalar Flex SDK4 en Flex Builder 3

  1. Descargar el .zip con el SDK 4 de Flex desde Adobe Open Source.

    Contenido del SDK de Flex 4

    Contenido del SDK de Flex 4

  2. Crea una carpeta con el nombre 4.0 en el directorio sdks ubicado en la raiz de tu instalacion de Adobe Flex Builder (usualmente C:\[Program Files]\Adobe\Flex Builder 3). Asi como la siguiente imagen:

    Los SDKs de Flex

    Los SDKs de Flex

  3. Extraer todo el contenido del .zip en el directorio que acabas de crear.
  4. Abres Flex Builder y te diriges al menu Window > Preferences > Flex > Installed Flex SDKs.

    SDKs instalados

    SDKs instalados

  5. Le das un clic al boton Add, para registrar un nuevo SDK, y completas el formulario.

    Registrando el nuevo SDK

    Registrando el nuevo SDK

Con esto ya puedes compilar con el nuevo SDK.

La nueva version de Flex trae algunos cambios en la plantilla mxml y si nos vamos a poner a compilar un proyecto ya existente tendremos errores. Entonces tenemos dos opciones: actualizar nuestro codigo para compilar sin problemas o activar la compatibilidad con Flex 3 y dejar nuestro codigo tal como esta. Si ya tienes un proyecto iniciado con Flex 3 te recomiento tan solo activar el modo de compatibilidad y aprovechar los nuevos metodos y clases que incluye este nuevo SDK sin tener que actualizar codigo.

Habilitando compatibilidad con Flex 3

  1. Abre un proyecto y ve a las propiedades del mismo (clic secundario > Properties) y elige la ficha Flex Compiler (ve el screenshot).

    Configurando el compilador en cada proyecto

    Configurando el compilador en cada proyecto

  2. Elije como SDK el que ultimo que has registrado y pega la siguiente linea como argumentos adicionales para el compilador:-compatibility-version=3.5 -theme=${flexlib}/themes/Halo/halo.swc

Veamos que hace cada argumento:

-compatibility-version=3.5

Activa la compatibilidad con la version 3.5 del SDK de Flex. Si quieres puedes reemplaza el 3.5 por 3.3 o simplemente 3. La diferencia (si es que hay alguna) sera insignificante.

-theme=${flexlib}/themes/Halo/halo.swc

Define a Halo como tema por defecto. Flex 4 usa Spark como tema predeterminado que en su forma silvestre es mas feo que el carajo. Me recuerda a las aplicaciones java de JCreator. Si deseas mantener el aspecto de tus componentes tal y como eran antes de usar este nuevo SDK entonces manten este argumento en tu proyecto.

Listo, eso es todo. Ya tienes el nuevo Flex 4.