miércoles, 14 de diciembre de 2011

Android - Crear Dialog Custom

He tenido la necesidad de crearme un dialog con una imagen, y tras consultar la ayuda de android para desarrolladores usando la web de http://developer.android.com, concretamente este articulo, que encontré buscando en google (sin demasiada dificultad), pero os lo pongo por aquí creo que algo mejor explicao.

Lo primero declaramos un entero en la actividad que lanze al dialog:
private static final int DIALOG_MINIJUEGOS_RESULT = 0;

creamos un .xml que será el layout del dialog, puede ser lo que queráis, en este caso es una imagen y un textview, pero podríais usar cualquier tipo de layout.
 <?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/llDialog"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:padding="10dp" >

    <ImageView
        android:id="@+id/ivDialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:paddingBottom="5dp" />

    <TextView
        android:id="@+id/tvDialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingBottom="5dp"
        android:textColor="#FFF" />

    <Button
        android:id="@+id/bDialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Cerrar" />
</LinearLayout>

Ahora hay 2 opciones, en la actividad que querais lanzar el dialog, sobreescribir el metodo:
onCreateDialog(int id, Bundle bundle)

o el método:
onCreateDialog(int id)

Al primero le puedes pasar un bundle con información extra para el dialog, en este caso se usa el primero, al que le pasamos la informacion a mostrar en el dialog haciendo uso del mencionado bundle.
@Override
protected Dialog onCreateDialog(int id, Bundle bundle) {
 Dialog dialog = null;
 switch (id) {
  case DIALOG_MINIJUEGOS_RESULT:
   // obtiene datos
   String textoDialog = bundle.getString("textoDialog");
   int idIvDialog = bundle.getInt("idIvDialog");
   // crea dialog
   dialog = new Dialog(this);
   dialog.setContentView(R.layout.dialogimg);
   dialog.setTitle("Resultado Minijuego");
   // pone elementos
   TextView tvDialog = (TextView) dialog.findViewById(R.id.tvDialog);
   tvDialog.setText(textoDialog);
   ImageView ivDialog = (ImageView) dialog.findViewById(R.id.ivDialog);
   ivDialog.setImageResource(idIvDialog);
   // ivDialog.setImageResource(R.drawable.bonoff);
   Button bDialog = (Button) dialog.findViewById(R.id.bDialog);
   bDialog.setOnClickListener(this);
   break;
  }
  return dialog;
 }

Por ultimo lanzais el dialog donde lo necesiteis usando:
//creamos el bundle
Bundle dialogBundle = new Bundle();

//le añadimos la informacion que queramos
dialogBundle.putString("textoDialog", textoDialog);
dialogBundle.putInt("idIvDialog", idIvDialog);

//lanzamos el dialog
showDialog(DIALOG_MINIJUEGOS_RESULT, dialogBundle);

si usarais la opción sin bundle sería igual pero kitando el segundo parámetro, y obviamente no es necesario crear el bundle ni nada de eso.

Por último para cerrar el dialog se usa el botón bDialog que hemos añadido al dialog, y en el onclick() de nuestra actividad metemos un case nuevo con ese botón de la siguiente forma:
case R.id.bDialog:

 dismissDialog(DIALOG_MINIJUEGOS_RESULT);
 break;


Usamos el metodo dismissDialog() pasandole el mismo en entero que le pasamos cuando lanzamos el dialog.
Y esto es todo para crear un dialog custom, se pueden hacer más cosas pero lo básico es esto, si solo necesitáis mostrar texto y algún botón, no teneis que meteros en este jaleo, simplemente consultad este articulo de android.

Un saludo!

domingo, 11 de diciembre de 2011

Battlefield 3 - Troleo de pk3s/noobs

Me han molao estos videos de troleo en el battlefield 3, y sobre todo la edición del video con los memes xD, cuando me traigan mi gráfica nueva probaré a hacer alguna de las locuras que hace el protagonista del video.

Podéis encontrar más vídeos de este tío en su canal, están bastante wapos xD




A destacar:

  • Cuando tira a un sniper de una torre empujandolo con un drone
  • Cuando hace el intento de matar gente con las claymore en el jeep y no le funciona

Y alguno más hay, vedlos que no tiene desperdicio!!

Un saludo!

viernes, 9 de diciembre de 2011

FIFA 12 - El beso!

Qué grande el nuevo motor físico del FIFA 12, sabía que tenía que darnos todavía buenos momentos, y que momentos!, a la espera de otros os dejo este apasionado beso xD


Impresionante como le coge del cuello y ni corto ni perezoso el portero se deja llevar y se lanza a sus labios, como dice un comentario del video: A better love story than Twilight

Un saludo!

sábado, 26 de noviembre de 2011

Series que molan: American Horror Story

Me llamó la atención esta serie desde el momento que vi el título, una historia de miedo en serie, jum, podría ser interesante, y por lo que llevo visto...mola!

Típica familia americana
La historia en realidad es la típica de familia con problemas que se muda a casa encantanda, y empiezan a pasar cosas raras no, lo siguiente. En el capítulo piloto había veces que decías, a ver, pero donde coño estoy, porque llevaba un ritmo que te perdías.

Analizando las cosas que me llamaron la atención (después del título), una de ellas son los créditos iniciales, como poco, inquietantes.


