Miércoles 20 de octubre del 2010

Hoy me gustaría presentaros un proyecto personal que llevo tiempo realizando, se trata de un juego MMORPG (al estilo oGame, Hattrick) realizado en AJAX y orientado al mundo de las carreras callejeras. Es un proyecto que me entusiasmo cuando se me ocurrió la idea y me puse a trabajar duro hasta sacarlo a la luz, en poco menos de un mes ya eramos 200 jugadores y el ritmo no dejaba de crecer.

El juego:

Empezaremos con 30.000€, lo suficiente como para comprar nuestro primer coche y si lo deseamos hacerle algunas pequeñas modificaciones mecánicas, podremos conseguir mas dinero de varias formas, creando negocios, robando a otros usuarios o compitiendo contra ellos.

Podemos desafiar a cualquier jugador de la tabla, cuando el otro jugador acepte se simulará una carrera y ganará un usuario u otro dependiendo de las características de nuestro coche y del circuito, pero ojo la policía puede venir a por nosotros.

En el juego tenemos un ranking de jugadores con una puntuación social, las formas de conseguir puntos es o bien ganando carreras, comprando mejores coches, creando nuevos negocios o mejorando nuestro ejercito.

Además, podemos unirnos a una banda o crear nuestra propia banda de jugadores entre los que nos podremos ayudar, compartir estrategias, declarar la guerra contra otras, hablar mediante el chat interno con los demás miembros, etc.

Por motivos personales he tenido este proyecto medio abandonado durante mas de 4 meses y muchos de los usuarios lo han dejado, pero ahora, por fin puedo dedicarle tiempo y prometo que iré actualizandolo amenudo, agregando nuevas características y perfeccionando las que ya existen ;-)

Os invito a probar el juego de carreras. Ralliza

  • Facebook
  • Twitter
  • Meneame
  • BarraPunto
Categorías: Entretenimiento, Programación, Proyectos
Escribir un comentario
Jueves 9 de septiembre del 2010

Sin duda Google Chrome es un navegador que está teniendo un gran éxito y es que en tan solo dos años ha conseguido colocarse como el tercer navegador mas usado, por delante de navegadores como Opera o Safari.

Si a esto le añadimos que Google está desarrollando un sistema operativo (Chromium OS) para netbooks basado en este navegador creo que hay razones mas que suficientes como para tomarlo en serio y empezar a aprender a programar para el.

El desarrollo de las extensiones es distinto al de competidores como Firefox ya que se programan en HTML5 vitaminado pero no obstante es muy potente.

Las extensiones tienen permiso para almacenar datos en variables HTML5, recibir eventos (nueva pestaña, nueva página cargada, cierran pestaña, etc), inyectar javascript en las páginas, etc. Pero nunca podrán crear nuevas partes en el navegador (barras, nuevos menús, etc.)

Antes de continuar me gustaría aclarar que se van a dar por sabidos que el lector posee ciertos conocimientos en lenguajes de programación y diseño Web como JavaScript y HTML.

El primer paso es crear una carpeta donde incluir todos los archivos de la extensión. Una vez hecho esto empecemos diferenciando las partes que posee una extensión para Google Chrome.

Archivo manifest.json

Este archivo es obligatorio (debe estar codificado en UTF-8) y es el que contiene toda la información básica de nuestra extensión. A continuación ponemos un ejemplo y explicaremos línea a línea su significado

{
	"name": "Nombre de la extensión",
	"version": "1.0",
	"options_page": "opciones.html",
	"background_page": "pagina.html",
	"description": "Mi primera extension",
	"browser_action": {
		"default_icon": "icono.png",
		"popup":"popup.html"
	}
}

La segunda y tercera líneas son obligatorias y define el nombre y versión respectivamente.
La línea 4 es opcional y define el nombre de la página que se usará para modificar las distintas opciones de la extensión. Esta página deberá estar en la misma carpeta que el resto de archivos de la extensión.
En la línea 5 definimos “background_page”, que es una página que cargará de forma oculta cuando se inicie chrome. Es opcional, pero si nuestra extensión va a realizar acciones cada vez que por ejemplo se visite una página debemos añadirla.

