Archivo para mayo, 2010

Microsoft Tag en el Metro de la Ciudad de México te lleva al cine gratis

IMG_2251 Antes de empezar el post quiero decirles… continúen leyendo y ganaran una entrada doble al cine 🙂 .

 

El día de hoy me sorprendí mucho al ver un anuncio en el metro… justamente me encontraba en la estación consulado línea 5 , cuando volteo y vi el anuncio, pero era algo particular que reconocí … era un TAG , aja un Microsoft Tag ( hable de Microsoft tag en este post ) y pues la verdad luego luego saque mi celular “me vi súper raro Geek apuntando mi celular aun anuncio”  y utilice la aplicación de TagReader 😀 para ver la imagen con las instrucciones para ganarme un pase doble al cine 😉 .

 

Tengo algunos comentarios para esto que viví:

1.- Me alegra ver que se empiecen a utilizar este tipo de tecnologías en nuestra vida diaria, espero que cada vez sea mas frecuente; el mundo de los móviles pronto será un excelente mercado, “si no es, que ya lo es”.

2.- Sufrí hace apenas unos días un conato de asalto. Y la verdad veo un tanto peligroso con el nivel de inseguridad que vivimos actualmente sacar el celular a vista de todos, para descifrar el código de Microsoft TAG.

3.- Para poder descifrar el TAG es necesario contar con internet y algunos equipos móviles gastan crédito (dinero) en la conexión y transferencia de datos por lo que el boleto del cine no me sale tan de a “gratis”.

4.- Esto podría ser un buen ejemplo de lo que nos espera para un futuro. La realidad aumentada será de las cosas que nos sorprenderán en un principio y poco a poco se convertirán en cosas cotidianas

5.- Recuerdo que cuando estuve investigando, sobre Microsoft Tag llegue a algunos link’s donde hablaban de campañas publicitarias con mucho éxito en estados unidos y Europa, utilizando esta tecnología, tal vez aquí en México empiece a desarrollarse este mercado.

IMG_2244 - copia

Anuncio en el metro que te hace ganar una entrada doble al cine

 IMG_2247 IMG_2245

*Edite la imagen del TAG para que no hagan trampa y escaneen el código en la estación del metro 😀

PD.- Ya les contare si , si me dieron mi entrada gratis al cine 😉

Artículos relacionados:

Microsoft Tag – Código secreto en tus imágenes –

Video de como crear tu Microsoft TAG personalizado

Twitter de Microsoft TAG

Anuncios

Firefox en la escuela – Firefox en la UPIICSA

Eventos, eventos y mas eventos…

Ahora si el twitter ha estado activo, y a todos les esta dando eventitis xD ..

image 

Para empezar tenemos un evento en la UPIICSA organizado por: La sociedad de alumnos del turno matutino de UPIICSA -> Ricardo Matias Maturano y más colaboradores.

Al escribir el post aun no publican la lista de platicas, pero si la fecha:

¿Cuando?

Martes 25 de Mayo del 2010 a partir de las 09:00

¿Donde?

Unidad Profesional Interdisciplinaria de Ingeniería y Ciencias Sociales y Administrativas (UPIICSA), Av. Té No. 950, C.P.: 08400, Col. Granjas México, Iztacalco, D.F.
Auditorio B Generalísimo Morelos, ubicado en el edificio cultural planta baja

Si eres de otra escuela 🙂 no te preocupes por que firefox en la escuela estará en muchas otras . Visita el link inferior para mas información.

Link: http://www.firefoxenlaescuela.org/?page_id=509

Generando números aleatorios en C y C++

Por que nunca esta por demás…

Primero que nada déjenme decirles que el lenguaje C incorpora dos funciones [rand() y srand()] las cuales son pseudo generadoras de números aleatorios; que quiero decir con “pseudo” , pues que en realidad no generan números aleatorios, si no que siguen un algoritmo, que muestran el resultado de un conjunto de operaciones (“numero aleatorio”) ; que al final de cuentas puede ser predecido teniendo dicho algoritmo.

Función rand()

Hablemos de la función rand() esta genera un numero aleatorio en el rango de 0 y 32767 (solo enteros) ; para obtener estos números el algoritmo de la función rand() parte de un “numero semilla” , quiero decir un numero inicial al cual somete a un conjunto de operaciones para así generar los números “aleatorios”, lo único malo de esta función es que siempre que queramos generar números aleatorios este algoritmo siempre partera de la misma semilla y realizara las mismas operaciones, por lo que obtendremos los mismos números aleatorios una y otra vez… sin importar las veces que ejecutemos el programa.

