lunes, 28 de mayo de 2012

Simulación de ambientes urbanos

La importancia

Podemos decir que en una ciudad, el número de grandes subterráneos y nuevos rascacielos han ido aumentando rápidamente en los últimos años, por lo que este tipo de instalaciones presentan trayectorias complejas, por ejemplo en el flujo de aire o en los rayos solares, muchos de los cuales afectan considerablemente en las áreas de la actividad humana y las rutas de evacuación, por lo que existen riesgos crecientes de que las diversas condiciones que cambian a través de los años, así como prevención de desastres que se pueden agravar si hay un desastre mayor en caso de un incendio o terrorismo bioquímico, debido a que la complejidad de las trayectorias de flujo de aire no son lineales.

Simulación de radiofrecuencias en ambientes urbanos, observando el flujo de aire,
el cual es no lineal en este tipo de ambientes. 


Con el fin de prevenir o reducir al mínimo esta catástrofe, los sistemas de prevención de desastres deben de ser instaladas correctamente con una consideración previa teniendo fiabilidad y robustez, por lo que es esencial para desarrollar un simulador de ambientes urbanos permitiendo una predicción exacta y la evaluación de medios ambientes en conjunto con la seguridad.


Por ejemplo, podemos decir que si tenemos una base de datos para describir los complejos subterráneos y edificios, llamados edificios virtuales, podemos hacer objeto de modificación mediante funciones y datos de salida para desarrollar un edificio virtual con sistemas de diseño eficiente para el medio ambiente, seguridad con la creación de sistemas de gestión de energia, modelos de simulación de construcción de aire acondicionado, dinámica de fluidos computacional, incendios y evacuación de este, a medida de que en la población se le presta atención a un ambiente urbano más verde, existe la necesidad de que tengamos simulaciones de medios ambientes para la planifiación empresarial, paisajes urbanos completos y los efectos solares teniendo una repercución a los seres humanos.

¿Qué tipo de simulaciones se pueden desarrollar?

Las simulaciones de ambientes urbanos que podemos encontrar utilizan para su buen funcionamiento y resultados óptimos modelación de diferentes aspectos urbanos, entre los cuales podemos nombrar:


  • Flujos de aire en situaciones de emergencia.
  • Transporte de sustancias peligrosas
  • Crecimiento del fuego
  • Evaluación de una actividad de subterráneos
  • Actividades de edificios.
  • Efectos solares
  • Energía eléctrica de edificios.
  • Impacto ambiental
  • Impacto visual

Midtown Zoning, desarrollado por simcenter para planificar un rascacielos en Nueva York 

Simulación de edificios solares desarrollado por Solarlux

Las herramientas


Existen herramientas que podemos utilizar nosotros como desarrolladores de software para implementar simulaciones de ambientes urbanos, solo para mencionar algunos:

Simulación de ecosistemas.

La importancia

La simulación de ecosistemas y modelaciones ecológicas son campos que están creciendo, teniendo diferentes aplicaciónes entre la ecología teórica, las matemáticas y la computación, las simulaciones de ecosistemas tienen como objetivo de modelar la dinámica de los ecosistemas principales con el fin de sintetizar la comprensión de estos sistemas, para poder permitir predicciones de como va a cambiar su comportamiento en un futuro.

Arbol de la vida generado por simulación de EcoSim


Debido a que los ecosistemas naturales son muy complejos, por ejemplo en cuanto a el número de especies de un cierto animal o interacciones ecológicas, los modelos de ecosistemas suelen simplificar los sistemas con un número limitado de componentes, permitiendo el desarrollo de simulaciones por computadora de estos ecosistemas.

Uno de los principales intereses de las simulaciones de ecosistemas es que ofrecen una visión global de la evolución de un sistema, lo cual es difícil de observar en la naturaleza, sin embargo, el alcance de las simulaciones de ecosistemas siempre ha sido limitado por las posibilidades de cálculo, hoy en dia es posible hacer simulaciones mucho más complejas.

En el área de simulación de ecosistemas, proporciona un enfoque a las características y el comportamiento de organismos individuales, se trata de modelar individuos como entidades singulares y discretos, por lo que los organismos con diferentes características ya sea la edad, sexuales y su papel en el ecosistema y las propiedades de este representan los individuos, para observar un mecanismo evolutivo, aunque muchas veces estos son muy simples o limitaciones como que los individuos no se mueven o limitados en número.

Existen modelos como Polyworld que han propuesto agentes complejos y modelos de comportamiento usando redes neuronales artificiales y sistemas de reglas aprendidas para desarrollar modelos de comportamiento de agentes durante su vida y por un proceso evolutivo, este tipo de sistemas han dado lugar a varias conlusiones interesantes sobre la complejidad y la estructura de la red del sistema, sin embargo son costosos computacionalmente y solo permiten ejecuciones de poblaciones pequeñas.


¿Qué tipo de simulaciones se pueden desarrollar?




Con este tipo de simulaciones se pueden estudiar tópicos como:

  • Comportamiento global como un proceso caótico.
  • Patrones de especies
  • Mecanismos de especies
  • Predicción de especies en extinción
  • Distribuciones de población
  • Corelaciones entre la diversidad genética y el estado físico.
  • Entre otros.
Las herramientas

Existen herramientas que podemos utilizar nosotros como desarrolladores de software para implementar simulaciones de ecosistemas, solo para mencionar algunos:


miércoles, 23 de mayo de 2012

Presentación final de móviles.

móviles-final





Mircroprocesador vs microcontrolador

Cuando empezamos a descubrir el mundo de los sistemas integrados, es común preguntarnos cual es la diferencia entre un microprocesador y un microcontrolador, en esta enrada explicaré las diferencias y similitudes básicas entre estos componentes integrados, generando funcionamiento de sistemas inteligenes que van desde herramientas, móviles, computadoras pequeñas, etc., a pesar de que cada uno proporciona una gestión automatizada, difieren en su estructura interna, las caracteristicas y sus aplicaciones.

Microprocesador

Podemos empezar por definir que es un microprocesador, en donde podemos decir que es un chip integrado creado para procesar información binaria y alimentarla, de acurdo con las instrucciones de programación guardados en la memoria, es realmente un circuito de reloj impulsado por lo que puede ser programado para lograr varias tareas, mayor es la cantidad de transistores, mayor es su capacidad, para que un microprocesador pueda funcionar es necesario que sea conectado afuera del espacio de meoira y de los puestos de salida y entrada, se trata de productos versátiles que pueden ser programados para realizar una amplia variedad de funciones.


Un procesador de una computadora es sin duda un ejemplo de un microprocesador de gama alta con miles de millones de transistores grabados en el chip, para hacer frente a todas las resposabilidades de una computadora electrónica, basado en cómo se reserva el espacio de memoria y cómo se va a acceder a esa información, según las arquitecturas ya sea Von Neumann o Harvard como he hablado en entradas anteriores.

Los microprocesadores se clasifican de acuerdo a la cantidad de bits que son capaces de procesar a la vez, se amplia de 8 a 64 bits, las cuales son utilizadas en las computadoras, ellos poseen la capacidad de ejecución de un conjunto de instrucciones.

