miércoles, 8 de febrero de 2012

Proyectos anteriores [Lab]


Para esta entrada, hablaré acerca de mi proyecto elaborado en el semestre de primavera del 2011 para la materia de programación orientada a objetos, en el cual elaboré una aplicación para el sistema iOS de Apple para dispositivos móviles.




¿Qué lenguaje y por qué?
Para realizar un proyecto en iOS es necesario conocer el lenguaje de programación Objective-C, el cual es un lenguaje de programación puramente orientado a objetos, se puede decir que Objective-C es un superconjunto de C pero con un modelo de objetos y es el lenguaje principal de Mac OS X, por lo que a las personas interesadas en realizar un proyecto en iOS, tienen que ir conociendo este lenguaje de programación y para mi, fué una buena forma de empezar a conocer la programación orientada a objetos.


¿Qué herramientas?
Para poder desarrollar una app para iOS, necesitas el iPhone SDK, el cual incluye una serie de programas desarrollados por Apple como es xcode, el cual es el principal para poder realizar las aplicaciones en código, interface builder, para crear la interfaz de usuario e instruments, para probar su mantenimiento, su instalación es sencilla, solamente tienen que registrarse como desarrolladores aquí lo cual es completamente gratuito y de ahí pueden descargarlo, aunque es muy pesado (Algo como 3,15 gb), por lo cual lo tienes que descargar con tiempo si tu internet es lento.


¿Para que sirve?
Mi proyecto se trata de un sistema de restaurantes, en el cual se hacen pedidos, puedes ver un menú actualizado del restaurante, al igual que llamar al número telefónico de éste, ubicar sucursales cercanas a ti, cupones QR y promociones del restaurante.


¿A quien va dirigido?
Esta dirigido a un negocio de restaurantes, para personas que tengan dispositivos que corran con iOS y con el simple hecho de aumentar el ingreso de comida para llevar y aumentar la promoción de un negocio de comidas.


Este es mi diseño de clases lógica que obtuve al final del semestre.
Haz clic para agrandar


Algo importante es, que para desarrollar una app en iOS, debes de saber como funciona el MVC el cual es un patrón de las siglas en inglés de Model, Controller, View y divide el código en estas tres facetas del proyecto.



Este es un ejemplo, de como utilicé el modelo MVC en mi proyecto aplicado en la vista de mapa geográficamente, entonces tenemos un controlador que maneja el modelo y la vista.


En el siguiente video, muestro la interfaz gráfica que realicé utilizando la herramienta de interface builder.





 Y en este otro video, pueden ver la demostración final del proyecto de programación orientada a objetos.


Espero que si tienen una duda, sobre alguna cosa sobre iOS, tal vez les pueda ayudar, les dejo el link de los avances, semana tras semana de la materia.


Programación Orientada a Objetos

Tarea 1: Sistema determinista.


Sistema determinista.
Un sistema, es una sucesión de componentes que forman una función, un proceso o un diseño de procedimientos para llegar a un objetivo o meta, mediante el manejo de cuerpos, datos o energía, por lo tanto un sistema tiene elementos integrados que trabajan en conjunto para formar un todo organizado cumpliendo un propósito.

Un sistema determinista, es una de las diferentes clasificaciones que se pueden dar de los sistemas, en particular, este tipo es aquél que sus elementos se relacionan de una forma totalmente predecible, entonces tiene componentes que presentan comportamiento dinámico, el cual es predecible ya que este tipo de sistema, realizará solamente lo que nosotros le digamos que haga.  

Podemos decir, que un candado cumple con los requisitos de un sistema determinista, por lo tanto, haré una explicación de como considero a éste como un sistema determinista.

El Candado.



Se puede decir que un candado, es un objeto que se utiliza para bloquear el acceso cuando cierto tipo de puertas, que regularmente no tienen una cerradura integrada, el cual se compone de una carcaza, en la que tiene un mecanismo de bloqueo y un anillo de metal, que puede estar abierto o cerrado, siendo controlado casi siempre por una llave.

Su funcionamiento.



Como podemos ver en el video, el anillo se va a subir o bajar cuando el candado se abra o se cierre, por dentro de la carcaza, lo que se hace es un mecanismo de bloqueo, el cual verifica mediante cilindros con resortes o clavijas, si la forma de la llave es igual al patrón que tienen, para después de darle vuelta a la llave este pueda mover el anillo, dejándolo libre para abrir.


Pseudocódigo



El pseudocódigo es muy simple, pero considero que es una forma de como representar este sistema de bloqueo en código, simplemente son estructuras selectivas comparando si se encaja con las clavijas.


