miércoles, 29 de febrero de 2012

Rendimiento de bateria en smartphones

Las baterías que se utilizan en smartphones actualmente, son las baterías de litio, son las mas utilizadas en los dispositivos avanzados, pero existe un problema, este tipo de baterías están a punto de los limites de capacidad posible, mientras que los aparatos que se están construyendo actualmente requieren más energía, por lo que en esta entrada hablaré acerca de el rendimiento de estas baterías.






Si cuando compras un nuevo smartphone, esperas que el rendimiento de la batería aumente y que esté siempre conectado a velocidad de 4G, siempre su pantalla este brillando, obviamente esto no es posible, la energía que necesita de la batería de los smartphones utilizados actualmente es por mucho superior de como la tecnología de las baterías ha aumentado, esto es que los fabricantes de estas están trabajando para solamente exprimir los últimos recursos que se pueden obtener de las baterías de iones de litio los cuales tienen 15 años de edad y no han tenido un desarrollo importante, por lo que los fabricantes de dispositivos y aplicaciones están viendo esta gravedad del problema.


Antes, los aparatos móviles se cargaban en la casa y podías ir de vacaciones un fin de semana y aún volver a casa con batería, ahora los consumidores están prácticamente atados a llevar con ellos sus cargadores por el exceso de utilidad que tienen los aparatos.






Por ejemplo, con la llegada de la red 4G, este problema podemos decir que agrava un poco la situación, ya que estudios han revelado que los dispositivos que utilizan esta red tienden a tener una vida de batería no tan buena, por lo que los requisitos de potencia de esta tecnología en particular, que se ha estado incorporando en nuestros dispositivos móviles está creciendo al doble de los avances que se tienen en el estado de investigación de la capacidad de una batería.


El problema aquí, está relacionado con la química que se utiliza en las baterías, al igual que el sistema que se financía para la investigación y desarrollo de las baterías, no se le presta tanta atención, entonces a diferencia de los smartphones, la tecnología de las baterías ha evolucionado durante más de un siglo y esta mucho más abajo en la curva de desarrollo.








Casi todas las baterías que los smartphones de hoy en día, al igual que las tablets, funcionan con alguna variante de polímero de iones de litio, el cual es una celda en la que se guarda el ánodo y el cátodo con un sólido, conduciendo la electricidad, podemos ver que este diseño utilizando sólidos y electrolitos se desarrolló para teléfonos comerciales en el año de 1996.


Sin embargo, los avances graduales en la eficiencia, no están de la misma manera de las demandas de energía que piden los fabricantes de smartphones y tablets, pero esto no quiere decir que las baterías no sirven, si no que las baterías de smartphones son eficientes en comparación a las baterías que se utilizaban hace algunos años, pero estas ya están llegando al límite de su capacidad.


Por lo que, nosotros como futuros desarrolladores para dispositivos móviles debemos de saber que no solamente debemos de tener en cuenta en perfeccionar su interfaz, diseño, potencia de cálculo, si no que tenemos que hacer todo esto pero con mucho menos energía, lo que da como resultado que los consumidores que necesitan planes de datos más rápidos y que tengan multitarea, ahora necesitan más capacidad de batería para que su celular tenga no menos que un día completo de funcionamiento.


También, las pantallas que se están utilizando en smartphones son cada vez mayores y con más resolucion, absorben mas energía, se necesita brillo en la pantalla y todo esto causa un impacto importante en las baterías. Aunque, empresas como Samsung y LG, están centrando su fabricación de dispositivos que consuman menos energía.


Por ejemplo, los celulares ahora tienen Bluetooth, WiFi y GPS, lo cual son como asesinos de la bateria y que algunas veces hasta se utilizan de manera continua y a la misma vez, por lo que hace que la batería reduzca considerablemente su potencia, inclusive los dispositivos con chips 4G requieren mucha potencia de procesamiento porque necesitan descodificar mayores cantidades de datos y como saben los 4G, tienen dos chips diferentes en conjunto, lo cual perjudica en el rendimiento.


Algunas de las medidas que han estado adoptando las compañías de celulares, es que se utilicen procesadores de doble núcleo, especialmente dedicados para estos dispositivos, ya que estos dual-core, pueden en un solo núcleo realizar tareas simples mientras que otro realice tareas más complejas, así poder ahorrar batería de los aparatos.




Las aplicaciones de los smartphones y el mal software es el culpable final de todo esto, ya que una aplicación que no administra bien sus recursos, empeora el estado de energía del aparato, de hecho se sabe que Apple examina nuestra aplicación antes de ponerla en la App store y una de las pruebas más importantes es que administre bien los recursos de energía, por lo que esta es otra manera en que una compañía genera buen software y que no perjudique sus aparatos.