A continuación un ejemplo:

   1: #include <iostream.h>

   2: #include <stdlib.h>

   3: //Dentro de stdlib.h encontramos la funcion rand()

   4: #include <conio.h>

   5:  

   6: int main(){

   7:  

   8: long int aleatorio=0;

   9:  

  10: cout<<"Programa que genera numeros aleatorios con la funcion
rand()"
<<endl;

  11: aleatorio = rand();

  12: cout<<"El numero aleatorio generado es: "<<aleatorio <<endl;

  13: cout<<"El numero generado se encuentra en un rango del 0 al "<< RAND_MAX <<endl;

  14: getch();

  15:  

  16: }

La función rand() se encuentra en la librería stdlib.h, la palabra reservada RAND_MAX -> regresa el valor máximo de la función rand().

Hasta aquí creo que todo simple… empezamos con la emoción al momento que queremos un numero aleatorio entre un rango personalizado, por ejemplo del 0 al 5:

   1: #include <iostream.h>

   2: #include <stdlib.h>

   3: #include <conio.h>

   4:  

   5: int main(){

   6: long int aleatorio=0;

   7:  

   8: cout<<"Programa que genera numeros aleatorios de rango 0 a 5"<<endl;

   9:  

  10: aleatorio = rand() % 6;

  11: cout<<"El numero aleatorio generado es: "<<aleatorio <<endl;

  12: getch();

  13: }

Estamos utilizando el operador modulo (%) que es el residuo de una división, para delimitar el rango de la variable “aleatorio”.

Analizando este paso, suponemos que el numero obtenido de la función rand() es el 12 y lo dividimos entre el numero 6;  obteniendo su modulo (residuo) que es igual a 0 (imagen1).

imageimagen1

La variable “aleatorio” que es igual a “0”  se encuentra en el rango de 0 a 5 y podemos confirmar que todas las variables “aleatorioque sean obtenidas aplicado a la función rand() una operación “modulo de 6 [ rand() % 6 ] se encontraran en este rango (0 a 5).

Para confirmar este argumento; asignemos otro valor ficticio a nuestra función rand(), por ejemplo el numero 8:

imagen2 

El numero obtenido es el 2, por lo que una vez mas nuestra variable “aleatorio” se encuentra en el rango de 0 a 5. Así podemos continuar asignando valores ficticios y arbitrarios a la función rand() y demostraremos que la variable “aleatorio” puede obtener el valor 0 ó 1 ó 2 ó 3 ó 4 ó 5  sea cual sea el dividendo con el que alimentemos la división.

El residuo de 12 entre 6 es cero “0” , lo comprobamos con el siguiente programa:

   1: #include <iostream.h>

   2: #include <stdlib.h>

   3: #include <conio.h>

   4:  

   5: int main(){

   6: int residuo=0;

   7: /*

   8: inicializar la variable var_rand en 12 es como

   9: simular que el resultado de la funcion

  10: rand fue igual a 12

  11: */

  12: int var_rand=12;

  13: //Digamos que equivale a

  14: //aleatorio= rand() % 6

  15: residuo= var_rand % 6;

  16: cout<<"El numero aleatorio generado es: "<<residuo <<endl;

  17: getch();

  18: }

La variable var_rand viene a emular el resultado de la función rand() solo que aquí nosotros damos el valor arbitrariamente (en este caso el 12).

🙂 muy bien , con eso espero allá quedado claro; ahora si quisiera un numero aleatorio entre el 0 y el 20 , solo cambiaria la línea del programa:

aleatorio = rand() % 21;

y si lo quiero en  un rango 0 a 50 entonces:

aleatorio = rand() % 51;

… y de rango 0 a 87:

aleatorio = rand() % 88;

Como ya nos dimos cuenta la formula es sencilla [ aleatorio = rand() % (N+1); ], si queremos hacer un rango de 0 a n , entonces la línea de código quedaría así:

aleatorio = rand() % n+1;

 
Pero aun con el rango continuamos con el problema que cada vez que ejecutamos el programa se generan los mismos números.

Función srand()

Para solucionar ese problema contamos con la función srand() con la cual indicamos el numero semilla con el que empezara el algoritmo para generar números aleatorios.

#include <iostream.h>

#include <stdlib.h>

#include <time.h>

#include <conio.h>

 

int main()

{

 long int aleatorio=0;

 srand(1);

 aleatorio = rand()%11;

 cout<<"Numero aleatorio de 0 a 10"<<endl;

 cout<<aleatorio;

getch();

}