Microcontrolador


Un microcontrolador por el contrario, es un circuito integrado, como un microprocesador, con su espacio de la memoria y la entrada de los puertos de salida, creado para ser integrado en los aparatos electrodomésticos y aparatos inteligentes, se han precompilado código de equipos guardados en su módulo de espacio de memoria que tiene incorporada, que puede ser ejecutado de acuerdo a determinados insumos alimentados en ellos, la información y las aplicaciones se guardan normalmente en ellos haciendo uso de la EEPROM, ROM, EPROM o memoria flash, ya que estos procesadores no usan una memoria externa, poseen un conjunto de instrucciones muy restringido y también limita su aplicabilidad, tiene pines de entrada y salida que se utilizan para obtener datos y ofrecer una respuesta adecuada en tiempo real.



El microcontroladr se creó para ofrecer un verdadero rendimiento automatizando en los aparatos, desde teléfonos móviles, impresoras, lavadoras, etc., principalmente debido a su espacio de memoria incorporada y puertos de entrada y salida, un microcontrolador es realmente un equipo compacto que puede ser utilizada sin requisitos para una gran cantidad de circuitos, entonces podemos decir que están preparados para ser pre-programados utilizandos en sistemas embebidos.

Comparación

Un microcontrolador es un sistema integrado que nosotros podemos modificarlo a nuestro gusto con procedador y espacio de memoria, preparado para conectar periféricos, creado por ejemplo para controlar aparatos automáticos digitales, a pesar de que un microprocesador es realmente un chip con mayor densidad de transistores, es creado para albergar una variedad de características complicadas que tienen la instrucción mucho más aplia a configurar, utilizado para generar computadoras completas a gran escala.

Mientras que los microcontroladores están orientados en la dirección de su utilización en sistemas integrados, los microprocedadors están oriendados en dispositivos informáticos que se ejecutan aplicaciones compuestas con mayor grado de lenguajes, un microprocedador exige espacio en memoria externa y las conexiones con los puertos de salida de entrada, a pesar de que los microcontroladores tienen todos estos periféricosm puede hacer que su funcionamiento sea considerablemente más rápido en comparación con los microprocesadores, aunque un microcontrolador podría alcanzar una tasa de aumento en funcionamiento, su rendimiento se ve limitado por sus pocas instrucciones.

Espero que esta entrada les sea de ayuda a todos aquellos que no entienden las diferencias entre microprocesador y microcontrolador, es muy sencillo, lo más importante que podemos concluir de esto es que, los microprocedadores son de mayor complejidad, como por ejemplo los miembros de la familia x86 que son los que se utilizan en algunas computadoras, son programables y permiten ejecutar una amplia gama de funciones, en comparación con los microcontroladores como un PIC, el cual se crean para ejecutar tareas muy específicas y restringidas, pueden encontrar más información aquí

martes, 22 de mayo de 2012

Usando Fritzing

Hacer diseños de nuestros propios circuitos puede ser muy complicado cuando no utilizamos herramientas adecuadas o cuando tenemos que hacer circuitos grandes, por lo que tenemos que diseñar un esquema, probarlo en el protoboard, etc...


Existe un programa de código abierto llamado Fritzing el cual funciona en Windows, Max y Linux, a diferencia de otros programas que he probado, considero que fritzing fué el más sencillo ya que tiene una interfaz simple y hace que el diseño de circuitos sea intuitivo, ahora, les mostraré paso a paso como realizamos nuestro circuito en frizing para controlar el cubo de Leds de 10x10x10 con 2 arduinos entre otras cosas.

En el caso de mac, como en los demás sistemas operativos, vas a la página de fritzing aquí, seleccionas la versión que deseas descaegar, y vas a seguir las intrucciones de la página para instalarlo en tu compu, al momento de instalar fritzing, incluirá con todo tipo de bibliotecas de piezas grandes, compontentes básicos, cables, botones, resistencias, también componentes especiales como placas de Arduino.+

Al abrir por primera vez un proyecto Fritzing, se iniciará una pantalla con un protoboard como se muestra a continuación.


Como ven, a la derecha de la pantalla, tenemos una barra de menú con todos los componentes y opciones, si un componente es personalizable, la mitad inferior de la barra de herramientas se muestra las opciones de personalización disponibles para ese parte específica.


Si quisieramos por ejemplo, poner un 74hc595 en el protoboard, vamos a seleccionar y arrastrar el LED en el área de trabajo, como muestro en la captura, cuando lo ponemos en este protoboard, el modo de cable está conectado a una columna vertical en el tablero, por lo que si un componente realiza una conexión a una columna, la fila entra se vuelve de color verde claro, indicando una conexión eléctrica entre los espacios del protoboard.



Podemos tambien realizar de manera esquemática nuestro diagrama y para PCB de manera automática y muy sencillo, solamente en el menú seleccionamos el que queramos.


Así podemos ir arrastrando y seleccionando los elementos que necesitamos para la creación de nuestro proyecto, por ejemplo aquí les dejo nuestro circuito de nuestro proyecto.

Utilizando:
  • 20 74HC595
  • 110 Resistencias
  • 10 Transistores
  • 2 Arduinos (BT y Duemilanove)
  • Fuente de poder

Clic para zoom

Te recomiendo veas este video, para mirar como utilizar el programa y que otras funcionalidades puedes hacer con el.




Espero que esta entrada ayude a entender como utilizar fritzing para poder diseñar bien nuestro proyecto de arduino y de una manera más clara explicando como funciona nuestro proyecto, ya sea para nosotros mismos o para exponerlo.

Arquitectura de PIC

La programación de PIC es más sencilla si nosotros hacemos antes de realizar un proyecto, una comprensión de la arquitectura que se maneja internamente en el microcontrolador, por lo que estos varían de los sistemas de computación a los cuales ya estamos acostumbrados a programar, en esta entrada voy a hablar de las arquitecturas más importantes, al igual que los ventajas y desventajas en sistemas integrados.

Existen dos arquitecturas principales, la Von Newmann y la arquitectura Harvard.

Arquitectura Von Neumann

Esta arquitectura es la manera mas común para crear un sistema, en donde los buses de dirección y los datos son comunes para todos los accesos de memoria, el programa o código y los datos existen en un intervalo de memoria, junto con los periféricos asignados en memoria, podemos decir algunos ventajas y desventajas de esta arquitectura.



Es importante recalcar que la unidad de aritmética y lógica  (ALU) y la unidad de control se denominan colectivamente en la CPU, por lo que un microprocesador es solo una CPU en un solo chip, un microcontrolador es básicamente, un ordenador en un chip, por lo que la CPU, memoria, etc, estan todos ellos en un chip.

Ventajas
  • Se simplifica el hardware, tanto de circuitos de diseño como de elaboración
  • Es más facil de generar código, lo que hace que la multitarea sea más facil.