Otra de las cosas fue la aparición de Tami Taylor Connie Briton, en el papel de la madre de familia (otra vez), aunque se aleja bastante de la que vimos en Friday Night Lights, eso sí, sigue haciendo un buen papel.

¿Milf?
Más tarde lo que me moló fue la sirvienta, una calientapollas atrevida mujer que le pondrá las cosas dificiles a Ben Harmon (interpretado por Dylan McDermott), eso sí, cuando no esté en modo "vieja tuerta", (si la veis ya lo entenderéis xD)

-"Uy, se me ve el culo, jijiji"
Después, el hijo de la vecina interpretado por Tate Langdon, y la hija de la familia, interpretada por Taissa Farmiga, que tan los dos un pokillo turuurur.

Mira que normales parecemos
Y por supuesto tenía que avisaros de la espectacular aparición de Sylar! Zachary Quinto como nunca lo habías visto antes...

Antes cortaba cabezas... ahora calabazas
Y acabo con el mejor personaje de la serie, no dice una palabra pero el tío, mira que se lo curra... rubberman! Sin duda nos da algunos de los mejores momentos de la serie xDD

Te voy a dar con to lo negro...
Bueno y na más, pos eso, que si queréis ver algo nuevo, rollo thriller de miedo, con algún que otro susto y actuaciones bastante decentes, esta es vuestra serie! Aunque aviso, a veces es algo rayante xD

Un saludorrr

jueves, 24 de noviembre de 2011

HootSuite - Tus redes sociales en una sola

Siempre pensaba que bueno sería poder acceder a mis redes sociales desde una sola, para no tener que estar logueandote de un lado para otro, y por fin he descubierto algo que lo hace!
La idea es bastante simple, acceder desde un programa a todas tus cuentas de redes sociales, y eso es lo que hace hootsuite, por lo que he visto funciona como extensión de navegador, pudiendo acceder a a la extensión escribiendo simplemente hootsuite en la barra de búsqueda, desconozco si existe aplicación de escritorio

También dispone de aplicación para móvil (iPhone, Android y BlackBerry) pero es bastante más limitada, por lo menos la de iPhone que es la que he probado.

La aplicación

Pinta de la interfaz
Para empezar, como es lógico, tendrás que darle permisos a la aplicación para que acceda a tus redes sociales, permite enlazar todas las que veis en la imagen de abajo, la configuración es bastante sencilla, simplemente le das a conectar y se te va a la página de la red para que le des permiso, quizás es el paso más "duro" de dar, que 1 aplicación tenga tanto poder, pero por lo que lo llevo usado es muy útil!


El acceso a las distintas redes se hace en forma de pestañas, totalmente configurables, si bien por las que he usado, la de twitter es la que está más currada, otras como la de facebook solo permiten ver las noticias y poco más.

Si bien una funcionalidad que me ha molado bastante, es que puedes publicar un mensaje de forma simultanea en todas las redes sociales, sin más que usar el cuadro de texto superior y seleccionar la red social en la que quieres que se publique.


También te permite seguir fuentes RSS/Atom, aunque bastante limitado en la version free (solo 3).


Para los españoles que lean esto, Tuenti no esta soportado por Hootsuite xD.

Gestión y estadísticas

Hootsuite no se limita a agrupar tus redes sociales, sino que tiene un fuerte componente de estadísticas y mantenimiento de la red social en plan colaboración, pudiendo crear informes usando distintas plantillas configurables.


También permite la asignación de tareas a miembros del grupo que se encargue de la gestión de la red social, o incluso programar mensajes para que se envíen en un determinado momento.


Conclusión

Si tas harto de tener que estar logueandote entre las distintas redes sociales que usas, tener para cada una que acceder de forma individual perdiendo tiempo, dashboard es tu solución!

Un saludo!

viernes, 18 de noviembre de 2011

Series que molan: Dexter

No me lo puedo creer! Tras acabar la entrada de The Walking Dead de repente me viene a la mente de que series no he hablado aún, y una de ellas es Dexter! Y no puede ser, una de las mejores series de la historia no puede quedarse sin su entrada en Series que molan, así que... manos a la obra!

Soy un santo!
Os preguntareis, ¿Esto de Dexter no son unos dibujos? Pues sí, pero también es el nombre del asesino en serie más querido de todos los tiempos... efectivamente, el protagonista de esta serie es un serial-killer... pero no uno cualquiera, sino uno que mantiene su propio código de conducta, inculcado por su padre adoptivo, Harry Morgan, que lo hace "justo" en sus asesinatos, solo matando a aquellos que se lo merecen.

Si has llegado aquí por este Dexter, da media vuelta xD
La cosa es que no se puede vivir solo de matar gente, así que Dexter, recordemos serial-killer, se hace... policía! Concretamente trabajando como forense para el departamento de policia de Miami, ayudando a resolver crimenes, y dando unas reconstrucciones del asesinato en cada caso que para mi son una de las mejores partes de la serie xD

Y sí, como seguro estaréis pensando, también esta basada en un libro! Concretamente en el de Jeff Lindsay, un escritor estadounidense como podeis observar claramente en la imagen...