En la línea 6 tenemos definida la descripción de nuestra extensión. Opcional.

En la línea 7 definimos el browser action, y en su interior definimos el icono que aparecerá en nuestra extensión y la página que se cargará en modo popup al hacer clic en el icono. Tened en cuenta que esta página carga unicamente al hacer clic en el icono y se cierra al salir de la misma.

OJO: Todos los archivos mencionados en el manifest.json deben estar en la misma carpeta o en una subcarpeta.

Continuar leyendo

  • Facebook
  • Twitter
  • Meneame
  • BarraPunto
Categorías: Chrome, Programación
Escribir un comentario
Jueves 8 de julio del 2010

Bueno, quizás algunos ya conozcais este blog, tras dos años cerrado he decidido volver a abrirlo, he logrado rescatar las últimas entradas para que así tenga lago de contenido.

Espero que lo pasemos bien!

  • Facebook
  • Twitter
  • Meneame
  • BarraPunto
Categorías: El blog
Escribir un comentario
Viernes 30 de mayo del 2008

Hola, aquí estoy una vez mas después de no se cuantas semanas sin decir ni mu! Jajaja, ya hay que darlo por imposible, nunca publicaré cosas de una forma estable jaja… En fin, a lo que iba, hoy haré un manual para todos aquellos que quieran navegar de una forma completamente anónima por Internet.

¿A que me refiero con navegar de una forma anónima?

Me refiero a que podamos navegar sin que los servidores de páginas Web que visitemos puedan averiguar ninguno de nuestros datos como, dirección IP, Navegador, Sistema Operativo, Proxys… etc. Es decir, de forma anónima xD.

Solo me queda por decir que el manual está orientado a equipos con sistemas *NIX como FreeBSD, GNU/Linux, etc. Y con en navegador Firefox.

Lo primero de todo será instalar en Mozilla Firefox la extensión Modify Headers que la podéis encontrar haciendo clic aquí.

Para instalarlo solo hay que hacer clic en “Añadir a Firefox” después clic en “aceptar e instalar” y por último al botón de “Instalar” y reiniciar el navegador.

Esta extensión se encargará de modificar las cabeceras del navegador cuando las solicite un sitio Web, de forma que podremos modificar datos como el idioma, el navegador que usamos, o el Proxy que estamos utilizando… Sin duda, a mi gusto es una de las mejores extensiones de Firefox para ayudar a navegar de forma anónima.

Configurando Modify Headers

Para configurar la extensión Modify Headers vamos al menu Herramientas>Modify Headers y nos aparecerá una ventana que nos permitirá elegir el nombre de las cabeceras y el el contenido que queremos mostrar.

De momento no vamos a modificar ninguna cabecera, pero indicaremos a Modify Headers que esté activo siempre, para ello hacemos clic en “Configuration” y seleccionamos la opción “Always On” y volvemos a hacer clic en “Configuration”.

Ahora vamos a modificar las cabeceras para ello seleccionamos la opción “Modify” de la lista de desplegables que hay arriba a la izquierda, escribimos el nombre de la cabecera en el primer cuadro de texto y en el segundo el contenido que queremos que devuelva nuestro navegador cuando le solicitan esta cabecera y hacemos clic en Add. Para muestra un botón:

En este caso decimos que la cabecera user-agent, que es la encargada de informar del nombre del navegador, versión, sistema operativo e idioma contenga la cadena de texto “Opera/9.50 (Windows NT 5.1; U; es-es)” que es la misma que usaría el navegador Opera 6.5 en un Windows XP, de esta forma el sitio Web creerá que está siendo visitado por un equipo con Windows XP y Opera 9.5 ;-). Podemos buscar otras cadenas de otros navegadores a través de google, hay miles de ellas.

