Enviar correo internamente usando JavaMail API


En realidad no es demasiado difícil crear un aplicación capaz de enviar correos electrónicos usando el IDE de Android Studio  .De hecho gracias al APi de Javmail   podremos enviar e-mails sin utilizar la aplicación de correo electrónico que android incluye por defecto utilizando javamail API para crear nuestro propio email del remitente herramientas que enviará correo internamente.

Tenemos que seguir los pasos que se dan a continuación:

1. Descargar los archivos de biblioteca de api de java.

Tenemos que descargar  tres   librerías java: 

    1. activation.jar
    2. mail.jar.
    3.  additionnal.jar

    Lo puede descargar de Clic aquí.

    2 Ahora crear una  app en Android studio

    3-Ir a la carpeta del proyecto -> aplicación -> libs y agregue todos los archivos jar en libs ahora uno por uno, haga clic en biblioteca de archivos en la opción haga clic en Agregar como biblioteca en todos los archivos jar.

    libs

    También puede Agregar biblioteca por otro camino, pero lo  importante es que incluya esta tres librerías:

    1. activation.jar
    2. mail.jar.
    3.  additionnal.jar

    Ir a archivo >Proyecto estructura > seleccione aplicación> opción derecha haga clic en dependencias ahora haga clic en el botón de pulse(+) para agregar > seleccione dependencia de archivo> archivo seleccione Biblioteca > OK.

    addjar

    4. Ahora abrir el archivo manifest.xml y poner los permisos de internet.

     <uses-permission android:name="android.permission.INTERNET"/>

    Ahora busque manifiesto está buscando como.

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.sp.sendmailinternally">
        <uses-permission android:name="android.permission.INTERNET"/>
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    </manifest>

    4. Ahora abrael fichero  activity_main.xml para crear el archivo de diseño agregar después de código.

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.sp.sendmailinternally.MainActivity">
        <EditText
            android:id="@+id/edittext_recipient_id"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Recipient Email"
            android:textSize="18sp" />
        <EditText
            android:id="@+id/edittext_subject"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Subject"
            android:textSize="18sp" />
        <EditText
            android:id="@+id/edittext_message"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:gravity="start"
            android:hint="Message"
            android:textSize="18sp" />
        <Button
            android:id="@+id/btn_send_mail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="Send Mail"
            android:textAllCaps="false" />
    </LinearLayout>

    5. Cree la  clase de Asyntask para el envío de llamada correo API.

    package com.sp.sendmailinternally;
    import android.app.ProgressDialog;
    import android.content.Context;
    import android.os.AsyncTask;
    import android.widget.Toast;
    import java.util.Properties;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    /**
     * Created by ps205 on 3/1/17.
     */
    public class SendMailAsynTask extends AsyncTask<Void, Void, Void> {
        //Declaring Variables
        private Context context;
        private Session session;
        //Information to send email
        private String email;
        private String subject;
        private String message;
        //Progressdialog to show while sending email
        private ProgressDialog progressDialog;
        //Class Constructor
        public SendMailAsynTask(Context context, String email, String subject, String message) {
            //Initializing variables
            this.context = context;
            this.email = email;
            this.subject = subject;
            this.message = message;
        }
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            //Showing progress dialog while sending email
            progressDialog = ProgressDialog.show(context, "Sending message", "Please wait...", false, false);
        }
        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            //Dismissing the progress dialog
            progressDialog.dismiss();
            //Showing a success message
            Toast.makeText(context, "Message Sent", Toast.LENGTH_LONG).show();
        }
        @Override
        protected Void doInBackground(Void... params) {
            //Creating properties
            Properties props = new Properties();
            //Configuring properties for gmail
            //If you are not using gmail you may need to change the values
            props.put("mail.smtp.host", "smtp.gmail.com");
            props.put("mail.smtp.socketFactory.port", "465");
            props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.port", "465");
            //Creating a new session
            session = Session.getDefaultInstance(props,
                    new javax.mail.Authenticator() {
                        //Authenticating the password
                        protected PasswordAuthentication getPasswordAuthentication() {
                            return new PasswordAuthentication(Config.EMAIL, Config.PASSWORD);
                        }
                    });
            try {
                //Creating MimeMessage object
                MimeMessage mm = new MimeMessage(session);
                //Setting sender address
                mm.setFrom(new InternetAddress(Config.EMAIL));
                //Adding receiver
                mm.addRecipient(Message.RecipientType.TO, new InternetAddress(email));
                //Adding subject
                mm.setSubject(subject);
                //Adding message
                mm.setText(message);
                //Sending email
                Transport.send(mm);
            } catch (MessagingException e) {
                e.printStackTrace();
            }
            return null;
        }
    }

    6. Ahora abra MainActivity.java y agregue el siguiente código.

    package com.sp.sendmailinternally;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    public class MainActivity extends AppCompatActivity {
        EditText edittext_recipient_id, edittext_subject, edittext_message;
        Button btn_send_mail;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //initializr vista para encontar vista por id
            edittext_recipient_id = (EditText) findViewById(R.id.edittext_recipient_id);
            edittext_subject = (EditText) findViewById(R.id.edittext_subject);
            edittext_message = (EditText) findViewById(R.id.edittext_message);
            btn_send_mail = (Button) findViewById(R.id.btn_send_mail);
    //activar un listener  onclick en un  boton
            btn_send_mail.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //get  input data from view
                    String mRecipientMail = edittext_recipient_id.getText().toString();
                    String mSubject = edittext_subject.getText().toString();
                    String mMessage = edittext_message.getText().toString();
                    new SendMailAsynTask(MainActivity.this, mRecipientMail, mSubject, mMessage).execute();
    //llama al contructor de send mail asyntask mediante el envio de un parametroperameter } }); } }

    7. Ya puede construir y ejecutar la aplicación  

    Nota:- cuando ponga su id debe ser accesible acceso menos seguro aplicaciones .Para cambiar configuración para motivos de seguridad de correo vaya a cambiar la configuración   y actiíela .

     

    sendmail1

    Por cierto todo el código  esta disponible en descargar código fuente

     

     

     

    Anuncios

    Cámara trasera inteligente con Raspberry Pi. Parte 1


    El término “Coche inteligente” puede tener miles de significados diferentes dependiendo a quién le preguntemos., así que empecemos con una definición   modesta  de algunos componentes que podemos añadir :

    • Información básica sobre el coche, como la marcha engranada, eficiencia de combustible, horas de conducción ,etc.
    • Ayudas a la conducción de tipo ADAS , siendo   los mas comunes la puesta en marcha del  coche delantero, acceso involuntario a línea de separación de carril o aviso de colisión por vehículo delantero que circula  muy próximo
    • Cámara trasera inteligente que avise si un objeto está demasiado cercano
    • etc

    Del primer punto lo hemos comentado en diferentes post , explicando que para automóviles de unos 10 años, es decir que cuentan con interfaz ODB2,  es relativamente simple añadir un HUD con toda esta información  con  un HUD conectado por ODB2

    Resumidamente los sistemas ADAS  de ayuda  a  la conducción  mas usuales son las siguientes:

    • FCWS   del ingles  Forward Colission Warning Sytem (advertencia de colisión delantera) ayuda al conductor a mantenerse a una distancia segura del vehículo delantero y alerta a los conductores de una colisión inminente con advertencias visuales y audibles.Este sistema permite al dispositivo detectar cuando no se mantiene una distancia segura entre su vehículo y el vehículo delante de usted. El dispositivo determinará la velocidad de su vehículo calculando una distancia estimada de siguiente segura basada en su velocidad.Normalmente para que esta  función pueda estar habilitada se  debe estar  viajando a más de 48KM/H ( a una velocidad de menos de 32 KM/H, se suele  desactivar la función). Precisamente por esta limitacion el FCWS no puede detectar los vehículos que están  alejados más de 40m  o más cerca de 5m.

    fcw.png

    • LDWS  del inglés Lane Departure Warning  System  ( SISTEMA DE  ADVERTENCIA DE SALIDA DE CARRIL) monitorea las marcas del carril y avisa al conductor con advertencias visuales y audibles cuando ocurre una salida involuntaria del carril sin la notificación de la señal de giro.Es un mecanismo diseñado para advertir al conductor cuando el vehículo empieza a moverse fuera de su carril (salvo que una señal de la vuelta en esa dirección) en las autopistas y carreteras de la zona. Este sistema está diseñado para minimizar los accidentes por abordar las principales causas de colisiones: error del conductor , distracción y somnolencia.

    ldw

    • HMW( VIGILANCIA Y ADVERTENCIA DEL AVANCE DE PISTA)- Mide la distancia al vehículo que está por delante (“headway”) en segundos. Ayuda al conductor a mantener una distancia segura de conducción. Alerta al conductor al entrar en una zona predefinida de “avance peligroso”

    .hmw.png

    • FVSA (ALARMA DE INICIO DEL VEHÍCULO DELANTERO ) Notifica al conductor si el vehículo delantero comienza a avanzar en el estado parado completo y el coche del conductor no se mueve en 2 segundos.

    fvsa

    Casi todas estas ayudas ADAS  están implementadas  en  numerosas cámaras  disponibles en el mercado como vismo en este post destacando por voz propia  el modelo Dash de Garmin

    Respecto al ultimo punto de cámaras traseras  , hay muchos kits para  añadir una cámara  trasera a  nuestro vehículos usando una conexión analógica de video compuesto , lo cual se traduce en  que la mayoría de ellas requieren hacer modificaciones al coche  ,por  ejemplo para ubicar la cámara en el porta-matriculas  , o fijar la pantalla especifica   de modo que no siempre en sencilla su instalación .Además las cámaras traseras comentadas requieren una  fuente de alimentación externa alimentándose con los  cables de las luces de atrás de su coche para que automáticamente se enciendan cuando el coche está en marcha lo cual tampoco le  gusta a muchas personas .

    Dado que el mercado no ofrece por  el momento soluciones mas avanzadas una idea es usar la Raspberry Pi pues es la plataforma perfecta  porque básicamente es un mini ordenador con un montón de entradas y salidas.

    Al conectar una cámara a la Pi, se puede utilizar prácticamente cualquier webcam USB genérica, o  por supuesto  mejor puede usar una  Cámara Pi conectada al conector DSI pues estas ofrecen una mayor calidad , versatilidad y  no  requiere una fuente de alimentación separada (pero asegúrese de tener un montón de cable para ir a la parte posterior del coche)

    Solución con Raspberry Pi

    Gracias a una Raspberry Pi  por medio del procesamiento de imágenes en efecto  podemos  hacer más inteligente nuestro vehículo y añadir  nuevas funcionalidades

    Para esta idea  podemos  usar  los siguientes componentes:

     

    Conexión del módulo de cámara

    El modulo de cámara de Pi  tiene un mayor rendimiento que una cámara USB  por lo que lo ideal es usar una cámara del tipo compatibles con Raspberry Pi  (se puede comprar por unos 15€ en Amazon) 

    No es  problema  la distancia pues con un cable plano  de 200 cm suele ser suficiente para llevar la cámara  hasta la  posición de conducción (puede comprarlo   aqui en Amazon por unos 7,29€ )

    Se puede pues llevar el cable plano al l frente del coche y luego conectado a una pantalla de táctil de 7″ de modo que  la Pi y la pantalla táctil pueden ser alimentados por el adaptador USB en el coche.

    Estos  son los pasos para instalar la cámara especifica para su uso , con la Raspberry Pi 

      • Localice el puerto de la cámara y conecte la cámara:Connect the camera
      • Poner en marcha la Raspberry Pi 
      • Abra la Herramienta de configuración de frambuesa Pi desde el menú principal:Raspberry Pi Configuration Tool
      • Asegúrese de que está activado el software de la cámara:Camera software enabled
      • Si no está activado, habilítelo y reinicie su Pi para comenzar. Asimismo si va utilizar una pantalla táctil también necesitara activar I2C  y SPI

    Es decir resumidamente;  con la Raspberry Pi apagada, debe conectar el módulo de la cámara al puerto de la cámara de la Raspberry Pi,ahora encienda el Pi  y asegúrese de que se activa el software.

    Conexión de un pantalla táctil(opcional)

    Existen pantallas TFT para Raspberry Pi con  resolución de 320×240 (16-bits) que además son táctiles con una pantalla resistiva. Se entregan montadas y suelen ser  compatible con los modelos Raspberry Pi Model A+, B+ y Pi 2  disponiendo  además de de un conector de 40 pines para los GPIO.

    La pantalla y el digitalizador   utilizan los pines I2C (SDA y SCL), SPI (SCK, MOSI, MISO, CE0) y los pines GPIO #24 y #25. Todos los demás pines GPIO no se utilizan así que podrá conectar más cosas como sensores, LEDs etc. Algunos modelos disponen deposiciones para pulsadores miniatura (no incluidos) por si quiere hacer algún otro tipo de interfaz de usuario.

    Puede utilizarla utilizar la librería PyGame u otra librería SDL para dibujar directamente en el frame buffer y hacer interfaces propios.

    Tenga en cuenta que para que funcione debe tener activado el I2C en tu Pi o se quedará en blanco. Si utiliza la imagen de Adafruit funcionará sin problema, sino puedes ver su tutorial para ver cómo hacerla funcionar.

    La conexión de este tipo de pantallas suele ser por el  propio conector de 25 pines  y por hdmi con un adaptador

    Respecto al sw, estos son los pasos  que puede  seguir;

    !Ojo el conector plano de la pantalla pues es MUY frágil y debe manejarse con cuidado.!

    Montaje final

    Una vez montada  la pantalla y la cámara , encender el coche, la Pi y la pantalla . Para ver la camara   de la Pi, abra el terminal y ejecute simplemente  el  siguiente  script:

    raspivid -t 0

    o

    raspivid -t 0 --mode 7

    Después de entrar esto ,   la imagen captada por la cámara debería aparecer  en pantalla  completa , pero  !ojo !  no lo veremos  si estamos conectado via VNC!, es decir ,solo si estamos conectados a la propia  Raspberry Pi .

    Lo bueno de a Raspberry Pi  es que se puede mejorar  esta forma básica , y tal vez incluso establecer un sistema de alerta si un objeto esta   demasiado cerca , así que, ! vamos a trabajar en ese lado!

     

    DETECCIÓN DE OBJETOS

    Cuando se trata de aplicaciones de  cámaras de seguridad comerciales, generalmente hay al menos dos versiones  .La primera utiliza una superposición de una imagen estática con gamas de color para que visualmente puede determinarse cuánto de  cerca está un objeto. El segundo método utilizara una cámara junto con sw  que puede detectar un objeto qué tan cerca esta al coche y luego avisa cuando algo está demasiado cerca
    Veamos en este post en primer lugar le método de overlay, el cual por cierto es el mas usado en los implementaciones de cámaras traseras de coches actuales.

     

     

    Cámara trasera con Raspberry PI para coche basada en Android


    En efecto  simplemente podemos  usar una frambuesa Pi como retrovisor o cámara trasera  en conjunción con su smartphone o tablet gracias a la aplicación  RearPi.

    Esta app disponible en Google Play  gratuita  y sin anuncios se conecta a su Raspberry  Pi a través de SSH y activa bien  una cámara usb  externa  o bien    la  cámara nativa para Raspberry Pi con interfaz CSI  un enlace de mayor ancho de banda que transporta los datos de píxeles de la cámara al procesador.  .

    Disponiendo de la Rasberry con una cámara,   basta  con conectarse  a esta via ssh (nombre de IP-Adress/Login y contraseña), iniciar la cámara en el arranque de la aplicación o con el botón “Abrir” y  pulsar  el  modo de pantalla completa  para disponer de la visión trasera desde la app de un modo  muy nítido  . Al continuar el trayecto si ya no se requiere  basta cerrar la cámara con el botón “EXIT” para disponer nuestro smartphone  para reproducir nuestra lista de música favorita o que nos guié a través de alguna app  de navegación

     

    Imagen

    Razones para usar una Raspberry Pi como cámara trasera

    RearPi es una sencilla aplicación para Android disponible gratuitamente   SIN PUBLICIDAD en en Google Play  que nos va a permitir  visualizar y grabar señales de vídeo transmitidas por una Raspberry Pi o similar   a través de WiFi , por lo que es utilizable para casi todos los coches para transmitir señales  de vídeo procedentes de una cámara frontal  o  de una cámara trasera hacia un terminal Android.

    Puede que piense que existen en el mercado soluciones especificas de cámaras traseras para coche  a un precio  similar  a una Raspberry Pi   sobre todo si pensamos en que necesitamos adquirir el hardware especifico que vamos a describir, lo cual  ciertamente podría ser parcialmente cierto , pero  esta afirmación se desmorona si  podemos usar elementos que ya tengamos   pero  sobre todo  , si deseamos  usar  nuestro smartphone o incluso un  terminal obsoleto  que tengamos  para visualizar la señal , lo cual  es un punto a su favor de  esta solución  si lo comparamos con las pequeñísimas o antiestéticas  pantallas de visualización  que  ofrecen los kits de cámaras traseras  (piensese que  solemos llevar  siempre  un smartphone y ademas puede usarse para otras usos)

    Incluso en otros vehículos (por ejemplo  para las caravanas)  pueden  usarse para ofrecer la visión delantera o trasera por  múltiples pantallas de  forma inalámbrica

    Algunas características de esta aplicación:
    • Grabación cámara  (.. 15 min 30 min 45 min)
    • Bucle de grabación (.. 15 min 30 min 45 min)
    • Opción para establecer la calidad de grabación
    • Reproductor multimedia integrado para ver grabaciones
    • Modo de pantalla completa  y sin publicidad
    •  Documentación Integrada

    En realidad  como podemos intuir , esta  app  se conecta a su Raspberry Pi ( o  cualquier placa basada en Linux  )  por ssh   mediante   IP-Dirección , login y contraseña mediante WIFI dentro de la misma red , y , una vez conectada se puede  iniciar la cámara en la   aplicación o con el botón “OPEN” ,pudiéndose   cerrar la cámara con el botón “SALIR”

    Para utilizar su Frambuesa Pi con RearPi como cámara y esta aplicación  rearPi    tendremos   que seguir unos pocos sencillos   pasos en la Raspberry  PI, pero antes veamos  el hardware necesario

     

    Hardware necesario

    ¿Qué necesita para obtener una señal de video?

    • Una Raspberry Pi o un dispositivo que ejecute una distribución de Linux con un sistema operativo preinstalado y una trabajando la conexión SSH.
    • Un dongle WiFi como el “Edimax EW-7811”
    • Una cámara USB o cámara web como Logitech C270
    • Un cable de carga micro USB
    • Un cargador de coche como el “Anker” PowerDrive2 ” Entrada: DC 12 / 24V Salida: 5V / 4.8A 2.4 A por puerto.Por favor, asegúrese de que su Raspberry  se pone suficiente potencia y el voltaje correcto.La salida de su cargador de coche debería tener 5V y la capacidad actual recomendada para su modelo está escrito en la lista siguiente:

    raspberrrypower.PNG

    Instalación de mjpg streamer

    Para que su Raspberry esté lista para transmitir video via tcp/ip a traves de una conexión wifi, debe seguir estos pasos:

    1. Abra un terminal por ssh
    2. Instale mread streamer con estos comandos (comience con el primero):
     sudo apt-get install libv4l-dev
     sudo apt-get install libjpeg8-dev
     sudo apt-get install subversion
     sudo apt-get install imagemagick
     svn co https://svn.code.sf.net/p/mjpg-streamer/code/
     cd / home / pi / code / mjpg-streamer /
     make USE_LIBV4L2 = true clean all
     sudo make DESTDIR = / usr install
    3. !Listo!!

    Configurar una dirección IP estática y conexión WiFi

    Para asegurarse de que su Raspberry Pi siempre tenga la misma dirección IP, establezca IP estática (para que no tenga problemas al  iniciar la app)

    Por ello verifque su interfaz WiFi  con  el comando :ifconfig (buscar la ip asociada a Interfaz WiFi) y una vez seap el  nombre de interfaz WiFi asi  , edite las interfaces:

    • sudo nano / etc / network / interfaces
    • Desplazarse hacia abajo a la #WLAN  sección (si no está allí crear uno al final del archivo)
    • Configure su interfaz a IP estática
    • Configure su Raspberry Pi  a una  dirección  fija ,por ejemplo “192.168.43.125” o lo que quiera
    • Escriba el nombre de la zona wifi y contraseña entre comillas  “
    • Salvar el fichero y reiniciar la Raspberry

    RearPi

    Para empezar a usar  su Raspeberrry Pi como cámara IP trasera, una vez seguido el proceso anterior de personalización de la  Pi , es importante que  nuestro smartphone  y la  Raspberry estén en la misma red , para lo cual podemos  automatizar el proceso con la App Automate , tal y como vimos en este post 

    Muy  resumidamente  la red wifi , se consigue con la función de “hot spot ”  de nuestro teléfono inteligente  la cual permite conectar diferentes dispositivos conectados a nuestra propia red wifi generada desde el  propio terminal   .En caso de Android   vaya a “Configuración –>Más –>Anclaje y punto de acceso portátil” o en versiones de Android superiores a   a la 7 vaya   a  Ajustes (la tuerca ) , busque la opción de  Más y vaya  a  Anclaje de red y zona Wi-Fi  y pulse  Zona Wifi portátil  y áctivelo ( interruptor a la derecha).Una  vez creada la zona wifi podemos  automatizar el proceso con la App Automate buscando   el punto de acceso en el automóvil ( Hotspot ON/OF CAR ) y descargando el flujo

    Ahora con  ambos  equipos en red ,conecte la Raspberry Pi con su cargador e Instale la app RearPi desde Google Play 

    Una vez ejecute la app, abra la “configuración” y configure la “Dirección IP”, el “Nombre de inicio de sesión” y la contraseña (std pw = raspberry) y podemos empezar con los ajustes de  la pantalla de inicio ajustable:

    •  Establezca los segundos por cuánto tiempo pantalla de inicio se queda (en la configuración)
    •  Establecer “0” para ninguna pantalla de inicio
    •  Activar la cámara cada inicio

    Imagen Imagen

    Una vez  realizados los ajustes , pulsaremos  el  botón ABRIR , el cual  se conectará a la Raspberry Pi y activara la cámara  actualizando la señal de vídeo

    Si queremos abandonar  esta utilidad  , pulsaremos  el  Botón EXIT, el cual se conectara a la Raspberry Pi y desactivara la cámara, cerrando  aplicación

    Un modo muy interesante es el Modo de pantalla completa, qu e opera del siguiente modo:

    •  Toque una vez en el vídeo para obtener modo de pantalla completa
    •  Toque  nuevamente para salir de pantalla completa modo

    Imagen

    Un truco muy interesante es el Modo de pantalla completa al inicio, que conseguiremos si  establecemos la marca de verificación para ir directamente en el modo de pantalla completa (configuración)  cuando iniciemos la aplicación

    Por cierto también es posible  grabar video  y visionarlo  desde la propia  aplicación

     

    Imagen

     

    Resumidamente estos son los posos a seguir para crear una camara trasera  :

    • Establecer un hot spot  para conectar la Pi y su teléfono / tableta.
    • Para transmitir vídeo tiene que instalar streamer MJPG  en Raspberry Pi:.
    • Ejecute   sudo ◦ apt-get install build-essential libjpeg-dev ImageMagick subversión libv4l-dev checkinstall
    • Ejecute  svn co svn: //svn.code.sf.net/p/mjpg-streamer/code/ MJPG-streamer
    • Ejecute cd MJPG-streamer / mjpg-streamer
    • Ejecute  VERSION = $ (sed -n ‘/SOURCE_VERSION/s/^.*”\(.*\)”.*$/\1/gp’ REVISIÓN ◦ = $ (CN svnversion | sed “s /.*: //”)
    • Ejecute sudo checkinstall –pkgname = MJPG-streamer –pkgversion = “$ + $ VERSIÓN DE REVISIÓN ~ checkinstall” –default
    • Hacer USE_LIBV4L2 = true ← opcional
    • De a suu Raspberry Pi una dirección IP estática (pasos detallados en el manual de PDF).
    •  Conectar con la App a su a Pi (IP / Conexión / PW)

     

    Con  esta solución  no, necesita alguna fuente de radiación lumínica o infrarroja pues  en condiciones de muy baja luminosidad trabaja bien especialmente si usa la camra nativa.

    Por cierto para probar si esta funcionando el stream de video ,tenemos  el comando raspistill que   sirve para hacer fotografías. Si busca en internet hay proyectos para hacer de forma automatizada varias tomas y hacer un timelapse  de modo  qeu la ventaja de esta cámara es que la podrá usar como cámara de vigilancia con uno leds infrarojos para iluminar la zona

    En el siguiente vídeo podemos  ver la cámara en acción:

     

    Documentación: https://alikamouche.files.wordpress.com … _v1-33.pdf

    Sistema de detección de carril con opencv


    Kemal Ficici     nos demuestra  con su proyecto escrito en  python,  que por cierto  ha publicado con su código completo en  github,   como es posible usando la librería  OpenCv    construir un detector de carril   que  incluso  maneja carriles con  curvas.

    A pesar del gran avance , sin embargo el autor  reconoce  que la salida de su sistema  todavía se ve afectada por sombras y drásticos cambios en la textura de la carretera  lo cual invalida en gran parte su resultado ,  lo cual  le hace  pensar en futuras actualizaciones de su proyecto  haciendo  uso de técnicas de aprendizaje automático para llegar a desarrollar un sistema de detección de vehículo e increíblemente robusto carril.

    En el siguiente video podemos ver el resultado de su trabajo:

    En cualquier escenario de conducción, las líneas de carril son un componente esencial de lo que indica el flujo de tráfico y donde se debe conducir un vehículo  así  que también es un buen punto de partida en el desarrollo de  niveles de automatismos de ayuda a la conducción ( Sistemas ADAS).
    En un proyecto anterior de detección de carril  Kemal  había implementado un sistema de detección de carril  que funcionaba decentemente en perfectas condiciones, sin embargo no detectaba curvas carriles con precisión y no era robusta a obstrucciones y sombras, de modo que  esta nueva versión mejora su   primera propuesta puesto que ha implementado  detección de lineas  curvas en los carriles , de modo que   funciona mucho mejor y es más robusto para entornos exigentes.

    El sistema de detección de carril ha sido  escrito en Python usando la librería OpenCV y ha seguido resumidamente las siguientes etapas en el  procesamiento de imagen:

    • Corrección de distorsión
    • Deformación de la perspectiva
    • Filtro de Sobel
    • Detección de picos del histograma
    • Búsqueda de ventana deslizante
    • Ajuste de curvas
    • Superposición de carril detectado
    • Aplicar el resultado a  la salida  al vídeo

    Respecto al hardware utililizado :

    • Nvidia Jetson TX2×1
    • Raspberry Pi 3 Model B×1

     

     

    Corrección de distorsión

    Las  lentes de las cámaras distorsionan la luz entrante al  enfocarla en el sensor de la cámara o CCD . Aunque esto es muy útil porque nos permite capturar imágenes de nuestro entorno, a menudo terminan distorsionando la luz ligeramente de forma imprecisa lo cual  puede ofrecernos medidas inexactas en aplicaciones de visión por ordenador . No obstante  fácilmente podemos corregir esta distorsión calibrando la imagen de un objeto conocido ( por ejemplo  tablero de ajedrez asimétrico,)y generando un modelo de distorsión que represente las distorsiones de la lente.

    La cámara utilizada en la prueba video  fue utilizada para tomar 20 imágenes de un tablero de ajedrez, que fueron utilizados para generar el modelo de distorsión.El autor comenzó por convertir la imagen a escala de grises y  entonces aplico la  función cv2.findChessboardCorners .Como sabemos que este tablero de ajedrez es un objeto tridimensional  con líneas rectas exclusivamente podemos aplicar algunas transformaciones a las esquinas detectadas para alinearlos correctamente utilizando cv2.CalibrateCamera()  obteniendo así  los coeficientes de distorsión y la matriz de cámara  de modo que  así  ya estaba calibrada la cámara

    Realizado el proceso anterior se puede utilizar  cv2.undistort()  para corregir el resto de sus datos de entrada.

    Como demostración en la imagen se puede ver la diferencia entre la imagen original del tablero de ajedrez y la imagen corregida a continuación:

    ajedrez

    Aquí está el código exacto que usó el autor para esto:

    def undistort_img():
        # Prepare object points 0,0,0 ... 8,5,0
        obj_pts = np.zeros((6*9,3), np.float32)
        obj_pts[:,:2] = np.mgrid[0:9, 0:6].T.reshape(-1,2)
        # Stores all object points & img points from all images
        objpoints = []
        imgpoints = []
        # Get directory for all calibration images
        images = glob.glob('camera_cal/*.jpg')
        for indx, fname in enumerate(images):
            img = cv2.imread(fname)
            gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
            ret, corners = cv2.findChessboardCorners(gray, (9,6), None)
            if ret == True:
                objpoints.append(obj_pts)
                imgpoints.append(corners)
        # Test undistortion on img
        img_size = (img.shape[1], img.shape[0])
        # Calibrate camera
        ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, img_size, None,None)
        dst = cv2.undistort(img, mtx, dist, None, mtx)
        # Save camera calibration for later use
        dist_pickle = {}
        dist_pickle['mtx'] = mtx
        dist_pickle['dist'] = dist
        pickle.dump( dist_pickle, open('camera_cal/cal_pickle.p', 'wb') )
    def undistort(img, cal_dir='camera_cal/cal_pickle.p'):
        #cv2.imwrite('camera_cal/test_cal.jpg', dst)
        with open(cal_dir, mode='rb') as f:
            file = pickle.load(f)    mtx = file['mtx']
        dist = file['dist']
        dst = cv2.undistort(img, mtx, dist, None, mtx)
        return dst
    undistort_img()
    img = cv2.imread('camera_cal/calibration1.jpg')
    dst = undistort(img) # Undistorted image
    

    Y ahora podemos ver  la corrección de distorsión aplicada a una imagen de la carretera.

    imagencorregida.png

    Solo se puede notar  diferencias leves, pero esto como veremos puede tener un impacto enorme en el tratamiento de la imagen.

    Deformación de la perspectiva

    La detección de carriles con trazados curvas  en espacios de la cámara espacio no es uan tarea  fácil asi que la idea es  conseguir una vista de pájaro de las pistas , lo cual se e puede hacer aplicando una transformación de perspectiva en la imagen. Aquí es lo que parece:

    carril

    Como vemos nos es nada espectacular debido a que el carril esta sobre una superficie plana en 2D, asi  que podemos encajar un polinomio que puede representar fielmente el carril en el espacio del carril

    Puede aplicar estas transformaciones a cualquier imagen usando la función cv2.getPerspectiveTransform()  para obtener la matriz de transformación, y  aplicar la función cv2.warpPerspective() a una imagen.

    Aquí está el código que uso el autor para ello:

    def perspective_warp(img,
                         dst_size=(1280,720),
                         src=np.float32([(0.43,0.65),(0.58,0.65),(0.1,1),(1,1)]),
                         dst=np.float32([(0,0), (1, 0), (0,1), (1,1)])):
        img_size = np.float32([(img.shape[1],img.shape[0])])
        src = src* img_size
        # For destination points, I'm arbitrarily choosing some points to be
        # a nice fit for displaying our warped result
        # again, not exact, but close enough for our purposes
        dst = dst * np.float32(dst_size)
        # Given src and dst points, calculate the perspective transform matrix
        M = cv2.getPerspectiveTransform(src, dst)
        # Warp the image using OpenCV warpPerspective()
        warped = cv2.warpPerspective(img, M, dst_size)
        return warped
    

    Filtro de Sobel

    En otras versiones una opción era filtrar las líneas de carril con el color peor sin embargo, esto no siempre es la mejor opción. Si el camino utiliza luz de color concreta en lugar de asfalto, el camino pasa fácilmente a través del filtro de color, y esta la percibirá como una línea de carril blanco, pero  eso no es correcto.

    En su lugar, podemos utilizar un método similar al detector de borde, esta vez para filtrar hacia fuera de la carretera. Las líneas de carril suelen tienen un alto contraste en  la carretera, por lo que podemos utilizar esta peculiaridad para nuestro beneficio. La funcion detector de borde  Canny utilizado anteriormente  hace uso de Operador de Sobel , para obtener el gradiente de una función de la imagen. La documentación de OpenCV tiene una fantástica explicación sobre cómo funciona asi que utilizaremos esto para detectar zonas de alto contraste para las marcas de carril filtro e ignorar el resto del camino .

    Todavía utilizaremos el espacio de color HLS nuevamente, esta vez para detectar cambios en la saturación y la ligereza. Los operadores de sobel se aplican a estos dos canales, y extraemos el gradiente con respecto al eje x y añadiremos los píxeles que pasan nuestro umbral de degradado a una matriz binaria que representa a los píxeles de nuestra imagen. Aquí está como se ve en cámara espacio y lane

    blancoynegro.PNG:

    Tenga en cuenta que las partes de la imagen que estaban más lejos de la cámara no conserven su calidad muy bien. Debido a las limitaciones de resolución de la cámara, datos de los objetos más lejos son muy borrosos y ruidosos  pero no necesitamos concentrarnos en la imagen, para que podamos utilizar sólo una parte de esta.

    Detección de picos del histograma

    Ahora aplicaremos un algoritmo especial llamado Sliding Window Algorithm ( algo asi como algoritmo  Desplazamiento de Ventana )para detectar nuestras líneas de carril. Sin embargo, antes de que lo podemos aplicar, debemos determinar un buen punto de partida para el algoritmo pues este funciona bien si comienza en un lugar donde haya píxeles de lineas  presentes, pero ¿cómo podemos detectar la ubicación de estos píxeles de carril en primer lugar?

    Estará recibiendo un histograma de la imagen con respecto al eje X. Cada parte del histograma siguiente muestra píxeles blancos en cada columna de la imagen. Entonces tomamos los picos más altos de cada lado de la imagen, uno para cada línea de carril y tendríamos resulto esta parte

    Aquí vemos como  el histograma parece, al lado de la imagen binaria:

    histograma

    Búsqueda de ventana deslizante

    Ahora  necesitamos  utilizar el algoritmo de ventana deslizante para distinguir entre los límites del carril de la izquierda y derecha para que podemos caber dos curvas diferentes que representan los límites del carril.

    El algoritmo sí mismo es muy simple. A partir de la posición inicial, la primera ventana mide cuántos píxeles se encuentran dentro de la ventana. Si la cantidad de píxeles alcanza un cierto umbral, desplaza la siguiente ventana a la posición lateral media de los píxeles detectados. Si no se detectan los suficientes píxeles, comienza la siguiente ventana en la misma posición lateral.

    Esto continúa hasta que las ventanas alcanzan el otro borde de la imagen .Asimismo los píxeles que corresponden a las ventanas reciben un marcador.

    En las imágenes de abajo, los píxeles marcados azules representan el carril derecho, y los rojos representan la izquierda:

    lineas

    Ajuste de curvas

    El resto del proyecto es ya mas fácil. Aplicamos la regresión polinomial para los pixeles rojos y azules individualmente usando np.polyfit() , y entonces el detector se hace  sobre todo

    Esto es lo que parecen las curvas:

     

    Superposición de carril detectado

    Ya estamos en la parte final del sistema de detección: la interfaz de usuario. Simplemente creamos una superposición que llena en la parte detectada del carril, y luego  finalmente lo aplicamos al vídeo.

    Este es el resultado final

     

     

    !Sin duda un resultado  realmente espectacular que puede servir de partida para proyectos  mas ambiciosos!

    Mas información en www.hackster.io

     

    Conozca la potente herramienta gratuita de edición de estilos con Edge


    Gracias  a que Microsoft se asoció con BrowserStack para obtener pruebas en vivo y automatizadas en Microsoft Edge  ,este  navegador  introduce nuevas mejoras en las herramientas de desarrollo de F12, incluyendo algunas de las funciones más solicitadas de UserVoice. Además las nuevas herramientas se construyen en TypeScript y siempre se ejecutan en cualquier instalación de Edge, por lo que no se requiere  instalar nada .OP Otro punto interesante es que  la documentación de las herramientas para desarrolladores de F12 está totalmente disponible en GitHub por lo que los documentos no sólo serán influenciados por sus comentarios, sino que están invitados a contribuir y ayudar a dar forma a la documentación.

    Las  hojas de estilo en cascada (o CSS, siglas en inglés de Cascading Stylesheets) son un lenguaje de diseño gráfico para definir y crear la presentación de un documento estructurado escrito en un lenguaje de marcado como puede ser html  por lo que es muy usado para establecer el diseño visual de las páginas web, e interfaces de usuario escritas en HTML o XHTML;o incluso a cualquier documento XML, incluyendo XHTML, SVG, XUL, RSS, etc
    Junto con HTML y JavaScript, CSS es una tecnología usada por muchos sitios web para crear páginas visualmente atractivas, interfaces de usuario para aplicaciones web, y GUIs para muchas aplicaciones móviles (como Firefox OS) por lo qeu es muy interesante disponer de alguna herramienta que nos ayude a gestionar,mejorar o modificar las hojas de estilo.

    En este contexto Microsoft Edge dispone de siete herramientas distintas que  permiten ver,editar inspeccionar  y alterar tanto código css,html como javascript   cada una con su propia pestaña en la interfaz de las herramientas F12  de modo que vamos  a ver  una imagen de cada herramienta y un resumen rápido de lo que hace, seguido por las listas de sus principales características y tareas típicas.

    La herramienta DOM Explorer (CTRL + 1)

    La herramienta DOM Explorer muestra la estructura de una página web tal como está siendo representada en el navegador , haciendo posible editar su HTML y estilos en una página en vivo ( obviamente no se cambiara nada en el servidor sólo en la pagina visualizada para ver como quedaría.

    Puede hacerlo por tanto  sin tener que editar y volver a cargar sus fuentes, para que pueda solucionar rápidamente problemas de visualización o experimentar con nuevas ideas o mejoras .

    Explorador DOM de bordes

    Las funciones de la herramienta DOM Explorer incluyen:

    • Sugerencias de autocompletado de IntelliSense al editar atributos HTML y propiedades CSS.
    • Arrastre los nodos DOM para reorganizarlos y editar nodos como HTML.
    • Apoyo para CSS compilado sourcemaps.

    Desarrollo y tareas de depuración que hace más fácil:

    • Determinar por qué un elemento no se muestra en el lugar correcto o tamaño correcto.
    • Determinar qué estilos CSS y consultas de medios se están aplicando a un elemento.
    • Prueba de una serie de colores diferentes para un elemento para ver que se ve mejor.

    La herramienta Consola (CTRL + 2)

    Herramienta de consola de borde

    La herramienta Consola proporciona una forma de interactuar con el código en ejecución:

    • Cambie los valores de las variables o inyecte código en un sitio en vivo con la línea de comandos de la consola.
    • Utilice la API de depuración de consola para enviar información de depuración.
    • Consulte los mensajes de error del navegador y los códigos de estado.

    Las características de la herramienta Consola incluyen:

    • Abra la consola en la parte inferior de cualquier otra herramienta con el botón de consola o CTRL + ` .
    • Consola Depuración de métodos API para sincronización, recuento, agrupación y más.
    • Las sugerencias de autocompletado de IntelliSense en la línea de comandos aceleran la entrada, reducen errores tipográficos y le ayudan a descubrir aspectos de las API de JavaScript.

    Desarrollo y tareas de depuración que hace más fácil:

    • Segmentación de iFrames específicos.
    • Ejecución de código de tiempo hasta la instrucción con nuevos métodos de temporización.
    • Cambiar el valor de una variable en el código en ejecución sin recargar.

     

    La herramienta Depurador (CTRL + 3)

    Herramienta de depurador de bordes

    Puede utilizar la herramienta Depurador para examinar lo que está haciendo su código, cuando lo está haciendo y cómo lo está haciendo. Detenga el código en la mitad de la ejecución, pase a través de él línea por línea y observe el estado de las variables y los objetos en cada paso.

    Las características de la herramienta Depurador incluyen:

    • No se actualiza la depuración. Establezca sus puntos de interrupción y vaya sin recargar y perder estado.
    • Interfaz de documentos con pestañas para facilitar la gestión de múltiples secuencias de comandos.
    • Puntos de interrupción en código estándar, respuestas de XHR y eventos.

    Desarrollo y tareas de depuración que hace más fácil:

    • Ver lo que llevó a una llamada de función utilizando la pila de llamadas.
    • Hacer que el código comprimido o minificado sea más legible usando mapas de origen.
    • Supervisión de la creación y ejecución de los servidores web.

     

    La herramienta de red (CTRL + 4)

    Herramienta de red de bordes

    La herramienta de red le ofrece los detalles finos de las solicitudes de red relacionadas con la carga y operación de sus páginas web.

    Desarrollo y tareas de depuración que hace más fácil:

    • Visualización de la cantidad de ancho de banda que consume su página en los recursos.
    • Depuración de solicitudes AJAX mediante la visualización de los encabezados y los órganos de solicitud y respuesta.
    • Identificar las solicitudes de red que ralentizan la carga de sus páginas web.

     

    La herramienta de rendimiento (CTRL + 5)

    Herramienta de rendimiento de borde

    La herramienta Rendimiento le ayuda a buscar lo que está sucediendo cuando su página se ralentiza. Usarlo para perfilar puntos específicos de lentitud muestra las operaciones que los están causando. En Microsoft Edge, la herramienta Rendimiento combina las herramientas anteriores de Capacidad de respuesta y Profiler deUI para crear una vista de extremo a extremo de su rendimiento de secuencias de comandos y pintura.

    Algunas características interesantes son:

    • Identificar las diferentes fuentes de actividad de la CPU que causan lentitud de la UI.
    • Conozca la velocidad de fotogramas de su página web y la cantidad de repintados y reflujos que cuestan.
    • Establecimiento de etiquetas en la línea de tiempo para aislar escenarios de usuario.
    • Desarrollo y tareas de depuración que hace más fácil:  Optimizaciones de código de prueba y Acelerar sus páginas web.

    La herramienta de memoria (CTRL + 6)

    Herramienta Edge Memory

    Cuando una página web comienza rápido y se ralentiza después de usarlo durante un tiempo, el culpable es generalmente una pérdida de memoria. La herramienta de memoria rastrea el uso de la memoria de su página web, ayudándole a identificar dónde crece el uso de la memoria, por qué está creciendo y cómo solucionarlo.

    Algunas características interesantes son:

    • Una línea de tiempo para ver los cambios progresivos en el uso de la memoria.
    • Instantáneas para examinar los detalles del uso de memoria en puntos específicos.
    • Comparaciones de instantáneas para identificar puntos específicos de crecimiento.

    Desarrollo y tareas de depuración que hace más fácil:

    • Identificar nodos DOM desprendidos.
    • Identificar los puntos de crecimiento de la memoria.
    • Medir el uso de memoria de objetos.

    Herramienta de emulación de bordes

    La herramienta de emulación le ayuda a probar cómo se ejecutan las páginas web en diferentes tamaños de pantalla y características de hardware y cómo responden a las diferentes cadenas de agente de usuario.

    Algunas características interesantes son:

    • Emulando diferentes tamaños de pantalla y resoluciones.
    • Simulación GPS.

    Desarrollo y tareas de depuración que hace más fácil:

    • Prueba de diseños sensibles en múltiples tipos de pantallas.
    • Prueba de las funciones de detección de ubicación para un sitio móvil.

     

     

     

    Fuente https://docs.microsoft.com/

    Necesitamos mas mujeres hackers


    ¿Por qué es tan difícil encontrar productos de superheroínas? En una charla de TED , el doctor , Christopher Bell, especializado en el estudio de la cultura popular   de los medios centrándose en las formas en que la raza, la clase y el género como se cruzan en diferentes formas de medios ,  desde su condición de  padre de una hija obsesionada con Star Wars, aborda la falta alarmante de superheroínas en los juguetes y productos comercializados para niños, y todo lo que eso significa para la forma en que les mostramos el mundo .

    Hacker  en el mundo  hispano-hablante desgraciadamente aun conlleva una faceta peyorativa muy habitualmente  confundida  con personas que utilizan la tecnología para hacer el mal y lucrarse  en su provecho aprovechando vulnerabilidades o  agujeros de seguridad tal y como hacen los ciberdelicientes  (como es el caso de los script kiddies, crackers, piratas informáticos, etc)

    Nada mas lejos de la realidad  pues para los anglosajones  un  hacker  es un  individuo que apoya procesos de apropiación social o comunitaria de las tecnologías poniendo  a disposición del dominio público el manejo técnico y destrezas alcanzadas personal o grupalmente. Ademas crea nuevos sistemas, herramientas y aplicaciones técnicas y tecnológicas para ponerlas a disposición del dominio público  y realiza  acciones de hacktivismo tecnológico con el fin de liberar espacios y defender el conocimiento común y abierto.

    Pero, ¿por qué es tan difícil encontrar referentes femeninos en el mundo de la tecnología  y en particular en el mundo del hacking?  Quizás tenga relación con  varios estudios, donde afirman que sobre  la edad de 11 años muchas niñas se sienten atraídas por la tecnología, las ciencias y las matemáticas pero lamentablemente  muchas  pierden el interés al cumplir los 15 años y desvían su interés profesional  hacia otras áreas del saber.

    Ante este reto, desde Telefónica, a través de la unidad de Chief Data Office (CDO) liderada por el famoso hacker  Chema Alonso, que integra Aura -Inteligencia Cognitiva-, ElevenPaths -Ciberseguridad- y LUCA -Big Data-, reflexionan  sobre esta tendencia que parece repetirse en diversos ámbitos y que se han  propuesto “hackear”  apostando por la diversidad.

    El video la verdad es que es muy emotivo y merece la pena verlo

    Modernamente el movimiento hacker  o  el hacktivismo (fusión de hack y activismo) se considera el uso de técnicas en beneficio de fines sociales, ecológicos, humanitarios o de cualquier otra índole ,con repercusión o tendente a la defensa de los derechos humanos.

    A raiz de esta tendencia aparecen precisamente   los famosos espacios  hacklab o hackerspace y los hackmeeting como eventos proclives  de diálogo de hackers.

    Asimismo se considera  hacktivismo  la liberación de conocimiento (como podría  ser la misma Wikipedia o incluso muchos blogs tecnológicos) ,la cual trasciende incluso a la propia   información clasificada  que se considera debe estar  a disposición de la sociedad ( WikiLeaks o las filtraciones de Snowden).

    Por tanto, el fenómeno hacker  tiene un importante componente de aperturismo y liberación de conocimientos e información que, a través del activismo de estos especialistas  o expertos (mujeres o hombres da igual ) ,los cuales  en general actualmente son ingenieros de diferentes disciplinas  , benefician con su actividad a la sociedad en general ,  por lo que en aras de  la diversidad , también  deben promoverse la inclusión de las mujeres en semejante colectivo para el bien de la humanidad.

    Comparativa telegram -whatsapp


    WhatsApp y telegram son esencialmente servicios muy similares en la base, ya que permiten enviar texto y contenido multimedia  con facilidad. Sin embargo, hay un montón de diferencias cuando se trata de otras características. Por lo tanto, vamos a hacer una comparación detallada para obtener una idea más clara de la diferencia entre Telegram y WhatsApp. 

    Si hablamos de mensajería  sin duda el rey es WhatsApp, programado por  Jan Koum, un ucraniano que llegó a Silicon Valley huyendo del comunismo de su país,  y del estadounidense Brian Acton,los cuales se conocieron en Yahoo, donde trabajaron juntos una temporada hasta que  2009  abandonaron la compañía ,crearon su propia empresa y en 2010 lanzaron WhatsApp.

     

     

     

    WhatsApp Messenger es sin duda el gigante en el espacio mensajería instantánea ,pero si hay un competidor que viene cerca  es Telegram, el cual  ha ido ganando poco a poco  base de usuarios, hasta llegar a los 100 millones usuarios activos mensuales actualmente. Aunque es evidente de Whatasapp su  superioridad numérica  , podríamos ver el principio del fin, debido a que  no son pocos los que se quejan de sus continuos problemas de seguridad o de las caídas de sus servidores 

    Telegram vio la luz en 2013 como un proyecto sin ánimo de lucro. Fue creado por los hermanos rusos Nikolai y Pavel Durov, como un proyecto cuyo código es completamente abierto (lo cual permite que se descubran fallos de seguridad y que la comunidad haga aportaciones) ,  que pone un énfasis especial en la seguridad y la privacidad como respuesta a los proyectos de vigilancia electrónica de Estados Unidos y Rusia . Ademas no pone limite en el tipo o tamaño de ficheros a enviar , se puede usar en varios dispositivos al mismo tiempo ,  e incluye  los chats secretos, que se eliminan al cabo de un tiempo y es imposible reenviar lo que se diga en ellos.

    En cuanto a facilidad de uso no hay ningún ganador claro aquí, pues  WhatsApp y telegram tanto realizan admiráblemente bien, aunque Telegram puede ser a veces más rápido en el envío de un mensaje debido a su característica de sincronización con  la nube,  pero al final son aplicaciones similares en cuanto a uso . Sin embargo, los gestos de telegram y stickers  basados en interfaz de usuario hacen  las cosas más rápidas y divertidas.

    Veamos una comparación usando deferentes criterios  entre ambas plataformas:

     

    Base de usuarios

    ++Telegram: no para de crecer llegando al alcanzar el hito de 100 millones de telegram ,pero todavía les falta mucho para llegar a la cifra del billón . Esta es la razón principal de que  no haya mas usuarios del telegram,  porque aunque nos encante Telegram, no tenemos suficientes amigos para conversar  en la plataforma base. 

    ++++Whatsapp :Lo que realmente hace una gran diferencia cuando se trata de la experiencia del usuario final es  la base de usuarios. No hay ningún punto en adivinar quién tiene la mayor base de usuarios pues WhatsApp actualmente cuenta con más de 1 billón de usuarios activos mensuales, lo cual lo hace el rey indiscutible  y el claro ganador en esta categoría.. El popular servicio propiedad de Facebook es el elegido por el 98,1% de los usuarios, lo cual es facil de ver en la calle !todo el mundo usa WhatsApp! 

    Seguridad

    ++++Telegram: Es el gran ganador en cuanto  se refiere a seguridad  basándose en protocolo de MTP móvil y soportando  el cifrado end-to-end con “Chats secretos”. También tiene la característica de autodestrucción así como  permitir notificaciones a los usuarios cuando una captura de pantalla se toma por el destinatario. Además, es código abierto, para que cualquiera pueda examinar código fuente de la aplicación, API o protocolos para encontrar algún defecto de seguridad. De hecho, telegram una vez ofreció $200.000 para quien pudiera hackear su protocolo cifrado.Todos los datos, sin importar su tipo, son cifrados de la misma manera, ya sean textos, archivos multimedia o documentos. Telegram está encriptado desde sus primeras versiones y permite la creación de canales secretos con aún mayor privacidad en los mensajes que se autodestruyen.

    +++WhatsApp: Nunca ha destacado cuando se trata de seguridad, pero las cosas han cambiado con la última versión de la aplicación con el cifrado   motivadas   por las  críticas a su deficiente seguridad, incluyendo la aplicación el cifrado de extremo a extremo, un sistema que asegura que solo el emisor y el receptor puedan leer lo que se envía lo que significa que ni siquiera el WhatsApp puede leer sus mensajes. El cifrado de extremo a extremo siempre está activado para todos los usuarios que estén usando las últimas versiones de la aplicación. No existe forma para desactivar o apagar el cifrado de extremo a extremo cifrándose  tanto las conversaciones como los datos 

    PRIVACIDAD

    +++++Telegram: Entre sus funciones estrella están los chats secretos, que usan un cifrado cliente-cliente, sin pasar por un servidor intermedio. En esos chats, los mensajes que se eliminan lo hacen tanto para emisor como para receptor. Además, existe la opción de autodestrucción,donde a los mensajes e se añade un contador que, al llegar a cero, elimina el mensaje en ambos dispositivos. Incluso se avisa al interlocutor cuando se detecta que el otro ha hecho una captura de pantalla.

    Por otro lado, en los grupos de Telegram solo se ven el nombre de usuario y la fotografía de los participantes, pero no su número de teléfono. Cada usuario puede identificar su propio número con un ‘alias’, de la misma manera que se realiza con una cuenta de usuario:así, el receptor podrá buscar e identificar por el ‘alias’, el nombre del receptor y su imagen de perfil, sin necesidad de tener agregado en sus contactos ni revelar su número.Eso sí, una de las opciones de Telegram es las de crear un alias público. A través de ese alias, cualquiera puede encontrar a un usuario y escribirle aunque no tenga su número, por lo que recomiendan no usar esa opción si se quieren evitar inconvenientes de ese tipo.

    “Chat secreto”  es su gran baza ,pues permite tener una conversación con end-to-end cifrado entre otras opciones de seguridad. Hay notificaciones para imágenes tomadas y no puede reenviar un mensaje de una conversación secreta. También puede establecer un temporizador de autodestrucción, que se destruya sus mensajes después de un tiempo especificado. Si usted está buscando una experiencia de mensajería segura, chat secreto lo  tiene bien cubierto.

     

    —WhatsApp: Las mayores críticas a la app suelen estar relacionadas con la privacidad. Por ejemplo, todo el mundo puede ver los números de teléfono de las personas incluidas en un grupo, aunque estas no estén ya en nuestra agenda. Para mejorar la privacidad, WhatsApp permite ocultar a otros usuarios la hora de la última conexión, la foto de perfil y el estado. También se pueden desactivar las confirmaciones de lectura de los mensajes recibidos, pero entonces tampoco se pueden ver las confirmaciones de lectura de los mensajes enviados.

     

     

    ARCHiVOS

    ++++Telegram: Entre su muchas ventajas, Telegram permite añadir archivos  de todo tipo, es decir  no se limita a  fotos y vídeos , no teniendo ningún tipo de límite , con un máximo de 1,5 GB cada uno. La app permite compartir un número ilimitado de fotos, vídeos y archivos de infinidad de formatos (doc, zip, mp3, etc.) de hasta 1,5 GB. Además, si no se desea almacenar los datos en el dispositivo, también se pueden guardar en la nube.

    — WhatsApp: La aplicación ofrece algunas restricciones respecto al tipo y tamaño de los archivos que se pueden enviar. El tamaño máximo de los vídeos que se pueden enviar es de 16 MB (unos 90 segundos en la mayoría de los casos). Los vídeos más pesados hay que cortarlos antes de que puedan enviarse. Hace solo unos meses, WhatsApp incluyo por fin la posibilidad de enviar documentos, aunque de momento solo en formato PDF. WhatsApp incluido recientemente la capacidad de enviar archivos PDF pero no es rival para capacidades de intercambio de archivos respecto a Telegram pues usted puede casi cualquier tipo de archivos incluyendo documentos, zip, PDF etc. en telegram junto con los archivos de los medios de comunicación habituales. También, puede enviar archivos de hasta 1,5 GB, a diferencia de WhatsApp, donde usted puede compartir archivos hasta un escaso 160 MB.

     

     

    GRUPOS y CANALES

    +++Telegram: Ofrece grupos, supergrupos y canales , veamos sus diferencias:

    • Los canales son cuentas de usuario separadas que permiten la difusión de contenido. Consiste en publicar material, similar a un blog, de forma lineal con un contador de visitas. Pueden ser administrados por uno o más miembros y escoger una audiencia libre o por invitación Los canales son como los chats públicos que ahora añadirá WhatsApp y pueden tener una cantidad ilimitada de miembros.
    • Los grupos pueden tener hasta 200 miembros y, por defecto, todos pueden añadir a otras personas  permitiendo comunicarse en círculos de hasta 5000 usuarios con administradores y respuesta de mensajes. Estos pueden mejorarse con los supergrupos, que aumentaría el límite inicial de 200 contactos con el historial completo, notificaciones desactivadas, eliminación y anclaje de mensajes y otras funciones.
    • Los supergrupos pueden tener hasta 5000 miembros y tienen un historial único, donde los mensajes borrados desaparecen para todos los integrantes. . Los canales son esencialmente difusión a un público más amplio y que puede contener a miembros ilimitados. Cuando usted envía un mensaje a través de un canal, el mensaje se envía a través del nombre de los canales. Un canal público tiene su propio nombre de usuario y puede ser buscado y se unió a cualquier usuario de telegrama. Un usuario puede enviar incluso silenciar mensajes en canales junto con la capacidad de editar enviado mensajes.

    –WhatsApp: Actualmente, permite  chats de grupo de  hasta 256 personas a la vez. Cada grupo tiene al menos un administrador y solo los administradores pueden eliminar y añadir participantes al grupo. Los administradores también pueden añadir más administradores al grupo. Además, WhatsApp acaba de lanzar la versión beta de los grupos públicos, chats a los que puede entrar cualquier usuario a través de un enlace, aunque no esté entre los contactos de nuestra agenda.

     

     

    Multidispositivo:

     

    ++++Telegram: Al ser un servicio basado en la nube con sincronización en tiempo real, Telegram permite acceder a los mensajes desde diferentes dispositivos a la vez, incluyendo tabletas y ordenadores.

    Gracias a su función de sincronización basada en cloud, telegram soporta sesiones multi-device, para que pueda empezar a chatear en un dispositivo y continuar en otro., asi los mensajes también se sincronizan entre los dispositivos en tiempo real, de modo que  es rápido y eficiente. Incluso puede comprobar sus sesiones activas en la aplicación para conocer los dispositivos que su cuenta de telegram pueden  ser activas., telegram tiene clientes de escritorio para Windows, OS X y Linux incluso.

    Por otra parte, también telegram cuenta con  una aplicación web disponible en la Chrome Web Store y  por  su naturaleza de código abierto  existen aplicaciones de terceros de telegrama . Por tanto , telegram gana aquí debido al hecho que ofrece aplicaciones independientes para todas las plataformas, a diferencia de WhatsApp, que requiere la aplicación móvil a ejecutar para que los clientes de escritorio y web trabajar.

    –Whatsapp: No hace mucho la compañía estrenó su servicio para utilizar WhatsApp a través de una página web habilitada para ello((https://web.whatsapp.com/). Los mensajes que se envían y reciben en el ordenador y en el teléfono están sincronizados y pueden verse en ambos dispositivos pero hay un problema : deben estar conectados ambos equipos  a la misma  red  .

    WhatsApp  por tanto está disponible en dispositivos móviles, web y recientemente comenzaron a ofrecer a clientes de escritorio para Mac y Windows pero con la peculiaridad  de necesitar tener el terminal encendido para que sea posible su acceso desde el mismo escritorio . 

    LLamadas

    – -Telegram : dicen que prefieren especializarse en el envío de mensajes y archivos para hacerlo “mejor que otros”. Por el momento, Telegram pues no tiene intención de incluir llamadas ni videollamadas-

    +++WhatsApp :recientemente lanzó su característica de llamadas para hacer la vida más difícil para los operadores. Puede parecer algo bueno , pero muchos usuarios olvidan que  hace uso de sus datos o ancho de banda WiFi para llamar a cualquier contacto disponibles en WhatsApp por lo que las llamadas sólo  funcionan si se tiene una conexión decente a internet. Por otra parte, también tiene un modo de uso de datos bajo  para que usted ahorre ancho de banda. También ha comenzado a probar ya los servicios de videollamada, de momento solo disponibles en prueba para algunos usuarios.

     

     

    Chats

     ++++Telegram : gracias  a los  Hashtags se pueden  identificar mensajes, hacer menciones a usuarios y dar respuestas a mensajes concretos, que facilita enormemente la lectura y comprensión de los mensajes, especialmente en grupos de varios usuarios.

    A diferencia de WhatsApp, telegram apoya las etiquetas engomadas. La aplicación  permite crear sus propios adhesivos mediante el bot @Stickers . Usted puede ver y elegir entre diferentes etiquetas engomadas disponibles a través de sitios web de terceros, Reddit hilos o incluso una aplicación de terceros.

    Si con las menciones y los hashtags no tiene suficiente, la búsqueda en Telegram permite encontrar todo tipo de archivos y mensajes

    La capacidad de ocultar el último visto en telegram es muy similar a la aplicación de WhatsApp pero hay un pequeño giro pues permite que  esconda  por última vez para contactos particulares. Así, en lugar de ocultar su pasado visto por todo el mundo, usted puede simplemente ocultarla de un único contacto o más. También, puede bloquear  chats  con la característica de contraseña, para que nadie lea sus mensajes personales.

    ¿Alguna vez ha querido editar el mensaje que acabo de enviar? Bueno, adiós oferta a errores tipográficos, como el telegrama ahora permite que editar mensajes enviaron. Usted puede simplemente presione mantenga presionado un mensaje que ha enviado y golpear el icono de “Editar” para empezar a editar el texto. Los mensajes editados tendrá un banner editado en ellos.

    Además,  permite mencionar personas en grupos, por lo que recibirá una notificación si alguien te menciona en un grupo incluso si han silenciado ese grupo.

     

    —WhatsApp  ofrece detallada información cuando se trata de mensajes como recibos de lectura, tiempo cuando leyó un mensaje y mucho más. La aplicación muestra las garrapatas doble cuando lse tiene pendientes  un mensaje en el dispositivo del destinatario y se vuelve azul cuando se lee. El messenger también le permite comprobar el tiempo exacto cuando un mensaje fue leído. Aunque telegram incluye leer recibos con doble garrapatas, carece de otras características mencionadas.

    Usted puede poner mensajes de estado en su perfil en WhatsApp, que puede ser visto por cualquier persona en su lista de contactos. Estos mensajes vienen en útiles cuando desea transmitir algo a tu lista de contactos completa. Lamentablemente, telegram carece de esta característica muy fresca.

    WhatsApp ha presentado recientemente la capacidad de formato de textos, que es una característica muy interesante. Ahora usted puede formatear textos en negrita (* texto ), cursiva (text), negrita y cursiva ( text *) y huelga (~ texto ~).

    WhatsApp ha tenido la capacidad de copia de seguridad de los chast desde siempre, pero recientemente mejorado la función incorporando integración de Google Drive. Pueden respaldo tus chats a la cuenta de Google Drive de su elección, para que incluso cuando usted cambia su teléfono, usted puede restaurar sus chats mayores. También hay capacidad correo electrónico chats, chats de archivo o un mensaje específico, que viene muy bien a veces la estrella.

     

     

    Bots de telegram

    +++++Telegram : Bots son básicamente telegrama cuentas creadas para realizar determinadas tareas. Cada bot viene con su propio conjunto de comandos y características. Por ejemplo, el @Pollbot puede utilizarse para crear encuestas en grupos, @Storebot resulta útil si desea buscar más bots frescos. Hay toneladas de robots diferentes y útiles en bot de telegram  almacenadas o puede buscar los robots directamente desde la aplicación también.

    –Whastsapp: por el  momento no esta previsto

     

     

     

     

    Resumidamente pues para no alargarnos mas  Telegram es más rico en faclidadades pero WhatsApp tiene más usuarios. Hay  muchos mas criterios para decidirnos por uno u otro sistema de mensajería ,pero ya de forma concentradas estos son los puntos fuertes  y débiles de ambos sistemas

    Si pensamos en Whataspap estos son sus puntos :

    Pros:

    • Base de datos de usuarios
    • Llamadas
    • Chats de copia de seguridad
    • Base de usuarios masiva
    • Extremo a extremo cifrado en todas partes

    Contras:

    • Uso compartido de archivos limitada
    • No tan rico como telegram

    Y sin pensamos en Telegram son estos:

    Pros:

    • En general más rica
    • Bots y compartir archivos grandes
    • Mejor compatibilidad de plataforma

    Contras:

    • No llamadas de soporte o capacidad de copia de seguridad charlas
    • carece de base de usuarios

     

     

    En cuanto a características, Telegram gana por un margen leve, ya que trae algunas características únicas que sin duda marcan la diferencia cuando se trata de usabilidad.

    WhatsApp llamadas y copia de seguridad de chat para Google Drive son grandes características pero si se puede vivir sin ellos,  Telegram es claramente la opción superior con sus charlas secretas, soporte para múltiples dispositivos junto con toneladas de características pequeñas pero singulares (jugador de medios de comunicación interna, editor de imágenes). Sin embargo, WhatsApp lentamente añade un número de características interesantes y ya esta en   beta las pruebas de  llamadas de video y que sin duda podría hacer mejor que  telegram ( esperemos  telegram también sube la apuesta).