El blog de Miguel Díaz
Siguiente
Screenshot mDrive

mDrive

Sincroniza tus documentos, fotografías y programas entre tus ordenadores, comparte tus ficheros con tus conocidos y accede documentos estés donde estés.Saber mas

RoboCAUpy

Copia eficiente de archivos, toda la potencia de robocopy con una interfaz sencilla y fácil de usar. Herramienta perfecta para migraciones de equipos y copia masiva de ficheros.Saber mas

Screenshot RoboCAUpy

Acortador de nombres

Detecta ficheros con nombres largos, acortalos de forma masiva y reduce el tamaño de la ruta a la cantidad de carácteres que quieras.
Saber mas

screenshot Acortador Nombres
screenshot mRemoto

DNSPropagationChecker

Controla la propagación DNS de cualquier dominio. Con un solo clic conocerás al instante si se ha propagado en los diferentes servidores DNS existentes.Saber mas

mRemoto

Administra remotamente equipos, controlalos gráficamente o través de la línea de comandos, envía y recibe archivos, habla con el usuario y mucho mas sin ningún tipo de configuración previa.Saber mas

Screenshot mRemoto
Anterior
Miércoles 27 d marzo dl 2013

mDrive es un nuevo proyecto que he programado que permite mantener sincronizados y accesibles tus archivos en cualquier PC. Imagina que tienes varios ordenadores y en todos ellos quieres mantener organizada tu librería de fotos, con mDrive esto se hará automáticamente de forma que si añades una nueva fotografía esta se añadirá a todos tus equipos o imagina que quieres compartir una carpeta con el resto de tus compañeros de trabajo, no es problema, esto también puedes hacerlo con mDrive.

screen

Si usas algún servicio de sincronización en la nube como Skydrive o Box seguro que te has preguntado en mas de una ocasión como se maneja tu información y qué pasaría si uno de estos servicios cerrara.

Con esta idea he creado mDrive, un servicio de sincronización en la nube similar a los anteriores que puedes montar en tu propio servidor, de forma que solo tu seas el dueño de tu información, además podrás sincronizar tantas carpetas como desees y no te limitarás a una sola como en el caso de otros servicios.

Ahora mismo mDrive está en desarrollo pero puedes probarlo gratuitamente utilizando nuestros servidores creando una cuenta de prueba.

Si finalmente te animas a montar tu propio servidor de mDrive sus requisitos son simples, Apache, PHP5 y MySQL en el lado del servidor y .Net Framework 2.0 en el lado del cliente.

Actualmente mDrive se encuentra en versión beta y la parte del servidor será liberada al alcanzar la primera versión estable.

Categorías: Cloud Computing, mDrive, Programación, Proyectos
Etiquetado , , , , , , , , , | Escribir un comentario
Miércoles 19 d septiembre dl 2012

Cómo todos sabemos cuando un programa se actualiza este lo hace realizando una solicitud a un servidor, este le responde diciendo cual es la versión actual y donde descargarla. A continuación si el programa tiene una versión distinta descarga el instalador y lo ejecuta, hasta aquí nada nuevo pero si no se toman las medidas adecuadas las actualizaciones pueden ser un fallo de seguridad en si mismo. Contradictorio ¿no?

Básicamente son aquellas en las que una vez descargadas, el sistema de actualizaciones no comprueba si ese fichero es legítimo (bien mediante la firma del fabricante o cualquier otra medida de seguridad) por lo que si un atacante efectúa un Man In The Middle podría hacerse pasar por el servidor y decirle al actualizador que existe una nueva versión la cual debe descargarse desde un servidor ilegitimo.

Caso práctico vulnerabilidad Evilgrade en MiPony.

El primer paso es saber de que forma se actualiza la aplicación, saber cómo verifica si está actualizada o no y de dónde obtiene los ficheros necesarios para obtener dicha actualización. En mi caso he decidido auditar la última versión de MiPony simplemente por que me olía que sería vulnerable a este tipo de ataques. Obviamente he avisado MiPony de esta vulnerabilidad así que imagino que la resolverán en breve.