Además, otra cabecera muy recomendable a modificar es la cadena x-forwared-for ya que muchos proxys usan esta cabecera para indicar el origen de de la conexión así que muchísimas páginas (no todas) creeran que al recibir información de esta cabecera que es la auténtica IP y desecharán la auténtica como si fuera un proxy, otras en cambio toman el valor como si fuera la dirección IP del proxy, en cualquier caso nos sirve para falsear datos. En este caso le pondremos el valor 1.3.3.7, lógicamente, en la vida real lo mas recomendable es que pongais una dirección IP creíble.

Bien pues, así quedaría nuestro Modify Headers:

En principio estas son todas las cabeceras necesarias a modificar, no obstante, recomiendo que se deshabilite el JavaScript en el navegador ya que también podrían intentar sacarse los datos por este tipo de scripts y ver inconcordancias en los datos es algo bastante sospechoso, para ello basta con ir a Edición>Preferencias, ir a la pestaña contenido y desactivar la opción “Activar JavaScript”.

Ahora, como vemos al entrar a una página como www.miip.es la cual se encarga de recoger nuestros datos con la única finalidad de mostrarlos en pantalla vemos que nos indica que usamos Opera 9.5, Windows XP, que nuestra dirección IP es 1.3.3.7 y que navegamos a través de un proxy, el cual es curiosamente nuestra IP real (esto lo solucionaremos en el próximo paso), cuando realmente estamos usando un sistema GNU/Linux, Firefox 3.0, nuestra IP es otra y no usamos ningún proxy xD.

Una vez hecho esto, pasaremos al segundo plato, ocultar nuestra IP definitivamente, lo haremos mediante Tor y su utilidad torify, sé que hay extensiones para Firefox que nos meten en los proxys de Tor, pero es mas efectivo usar Torify ya que así modificamos la función connect() del sistema sin que ni siquiera el navegador se entere que está usando un proxy. Para quien no lo sepa, Tor es una red de usuarios que actúan como proxys y de misma forma pueden conectar al resto de usuarios-proxys de la red, consiguiendo comunicarse de forma anónima por Internet.

Instalando e iniciando Tor

Bien, como es lógico necesitaremos instalar Tor, cada sistema tiene sus formas, si estais en una Debian o derivados podeis probar con un:
$ sudo apt-get install tor
aunque siempre tendréis disponible su descarga a través de la página Web oficial: http://www.torproject.org/index.html.es

Una vez instalado tor nos bastará con teclear en la consola:
$ torify firefox
Para iniciar Firefox a través de la red de Tor y así ocultar completamente nuestra dirección IP.

Ocultando nuestras cookies

Las cookies almacenan información que pueden servir a páginas Web, como nombres de usuario, etc. De nada serviría hacer todo lo que hemos hecho ya si el servidor puede recoger estas cookies y ver quienes somos, así que procederemos a deshabilitar las cookies del navegador, para ello usaremos la extensión CookieSafe, también pueden deshabilitarse desde las opciones del navegador, pero como hay algunos sitios Web que requieren de enviar y recibir estas cookies usamos CookieSafe para poder habilitar/deshabilitar su uso con un solo clic y solo a determinadas páginas Web.

Para instalarlo podeis hacelo desde aquí: https://addons.mozilla.org/en-US/firefox/addon/2497, se instala como cualquier plugin de Firefox.

Su uso es sencillo, una vez instalado nos aparecerá un botón en la parte inferior derecha del navegador, haciendo clic ahí disponemos de las opciones como Denegar las cookies globalmente o habilitarlas

Por último recomiendo borrar nuestros archivos y cookies que ya hayan almacenadas a través de Herramientas>Limpiar datos privados, y ya podemos navegar sin miedo a que nos reconozcan de forma alguna por internet ;-)

  • Facebook
  • Twitter
  • Meneame
  • BarraPunto
Categorías: Internet, Seguridad
Escribir un comentario
Sábado 23 de febrero del 2008

¡Por fin! Por fin está aquí la segunda entrega del curso de c/c++, muchas gracias por la espera y a todos los que han comentado algo sobre la primera entrega.

