miércoles, 29 de febrero de 2012

3° Reporte (Lab Dispositivos Móviles)

Baterías usadas en dispositivos móviles.
Iones de Litio



Las baterías basándose en iones de Litio son las baterías más recientes en el mercado de los teléfonos móviles. Consiguen un almacenamiento muy superior de energía, aumentando considerablemente el tiempo de acción del teléfono móvil. Son también muy leves, pesando cerca de la mitad de una NiCd equivalente. 


A pesar del precio elevado las ventajas de las baterías de Litio las han popularizado y han hecho que se incluyan ya de serie en muchos teléfonos móviles.

Aunque no padece el efecto memoria, es aconsejable no iniciar un proceso de carga antes de que haya perdido un 50% su capacidad. De vez en cuando, es aconsejable que se descargue completamente antes de ponerlo a re-cargar.

Recuerda que el proceso completo, como en las de NiMH, dura más tiempo que las de NiCd.

En cuanto a la vida de estas, es muy inferior a las antes mencionadas y se sitúan entre los 150 y 300 ciclos de carga.

El futuro en baterías para dispositivos móviles



Baterías de Polímeros de Litio

De hecho, las baterías de polímeros de Litio ya son una realidad. Utilizadas inicialmente por Ericsson y ahora difundidas por los demás fabricantes, son muy semejantes a las baterías de Litio ya conocidas, siendo la flexibilidad su principal ventaja, prometiendo revolucionar no apenas el mercado de las baterías sino también el diseño futuro de los teléfonos móviles, ya que estas nuevas “perlas” moldeables podrán ser producidas en laminas con el espesor de un milímetro, lo que se traducirá posiblemente en teléfonos móviles con un diseño más vanguardista. Poseen además un ciclo de carga / descarga superior a su congénere rígida, o sea menos espacio, menos peso y más autonomía.









Ahora, ¿qué es lo que más consume batería?



En todo lo alto de la lista están los procesos que se ejecutan cuando el teléfono está en modo espera. Tomemos como ejemplo una aplicación que se despierta cada 10 minutos para actualizar sus datos y que tarda 8 segundos en realizar esta labor con un consumo de 350 mA.


Consumo estimado en una hora: 

3600 segundos * 5 mA = 5 mAh (en espera)
6 veces * 8 segundos * 350 mA = 4,6mAh (actualizándose)

Como se puede observar, esta inocente aplicación consume casi lo mismo actualizándose durante 48 segundos que durante 1 hora en modo espera.

Y esto no es todo, cada vez que actives tu servicio, desencadenarás la ejecución de otros (para aprovechar la activación de los elementos del dispositivo, que se encuentra en modo espera). Al final, despertamos a nuestro dispositivo para ejecutar un servicio (aplicación) durante 8 segundos y permanece trabajando (en backgrond) entre 15 y 20 segundos.

Otras cosas que consumen bastante batería son las transferencias largas de datos. Veamos el ejemplo de descargar una canción de 6MB:

  • EDGE (90 kbps): 300 mA * 9,1 minutos = 45 mAh
  • 3G (300 kbps): 210 mA * 2,7 minutos = 9,5 mAh
  • WIFI (1 Mbps): 330 mA * 48 segundos = 4,4 mAh

También se consume bastante batería cuando el movil cambia de celda telefónica (por decirlo fácil: de antena) debido a que el módulo de Radio debe realizar tareas de asociación con la nueva celda, además de todos los eventos que se generan en base a esto y que pueden despertar la ejecución de otras aplicaciones.

Como conclusión

En lo personal pienso que cada quien es responsable del buen cuidado o consumo excesivo de la batería de su móvil, obviamente si compramos un móvil es por que queremos explotar todas sus características pero debemos entender que un exceso en este aprovechamiento de sus funcionalidades trae consecuencias de diversas índoles. 

Buscaré que mi aplicación no dependa tanto de una conexión a internet salvo para algún tipo de actualización o algo así, además de usar colores en la interfaz que sean claros y visibles a simple vista, para que así los usuarios no tengan necesidad de tener el brillo de la pantalla al máximo, ya que esto también genera un consumo excesivo de batería.


Fuentes de Consulta:
http://somosmac.com/la-bateria-del-nuevo-macbook-pro-al-descubierto/
http://juanjogabina.com/2009/04/08/los-espectaculares-avances-de-las-baterias-de-ion-litio-y-ii/
http://www.virtualmon.net/consumo-de-bateria-wifi-vs-3g-vs-2g



martes, 14 de febrero de 2012

2° Reporte (Lab Dispositivos Móviles)

La comunicación inalámbrica o sin cables es aquella en la que extremos de la comunicación (emisor/receptor) no se encuentran unidos por un medio de propagación físico, sino que se utiliza la modulación de ondas electromagnéticas a través del espacio. En este sentido, los dispositivos físicos sólo están presentes en los emisores y receptores de la señal, entre los cuales encontramos: antenas,computadoras portátiles, PDA, teléfonos móviles, etc.