Desventajas
  • Las instrucciones deben ser múltiplos de la anchura del bus de datos, pudiendo ser ineficiente
  • Existe un número variable de ciclos necesarios para poder obtener instrucciones, por ejemplo, una instrucción en donde se requiere datos de la memoria, debe esperar al menos otro ciclo antes de que pueda completarse, mientras que algunas instrucciones se ejecutan mucho más rápido, pudiendo ser un problema para aplicaciones en donde necesitamos las cosas rápido.

Arquitectura de Harvard

Esta es una arquitectura en donde se espera no tener cuello de botella en la memoria por la división de la memoria en instrucciones de código y en áreas de datos, entonces estas se acceden a través de datos por separado y buses de direcciones.



Esta es la arquitectura que se utiliza en el microprocesador Armel AVR.

Ventajas
  • Los datos y buses de dirección pueden tener diferentes anchuras, por lo que la memoria del programa puede ser lo suficientemente amplia como para poder incorporar una instrucción y datos fijos en una sola instrucción.
    • La mayoria de las instrucciones se ejecutan en un solo ciclo de reloj
Desventajas
  • Es más confuso 
  • El hardware es más complicado.
Podemos decir que la memoria del programa es diferente a la memoria de datos, por ejemplo en la serie de PIC16FXX, la memoria del programa es de 14 bits de ancho mientras que la memoria de datos en una forma más convencional es de 8 bits de ancho y PIC es un procesador de 8 bits.

La arquitectura Harvard tiene una memoria del programa y la memoria de datos como memorias separadas y se accede desde buses separados, esto mejora el anchi de banda más tradicional de la von neumann, en la que el programa y los datos se obtienen de la misma memoria usando un mismo bus, para ejecutar una instrucción, una maquina de von Neumann debe acceder una o más veces a través del bus de 8 bits para recuperar la instrucción, mientras que en la arquitectura de harvard, la instrucción se recupera en un solo ciclo de instrucción los 14 bits, mientras que la memoria del programa se puede accedar, de manera independiente, como la memoria de datos donde se puede leer y escribir, permitiendo una instrucción para ejecutar la siguiente.


En esta imagen podemos ver una arquitectura básica del PIC16C74A, en donde vemos que se compone de la memoria del programa, los registros de archivos y la memoria RAM, ALU y registros de la CPU, es importante señalar que el contador de programa es de 13 bits y la memoria de programa está organizado como 14 bits, teniendo una capacidad de 8K x 14 bits, por lo que cada instrucción de el PIC 16C74A es de 14 bits de largo.


Espero que esta entrada ayude a las personas a comprender como está compuesto un PIC y así programar con una mayor eficiencia cualquier proyecto PIC que tengamos en algún futuro profesional.

Puedes encontrar la tarjeta de referencia de este PIC aqui
Más información sobre las arquitecturas aquí

Consideraciones en promocionar una aplicación

Algo que debemos considerar al realizar una aplicación es que, luego de un trabajo intenso, en donde dedicamos muchas horas para realizar una aplicación y que hicimos de todo para que la aplicación al final de cuentas llege a las manos de un usuario real, es importante recalcar que debemos de considerar ciertos aspectos al momento de subir aplicaciones a una tienda administrada por la compañia del dispositivo, ya sea iOS, Android o Blackberry, etc...



Según estudios, iOS es la plataforma más rentable para la mayoría de aplicaciones hablando en este momento, ya que a pesar de ser más competitivos y tener más aplicaciones que las demás tiendas, los usuarios de la App Store están dispuestos a pagar por tener un contenido que las otras tiendas, por lo que podemos decir que es la mejor en estos momentos, pero tambien cabe recalcar que Android, ha superado a Apple en términos de descargas en los ultimos años.

En general, la mejor manera de que nuestra aplicación llame la atención del público, considero que es la contrucción de una aplicación funcional y con una interacción amigable, todos apreciamos que este bonita y fácil de usar, pero tambien dependen otros factores de los cuales hablaré en esta entrada.

Nombre de la aplicación y palabras clave de búsqueda.

  • Es mejor elegir palabras clave en donde los usuarios pueden buscar aplicaciones similares a la que nostros estamos desarrollando.
  • Hacer una lista de las palabras clave más importantes primero.
  • No es necesario repetir palabras en el titulo de la aplicación o en la categria principal.
  • Los motores de búsqueda algunas tiendas de apps son primitivas y no se ajustan a los sinónimos, pluralidad o errores tipográficos.
  • Separar las palabras con espacio o comas pero no ambas en las palabras clave.
  • Si la aplicación es multilenguaje, estaría bien el ver cuales de las palabras clave en los mercados según el país.
  • Comience el nombre de la aplicación, con la letra A o con un numero si es posible, ya que por ejemplo iTunes se lista en orden alfabético y puede ayudar a que la aplicación se presente en la lista al principio.

Formato de la descripción

Seria importante tomar en cuenta que, solo las primeras 3 lineas que se muestran por defecto en la app store antes de que seleccione la app, por lo que es importante asegurarnos de que ese texto de 3 lineas sea relevante para que las personas lo seleccionen.

Por ejemplo, veamos estas dos capturas de pantalla, en donde podemos ver que en una el formato es tedioso y en otra el formato es mejor en la descripción de la app.




Proporcionar una versión gratuita o lite de la aplicación.

Las palabras más buscadas son "free" o similares, por lo que es bueno ofrecer una versión gratuita limitada de la aplicación de pago ya que mejora el descubrimiento de la aplicación, creando una experiencia libre y ayuda a que la aplicación de pago pueda descargarse más.

Baja el precio de la aplicación.

Varias personas tiene existo en sus aplicaciones cuando ellos bajan de precio su app en la tienda, esto hace que se promocionen y tengan más exito, agregando palabras como "gratis" o "barato" en el título de la aplicación.


Crear un buen logo.

Tener un logo hace que podamos destacar entre las apps que existen en la tienda, hace que llame la atención de la gente que va a descargarla.

Cualidades de los logotipos:

  • Alto contraste de los colores
  • Utilizar una letra o animal de logotipo provoca una "linda" respuesta.
  • Poner contenidos verdes o naranjas.
  • Un contorno distinto a el logo.

Aquí seria bueno realizar un estudio de preguntar cual es el logotipo más agradable que ellos consideran y poder así sacar una conclusión de cual utilizar.

Crear una versión tablet de la app

Existen menos aplicaciones para el iPad o versiones tablets para Android en el mercado, así que si nostros tenemos una versión para iPad o tablet de nuestra aplicación podemos fijar por ejemplo, un precio más alto y que tengamos menos competencia en el descubrimiento y clasificación de la app, por lo que este es un punto importante.

Espero que esta entrada nos ayude a entender que si bien, al programar una aplicación debemos de tener ciertas métricas para llegar al éxito, también existen cuestiones de marketing que debemos tomar en cuenta a la hora de comercializar nuestra app, en esta página pueden encontrar un articulo extenso sobre esto.

lunes, 21 de mayo de 2012

Modelo-Vista-Controlador