Ya podemos generar realmente números aleatorios el único problema es que tenemos que cambiar el numero semilla manualmente (ósea borramos en el código el numero 1 de la función srand(1) y escribimos otro srand(34) )  efectivamente salen números aleatorios … pero si queremos GENERAR VARIOS NUMEROS ALEATORIOS EN UNA MISMA EJECUCION DEL PROGRAMA:

   1: #include <iostream.h>

   2: #include <stdlib.h>

   3: #include <time.h>

   4: #include <conio.h>

   5:  

   6: int main()

   7: {

   8:  long int aleatorio=0;

   9:  cout<<"Programa que genera 10 numeros aleatorios con srand(1)"<<endl;

  10:  srand(1);//Utilizo el numero 1 como semilla

  11:  for(int i=1; i<=10; i++){ // Ciclo for para generar 10 numeros

  12:  aleatorio = rand()%11;

  13:  cout<<i<<".-Aleatorio = "<<aleatorio<<endl;

  14:  }

  15: getch();

  16: }

🙂 Wow!! funciona… …. aunque tiene un detallito… si lo ejecutamos de nuevo SALDRAN LOS MISMOS NUMEROS y no queremos eso… lo que queremos es que cada vez que se ejecute el programa genere números aleatorios nuevos. Para solucionarlo utilizaremos un truquito el cual es inicializar nuestra semilla con la hora del sistema rand(hora_del_sistema) 😀 .

1.- Agregamos la librería time.h

2.- Modifico la línea srand(1) a srand (time(NULL))

   1: #include <iostream.h>

   2: #include <stdlib.h>

   3: #include <time.h>

   4: #include <conio.h>

   5:  

   6: int main()

   7: {

   8:  long int aleatorio=0;

   9:  cout<<"Programa que genera 10 numeros aleatorios con srand
(time(NULL))"
<<endl;

  10:  srand (time(NULL)); //Utilizo la hr del sistema como semilla

  11:  for(int i=1; i<=10; i++){ // Ciclo for para generar 10 numeros

  12:  aleatorio = rand()%11;

  13:  cout<<i<<".-Aleatorio = "<<aleatorio<<endl;

  14:  }

  15: getch();

  16: }

*DATO: la función srand() solamente la podemos usar una vez en el programa no traten de engañar al programa usándola varias veces por que los tirara de a locos

bueno.. esta es una forma BASICA de generar números aleatorios, existen otras cuantas como por ejemplo usar la función  getpid(); (regresa el ID del programa en ejecución asignado por el Sistema Operativo)  envés de usar time(NULL); y otras miles de formas mas.

Si desean pueden descargar el código de estos ejemplos:

page_white_compressed1[1] Descargar ejemplos de números aleatorios en C y C++

-Los ejemplos fueron compilados con Borland C++ 5.2

 

El dato extra:

Existen otras dos funciones para generar numero aleatorios las cuales son: drand48() y srand48() si desean saber mas de ellas visiten este link

Puedo recomendar un libro que se llama: El arte de la intrusión de autor Kevin Mitnick y editorial ALFAOMEGA.RA-MA donde en su primer capitulo se aprecia la importancia de generar números aleatorios que realmente sean aleatorios 😀 que mejor ejemplo que un CASINO ELECTRONICO ¿no?.

Update:

He mejorado la explicación del por que utilizamos el modulo para delimitar a un rango la generación de números aleatorios.

Si desean hacer un programa que genere números aleatorios con un rango definido ( numero mínimo a obtener y numero máximo a obtener) pueden revisar el siguiente programa: page_white_compressed1[1] DESCARGAR

[+][+][+]

Fuentes:

http://www.chuidiang.com/clinux/funciones/rand.php

http://www.agner.org/random/

http://www.daniweb.com/forums/thread1769.html

Complemento para Windows Live Writer

¿Como funciona la tarjeta del metro? – México DF

Hola a todos, antes que nada quiero aclarar, este post esta totalmente basado de fuentes indirectas, que quiero decir con ello, artículos de internet ( en su mayoría de otros países ), con los cuales “denote una similitud con la tarjeta del metro distrito federal”. Una vez aclarado lo anterior empezamos…

A quien no le ha surgido la duda aunque sea una vez… de como funciona las tan famosas y “revolucionarias” tarjetas del metro, yo creo que a uno que otro si, ó bien alguien con la mente mas inquieta a querido saber como poner crédito a su tarjeta de forma clandestina.

Es necesario mencionar, que en realidad las tarjetitas trabajan con un mecanismo bastante sencillo (la naturaleza de la física) y que no somos los primeros ni los únicos en usarlas; en este articulo se menciona su uso desde 1945 como una herramienta de espionaje para la Unión Soviética. Pero pasemos a lo que realmente interesa hablar de la tarjeta del metro (México DF).

Antecedentes:

En junio de 2006, se pusieron a disposición de los usuarios del Metro la venta de 12 mil tarjetas, con cargo inicial de $300 pesos, lo que equivale a 150 viajes, es decir conserva su valor de $2 pesos, lo que significa que para el usuario el costo del plástico era GRATUITO.  En septiembre de ese mismo año, el STC vendió  5 mil 500 tarjetas más, con un costo de $200 pesos y equivalente a 100 viajes.