Evolución de las tecnologías móviles.


1G: La Primera Generación de Teléfonos Celulares
En los años 1970 fue introducida la Primera Generación de redes móviles, o 1G. A estos sistemas se les conocian como cellular, en inglés, pero luego el término fue reducido a “cell” en referencia al método que se utilizaba para entregar las señales entre una torre y otra. La señal de los celulares estaba basada en sistemas de transmisión análogos, y los dispositivos 1G eran relativamente menos pesados y costosos que dispositivos anteriores (Sí, existían equipos celulares antes del nacimiento de la 1G, pero estos teléfonos “móviles” se veían restringidos por su limitada movilidad y mal servicio. Estos equipos eran bien pesados y extremamente caros). Algunos de los estándares más famosos que surgieron con esta tecnología fueron: Sistema Telefónico Móvil Avanzado (AMPS, por sus siglas en inglés*), Sistema de Comunicación de Acceso Total (TACS*) y Telefonía Móvil Nórdica (NMT*). Con la aparición de la red 1G el mercado de teléfonos móviles creció entre un 30 y 50 por ciento (%) anualmente, y el número de suscritos mundiales alcanzó aproximadamente 20 millones para 1990. 
2G: El nacimiento de las redes GSM y GPRS
A inicios de los 90’ se introdujeron al mercado los teléfonos 2G con el despliegue de la tecnología GSM. GSM son las siglas de Global System for Mobile communications (Sistema Global para las comunicaciones Móviles), es el sistema de teléfono móvil digital más utilizado y el estándar de facto para teléfonos móviles en Europa. Este sistema utiliza modulación digital para mejorar la calidad de la voz, pero los servicios que ofrece la red son limitados. 
Mientras la demanda por los celulares aumentaba, los proveedores de 2G continuaban mejorando la calidad de transmisión y la cobertura. Estos también comenzaron a ofrecer servicios adicionales, como fax, mensajes de textos y buzón de voz.

Una fase intermedia conocida como 2.5G fue introducida a finales de los 90’. Esta fase utilizaba el estándar GPRS, el cual permitía a los usuarios enviar datos con imágenes y/o gráficos. La importancia de este servicio creció conjuntamente con el desarrollo del Internet y los Protocolos de Internet (IP). La red EDGE es un ejemplo de tecnología 2.5G, sí, sin esta red los Smartphone no existirían, incluyendo los Blackberry.  
3G: El verdadero uso del Internet Móvil 
La revolución del 3G permitió a los usuarios el uso de aplicaciones de audio, imágenes y vídeo. A través del 3G es posible ver vídeo en streaming (en tiempo real, sin que el vídeo se detenga) y hacer uso de las vídeollamadas, aunque realmente ya en la práctica este tipo de actividades se ven restringidas por los cuellos de botella en la red y el alto uso (exagerado) de esta red por parte los usuarios. 
Uno de los principales objetivos del 3G era estandarizar las redes en un único protocolo de red global, en vez de utilizar los diferentes estándares que fueron adoptados anteriormente en Europa, Estados Unidos, y otras regiones. El 3G puede ofrecer velocidades hasta 2Mbps, pero sólo bajo las mejores condiciones y en modo estacionario (usándolo con un router en nuestra casa). Si el 3G se utiliza a grandes velocidades, por ejemplo en la carretera, el ancho de banda puede ser reducido hasta a 145Kbps. 
Los servicios celulares 3G, también conocidos como UMTS, sostienen mayores velocidades de datos y abren el camino a aplicaciones al estilo del Internet. El 3G soporta voz y data al mismo tiempo, a excepción de cuando se utiliza en redesCDMA (pero ya esto ha ido cambiado poco a poco), también se puede utilizar con un grupo de estándares alrededor del mundo, siendo compatible con una amplia variedad de dispositivos móviles. Y gracias a la tecnología UMTS ya existe la posibilidad de roaming global, con acceso potencial al Internet desde cualquier parte del mundo. 
Según ha pasado el tiempo al 3G se le han hecho algunas modificaciones, una de las más importantes fue la actualización de la tecnología UMTS, haciendo llegar la misma a velocidades de hasta 14Mbps, en sus mejores condiciones. A esta actualización se le dió el nombre de HSDPA (High-Speed Downlink Packet Access), la cual también se conoce como 3.5G, o 3G+ (Como la conocemos a través del servicio que ofrece Orange).
4G: Las redes de Alta Velocidad