El Modelo Vista Controlador es un patrón de arquitectura y es un método de diseño que organiza la interfaz humano-computadora para las aplicaciones de software, podemos decir que este paradigma, lo que hace es dividir el panel de operador en un modelo, el cual son los datos de la aplicación, por otra parte, la vista, que es la forma en que el usuario ve el sistema.

El propósito de muchos sistemas o software es para recuperar datos desde una base de datos y mostrarlo al usuario, después de que el usuario cambia los datos, el sistema almacena los cambios en la base de datos, esto debido a que el fluho de información se encuntra entre la base y la interfaz de usuario, pero muchas veces existe un problema en el que la interfaz de usuario tiende a cambiar mucho más frecuentemente que el sistema de almacenamiento de datos, otro problema por ejemplo es el acoplamiento de datos y elementos de la interfaz de usuario es que las aplicaciones tienden a cambiar de colores o logos, sería un desastre tener que cambiar uno por uno, entonces, como podemos hacer que la funcionalidad de la interfaz de usuario de una aplicación se pueda modificar fácilmente las partes individuales, es aquí donde entra el modelo-vista-controlador.

 El Modelo-Vista-Controlador (MVC) separa el modelo de la presentación y las acciones en la entrada del usuario en 3 clases separadas.
  • Modelo: El modelo maneja el comportamiento y los datos de la aplicación, respondiendo a las solicitudes de información acerca de su estado, responde a las intrucciones para cambiar el estado.
  • Vista: La vista gestiona la visualización de la información
  • Controlador: El controlador interpreta las entradas, por ejemplo, en el caso de iOS, los toques que le hacemos a las pantallas, informando al modelo el cambiar según sea apropiado.

 Es importante recalcar que tanto la vista y el controlador dependen directamente del modelo, como vemos en el diagrama, sin embargo, el modelo no depende de la vista ni del controlador, entonces esta es una de las principales ventajas de la separación ya que permite que el modelo que se contruyó y probó independiente de la presentación visual, la separación entre la vista y el controlador es secundario en muchas aplicaciones, por lo tanto el Modelo Vista Controlador es un patrón de diseño fundamental para la separación de la lógica de la interfaz de usuario y de la lógica del trabajo.

El MVC en iOS, los View controllers son una parte fundamental entre los datos de una aplicación y su aspecto visual, cada vez que una aplicación de iOS muestra una interfaz de usuario, el contenido que se muestra es manejado por el view controller o un grupo de controladores que coordina la vista con los demás, proporcionando un esqueleto para contruir aplicaciones en iOS.

iOS proporciona muchas funciones integradas en las clases de controlador de vista para apoyar elementos estandar de interfaz de usuario, como la navegación y barras de tabulación.


En MVC, cada controlador posee una vista y un modelo, de hecho es uno de los patrones más antiguos en la ingeniería de software.





¿Cuando usar MVC?
  • Cuando el código se mezcla entre sí, es dificl para nostros desarrolladores trabajar usando una fusión extraña porque no existe una división clara entre la interfaz y los datos. 
  • La interfaz, la lógica de la aplicación y los datos son poco probable que sean reutilizable en otras aplicaciones ya que la combinación de los tres es demasiado específicas
  • La aplicación es difícil de extender y la adición de caractrísticas requiere de trabajo en torno al código existente, el desarrollador necesita que trabajar con todo el código para poder agregar características, aunque muchas no esten relacionadas entre si.
En la suite de Apple para iOS el desarrollo de aplicaciones para el sistema, el diseño de MVC se da de una forma "natural", ya que por ejemplo, cuando estamos haciendo los proyectos y empezamos a programar, se nos guiará en el uso de patrones de disño MVC automáticamente.

Espero que esta entrada nos ayude a entender como funciona el MVC y diseñar para futuros posteriores aplicaciones utilizando este tipo de patrones.




Seguridad y permisos en Android

En esta entrada hablaré de como podemos, nosotros como desarrolladores, utilizar las características de seguridad que nos proporciona el sistema operativo Android.



Podemos decir que el sistema operativo Android es un sistema de privilegio-separado, en donde cada aplicación que se pone en ejecución tiene una identidad distinta en el sistema, por ejemplo una ID de usuario y un ID de  grupo, endondes las partes del sistema también están separados en distitans identidades, podemos decir que Linux, como lo vimos en sistemas operativos, lo que hace es aislar las aplicaciones entre si y del sistema.

Para poder proporcionar características de seguridad a una aplicación se pueden declarar un mecanismo de permiso en donde imponemos restricciones a las operaciones específicas de un proceso al igual que permisos por URI para la concesión de elementos específicos de datos.

Arquitectura de seguridad

Un punto central en el diseño de la arquitectura de seguridad de Android es que no hay ninguna aplicación, entonces por defecto, se tienen permisos para realizar cualquier operación que pueda tener un impacto negatico en otras operaciones, o en el sistema operativo en si, inclusive en el usuario, esto incluye el leer o escribir los datos privados del usuario, leer o escribir archivos de otra aplicación, la realización de acceso a la red, manteniendo el dispositivo en modo activo, etc.

 Debido a que las aplicaciones de Android deben hacer de manera explícita el compartimiento de recursos y datos, debemos de declarar que permisos se necesitan para hacer las capacidades adicionales de nuestra aplicación, es importante decir que las aplicaciones, al momento de instalarlas, el sistema le pide el aceptar las condiciones en que esta aplicación va a funcionar, tambien, que Android no tienen ningún mecanismo para dar permisos de forma dinámica en tiempo de ejecución, para no complicar la experiencia del usuario.

Aplicaciones con certificado

Todas las aplicaciones de Android, los archivos .apk, deben de tener "firmado" un certificado cuya clave privada se lleva a cabo por nosotros como desarrolladores, este certificado tiene como finalidad identificar al autor de la aplicación, no tiene que ser firmado por una autoridad de certificación, por lo que es perfectamente facil de realizar y una manera típica de generar certificados para distinguir a los autores de las aplicaciones, permitiendo que el sistema pueda conceder o denegar el acceso a las aplicaciones de permisos a nivel de una firma y conceder o denegar la solicitud de la aplicación para una ID de linux.

ID de usuario y acceso a archivos


Al momento de hacer una instalación de una aplicación de Android, se le da a cada paquete un ID de usuario de Linux distinta, en donde se mantiene constante durante la vida del paquete en ese dispositivo, en un dispositivo que sea diferente, se puede tener el mismo paquete pero con UID diferente, lo que importa es que cada paquete tiene un UID distinto en un determinado dispostivo.

Debido a que la aplicación de seguridad que sucede es en el nivel de proceso, el código de cualquiera de los dos paquetes que normalmente no se pueden ejecutar en el mismo proceso, a que estos necesitan funcionar como diferentes usuarios, esto es similar a lo que pasa en Linux.

Se puede utilizar el atributo sharedUserId en una etiqueta en el AndroidManifest.xm, en donde les asigna el mismo ID de usuario a los dispositivos y permisos en los archivos.

Los datos que podamos almacenar en una aplicación se les asignará la ID de la aplicación, normalmente no son accesibles para otros paquetes, cuando se crea un nuevo archivo, se pueden utilizar banderas como MODE_WORLD_READABLE o MODE_WORLD_WRITEABLE para permitir que cualquer otro paquete puede leer o escribir en el archivo, permitiendo su lectura o escritura global.