Espero que esta entrada genere iniciativa a crear mejores aplicaciones, en donde tenemos que tomar en cuenta la batería de los dispositivos y así contribuir a que el usuario final, pueda obtener un mejor producto con mejores recursos energéticos.


Referencias.
El WiFi, la clave para las baterías de smartphones
Las nuevas tecnologías de baterías y ahorro de consumo en smartphones y tablets
¿Por qué la batería de tu smartphone apesta?
Ahorrar batería de tu móvil

Interfaces en Android

Android es un sistema operativo que proporciona al usuario una interfaz amigable en ciertos aspectos, es diferente a otras interfaces móviles, como por ejemplo iOS, pero podemos encontrar similitudes entre ellas, en esta entrada hablaré sobre las interfaces de Android para así darnos ideas de como poder desarrollar una aplicación amigable al usuario.


Los dispositivos y sus diferentes pantallas


Con el sistema operativo Android, existen muchísimos teléfonos y tabletas que utilizan este sistema, por lo que no tenemos los pixeles exactos de cada uno de los dispositivos, por lo que existen gran variedad de tamaños de pantalla y factores que debemos considerar al realizar una interfaz gráfica para este sistema, por lo que sería bueno enfocarnos en 3 diferentes aspectos:



  • Flexibilidad.
    • Debemos de "estirar y comprimir" nuestros diseños para que sean adaptables a diferentes anchuras y alturas que podamos tener en diferentes dispositivos.
  • Optimizar.
    • Debemos de aprovechar a dispositivos con pantallas mas grandes, al igual que su tamaño que nos ofrecen, para así mostrar más contenido y facilitar la navegación
  • Capacidad.
    • Proporcionar diferentes interfaces según la densidad de pantalla (ppp), para asegurarnos que la aplicación se vea bien en diferentes dispositivos.


Métodos para realizarlos.
Algunas estrategias que debemos considerar al realizar nuestra interfaz, es trabajar en un método que consiste en una norma básica, esto quiere decir tener como una mediana de las pantallas, en este caso por ejemplo el MDPI, para luego escalar ya sea hacia arriba o hacia abajo, otra cosa que podemos hacer es realizar una interfaz con el dispositivo de mayor resolución de pantalla y luego ir bajando su resolución para ver como modificarlos para pantallas más pequeñas.


Tamaño de un elemento.
Los  componentes de una interfaz, se establecen en unidades de 48dp, este es el promedio el cual se puede traducir en aproximadamente 9 mm, por lo que es el rango en que los objetos deben de estar en el sistema para que el usuario sea capaz y de manera precisa, seleccionar un elemento con los dedos.


Si diseñamos una interfaz debemos de pensar en que nuestros objetos nunca deben ser menor de 7 mm, aunque la pantalla este más grande o tenga más pixeles, esto no debe de suceder, porque se pierde la estabilidad de la interfaz.


Otra cosa es que, debemos de tener un espacio de 8dp entre cada elemento de la interfaz para poder diferenciar uno del otro al momento de que un usuario toque.




Iconos.
Los iconos en el sistema operativo son importantes, con estos el usuario puede saber que aplicación necesita abrir, entonces para diseñar un icono adecuado en Android, debemos primero que nada ver como los colores que utilicemos pueden afectar según el fondo que utilicen, por lo que lo recomendable es utilizar colores que no interfieran con esto y sea claro.


El tamaño de un icono que aparezca en el OS debe ser aproximadamente de 48 x 48dp.
Los iconos que se mandan al market de Android, deben de ser de 512x512 pixeles.






Estados de toque.
Algo interesante en la interfaz de Android, son los estados de toque, estos utilizan el color y la iluminación para responder a los toques, por lo que cuando una persona toca una área lo que hace es saber si el objeto fué tocado y tener una reacción a este, es por eso que se tiene diferentes estados, los cuales muestro en la siguiente imagen:






Si quieres saber más sobre las métricas que utiliza Android y estas interesado en ello te recomiendo veas esta página, en donde puedes encontrar las "User Interface Guidelines".

Interfaces y usabilidad en iOS

Como la mayoría de los sistemas operativos móviles que se utilizan actualmente, la empresa Apple, con su sistema operativo móvil, se preocupa mucho por la experiencia que tenga el usuario al usar un dispositivo de la empresa, por lo que nosotros como futuros desarrolladores para este sistema operativo, debemos de tener en cuenta que, muchas veces la interfaz determina si nuestra aplicación tiene éxito o fracaso en el mercado, por lo que en esta entrada hablaré sobre aspectos que Apple maneja importantes en sus interfaces.