La generación actual de telefonía móvil, 4G ha sido creado con el objetivo de proveer tasas de transmisión hasta unos 20Mbps mientras, simultáneamente, hace uso de las características de la Calidad de Servicio (QoS*). El QoS te permitirá a tí y a tu proveedor de servicio priorizar el tráfico de datos dependiendo del tipo de aplicación que esté utilizando tu ancho de banda, ajustando las necesidades dependiendo del momento.  
Ahora es que se estamos empezando a ver el potencial del 4G. El despliegue de las redes 4G ayudará a mejorar la funcionalidad de las vídeo conferencias. Se espera también que las redes 4G hagan entrega de mayores ancho de banda en vehículos o móviles moviéndose a altas velocidades dentro del área de cobertura. 
Conectividad Bluetooth
El Bluetooth Special Interest Group (SIG), una asociación comercial formada por líderes en telecomunicación, informática e industrias de red, está conduciendo el desarrollo de la tecnología inalámbrica Bluetooth y llevándola al mercado.
La tecnología inalámbrica Bluetooth es una tecnología de ondas de radio de corto alcance (2.4 gigahertzios de frecuencia) cuyo objetivo es el simplificar las comunicaciones entre dispositivos informáticos, como ordenadores móviles, teléfonos móviles, otros dispositivos de mano y entre estos dispositivos e Internet. También pretende simplificar la sincronización de datos entre los dispositivos y otros ordenadores.
Permite comunicaciones, incluso a través de obstáculos, a distancias de hasta unos 10 metros. Esto significa que, por ejemplo, puedes oír tus mp3 desde tu comedor, cocina, cuarto de baño, etc. También sirve para crear una conexión a Internet inalámbrica desde tu portátil usando tu teléfono móvil. Un caso aún más práctico es el poder sincronizar libretas de direcciones, calendarios etc en tu PDA, teléfono móvil, ordenador de sobremesa y portátil automáticamente y al mismo tiempo.
Diferencias entre Bluetooth y Wi-fi
Las tecnologías inalámbricas Bluetooth y Wi-Fi son tecnologías complementarias.
La tecnología Bluetooth se diseña para sustituir los cables entre los teléfonos móviles, ordenadores portátiles, y otros dispositivos informáticos y de comunicación dentro de un radio de 10 metros.
Un router típico con Wi-Wi-Fi puede tener un radio de alcance de 45 m en interiores y 90 m al aire libre.
Se espera que ambas tecnologías coexistan: que la tecnología Bluetooth sea utilizada como un reemplazo del cable para dispositivos tales como PDAs, teléfonos móviles, cámaras fotográficas, altavoces, auriculares etc. Y que la tecnología Wi-Wi-Fi sea utilizada para el acceso Ethernet inalámbrico de alta velocidad.
Tecnologías de Conectividad Futuras.
WiMAX son las siglas de ‘Worldwide Interoperability for Microwave Access’, y es la marca que certifica que un producto está conforme con los estándares de acceso inalámbrico ‘IEEE 802.16′. Estos estándares permitirán conexiones de velocidades similares al ADSL o al cable módem, sin cables, y hasta una distancia de 50-60 km. Este nuevo estándar será compatible con otros anteriores, como el de Wi-Fi (IEEE 802.11).


La tecnología WiMAX será la base de las Redes Metropolitanas de acceso a Internet, servirá de apoyo para facilitar las conexiones en zonas rurales, y se utilizará en el mundo empresarial para implementar las comunicaciones internas. Además, su popularización supondrá el despegue definitivo de otras tecnologías, como VoIP (llamadas de voz sobre el protocolo IP).

Para promover el uso los estándares WiMAX, es necesario que los fabricantes de dispositivos electrónicos lleguen a acuerdos para desarrollar esta tecnología, dando lugar a certificaciones que aseguren la compatibilidad y la interoperabilidad de antenas, procesadores o receptores. Por ello, existe el ‘WiMAX Forum’, que es una asociación sin ánimo de lucro formada por decenas de empresas comprometidas con el cumplimiento del estándar IEEE 802.16.



Fuentes de Consulta:
http://es.wikipedia.org/wiki/Comunicaci%C3%B3n_inal%C3%A1mbrica
http://www.masadelante.com/faqs/gsm
http://linkea.do/post/5275007504/evolucion-de-la-tecnologia-movil-1g-2g-3g-4g
http://www.masadelante.com/faqs/que-es-bluetooth
http://www.linkedandloaded.com/2011/06/12/from-1g-to-4g-cell-phones-making-moves/
http://blogwimax.com/que-es-wimax/

miércoles, 8 de febrero de 2012

Reporte (Lab de Cómputo Integrado)

Los lenguajes de bajo nivel, también llamados lenguajes ensambladores, permiten al programador escribir instrucciones de un programa usando abreviaturas del inglés, también llamadas palabras nemotécnicas, tales como: ADD, DIV, SUB, etc.
Un programa escrito en un lenguaje ensamblador tiene el inconveniente de que no es comprensible para la computadora, ya que, no está compuesto por ceros y unos. Para traducir las instrucciones de un programa escrito en un lenguaje ensamblador a instrucciones de un lenguaje máquina hay que utilizar un programa llamado ensamblador, como se muestra en la siguiente figura:


Un pequeño ejemplo que ilustra el formato del programa fuente. Este ejemplo está completamente desarrollado en lenguaje ensamblador que usa servicios o funciones de MS-DOS (system calls) para imprimir el mensaje Hola mundo!! en pantalla.

