I want to share a really usefull command for the control version system Git.
If you are working on a branch, and you really do some changes in that branch, before you can move from this branch, Git says you that you can not go before commit your changes.
You can do commit but if your task is not finished, you can "freeze" your changes in your current branch and move to another branch without making commits to this way:
git stash
At this moment, you are able to move to other branch of development, do whatever you want and, if you want to get back to your branch and recover your old work, only you have to write in your command line:
git stash apply
And your work will go back, like magic!. I consider this really great to work without lose your changes with no commit in the middle.
One thing more, if you have multiples stashes in your branch, you can restore the stash you want. To list them:
git stash list
And later, choose what stash you want to restore with:
git stash name_stash
That's all!
viernes, 9 de enero de 2015
Jade (HTML pre): select tag with options generated automatically with javascript
Today a want to show you a tip about how to make a select with many options without write it one by one and converts it in a long task. This is possible with javascript!
I will show you in Jade (HTML preprocessor and of course, it is possible in HTML as well)
I will show you in Jade (HTML preprocessor and of course, it is possible in HTML as well)
sábado, 8 de marzo de 2014
Me llena de orgullo y satisfacción poder comentar que he publicado (hace algunos días) mi primera aplicacion Android en el Google Play Store. Me estreno como desarrollador Android y espero seguir mejorando ikeComercial Ventas día a día tanto como yo mismo de desarrollador de aplicaciones Android. Espero que la disfruten.
También he decidido publicarla como software libre bajo licencia Apache 2.0. Podéis ver el código aquí y también la página en Google Plus que estoy realizando.
jueves, 13 de febrero de 2014
Converseen, open source image converter.
Hi guys !
Today I want to say a really interesting GUI that I saw last week for Windows or GNU/Linux platforms that converts, resizes, rotates and flips images. I used to convert JPEG to PNG but you can choose about more than 100 image formats like DPX, EXR, GIF, JPEG-2000, PhotoCD, Postscript, SVG, and TIFF and many others.
Personally, the most powerfull feature is converts many images in just one click !! (image batch). Really usefull !!
http://converseen.sourceforge.net/ by faster3ck.
Today I want to say a really interesting GUI that I saw last week for Windows or GNU/Linux platforms that converts, resizes, rotates and flips images. I used to convert JPEG to PNG but you can choose about more than 100 image formats like DPX, EXR, GIF, JPEG-2000, PhotoCD, Postscript, SVG, and TIFF and many others.
Personally, the most powerfull feature is converts many images in just one click !! (image batch). Really usefull !!
http://converseen.sourceforge.net/ by faster3ck.
sábado, 25 de enero de 2014
Signing your app to publish on Google Play (with Google Maps)
Hi everyone !
Today, I want to show you how to sign your application before to publish on Google Play, in another words, we have to write internally that you are the developer of that app.
STEP 1: CREATE A PRIVATE KEY
When we was debugging the application, we generated a debug keystore. Now we have to create a new one. To do this, go to "bin" directory on your JDK (Java Development Kit) folder. We need a tool called "keytool" that it is in this directory and write the following:
NOTE: If you have not installed it, you can do it in this link: JDK.
STEP 2: OBTAIN SHA1 AND MD5 FROM THE KEY TO GET GOOGLE MAPS API KEY
First thing we have to do is to sign the maps on the application, we need to obtain the api key. To this way, our future users can use the maps in the application. If you have not maps on your application, you can jump this step and keep reading after this step.
STEP 3: PUT THE SHA1 ON GOOGLE DEVELOPER CONSOLE
Access to this website, link: Google Developer Console. You have to activate Google Maps and obtain a new Android Key for your application using SHA1. For more information, get in Obtain Google Maps API Key.
STEP 4: Export your Android application.
In ADT Bundle Eclipse, Go to File -> Export -> Export Android Application. Complete the wizard. Select the keystore that we had created in the first step and remember the alias name and password.
NOTE: if you get fail on the process, try to clean the project on Project -> Clean...
NOTE 2: remember to use a correct package for your source code on your project. It have to be unique on entire Google Play!
Finally, you have your app ready to publish on Google Play.
Today, I want to show you how to sign your application before to publish on Google Play, in another words, we have to write internally that you are the developer of that app.
STEP 1: CREATE A PRIVATE KEY
When we was debugging the application, we generated a debug keystore. Now we have to create a new one. To do this, go to "bin" directory on your JDK (Java Development Kit) folder. We need a tool called "keytool" that it is in this directory and write the following:
keytool -genkey -v keystore <path_for_the_new_key> -alias alias_name -keyalg algorithm_key -keysize key_size -validity validity_days
For example:keytool -genkey -v keystore C:/Users/danigonlinea/new_key.keystore -alias danigonlinea -keyalg RSA -keysize 2048 -validity 15750
NOTE: If you have not installed it, you can do it in this link: JDK.
STEP 2: OBTAIN SHA1 AND MD5 FROM THE KEY TO GET GOOGLE MAPS API KEY
First thing we have to do is to sign the maps on the application, we need to obtain the api key. To this way, our future users can use the maps in the application. If you have not maps on your application, you can jump this step and keep reading after this step.
keytool -list -keystore <path_new_key_created> -keypass password_key -v
For examplekeytool -list -keystore C:/Users/danigonlinea/new_key.keystore -keypass perico_palote -v
STEP 3: PUT THE SHA1 ON GOOGLE DEVELOPER CONSOLE
Access to this website, link: Google Developer Console. You have to activate Google Maps and obtain a new Android Key for your application using SHA1. For more information, get in Obtain Google Maps API Key.
STEP 4: Export your Android application.
In ADT Bundle Eclipse, Go to File -> Export -> Export Android Application. Complete the wizard. Select the keystore that we had created in the first step and remember the alias name and password.
NOTE: if you get fail on the process, try to clean the project on Project -> Clean...
NOTE 2: remember to use a correct package for your source code on your project. It have to be unique on entire Google Play!
Finally, you have your app ready to publish on Google Play.
Using UI Automator Viewer and uiautomator for UI Testing on Android
Hi everyone !
Today I want to talk about UI Testing on Android. The project I am developing, I am using two tools very usefull for this job: UI Automator Viewer and uiautomator (from Android SDK). I want to show you how to start with on Windows ( if you are using GNU/Linux like Ubuntu, maybe some steps are different but it is the same deeply).
STEP 1: CHECK YOUR UI COMPONENTS.
You have to write (in a paper apart, for example) the name of the UI components that you can use to test. Take details from XML fields like "resource-id" or "content-desc" (Figure 1). In the image, you don't see anything in that fields but you can write what you want on your XML layouts from your application. Later we can see how to reference it in the test.
STEP 2: CREATE THE PROJECT AND ADD DEPENDENCIES.
Now, you have to make a new Java Project on your Android IDE (I use ADT Bundle Eclipse but I think the idea is the same). You need to add 3 files on your project:
STEP 3: WRITE THE TEST CODE.
So now, you have to write your test cases that you want to test. Here you have a general view about the source.
STEP 4: CHECK YOUR ANDROID IDENTIFIER
Identify your android version in android list. For this, you have to go to "tools" directory on Android SDK and write in the terminal:
STEP 6: COMPILE YOUR PROJECT WITH ANT
Next you have to do is create (or updated if it had been created automatically) a file name build.xml. To do this, go to your test project folder and write:
NOTE: if you have not installed Apache Ant in your system, you have to. Here a link to do it: Install Ant Windows 7.
STEP 7: PUT THE .JAR FILE ONTO THE DEVICE
Now, you have generated a .jar file on your "bin" directory on your test project. Check it out. The next step that we have to do is to move that file into your emulator/smartphone.
NOTE: In my case, it was useless because actually I am using the fantastic "emulator" for Android testing, Genymotion. I had a problem: I was not be able to have permission to write in this folder. Genymotion runs on VirtualBox so what I did was to create a folder and share it, so whatever I put on this folder, it could be accessible on Genymotion.
STEP 8: RUN IT!
We have the .jar inside the emulator so, let's run it !!. For this propose, you have to go "platform-tools" directory in the Android SDK and write:
For example:
That's all!. In fact, the .jar will execute on your emulator and you can see all the steps that you describe on your test code automatically, like a video. Finally, you can check the result of the test on the terminal.
Happy Testing !
Today I want to talk about UI Testing on Android. The project I am developing, I am using two tools very usefull for this job: UI Automator Viewer and uiautomator (from Android SDK). I want to show you how to start with on Windows ( if you are using GNU/Linux like Ubuntu, maybe some steps are different but it is the same deeply).
STEP 1: CHECK YOUR UI COMPONENTS.
You have to write (in a paper apart, for example) the name of the UI components that you can use to test. Take details from XML fields like "resource-id" or "content-desc" (Figure 1). In the image, you don't see anything in that fields but you can write what you want on your XML layouts from your application. Later we can see how to reference it in the test.
STEP 2: CREATE THE PROJECT AND ADD DEPENDENCIES.
- uiautomator.jar and android.jar: Go to proyect properties -> Java Build Path -> Add External jar. You can find them on "platform/< Android version you are compiling your project>" directory in your Android SDK.
- JUnit (library): Go to proyect properties -> Java Build Path -> Add Library -> JUnit (3 - I don't know if it is compatible with 4 version yet).
STEP 3: WRITE THE TEST CODE.
So now, you have to write your test cases that you want to test. Here you have a general view about the source.
public class TestCasesName extends UiAutomatorTestCase
{
protected void setUp() throws Exception {
super.setUp();
// for precondition statements
}
protected void tearDown() throws Exception {
super.tearDown();
// for postconditions statements
}
public void testnumberone () throws UiObjectNotFoundException
{
// write your test case 1 here
}
public void testnumbertwo () throws UiObjectNotFoundException
{
// write your test case 2 here
}
// and all of the test that you want to write.
}
STEP 4: CHECK YOUR ANDROID IDENTIFIER
Identify your android version in android list. For this, you have to go to "tools" directory on Android SDK and write in the terminal:
android list
![]() |
| Figure 2: android list |
STEP 5: GENERATE THE BUILD CONFIGURATION FILES.
You can check that in my list, I have android-18 for number 1, and android-19 for number 2. You have to choose Android version you are compiling. Now, write the next in the same directory:
You can check that in my list, I have android-18 for number 1, and android-19 for number 2. You have to choose Android version you are compiling. Now, write the next in the same directory:
android create uitest-project -n <name_test_project> -t <identifier_android_version> -p <path_test_project_folder>
For example:android create uitest-project -n HelloTesting -t 1 -p c:\Users\danigonlinea\Documents\Android\Workspace\HelloTesting
STEP 6: COMPILE YOUR PROJECT WITH ANT
Next you have to do is create (or updated if it had been created automatically) a file name build.xml. To do this, go to your test project folder and write:
ant build
NOTE: if you have not installed Apache Ant in your system, you have to. Here a link to do it: Install Ant Windows 7.
STEP 7: PUT THE .JAR FILE ONTO THE DEVICE
Now, you have generated a .jar file on your "bin" directory on your test project. Check it out. The next step that we have to do is to move that file into your emulator/smartphone.
adb push <path_to_output_jar> /data/local/tmp/
NOTE: In my case, it was useless because actually I am using the fantastic "emulator" for Android testing, Genymotion. I had a problem: I was not be able to have permission to write in this folder. Genymotion runs on VirtualBox so what I did was to create a folder and share it, so whatever I put on this folder, it could be accessible on Genymotion.
![]() |
| VirtualBox: Shared Folders |
We have the .jar inside the emulator so, let's run it !!. For this propose, you have to go "platform-tools" directory in the Android SDK and write:
adb shell uiautomator runtest <path_to_jar_file> -c <package_plus_name_test_name_to_run>
For example:
adb shell uiautomator runtest /mnt/shared/SharedFilesGenymotion/ikeComercialTesting.jar -c android.testing.testnumberone
That's all!. In fact, the .jar will execute on your emulator and you can see all the steps that you describe on your test code automatically, like a video. Finally, you can check the result of the test on the terminal.
Happy Testing !
Gow, Unix functions for CMD (Command Prompt) on Windows
Lastly, I am developing on Windows (it does not look like "wow this is horrible"; it is fine) since I had problems with graphic card on Ubuntu( shit!! I can not be able to turn up/down the bright !! ) and I have to say that the most tool I have missed is the terminal (yes, CMD really is.... no comments). So, I discovered a library on Github by Brent Matzelle called Gow that it is very usefull. I recovered some Unix commands thanks to that library and I can still use CMD.
Take a look !!
https://github.com/bmatzelle/gow
domingo, 8 de diciembre de 2013
Lyx: (package babel error) you don't have specified a language.
I had this issue last night after to upgrade my Ubuntu 13.04 to 13.10. This is was really annoying because I did not modify anything on Lyx so I had to take some time to what it happened.
All you have to do is to install the language package from Synaptic Manager on your Ubuntu. In my case was spanish language package but you can download the entire language package (400 MB more less).
sábado, 25 de mayo de 2013
Calendar to String and String to Calendar (Android - java)
How many times did you think in convert a date, that it is on String type, to Calendar type? And Calendar to String?.
I sure, at least, one in your developer lifes. I want to share a very easy way to do that, and this way is what i do.
If you want to do the way Calendar to String:
Calendar fecha_calendar = Calendar.getInstance(); // or whatever date you set
CharSequence fecha_charsequence = fecha_DateFormat.format("yyyy-MM-dd", c);
String fecha_string = fecha_charsequence.toString(); // Strings are CharSequence so this step is not necessary.
So simple, so fantastic!. You can see more information about DateFormat class (Android) here Let's see its inverse case.
Calendar fecha_calendar = Calendar.getInstance();
String fecha_string = "2013-5-24";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try
{
Date fecha_date = sdf.parse(fecha_string);
fecha_calendar.setTime(fecha_date);
} catch (ParseException e) {
Log.v("printf", "ERROR!: can not parsing! ");
}
It is a longer way (a little bit) but it is still simple and easy. If you know another way simpler or different, let me know.
Remember this: If you are using dates in your project, parse it before you use it. Always. Don't forget it by experience with working with databases( "2013-5-24" ¡NO!, "2013-12-3" ¡NO!, 2013-12-12 ¡YES!. tell me if you know why. ;) ).
viernes, 8 de febrero de 2013
Encryption / Decryption simple class on Android platform
I've been searching for a solution about encrypt/decryt string texts like it would be for example, the password. I had no idea how to do that buy after two days, I wrote my own encryption class, ready to use:
I use AES Algorithm, and unique key value for encryption for all uses.
I use AES Algorithm, and unique key value for encryption for all uses.
public class Encriptacion
{
private static final String ALGORITMO = "AES";
private static final byte[] valor_clave = "0000000000000000".getBytes();
// key 16 bytes lenght (what you want and of course, valid characters)
public static String encriptar (String texto_a_encriptar) throws Exception
{
Key key = new SecretKeySpec(valor_clave, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, key );
byte[] encrypted = cipher.doFinal(texto_a_encriptar.getBytes("UTF-8"));
String texto_encriptado = Base64.encodeToString(encrypted, Base64.DEFAULT);//new String(encrypted, "UTF-8");
return texto_encriptado;
}
public static String desencriptar(String texto_encriptado) throws Exception
{
Key key = new SecretKeySpec(valor_clave, ALGORITMO);
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decodificar_texto = Base64.decode(texto_encriptado.getBytes("UTF-8"), Base64.DEFAULT);
byte[] desencriptado = cipher.doFinal(decodificar_texto);
return new String(desencriptado, "UTF-8");
}
}
I've been doing a test and it works fine. If anyone reads it and if you want to leave a suggestion or improve, feel free to leave a message.
lunes, 14 de enero de 2013
Sqlite: comparar fechas en un select
Os quiero enseñar como resolví un caso en particular con las bases de datos. Concretamente quería obtener tuplas resultado de hacer un Select donde en el where propusiera una comparación de fechas (<)
Tenemos dos fechas: una fecha es de tipo de dato Calendar y la otra, que se encuentra en la base de datos, es de tipo Timestamp. No podemos comparar un Calendar y un Timestamp directamente, sino que tenemos que convertirlos en un tipo de dato común. El primero que se nos puede ocurrir sería convertir ambas a tipo de dato String.
Aquí podemos verlo:
Calendar fecha_ejemplo = Calendar.getInstance();
String fecha_1 = fecha_ejemplo.get(Calendar.YEAR) + "-" +
(fecha_fac.get(Calendar.MONTH)+1) + "-" +
fecha_fac.get(Calendar.DAY_OF_MONTH);
Cursor c = myDataBase.rawQuery("SELECT _id, " +
"strftime('%Y-%m-%d', fecha_2) AS fecha_2 " +
"FROM TablaEjemplo " +
"WHERE fecha2 < " + fecha_1,
new String[0] );
Aquí podemos ver que la fecha tipo Calendar le hemos dado el formato establecido en el estándar ISO_8601 por medio de la función get(CAMPO) de Calendar. Por otra parte, haciendo uso de la función strftime()
también es posible hacer la conversión a string en el formato que describe el estándar citado anteriormente.
Pero me pregunté si habría otra manera de hacerlo que no fuera convirtiéndolos a un tipo común como String. Investigando vi que podía hacerlo de otra manera: pasando las fechas a milisegundos
Calendar fecha_cualquiera; // pongamos que está inicializada a lo que sea.
Calendar fecha_1_milisegundos = Calendar.getInstance();
fecha_1_milisegundos.setTimeInMillis(fecha_cualquiera.getTimeInMillis());
Cursor c = myDataBase.rawQuery("SELECT _id, " +
"(strftime('%s', fecha_2) * 1000) AS fecha_2" +
"FROM TablaEjemplo " +
"WHERE fecha_modificacion > " +
fecha_fac_milis.getTimeInMillis(), new String[0] );
En esta ocasión podemos también pasar tanto Calendar como Timestamp a un formato común en milisegundos.
¿Qué pensáis? Saludos.
jueves, 3 de enero de 2013
Las gracias del Windows 8
El otro día, haciendo una vista general de mi ordenador portátil, decidí que ya era hora de hacerle un "borrón y cuenta nueva", que al fin de al cabo, el nuevo año acaba de comenzar. Entonces vi que mi Windows 7 iba demasiado lento (normal supongo... no es que tampoco lo utilizara mucho) y ,por otra parte, mi Linux Mint 13 (Maya) que me recomendaron probar estaba resultando demasiado problemático y no es que me gustara demasiado. Se acabó.
Con la salida del nuevo sistema operativo de Microsoft, el Windows 8 (que lo estoy probando haber que tal me va, y si va bien la cosa, probablemente me lo compre, está a un precio más que asequible) , y con un CD-R con etiqueta Ubuntu 12.04 LTS (distribución GNU/Linux) que me grabé ayer, me dispuse a hacer un cambio radical a mi ordenador.
Consejo: haced una copia de seguridad de vuestros datos que sean relevantes, por vuestro bien. Parece un consejo muy obvio, pero que esa copia de seguridad la pongáis en cualquier lugar menos dentro de vuestro disco duro, que es el que vais a toquetear. Yo utilicé SkyDrive de Microsoft pero buenamente también podría haber utilizado DropBox, los dos son gratuitos.
Una vez hecho esto, un amigo mío(que es to buena gente y me dejó el Windows 8 en la versión de prueba de 30 días) y yo nos disponemos a hacer la instalación de Windows 8. Aprovecho la particion que tengo de Windows 7 (NTFS) para instalar el sistema junto con otra partición que hacemos (también en NTFS) para datos en general. La instalación es todo un éxito, la cosa va bien y ahora sólo queda instalar el Ubuntu. Por supuesto también aprovechando las particiones que ya tenía hechas con el Mint. Pero.... ¡¡¡¡ sorpresa !!!!. En la instalación de Ubuntu, cuando estaba por el paso de seleccionar dónde quería instalarlo (Gparted) me decía "unallocated space", es decir, que no reconoce lo que hay ahí.... ¡¡ En la instalación de windows 8 me había toqueteado la tabla de particiones !!! ¿pero qué coño...?
Total, me puse a investigar un poco, haber como podía solucionar la papeleta y....
1. Re-escribí la tabla de particiones que analice con TestDisk. Haciendo esto supuestamente ya volvería todo a la normalidad.
2. Pues no! Ahora estás más puteado que antes! guay!. Gparted ahora no me reconocía absolutamente NADA. Todo el espacio del disco era "unallocated disc" por lo que me puse manos a la obra para ver qué había pasado (otra vez).
3. Despues de estar toda la mañana de ayer buscando una solución, encontre (como era de esperar) a alguien en el mundo (a varios) que le habían pasado algo como yo y... viendo el foro... vi que la partición extendida sobrepasaba el tamaño del disco... capacidad de todas las particiones > capacidad disco (????) ¿cómo ha pasado esto? Ni idea... pero ha tenido que ser el Windows 8 seguro. Total, que lo que hago es un redireccionado de la partición extendida para que no exceda el tamaño del disco. Lo he hecho con fdisk. He intentado poner el ultimo sector del disco a esta partición pero no me dejaba.. asi que he tenido que dejar 1 sector del disco inutilizado (unos 10 MiB - en fin... no hay beneficio sin sacrificio). Y todo arreglado.. ahora Gparted me reconoce las particiones y voy a instalar ubuntu desde ya...
Hoy por hoy, estoy muy satisfecho de lo que hice, esa sensación de hacer el trabajo bien hecho (o medio bien) y.. parece que tengo un ordenador totalmente diferente.
En fin, mi primera entrada al blog, haber si la próxima le añado fotitos o algo para que esté más mona.
Saludos.
Con la salida del nuevo sistema operativo de Microsoft, el Windows 8 (que lo estoy probando haber que tal me va, y si va bien la cosa, probablemente me lo compre, está a un precio más que asequible) , y con un CD-R con etiqueta Ubuntu 12.04 LTS (distribución GNU/Linux) que me grabé ayer, me dispuse a hacer un cambio radical a mi ordenador.
Consejo: haced una copia de seguridad de vuestros datos que sean relevantes, por vuestro bien. Parece un consejo muy obvio, pero que esa copia de seguridad la pongáis en cualquier lugar menos dentro de vuestro disco duro, que es el que vais a toquetear. Yo utilicé SkyDrive de Microsoft pero buenamente también podría haber utilizado DropBox, los dos son gratuitos.
Una vez hecho esto, un amigo mío(que es to buena gente y me dejó el Windows 8 en la versión de prueba de 30 días) y yo nos disponemos a hacer la instalación de Windows 8. Aprovecho la particion que tengo de Windows 7 (NTFS) para instalar el sistema junto con otra partición que hacemos (también en NTFS) para datos en general. La instalación es todo un éxito, la cosa va bien y ahora sólo queda instalar el Ubuntu. Por supuesto también aprovechando las particiones que ya tenía hechas con el Mint. Pero.... ¡¡¡¡ sorpresa !!!!. En la instalación de Ubuntu, cuando estaba por el paso de seleccionar dónde quería instalarlo (Gparted) me decía "unallocated space", es decir, que no reconoce lo que hay ahí.... ¡¡ En la instalación de windows 8 me había toqueteado la tabla de particiones !!! ¿pero qué coño...?
Total, me puse a investigar un poco, haber como podía solucionar la papeleta y....
1. Re-escribí la tabla de particiones que analice con TestDisk. Haciendo esto supuestamente ya volvería todo a la normalidad.
2. Pues no! Ahora estás más puteado que antes! guay!. Gparted ahora no me reconocía absolutamente NADA. Todo el espacio del disco era "unallocated disc" por lo que me puse manos a la obra para ver qué había pasado (otra vez).
3. Despues de estar toda la mañana de ayer buscando una solución, encontre (como era de esperar) a alguien en el mundo (a varios) que le habían pasado algo como yo y... viendo el foro... vi que la partición extendida sobrepasaba el tamaño del disco... capacidad de todas las particiones > capacidad disco (????) ¿cómo ha pasado esto? Ni idea... pero ha tenido que ser el Windows 8 seguro. Total, que lo que hago es un redireccionado de la partición extendida para que no exceda el tamaño del disco. Lo he hecho con fdisk. He intentado poner el ultimo sector del disco a esta partición pero no me dejaba.. asi que he tenido que dejar 1 sector del disco inutilizado (unos 10 MiB - en fin... no hay beneficio sin sacrificio). Y todo arreglado.. ahora Gparted me reconoce las particiones y voy a instalar ubuntu desde ya...
Hoy por hoy, estoy muy satisfecho de lo que hice, esa sensación de hacer el trabajo bien hecho (o medio bien) y.. parece que tengo un ordenador totalmente diferente.
En fin, mi primera entrada al blog, haber si la próxima le añado fotitos o algo para que esté más mona.
Saludos.
Suscribirse a:
Entradas (Atom)



.png)