Diagrama de estados.
Por lo tanto, para demostrar que este sistema es un determinista, he realizado un diagrama de estados en donde tenemos:


 * El estado inicial, no proviene de ningún otro nodo y en este caso es la entrada de la llave.
 * Los estados son los nodos, en el cual considero que es el que los cilindros encajen en la clavija, que se encuentran adentro de la carcaza, al igual que al no encajar pase al estado cerrado o cuando todos encajen pase el estado abierto.
 * La transición, en este caso es cuando un solo cilindro ya encajó en la clavija, para pasar al siguiente estado, este esta representado mediante una arista dirigida uniendo los nodos.
 * Los estados finales están en verde o rojo, el cual corresponde a abierto o cerrado.

Podemos decir, que el candado es un sistema determinista, cumple con todas sus características y se puede considerar como un sistema simple.

Referencias.
Imágenes -  The lock smith training company
Video - Animated: How locks works
Diagrama de estados - Wikipedia



lunes, 6 de febrero de 2012

Tarea intro: Lenguaje Ensamblador

Para realizar, el reporte introductorio de la materia de cómputo integrado, sobre lenguaje ensamblador, realicé una serie de pruebas mediante programas utilizando el lenguaje C y generé código ensamblador mediante el compilador, que como lo hemos visto en unidades anteriores, es un lenguaje de programación de bajo nivel que representa simbólicamente códigos máquina ocupándose del trabajo útil.

Para verificar esto, hice diferentes pruebas y ver que pasaba con el código que el compilador generaba en ensamblador. 

Para empezar realicé un código solamente un printf y con un return, para analizarlo.

Para generar este tipo de código se utiliza el siguiente comando: 
    gcc -S ejemplo.c      
Lo cual genera un ejemplo.s.
Las líneas que tienen inicio con puntos, como por ejemplo ".file", ".text" ".glob" son pseudo-operaciones los cuales llevan el nombre de directivas de ensamblador, son comandos que indican a el ensamblador cómo va a armar el archivo. 

Las líneas que comienzan con un texto, luego de dos puntos como "main:", son etiquetas. 

 Las demás son instrucciones ensamblador. En este código podemos diferenciar en las líneas 9 y 10 el prólogo de la función y en la línea 15 el epílogo de la función, los cuales expliqué anteriormente. 

 La línea 16 alinea la pila hasta un límite de 16 bytes, al reducir a cero la parte inferior a 4 bits de %esp, la cual luego de experimentar, me doy cuenta que no es necesaria. 

 La línea 12 resta 16 bytes desde el apuntador de la pila, lo que da como resultado 16 bytes de espacio para main, la cual luego de experimentar, me doy cuenta que reserva memoria, la cual no sabemos cuanto es. 

Para este reporte, decidí analizar un programa en C que te imprime las tablas de multiplicar de 1 al 10.
Lo cual genera:
El cual he optimizado:

Para una mejor compresión de los códigos, adjunto las diapositivas que he puesto en clase, junto con su explicación.
Tarea-ensamblador



Referencias. 

miércoles, 1 de febrero de 2012

Cantamela!: Propuesta formal

Roberto Martínez

Introducción
En los últimos años, el desarrollo de dispositivos móviles inteligentes ha ido avanzando a un paso relativamente rápido, este tipo de dispositivos a venido a revolucionar el campo de la computación y se han hecho populares en la población mexicana.

Actualmente el desarrollo de sistemas operativos móviles robustos dedicados especialmente a dispositivos con pantallas grandes totalmente táctiles, tienen un sin fin de aplicaciones especiales para utilizar el diferente hardware, por lo que tenemos un campo amplio de desarrollo para cubrir las necesidades e innovar con nuevas tecnologías.

Cantamela! vine a innovar a la sociedad mexicana con una aplicación completamente en español para el sistema operativo android, en donde una persona que desee el nombre de una canción simplemente con un toque en la pantalla, usted empieza tararear, cantar o poner cerca de una bocina su dispositivo para que el sistema después de un momento tenga una respuesta y así de fácil obtener el nombre de dicha canción.


Estado de arte
El reconocimiento de contenido de música, no es nada reciente, uno de los primeros servicios que ofrecía esto fue Shazam en el 2002, cabe mencionar que muchos de los avances hechos en este ámbito han sido dirigidos a detectar la infracción de derechos de autor o copyright.
Shazam

Dado el amplio contenido musical que ya existe, no es ninguna tarea trivial el reconocer una canción con sólo parte de ella, se han identificado muchas dificultades para hacer este reconocimiento, como por ejemplo las muchas maneras en que la música es codificada, o si son grabadas en diferentes bit rates que la original, además, se tiene que poder identificar sin importar la calidad de la grabación o la interferencia presente en el medio.

El software existente que reconoce una canción con sólo proveer una parte de ésta, crea una etiqueta denominada como firma o huella digital, la cual es única para cada canción y a través de ella se han creado bases de datos relacionales que facilitan el servicio. Así como hay muchas desventajas al analizar audio en tiempo real, también hay ventajas que facilitan la creación de esta firma digital, tales como el tempo, letra, tonos y ritmo de la canción, con los cuales se define la firma para dicha canción.