; HOLA.ASM
; Programa clásico de ejemplo. Despliega una leyenda en pantalla.
STACK     SEGMENT STACK                ; Segmento de pila
                    DW     64 DUP (?)             ; Define espacio en la pila
STACK     ENDS
DATA      SEGMENT                             ; Segmento de datos
SALUDO      DB    "Hola mundo!!",13,10,"$" ; Cadena
DATA      ENDS
CODE      SEGMENT                            ; Segmento de Codigo
             ASSUME CS:CODE, DS:DATA, SS:STACK
INICIO:                                                  ; Punto de entrada al programa
          MOV  AX,DATA                         ; Pone direccion en AX
          MOV  DS,AX                              ; Pone la direccion en los registros
          MOV  DX,OFFSET SALUDO      ; Obtiene direccion del mensaje
          MOV  AH,09H                            ; Funcion: Visualizar cadena
          INT     21H                                  ; Servicio: Funciones alto nivel DOS
          MOV  AH,4CH                            ; Funcion: Terminar
          INT     21H
CODE      ENDS
          END  INICIO                               ; Marca fin y define INICIO 


La descripción del programa es como sigue:
 1.- Las declaraciones SEGMENT y ENDS definen los segmentos a usar.
 2.- La variable SALUDO en el segmento DATA, define la cadena a ser desplegada. El signo del dolar al final de la cadena (denominado centinela) es requerido por la función de visualización de la cadena de MS-DOS. La cadena incluye los códigos para carriage-return y line-feed.
 3.- La etiqueta START en el segmento de código marca el inicio de las instrucciones del programa.
 4.- La declaración DW en el segmento de pila define el espacio para ser usado por el stack del programa.
 5.- La declaración ASSUME indica que registros de segmento se asociarán con las etiquetas declaradas en las definiciones de segmentos.
 6.- Las primeras dos instrucciones cargan la dirección del segmento de datos en el registro DS. Estas instrucciones no son necesarias para los segmentos de código y stack puesto que la dirección del segmento de código siempre es cargado en el registro CS y la dirección de la declaración del stack segment es automáticamente cargada en el registro SS.
 7.- Las últimas dos instrucciones del segmento CODE usa la función 4CH de MS-DOS para regresar el control al sistema operativo. Existen muchas otras formas de hacer esto, pero ésta es la más recomendada.
 8.- La directiva END indica el final del código fuente y especifica a START como punto de arranque.


Fuentes de Consulta:
http://www.carlospes.com/minidiccionario/lenguaje_de_bajo_nivel.php
http://lenguajeensamblador.tripod.com/Lenguaje%20Ensamblador%20II.htm

Reporte (Lab Dispositivos Móviles)


En esta entrada comentaré acerca de las ventajas y desventajas de utilizar un sistema móvil frente a un computador o laptop convencional.

Entre las principales ventajas de usar dispositivos móviles podemos destacar:



  • Movilidad/Portabilidad: Una gran ventaja de los Dispositivos Móviles es que puedes llevarlos a todas partes y así nunca estarás separado de tus fotos, aplicaciones y/o redes sociales.
  • Conectividad: Este punto también es importante dentro del campo de los dispositivos móviles (ya sea smartphones o tablets) debido a que practicamente en este tiempo ya es de cajón que un dispositivo tal cuente con al menos conectividad Wi-fi, lo que te permite accesar a internet en cualquier lugar donde haya una red inalámbrica disponible.
  • Precio: Se les encuentra en una amplia gama de precios dependiendo de sus características y funcionalidades, hoy en día existen dispositivos económicos disponibles para todo publico que cumplen con las funcionalidades fundamentales para un usuario, como lo son la conexión inalambrica a internet y un sistema operativo móvil que permite realizar un sin fin de cosas de entre las más destacadas se encuentra el uso y/o desarrollo de aplicaciones.
  • Amplia variedad de modelos y estilos: Los hay de todas formas y estilos lo que le permite al usuario seleccionar un dispositivo que considere vaya acorde con su personalidad o gustos, existe una gran competencia entre las marcas desarrolladoras que día a día van sorprendiendo al mundo con nuevos estilos de dispositivos con funcionalidades completamente nuevas o mejoradas.
  • Evolución constante de tecnología móvil: Hasta ahora no se le ve fin al campo de la tecnología orientada a los dispositivos móviles, y esto es muy bueno debido a que ahora podemos tener ciertos intereses en el uso de un dispositivo móvil y en 3 o 5 años estos intereses pueden cambiar y será seguro que existirá algo en el mercado que satisfaga nuestras necesidades de usuarios/consumidores.