Para monitorizar como trabaja la aplicación a la hora de buscar actualizaciones simplemente dejaremos ejecutando MiPony sin ningún trabajo activo, además mediante WireShark capturaremos el tráfico de red. Por último pediremos a MiPony que nos busque actualizaciones, un vez hecho paramos Wireshark y analizamos el tráfico generado.

Continuar leyendo

Categorías: Pentesting, Programación, Seguridad, Sockets
Etiquetado , , , , , , , | Escribir un comentario
Martes 21 d agosto dl 2012

Las activitys son el equivalente a las ventanas o formularios de cualquier lenguaje de programación en Windows, además tienen una ventaja frente a estos ya que un programa puede llamar a un determinado formulario de otra aplicación. Por poner un ejemplo claro cuando abrimos la aplicación de Facebook y pulsamos subir foto, la aplicación de Facebook llama al activity de la camara para realizar una nueva fotografía. Además podemos pasar diferentes parámetros a dicha Activity como si llamáramos a una función mas.

En esta entrega aprenderemos a crear nuestros propios activitys y llamar de uno al otro al pulsar un botón, una vez aprendido veremos como pasar un parámetro de un Activity a otro.

Si no has leído aún las entregas anteriores recordar que las tenéis a vuestra disposición:

Abrir un nuevo Activity al pulsar un botón

Para empezar en nuestro activity principal (Nosotros le hemos llamado Juegoactivitys) crearemos un botón, con id btAbrirNuevoActivity que será el encargado de llamar a nuestra segundo Activity. Además crearemos una segunda actividad para ello pulsamos con el botón derecho sobre nuestro proyecto y vamos a Nuevo>Otras>Android Activity y seguimos el asistente, nosotros le hemos dando el nombre de SegundaActivity y le hemos puesto un TextView con id tvHolaMundo.

JugandoActivitys.java

public class JugandoActivitys extends Activity implements OnClickListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_jugando_activitys);
        //Define el boton
        Button boton = (Button) findViewById(R.id.btAbrirNuevoActivity);
        //Asigna el evento onclick al boton
        boton.setOnClickListener(this);
    }
	public void onClick(View v) {
		//Define la actividad
		Intent i = new Intent(this, SegundaActivity.class);
		//Inicia la actividad
		startActivity(i);
	}
}
Fijemonos a partir de la línea 9, justo en esa línea y 12 establece el evento onClick al botón, esto vimos como hacerlo en la entrega número 4 del curso.

Continuar leyendo

Categorías: Android, Programación
Etiquetado , , , , , , , , | 4 comentarios
Domingo 19 d agosto dl 2012

Hasta ahora hemos visto como ejecutar acciones durante la carga de el Activity o ventana principal de nuestra aplicación, pero obviamente un programa precisa de una interacción con el usuario, el usuario debe poder pulsar en algunos lugares, introducir texto y realizar acciones sobre la interfaz del programa, para ello Android nos permite asignar eventos a los diferentes elementos de nuestro programa.

Hoy vamos a ver el elemento mas sencillo de todos, el evento OnClick, si ya habéis programado alguna vez en lenguajes como JavaScript o VisualBasic os sonará, es el evento que se produce cuando un elemento es pulsado una vez y nos servirá como base para familiarizarnos con el resto.

Para nuestro primer ejemplo debemos crear un nuevo proyecto en cuyo activity incluiremos un botón llamado btPrincipal y un TextView con id tvPrincipal y con un texto en blanco. En lo que va a consistir el ejemplo es en escribir “Hola mundo” dentro de tvPrincipal en el momento es pulsado el botón.

Asignar el evento OnClick a un botón en Android.

MainActivity.java