El proceso de identificación del algoritmo, es muy similar a la forma en la que los expertos forenses analizan una huella táctil de un sospechoso, pués la comparan con aquellas encontradas en la escena del crimen. En ambos casos, se buscan varios puntos de similitud entre las muestras y así se asegura la credibilidad del servicio.

Shazam al igual que soundhoud son un servicio que hace lo mencionado anteriormente y es soportado por dispositivos Android, iPhone, Blackberry, Nokia, Windows Phone y varios teléfonos Sony Ericcson, una vez que se encuentra la canción buscada en la base de datos, ofrece funcionalidades para ver detalles del artista, álbum, título, género, letra, una imagen del álbum y ligas para descargar la canción desde iTunes o la tienda Amazon MP3.




Midomi ofrece un servicio muy similar, pero en la web, te permite grabar un segmento de audio, para después hacer la búsqueda e identificación, su equivalente móvil es SoundHound. Otra alternativa de escritorio es AudioTag, excepto que se maneja no la grabación directamente, sino que se debe proporcionar un archivo que la contenga.

Existen otras aplicaciones que hacen el proceso de identificación sólo con proveer las notas de la canción, tal como lo hace musipedia, sin tomar en cuenta el tempo ni letra.

Volviendo al aspecto móvil, MusicID es otra aplicación desarrollada para varias plataformas (incluidas iPhone y Android), que ofrece la misma funcionalidad que Shazam y SoundHound, pero por supuesto, cuenta con su propia base de datos de firmas de canciones.

Este servicio de reconocimiento de audio, es ofrecido nativamente en Windows Phone (Mango) en el motor de búsqueda Bing, llamado Bing Music Search. Sin embargo, este servicio no es tan preciso como lo son Shazam y SoundHound, además de que al ser un servicio relativamente nuevo, cuenta con una base de datos más limitada. 

Tecnologías móviles relevantes.
En la siguiente tabla, mostramos un comparativo de los sistemas operativos más importantes.
Haz clic para agrandar

Por lo tanto, podemos ver que android es uno de los sistemas operativos más robustos en el mercado y que tenemos la facilidad con el usuario de llevarlo a diferentes plataformas, para que así puedan usar la aplicación, ya sea en su tablet o smartphone con una buena experiencia.

Nuestra propuesta.
Nuestra idea, es una aplicación completamente nueva en la cual utilizaremos tecnologías que sean libres para cualquier persona, ya que las que existen actualmente en el mercado necesitan de cuotas para obtener referencias de canciones, incluso algunas otras utilizan algoritmos patentados los cuales no se pueden utilizar.


Esperamos que para finales de mayo, con apoyo de librerías gratuitas y usando SDK del sistema operativo android,para poder utilizar lo que es la red wifi al igual que las redes 3g/4g, y el microfono del producto para así poder tener un producto que sea funcional al usuario.


Es un reto realizar una aplicación de esta magnitud, ya que como hemos hablado, hay empresas que llevan años desarrollando este tipo de tecnología, lo que nosotros proponemos es tomar con ayuda de APIs especializadas y así poder realizarlo.


Esperamos utilizar identificación de musica open-source, entre ellos hemos encontrado algunos como echoprint y otro proyecto parecido como MusicBrainz, los cuales estaremos probando durante el semestre.


Algo que tiene de relevante y por lo cual Cantamela! es diferente a las demás, es porque nuestro proyecto será de código abierto para que personas que lo quieran mejorar o estudiarlo, puedan hacerlo, algo que soundhound y shazam no lo tienen.




Referencias.

Autor desconocido. Shazam (service). Fecha de consulta: 31 de enero de 2012. <http://en.wikipedia.org/wiki/Shazam_%28service%29>
Bohbrink, Hannah. Can you name that tune? Song Recognition without Identification. Fecha de consulta: 31 de enero de 2012. <http://forum.davidson.edu/psy379/?p=1390>
K. David. Mango’s Music Search is OK But Doesn’t Trump Shazam. Fecha de consulta: 1 de febrero de 2012. <http://mobilitydigest.com/mangos-music-search-is-ok-but-doesnt-trump-shazam/>
Musipedia. Musipedia: The Open Music Encyclopedia. Fecha de consulta: 31 de enero de 2012. <http://www.musipedia.org/>
Owens, Brad. The Top 5 Sites to Find Song Lyrics Online. Fecha de consulta: 31 de enero de 2012. <http://www.makeuseof.com/tag/the-top-5-sites-to-find-song-lyrics-online/>
Strickland Jonathan. How Content-recognition Software Works. Fecha de consulta: 31 de enero de 2012. <http://computer.howstuffworks.com/content-recognition4.htm>
Stroh, Michael. Q&A: The story behind Music search. Fecha de consulta: 31 de enero de 2012. <http://windowsteamblog.com/windows_phone/b/windowsphone/archive/2011/06/08/q-amp-a-the-story-behind-music-search.aspx>