Actualmente el costo de la tarjeta es de $10 pesos y el costo del viaje $3 pesos, ¿Pero como le hace el torniquete para saber cuanto tenemos de crédito y como descontarnos dicho viaje?. La tecnología usada en estos dispositivos (tarjetas plásticas) se llama Radio-frequency identification (RFID) [identificación por radiofrecuencia] , por lo que a las tarjetas se les denomina “tarjetas de identificación de radiofrecuencia”, en inglés: RF cards, o RFID cards, su funcionamiento se basa en un concepto sencillo “el uso de radiofrecuencias” teniendo así un sistema de Lector[Receptor] – Tarjeta [Transmisor]. Nuestra tarjeta de metro tiene un sistema pasivo ( no cuentan con energía propia ) y dentro de ella se encuentra un chip (circuito integrado) conectado a un sistema de espiras de alambre cercanas al borde, mas o menos se vería así:

image image
Como se vería por dentro la tarjeta del metro de darkchicles* Tarjeta del metro de darkchicles 😉

Las espiras de alambre funcionan como bobina receptora y como antena emisora, para establecer una comunicación entre la tarjeta y el lector.

Al momento de pasar nuestra tarjeta frente al lector lo que sucede es que existe una comunicación a través de un campo magnético variable generado por el lector.

image

imageUna vez que la tarjeta es alcanzada por el campo magnético la bobina integrada en ella genera pulsos eléctricos (por la Ley de Inducción de Faraday-Lenz) que alimentan el CHIP el cual esta programado para  emitir una señal atreves de la antena con el código de identificación de la tarjeta. En ese momento el Lector se convierte en Receptor y la tarjeta en emisor

image

 

image

 

El lector a su vez esta conectado a un nodo centralizado (base de datos central) donde se asocia la ID de la tarjeta con los diferentes datos de la misma ( crédito/saldo de la tarjeta, lugar, hora , etc… ) en el caso de que el lector sea una terminal de torniquete; el sistema validara que se cuente con el saldo suficiente para realizar el viaje si es así restara saldo de su tarjeta y permitirá el movimiento de los torniquetes dando acceso al usuario de lo contrario mandare un aviso y no permitirá el acceso.

 

image 

 

Y así es como funciona una tarjeta del metro… aunque me gustaría mencionar algo que es importante:

 imageAl tener un sistema como el que mencione es posible sacar estadísticas y por lo tanto predicciones de cuanto, donde y como gasta el usuario el crédito de una tarjeta. Si la ID de una tarjeta es asociada a un USUARIO entonces podríamos saber la rutina de una persona , en que lugar se encuentra por la proximidad de la estación del metro , su gasto mensual en pasajes , si esta acompañado en caso de que pase 2 veces la tarjeta en muy poco tiempo … esto por mencionar algunas; cuando buscaba información sobre este tema encontré que hay personas que no están de acuerdo con la adopción de esta tecnología ya que se corrompe la privacidad del usuario.

Y aunque parezca avanzada esta tecnología, en realidad también tiene sus defectos como por ejemplo: la clonación de tarjetas logrando descontar el crédito de otras tarjetas (dicho con otras palabras ROBAR el crédito de otras personas ), pero esto ya esta muy visto aun mas con tarjetas de crédito y debito , por eso mencionare otra debilidad de esta tecnología; El ataque DoS (ataque de denegación de servicio) tirando el servidor 😉 .

 

image

Tarjeta que hace uso del Electromagnetismo

 

[+][+][+]

 

 

Extra:

Algunos otros países donde se utiliza esta tecnología son Canadá (Montreal), Israel, Bogotá y Pereira en Colombia, Stavanger en Noruega, Luxemburgo. En casos innovadores se propone implantar un chip en la piel de cada persona para tener una exacta identificación de la misma [Fotos del chip implantado 1 2]

Ya por ultimo:

Todo este post lo escribí por simple pacer | curiosidad y espero les sea de gran ayuda e utilidad.

EN CASO DE PRESENTARSE ALGÚN PROBLEMA CON LA TARJETA
[Metro México DF] -  Favor de llamar a Unidad de Orientación e Información, extensiones 5009 y 5051 (de lunes a viernes, de 09:00 a 18:00 horas).

 

Algunas fuentes:

http://www.profisica.cl/comofuncionan/como.php?id=14

http://www.oem.com.mx/elsoldemexico/notas/n621719.htm

http://www.sevillametro.com/2009/03/funcionamiento-de-las-tarjetas-en-el.html

http://elmetro.wordpress.com/2007/09/10/la-nueva-tarjeta-recargable-del-metro-de-mexico/

http://sincontratiempo.wordpress.com/2007/11/29/el-tiempo-en-que-viajar-en-metro-es-gratis/

*1La imagen fue obtenida de wikipedia y modificada para este post.

Nube de etiquetas