Mientras escribía los libros me los comía
Su sexta temporada ha salido este año y por lo que llevo visto se sigue manteniendo el nivel, todas las temporadas tienen algo que mola, y sobretodo, como tratan la evolución de Dexter Morgan, interpretado MAGISTRALMENTE por Michael C. Hall, y os lo pido, aunque no esteis acostumbrados a ver series en VOS, hacedlo con esta, porque sin la voz de Michael C. Hall se pierde bastante, además al ser Miami, muchas veces hablan en español, y mola xD.


El porqué de Dexter en VO!

Bueno y aquí lo dejo, pero en serio, vedla!!

Un saludo


Series que molan: The Walking Dead

Tras esta sequía de entradas, volvemos con una de las mejores secciones del blog (teniendo en cuenta el lv general del mismo xD...) Series que molan!

Y lo hacemos con zombiesssss, demasiado he tardao en hablar de esta serie, o quizás prefería que avanzará un poco más esta segunda temporada, porque 6 capítulos de la primera temporada me parecen demasiado poco para formarme una opinión xD, aunque al acabar de verla era buena...y aún lo sigue siendo!

Típica imagen, pero mola el caballo xD
Van ya 5 capítulos de esta segunda temporada y me sigue gustando (aunque no avanza la trama ni a tortas), si bien en algún que otro capítulo man faltao zombies, esta bien que no abusen, porque si en cada episodio solo se tratara el tema zombie podría aburrir a algunos (aunque a mi no xD), pero bueno, antes situémonos un poco, que he empezado por el final!

El Cómic

Como pasa últimamente con toda serie buena, suelen estar basadas en un libro/cómic, y The Walking Dead esta basada en cómic de nombre homónimo (toma palabro). Dicho cómic esta escrito por Robert Kirkman, que participa actualmente en la producción de la serie. Se empezó a publicar en 2003 pero no fue hasta 2010 cuando llega la adaptación para televisión.

Atentos al porta-fotos de la izquierda roto!
Argumento? Que queréis que os cuente, zombies, apocalipsis, sangre, gore, etc. Lo típico de toda buena historia de zombies, aunque tiene un fuerte componente de desarrollo de los personajes, que por mi parte podrían quitarlo, y aun así me seguiría gustando lo mismo xD

La serie

La cadena AMC adquirió los derechos para la serie y Frank Darabont fue el encargado de llevarla a cabo. La primera temporada contó con tan solo 6 miseros episodios, pero... que episodios! El piloto es un ejemplo de capitulazo zombie, aunque se parezca demasiao al inicio de 28 días después.

-¿A qué os molo el final de la niebla?
En esta segunda temporada, AMC, que se ve que no tienen dinero ni pa xuxes, decidió echar a la calle al Frank Darabont, que taba haciendo de showrunner, aunque por lo que lleva de temporada la serie, me parece que el nivel es aún aceptable, ya que todavía entretiene, aunque eso sí, a veces abusan demasiado del cliffhanger en según que capítulo.

Pero bueno, que la serie mola, o quizás no sea demasiado imparcial por mi zombiaddición, pero toda la gente que conozco (no frikizombies) les mola, asi que dadle una oportunidad!

Nada más, que toy perro.

Un saludo zombie!

PD: Si me pilla con ganas algún día quizás amplíe esta entrada, k sa kedao algo sosa xD

jueves, 27 de octubre de 2011

zXing - Añadirlo a tu proyecto de Android

La base del tutorial la he sacado de aquí, aunque me surgieron algunos problemas más que no están comentados en ese, así que me he animado a hacer este.

Lo que se explica aquí esta probado para la revisión 2099 e inferiores del proyecto zXing, para versiones posteriores desconozco si funciona.

Obtener zXing

Puedes bájarte directamente (password zxing) el proyecto configurado (revisión del repositorio 2099 y el SDK con android 4.0).

Este proyecto tiene las mejoras de cambiar tamaño rectángulo cámara (simular cuadrado para QR), eliminar botón de menús y eliminar texto de estado para modo portrait, no elimina la pregunta de que aplicación usar. Bajalo desde la siguiente dirección, tendrás que importarlo desde eclipse creando un nuevo proyecto android desde un existing source.

http://www.hidelinks.com/?ghvw4k7r2q

Link alternativo

Y ve directamente a la sección de enlazar zXing con tu aplicación.

O sigue las siguientes instrucciones:

Como dice el tutorial anterior, lo primero es obtener el /core y /android del proyecto zXing, que son los que nos harán falta para usarlos en nuestra aplicación, para ello los descargamos desde el repositorio de svn de google code, tal y como explique en el anterior tutorial sobre la configuración de la librería.

Configuración como librería

Ahora bien, la cosa está en que necesitamos meter la parte de /android como un proyecto dentro de nuestro eclipse, y de la manera que explicamos antes no ocurre eso, sino que lo tenemos to ahí apegotonao en un proyecto llamado svn, pero podemos aprovecharlo! ¿Cómo? Muy fácil, copiando el proyecto de /android desde el explorador de Windows a otra carpeta, para tenerlo separado.

Una vez hecho eso, nos vamos al eclipse y elegimos crear un nuevo proyecto de android, escribimos en el nombre zXing por ejemplo, y elegimos la opción de crearlo desde un existing source y finish.
La cruz roja no os debería salir xD
Ahora con el proyecto creado pinchamos con botón derecho y elegimos team>disconnect y yes, para que nos limpie todo el tema de svn, que no nos interesa tenerlo molestando. Si no os da la opción de disconnect mejor, no teneis que hacer este paso xD.

