miércoles, 23 de mayo de 2012

Semana 16(2)

Para poder estar al 100 con el examen he decidido investigar un poco acerca de los temas que faltaron en el temario, esto para aquellos (como a mi) que dependen del examen para pasar.

Tolerancia a fallas
Introducción


  • Un punto importante en los sistemas distribuidos , es construirlos de tal forma que puede recupersarse automaticamente de fallos sin afectar el rendimiento.
  • Cuando un error ocurre el sistema debería seguir operando de forma aceptable mientras se hacen las reparaciones.
  • Un sistema falla cuando deja de proveer el servicio que debe prestar.
  • Un sistema es tolerante a fallas si continua proveyendo los servicios especificados aún en presencia de fallas de hardware o errores de software.

Tipos de Fallos
  • Transientales/Transitorias
    • Son aquellos fallos que aparecen una vez y después desaparecen aun cuando la misma operación se repite.
  • Intermitentes
    • Son aquellos fallos que aparecen una vez y después desaperecen y después vuelven a aparecer y continua el ciclo.
  • Permanentes
    • Son aquellos fallos que aparecen y no desaparecen hasta que el componente erroneo es reemplazado o es arreglado el problema.

Los sistemas de almacenamiento con tolerancia a fallos son vitales en ambientes donde se trabaje con información crítica, como el caso de los bancos, entidades gubernamentales, algunas empresas, etc. El nivel de tolerancia a fallos dependerá de la técnica de almacenamiento utilizada y de la cantidad de veces que la información está duplicada, sin embargo, la tolerancia nunca es del 100% puesto que si fallan todos los "mirrors" disponibles, incluyendo el origen, los datos quedan incompletos por lo tanto la información se leerá corrupta.



Redes de Petri


Definición:


Las Redes de Petri clásicas se conciben como un grafo dirigido que posee dos tipos de nodos principales: los lugares representados por círculos y las transiciones representadas por barras rectangulares (figura 2). Entre los nodos se ubican los arcos dirigidos, los cuales se encargan de unir las transiciones con los lugares y viceversa. Cada arco dirigido posee un número que indica su peso, el cual determina la cantidad de marcas que consume de un lugar o deposita en un lugar, siempre y cuando se haya disparado una transición habilitada. Los arcos dirigidos sin número se entiende que consumen o depositan una marca. Las marcas se representan en forma gráfica como puntos negros que se ubican dentro de cada lugar.

Introducción:

    • Una Red de Petri es un modelo gráfico, formal y abstracto para describir y analizar el flujo de información.
    • El análisis de las Redes de Petri ayuda a mostrar información
    • importante sobre la estructura y el comportamiento dinámico de los sistemas modelados.
    • La teoría de las Redes de Petri permite la representación matemática del sistema a ser modelado.
    • Las Redes de Petri son de utilidad en el diseño de sistemas de hardware y software, para especificación, simulación y diseño de diversos problemas de ingeniería.
    • Las Redes de Petri pueden considerarse como autómatas formales o como generadores de lenguajes formales y tienen asociación con la teoría de grafos

Ventajas

  • Se comprende mejor el sistema.
  • La comunicación con el cliente mejora ya que se dispone de una descripción clara y no ambigua de los requisitos del usuario.
  • El sistema se describe de manera más precisa.
  • El sistema se asegura matemáticamente que es correcto según las especificaciones.
  • Mayor calidad software respecto al cumplimiento de las especificaciones.
  • Mayor productividad

    Desventajas
  • El desarrollo de herramientas que apoyen la aplicación de métodos formales es complicado y los programas resultantes son incómodos para los usuarios.
  • Los investigadores por lo general no conocen la realidad industrial.
  • Es escasa la colaboración entre la industria y el mundo académico, que en ocasiones se muestra demasiado dogmático.
  • Se considera que la aplicación de métodos formales encarece los productos y ralentiza su desarrollo.


Con esto tenemos todos los temas cubiertos, junto con esta entrada y esta





Semana 16

Esto es un caos, la unica forma de pasar es con el examen, asi que esta entrada sera de los temas que no he investigado para estar preparado.


1.- Consistencia y replicación 
¿Por qué replicar?
  • Confiabilidad
    • Continuidad de trabajo ante fallas
    • Mayor cantidad de copias -> mejor protección contra corrupción de datos
  • Rendimiento
    • Escalabilidad en número
    • Escalabilidad en área geográfica (menor tiempo de acceso a copias cercanas)
    • Consulta simultánea de datos
… acceso simultaneo
  • Básicamente hay dos soluciones:
  1. El mismo objeto maneja las invocaciones concurrentes (a).
  2. El objeto está desprotegido y el entorno se preocupa del control de concurrencia (b).
  •    En ambos casos, la réplica siempre debe permanecer actualizada


¿Replicación -> Escalabilidad?
  • + escala -> - rendimiento
  • Por lo tanto se usa replicación (caching) para reducir el tiempo de acceso en alta escala.
  • Problemas: 
    • Actualizar las réplicas consume ancho de banda
    • Mantener la consistencia en las copias es un problema de escalabilidad (¿?)
    • Sincronizar las réplicas
Consistencia

El problema de la consistencia (o mejor, de la falta de consistencia) no es exclusivo de los sistemas distribuidos. Ya sabemos que en los sistemas centralizados el acceso concurrente a los datos puede dejarlos inconsistentes si no se proveen mecanismos que proporcionen exclusión mutua en el acceso a los mismos.

En los sistemas distribuidos el problema de la inconsistencia cobra una mayor dimensión, tanto por la importancia como por la cantidad de situaciones en que pueden producirse problemas. Un sistema distribuido es un único sistema formado por múltiples máquinas independientes. Ya que es un único sistema, debe tener un único estado global compartido por todos los equipos que lo componen. El estado global se refiere a datos: como tablas de mantenimiento del sistema, la hora actual o datos que estén compartidos por procesos de distintas máquinas. Como veremos, hay situaciones en las
que no resulta fácil mantener estos datos iguales en todas las máquinas. Atendiendo a las situaciones, en un sistema distribuido se pueden producir inconsistencias de los siguientes tipos:
  •  Inconsistencia de Actualización
  •  Inconsistencia de Replicación
  •  Inconsistencia de Caché
  •  Inconsistencia de Reloj
  •  Inconsistencia de Interfaz de Usuario

2 - Benchmarks de supercomputadoras

El benchmark es una técnica utilizada para medir el rendimiento de un sistema o componente del mismo, frecuentemente en comparación con el que se refiere específicamente a la acción de ejecutar un benchmark. La palabra benchmark es un anglicismo traducible al español como comparativa. Si bien también puede encontrarse esta palabra haciendo referencia al significado original en la lengua anglosajona, es en el campo informático donde su uso está más ampliamente extendido. Más formalmente puede entenderse que un benchmark es el resultado de la ejecución de un programa informático o un conjunto de programas en una máquina, con el objetivo de estimar el rendimiento de un elemento concreto, y poder comparar los resultados con máquinas similares. En términos de ordenadores, un benchmark podría ser realizado en cualquiera de sus componentes, ya sea CPU, RAM, tarjeta gráfica, etc. También puede ser dirigido específicamente a una función dentro de un componente, por ejemplo, la unidad de coma flotante de la CPU; o incluso a otros programas.
La tarea de ejecutar un benchmark originalmente se reducía a estimar el tiempo de proceso que lleva la ejecución de un programa (medida por lo general en miles o millones de operaciones por segundo). Con el correr del tiempo, la mejora en los compiladores y la gran variedad de arquitecturas y situaciones existentes convirtieron a esta técnica en toda una especialidad. La elección de las condiciones bajo la cual dos sistemas distintos pueden compararse entre sí es especialmente ardua, y la publicación de los resultados suele ser objeto de candentes debates cuando éstos se abren a la comunidad. se convierte en una poderosa arma competitiva, mal realizado puede hacernos perder mucho dinero. Actualmente se dispone de muchos documentos sobre como realizar eficazmente estudios benchamarketing. Si a lo largo del estudio de benchmarking También puede realizarse un "benchmark de software", es decir comparar el rendimiento de un software contra otro o de parte del mismo, por ejemplo, comparar distintas consultas a una base de datos para saber cuál es la más rápida o directamente partes de código.
El Benchmark es también un proceso continuo de medir productos, servicios y prácticas contra competidores más duros o aquellas compañías reconocidas como líderes en la industria.

El valor de banchmarking
La importancia del benchmarking no se encuentra en la detallada mecánica de la comparación, sino en el impacto que pueden tener estas comparaciones sobre los comportamientos. Se puede considerar como un proceso útil de cara a lograr el impulso necesario para realizar mejoras y cambios.
Además que es de uso muy importante para la planeación estratégica.

3 - Grids computacionales


“La Grid” toma su nombre de una analogía con el “poder de la red” eléctrica; en inglés la red eléctrica, el tramado de ella, se denomina Grid (la traducción al español de Grid es “Malla” o “Grilla”). La idea era que accediendo al poder de cómputo a través de una malla computacional sería tan simple como acceder al poder eléctrico desde una red eléctrica.

Hay cientos de grid computacionales alrededor del mundo. Muchas grid se están usando para la e-Ciencia: posibilitando la ejecución de proyectos que serían imposibles de realizar sin el poder computacional de la grid.
  •  Los biólogos están empleando grids para similar miles de posibles drogas en sus computadores, con el objetivo de descubrir una molécula capaz de bloquear proteínas específicas de ciertas enfermedades. 
  • Los científicos de la Tierra están empleando grids para registrar los niveles de ozono, usando satélites, descargando diariamente cientos de Gigabytes de datos (¡el equivalente a 150 CDs cada día!) 
  • Los físicos de altas energías están aplicandolas grids en su búsqueda por una mejor comprensión del Universo, sobre la base de una grid de decenas de miles de computadoras de escritorio para almacenar y analizar los 10 Petabytes de datos (¡equivalentes a los datos que pueden contener alrededor de 20 millones de CDs!) producidos anualmente por el Gran Colisionador de Hadrones (Large Hadron Collider). Miles de físicos en docenas de universidades alrededor del mundo quieren analizar esos datos.. 
  • Los ingenieros están usando las grid para estudiar energías alternativas, tales como la fusión de energía. 
  • Los artistas hoy usan las grid para crear complejas animaciones para las películas (puedes ver un buen ejemplo en Kung Fu Panda). 
  • Los cientistas socials hoy estudian la vida de las abejas, el maquillaje que emplea nuestra sociedad y los secretos de la historia, mediante el uso de las grid. 
EL FUTURO: «LA GRID»

La Computación Grid, a pesar de ser una tecnología con bastante madurez, sigue estando en constante evolución. Actualmente existen muchas grids computacionales (como EGEE y TeraGrid), construidas para dar salida principalmente a problemas científicos, pero todavía no existe «La Grid». De la misma manera que Internet nació en el ámbito científico para luego llegar al público general, lo mismo puede esperarse, a largo plazo, de la Computación Grid. Cuando la tecnología madure lo suficiente, será posible que cualquier usuario, desde su ordenador personal de casa, pueda enviar complejos trabajos computacionales a «La Grid», como si tuviésemos un supercomputador en el salón de casa.



Clase Bitmap (2)

En la parte1 vimos como usar esta clase, ahora vamos a ver como darle "vida" a las imagenes que agregamos.

Primero crearemos un nuevo proyecto android, con Android 2.2.
La clase que eclipse te crea por defaul la llamaremos "HolaActivity"

La clase quedaría de esta forma:



Esta clase lo que hace es crear un "View" de la clase "PanelPrincipal" (la cual aun no creamos) el cual contendrá todo los "objetos"(botones,texto,imagenes,etc), en nuestro caso una imagen.

Ahora crearemos la clase "PanelPrincipal" esta quedaria de este modo:



En la parte1 describe algunos métodos, lo nuevo aquí es que cuando "PanelPrincipal" es llamado de "HolaActivity" este le pasa 2 parámetros al constructor  (Context)"context" y (Activity)"prueba" y los asigna a las propiedades del objeto.

Después en el método "onDraw" establece el fondo de pantalla a Blanco y agrega la imagen en la coordenada 10,10.

En el método "onTouchEvent" nos indica si el área en donde esta la imagen es presionada llama a la clase "BotonHola"(aun no creada).

Ahora crearemos el XML de la clase "BotonHola", esto es porque al momento de hacer click en la imagen, nos mandara a otra ventana(Activity) mostrando un simple botón (que no hace nada) con el texto "hola"

Paso1 - crear el XML: click secundario sobre la carpeta "layout" => new => other


Carpeta XML => XML File 


Dar nombre al archivo (screen_hola) y Finish


Ahora modifiquemos la interfaz de esta segunda ventana (Activity) agregando un objeto tipo Button que dirá "Hola"



Creemos la clase "BotonHola", debe quedar de esta forma:


Como podemos ver la clase "BotonHola" hereda de la clase Activity e implementa el método onCreate para enlazar el archivo XML que creamos anteriormente.

Otro paso fundamental es registrar el Activity en el archivo "AndroidManifest.xml" que se encuentra en la raíz principal del proyecto.

Agregamos estas lineas:


con esto el proyecto esta listo
Así termina esta entrada, espero y les sirva, cualquier duda, aquí abajo.

 Capturas de pantalla





Codigo Fuente
proyecto android


Referencias


http://www.javaya.com.ar/androidya/detalleconcepto.php?codigo=140&inicio=0

Clase Bitmap

Clase Bitmap parte 1/2

Ejemplo practico de como usar esta clase.


CODIGO EJEMPLO


Explicacion del codigo:


Esto no necesita explicación es "receta" de cocina.



Para agregar una imagen, tenemos que crear una clase interna "BitmapView" que debara "extends" a "View".





Aquí es donde esta la "magia".
  • Lo primero que hay que resaltar es que se llama al método "ondraw" con su parámetro "canvas", para no hacerlo tan tedioso, digamos que este parametro es el "identificador" para modificar la pantaña como te guste.
  • Lo segundo, es que se crea una "bitmap" que es compatible con 3 diferentes formatos:
    • png(recomendado)
    • jpg(aceptable)
    • gif(la ultima opción)
    • Puedes hacer uso de estas imagenes "directamente" usando el nombre del archivo como identificador o crear un recurso tipo ID en un XML.
  • canvas.drawColor(Color.WHITE); 
    • Es la encargada del color de fondo de pantalla
  • canvas.drawBitmap(bitmap, x, y, paint );
    • bitmap = la imagen que se agregara
    • x          = coordenada
    • y          = coordenada
    • paint     = es usado para "agregar" el bitmao (puede ser null)
NOTA: no olvides agregar la "imagen" al directorio res/drawable

RESULTADO




REFERENCIAS



lunes, 21 de mayo de 2012

Usabilidad en Moviiles

EL objetivo

La función del diseñador se presenta ambigua, existe una tendencia a pensar que su único objetivo es darle belleza a una interfaz, maquillar su aspecto parece ser su mayor logro.  Un error muy difundido.

Diseño de interacción

El usuario debe ser el centro de todas nuestras preocupaciones, para eso debemos tener en cuenta las actividades básicas del diseño de interacción:


Evolución de los dispositivos móviles


Sistemas Operativos disponibles




4 principios para el diseño de interfaces

  • Utilizar Limitaciones
    • Limitar las acciones posibles a las que el usuario vaya a utilizar, de tal forma que las posibilidades que queden sean las trascendentes para el usuario.
  • Las cosas deben ser visibles
    • Facilitar la comprensión del sistema, utilizando metáforas adecuadas que representen las acciones de una manera clara, botones, acciones etc
  • Hacer que resulte fácil evaluar el estado actual del sistema
    • Diseñando respuestas del sistema cada vez que el usuario realiza una acción y señales informativas en los momentos de espera.
  • Seguir las topografías naturales
    • Entre las intenciones y los actos necesarios, diseñar una interfaz que no resulte compleja de analizar, que su navegación sea coherente y sencilla.




iOS vs Android

Introduccion a iOS

El sistema operativo movil iOS (anteriormente denominado iPhone OS) fue desarrollado por Apple originalmente para el iPhone, siendo despues usado en el iPod Touch e iPad. Es un derivado de Mac OS X, que a su vez esta basadoen Darwin BSD.

Caracterısticas

Interfaz de usuario

Se basa en con el concepto de manipulacion mediante gestos multitactil. Los elementos de la interfaz se componen por deslizadores, interruptores y botones. La respuesta es inmediata y se provee de una interfaz fluida. La interaccion con el sistema operativo se realiza mediante gestos como deslizar, tocar y pellizcar. Acelerometros y Giroscopios internos son utilizados por algunas aplicaciones para responder a movimientosy gestos, como sacudir el aparato (en campos de texto es usado para deshacer y rehacer) o rotarlo (se suele usar para cambiar de posicion vertical a modo paisaje).

Pantalla principal

Llamada <SpringBoard>, es donde se ubican los iconos de las aplicaciones y el Dock en la parte inferior de la pantalla donde se pueden anclar aplicaciones de uso frecuente, aparece al desbloquear el dispositivo o presionar el boton de inicio. La pantalla tiene una barra de estado en la parte superior para mostrar datos, tales como la hora, el nivelde bateria, y la intensidad de la señal.

Introduccion a Android

Android es un sistema operativo basado en Linux para dispositivos moviles, tales como telefonos inteligentes o tablets. Fue desarrollado inicialmente por Android Inc., una firma comprada por Google en 2005. Tiene una gran comunidadde desarrolladores escribiendo aplicaciones para extender la funcionalidad de los dispositivos. A la fecha, existen cerca de 200.000 aplicaciones disponibles para Android.

Caracterısticas

Diseno de dispositivo
la plataforma es adaptable a distintas pantallas.

Almacenamiento
base de datos SQLite.

Conectividad
GSM/EDGE, IDEN, CDMA, EV-DO, UMTS, Bluetooth,Wi-Fi, LTE y WiMAX.

Mensajerıa
SMS y MMS.

Navegador Web
basado en Google Chrome.

Soporte de Java
maquina virtual Jalvik.

Soporte multimedia
WebM, H.263, H.264 (3GP o MP4), MPEG-4 SP,AMR, AMR-WB (contenedor 3GP), AAC, HE-AAC (contenedores MP4o 3GP), MP3, MIDI, Ogg Vorbis, WAV, JPEG, PNG, GIF y BMP.

Soporte para streaming
RTP/RTSP, HTML, Flash.

Soporte para hardware adicional
camaras, GPS, pantallas tactiles,sensores de proximidad, etc.

Entorno de desarrollo
Eclipse.

Market
Android Market para descarga de aplicaciones.

Multi-tactil
de forma nativa.

Bluetooth
envıo, recepcion y exploracion.

Videollamada
sobre IP.

Multitarea
real de aplicaciones.

Caracterısticas basadas en voz
aplicaciones con reconocimiento.

Tethering
permite al telefono ser usado como un punto de acceso alambrico o inalambrico.

Comparativa

Facilidad de uso

La usabilidad de iOS es actualmente superior a la de Android. La interfazdel iPhone es lo mas sencilla posible y el usuario es capaz de aprender a usarel movil desde cero mucho mas rapido que si se tratara de un Android, muy intuitivo.


Software de teclado

En Android podemos instalar cualquier teclado personalizado, que puede favorecer la accesibilidad a personas con deficiencia visual o tactil. Pero si estamos hablando de las funcionalidades que vienen de casa, iPhone gana en estacategorıa


Llamadas

Aunque sea el ultimo punto, no es el menos importante, al contrario, es el que mas. Compramos un telefono movil, no un pequeño ordenador personal, eso es al que que los fabricantes nunca deberıan olvidar.

Al realizar una llamada en el iPhone uno tiene a la vista siempre la posibilidad de acceder al teclado numerico, los contactos, los favoritos o las llamadas recientes. El paradigma aquı ha sido mejor resuelto en Android, aunque de nuevo no se iguala a la interfaz de Apple.

Android destaca en el hecho de que nada mas comencemos a marcar el numero o el nombre en el teclado numerico hıbrido del telefono se reconozca a quien queremos llamar con una prediccion muy certera. Finalmente mientras se produce una llamada, en Android se mostrara una imagen del contacto en grande y dos botones para Responder o Rechazar/colgar. Mientras que en el iPhone tendremos esas opciones ademas de un elegante menu de accesos directos para poner manos el altavoz, acceder a contactos, etc.


REFERENCIAS




sábado, 19 de mayo de 2012

ANTENAS - XBEE


ANTENAS

Los XBee necesitan antenas para recibir y transmitir señales, y existen varios tipos para los módulos XBee.

ANTENA DE CABLE
Esta es un pequeño cable que sobresale del módulo; su mayor ventaja es que ofrece una radiación omnidireccional. Su principal desventaja es su fragilidad.

ANTENA DE CHIP
Esta antena es un pequeño y plano chip cerámico que queda al ras de la base del módulo. Es pequeña y más robusta. La desventaja es que tiene una radiación cardiode (en forma de corazón) lo que significa que la señal se atenúa en muchas direcciones.

ANTENA PCB
Este tipo de antena fue introducido con el modelo XBee-PRO S2B, la antena PCB es impresa directamente en el circuito de la tarjeta del módulo XBee.

CONECTOR U-FL
Este es el conector más pequeño de los dos tipos de conectores disponibles para antenas externas.

CONECTOR RPSMA
Este conector es una variación del conector U.FL, más grande y voluminoso, pero se puede utilizar con una antena externa montada directamente en el módulo XBee sin conectar algún cable.





Adaptadores USB o Dongles


Existen varios y diferentes adaptadores USB para los módulos XBee, que facilitan su uso y conexión a una computadora.





Breakout Boards


Otra interfaz disponible para una mejor implementación de los XBee son los Breakout Boards, esto se debe a que los módulos XBee tienen 20 pines con un espaciado de 2mm entre cada uno, lo que permite mantenerlos en un tamaño pequeño aunque hace imposible ser conectados directamente protoboards.
Un Breakout Board permite la conexión de un módulo XBee a un protoboard funcionando como un adaptador con un espaciado de 0.1”, el necesario para poder ser conectado correctamente. Algunos modelos se conectan directamente al puerto USB del ordenador, mientras que otros (como el dongle de Sparkfun) necesitan de un cable USB-miniUSB para la conexión.





XBee Shield
Además de los adaptadores USB o Breakout Boards existen shields o placas especialmente desarrolladas para su uso sobre el Arduino.



El XBee Shield es una placa en la que se monta el módulo XBee y a su vez se conecta sobre el Arduino, evitando la necesidad de cableado, además de que no obstruye o bloquea los pines sobrantes para que estos puedan ser utilizados.
Próximamente un tutorial básico de cómo configurar un par de módulos.

RTOS


¿Qué es un RTOS?

  • Un RTOS es un sistema operativo de tiempo real.
  • Esto significa que hace lo mismo que un OS común pero además me da herramientas para que los programas de aplicación puedan cumplir compromisos temporales definidos por el programador. El objetivo del mismo es diferente de un OS convencional.
  • Un RTOS se emplea cuando hay que administrar varias tareas simultáneas con plazos de tiempo estrictos.

¿Cómo se define un sistema de tiempo real?
  • Un STR está definido por:
    • Los eventos externos que debe atender.
    • La respuesta que debe producir ante estos eventos.
    • Los requerimientos de temporización de esas respuestas.
  • Los STR suaves se suelen diseñar como si fueran STR duros. Luego se da mayor prioridad a la atención de los eventos con compromisos temporales estrictos.

¿Por qué usar un RTOS?
  • Para cumplir con compromisos temporales estrictos
    • El RTOS ofrece funcionalidad para asegurar que una vez ocurrido un evento, la respuesta ocurra dentro de un tiempo acotado. Es importante aclarar que esto no lo hace por sí solo sino que brinda al programador herramientas para hacerlo de manera más sencilla que si no hubiera un RTOS.
      • Esto implica que una aplicación mal diseñada puede fallar en la atención de eventos aún cuando se use un RTOS.
  • Para no tener que manejar el tiempo “a mano”
    • El RTOS absorbe el manejo de temporizadores y esperas, de modo que hace más facil al programador el manejo del tiempo.
  • Tarea Idle
    • Cuando ninguna de las tareas requiere del procesador, el sistemaejecuta una tarea llamada idle u ociosa. Esto me permite fácilmente contabilizar el nivel de ocupación del CPU, poner al mismo en modo de bajo consumo o correr cualquier tarea que pudiera ser de utilidad para el sistema cuando no debe atender ninguno de sus eventos.
  • Multitarea
    • Simplifica sobremanera la programación de sistemas con varias tareas.
  • Escalabalidad
    • Al tener ejecución concurrente de tareas se pueden agregar las que haga falta, teniendo el único cuidado de insertarlas correctamente en el esquema de ejecución del sistema.
  • Mayor reutilizabilidad del código
    • Si las tareas se diseñan bien (con pocas o ninguna dependencia) es más fácil incorporarlas a otras aplicaciones.


Ejemplos

  • Windows CE

Windows CE (conocido oficialmente como Windows Embedded Compact y anteriormente como Windows Embedded CE, también abreviado como WinCE) es un sistema operativo desarrollado por Microsoft para sistemas embebidos.
Actualmente lo vemos en teléfonos inteligentes, notebook, hasta en pocket pc y gps.


Mas información

  • Python CE 

Python CE es una implementación del lenguaje python para basados en dispositivos Windows CE  como Pocket PC.


Los programas en Python son de espacio pequeño, ocupando muy poco y conveniente para descargar.

Los requerimientos mínimos para correrlo son una computadora de alto rendimiento corriendo Windows CE 1.0 o mayor en un procesador SH3 o MIPS . Un mínimo de 4 MB es requerido, pero se recomienda 8 MB . El interprete puede ser corrido enteramente desde una tarjeta flash.



  • OSEK



En los automóviles de las constructoras que forman parte de este consorcio, como BMW, Chrysler, Opel o Renault.

Las siglas de OSEK hacen referencia tanto a un consorcio de empresas como a un estándar abierto de sistema operativo e interfaz de comunicaciones básicos que rige más de la mitad de la industria del automóvil. La portabilidad de OSEK hace posible que pueda ser llevado incluso a sistemas con un microprocesador de 8 bits.


Mas información


  • QNX


Está disponible para las siguientes arquitecturas: x86,MIPSPowerPCSH4 (incluida la videoconsola Dreamcast con una versión muy limitada de este),ARMStrongARMxScale y BlackBerry Playbook.

Photon o Photon microGUI es el sistema de ventanas (servidor y cliente) de QNX.
QNX está basado en una estructura de micronúcleo, que proporciona características de estabilidad avanzadas frente a fallos de dispositivos, aplicaciones, etc.




  • VxWorks



VxWorks es un sistema operativo de tiempo real, basado en Unix, vendido y fabricado por Wind River Systems.
VxWorks se usa generalmente en sistemas embebidos. Al contrario que en sistemas nativos como Unix, el desarrollo de vxWorks se realiza en un "host" que ejecuta Unix o Windows.
En una gran variedad de dispositivos: desde aviones a fotocopiadoras; desde navegadores GPS a routers.
Desarrollado por la empresa Wind River Systems, este sistema operativo en tiempo real (RTOS) ha sido llevado a infinidad de dispositivos. Incluso ha controlado el cerebro de varios vehículos espaciales como el Sojourner, el rastreador enviado a Marte, convirtiéndose en el SO que más lejos ha viajado en la historia de la Informática.

  • ThreadX

En impresoras, cámaras digitales, módems y sondas espaciales.

Como vxWorks, es un sistema operativo en tiempo real, es decir, que ha sido diseñado específicamente para trabajar en condiciones de rápida respuesta. Una de las empresas que ha apostado recientemente por su uso es HP, que lo incluye para gestionar la mayoría de modelos de sus impresoras de tinta y láser.






RERERENCIAS


http://samacomint.blogspot.mx/
http://vic-en-6to.blogspot.mx/search/label/computo%20integrado
http://es.wikipedia.org/wiki/VxWorks
http://es.wikipedia.org/wiki/QNX
http://www.python.org/workshops/1998-11/proceedings/demos/bauer/bauer.html



jueves, 17 de mayo de 2012

Teclado + Arduino + MotorDC + Buzzer

Para esta entrada, hablaremos de buzzer o bocinas y motores DC.




¿Que es un buzzer?
Zumbadorbuzzer en inglés, es un transductor electroacústico que produce un sonido o zumbido continuo o intermitente de un mismo tono. Sirve como mecanismo de señalización o aviso, y son utilizados en múltiples sistemas como en automóviles o en electrodomésticos.




¿Que es un motor DC?
El motor de corriente continua es una máquina que convierte la energía eléctrica continua en mecánica, provocando un movimiento rotatorio.






De que trata este Mini-proyecto
Este mini-proyecto trata de hacer funcionar el motorDC y el buzzer (en mi caso, una bocina), con de caracteres ingresados desde el teclado.

Conocimientos

Electronica:    
Programación:

Descripción:
Para esta practica utilizaremos el metodo Serial.read(), lo que hace este metodo es leer el caracter recivido por el teclado, el cual sera guardado en una variable (var) y despues comparado en un Switch para realizar una funcion es especifica.
El programa esta divido en funciones, y cada vez que "necesitemos" de alguna de ellas, solamente la llamamos.

Material:


  • (1)Arduino UNO
  • (Muchos)Cable de conexiones
  • (3) resistencias 330Ω
  • (1) Transistor BC337
  • (1) Motor DC
  • (1) Buzzer

Circuito
  • Usamos las salidas del arduino
    • 11 para la bocina
    • 12 para el motor




Codigo



Al ingresar "q" => la bocina hace un ruido
Al ingresar "e" => el motor empieza a girar
Al ingresar "w" => el motor se detiene

El codigo esta algo "sucio", pero lo que les queria mostrar era el uso de la funcion Serial.read(). Para que ustedes puedan aplicarlo de otra forma.
Video
Recomiendo subirle todo el volumen para escuchar la bocina o armarlo tu mismo.





Para esta entrada combine unas entradas de mis compañeros Saul y Rodolfo. Gracias.

Adroid + Bluetooth



Hay 4 tareas principales al momento de hablar de Bluetooth.

  • Configuracion del bluetooth
  • Busqueda de los dispositivos que esten disponibles en el area local
  • La conexion de dispositivos
  • Transferencia de datos entre dispositivos

Configuración de Bluetooth


Antes de que la aplicacion se pueda comunicar atraves de Bluetooth, es necesario verificar que el Bluetooth es compatible con el dispositivo, y si es asi, asegurarnos de que esta habilitado.

Si el bluetooth NO es compatible, tendremos que deshabilitarlo. Si el bluetooth es compatible, pero esta desactivada, entonces tendremos que pedir al usuario que active el Bluetooth sin dejar la aplicacion. Esta configuracion se realiza en dos pasos, utilizando los BluetoothAdapter.



1.-Recibe las BluetoothAdapter
Los BluetoothAdapter se requiere para cualquier y toda la actividad Bluetooth. Para obtener los BluetoothAdapter , llame al metodo getDefaultAdapter(). Esto devuelve un BluetoothAdapter que representa el adaptador Bluetooth del dispositivo propio (la radio Bluetooth).Hay un adaptador Bluetooth para todo el sistema, y ​​su aplicación puede interactuar con él con este objeto. Si getDefaultAdapter() devuelve un valor nulo, entonces el dispositivo no es compatible con Bluetooth y la historia termina aquí. Por ejemplo:
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
    // Device does not support Bluetooth
}
2.-Activar Bluetooth

A continuación, es necesario asegurarse de que Bluetooth está activada. Llamar isEnabled() para comprobar si se permite en la actualidad Bluetooth. Si este método devuelve false, Bluetooth está desactivado. Para solicitar que el Bluetooth esté habilitado, llamada startActivityForResult() con ACTION_REQUEST_ENABLE. Este emitirá una solicitud para activar Bluetooth a través de los ajustes del sistema (sin detener la aplicación). Por ejemplo:

if (!mBluetoothAdapter.isEnabled()) {
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}

Dispositivos de Busqueda


La búsqueda de dispositivos es un procedimiento de exploración que busca en el área local para dispositivos habilitados para Bluetooth y luego solicitar alguna información sobre cada uno de ellos (esto se refiere a veces como "descubrir", "investigar" o "análisis"). Sin embargo, un dispositivo Bluetooth dentro del área local responderá a una solicitud de descubrimiento sólo si está habilitado para ser detectable. Si un dispositivo se puede detectar, que responderá a la petición de descubrimiento mediante el intercambio de cierta información, como por ejemplo el nombre del dispositivo, la clase, y su dirección MAC única. Con esta información, el dispositivo realiza el descubrimiento puede entonces elegir para iniciar una conexión con el dispositivo descubierto.

Una vez que se establece una conexión con un dispositivo remoto por primera vez, una solicitud de emparejamiento se presenta automáticamente al usuario. Cuando un dispositivo está sincronizado, la información básica acerca de ese dispositivo (como el nombre del dispositivo, la clase, y la dirección MAC) se guarda y se puede leer utilizando el API de Bluetooth. Utilizando la conocida dirección MAC de un dispositivo remoto, una conexión se puede iniciar con él en cualquier momento sin necesidad de realizar el descubrimiento (suponiendo que el dispositivo está dentro del rango).
Recuerde que hay una diferencia entre estar vinculado y conectado.

La conexion de dispositivos


Antes de realizar la detección de dispositivos, vale la pena consultar el conjunto de dispositivos emparejados para ver si el dispositivo deseado ya se conoce. Para ello, llame a getBondedDevices(). Esto devolverá un conjunto de BluetoothDevice dispositivos s pareadas que representan. Por ejemplo, puede consultar todos los dispositivos vinculados y, a continuación muestran el nombre de cada dispositivo para el usuario, utilizando un ArrayAdapter:

Set pairedDevices = mBluetoothAdapter.getBondedDevices();
// If there are paired devices
if (pairedDevices.size() > 0) {
    // Loop through paired devices
    for (BluetoothDevice device : pairedDevices) {
        // Add the name and address to an array adapter to show in a ListView
        mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
    }
}
Todo lo que necesita BluetoothDevice con el fin de iniciar una conexión es la dirección MAC. En este ejemplo, se guarda como una parte de un ArrayAdapter que se muestra al usuario. La dirección MAC más adelante se pueden extraer con el fin de iniciar la conexión. 



Conectando con un cliente


Con el fin de iniciar una conexión con un dispositivo remoto (un dispositivo de la celebración de un socket de servidor abierto), primero debe obtener una BluetoothDevice objeto que representa el dispositivo remoto. (Obtener una BluetoothDevice se trata en la sección anterior sobre dispositivos Búsqueda .) A continuación, debe utilizar el BluetoothDevice para adquirir una BluetoothSocket e iniciar la conexión.



  1. Uso de la BluetoothDevice, consiga un BluetoothSocket llamando createRfcommSocketToServiceRecord(UUID).
    Esto inicializa un BluetoothSocket que se conectará a la BluetoothDevice . El UUID pasado por aquí debe coincidir con el UUID utilizado por el dispositivo de servidor cuando abrió su BluetoothServerSocket (con listenUsingRfcommWithServiceRecord(String, UUID) ). Utilizando el mismo UUID es simplemente una cuestión de codificar la cadena de UUID en su aplicación y, a continuación hace referencia a que tanto el servidor y el código de cliente.
  2. Iniciar la conexión llamando a connect() .
    Tras esta llamada, el sistema realizará una búsqueda de SDP en el dispositivo remoto con el fin de que coincida con el UUID. Si la búsqueda tiene éxito y el dispositivo remoto acepta la conexión, que compartirá el canal RFCOMM para usar durante la conexión y connect() regresará. Este método es una llamada de bloqueo. Si, por cualquier razón, la conexión falla o el connect() varias veces al método (después de unos 12 segundos), entonces se producirá una excepción.
    Debido a connect() es una llamada de bloqueo, este procedimiento de conexión debe realizarse siempre en un hilo separado del hilo principal actividad.
private class ConnectThread extends Thread {
    private final BluetoothSocket mmSocket;
    private final BluetoothDevice mmDevice;
 
    public ConnectThread(BluetoothDevice device) {
        // Use a temporary object that is later assigned to mmSocket,
        // because mmSocket is final
        BluetoothSocket tmp = null;
        mmDevice = device;
 
        // Get a BluetoothSocket to connect with the given BluetoothDevice
        try {
            // MY_UUID is the app's UUID string, also used by the server code
            tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
        } catch (IOException e) { }
        mmSocket = tmp;
    }
 
    public void run() {
        // Cancel discovery because it will slow down the connection
        mBluetoothAdapter.cancelDiscovery();
 
        try {
            // Connect the device through the socket. This will block
            // until it succeeds or throws an exception
            mmSocket.connect();
        } catch (IOException connectException) {
            // Unable to connect; close the socket and get out
            try {
                mmSocket.close();
            } catch (IOException closeException) { }
            return;
        }
 
        // Do work to manage the connection (in a separate thread)
        manageConnectedSocket(mmSocket);
    }
 
    /** Will cancel an in-progress connection, and close the socket */
    public void cancel() {
        try {
            mmSocket.close();
        } catch (IOException e) { }
    }
}