Bueno, realmente no es una segunda entrega, si no más bien una ampliación de la primera ya que únicamente se encargará en ampliar algo mas los conocimientos sobre la función printf que explicamos en la primera entrega. Entre el dómingo y el mártes que viene publicaré la segunda entrega que tratará con una pequeña introducción sobre variables (qué son, para que valen y cómo utilizarlas) y a realizar operaciones matemáticas con ellas. También haremos nuestro primer programa capaz de interactuar con el usuario.

Esta entrega aunque parezca que se centra en la función printf no lo hace realmente, si no que pretende que además de esa función se comprenda que son y cómo utilizar las secuencias de escape.

Todo será muy básico pero creo que es la mejor forma para introducirse en este mundo.

¡Allá vamos!

Conociendo mas afondo la función printf()

Cómo ya dijimos en la entrega anterior printf() ordena a la computadora que ejecute una acción, esta acción es concretamente imprimir algo en la pantalla, ya sea un carácter, una cadena de caracteres, un número, etc.

La función printf() puede imprimir la misma cosa de varias formas diferentes, es decir… el ejemplo que pusimos en la entrega anterior:

#include <stdio.h>
main(){
    printf("Hola mundo");
}

Imprimiría en la pantalla exactamente lo mismo que si hiciéramos lo siguiente:

#include <stdio.h>
main(){
    printf("Hola ");
    printf("mundo");
}

Esto se debe a que printf continúa imprimiendo justo después de dónde se quedo el anterior printf. Por tanto en este caso el primer printf imprime la palabra Hola seguida de un espacio y el segundo imprime justo después la palabra mundo, dando como resultado lo mismo que el primer ejemplo. Por tanto si lo que queremos es imprimir en una nueva línea debemos indicárselo a printf utilizando un carácter de nueva línea \n de esta forma para que como resultado nos imprima en una línea la palabra Hola y en otra línea la palabra mundo deberemos colocar el carácter nueva línea entre ambas.
Ejemplo:

#include <stdio.h>
main(){
    printf("Hola\nmundo");
}

Cómo se puede ver en este ejemplo hemos sustituido el espacio que había anteriormente entre las palabras Hola y mundo por un carácter de nueva línea, de esta forma conseguiremos imprimir lo siguiente
Hola
Mundo

Además del carácter especial (desde ahora llamado secuencia de escape) de salto de línea existen algunos otros cómo el del tabulador \t o el de retorno carro \r que coloca el cursor al principio de la línea. Todos ellos tienen la particularidad de que empiezan con una barra invertida, esto indica que lo que le sigue será una secuencia de escape en lugar de un carácter para su impresión. Por tanto si queremos que se imprima una barra invertida deberemos colocar \\ en lugar de una simple barra por que si no el compilador pensará que lo que queremos imprimir es una secuencia de escape en lugar del carácter “\”. A continuación pongo las diferentes secuencias de escape al lado de su significado.

  • \n Imprime un salto de línea.
  • \r Retorno de carro: Coloca el cursor al principio de la línea actual.
  • \t Inserta un tabulador.
  • \a Hace sonar la campana del sistema (el speaker del equipo).
  • \\ Imprime una barra horizontal.
  • \” Imprime una doble comilla.

Quizás parezca algo extraña la última sentencia de escape pero tiene su sentido.

Si yo escribo:
printf(“Hola mundo”);

indico que printf() debe imprimir lo que está colocado entre las comillas, en caso de que yo quisiera imprimir Hola “ mundo, no podría colocar
printf(“Hola ” mundo”);

ya que el compilador, al encontrar la segunda comilla pensaría que has cerrado las primeras comillas y que ya no quieres imprimir mas, por ello deberemos escribir

printf(“Hola \” mundo”);

y de esta forma el compilador interpretará correctamente lo que queremos que imprima.

La tercera entrega la tendréis entre el mañana y el martes seguramente. Los temas tratados serán:

Variables: Qué son, tipos, para que sirven y cómo utilizarlas
Operaciones matemáticas: Suma, resta, multiplicación y división y aplicación el las variables.
Ínteractuación con el usuario.

  • Facebook
  • Twitter
  • Meneame
  • BarraPunto
Categorías: Programación
Escribir un comentario
Jueves 7 de febrero del 2008

Llevo algunos días configurando unos servidores con Terminal Server en el trabajo y tuve un problemilla ya que algunas impresoras no se mapeaban correctamente en el servidor aunque este tenia los controladores perfectamente instalados, tras darle vueltas a este asunto nos dimos cuenta de que esto se debía a que el nombre del puerto que crea los controladores de HP tiene un nombre extraño y no comienza ni por USB, ni LPT ni COM. Esta simple tontería hace que los clientes no mapeen estas impresoras hacia el servidor y tiene un fácil solución.

Simplemente abrimos el regedit en las máquinas que tengan las impresoras instaladas, y vamos a:

HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default\AddIns\RDPDR

después hacemos Edición>Nuevo>Valor DWORD

Le ponemos de nombre FilterQueueType y presionamos intro.

Ahora le hacemos doble clic para cambiarle la información del valor y escribimos FFFFFFFF

Es un poco engorroso hacer esto en todos los equipos pero es la única solución que encontré.

Aclaro que aunque en el titulo diga Impresoras HP existen otras marcas que también hacen esto pero el problema lo he tenido casi siempre con impresoras HP.

Enlace relacionado: http://support.microsoft.com/kb/30…

  • Facebook
  • Twitter
  • Meneame
  • BarraPunto
Categorías: Servidores, Windows
Escribir un comentario
Miércoles 30 de enero del 2008

Hola a todos, reciente me estoy iniciando con la programación gráfica en sistemas *Nix y para ello estoy usando GTK ya que me parece un sistema muy generalizado, estable, completo e intuitivo a la hora de programar sobre el y el resto de alternativas (como Qt) no me han convencido nunca.

La cuestión es que aunque hay mucha documentación al respecto no toda está en castellano y es un engorro tirar de mano del diccionario cada dos por tres y mas cuando se hablan con tecnicismos. Ayer encontré un buen manual para programar en C usando las api’s de GTK y la verdad es que me está viniendo de lujo por eso me gustaría compartirlo con vosotros.

La documentación podéis encontrarla en http://wiki.gnome.cl/ProgramacionGTKenC.

Sin mas que añadir… hasta la próxima ;-)

  • Facebook
  • Twitter
  • Meneame
  • BarraPunto
Categorías: Programación
1 comentario

Curso de C/C++: 001 La Estructura Básica de un programa.

Domingo 20 de enero del 2008

Hola, aunque bastante retrasado sigo con el curso de C++, esta vez me he retrasado por que no tengo mucho ánimo de seguir el proyecto ya que apenas nadie comenta, pero debido a que recientemente alguién puso un comentario me volví a animar, hoy nos adentraremos en cual es la estructura qué sigue un programa, sin meternos demasiado o nada en aspectos técnicos como funciones específicas, etc.

Cuando me refiero a la estructura básica de un programa en C/C++ me refiero a la forma en la que está organizado su código fuente, es decir el orden básico que debe seguir cualquier programa para que una vez escrito el programa este sea interpretado correctamente por el compilador para convertirlo al lenguaje máquina.

En cualquier programa podremos encontrar unas características comunes, entre las cuales cabe destacar:

  • Las lineas de precompilado (introducción de librerias)
  • La funcion main (función principal).
  • El cuerpo de sentencias.
  • Los comentarios.

Ahora pongamos un ejemplo práctico y pasemos a describir linea a linea que es y a que parte corresponde.

#include <studio.h>
/* este programa muestra en la pantalla el texto "Hola   mundo" */
main(){
printf("Hola   mundo");
}