Uso de permisos

Una aplicación básica en Android no tiene permisos asociados con ella, lo que significa que no puede puede hacer nada de lo que tendría efectos secundarios en la experiencia del usuario o cualquier otro dato en el dispositivo, para hacer uso de características especiales protegidas por el dispositivo, se debe incluir en sus etiquetas del AndroidManifest.xml uses-permission.

Por ejemplo si se necesita, en mi caso del proyecto de la materia, el uso de internet, se declara de esta manera.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.app.cantamela" >
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>

Así, en el momento de instalar la aplicación, los permisos solicitados por la aplicación se preguntarán en el instalador, no se permite que estos cambien luego de que la aplicación inicia.

Los permisos proporcionados por el sistema Android se pueden encontrar en Manifest.permission, cualquier aplicación puede definir y hacer cumplir sus propios permisos, así que esta no es una lista completa de todos los permisos posibles.

Espero que esta entrada nos ayude a entender como podemos manejar los permisos en Android y como funciona de manera óptima para tener una mejor experiencia al usuario.

jueves, 17 de mayo de 2012

Notificaciones toast.

¿Que son los Toast?

Las notificaciones Toast en Android, son mensajes que aparecen en nuestra pantalla del dispositivo, por lo que solo se llena el espacio requerido para este mensaje y la actividad actual del usuario permanece visible e interactivo, por lo que la notificación automáticamente se desvanece.

Una notificación toast, es por ejemplo cuando utilizamos la aplicación integrada de alarma, en donde la alarma está activada, se muestra una notificación para que saber que la alarma se creó.


Una notifiación toast se puede crear a partir de una actividad o un servicio en Android, podemos al igual cambiar tamaño y modificarla a nuestra manera, por lo que en esta entrada, explicaré como poder hacer una Toast customizada por nosotros para el uso de la aplicación Cantamela!.

Toast básica.

Para inciar en la realización de una toast básica, debemos de utilizar el método makeText, en donde como parámetros le pondremos, el contexto de la aplicación, el texto a representar y la duración que quieras que se muestra, para al final utilizar show(), para mostrarla, como se ve en el siguiente código.

Context contexto = getApplicationContext();
CharSequence texto = "Soy una notificacion toast :D";
int duracion = Toast.LENGTH_LONG;

Toast toast = Toast.makeText(contexto, texto, duracion);
toast.show();

En donde tenemos este resultado:



Toast propia.

Si necesitamos realizar una toast, en donde no solamente necesitamos un texto, podemos hacer una toast hecha por nosotros en donde primeramente necesitamos hacer un xml, con nuestras preferencias que deseamos que tenga esta notificación, en mi caso, hice este tipo de xml, grabado como msj.xml.


<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/notificacion"
              android:orientation="horizontal"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:padding="10dp"
              android:background="#3D2423"
              >
    <ImageView android:id="@+id/imagen"
               android:layout_width="wrap_content"
               android:layout_height="fill_parent"
               android:layout_marginRight="50dp"
               android:layout_marginLeft="50dp"
               />
    <TextView android:id="@+id/texto"
              android:layout_width="wrap_content"
              android:layout_height="fill_parent"
              android:textColor="#D6C274"
              android:textSize="45sp"
              />
</LinearLayout>


 Ahora, por el lado de java vamos a hacer las siguientes llamadas a métodos para construir el toast, hay que fijarnos que el id es "notifiacion", y que donde posicionará el texto es el id "texto", al igual que el id "imagen", y "audifonos1" es la imagen que estoy utilizando de ejemplo.


Context contexto = getApplicationContext();
LayoutInflater inflater;
inflater = (LayoutInflater)contexto.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View notif = inflater.inflate(R.layout.msj,(ViewGroup) findViewById(R.id.notificacion));
ImageView imagen = (ImageView) notif.findViewById(R.id.imagen);
imagen.setImageResource(R.drawable.audifonos1);
TextView texto = (TextView) notif.findViewById(R.id.texto);
texto.setText(mensaje);

Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(notif);
toast.show();


Tenemos este resultado:



miércoles, 16 de mayo de 2012

Asynctask en Android

Una de las "consideraciones" relativamente nuevas del sistema operativo Android Ice Cream Sandwich, que es el más nuevo hasta la fecha que estoy escribiendo esta entrada y en el cual estoy haciendo mi aplicación, es que no puedes hacer una conexión a un servidor en una sola tarea principal, por lo que es necesario crear tareas adicionales en la actividad para poder hacer esta conexión, algo que por ejmplo en los sistemas operativos Android, versiones 2.X.X, no tienen, por lo que estuve investigando como poder hacer este tipo de conexión en mi app y encontré que podemos hacer tareas en el fondo en la aplicación, en esta entrada hablaré de como puedes hacer ese tipo de tareas.


Clase AsyncTask

Cuando estamos desarrollando una aplicación de Android, podemos disponer de alguna tarea se pueda ejecutar en segundo plano, pero que pasa si solamente queremos hacer una tarea sencilla en el fondo, para eso podemos utilizar esta clase AsyncTask.

Nuestra aplicación de Android puede llegar a ser compleja de manera que estemos desarrollando con el tiempo, por lo que, si tenemos una conexión con un servidor o enviar y recibir datos desde la Web, como lo es en mi aplicación, se ha vuelto obligatorio en las últimas versiones que esto se haga sin interrumpir el hilo de la interfaz de usuario, si deseas hacer esto, te lanzará errores que no estña permitiendo hacerlo.

En primer lugar vamos a definir, ¿Cuál es el hilo de la interfaz de usuario?, bueno pues este es el que regulamente es el principal en nuestra aplicación, esto quiere decir que es en donde todo se procesa para inciar la aplicación, es como tener una sola tarea que hace todo lo importante, entonces, si solo tuvieramos que hacer una interfaz de usuario, en donde solamente mostramos botoncitos y hace funciones sencillas, esto está bien, pero si tu no estás en ese caso, entonces podemos tener múltiples hilos que se ejecutan al mismo tiempo, en una sola aplicación, el hilo de la interfaz de usuario, que nos permite movernos a través de la pantalla, mientras que por ejemplo, en una tarea de segundo plano, estamos recibiendo datos desde un servidor.

¿Cómo podemos hacer esto? Pues, existen muchas maneras, según yo, por ejemplo usuando Threads de java, hacer Runnables, etc..., pero considero que esta es una manera mucho más sencilla y mejor que las demás, utilizando la clase AsyncTask.

Una estructura típica de una clase de AsyncTask es la siguiente:


private class miTarea extends AsyncTask<x, y, z>

protected void onPreExecute(){

}


En donde podemos ver que onPreExecute() se ejecuta antes de empezar un nuevo hilo, no tiene valores de entrada ni de salida, así que aquí podemos inicializar las varibles o lo que querramos hacer.

 
protected Z doInBackground(X...x){

}