Ahora hablemos un poco de las desventajas de usar dispositivos móviles:


  • Tamaño: Aunque el poder llevarlos a todas partes sin esfuerzo es alguno de los objetivos de estos dispositivos, en lo personal esta es la mayor desventaja de los dispositivos móviles, funcionan de maravilla y te facilitan la vida demasiado pero son muy pequeños!, es complicado manejar esos diminutos teclados qwerty o touch sobre todo si tienes dedos "anchitos".
  • Fragilidad: La era en la que vivo me ha permitido ver claramente la evolución de la tecnología, entre esta evolución están los celulares. ¿Quién no recuerda aquellos enormes celulares que podrías arrojarlos desde un 3er piso y seguían funcionando con toda normalidad?, buenos equipos cuyo seudónimo es o era el de "ladrillos". Eran equipos que estaban muy bien hechos y aguantaban un trato "rudo", en cambio ahora, contamos con celulares y tablets "slim" muy bonitos, con colores cool y aparatitos que hasta te caben en la palma de una mano, el problema es que si se te llega a caer... Bye Wi-fi, bye cámara de 5 mega píxeles, bye sistema operativo y posiblemente lo más duro,
    BYE dinero invertido!
  • Capacidad: Son muy limitados en este aspecto, hoy en día están saliendo equipos con una gran capacidad pero así como se aumentó la capacidad, aumentó el costo. Desafortunadamente los equipos económicos que están más al alcance de la gente, no cuentan con una buena capacidad tanto de almacenamiento como de memoria, cosa que, aunque pueden ser arregladas con memorias externas o extraibles tienen su limite, y este limite combinado con la insapiencia de no saber como administrar la memoria y el almacenamiento en un dispositivo móvil le provocan una mala experiencia de uso al usuario.
  • Bateria limitada: La batería es una parte muy importante que debemos considerar, ya que su rendimiento se ve afectado por "n" factores, uso de aplicaciones, tamaño de las mismas, aplicaciones en segundo plano, sincronización automática de datos de aplicaciones, actualizaciones automáticas de aplicaciones, reproducción de música sin parar, etc. Una mala administración de uno o todos estos factores ocasiona la perdida excesiva y temprana de la batería de un móvil, cosa que nunca te pasaría si usaras por ejemplo una laptop conectada a la toma de corriente o una computadora de escritorio.
  • Riesgo de portarlos: Un punto que considero importante tratar en este punto de desventajas es el riesgo en un cierto modo que provoca el traer con nosotros un dispositivo móvil, hoy en día no se sabe con qué o quién te puedes topar en la calle o si simplemente no sabes si sólo saldrás con mala suerte, si lo usas en público puedes tener el riesgo de sufrir un asalto pero no yendonos al extremo puedes distraerte y extraviarlo, aunque son cosas que podemos controlar con buenas decisiones al momento de usarlos, decisiones que preferiblemente debemos tomar desde el principio, no hasta que nos hayan robado o hayamos perdido el móvil.

Ahora bien, ¿cómo implicarían estas ventajas y desventajas a mi aplicación móvil?

Los usuarios de mi aplicación contarán con todas las ventajas y comodidades de contar con un dispositivo móvil, podrán acceder a mi aplicación cuándo quieran y dónde quieran además pretendo que la aplicación se distribuya de manera gratuita.

Ahora en cuanto a las desventajas, 
  • Puede influir el asunto del tamaño, en cuanto al uso de imágenes o animaciones y sobre todo en el texto así que tendré que ser prudente en ese aspecto, usando tamaños de letra e imágenes que se puedan ver con claridad y sin necesidad de imponer mucho esfuerzo visual.
  • La fragilidad también puede influir ya que si los usuarios de la aplicación están en el Gym un movimiento en falso o una base inestable pueden provocar que su móvil se dañe irreparablemente.
  • En cuanto a la conectividad y la capacidad, me gustaría que fuera una aplicación que no dependiera de conexión a Internet, pero quizás eso pueda derivar en una sobre-carga en términos de capacidad que culminaría en gran consumo de espacio y batería, en el tiempo que vaya desarrollando investigaré más en el tema para lograr que la aplicación sea equilibrada en estos aspectos y le proporcione una buena experiencia al usuario.


martes, 31 de enero de 2012

Reporte 1 (Clase Dispositivos Móviles)

Qué tal, en esta entrada expondré más ampliamente la aplicación que desarrollaré durante el curso, así como también un vistazo a lo mejor valorado en el campo de las aplicaciones para el gym.

RutiNow!
-Aplicación  para la plataforma android que ofrecerá rutinas, tips y dietas (tentativo) para todos los amantes del gym.


¿Porqué android?
Por que es el OS móvil que la mayoría de los usuarios de smartphone tienen (incluyéndome), además de que estoy más impuesto a programar en java por proyectos anteriores que ya he realizado.

El propósito principal que me inspiró a desarrollar este tipo de aplicación es ya no depender tanto del instructor del gimnasio, ya que no dudo que en la mayoría de los gimnasios cuentan con sólo un instructor por turno y que en ocasiones tiene que estar al pendiente de hasta 20 socios. Además que ahora en estos tiempos la gran mayoría de los universitarios asi como adultos en temprana edad cuentan con smartphones. En mi experiencia personal, gran mayoría de los socios del gimnasio en el que estoy tienen smartphones (el resto tiene Nextel) y no dudo en que les interesaría probar una aplicación como la que planeo desarrollar.