La gente que utiliza aplicaciones para iOS, podemos decir que siempre busca el uso de gestos que se utilizan en otras aplicaciones o en el sistema en general, por lo que cuando una aplicación esta bien adaptada a la pantalla del dispositivo y responde a los gestos de manera correcta, proporcionamos una experiencia que las personas están buscando, por lo que siguiendo estas métricas podemos asegurar que las personas que utilizan nuestras aplicaciones puedan seguir utilizando sin ningún problema.


Pantalla
La pantalla de un dispositivo táctil, como lo es una basado en iOS, tenemos que tener en cuenta la parte mas importante que es, asegurarnos sobre como podemos distribuir los pixeles para las diferentes versiones de una aplicación, al igual que estar conscientes que las personas no solamente van a ver gráficos bonitos, si no que estos tienen que estar interactuando con una pantalla multi-touch.


Para asegurarnos de esto, podemos ver que las pixeles de las pantallas de los dispositivos basados en iOS son muy bien definidos tenemos los siguientes:

  • iPhone 4-4s: 640 x 960 
  • iPad: 768 x 1024
  • Otros iPhones y iPod touch: 320 x 480







Algunos aspecto que tenemos que tener en cuenta, es que el tamaño mínimo de los elementos de la interfaz para que los usuario se sientan cómodos al tocar es de aproximadamente 44 x 44 puntos, por lo que debemos diferenciar como hacer una interfaz para una iPad que para un iPhone.


Para esto, debemos diferenciar que los pixeles son una cosa muy diferente a los puntos, por lo que el pixel es una unidad de medida que se utiliza para decir de que tamaño es la pantalla de un dispositivo, mientras que el punto es una unidad de medida que se utiliza sobre el tamaño de un área que se dibuja en la pantalla.


Orientación
Si alguno de ustedes, a utilizado un dispositivo con iOS, se darán cuenta que depende como estemos utilizandolo, este cambia de orientación, por lo tanto la pantalla cambia de manera que vemos sus pixeles, este aspecto considero que es uno parte importante al desarrollar una aplicación ya que la gente que utiliza un dispositivo, si ustedes se han fijado, siempre lo sostienen de manera de "retrato",  esto quiere decir que lo sostienen de manera vertical hacia ellos y apartir de la pantalla de inicio, ellos seleccionan la aplicación, por lo que esperan que la aplicación sea en la misma orientación que ellos están viendo, esto seria aplicado en un iPhone o en un iPod touch, pero utilizando en un iPad, algunas veces lo tenemos orientado de manera "paisaje", por lo que nosotros debemos de desarrollar como queremos que según el dispositivo que estemos desarrollando, como vamos a hacer la interfaz.




Gestos
Los gestos, son movimientos específicos que se utilizan en un sistema operativo, que tiene la capacidad de ser multi-touch, por lo que la gente esta cómoda en tocar iconos para entrar a aplicaciones, pellizcar imágenes, desplazarse en listas largas, etc... Los gestos dan a las personas una conexión rápida hacia al dispositivo ya que con este tipo de gestos, la persona siente la sensación de que puede manipular directamente los objetos que le aparecen en la pantalla.


A continuación, les proporciono los gestos estándar de iOS:
  
Pantalla completa
Otra cosa que es importante, es que solamente tenemos una aplicación abierta al mismo tiempo en una misma interfaz, por lo que cuando una persona quiere ver otra aplicación quita toda la interfaz de otra, aunque después de iOS 4 tenemos multitasking en el sistema, es importante tener esta consideración de que el usuario solamente se va a centrar en la interfaz que se este desarrollando y no va a ver otra cosa mas, por lo que debemos de hacer que este no pierda el interés para que se quede en ella.




Para saber mas sobre como desarollar interfaces en iOS, te recomiendo leer este pdf, en el cual Apple muestra principios básicos de como deberían de ser las interfaces y tener una experiencia de usuario agradable.

Los últimos 30 años de los teléfonos móviles

Como sabemos, la tecnología avanza rapidamente, por lo que para esta entrada de blog, voy a hablar acerca de la historia de los dispositivos móviles, particularmente de los teléfonos celulares y como estos han ido cambiando a lo largo del tiempo, para así ver las diferencias de lo que tenemos actualmente y lo que alguna vez estuvo aplicandose como tecnología.





Se puede decir, que a partir de la década de 1940, se remota la creación de la tecnología del celular de hoy en día y la idea de desarrollar el primer teléfono móvil, esta fué primeramente creada para utilizarla en taxis, coches de policía y en tipos de vehículos de emergencia, se utilizaba también, para la comunicación entre los camioneros, para comunicarse entre sí, pero no sabían la magnitud  que después de algunos años se iban a utilizar para otro tipo de propósito.


La primera generación de telefonía móvil, se introdujo al mercado para el público en general como en 1983 por la compañía Motorola, lo que utilizaba esta empresa entre otras era la tecnología analógica, lo cual es menos fiable que la tecnología actual, ya que tenía mucho más estática y algo de interferencia de ruido, comparado a lo que estamos acostumbrados actualmente. 


1983 - Motorola DynaTAC 8000x


La primera aparición de este teléfono móvil de Motorola, fué en 1973 por el Dr. Martin Cooper, pero comercialmente estuvo para el año de 1983, instalándose en coches.


Los primero teléfonos analógicos se limitaban a que solamente estuvieran en los automóviles, por lo que se habían instalado permanentemente, luego se convirtieron completamente móviles , pero el tamaño de estos éra como de un maletín gigante y por lo cual era incómodo, el objetivo era el tráfico de voz, pero la gente se sentía insegura ya que se podían escuchar las conversaciones de otras personas, otra de las desventajas fué que su costo era bastante caro, mas o menos como cientos de dólares.


1982 - Nokia Mobira Senator, pesaba 9.5 kilos y se instalaba en carros.


Durante los 90s, hubo muchas mejoras en la tecnología que se utilizaba en los dispositivos, a estos se les denomina la segunda generación, en donde se hizo la primera llamada de teléfono celular con la nueva tecnología digital, característica de la época, el cual fue más rápido y no tenia tanta interferencia como la tecnología anterior analógica, se hizo más popular, ya que hizo que los dispositivos fueran más paqueños en lugar de llevar un maletín, las baterías más pequeñas y las empresas hiceron todo lo posible para que los celulares estuvieran con un precio mas accesible y por lo tanto aumentó su popularidad, se podia conseguir un celular decente aproximadamente con 200 dólares, por lo que podemos decir que en esta época es cuando la tecnología empieza a despuntar.


En las siguientes imágenes, pongo algunos de los celulares más representativos de la segunda generación.
1992- Nokia 1011, tomaron 10 años para realizar un celular mas moderno




1993 - Bell South/IBM Simon Personal Communicator, el primer Teléfono/PDA
1996 - Nokia 9000 Communicator,
 La primera serie de smartphones con CPU Intel 386,
 tenia teclado completo.

1996 - Motorola StarTAC, el primer celular estilo concha


1999- Kyocera VP-210 El primer celular con cámara 

La tercera generación de celulares, es lo que se utiliza actualmente en muchos teléfonos celulares digitales, que utilizamos hoy en dia, se puede decir que esta tecnología se basa en que no solo el celular era capaz de tranferir datos de voz, por ejemplo hacer llamadas telefónicas, si no que también tenemos la capacidad de transferir otros tipos de datos, por ejemplo correos electrónicos, información y mensajes instantáneos, ayudando aún más a la industria, pudiendo mandar mensajes en vez de utilizar una llamada tradicional, inclusive empresas empiezan a ofrecer celulares gratuitos suscribiendose a su servicio.


2001 - Handspring Treo 180



2003 - Blackberry 7210


2004 - Nokia 6630, el primer celular con global roaming

2005 - HTC Universal, el primer celular con Windows Mobile OS




2006 - BlackBerry Pearl

2007 - Apple iPhone


Se podria pensar, en que existe una cuarta generación en la cual el objetivo es crear nuevas normas que harán mejores capacidades de transferencia de información y tener una velocidad de internet más rápido y más usabilidad de estos, pero esta generación para esta fecha podemos decir que esta en desarrollo y que nosotros vamos a hacer la base para nuevas ideas.






Referencias.
The people history
A Visual History of the Cell Phone

lunes, 27 de febrero de 2012

Ford OpenXC [Lab]

Una de las hábitos más importantes que nosotros como futuros ingenieros en software debemos de tener, es el leer sobre actualizaciones ya que como sabemos, la tecnología avanza rápidamente y tenemos que saber sobre noticias nuevas para no quedarnos atrás.


Hace unos días, encontré una plataforma que me pareció interesante y se las comparto, es OpenXC, el cual es una combinación de hardware de código abierto y software que permite personalizar un carro con aplicaciones y módulos conectables, utilizando estándares, herramientas la cuales estamos trabajando este semestre para así nosotros como desarrolladores podamos utilizar y desarrollar nuestras ideas.




OpenXC es una API para un carro, por lo que instalando un módulo de hardware podemos obtener datos de la red interna de carros inteligentes e incluso hacerlos accesibles a aplicaciones de Android utilizando esta librería, por lo que se pueden desarrollar aplicaciones tales como, minimizar la distracción cuando alguien conduce, o saber un conocimiento más profundo de como esta el coche en una simple aplicación.


La Ford y Bug Labs se unieron para hacer mediante un estándar de software y hardware accesorios para sus vehículos, como sabemos cada carro nuevo que hay en el mercado tienen muchísimas computadoras y equipos electrónicos, por lo que existe el interés de realizar sistemas para aplicaciones de terceros inclusive mediante web.


La versión actual de OpenXC es una combinación de las plataformas de Arduino y Android, por lo que nos abre las posibilidades de crear nuevos componentes y aplicaciones, por lo que solo nos resta hechar a andar la imaginación para programar, como dice en la pagina, tan fácil como un teléfono inteligente.


Algunas de las cosas que se pueden hacer con esta API es por ejemplo, leer datos del vehículo en tiempo real, así como la posición del GPS, la velocidad del vehículo, por lo que, como todavía esta en desarrollo, todavía esta en versión beta pero en este año se libera, si quieres saber mas información sobre esto, puedes registrarte en su página, al igual que la documentación de este.


Algunos de los vehículos que tienen compatibilidad son:
  • 2011-2012 Focus
  • 2012 Mustang
  • 2012 Fiesta
  • 2011 Figo
Los cuales contienen un Digilent chipKIT Max32 y un Arduino compatible con microcontroladores PIC32 y con Android puedes utilizar un dispositivo el cual está alimentado por un micro-USB.


Aquí un video, de hace unas dos semanas, en el CES 2012, si bien, no hablan acerca de especialmente OpenXC pero podemos ver las tecnologias que existen en los automóviles.





Les dejo unos links de interés.
OpenXC Platform
Engadget OpenXC beta
CNET Ford+OpenXC

NDK de Android [Lab]

Luego de instalar android, me topé con el problema de la librería, que necesitamos para realizar nuestro proyecto de la materia de móviles, ya que no se encuentra del todo disponible para android, pero encontré una forma de hacer la librería, de manera que sea compatible con el sistema, pero tenía que descargar el NDK de android, algo que nunca había escuchado y me llamó la atención, así que en esta entrada explico un poco que es el NDK (ojo, no confundir con el SDK) y para que les puede servir a mis compañeros.





El NDK [Native Development Kit] de Android son herramientas con las cuales podemos agregar ciertos componentes, que necesitan el uso de código nativo en aplicaciones de Android, por lo que con el uso del NDK podemos implementar parte de nuestras aplicaciones, usando el código nativo con los lenguajes de C y C++, proporcionando ciertos beneficions ya que puedes reutilizar el código existente y algunas veces obtener un aumento de velocidad.

Por lo tanto, con el uso del NDK por medio de las herramientas nos dan la posibilidad de generar bibliotecas, utilizando código fuenta nativo en C y C++, pudiendo integrar bibliotecas en un paquete de aplicaciones para poderlas utilizar en el dispositivo móvil con el sistema, al igual que bibliotecas nativas del sistema que se utilizan para OS posteriores del 2.3, sportando conjuntos de instrucciones ARM como ARMc5TE (Thumb-1), ARMc7-A(Thumb-2), VFPv3-D16 (NEON/VFPv3-D32), entre otros, hay que tener en cuenta que algunos de estos arquitecturas tienen restricciones dependiendo si el CPU es compatible.

El NDK nos da librerías estables, como la librería de C, la librería matemática libm, OpenGL para gráficos en 3D, interfaz JNI (Java Native Interface), entre otras.

Es claro destacar, que no es nada mas de utilizar el NDK sin tener claro para que lo vas a usar en tu aplicación, por lo que hay que saber que no beneficiará a todos las aplicaciones, por lo que debemos de saber cuales son las ventajas y desventajas de utilizar código nativo en el sistema, por lo que esto no quiere decir que utlizar este tipo de código vamos a tener un aumento automático de performance, algunas veces aumentamos la complejidad de nuestra programación, por lo que debemos de tener en cuenta que el código nativo se debe de utlizar solamente cuando es esencial para el desarrollo de la aplicación y no decir "porque quiero hacer una app de Android en C",  no, para eso no sirve.

Algunas ejemplos de cuando utilizar en NDK, sería apliacaciones autónomas de las cuales se necesitan operaciones intensivas al CPU, pero que no necesitan mucha memoria, como por ejemplo el procesamiento de señales, o si queremos realizar simulaciones de física, por lo que no nada mas el hecho de hacer un método en C va a realizar un aumento en general al rendimiento, por lo que tenemos que cuestionarnos si es necesario el desarrollar en código nativo o ver si la API de android tiene lo que necesitamos.

Tenemos dos maneras de utilizar el código nativo de Android:
  • Escribir nuestra aplicaciones usando el framework de Android y usar el JNI para accesar a las APIs que nos da el Android NDK.
  • Escribir una actividad nativa, lo cual nos permite implementar el ciclo de vida que nos sirve para saber que regresa dicha función en código nativo.

El NDK proporciona librerías de sistema para las APIs nativas, garantizando la compatibilidad de todas las versiones de Android, como por ejemplo;
  • libc (Librería de C)
  • libm (Librería de matemáticas)
  • JNI (Java native interface)
  • libz (compresión Zlib)
  • liblog (logging de Android)
  • OpenGL ES 1.1 y OpenGL ES 2.0 (Gráficas 3D)
  • libjnigraphics (Acceso al buffer de pixeles)
  • OpenSL ES (Librería para audio)

Links útiles.

miércoles, 22 de febrero de 2012

Tarea 2: Procesos estocásticos discretos y contínuos

Podemos decir que, cuando en una X empresa se generan diferentes productos, por ejemplo, zapatos en una máquina constructora, es normal pensar que podríamos tener productos de los cuales tengan fallas y si en un futuro se nos llega a presentar este tipo de problema, podemos argumentar que este es modelo escolástico ya que  es tomado como un dato al azar y se relacionan las variables por funciones probabilisticas en donde consideramos que si tenemos un fallo seria un éxito y un fracaso el no tenerlo, si el interés de esta empresa es saber de una cierta cantidad de productos encontrar el numero de productos con fallos, tenemos que realizar un análisis de distribución binomial  

Como lo vimos en clase, el experimento de Bernoulli es un experimento que se hace aleatoriamente con solamente dos resultados, esto es si tenemos éxito o tenemos fracaso, por lo que la probabilidad del éxito le podemos decir p y la probabilidad seria un 1 - p, al cual podemos decir que es un binario en el cual 1 es éxito y 0 es fracaso, por lo que cuando realizamos el experimento de Bernoulli, se cuenta el numero de éxitos que tenemos en solamente un experimento.

Aplicado en el ejemplo que he propuesto, si se nos pide que tomemos solamente un zapato al azar y examinarlo para decidir si este producto tiene falla o no, por lo que este es un experimento de Bernoulli, pero tengo bien definido que únicamente voy a escoger un solo zapato de estos, en el caso del uso de la distribución binomial tenemos que tener en cuenta cuantos éxitos tenemos en repitiendo varias veces el experimentos de Bernoulli, en donde entonces podemos argumentar que el experimento viene siendo base para el binomial.

Proponiendo que, si el 17% de los zapatos hechos en la empresa tienen fallas, podemos decir que X es el número de zapatos con falla de una caja con 6 pares (o sea, 12 zapatos o productos). Considerando que X es el número de éxitos en 12 experimentos de Bernoulli separados con un parámetro de 0.17.

En una variable binomial, tenemos dos parámetros base los cuales son n, que es el número de experimentos que vamos a necesitar y p que es la probabilidad que tenemos de una respuesta favorable o éxito. Por lo que en el ejemplo propuesto podemos decir que X es una binomial con n = 17 y p = 0.17



Entonces en esta imagen, podemos ver que, como la probabilidad de P[X = 0] = 1 - p, P[X = 0] = 0.83 y como tenemos 12 zapatos y que cada uno tiene su probabilidad de que sea bueno de 0.83 por lo que la probabilidad es 0.83 12 = 0.1068


Si por ejemplo se nos pide encontrar la probabilidad de que tengamos solamente un zapato con fallo, podemos decir que P[X = 1] es de 12 * 0.17 * 0.83 11 = 0.262, en donde el 12 es el numero de veces que vamos a hacer el experimento porque son 12 zapatos, el 0.17 la probabilidad de que haya un fallo y el 0.8311 los zapatos restantes.


Si P[X = 2] entonces es cuando la probabilidad de que haya solamente dos fallas, por lo que podemos ver que P[X = 2] es de 0.172 * 0.8310 pero ahora multiplicado por el número que se necesita para que los zapatos se cambien en diferentes posiciones con fallas, por lo que este numero lo podemos sacar con el coeficiente binomial, en donde tenemos el numero de subconjuntos que hay en un conjunto, en este caso bincoeff(12, 2) = 66, el cual utiliza la formula


Por lo que al ver estos casos podemos argumentar la formula.

  • P[X = 0] = bincoeff( 12, 0) * 0.83 12
  • P[X = 1] = bincoeff( 12, 1) * 0.17 * 0.83 11
  • P[X = 2] = bincoeff(12, 2) * 0.172 * 0.8310
  • ….. etc….

Por lo que en general tenemos que.
P[X = k] = bincoeff(12, k)* 0.17k * 0.08312-k

en donde k = 0, 1, 2, 3, 4 …. 12.

Por lo que decimos que la función probabilidad de la distribución binomial


en donde k = 0, 1, 2, …., n.

Entonces vemos que este cuenta el número de éxitos que tenemos en n repeticiones que se hacen en un experimento de Bernoulli con probabilidad de éxito p.

Con el problema dado, he generado con el código que vimos en la clase (aquí) una gráfica.


En esta gráfica vemos la comparación con las diferentes probabilidades en la distribución binomial.


Version continua.
Podemos decir que la version continua de la distribución binomial es la distribución normal puede ser por ejemplo si se nos pide sacar el plastico del zapato tiene una distribución normal con una media de 72 y desviación tipica de 3 (medidas en micras), y si el plastico se consdera "garantizado" si el espesor del plastico esta entre 60 y 75 ¿Cual es el porcentaje de plastico de zapato que cumple con este requisito?.

Para poder realizar esto podemos utilizar octave con la función normcdf normalizando el calculo y obtener el resultado.


Entonces tenemos un resultado de 0.84 entonces el porcentaje del problema descrito con version de distribución normal es de 84.1%

Según esto, lo que modifiqué del código es que la k estuviera modificandose cada 0.1 para obtener una grafica mas definida, la verdad no estoy seguro que esté bien y espero que mis compañeros que enrealidad entendieron me puedan ayudar.

Expongo mi código.


  
Y genero esta gráfica.


Referencias
Notas de clase - Estadística - Universidad de Coruña

jueves, 16 de febrero de 2012

Pagerank [Tarea extra]

¿Qué es PageRank?
PageRank o PR, es un algoritmo para analizar las conexiones simultáneas que existen sobre un sistema de clasificación de páginas Web, el cual es utilizado como el motor de búsqueda de Google, para así poder medir cuantitativamente la popularidad de una página web y clasificar los resultados de la búsqueda.

Podemos decir, que los nodos que tenemos en el siguiente grafo son los estados de las páginas web y que suponiendo que cada nodo tiene k ligas que salen de estas, tenemos que la probabilidad de transición de una página a otra, va a ser de 1/k para cada uno, esto sería como cuando una persona solamente navega dando clicks al azar, solamente siguiendo de una página a otra.

Si suponemos que todas las páginas web estan conectadas entre ellos, nos proporciona una probabilidad de que cada cierto tiempo que nosotros llegamos a ésa página, esto quiere decir que, el pagerank nos dice que tan fácil es llegar a esta página, por lo que si ésta es importante, muchas otras páginas van a estar apuntando a ti, entonces si una persona navega al azar, frecuentemente va a llegar a una página que esta apuntado a ti y con esta mayor probabilidad, va a llegar a ver ésa página importante.

Ejemplo:
Para hacer este procedimiento, he dibujado un grafo simulando una mini red de 10 páginas, las cuales están todas conectadas entre si, pero algunas tienen mas ligas que otras, en este caso, podemos ver que las que están en rojo solamente tienen una liga a ellas, las amarillas tienen dos ligas y la verde es la que tiene mas ligas en la red, por lo tanto es la que se considera más importante.
Dibujo grafo

Representación gráfica




Aquí podemos ver la matriz de adyacencia, que es la que dice si hay o no liga, si tenemos un 1 quiere decir que esta tiene liga con la coordenada correspondiente, si tiene un 0 no tiene liga, haciendo una matriz binaria, luego para poder obtener el pagerank, tenemos que convertir esta matriz de adyacencia en una matriz estocástica, según sus transciones, por lo que cada uno sumará un total de k ligas y dividimos entre cada uno de estos elementos para obtener que la suma sea un uno y sea estocástica, luego con esto sacamos el eigenvector valor izquierdo, obteniendo el vector que nos va a decir cuales son las páginas más importantes.




Luego de esto, vemos que los valores grandes son los más importantes, para luego ligar este  que en su caso es página 2, que comparado con otras, tiene que ser mayor.






Obtenemos como resultado en el vector, la importancia de cada una de las páginas, en donde tenemos por muy superior a la página 2.




Por medio del comando spy, podemos obtener una gráfica sobre como está la matriz y cuales son sus ligas.


Referencias.
¿Qué es un eigenvector?
¿Qué es pagerank?
Algoritmo de pagerank
Octave

miércoles, 15 de febrero de 2012

Comparación móviles [Lab]


Podemos decir, que un dispositivo móvil e inteligente, son aquellos que son fáciles de transportar de un lado a otro, de un tamaño pequeño y diferentes tipos de conexiones, algunas veces memoria limitada y regularmente estos están diseñados solamente para ciertas funciones específicas.


En los últimos años, la ingeniería de dispositivos móviles ha ido evolucionando de un modo acelerado, contando con aparatos cada vez mas livianos y con facilidad de manejar información, procesándola de manera rápida por medio de teléfonos inteligentes o tabletas.


Para poder comprender mejor sobre como son las diferencias en diversos tipos de dispositivos móviles, al igual que computadoras portátiles, hemos decidido realizar una búsqueda por un rango de precios de entre 300 a 500 dólares sobre que diferencias significativas podemos encontrar, entre equipos como laptops, netbooks, tablets y celulares portátiles, para luego realizar una reflexión de porqué nuestro proyecto es necesario elaborarlo en un dispositivo móvil y como vamos a aprovechar su rendimiento.


Laptop:
Procesador 1.5 ~ 1.8 Ghz. Core 2 duo, i3, i5, AMD (2 nucleos)
Peso: 1.2 kg
Bateria: iones litio 6 celdas. 8 horas.
Pantalla: 14" ~ 20"
Memoria RAM: 2-4 GB DDR3
Webcam: Casi todas tienen.
Disco duro: 320GB - 500 GB Tipo: SATA
Sistema operativo: Windows 7 Home Premium
Unidad CD/DVD: Si tiene. Algunas con Bluray.
Gráficos: Intel HD, ATI Radeon, Nvidia.
La gente para que los ocupa: para realizar tareas más pesadas y con un mayor procesamiento.


Netbooks:
Procesador 1.0 ~ 1.66 Ghz Atom, C7, Armstrong
Peso: 0.35kg ~ 1.20 kg
Bateria: 3 ~ 6 celdas litio
Pantalla: 7" ~ 11"
Resolución: 1024x600 / 1280x1024
Memoria RAM: 1 ~ 2 GB DDR3
Webcam: La mayoria tiene.
Disco duro: 120 GB - 250 GB
Sistema operativo: XP,7 starter.
Unidad CD/DVD: No tiene.
Gráficos: GMA, Intel.
La gente para que los ocupa: para realizar tareas en donde es necesario de un procesamiento no tan superior como una Laptop.


Tablet:
Procesador: 0.8 Ghz ~ 1.1 Ghz
Peso: 0.41
Bateria: 2 celdas litio. 5 horas. Mas de 24 horas de audio. 2-5 horas de video.
Pantalla: 7"~10". Multi táctil.
Resolución: 1024x768/
Memoria RAM: 1 GB DDR2
Webcam: Algunas tienen.
Disco duro: 8 GB ~ 64 GB Tipo: Flash
Unidad CD/DVD: No tiene.
Gráficos: Compartidos con procesador (Tegra)
La gente para que los ocupa: principalmente para tareas sencillas, se tiene mas usabilidad por medio de la reacción a pantalla táctil y regularmente no puede ser un sustituto de una laptop o netbook.


Celular:
Procesador: 600 Mhz ~ 1 Ghz. Arm Cortex, Qualcomm Scorpion
Peso: 120 g ~ 220 g
Bateria: 1200 ~ 6750 mAh
Pantalla: 3'' ~ 4''
Resolución: 800x480/960x640
Memoria RAM: 256 ~ 521 MB
Webcam: Si tienen.
Disco duro: 1/4/8/16/32/64 GB (interno)
Sistema Operativo: Android, iOS,
Unidad CD/DVD: No.
Gráficos: PowerVR SGX530/ Adreno 200
La gente para que los ocupa: principalmente para hacer llamadas, pero los teléfonos inteligentes con nuevas innovaciones que incorporan diferentes hardware que no podemos encontrar en laptops.


Por lo tanto, podemos concluir que los dispositivos móviles se han convertido en equipos cada vez más equipados y podemos hacer uso de todo este material, para poder realizar nuestra aplicación cantamela!, la cual podemos utilizar tecnologías inalámbricas como 3g/4g/WiFi, respuesta a pantallas táctiles, lo cual mejora la interacción hacia la persona y simplemente el poder tener la movilidad para usarla cuando el usuario desea, pretendemos que nuestra aplicación la podamos también portar a tablets con sistema operativo android, en donde consideramos que es un dispositivo móvil que tienen hardware y software que podemos utilizar para el desarrollo de nuestro proyecto y abarcar dos diferentes campos.


Referencias.
Smartphone comparison
Laptops vs netbooks