public class MainActivity extends Activity implements OnClickListener {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button boton = (Button) findViewById(R.id.btPrincipal); //Definimos el boton
        boton.setOnClickListener(this); //Le asignamos el evento onclick
    }
	public void onClick(View control_pulsado) {
		TextView campo_texto = (TextView)findViewById(R.id.tvPrincipal); //Definimos el campo de texto
		campo_texto.setText("Hola mundo"); //Cambiamos su contenido
	}
 }

Como vemos en la primera línea implementamos el metodo OnClickListener, si quisieramos usar otro evento, por ejemplo el OnTouch lo añadiriamos también con OnTouchListener, etc.

En la línea 9 asignamos el evento OnClick al boton, desde este momento se ejecutará la función onClick cada vez que este sea pulsado. La razón por la que pasamos el argumento this la veremos mas adelante.

A continuación en la función onClick cambiamos el texto como vimos en la tercera entrega del curso.

La razón por la que se pasa el argumento this es simple, imagina que tenemos dos botones, el btPrincipal queremos que cambie el texto a “Hola mundo” y el btSecundario queremos que ponga “Hasta luego mundo”, a ambos le asignamos el evento onClickListener, por lo cual la función onClick se va a ejecutar se pulse el botón que se pulse, por lo que es la propia función onClick la que debe averiguar por quién ha sido llamada, al incluir this, podemos diferenciar el botón con un simple condicional

	public void onClick(View control_pulsado) {
		TextView campo_texto = (TextView)findViewById(R.id.tvPrincipal); //Definimos el campo de texto
		if(control_pulsado.getId() == R.id.btPrincipal){ //Si se ha pulsado btPrincipal
			campo_texto.setText("Hola mundo"); //Escribimos Hola Mundo
		}else if(control_pulsado.getId() == R.id.btSecundario){
			campo_texto.setText("Hasta luego mundo"); //Escribimos Hasta luego mundo
		}
	}

En la próxima entrega veremos como crear nuevas ventanas o activitys en Android y las diferencias con respecto a las existentes en otros sistemas operativos.

Categorías: Android, Programación
Etiquetado , , , , , , , , , | 6 comentarios
Miércoles 15 d agosto dl 2012

Y en esta entrega empezamos con los códigos, nada complicado pero necesario especialmente si vienes de lenguajes sencillos como VB.Net o C#. Como se ha dicho en las anteriores entregas es necesario conocer algún lenguaje de programación orientado a objetos, preferiblemente Java pues es el usado en Android.

Además si no has leído las entregas anteriores este es el momento:

Hoy veremos como modificar los diferentes elementos gráficos (contenedores de imagen, etiquetas de texto, botones, etc) en tiempo de ejecución. Si vienes de otros entornos como .net, verás que es muy similar pero con algunas variaciones, por ejemplo a los elementos de un Activity se les llama View en lugar de elementos.

En nuestro primer ejemplo tendremos un Activity que contendrá un TextView llamado “caja_de_texto”, por lo que nuestro xml será algo así:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <TextView
        android:id="@+id/caja_de_texto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_world"
        tools:context=".MainActivity" />
</RelativeLayout>

Como veis es simple, un textview con el texto “Hello World”. Es importante que veais la línea que dice android:id la cual define el nombre o id del view. Sin ello no podremos realizar cambios a posteriori.
Ahora vamos a explicar las partes de las que costa MainActivity.java

Continuar leyendo

Categorías: Android, Programación
Etiquetado , , , , , , , | 4 comentarios
Domingo 12 d agosto dl 2012

Fruto de un domingo un tanto aburrido he programado un juego sencillisimo en BASIC. Creo que está claro que la finalidad solo ha sido didactica y por diversión, que nadie piense que va a ser un gran juego ya que lo he programado para un Amstrad 128Kb en un par de horas.

Nuestro personaje debe ir recogiendo tréboles que van apareciendo en la pantalla mientras esquiva las diferentes bombas que van cayendo.