Ahora sin más preámbulos y después de dar esta breve introducción de lo que consistirá mi proyecto y por qué lo quiero desarrollar, pasaré a mostrar las aplicaciones del  mejores valoradas que hay tanto para el mercado de iOS como para el de android.

----------------------------------------------------------------------------------------------------------------------------------
Investigando en la red, encontré un par de aplicaciones muy interesantes y similares a la que quiero desarrollar para mi proyecto.

  • La primera se llama Xculpture y es para iOS. En la aplicación Xculpture tienes la posibilidad de buscar entre cientos de ejercicios y encontrar toda la información que necesitas para realizarlos estés donde estés: dificultad de ejecución, método de trabajo, músculos implicados y vídeo explicativo. Podrás buscar y consultar todo tipo de entrenamientos: para perder peso, definir, aumentar masa o saludables. En cualquier momento sabrás que ejercicios, series y repeticiones deberás realizar.

Aquí un video de cómo funciona la aplicación: http://www.youtube.com/watch?v=380EJ3FdW1g

Ahora conforme a lo que leí entre información de su página web y comentarios de los usuarios (no la pude probar porque no cuento con un sistema iOS) evalué las ventajas y desventajas de esta aplicación.


Ventajas:

  • Xculpture es toda una red social en el ámbito del acondicionamiento físico, los usuarios pueden ver en tiempo real que rutinas y ejercicios están desempeñando los demás usuarios y poder incluso hacer retroalimentación entre ellos.
  • Idioma español.
Desventajas:
  • No mucha gente de clase baja-media es agraciada con tener un dispositivo iOS.


----------------------------------------------------------------------------------------------------------------------------------

  • La segunda aplicación que encontré es para android y se llama VirtualGym Fitness Home & Gym ésta aplicación ofrece:
  • Rutinas completas para el gym y para la casa.
  • Demostraciones de ejercicio en 3D.
  • Dietas personales.




Esta aplicación si tuve la oportunidad de probarla y mi evaluación es la siguiente:

Ventajas:

  • Estupendas animaciones que te muestran cómo hacer los ejercicios y los hacen a la par tuyo, repetición por repetición, segundo por segundo.
  • Incluye rutinas para hacer en casa sin necesidad de contar con algún aparato.
Desventajas:
  • Honestamente, no encontré alguna desventaja de la aplicación así que me basaré en los comentarios de los usuarios en android market y la gran mayoría desearía que esta aplicación se ofreciera en idioma español.
  • También pude observar como personas con experiencia en el ramo, opinan en que tiene muy pocas variedades de ejercicios.
----------------------------------------------------------------------------------------------------------------------------------



En conclusión, ¿qué tendrá de novedosa mi aplicación? y ¿en qué aportara al ramo del acondicionamiento físico?

Bueno, pretendo que mi aplicación tenga la opción de que al estar realizando esos ejercicios de a cuerdo a tus características físicas te sugiera un tiempo de ejecución del ejercicio (15 min de bici, 30 min, etc) y te empiece a correr un tipo cronómetro que te avise cuando hayas terminado y te muestre el siguiente ejercicio a realizar, cuando termines esa rutina des algo como siguiente rutina y te muestre la siguiente y así hasta finalizar con el entrenamiento del día.
Quiero ofrecer recomendaciones hechas por instructores a cerca de cómo es la mejor forma de ejercitarse, qué debes hacer, qué no debes hacer y por qué.
Quiero también ofrecer algún tipo de planes alimenticios para aquellos que quieren bajar de peso o de lo contrario ganar masa muscular, información y consejos que provengan de instructores y nutriólogos.

Como detalle final mi aplicación estará en idioma español esto preferentemente por la raza que no adopta un segundo idioma a su vida.
También para fines de realizar un proyecto para otra clase, tengo la idea de crear un producto que le permita a los usuarios fijar su smartphone a algún tablero, bicicleta o aparato que les permita interactuar con la aplicación sin tener que hacer pausas en sus rutinas, pero esto aún está en proceso de discusión con mi equipo de trabajo.



Fuentes de Consulta:

http://www.taringa.net/posts/salud-bienestar/12354574/Aplicacion-iPhone-para-controlar-tu-entrenamiento-en-el-gym.html

http://deportenlared.wordpress.com/2011/11/30/xculpture-red-social-en-espanol-sobre-deporte-y-salud/

http://www.xculpture.com/movil.aspx

https://market.android.com/details?id=digifit.virtuagym.client.android&feature=search_result#?t=W251bGwsMSwxLDEsImRpZ2lmaXQudmlydHVhZ3ltLmNsaWVudC5hbmRyb2lkIl0.