Veamos, la linea donde dice “#include <studio.h>” no nos debe preocupar por ahora ya que la explicaremos mas adelante.
La linea “/*Este programa muestra en la pantalla el texto “Hola mundo” */” es un comentario. Los comentarios sirven para indicar al programador que hace ciertas partes del código, su uso es muy frecuente y muy recomendado sobretodo cuando se realiza un programa con muchas lineas de código para poder encontrar rápidamente partes del código sin necesidad de leerlo todo de arriba a bajo. Un comentario debe comenzarse escribiendo “/*” posteriormente el texto del comentario en una o varias lineas y terminar escribiendo “*/” esto se hace así para que el compilador pueda diferenciarlos del resto del código además de que así se consigue el el programador pueda visualmente verlos mucho antes que de cualquier otra forma.

La linea “main(){” indica cual será el comienzo de la función main. La función main es la función principal de un programa. En ella se encontrará todas las ordenes que debemos darle al código fuente para que el programa funcione. Al arrancar cualquier programa en su versión binaria el sistema buscará automáticamente esta función y empezará a ejecutar las acciones en ella contenidas.

La linea “printf(”Hola mundo”);” es una orden que hemos incluido en la función printf la cual se encargará de mostrar en la pantalla el texto “Hola mundo”. No te preocupes si no lo entiendes, ya nos meteremos mas a fondo y explicaremos con detenimiento estas funciones poco a poco mas adelante.

La linea “}” indica el fin del lugar donde pondremos las “ordenes” de la función main, su comienzo ya lo hemos indicado en la linea “main(){” con el simbolo “{”.

Ahora vamos a la linea “#include ”, imaginemos que el compilador es un absoluto ignorante, que es casi por completo un analfabeto de manera que apenas sepa cosas muy básicas, en este caso lo mas probable es que no sepa que quiere decir (al igual que tu hasta hoy) que quiere decir “printf(”Hola mundo”);” ya que aún nadie se lo a explicado. Ok, pues la linea “#include ” podríamos decir que vale para insertarle un diccionario llamado “stdio.h” dónde entre otras cosas se indica para que vale la orden “printf”, como debe ser utilizada y como debe hacer para trasformarla a binario. A parte de este “diccionario” (a partir de ahora llamado librería) existen muchas otras librerías que puedes utilizar, es mas incluso tu mismo puedes hacerlas, pero todo esto lo veremos mas adelante. Por ahora solo decirte que existen ciertas librerías que son estándar y que por tanto se incluyen en la mayoría de compiladores para que tu puedas introducirlas en tus programas sin necesidad de descargarlas.

Como veis ha sido un capitulo corto, pero hemos aprendido por fin las partes básicas y que tienen en común todos o la mayoría de los programas.

Si te queda cualquier duda, no entiendes algo por favor escribe un comentario y trataré de ayudarlo o de dejarlo mas claro actualizando el post.

En la próxima entrega crearemos un programa básico, explicaré varias “ordenes” (a partir de ahora llamadas funciones) así como el uso de variables y alguna cosilla mas.

  • Facebook
  • Twitter
  • Meneame
  • BarraPunto
Categorías: Programación
Escribir un comentario
Martes 15 de enero del 2008

Hola queridos visitantes. He recibido muchos mensajes de amigos que leen el blog animándome a que no lo vuelva a dejar y otros criticandome por volver a empezar a escribir, a todos ellos os doy las gracias y os comunico mi firme intención de continuar escribiendo mensajes en el de una forma mas o menos continuada.
Para “forzarme” a escribir al menos una vez a la semana un post en el blog he decidido comenzar a crear un cursillo de c/c++ que publicaré cada sábado a partir del próximo sábado día 12. De esta forma consiguo obligarme a escribir en el blog y a la vez os recompenso por estos meses en los que estubo de baja el servidor.

Nada mas por aquí. Un enorme abrazo.

  • Facebook
  • Twitter
  • Meneame
  • BarraPunto
Categorías: Programación
Escribir un comentario
Blog de Miguel Díaz
Diseño Web por Miguel Díaz.