Thursday, January 10, 2013

Ver archivos HTML en GitHub

Con GitHub además de mantener tu código en un lugar seguro  y crear un ambiente colaborativo puedes usarlo para mostrar páginas HTML y hacer pruebas.

Para esto debes anteponer lo siguiente antes de la URL del archivo HTML en cuestión:

http://htmlpreview.github.com/?

ejemplo:

http://htmlpreview.github.com/?https://github.com/marimaf/CodeTests/blob/master/showHtml.html



Bookmark and Share

Friday, November 9, 2012

"Google Play no acepta archivos APK firmados con el certificado de depuración. Crea un certificado nuevo que sea válido durante al menos 50 años."

He tratado de subir mi primera aplicación de android al market Google Play y me apareció el siguiente error:

"Google Play no acepta archivos APK firmados con el certificado de depuración. Crea un certificado nuevo que sea válido durante al menos 50 años."

Qué es lo que ocurre? El APK debe ser firmado para que no se pueda modificar a menos que se tenga la llave privada con la que se generó la firma. Sin esta firma, los dispositivos Android no querrán instalar una aplicación.
En un principio, cuando se está desarrollando, la aplicación se firma con una llave de debug, que sirve para poder depurarlo y probar la aplicación en tu dispositivo mientras haces pruebas. Para publicarlo en el market, esta firma debe cambiar ya que la firma de debug no es aceptada.

Si utilizan Basic4Android, hay una forma muy sencilla para solucionar este problema. Solo sigan este tutorial.
Pero no es mi caso, yo uso Eclipse. En el sitio de android developers se puede encontrar información al respecto. Aquí lo hay que hacer según android developers:



  • Obtain a suitable private key
  • Compile the application in release mode
  • Sign your application with your private key
  • Align the final APK package


  • Si están haciendo una aplicación nativa pueden utilizar el wizard de exportar de Eclipse el cual realiza todos estos pasos.

    Yo estoy trabajando en una aplicación multi-plataforma utilizando Rhomobile por lo que requiere seguir los pasos descritos, pero es muy fácil:

    Generar una clave privada, se debe usar un keytool. En Windows abrir consola y utilizar el siguiente comando:


    $ keytool -genkey -v -keystore nombre-de-mi-llave.keystore
    -alias nombre_alias -keyalg RSA -keysize 2048 -validity 10000

    Donde deben reemplazar "nombre-de-mi-llave" y "nombre_alias" por el que gusten. Cuando corran ese comando se les pedirá ciertos datos, incluida una clave la cual deben guardar muy bien ya que si alguien tiene acceso a ella y a la llave pueden manipular su aplicación.
    Si quieren más detalles sobre el comando lean aquí

    Una vez generada la llave. Abran su proyecto y vayan al build.yml y bajo android agreguen lo siguiente bajo production, de tal manera que se vea así:


    android:
      android_title: 0
      version: 2.3.3
      emulator: rhomobile
      production:
        certificate: E:/nombre-de-mi-llave
        password: "clave_de_la_llave"
        alias: "nombre_alias"


    ahora abran la consola de nuevo, vayan a la carpeta de su proyecto y corran el comando:

    rake device:android:production

    de manera que compile nuevamente el proyecto, pero esta vez utilizando la llave indicada para firmar el apk. Cuando corran esto se les pedirá que completen nuevamente los campos que fueron solicitados cuando generaron la llave. Terminado de correr el comando podrán navegar a la carpeta de su aplicación/bin/target y encontrarán el APK firmado y listo para ser subido a Google Play :)

    Bookmark and Share

    Monday, October 29, 2012

    Barra de búsqueda simple - Ruby on Rails


    Es muy sencillo agregar una barra de búsqueda en una aplicación de rails. Aquí un pequeño tutorial:

    1. Crear un form para enviar la solicitud con la palabra a buscar

    Por ejemplo en su index.html.erb coloquen el siguiente código para obtener un formulario como el de la imagen arriba:


    <%= form_tag({:controller => "products", :action => "index"}, :method => :get) do %>
    
        <%= text_field_tag "searchbox", params[:searchbox] %>
    
        <%= submit_tag "Buscar", :name => nil %>
    
    <% end %>

    Recuerden editar el controlador y la acción a la que ustedes necesitan, éstas debe corresponder a la misma que renderea el index.html.erb donde están colocando el código.

    2. Agregar código que incorpore la búsqueda:

    En el archivo del modelo, en este caso sería product.rb, colocar el siguiente código para filtrar los resultados según los parámetros ingresados en la búsqueda.


    def self.search(search)
    
     if search 
    
        where('title LIKE ?', "%#{search}%")
    
      else
    
        scoped
    
      end
    
    end

    En este caso deseo que mi búsqueda filtre de acuerdo al campo "title", ustedes deben editar eso de acuerdo a sus necesidades.

    3. Por ultimo, realizar la búsqueda/filtrado en el controlador para entregar los resultados a la vista index.html.erb, luego en products_controller.erb


    def index
    
      @products = Product.search(params[:searchbox])
    
        respond_to do |format|
    
          format.html # index.html.erb
    
        end
    
      end
    
    
    y listo, los resultados ahora serán filtrados cuando hagan clic en el botón buscar.

    Aquí algunos libros que les pueden ayudar a programar en Rails:

    Bookmark and Share

    Sunday, October 21, 2012

    Utilizar una Roku en Chile

    Como comenté en el post anterior, la Roku es una cajita muy poderosa a bajo precio, pero tiene la desventaja que está hecha para ser utilizada en Estados Unidos. Pero como (casi) todo, tiene una forma de funciona fuera de ese país.

    En pocas palabras, esto es lo que se debe hacer:

    1. Engañar la IP de la Roku
    2. Crear una cuenta de Roku
    3. Conseguir/comprar contenido para ver a través de la Roku.
    Detalles de los pasos a seguir:

    1. Para engañar la IP de la Roku hay que contratar un servicio que lo haga. Existen varios sistemas pagados y otros gratis. Hay que te tener cuidado cual contratar ya que podrían ver todos los datos que transfieres por internet incluyendo claves. En particular, el que más me convenció a mi fue Hide My Ass (https://hidemyass.com/vpn/). Con planes que van desde $11.52usd mensuales a $78.66usd anuales ($6.55usd mensual). Al contratar HMA, bajas un programita y con las credenciales que te pasan puedes engañar la IP de donde te conectas, le indicas un lugar de donde te deseas conectar y listo. El único problema es que ese programita sirve para Windows, Mac o Linux, pero qué hacer con la Roku? Para esto la nueva IP debe venir desde el router de donde se conecta la Roku.  HMA tiene sugerencias para lograrlo, desde sugerencias de routers hasta tutoriales para modificar el firmware de éstos y conectarse al VPN.
    Personalmente, compré un router adicional y traté de flashearlo (instalarle el nuevo firmware DD-WRT que es el que se necesita), pero no tuve mucho éxito. Terminé encontrando un sitio, FlashRouters, en estados unidos que te los venden flasheados y listos para conectarlos con HMA, sólo hay que ingresar las credenciales. Incluso si quieres, les puedes dar las credenciales a ellos y te lo dejan listo llegar y enchufar. 
    Si tienen internet movistar y están conectados a través de PPPoE, deben tener 2 routers. El router flasheado lo deben conectar al segundo router (un router que probablemente ya usaban y tenían en su casa) y ese router va conectado al modem. Si conectan el router flasheado directamente al modem no podrán tener internet, ya que no pueden conectarse al VPN y al PPPoE al mismo tiempo.

    2. Para poder habilitar los canales de interés en la Roku: Amazon, Netflix, Crackle, etc. Es necesario tener una tarjeta de crédito americana. Pero qué pasa si no tienen? Se puede arreglar. Hablen con el servicio al cliente de Roku, conectados a través de la VPN de estados unidos (cuando hablé con ellos revisaron la IP de donde estaba "comunicándome").  Por lo que al servicio al cliente les deben decir que no cuentan con una tarjeta americana, pero se encuentran en estado unidos y desean utilizar la Roku. Para ese caso ellos habilitarán una cuenta sin tarjeta y te advertirán que no podrás comprar canales ni cosas on-demand. Les dices que estás al tanto y listo. Los canales mencionados anteriormente no necesitan ser comprados (Ver punto 3).


    3. Existe contenido para ver en la Roku que requiere que tengan una suscripción de antemano.

    • Amazon Prime: Pagando $79usd anuales obtienes streaming ilimitado de ciertas películas habilitadas por Amazon. La biblioteca de películas habilitadas no es menor, pero de todas formas si quieren ver lo estrenos también lo pueden pagando ya que será cobrada la tarjeta de crédito que tengan en Amazon y no en Roku.
    • Netflix: Si tienen el Netflix chileno contratado con eso basta. Al detectar la IP americana accederán a la biblioteca de películas de Estados Unidos (mucho más surtida que la Chilena)
    • Crackle: Acceso a películas gratis.
    • Hulu: Ideal para ver series, pero sólo podrán tener acceso a este canal si contratan Hulu Plus, el cual requiere una tarjeta de crédito americana para suscribirse. Se pueden comprar tarjetas pre pagadas en estados unidos.


    Bookmark and Share

    Tuesday, October 9, 2012

    Roku - televisión por internet


    La roku es una pequeña cajita que sirve para ver televisión por internet. La gracia es que la conectes a tu pantalla para ver canales de streaming, y se conecta a internet de manera inalámbrica, como lo hace apple TV, pero significativamente más económico.

    Personalmente me compré el Roku 2 XD Streaming Player 1080p, pero existen varios modelos de los cuales puedes elegir según tu bolsillo y preferencias. El más económico comienza en 50USD en amazon.

    Mi roku 2 incluye un control remoto con botones de acceso directo a Netflix, Pandora y Crackle. Es bastante agradable. Me gusta que utilice poco espacio y es bastante rápido como software para moverse entre canales. Además de los canales ya mencionados, es posible conectarse a Amazon Prime, Hulu Plus y muchos más.

    Otra de las características de la Roku 2 XD es que puede mostrar películas en HD 1080p, a diferencia de la Roku HD.

    La letra chica de la cajita:

    *Para funcionar necesita estar en estados unidos
    *Tener una tarjeta de crédito de estados unidos (para poder comprar películas que no se puedan ver gratis)

    Pero no se decepcionen, existe una solución para estos requisitos. Les comentaré como arreglarlo más adelante.

    Bookmark and Share

    Wednesday, September 12, 2012

    Sliding Drawer en Android

    Sliding Drawer o cajón deslizable (?)

    Lo que hace el Sliding Drawer es esconder contenido de un usuario dejando sólo una lengüeta visible, así el usuario puede deslizar la lengüeta para ver el contenido.

    Como bien dice en http://developer.android.com este "cajón" se puede utilizar de manera vertical u horizontal. El xml está compuesto por dos hijos, uno referente al la lengüeta y otro al contenido de éste.

    La plantilla que http://developer.android.com utiliza un imageView para la lengüeta, yo utilicé en este caso un botón, de manera de no tener que lidiar con imagenes. Pero lo pueden cambiar a un imageView si desean. A su vez, cambié el tipo del contenido de GridView a un simple TextView para agregar texto.

    Primero, necesitan uno (o dos) templates para el fondo de la lengüeta y del contenido del cajón. En este caso yo use una plantilla de un fondo azul el cual debe colocarse en la carpeta drawable en un archivo llamado blue.xml por ejemplo.

    El contenido de éste archivo es el siguiente:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" >
            <shape>
                <solid
                    android:color="#449def" />
                <stroke
                    android:width="1dp"
                    android:color="#2f6699" />
                <corners
                    android:radius="3dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
        <item>
            <shape>
                <gradient
                    android:startColor="#449def"
                    android:endColor="#2f6699"
                    android:angle="270" />
                <stroke
                    android:width="1dp"
                    android:color="#2f6699" />
                <corners
                    android:radius="4dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
    </selector>
    La lengüeta es lo que tiene el texto "ayuda". Los otros botones que ven son del  proyecto en el que estoy trabajando, no tienen nada que ver con el sliding drawer

    Luego el xml del sliding drawer lo deben colocar dentro de un relativeLayout (o un FrameLayout) (en el xml del layout donde quieren que se vea)

    Así quedó mi sliding drawer:

     <SlidingDrawer
         android:id="@+id/drawer"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:handle="@+id/handle"
         android:content="@+id/content">
         <Button
             android:id="@id/handle"
             android:layout_width="88dip"
             android:layout_height="44dip"
             android:background="@drawable/blue"
             android:text="ayuda"
             android:textColor="#ffffff"/>
    
         <TextView
             android:id="@id/content"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:background="@drawable/blue"
             android:textColor="#ffffff"
             android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut condimentum commodo purus sit amet cursus. Pellentesque euismod nulla et mauris porttitor sit amet consectetur quam euismod. Proin augue ligula, commodo sit amet pellentesque at, bibendum in augue. Vestibulum a metus sit amet lacus porta molestie. Curabitur porta laoreet ipsum quis tincidunt. Nulla facilisi. Quisque dictum mollis ante id blandit. Nam in elit sit amet eros varius posuere id id dui. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis et nibh pretium nisl semper porta elementum sed justo. Sed et enim arcu. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ac nunc eu est adipiscing condimentum id nec nisl. Proin massa erat, ultrices at ullamcorper in, consectetur nec tortor. Sed sed erat ante. Morbi eu nunc mauris." />
         </SlidingDrawer>
    
    

    Bookmark and Share

    Friday, September 7, 2012

    Verificar que una URL es de una imagen en Java/Android

    Si es necesario verificar que una URL es una enlace a una image, bastan 3 líneas de código para hacerlo:


    URLConnection connection = new URL("http://foo.bar/w23afv").openConnection();
    String contentType = connection.getHeaderField("Content-Type");
    boolean image = contentType.startsWith("image/");


    Lo que hace es ver si el encabezado del contenido de la página donde te lleva la url comienza con image/.

    Solución sacada de stackoverflow

    Bookmark and Share
    Related Posts Plugin for WordPress, Blogger...