http://retalesuah.blogspot.com/2011/11/xculpture.html



jueves, 19 de mayo de 2011

Desktop Recorder Herramienta para grabar tu escritorio en Ubuntu

Que tal a todos, pues viendo que muchos de ustedes batallaron en la grabación de sus videos, les comparto esta herramienta que a mi me ha dado muy buenos resultados.

Primero en Ubuntu Software Center tecleamos "Desktop recorder" y lo instalamos.




Ya instalado nos vamos a Applications - Sound&Video - Desktop recorder
y nos aparecerá esto:


Ya desde ese panel de control podemos empezar a grabar dando clic en "Record" pero si quieren manipular un poco la configuración dan clic en Advance:






Abre por defecto la dirección en que se guardarán los videos podemos manipularla para que se guarden en el escritorio, damos clic en Save As y seleccionamos el Desktop por ejemplo.


Los demás parametros de configuración los dejamos por defecto y ya está listo para empezar a grabar! =D

Si al terminar de grabar no aparece el video en el Desktop, busquenlo en su carpeta de home en mi caso "jetsky0" ahi debe de estar :]

Los videos se guardan en extensión ".ogv"  extensión soportada por youtube asi que no es necesario convertirlo a otro formato para subirlo a youtube.

Si por el contrario lo quieren reproducir desde el disco duro, les puedo recomendar también el reproductor VLC para mi es el mejor reproductor ya que reproduce infinidad de formatos de audio y video incluyendo los más raros :P y vale la pena tenerlo en sus filas =D 
VLC es compatible tanto con Windows como con Ubuntu así que vale la pena tenerlo en ambos si quieres ahorrarte la necesidad de convertir formatos de videos para poder reproducirlos, VLC te ahorrará todo eso.

Ojalá esto les sirva éxito en sus materias!! =D

Saludos

martes, 10 de mayo de 2011

Presentación Final (TALLER)

Entrada correspondiente a la presentación final de mi proyecto, describiendo qué herramientas utilicé, que documentación obtuve y por su puesto como implemente toda la funcionalidad del programa.
Adjunto la presentación final y un video demostrativo.


Presentación Final (CLASE)

Buenos días en esta última entrada del curso les presentaré la funcionalidad final de mi software, el resultado final de lo que logre implementar.
Adjunto la presentación descrita de mi software y un video demostrativo probando su funcionalidad final.


Interfaces Gráficas (Taller)

En esta entrada les presentaré los códigos para representar los bocetos de la interfaz que diseñé anteriormente para el proyecto.

(Presentare las líneas encargadas de la construcción únicamente de la interfaz para no extenderme mucho.)

Primero la interfaz del Menú de Inicio o Panel de Control Principal.

Esta interfaz es el menu de bienvenida al usuario, por el que este accedera a las opciones del sistema.

Iniciamos declarando el método que contendrá los objetos que se encargaran de crear la interfaz con sus componentes.

private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();

Ahora, declaramos cada componente de la interfaz con sus atributos.
jLabel1.setBackground(new java.awt.Color(0, 0, 0));
        jLabel1.setFont(new java.awt.Font("Arial", 1, 18));
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText("MENU PRINCIPAL");
        jLabel1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 14));
        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel2.setText("1 -> Agregar Producto");

        jLabel3.setFont(new java.awt.Font("Tahoma", 1, 14));
        jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel3.setText("2 -> Ver Lista de Productos");

        jLabel4.setFont(new java.awt.Font("Tahoma", 1, 14));
        jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel4.setText("3 -> Salir del Sistema");

        jLabel5.setFont(new java.awt.Font("Arial", 1, 14));
        jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel5.setText("Ingrese numero de opcion:");

        jTextField1.setHorizontalAlignment(javax.swing.JTextField.TRAILING);

        jButton1.setFont(new java.awt.Font("Tahoma", 1, 10));
        jButton1.setText("ACCEDER");

Y por último, crear el Panel y la Ventana de la interfaz, seguido del acomodo que tendrán todos los componentes antes declarados, para darle estética a la interfaz, se declaran tamaños, posiciones y coordenadas de cada uno de estos, uno por uno.
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(75, 75, 75)
                .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 362, Short.MAX_VALUE)
                .addGap(163, 163, 163))
            .addGroup(layout.createSequentialGroup()
                .addGap(90, 90, 90)
                .addComponent(jLabel5)
                .addGap(38, 38, 38)
                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(224, Short.MAX_VALUE))
            .addGroup(layout.createSequentialGroup()
                .addContainerGap(161, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel2)
                    .addComponent(jLabel3)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel4)))
                .addGap(220, 220, 220))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(12, 12, 12)
                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE, false)
                    .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(41, 41, 41)
                .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(144, 144, 144))
        );

        pack();
    }

Proceso de Compilación/Ejecución:


Resultado Final:

Ahora vamos con la interfaz del panel de Altas de Productos.

Para el panel de Altas de Productos practicamente es lo mismo que en el del panel de control solo que ahora se ven mas JLabels y JTextFields.