En este método, podemos decir que es el más importante de la clase AsyncTask, es en donde podemos poner todo lo que queremos que se haga en el fondo de la aplicación, en un hilo diferente al principal, aquí la entrada es un conjunto de objetos x, en donde como podemos ver en la cabecera, son los que los que le entran a la extends de AsyncTask, devolviendo un objeto Z.


protected void onProgressUpdate(Y y){

}


 Este método es el que se llama cuando se utiliza otro método llamado publishProgress(y), en donde por lo general se utiliza cuando queremos mostrar algún progreso o información en pantalla principal, al igual que una barra de progreso, mostrando la operación que se está haciendo en el fondo.


protected void onPostExecute(Z z){

}


Este método es utilizado cuando después de toda la operación que se hizo en background, lo manda llamar, y le entra como parámentro de entrada, el parámetro de salida del método de doInBackground.

Entonces podemos decir que los valores que entran a la AsyncTask son X que es el tipo de variable de entrada que tenemos para el proceso del fondo.

La Y es el tipo de objetos que se van a introducir en el método onProgressUpdate, y la Z es el tipo de objetos que tendremos del resultado de las operaciones hechas en doIbBackground.

Para hacer llamar esta tarea lo que tenemos que hacer es:

 
miTarea tareita = new miTarea();

tareita.execute(x);


En donde x es la entrada del parametro del tipo X.

Podemos que, una vez que se esté ejecutando, saber el estatus, con el siguiente método.

tareita.getStatus();

en donde podemos tener resultados:
  • Running: Indicando que la tarea se está ejecutando
  • Pending: Indicando que la tarea no se está ejecutando
  • Finished: Indicando que onPostExecute(); ha terminado.


Consejos

Estos consejos les pudieran ayudar al momento de realizar una AsyncTask.
  • No debes de llamar a los métodos de onPreExecute, doInBackground, y onPostExecute manualmente, ya que estos se realizan automáticamente por el sistema.
  • No se puede llamar un AsyncTask anidado o dentro de otro AsyncTask. 
  • La llamada a un método de ejecución debe de realizarce desde el hilo de la interfaz de usuario.
  • Los parámetros de entrada de la tarea pueden ser arrays de objetos, de esta manera podemos poner cualquier objeto que querramos.

Referencias

Usando efectivamente AsyncTask
Class Overview

Ciclo de vida de una actividad. Android

Ciclo de vida

Una actividad es cuando nosotros solamente tenemos una pantalla que el usuario ve en un dispositivo al mismo tiempo, normalmente, una aplicación tiene múltiples actividades, y el usuario va intercambiando entre estas, por lo que podemos decir que las actividades son la parte más visible de una aplicación en Android.

Esto es muy frecuente ver por ejemplo en páginas web en donde tenemos varias páginas, por ejemplo la página inicio que liga a otras páginas, en esta analogia podemos ver que es similar a Android, en donde tenemos Actividas principales que se ligan a otras para al final hacer una aplicación, por ejemplo si nosotros nos vamos a contactos y elegimos a un amigo de contactos, lo podemos seleccionar y poder mandar un SMS, lo cual liga a otra actividad.

En el punto de vista de nuestro campo, podemos decir que una Actividad es iniciar con la creación de un nuevo proceso de Linux, la asignación de memoria para los objetos de la interfaz de usuario, poniendo los objetos de diseño que hemos declarado en el XML, para crear la pantalla, por lo que este trabajo es simplemente el incio para poner a trabajr una actividad,  vigilado por medio de un administrador de actividads.

El adminsitrador de actividades del sistema, es el responsable de crear, destruir y hacer gestión a las actividades, por lo que por ejemplo, cuando el usuario inicia por primera vez una aplicación, el gestor de actividades creará su actividad y lo pondrá en la pantalla, para luego más tarde, que el usuario cambie de pantalla, el gestor de actividades moverá la actividad para ponerlo en un lugar de espera en el sistema, de esta manera, si el usuario desea volver a una actividad, se puede iniciar con mayor rapidez, por lo que al tener muchas actividades que ya no se han utilizado por cierto tiempo, hace que este administrador destruya para liberar espacio para las que están actualmente disponibles, por lo que podemos ver que Android esta mecanisado para ayudar a mejorar la velocidad de la interfaz de usuario y así mejorar la experiencia de este.

La programación para Android de manera conceptual, diferente a la programación de otros ambientes, por ejmplo en iOS, yo en lo particular, he manejado un poco los dos diferentes sistemas, mientras Android utiliza este tipo de ambiente, iOS maneja un diseño MVC, del cual hablaré en otra entrada, en Android, por el contrario estamos respondiendo a ciertos cambios de estado en la aplicación que estemos realizando, por lo que se basa en la aplicación como applets o servlets, en donde se trata de un ciclo de actividad, no de en qué estado se encuentra esta actividad, por lo que tenemos maneras diferentes de crear aplicaciones para Android.


Este es un ejemplo de un ciclo de vida de una actividad:





Iniciando el estado. [Starting...]


Cuando en una actividad no está en la memoria, entonces es que esta en un estado de partida, esto quiere decir que si bien, está esperando a ser puesta en marcha, la actividad pasará por un conjunto de métodos, por lo que nosotros como programadores debemos de llenar para que esta actividad realice su estado de ejecución.

Hay que tener en cuenta que la transisción de un estado al otro a partir de una ejecución es una operación costora en términos de computación, por lo que esto afecta directamente con la vida de batería del dispositivo Android, esta es la razón por lo que no se destruyen automaticamente las aplicaciones cuando ya no se muestan, ya que si el usuario desea volver a utilizarla, esta ya esta en estado de esperando.


 Estado de ejecución [Running...]

Cuando en una actividad, tenemos desplegado en la pantalla la aplicación en conjunto con su interacción de usuario, podemos decir que este es el estado de ejecución el cual podemos decir que todas las interacciones propuestas, como escribir, tocar un botón, ya se encuentran disponibles y están a cargo de la actividad.

La actividad de ejecución es el que tiene prioridad en la administración de actividades, por lo que debe poder conseguir más memoria y recursos que necesita para que esta funcione rápidamente, asegurandose que el sistema operativo está haciendo todo lo posible para que la aplicación sea lo más fluida posible.


Pausado

Esto es cuando una activad no esta en el enfoque del usuario, que no interactua con ella, pero es visible en la pantalla, podemos decir que está en un estado de pausa, en donde podemos decir que muchas veces este estado no llega a concretarse en una aplicación ya que si tenemos un dispositivo, regularmente se está utilizando o simplemente no, pero en algunas aplicaciones muy especificas, como en el caso de los videojuegos, podemos ver cuadros de texto que dicen que la actividad está en pausa, y que algunas veces esta a un paso de pasar al estado de ser detenido completamente.

Es importante recalcar que en este estado, aún tienen todavia alta prioridad los términos de conseguir memoria y otros recursos, como en el estado anterior, esto es porque todavia son visibles para el usuario y no se quita de la pantalla.


Detenido [Stopped...]

Cuando una actividad ya no está visible, pero aún está en la memoria, se dice que este es un estado de detención, en donde la actividad detenida podría volver a estar enfrente para convertirse en una actividad principal por el administrador de actividades, o podría ser destruido y eliminado de la memoria.

El sistema realiza esto ya que las actividades en un estado de detención puede ser probablemente que el usuario quiera verla otra ves, dentro de poco tiempo, por lo que reanudar una aplicación tendria un impacto más barato que iniciar toda la actividad a partir de cero, porque ya tenemos todos los datos y objetos que se cargan en memoria y simplemente tienen que traer todo hasta el primer plano.


Destruido [Destroyed...]

Una actividad destruida, es cuando ya no está en la memoria, entonces el administrador de actividades de android ha decidido que la actividad ya no es necesaria que esté en memoria y la ha eliminado, por lo que antes de destruir esa actividad, se pueden realizar ciertas acciones como por ejemplo, guardar cualquier información importante que no se habia guardado antes, sin embargo, no hay una garantia de que la actividad se detuvo antes de ser destruido, por lo que es mejor programar que se guarden las cosas importantes en el estado de pausa, en lugar del esta detenido.

Es importante aclarar que el hecho de que una actividad este en un estado de ejecución no quiere decir que está realizando mucho procesamiento, por lo que de la misma manera, una actividad que está en estado de detención no es necesariamente que no está haciendo nada, entonces podemos concluir que los nombres de estado, se refieren precisamente a la forma activa de la actividad respecto a la entrada de usuario.


Referencias.

Android Programming: O' Reilly
Desarrollo en Android


miércoles, 9 de mayo de 2012

Tipos de pantallas táctiles

No todas las pantallas táctiles son iguales, nosotros como programadores, debemos de saber las diferencias y limitaciones que puedan tener las pantallas táctiles, si bien, todos los nuevos smartphones tienen una pantalla táctil, existen dos tipos principales que se utilizan en estos aparatos, las pantallas táctiles capacitivas y las resistivas, en esta entrada hablaré de cada uno de ellos.


Las pantallas táctiles capacitivas.



Este tipo de pantallas registran un contacto cada vez cada vez que entra en contacto con un conductor a objetos, por ejemplo los dedos humanos, entonces podemos decir que las pantallas táctiles capacitivas son muy sensibles, ya que no se requere ninguna presion para registrar un toque, inclusive el contacto más leve se activará en la pantalla, estas utilizan el vidrio como panel frontal, por lo que los hace altamente resistente, de fácil limpieza y resistente a arañazos.

Las pantallas táctiles capacitivas tambien pueden utilizarse con gestos multi-touch, por lo que en general, podemos conciderarlos como rápidas, pero, dada la sensibilidad de la pantalla táctil, podemos tener dificultad, por ejemplo al escribir, aquí el tamaño del teclado y la cantidad de espacio entre teclas tienen un aspecto importante en la pantalla, por lo que debemos tener en cuenta eso.

Las desventajas de la pantalla táctil capacitivo es con la precisión, la mayoría de las pantallas táctiles capacitivas no responden a los objetos que no sean los dedos humanos "desnudos", y por lo tanto no funcionan con lapices ópticos, o con la uña, esto es debido a que los dedos son mucho más ancho que un lápiz, haciendo que la escritura y otras acciones sean dificiles.

Algunos dispositivos con pantallas táctiles capacitivas son el iPhone, iPad y HTC HD2.


Las pantallas táctiles resistivas.



Las pantallas resistivas son construidas a partir de dos capas de material con un espacio entre ellos, entonces cuando se pulsa en la pantalla externa, las dos capas se prensan en contacto, registrando así un toque debido a que el sistema funciona según la presión, entonces se puede usar objetos como un lápiz o una uña, esto hace que las pantallas táctiles resistivas sean utiles para la escritura y otras funciones de alta precisión, las pantallas táctiles resistivas tambien son preferibles en climas más frios, donde los usuariso pueden usar guantes en sus teléfonos inteligentes y tabletas, al igual que son considerablemente menos costosos que las pantallas capacitivas.

Los inconvenietes es que muchas veces las pantallas táctiles resistivas no pueden soportar gestos mult-touch, tiene una poca visibilidad con la luz solar directa y su durabilidad es menor, por lo que la capa superior en una pantalla resistiva está hecho de un material blando y flexible que puede ser dañado mucho más facil que el vidrio y es necesario calibrarla cada cierto tiempo.

Algunos dispositivos con pantallas táctiles resistivas son muchos telefonos de Nokia, Samsung, etc.


¿Cual es mejor?

Es difícil decir si una u otra es mejor ya que la tecnología de pantalla táctil capacitiva es más reciente, por lo que es más cara, mientras que muchas empresas utilizan las características de gestos multi-touch y pantalla de cristal para ser considerados como tablets o smartphones de gama alta, con el uso de pantallas táctiles capacitivas, pero si se prefiere trabajar con un lápiz o usar guantes, una pantalla táctil capasitiva lo puede hacer proporcionando otros beneficios.

Voy a hacer una lista sobre los pro y las contras entre ellas.

Pantalla táctil capacitiva.

Pros:
  • Soporte multi-touch
  • Visibilidad incluso con luz del sol
  • Sensible al toque de dedo
  • Brillante
  • No es propenso al polvo

Contras:
  • Contar con humedad (al menos 5%)
  • Más caro
  • No funciona con objetos o uñas.

 Pantalla táctil resistiva.

Pros:
  • Baratas
  • Funciona con cualquier objeto
  • Funciona con cualquier nivel de humedad
  • Facilidad de uso
  • Muy útil para reconocimiento de escritura
  • Más precisa

Contras:
  • Da soporte a multitouch, pero no del todo como capacitivas
  • Es de alta sensibilidad
  • Mala visibulidad con el sol
  • La pantalla es mas vulnerable.


Así que no podemos decir que una es mejor que otra, simplemente podemos concluir con que cada una tiene características que son importantes y que nosotros podemos seleccionar la que nosotros consideramos que es mejor, pero es importante saber que tipo de pantallas vamos a utilizar para nuestro proyecto y si cual es más viable para hacerlo.

Probar APPs en diferentes versiones de Android

Para poder realizar aplicaciones compatibles con diferentes versiones de Android, podemos mediante eclipse poder verificarlas de manera virtual y checar su funcionamiento, para eso, en esta entrada explicaré como lo pueden hacer.

Cuando tengas algún proyecto en eclipse, lo que vas a hacer es ingresar a este botón, el cual es el manager del los emuladores virtuales de Android.


Entonces te abrirá una ventana, en donde puedes dar clic a nuevo y poder agregar las caracteristicas que deseas del emulador, entre ellas las versiones de android, el CPU, cuanta memoria de SD deseas, la resolución de pantalla y algunas propiedades como grabador de audio, ram, cache, etc.



Versiones disponibles de android, aquí podemos encontrar las que existen en el mercado y poder verificar nuestra app.



Si nuestra app necesita requerimientos específicos podemos activarlos aquí, en el apartado de Hardware, en donde en mi caso, es importante activar el grabador de voz.



Aquí podemos ver dos emuladores con diferentes versiones.





Seguridad en dispositivos móviles

Los smartphones, tablets, reproductores musicales entre otros dispositivos, actualmente son muy utilizados por las personas, ya que son mas fáciles de usar y los puedes traer contigo sin que tengas que andar cargando una computadora, pero al igual que una computadora ya sea de escritorio o laptop, también tienen riesgos sobre los datos personales, utilizamos los dispositivos para meternos a nuestras cuentas de correo o comprar aplicaciones y esta información puede estar vulnerable si no tenemos seguridad en el sistema operativo, por lo que en esta entrada hablaré acerca de la seguridad en los dispositivos móviles.

¿Existen riesgos en el cómputo móvil?

 Los dispositivos móviles pueden almacenar mucha información, son portátiles y muchas veces no se tiene la protección adecauada ya que pues como son portables, se pueden perder o robar y si no se toman precauciones, una persona no autorizada puede tener acceso a esta información almacenada en ellos.



Actualmente los dispositivos móviles son un punto clave para las personas que deseean hacer acceso indebido a nuestras cuentas ya que damos acceso a servicios que se almacenan en este dispositivo, por lo que es importante pimero como nosotros debemos de advertir al usuario estos riesgos, por ejemplo.

  • Establecer una contraseña para acceder y utilizar el dispositivo, esto ayuda para que personas no autorizadas no puedan tener datos.
  • Establecer un tiempo de bloqueo, si no estamos utilizando el dispositivo, ya que ayuda a que cuando no lo estemos usando, personas no puedan tener acceso a esto.
  • Mantener todo el software actualizado, incluyendo el sistema operativo que estes utilizando y las aplicaciones que tengas instaladas.
  • Es importante no tener sistemas como el jailbreak o flashear el dispositivo, ya que elimina la protección de fábrica del sistema.
  • Poner el dispositivo en sistemas que ofrecen seguridad, por ejemplo, Find My iPhone el cual ubica el dispositivo si se roba o pierde.

¿Cómo podemos hacer aplicaciones seguras?

Podemos en listar algunas sugerencias de qué podemos hacer nosotros como programadores para que la aplicación que estemos desarrrollando tenga una buena gestión de seguridad y que no tengamos problemas con malware o personas que quieran vulnerar datos.


Cifrar los datos en todos los niveles.

Es importante que no nos devemos de confiar en solamente la seguridad que nos ofrece el sistema operativo, para reforsarla, es importante cifrar todos los datos importantes, accesos a bases de datos, sistemas de archivos de nuestra aplicación.


Utilizar encriptación "fuerte".

Todos los datos deben ser encriptados con encriptaciones fuertes, asegurando que si se trasmiten a un servidor repoto, o entre dispositivos, tenga encriptación de extremo a extremo.


Aislar la información corporativa.

Toda información de alguna aplicación utilizada en una empresa accediendo de un dispositivo movil, debe de estar completamente aislado de los datos personales de un usuario, creando como capas de protección según los datos que se necesitan utilizar, de manera que los usuarios solamente puedan ver lo que necesesiten para trabajar y no información indebida.


Cumplir com politicas de seguridad.

Nosotros como desarrolladores debemos de asegurarnos de que las políticas de seguridad que tenga la empresa funcionen en esta aplicación, por ejemplo el obligar a que introduscan contraseñas seguras o permitir borrar a distancia datos de la aplicación después de intentar de introducir contraseñas fallidas, etc.


Garantizar que puedan accesar a la red de una forma segura.

Las empresas deben de reducir al minimo la necesitad de abrir puertos de entrada en la red, una solución para aplicaciones móviles seria hacer paquetes cifrados, autentificaciones de solicitudes y conceder accesos a unicamente servidores específicos.


Asegurar plataformas.

Controles estrictos para asegurar plataformas por ejemplo, detección de telefonos con jailbreak, desbloqueados y prevención de acceso a otros servicios, si es necesario.


Referencias.

Key Consideration.
Guidelines for Securing Mobile Computing Devices - Stanford

martes, 8 de mayo de 2012

Arduinos Shields

Algunas veces necesitamos algunas características funcionales extra para poder realizar nuestro proyecto, es por eso que al Arduino le podemos conectar encima de la placa, shields, estos tienen la capacidad de poder agregar otras funciones, son fáciles de montar y son baratas de producir.

Por ejmplo, los Shields permiten convertir un Arduino en, reproductor musical, robots móvil, entre otras cosas, es por eso que en esta entrada hablaré de algunos shields que pueden ser utiles para algún proyecto y desarrollarlo de manera más completa.


Cellular Shield con SM5100B

Este shield incluye todas las piezas necesarias para poder realizar un módulo celular, permitiendo agregar fácilmente la capacidad de enviar SMS, tener conexión celular GSM o GPRS, al igual que permite TCP IP para la placa del Arduino.

Para poderlo utilizar, simplemente le agregas una tarjeta SIM de prepago de una compañia telefónica y con la antena incluida se pueden enviar mensajes de texto, crear un servidor web o inclusive realizar llamadas telefónicas.
Página oficial


Adafruit Data logging shield



Con este shield podemos guardar datos de cualquier formato en tarjetas SD, entonces puedes crear programas en donde tengas que interactuar con memoria externa, al igual que incluye librerias y código ejemplo para poderlo desarrollar más facilmente.
Página oficial


Arduino Ethernet Shield

Este Shield nos sirve para poder conectarnos al internet mediante el Arduino, se basa en un chip Wiznet W5100 Ethernet, proporcionando una red IP, es compatible hasta con cuatro conexiones de socket simultáneas. Utilizando la biblioteca de Ethernet podemos hacer sketches que se conectan al Internet, ahora estos incluyen conexiones de tarjeta SD y es compatible con la mayoria de los Arduinos.
Página oficial


Liquidware Shield Touchscreen


Es una pantalla táctil de 320 x 240 OLED, resistiva y con este shield puedes conectarlo al Arduino y dibujar formas, pixeles, colores, gráficos, botones, entre otras cosas ya que contiene una API de gráficos para sistemas integrados.
Página oficial


Wayne y Layne Video Game Shield

Es un Shield para realizar videojuegos con Arduino, incluyendo gráficos, texto, efectos de sonido y música, usando el Arduino, incluye todo lo necesario para conectarlo mediante los cables de colores a tu TV, al igual que permite que puedan jugar dos personas al mismo tiempo.
Página oficial


Adafruit Wave Shield


Es un Shield que permite agregar audo de alta calidad a un proyecto de electrónica, en donde podemos reproducir sonido de hasta 22KHz, los archivos se pueden leer desde un SD y capacidad de conectar audifonos y bocinas.
Página oficial


WiShield Arduino

Es un Shield que añade la posibilidad de compatibilidad de WiFi con Arduino, con velocidades de 1 Mbps y 2 Mbps de Wi-Fi 802.11b, soporta la infraestructura BSS y ad hoc IBSS, al igual que  WEP de 64 bits y 128 bits, WPA/WPA2.
Página oficial