A continuación os dejo el código fuente del programa

10 FLECHAABAJO$ = CHR$(241)
20 FLECHAARRIBA$ = CHR$(240)
30 FLECHADERECHA$ = CHR$(243)
40 FLECHAIZQUIERDA$=CHR$(242)
50 CARACTERPERSONAJE=249
60 CARACTERBOMBA=252
70 CARACTERPREMIO=226
80 POSICIONX = 5
90 POSICIONY = 5
91 PUNTOS = 0
100 'PONE LOS COLORES NEGRO Y BLANCO
110 'Y LIMPIA LA PANTALLA

Continuar leyendo

Categorías: Programación, Retroinformatica
Etiquetado , , , , , , , , | 2 comentarios
Viernes 10 d agosto dl 2012

Esta es la segunda entrega del curso de programación en Android, este pretende ser un curso realmente sencillo para empezar a desarrollar aplicaciones en Android, pero es imprescindible tener nociones de programación orientada a objetos. Durante la entrega de hoy crearemos nuestro primer proyecto del tipo Hola Mundo, veremos de qué partes está compuesto y lo ejecutaremos en la máquina virtual que creamos en la primera entrega del curso de programación en Android.

Crear una aplicación para Android en eclipse

Esto es sencillo, abrimos Eclipse y nos vamos a File>New Project, se nos abrirá una nueva ventana donde seleccionaremos el tipo de proyecto, en este caso una aplicación para Android.

Pulsamos next y le damos un nombre al programa, en nuestro caso será “PrimeraAplicacion”, el resto de campos se rellenan automáticamente aunque podemos modificarlos, donde dice Build SDK elegimos la versión de Android sobre la que funcionará, en nuestro caso la 2.2, ya que es la tenemos instalada en nuestro emulador, pulsamos Next y nos dejará personalizar el icono, demomento lo dejarmos como está. La siguiente ventana nos permite elegir un tipo de actividad. Las actividades podríamos decir que son el equivalente a los Forms o ventanas de .Net, elegiremos uno vació (BankActivity).

Continuar leyendo

Categorías: Android, Programación
Etiquetado , , , , , , , , | Escribir un comentario
Miércoles 8 d agosto dl 2012

Hace tiempo que quería empezar a programar para Android, pero entre que tengo una relación amor/odio con Java y que me daba una pereza infinita ponerme a configurar el SDK no terminaba de ponerme con ello, pero bueno, llevo ya unos meses picando código y creo que es el momento de empezar un curso de programación para Android.

En esta primera entrega aprenderemos a configurar el SDK de android con eclipse, por lo que no ahondaremos en aspectos puros de programación. En el siguiente crearemos nuestro primer proyecto y veremos de que partes se compone.

Antes de empezar, debemos tener claro que es imprescindible conocer Java o algún lenguaje de programación orientada a objetos similar como C++

Configuración del SDK de Android

El SDK nos dotará de las API y herramientas como un emulador de Android. El primer paso es descargarlo, e instalarlo como una aplicación mas.

Una vez instalado vamos a configurarlo, para ello abriremos el programa y seleccionaremos las versiones de android que deseamos instalar. Yo os recomiendo usar la 2.2 y 2.1 ya que son compatibles con la mayoría de dispositivos Android. Una vez seleccionados hacemos clic  en Install Packages, aceptamos la licencia y comenzará la descarga e instalación de las diferentes imágenes de Android

Continuar leyendo

Categorías: Android, Programación
Etiquetado , , , , , , , | 2 comentarios
Jueves 17 d mayo dl 2012

El movimiento de los personajes es algo que prácticamente cualquier aventura gráfica tiene, de hecho prácticamente durante todo el juego se está andando a lo largo de los escenarios, por ello es una de las funciones mas importantes dentro del juego y aunque pueda parecer mentira también es de las mas complicadas. Vamos a ver un ejemplo de como debe desarrollarse esta función a lo largo de dos entradas.

El movimiento básico de un personaje en 2.5D: función andar();

Cuando movemos a un personaje en un videojuego hay dos variables básicas: las coordenadas X e Y, es decir la posición horizontal y vertical a la que debe moverse el personaje, así pues definiremos la función:

function andar(personaje, x, y)

Dónde personaje hará referencia al personaje, y a las coordenadas a las que debe ir.

En jQuery, podemos por ejemplo ayudarnos de la función .animate() para mover al personaje, con lo que con algo como

$("#personaje").animate({left: x}, {duration 2000});
$("#personaje").animate({top: y}, {duration 2000});

Podríamos creer que nos es suficiente, pero nada mas lejos de la realidad, debemos tener dos aspectos mas en cuenta como la profundidad recorrida por el personaje para ajustar su tamaño y el tiempo que tarda el personaje en ir de un punto a otro.

Cálculo del tiempo en un movimiento básico

Hablo de movimientos básicos cuando el personaje se mueve de un punto a otro sin verse afectado por la variable de la profundidad. En un escenario en perspectiva caballera esto se produce en movimientos verticales como puede ser subir una escalera de mano, horizontales totales como caminar a lo ancho de la pantalla o en una mezcla de ambos como ver subir una cuesta de perfil una cuesta como veis en el ejemplo de la izquierda.
Continuar leyendo

Categorías: Aventuras gráficas, Programación, Proyectos
Etiquetado , , , , , , , , | Escribir un comentario
Domingo 13 d mayo dl 2012

Desde pequeño dos juegos han marcado parte de mi infancia: Por un lado Prince of Persia, el cual me encantaba no se si por sus movimientos reales, por su parecido con la película de Aladdín que era de mis favoritas o quizás por las peleas de espadas o una mezcla de todo junto. Por otro lado Monkey Island y es que este último me alucinó por la forma de interactuar con todo, por la sensación de ser libre, fué la primera aventura gráfica a la que he jugado y seguramente sea la mejor a un guión y justo por este último me animé hace unos pocos días a crear una aventura gráfica.

En mi cabeza rondaban ideas vagas sobre lo que quería, solo tenía claro que el protagonista sería un niño y en el juego aparecería un tren, nada mas. En un viaje junto a mi hermana le comenté esto y entre los dos fuimos ideando parte de la historia, poco después ella me dibujó algunos de los personajes ya que yo soy un negado en esto de dibujar.

Solo llevo al rededor de una semana con el, pero ya tengo claro que va a ser uno de los proyectos mas grandes (junto a Ralliza) que he programado por afición: Dibujar, escanear y digitalizar cada escenario, programar las acciones posibles con cada elemento del escenario, programar a cada uno de los personajes del juego, crear diálogos diferentes, mezclar todo y que encima funcione: Meses de trabajo que espero valgan la pena.

Empezando a programar la aventura: Decidiendo qué tecnología utilizar.

Empecé a leer y la verdad es que me sorprendí de la cantidad de juegos independientes que hay, la mayoría cortos y de no mas de un par de horas de juego, casi todos usan AGS Editor, un programa que facilita la creación de este tipo de juegos incluso sin tener idea de programación, pero en mi caso no servía y lo descarté rápidamente: Tengo que evitar las limitaciones que tiene el software desarrollado por terceros, además necesito algo totalmente multiplataforma y que no precise ninguna instalación por parte del usuario, así que he optado por usar lenguaje Web, estará en su totalidad realizado en AJAX, aunque la mayor parte del juego se ejecutará directamente en el cliente y serán pocas las interactuaciones con el servidor, guardar las partidas, descargar los escenarios y poco mas.

Continuar leyendo

Categorías: Aventuras gráficas, Entretenimiento, Programación, Proyectos
Etiquetado , , , , , , , , | Escribir un comentario
Blog de Miguel Díaz
Diseño Web por Miguel Díaz.