Este Panel o Interfaz tiene el objetivo de llenar un formulario para poder dar de alta un producto en el sistema y guardarlo.

Primero el método que contendrá objetos y atributos de los componentes de la interfaz gráfica.
private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();
        jTextField3 = new javax.swing.JTextField();
        jTextField4 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18));
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText("Ingreso de Datos del Producto");
        jLabel1.setCursor(new java.awt.Cursor(java.awt.Cursor.CROSSHAIR_CURSOR));

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 14));
        jLabel2.setText("NOMBRE");

        jLabel3.setFont(new java.awt.Font("Tahoma", 1, 14));
        jLabel3.setText("ID");

        jLabel4.setFont(new java.awt.Font("Tahoma", 1, 14));
        jLabel4.setText("CANTIDAD DISPONIBLE");

        jLabel5.setFont(new java.awt.Font("Tahoma", 1, 14));
        jLabel5.setText("PRECIO UNITARIO");

        jButton1.setFont(new java.awt.Font("Tahoma", 1, 14));
        jButton1.setText("AGREGAR");

Y enseguida, todo el procedimiento de acomodo y ordenación de los componentes de la interfaz.

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(179, 179, 179)
                        .addComponent(jButton1))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(70, 70, 70)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel1)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jLabel4)
                                    .addComponent(jLabel5))
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addGap(32, 32, 32)
                                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                            .addComponent(jTextField4, javax.swing.GroupLayout.DEFAULT_SIZE, 136, Short.MAX_VALUE)
                                            .addComponent(jTextField3, javax.swing.GroupLayout.DEFAULT_SIZE, 136, Short.MAX_VALUE)))
                                    .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 168, Short.MAX_VALUE)))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jTextField2, javax.swing.GroupLayout.DEFAULT_SIZE, 251, Short.MAX_VALUE)))))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(35, 35, 35)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(29, 29, 29)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel5)
                    .addComponent(jTextField4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(30, 30, 30)
                .addComponent(jButton1)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    } 

Proceso de Compilación/Ejecución:



Resultado Final:

Y por último la interfaz correspondiente a la opción de Consulta o Vista de inventario. Al agregar satisfactoriamente un producto el programa lo va guardando en una tabla a la que posteriormente podemos acceder desde el Panel de Control Principal.

Método donde iniciamos los componentes de esta interfaz:

private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

En este caso la demostración solo es de manera "estática" (aun estoy en proceso de conectar todas las interfaces del sistema)

Declaramos el encabezado que tendra la interfaz.

jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14));
        jLabel1.setText("LISTA DE INVENTARIO DE PRODUCTOS");

Asignamos los parametros estaticos que por el momento queremos para probar y demostrar la interfaz. Como elemento extra agregue un KeyListener para que al momento que recorramos la tabla nos resalte el elemento que tenemos seleccionado (ya sea con las flechas del teclado o haciendo clic sobre una celda determinada con el apuntador del mouse).

jTable1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {"001", "Escoba", "40", "19.90"},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "ID", "NOMBRE", "CANTIDAD", "PRECIO UNITARIO"
            }
        ));
        jTable1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                jTable1KeyTyped(evt);
            }
        });
        jScrollPane1.setViewportView(jTable1);

Y ya por ultimo mero ordenamiento de lo que fue el encabezado y el Panel que contiene esta interfaz.

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 563, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(21, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(152, Short.MAX_VALUE)
                .addComponent(jLabel1)
                .addGap(150, 150, 150))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(12, 12, 12)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(56, Short.MAX_VALUE))
        );

        pack();
    }                      

Proceso de Compilación/Ejecución:


Resultado Final:

Bueno pues es todo por esta entrada, cualquier duda comentario o sugerencia comenten, seguiré agregandole carne a esto y se los expondré en las exposiciones finales (:

Saludos!!

Interfaces Gráficas (Clase)

Buenos Días, en esta entrada les mostraré el diseño gráfico que tengo pensado implementar en mi proyecto.

Primero adjuntaré un poco de información de lo que son y en lo que consisten las interfaces gráficas.

"La interfaz gráfica de usuario, conocida también como GUI (del inglés graphical user interface) es un programa informático que actúa de interfaz de usuario, utilizando un conjunto de imágenes y objetos gráficos para representar la información y acciones disponibles en la interfaz. Su principal uso, consiste en proporcionar un entorno visual sencillo para permitir la comunicación con el sistema operativo de una máquina o computador."

Ya que conocemos bien la definición de lo qué es una interfaz gráfica (GUI), procederé a mostrarles las siguientes capturas de pantalla con el boceto a mano de como quiero que se vea la interfaz de mi programa, (tanto del menu principal como de los submenus, y las listas de productos).



Enseguida les muestro el prototipo de la interfaz que diseñe con la ayuda de Netbeans.

Menu Principal:
Menu de Altas de Productos:
Menu de Lista de Inventario: