jueves, 27 de noviembre de 2014

Redes Sociales y perfilado de los usuarios

Una de las ultimísimas noticias relacionadas con las redes sociales no hace más que certificar cual es el verdadero objetivo que hay detrás de todas y cada una de ellas y, por si alguno todavía se muestra escéptico al respecto, aquí está la última perla de Twitter.


Pues nada "tuétanos", ahora resulta que los responsables de Twitter han decidido, así por su cara bonita, que van a husmear en nuestros dispositivos (móviles, tablets, etc.), para ver cuales son las aplicaciones que utilizamos, según ellos para ofrecernos una mejor "experiencia de usuario", algo que empieza a tocar un poco las ... "morales" de más de uno, entre los que me incluyo.


Obviamente, un servicio que utilizas "gratuitamente", y que mueve tantos millones de euros en el mundo, algo "raro" tiene que esconder detrás. Y es que ésta, como tantas redes sociales, lo único que busca es obtener TANTOS DATOS PERSONALES DE SUS USUARIOS COMO SEA POSIBLE, con el fin de trazar perfiles de la ciudadanía hasta extremos hasta ahora insospechados e inalcanzables sin el uso de la red.


La cantidad de datos personales y "privados" que circulan por estas redes es inmensa, pero no es menos inmensa la utilidad o el uso que se puede hacer de ellos.


Digamos, que el uso más evidente será el de ofrecernos PUBLICIDAD DIRIGIDA Y PERSONALIZADA en base a nuestros gustos, aficiones, costumbres o hábitos, amistades, situación laboral, personal, de salud, etc.


Imagina que  tienes instalada en tu dispositivo una aplicación para acceder a tu banco habitual, la gente que está detrás de Twitter también lo sabría, imagina que utilizas una aplicación para recordar cuando debes ponerte la insulina (TWITTER también lo sabría), imagina que utilizas una aplicación para ir anotando los granos que te salen en el culo (TWITTER también lo sabría), imagina que como muchas mujeres, utilizas una aplicación para controlar tu período (TWITTER también lo sabría), imagina LO QUE QUIERAS, porque seguro que con el tiempo TWITTER también lo sabrá.


Pero cuidado, porque quizás TWITTER y el resto de redes sociales, no sean los únicos que lleguen a tener acceso a toda esta información que tu piensas que solo te pertenece a ti, imagina nuevamente que toda esa información llega a manos del lado oscuro de la sociedad, gente sin escrúpulos ni miramientos que lo único que buscan es lucrarse (al igual que TWITTER & Company), pero utilizando otras artes más agresivas y directamente sobre tu persona física.


En fin, las redes sociales pueden estar muy bien, pero la comunicación entre personas no tiene porque ser sinónimo de "PERDIDA DE INTIMIDAD O PRIVACIDAD".


En cualquier caso, si no quieres permitir que esto suceda, en el caso de Twitter, parece ser, que puedes desactivar tal comportamiento y, para ello tan solo debes seguir unos pequeños pasos. Aquí tenéis la página de soporte de twitter que os muestra como hacerlo.


https://support.twitter.com/articles/20172080-que-es-el-grafico-de-aplicaciones-de-twitter#


Y si no os importa todo esto, como a más de uno que conozco, pues nada gritad al unísono vuestra frase favorita:


"NA TIO, SI TOTAL, YO NO TENGO NADA QUE ESCONDER, A MI ME DA IGUAL".

jueves, 28 de agosto de 2014

Los termistores

    ¿Qué son? ¿Por qué utilizar un termistor? ¿Cómo funcionan? ¿Qué ecuaciones es preciso conocer para su uso? ¿Cómo utilizar un termistor en un circuito eléctrico? etc.


     Los termistores son componentes electrónicos que nos permiten medir la variación de la temperatura y, por lo tanto, poder actuar en consecuencia.


     Si bien es cierto que existen varios componentes diseñados para tal fin, como es el caso del circuito integrado LM35, o incluso el uso de diodos, transistores, etc. aquí voy a escribir sobre los termistores, su funcionamiento y cómo podemos utilizarlos en nuestros propios circuitos electrónicos.

Por ejemplo, un diodo clásico como el 1N4148 varía su caída de tensión a razón de 2mV por cada grado centígrado y permitiría cubrir un rango desde -30º hasta 120º



     Si una resistencia (Resistor) es un componente electrónico que presenta cierta oposición al paso de la corriente y que se presupone con cierto valor constante e invariable a los cambios de temperatura (cosa no del todo cierta aunque sí deseable), un termistor es una resistencia que tendrá la propiedad de variar su valor con los cambios de temperatura.

     Según como sea la respuesta del termistor a esos cambios, estaremos hablando de termistores de tipo NTC (Negative Temperature Coefficient) o de tipo PTC (Positive Temperature Coefficient).

     Dado que el funcionamiento de ambos tipos es similar, a lo largo de todo el artículo voy a estar refiriéndome a los termistores NTC, que son aquellos cuyo coeficiente de temperatura es negativo, es decir, su resistencia va a disminuir cuando la temperatura aumente y su resistencia aumentará cuando la temperatura caiga, mientras que en los PTC el comportamiento será el inverso.

     Algo que hace interesante el uso de termistores, además de su reducido precio, es su rápida respuesta a los cambios de temperatura, su reducido volumen, su buena precisión, su amplio rango de trabajo, etc. Aunque obviamente todo esto dependerá de las características del mismo y de la aplicación donde vayan a ser utilizados.

     Aunque quizás sea más sencillo el uso de otros componentes como es el integrado LM35, ya que tiene una respuesta proporcional al cambio de temperatura del orden de 10mV por grado centígrado y, en principio no necesitan calibración, éste cuenta con una precisión de 0.5ºC a una temperatura ambiente de 25º. Por el contrario, un termistor puede responder a cambios de temperatura tan pequeños como 0.1ºC, tan solo tienen dos terminales y son muy pequeños.

     Otra diferencia importante entre ambos, es que el LM35 nos facilita un cambio de tensión proporcional al cambio de la temperatura mientras que en el termistor,  lo que tenemos es un cambio de resistencia. Esto no es que sea ni mejor ni peor, sencillamente cada uno se adaptará mejor a una aplicación determinada.

     Otro dato más a tener en cuenta a la hora de trabajar  con termistores en lugar de un integrado como el LM35, es que los termistores no presentan una variación lineal de la resistencia, al contrario, su variación será curva. Por ejemplo, en el caso de un LM35 es sumamente sencillo saber que temperatura le corresponde al voltaje medido en el terminal de salida de dicho integrado, una simple regla de tres y listo, puesto que sabemos que cada grado centígrado de variación corresponde con 10mV de tensión.

     Sin embargo, según sea la aplicación en la que vamos a utilizar el termistor, tendremos que hacer uso de la hoja de datos que nos facilita el fabricante del mismo, en donde podemos encontrar una tabla de equivalencias entre resistencia y temperatura. Haciendo uso de esta tabla sería muy sencillo utilizar el termistor en nuestros circuitos, para por ejemplo, hacer funcionar un ventilador cuando la temperatura supere los 20º centígrados o apagar un ordenador cuando el procesador supere los 70º centígrados. En ambos casos, un sencillo circuito comparador con un divisor de tensión y un transistor o un operacional serían suficiente.

     La cosa se complica un poco más cuando no disponemos de la hoja de datos del fabricante del termistor o, incluso teniéndola, nuestra aplicación requiera conocer con total precisión el valor de la temperatura en un momento puntual y más allá de lo que la tabla de equivalencias nos puede proporcionar, ya que ésta, estará acotada y por lo general por saltos de 'n' grados, en algunos casos por saltos de 10 en 10 grados centígrados. Por ejemplo, si quisiéramos hacer un termómetro digital, capaz de mostrarnos las variaciones de la temperatura en el orden de las décimas de grado, no quedaría más remedio que saber calcular de manera dinámica los grados centígrados que le corresponden al valor de la resistencia medida en el termistor.

     Esto último se puede hacer tanto a nivel de circuito electrónico como por software y en este caso, será preciso conocer las ecuaciones involucradas.

 Seguiré en una segunda parte ...

sábado, 5 de julio de 2014

¡Si quieres pilotar un DRON, lee esto con atención!

Si quieres pilotar un DRON, debes saber que ya existe "algo" de legislación al respecto. Estas son algunas de las cosas que debemos tener en cuenta:
  • Normativa sobre el uso del espectro radioeléctrico.
  • Protección de datos o toma de imágenes aéreas.
  • Responsabilidad por los daños causados por la operación de la aeronave.
  • ¿Más de 25 Kg.? Pues a inscribirla en el Registro de matrícula de aeronaves y a sacar el certificado de aeronavegabilidad.
  • Placa de Identificación visible en la aeronave: nº de serie, nombre de la empresa operadora y datos de contacto.
  • y un montón de cosas más, según sea el peso de la aeronave: menor de 2Kgs., menor de 25Kgs., entre 25Kgs. y 150Kgs. y mayor de 150Kgs.
En cualquier caso, podéis encontrar más información en el Real Decreto Ley 08/2014 de 4 de julio. Prestad atención al artículo 50.

Legislación temporal para los DRONES

Bueno, pues si allá por Marzo decía que el DRON no tenía una legislación clara para el usuario, hoy parece que la cosa va cambiando y, mientras la ley se va definiendo, parece que ya hay un marco regulatorio temporal (OJO Temporal) para las operaciones con los drones.


y dice así:

El Real  Decreto  Ley  incluye  el  régimen  temporal  para  las  operaciones  con aeronaves pilotadas por control remoto, los llamados drones, de peso inferior a los 150 kilos al despegue, en el que se establecen las condiciones de explotación de estas aeronaves para la realización de trabajos técnicos y científicos. 

Esta nueva regulación responde a la necesidad de establecer un marco jurídico que permita el  desarrollo  en  condiciones  de  seguridad  de  un  sector  tecnológicamente  puntero  y emergente, y será desarrollada reglamentariamente en los próximos meses. 

Este reglamento temporal contempla los distintos escenarios en los que se podrán realizar los distintos  trabajos  aéreos  y  en  función  del  peso  de  la  aeronave.  Además,  las  condiciones ahora aprobadas se completan con el régimen general de la Ley sobre Navegación Aérea de 1960 y establecen las condiciones de operación con este tipo de aeronaves, además de otras obligaciones.

Este régimen permitirá que a partir de ahora se puedan utilizar drones para realización de trabajos  aéreos  como  son:  actividades  de  investigación  y  desarrollo;  tratamientos  aéreos, fitosanitarios y otros que supongan esparcir sustancias en el suelo o la atmósfera, incluyendo actividades de lanzamiento de productos para extinción de incendios; levantamientos aéreos; observación y vigilancia aérea incluyendo filmación y actividades de vigilancia de incendios forestales; publicidad aérea; emisiones de radio y TV; operaciones de emergencia, búsqueda y salvamento; y otro tipo de trabajos especiales.

De todos modos, en un primer momento, y hasta que no esté aprobada la reglamentación definitiva, las operaciones que se pueden realizar se limitarán al espacio aéreo no controlado y sobre zonas no pobladas.  

El régimen aprobado hoy establece requisitos en función del peso del aparato al despegue y los  clasifica  en  aeronaves de  más de  veinticinco  kilos,  de  menos de dos  kilos y  de  hasta veinticinco  kilos.  Pero,  independientemente  de  su  peso  hay  unos  requisitos  comunes para todas ellas, así como para los pilotos y las empresas que las operen.  


Requisitos comunes para todos


Todos  los  drones,  sin  excepción,  deben  llevar  fijada  en  su  estructura  una  placa  de identificación y las empresas operadoras de drones deberán tener, entre otros requisitos, un manual de operaciones y de un estudio aeronáutico de seguridad para cada operación (por ejemplo, con el viento máximo que va a volar). 

Todos  los pilotos de drones  deberán acreditar, entre otros  requisitos,  que  son  titulares  de cualquier  licencia  de  piloto,  incluyendo  la  de  piloto  de  ultraligero,  o  demostrar  de  forma fehaciente que disponen de los conocimientos teóricos necesarios para obtenerla. 

Una de las principales novedades de este Reglamento es que, al contrario de lo que ocurría hasta ahora, los drones de menos de veinticinco kilogramos al despegue no deberán estar inscritos  en  el  Registro  de  Matrícula  de  Aeronaves  y  disponer  de  un  certificado  de aeronavegabilidad, sí lo tienen que tener los que superen este peso. 

El cumplimiento  de  todos estos  requisitos  no  exime al operador, que  es,  en  todo  caso,  el responsable de  la aeronave y de la operación, del cumplimiento del resto de la normativa aplicable,  en  particular en relación  con el uso del espectro  radioeléctrico,  la  protección  de datos o la toma de imágenes aéreas, ni de su responsabilidad por los daños causados por la operación o la aeronave. 
Aquí tenéis el enlace al BOE con el PDF completo: www.boe.es/boe/dias/2014/07/05/pdfs/BOE-A-2014-7064.pdf

domingo, 1 de junio de 2014

Árbol binario de expresión y Notación Posfija (II)

En una publicación anterior, hablaba sobre que es la notación posfija, para que puede ser útil y mostraba un pequeño ejemplo con una expresión aritmética simple:

(9 - (5 + 2)) * 3

Pues bien, hoy voy a mostraros como podemos crear el árbol binario correspondiente para analizar o evaluar esta expresión, haciendo uso del recorrido en postorden.

Lo primero que debemos hacer es crear el árbol, respetando las siguientes reglas:

⦁ Los nodos con hijos (padres) representarán los operadores de la expresión.
⦁ Las hojas (terminales sin hijos) representarán los operandos.
⦁ Los paréntesis generan sub-árboles.

A continuación podemos ver cómo queda el árbol para la expresión del ejemplo (9 - (5 + 2)) * 3:




Si queremos obtener la notación postfija a partir de este árbol de expresión, debemos recorrerlo en postorden (nodo izquierdo – nodo derecho – nodo central), obteniendo la expresión: 952+-3x

Así, si quisiéramos evaluar la expresión, podemos hacer uso de un algoritmo recursivo. A continuación tenemos el pseudocódigo que realiza esta tarea:

Recorrer en PostOrden(NODO)
    Si NODO es válido entonces
        Recorrer en PostOrden(NODO.Izquierdo)
        Recorrer en PostOrden(NODO.Derecho)
        Evaluar(NODO)

Escribir este algoritmo en alguno de los lenguajes de programación típicos (C, C++, C#, Javascript, Python, Perl, etc.) ya no tiene ningún misterio. Por ejemplo en C++, tendríamos algo como lo siguiente, obviamente no está completo, pero representa claramente la idea principal:
...
void MathHelpers::PostOrden(Arbol* pNodo)
{
     if (pNodo)
    {
         PostOrden(pNodo->Izq);
         PostOrden(pNodo->Der);
         pNodo->Eval;
    }
}
void Arbol::Eval()
{
     switch(pNodo->Operador)
     {
         case ‘-‘:
             this->Valor = this->Izq - this->Der;
         break;
         case ‘+’:
             this->Valor = this->Izq + this->Der;
         break;
         case ‘x’:
             this->Valor = this->Izq * this-Der;
         break;
         case ‘/’:
             this->Valor = this->Izq / this->Der;
         break;
      }
}

Apps de Android que acceden al IMEI


Que el sistema operativo Android, posee gran cuota del mercado de la telefonía móvil, además de encontrarse en otros muchos dispositivos, no es nada que no sepamos ya.

Que precisamente esa es la razón por la que la plataforma Android cuenta con gran cantidad de aplicaciones en su haber y que por eso, existen multitud de virus y demás especímenes (adware, spyware, crapware, etc), tampoco es ninguna novedad.

Y que este es el motivo por el que debemos extremar las precauciones a la hora de instalar una App en nuestro dispositivo (independientemente del SO), tampoco debiera ser nada nuevo.

Pero, ¿Qué buscan todas estas aplicaciones "malas"?

Pues el abanico de opciones es amplio, pero la inmensa mayoría van detrás de nuestros DATOS y buscan asaltar nuestra privacidad, los fines también son varios.

En cualquier caso, lo que pretendo comentar hoy, es algo relacionado con el IMEI de nuestros dispositivos. Si, ese número cuya finalidad es identificarlo de manera única e inequívoca a nivel mundial. Algo así como el DNI o Pasaporte para nosotros, o el chip de nuestras mascotas, pero en el ámbito tecnológico.

(Breve paréntesis): ¿Por qué ese afán de identificarlo todo de manera única y a nivel mundial? Personas, Mascotas, Dispositivos varios, ... respuestas hay muchas, buenas y malas también.

La finalidad del IMEI (International Mobile Equipment Identity), además de ser la de identificar a cada dispositivo que se conecta a la red de telefonía móvil, y permitirlo o no su acceso, va un paso más allá y es que, es el IMEI el que sirve para asociar un dispositivo móvil con una persona o cuando menos con la persona que a tramitado su alta (punto débil del IMEI).

Esto es así al menos en teoría, porque ¿qué pasa si modificamos el IMEI de nuestro teléfono móvil? Pues sencillamente, ya no tendrían manera de "asociar" nuestro teléfono (IMEI) con nuestra identidad personal (DNI, Pasaporte, etc.). Cierto es, que podrían re-asocinarnos por otros medios -ya comentaré algo en otro momento-, pero no por el IMEI.

Otro tema sería saber que IMEI habría que utilizar como sustituto, porque esto podría tener graves consecuencias, según quien fuera su propietario real, por ejemplo. Y ni que decir tiene, que ese nuevo IMEI tendría que estar dado de alta con algún operador.

¿Para qué podría querer alguien modificar el IMEI de su teléfono? Allá cada cual, a mí personalmente se me ocurren muchos motivos, que obviamente me reservo. Personalmente, y sobre todo por cuestiones de seguridad nacional, preferiría que el IMEI no se pudiera modificar bajo ningún concepto, o al menos por cualquier usuario. Es más, creo que se debieran de implementar sistemas de asociación (IMEI-Identidad personal) adicionales y se me ocurren unos cuantos.

Bueno, pues volviendo al tema de Android y la relación a la que quiero llegar, en la tienda de aplicaciones (Play-store o la que utilices), no es difícil encontrar aquellas que hacen uso del API que da acceso al IMEI de nuestro dispositivo. En concreto, hay que tener en cuenta la API "android.telephony.TelephonyManager".

TelephonyManager es una clase que nos da acceso a información relacionada con los servicios del teléfono y su estado. Nos facilita datos propios del servicio de suscripción como pueden ser el número de teléfono, el IMEI, el número de serie de la tarjeta SIM, nombre del operador, país, etc., eso sí, en "modo lectura" ;):

                TelephonyManager telephonymanager;

                ...

                telephonymanager.getDeviceId();

 

Así que, si una aplicación hace uso del IMEI, en mi opinión ya es para sospechar, pero si además hace uso del mismo, sin tan siquiera informar al usuario, además ya está saltándose las reglas y muy posiblemente incurriendo en un delito contra la privacidad. Además, las normas de Google al respecto son claras, si vas a hacer uso del IMEI del dispositivo, hay que avisar al usuario.

Y además, hay incluir en el manifiesto de la aplicación el siguiente permiso:

                uses-permission android:name="android.permission.READ_PHONE_STATE"

Por último, deciros que es mejor que vigiléis vuestras aplicaciones y a vuestros teléfonos, antes de que ellos os vigilen a vosotros, aunque esto no es tarea fácil.

viernes, 16 de mayo de 2014

Expresiones Aritméticas en Notación Postfija (I)

La Notación Polaca Inversa, Notación Posfija o RPN (Reverse Polish Notation) no es más que una forma de representación de expresiones aritméticas. Se trata de una notación que permite omitir los paréntesis en las expresiones, pero manteniendo el orden o prioridad de los distintos operadores y los cálculos se van realizando de forma secuencial en el momento en que se introduce un operador.


Si quieres programar una calculadora, un interprete, un evaluador de expresiones, un compilador, etc., sin duda te resultará muy interesante.

A modo de ejemplo, consideremos la siguiente expresión aritmética simple para obtener su notación en postfijo:

(9 - (5 + 2)) * 3

En primer lugar evaluamos el paréntesis interior, obteniendo la siguiente expresión:

(9 - (52+)) * 3

Ahora evualuamos el paréntesis exterior:

(952+-)

y finalmente el producto:

952+-3*

Con lo que finalmente hemos obtenido la notación posfija 952+-3* correspondiente a la expresión (9 - (5 + 2)) * 3

Ni que decir tiene, que para poder evaluar una expresión en notación postfija, tenemos que recorrerla de izquierda a derecha en busca del primer operador y posteriormente obtener los operandos inmediatamente a su izquierda:

952+-3* => 97-3* => 23* => 6

Como vemos, en el primer paso se llega al operador '+' y se hace la suma de 5+2=7, quedando la expresión como 97-3*. A continuación llegamos al operador resta '-', y hacemos la resta de 9-7=2 con lo que ya tenemos 23*. Y por último nos queda el operador del producto '*' obteniendo el valor 6 como resultado de la expresión.

Desde el punto de vista de la programación y de la estructura de datos necesaria para evaluar una expresión en postfijo, nos bastará con una simple PILA en la que iremos depositando los distintos operandos y en el momento de entrar un operador, lo que haremos será extraer de la pila los operandos correspondientes, aplicar la operación indicada por el operador y guardar el resultado en la pila.

Obviamente si lo que queremos es programar un "conversor" de expresiones algebraicas (en Infijo) a expresiones en Postfijo, podremos emplear una estructura de datos arbórea (AST - Arbol de Sintaxis Abstracta) y haciendo un recorrido del árbol en Postorden. También podríamos hacer uso del "Algoritmo Shunting Yard" inventado por Edsger Dijkstra, sin duda un gran físico y científico en materia computacional, por desgracia falleció en 2002 pero nos dejó un gran legado:


  •  Algoritmo de Dijkstra (Solución al problema del camino más corto)
  •  Algoritmo Shunting Yard (Notación Polaca Inversa - Postfijo)
  •  El Algoritmo del banquero (interbloqueo en Sistemas Operativos)
  •  Propuso el problema de la cena de filósofos (Sincronización de procesos en un Sistema Operativo)
  •  etc.