Aparcamos nuestro proyecto eclipse recién creado y nos vamos a compilar el /core, para ello podemos hacer lo mismo que expliqué en el manual anterior de configuración, navegamos hasta la ruta del core y ant clean build-no-debug, o ant build export para versiones recientes y así tendremos nuestro core.jar.

A continuación nos vamos a configurar el build-path (pincha encima del proyecto con botón derecho>build path>configure build path)y le damos a añadir external jars y metemos el core.jar que acabamos de compilar.


Ahora pinchamos con botón derecho en el proyecto>propiedades>android y marcamos el checkbox de abajo que pone Is library. Porque vamos a usar nuestro proyecto como una librería.


Tras este paso, si no os da estos problemas, sois afortunados, porque a mi si que me los dio!

Solución algunos problemas

Primero, una opción en el manifest del proyecto, la de android:xlargeScreens="true", no sé porque me petaba el proyecto (por algo del SDK 2.2), así que coméntala si es necesario para que no de por culo.


Ahí no acaba la cosa, ahora tendrás un error al haber convertido el proyecto en librería, los cases de los switchs te darán error, ¿Por qué? Por esto, para arreglarlo situa el ratón encima de cada switch (thx zoack xd), y pulsa control+1, y elige la opción de convertir los switchs en ifs, y esto estará listo.

Añado un aporte que Juan Carlos hizo en los comentarios, si tras esto algunos @overrides te dan errores, prueba a bajar la versión de JDK a la 1.6.

Si te sigue dando algún error, elige Project>clean para que regenere el R.java y ya debería funcionar!

Enlazar zXing con tu proyecto

Hemos acabado de configurar la librería, ahora nos vamos a configurar nuestro proyecto de aplicación, asi que botón derecho>propiedades>android y abajo del todo elegimos la opción de add y debería aparecer nuestra librería zXing recién creada, la añadimos.

EDITO: Si no quieres importar la librería de esta manera, puedes hacer uso del archivo zxing.jar que te crea eclipse al compilarla, e importarlo como hacemos con el core.jar, con la opción de add externals jars, el zxing.jar lo encontraras en la carpeta /bin del proyecto zXing de eclipse.
Además también tenemos que añadir el core.jar al build-path, como hicimos con el proyecto de la librería zXing.

(Si has saltado a este paso directamente y estas usando mi proyecto subido, asegúrate de que en el proyecto de la librería zXing está el core.jar en el build-path y que en la sección de android esta marcado como Is Library )

Ahora en tu aplicación, que tu botón lance esto:

Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, 0);

Y el siguiente método para obtener los resultados desde la misma activity:

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
   if (requestCode == 0) {
      if (resultCode == RESULT_OK) {
         String contents = intent.getStringExtra("SCAN_RESULT");
         String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
         // Handle successful scan
      } else if (resultCode == RESULT_CANCELED) {
         // Handle cancel
      }
   }
}

Por ultimo tenemos que añadir en el manifest de tu aplicación la información sobre el SCAN de zXing, asi que pega esto:

<activity
            android:clearTaskOnLaunch="true"
            android:stateNotNeeded="true"
            android:configChanges="orientation|keyboardHidden"
            android:name="com.google.zxing.client.android.CaptureActivity"
            android:screenOrientation="landscape"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            android:windowSoftInputMode="stateAlwaysHidden" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter >
                <action android:name="com.google.zxing.client.android.SCAN" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
</activity>

Por último dale permisos a tu aplicación para usar la cámara con esto:
<uses-permission android:name="android.permission.CAMERA"></uses-permission>

Prueba a añadir también lo siguiente si la cámara te da problemas, no se abre, se cierra con error, etc, las primeras veces que lo use no me resulto necesario, pero la última vez que lo probé, con esto se me arreglaron los problemas.

<uses-feature android:name="android.hardware.camera" />
    <uses-feature
        android:name="android.hardware.camera.autofocus"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.touchscreen"
        android:required="false" />
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="8" />

Bien, con esto ya lo tendrás funcionando pero hay 3 cosas que aún se pueden mejorar.

Mejoras extra

Primero, cuando pulses el botón de menú dentro del scanner, te aparece un menú de opciones, el cual si pulsas alguna opción petará, además el nombre de la aplicación del scanner sobreescribirá el tuyo, y por último cada vez que pulses el botón se te dará la opción de que aplicación usar para escanear el código, resultando un tanto molesto ¿Como arreglar estos problemas?

Para lo del menú, tan fácil como irnos al CaptureActivity.java del paquete com.google.zxing.cient.android y comentar 3 métodos, el onCreateOptionsMenu(Menu menu), el onPrepareOptionsMenu(Menu menu) y el onOptionsItemSelected(MenuItem item), con eso eliminaremos la función de menú.

Para lo del nombre, nos vamos a res/values/ y para los strings.xml cambiamos el string app_name por el de nuestra aplicación, eso deberíamos hacerlo para todas las carpetas values-xx, o borralas todas y dejar solo la de values..., según la gana que tengas xD.

Edito:

En principio la idea de tener varias values-xx, es para personalizar los distintos strings.xml en función del idioma del dispositivo, pero si solo quieres el nombre de tu aplicación o no te interesa traducir los textos a distintos idiomas, basta con tener tu values/strings.xml.

En la librería zXing sí usan este sistema de traducción, así que si quieres mantener tu nombre de aplicación para un dispositivo en español por ejemplo, tendrías que modificar el strings.xml de la values por defecto, y la de la values-es, pero si el dispositivo esta en inglés te seguiría saliendo lo de Barcode Scanner, por que pillaría el values-en/strings.xml.

Conclusión, si quieres que se mantenga para todas tienes 2 opciones, o borras todas las values-xx, como mencionó arriba, o modificas individualmente cada app_name de cada xml.

La ventaja de la primera, más rapidez, pero si usas algo más de librería zXing que pille un string del strings.xml, solo saldrá el que tengas (que por defecto es inglés), así que tu decides.

Para lo tercero tenemos que modificar 3 archivos, primero el Intents.java de com.google.zxing.client.android, cambiando el String ACTION de Scan com.google.zxing.client.android.SCAN a la de tu proyecto, por ejemplo, si tu proyecto esta en com.pepino.prueba, tendrás que ponerlo como com.pepino.prueba.SCAN, este mismo cambio hay que hacerlo en el nombre del intent-filter ACTION del manifest.xml de la librería de zXing y también en el de tu proyecto, NO CAMBIAR el nombre de la actividad asociada en el android:name. Y por supuesto ahora cuando llames al Intent de scaneo debes hacerlo con tu nuevo ACTION, es decir, com.pepino.prueba.SCAN.

Por cierto, si vais a leer códigos qr, quizás os interese modificar en com.google.zxing.client.android.camera la actividad CameraManager.java, el método getFramingRect(), la línea de:

int width = screenResolution.x * 3 / 4;

cambiando el 3 por un 2, así conseguiremos que el rectángulo que se forma para reconocer los códigos parezca más un cuadrado xD, un tanto cutre pero funciona.

Otra mejora interesante para los QRadictos, por defecto el layout de la cámara del zXing está hecho para que se use en modo landscape, pero si queremos por ejemplo leer solo códigos QR (como es mi caso), puede que nos interese ponerlo en modo portrait.

Tras investigar por la librería no encontré una manera rápida de hacer esto (por lo que tuve viendo requeriría bastante curro, si alguien encuentra una forma fácil que lo comente!), así que se me ocurrió a probar a leer un código directamente poniendo el móvil en forma portrait, aunque el layout sigue siendo landscape y... funciona igual!

Así que el único problema que tenía era el texto de estado que aparece a la izquierda, pero por suerte android tiene un setVisibility(), así que tan fácil como irnos al CaptureActivity.java, al método onCreate(Bundle icicle) y añadir justo debajo de la línea:

statusView = (TextView) findViewById(R.id.status_view);

la siguiente:

statusView.setVisibility(View.INVISIBLE);

Para la revisión 2099 y probablemente posteriores, esta línea hay que añadirla modificando el método resetStatusView(), donde pone a Visible el statusView, ponerlo a INVISIBLE, y listo.

En el método onCreate comenta la línea siguiente para evitar que lance la ayuda.

showHelpOnFirstLaunch();

Si queréis cambiarle el sonido al "obturador" de la cámara, para ello nos vamos al BeepManager.java al método buildMediaPlayer(Context activity) a la línea de :

AssetFileDescriptor file = activity.getResources().openRawResourceFd(R.raw.beep);//beep original 

Y cambiamos el R.raw.beep por nuestro sonido, que tenemos que haber puesto previamente en el directorio raw, y accedemos a él con R.raw.nombre, así de fácil tendremos nuestro sonido custom!

Errores Comunes

E/AndroidRuntime(848): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.google.zxing.client.android.SCAN

Estas lanzando el Intent del scanner con un nombre de ACTION incorrecto, que no se corresponde con el que aparece en el manifest de tu proyecto, en el de la librería zXing o en el de la clase Intents.java . Dicho ACTION debe ser igual en todos los sitios. Por defecto es "com.google.zxing.client.android.SCAN"

E/AndroidRuntime(946): java.lang.VerifyError: com.google.zxing.client.android.CaptureActivity

El core.jar que has importado al proyecto de tu aplicación no se corresponde con la versión de la librería zXing.

E/AndroidRuntime(1214): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.android.prueba/LINEAMODIFICADA.CaptureActivity}: java.lang.ClassNotFoundException: LINEAMODIFACADA.CaptureActivity in loader dalvik.system.PathClassLoader[/data/app/com.android.prueba-1.apk]

La línea del manifest de tu proyecto que indica que clase esta asociada al intent action que lanzas no esta bien configurada, debe ser esta: android:name="com.google.zxing.client.android.CaptureActivity". En el ejemplo de arriba el error sería LINEAMODIFICADA.

class-not-found-when-using-zxingz

Usando la tercera solución de este link, el compañero Rafa consiguió arreglarlo:
http://stackoverflow.com/questions/11959091/class-not-found-when-using-zxing
Explicación en ingles:
Your jar is not in the /libs folder. This happens when you have added the jar to the build path, but newer versions of ADT need it to be in /libs. Put it there and re-add it to the build path.

Un saludo!

domingo, 23 de octubre de 2011

zXing - Librería Java para procesado de códigos 1D/2D

Si queréis trastear con códigos de este tipo, por lo que llevo visto esta librería esta bastante bien.

zXing - Zebra Crossing
Obtener librería zXing

Para bajarse el código de la librería, lo mejor es hacerlo a través del repositorio svn de google code del proyecto, usando un cliente como Subversive desde Eclipse, si no sabéis lo que es y demás, consultad este tutorial que hice para instalarlo y configurarlo.

Hay que crear un nuevo repositorio a través de la vista de repositorios pinchando en el cilindro con el + verde y añadir de URL la siguiente dirección http://zxing.googlecode.com/svn/.

Si no tienes activa la vista de repositorios, Window>Show View>Other>Svn>SVN Repositories.

Arriba a la derecha el botón de añadir repositorio

Ahora nos saldrá el repositorio en la vista de repositorios y tenemos que pinchar con el botón derecho en él y hacer un check out, así nos bajará todo el código en un nuevo proyecto que se llamará svn.




EDITO src=Zoack xD: Con esta forma te bajas todo el proyecto completo, si quieres uno concreto, puedes acceder al trunk desde la vista de repositorios y bajarte de ahí el proyecto que quieras, en plan individual, o usando el asistente del eclipse con la opción de import>SVN>Project from SVN y eligiendo el repositorio y proyecto que te interese.

Obtener Proguard y Ant

Para compilar el código en android, hace falta bajarse 2 cosas: proguard y ant, ambas se usan desde la linea de comandos. La primera sirve para hacer más eficiente el código y la segunda para compilar proyectos java. La ventaja de usar ant como herramienta para scripts de compilación es que es multiplataforma, con lo que no tenemos que tener distintos archivos de compilación segun el SO en el que estemos.

Antes de nada, ant lo lleva el eclipse como plugin, el problema es que mi versión de eclipse usa la version 1.7.1 de ant, y para compilar lo de android se necesita la 1.8.0 o superior, por eso tuve que bajarmelo aparte.

Vista de Ant desde eclipse
Fallo de compilación por la versión 1.7.1
Descomprimis ambos programas y para usarlos hay que modificar algunas variables de entorno y archivos de la librería.

Configuración

En el proyecto svn del eclipse, en la carpeta trunk, buscad un archivo que se llama build.properties, ahí dentro hay que decirle donde tenemos instalado el proguard (la ruta del proguard.jar, que estará en la carpeta lib) y el SDK de android.

build.properties configurado
Las variables de entorno que hay que modificar/crear son, JAVA_HOME, ANT_HOME, CLASSPATH y el path.

Desde la configuración avanzada del equipo en windows 7, pinchando en variables de entorno y luego en el cuadro de abajo de Variables del sistema podremos hacerlo.

En la primera se pone la ruta del directorio donde este instalado el jdk, por ejemplo C:\JAVA\JDKS\jdk1.6.0_21.

La segunda igual pero donde se haya descomprimido el ant, por ejemplo: C:\JAVA\JDKS\apache-ant-1.8.2

En la tercera hay que dejarla vacia, poner solamente un ;  y listo.

Editando variables de entorno
Y en el path hay que añadir las 2 rutas de las carpetas bin (se ponen separado por un ; cada una), que serán algo asi:

C:\JAVA\JDKS\jdk1.6.0_21\bin

C:\JAVA\JDKS\apache-ant-1.8.2\bin

Con eso ya deberíamos poder compilar el código del proyecto que queramos.

Compilando y probando código

La librería zXing esta para muchos lenguajes, que si ActionScript, c++, ruby, etc... Nosotros vamos a probar la aplicación de línea de comandos CommandLineRunner, para equipos de sobremesa, que acepta una imagen/url y te la decodifica.

Para hacerlo, primero necesitamos compilar el core, así que nos vamos al cmd de windows y navegamos hasta la ruta del proyecto svn de eclipse y accedemos a la carpeta core, donde aparezca el archivo build.xml (usad el comando dir para verlo), este archivo lo usa ant para compilar, aseguraos que estáis en la ruta correcta porque sino compilareis otra cosa, ya que cada carpetilla tie su build.xml de compilación.

Para compilar ejecuta en la consola:

ant clean build-no-debug

Edito: Para compilar el core a fecha 30/12/2011 rev2098  hay que hacer un:
ant build export


Así compilarás sin información de debug para que no existan problemas de incompatibilidad con android, aunque ahora mismo para la aplicación de línea de comandos no es necesario, con lo que bastaría un simple ant en consola, pero así no tienes que compilarlo luego otra vez si quieres hacer algo con android.

A continuación nos vamos a la carpeta javase y hacemos lo mismo pero solo escribimos ant, sin parámetros. Y finalmente subimos de directorio para estar en el trunk y ejecutamos la aplicación:

cd ..
java -cp javase\javase.jar;core\core.jar com.google.zxing.client.j2se.CommandLineRunner  http://upload.wikimedia.org/wikipedia/commons/3/3d/QRc%C3%B3digo_portada_wikipedia_espa%C3%B1ol_.png


Deberíamos obtener un resultado similar a este:


Otra de las opciones de la librería es una aplicación de ejemplo de android para desarrolladores, la podemos compilar tambien usando ant la encontrareis en la carpeta androidtest. Así obtendreis el .apk para instalar en el emulador/móvil, aunque también la podeis bajar directamente desde aquí, llamada ZXingTest1.12.apk. Próximamente explicaré como es para instalar en tu móvil un .apk.

También en la carpeta android-integration, tenemos unas clases para usar la librería desde una aplicación externa, sin más que implementar un botón en nuestra aplicación, que llama a la aplicación de zXing, pero ello hace que se necesite tener instalada dicha aplicación en el dispositivo, lo que la hace una solución fácil pero cutre xD.

Por ahora esto es todo, próximamente más información sobre esta librería y algún ejemplo en android (cuando sepa usarla xD).

Un saludo!

jueves, 20 de octubre de 2011

Instalar y configurar cliente Subversive en Eclipse con Google Code

Antes que nada, estos pasos sirven tambien para la version Indigo de Eclipse, tan solo cambiar donde se vea helios por Indigo y listo xD.

Para instalar este útil plugin para Eclipse Helios de Subversion sigue los siguientes pasos.

Instalar Plugin Subversive

En el menu principal de eclipse elige Help>Install New Software y aparecerá el cuadro de dialogo para instalar nuevo software.


En el cuadro que pone Work with elige Helios - http://download.eclipse.org/releases/helios. Una lista de paquetes de software aparecerá.


Expande el nodo de Collaboration.


Busca y marca la casilla de Subversive Team Provider (incubation) y dale a siguiente.


Click next otra vez, acepta la licencia y click Finish. Subversive se descargará y se instalará.


Ahora reinicia el eclipse pa asegurar que to rule bien.

Instalar Subversive SVN Connectors

Con esto tenemos instalado el cliente de subversive, pero aparte necesitamos los SVN Connectors, así que copia y pega este enlace en el cuadro de Work with: http://community.polarion.com/projects/subversive/download/eclipse/2.0/helios-site/


Expande los Subversive SVN Connectors, elige la casilla de Subversive SVN Connectors y además alguno de los que estan marcados como opcional. ¿Y cual elijo?


Las diferencia entre los que aparecen, SVNKit y JavaHL las podeis ver aquí. Basicamente SVNKit está hecho puramente en Java y los JavaHL son nativos de cada SO, prueba a elegir los de Win32 si es tu SO, sino con los de SVNKit debería funcionar.

Y haz igual que antes, next, next, acepta la licencia y reinicia el Eclipse.

Con esto ya tendrías instalado lo que necesitas para poder usar repositorios SVN, (como el de la librería zXing, neuroph, etc) o porque no... el tuyo propio!!!

La siguiente parte muestra como crear un repositorio propio usando Google Code y configurar subversive para usarlo, ésto solo necesitas hacerlo si estas interesado en publicar tu código o simplemente disfrutar de las ventajas de programar teniendo por debajo SVN! xD

Crear repositorio en Google Code

Ahora para usarlo, necesitas un servidor de subversion, como no, google tiene uno, el proyecto google code te da soporte para control de versiones, y para usarlo tan solo necesitas una cuenta de google, para ello vete a la página de google code, logueate con tu cuenta de gmail y usa el siguiente enlace para crear el proyecto. Lo importante es que elijas subversion como tipo de control de versiones.


Una vez creado nos vamos al proyecto, elegimos la pestaña source y debajo de Command Line-Acces le damos al enlace de When prompted, enter your generated googlecode.com password, la contraseña que aparecerá en negrita será la que hay que utilizar para poder trabajar con el proyecto.


Configurar Subversive para usar el repositorio creado

Una vez que tenemos ya el repositorio, tenemos que acceder a él desde eclipse usando Subversive, y meter algún proyecto de eclipse, para ello creamos uno y cuando este creado, pinchamos con botón derecho encima de él en el explorador de paquetes, y Team>share project>SVN .


Nos saldrá una lista de repositorios (si ya tenemos alguno) sino, tendremos que configurar una nuevo (el de google code que acabamos de crear).


En la ventana que aparecerá rellenamos como se ve en la imagen, teniendo en cuenta que nuestro proyecto se llame pericoproject y la cuenta sea perico@gmail.com, (la password es la que hemos comentado anteriormente), estos datos son simplemente los que aparecen en la imagen anterior de Command Line-Acces.

Ahora pulsa next y aparecerá la siguiente ventana, donde configurar el layout del repositorio, si tienes pensado usar un solo proyecto de eclipse elige Use single project layout , si piensas crear varios déjalo tal cual aparece.

Además, te creará la estructura típica de Subversion, trunk, branches y tags. La idea de estas 3 carpetas es dividir cada desarrollo del proyecto, en trunk esta la principal, en branches las posibles "desviaciones", versiones alternativas del proyecto, y en tags las versiones "finales" que se vayan sacando.


Para acabar pulsa finish y se configurará automáticamente, subiendo el proyecto al repositorio, apareciendo en el logo del projecto una especie de cilindro y un número (la versión actual de desarrollo), y cuando pulses sobre él con el botón derecho>team, te aparecerán una pexa de opciones.


Las principales son las de commit y update, con commit subes tu versión al servidor y con update te bajas del servidor lo nuevo que exista.

Bueno esto es todo por ahora, si quereis más info sobre Subversion y como trabajar con él... google tiene la respuesta!

Un saludo.

miércoles, 19 de octubre de 2011

Qué IDE usar para trabajar con Prolog

Prolog, ese gran enemigo! La programación declarativa puede ser muy puñetera... tendremos que hacerla más amena, y que mejor que mediante un IDE con sesera! (Rima?¿? wtf)

Un poco feo el logo :O
Después de investigar un tiempo por fin encontré el que usé hace unos años, SWI-Prolog-Editor, si bien no es tan completo como otros que he visto, en mi caso es suficiente para hacer cuatro perrerías.

¿Cómo conseguirlo? Mu fácil, tenemos que bajarnos el SWI-Prolog en sí, y lego el editor, usad estos 2 enlaces y listo:

SWI-Prolog - Elegid vuestra versión y donwload.

Editor - Extraes e instalas.

Con esas 2 cosas ya podréis empezar a poner predicados, hechos y to la pesca de la programación lógica.

Por cierto, también hay un plugin para Eclipse, este no lo he probado aunque parece que tiene buena pinta.

Además también hay un visual prolog! Podéis echarle un vistazo por aquí, lo tengo instalao pero no creo que dure mucho xD.

En un futuro corto/medio quizás complete esto con algo de programación lógica, que aunque es puñetera , también es bastante interesante.

Na más, Un saludo!

jueves, 13 de octubre de 2011

Adiós C - Adiós Dennis Ritchie

Parece mentira como funciona la información en estos días, como dependemos de lo que nos ofrecen los medios, teniendo actualmente cientos de maneras de acceder a ella, pero aún así solo nos enteremos de lo que les interesa.


Empiezo así porque de no ser por un compañero que me ha recordado a este hombre, probablemente no me habría enterado por ningún sitio de su muerte, Dennis Ritchie, creador ni más ni menos que del lenguaje C, y co-creador del SO UNIX, este fin de semana paso a mejor vida, y nosotros solo acordándonos de Steve Jobs.

Por supuesto no es una crítica al pobre de Steve, que en paz descanse, sino a como los medios dan cabida a lo que interesa a la masa, sin tener en cuenta la importancia de hombres no tan famosos pero que han cambiado el mundo, porque me gustaría ver el iPhone con su Objetive-C, sin C, o el aclamado Linux, sin Unix...

Pero bueno, aquí queda mi pequeño homenaje a este hombre, os dejo con una imagen que me ha pasao el hatake al más puro estilo Bruce Lee xD, si has programado alguna vez, aunque no sea en C, la disfrutarás.


Un saludo!

sábado, 8 de octubre de 2011

Como hacer screenshots en iPhone

Tan fácil como pulsar a la vez el botón home y el de encendido un momento, con ello conseguiremos la screenshot que nos aparecerá en el camera roll directamente, la pantalla hará un pequeño destello en el momento de hacer la ss.

La entrada más corta de la historia xD, pero no por ello la menos útil!!

Un saludo!

Configurar WIFI UCM Eduroam en iPhone

Aunque el manual que han hecho los de la UCM esta bastante claro, solo explica una de las formas de hacerlo, asi que me animao a explicar los dos sistemas que conozco para configurar la WIFI.


La primera es la que se comenta en el manual y que en principio es bastante fácil, tan solo abrir el siguiente enlace desde el safari del iphone:

http://ssii.ucm.es/wifi/eduroam/software/iphone-eduroam.mobileconfig

Pero... ¿Cómo accedo a Internet desde el móvil si precisamente estoy configurando eso?

Pues conectándote a la red antigua, con la típica conexión UCM,abriéndose la ventanilla esa to fea y escribes tu dir estumail/pass y abres la url que he puesto antes.

El certificao le das a instalar y escribes tu dir estumail, pass y finalizar.


Una vez que has hecho eso, te vas a la gestión de redes y eliges la eduroam, te saldrá el certificado de nuevo lo aceptas y voila, por fin una conexión del siglo 21 pa la ucm xd.

Ahora la segunda forma de hacerlo, quizás más "larga" pero es interesante conocerla, nos bajamos esto desde el PC:

http://ssii.ucm.es/wifi/eduroam/software/iphone-eduroam.mobileconfig

Y ahora la Utilidad de Configuración de Iphone de apple que usaremos:
Instalamos el programa y ejecutamos el archivo que nos hemos bajao anteriormente.


Ahora conectamos nuestro iphone con el usb y aparecerá a la izquierda en dispositivos:


Lo elegimos y nos vamos a la pestaña de perfiles de configuración y elegimos instalar el certificado UCM-eduroam.
Sale eliminar porque ya lo tengo instalado, pero a vosotros os saldrá instalar
Y ahora en el iphone tendrás que hacer lo mismo que en los otros 3 pasos que vimos en la otra forma, instalar-estumaildir-pass. Cuando te conectes a la eduroam tendrás que identificarte de nuevo con tu estumail y tu pass, y listo.

Quizás esta manera es algo más larga pero bueno, así te permite ver el certificado desde el PC xD.

Pues estas son las 2 formas de configurar la nueva Eduroam, espero que os sea de utilidad.

Un saludo!!!

Fuentes: ucmual