Soporte multilenguaje en Android Studio


Android se ejecutará en muchos dispositivos en muchas regiones. Para llegar a la mayoría de los usuarios, su aplicación debe manejar texto, archivos de audio, números, moneda y gráficos de manera apropiada a los locales donde se utilizará su aplicación.

 

En realidad al escribir una app ya se debe tener un conocimiento práctico de Java y estar familiarizado con la carga de recursos de Android, la declaración de elementos de la interfaz de usuario en XML, consideraciones de desarrollo como el ciclo de vida de la actividad y los principios generales de internacionalización y localización.

Es una buena práctica usar el marco de recursos de Android para separar los aspectos localizados de su aplicación tanto como sea posible de la funcionalidad básica de Java:

  • Puede poner la mayor parte o la totalidad del contenido de la interfaz de usuario de su aplicación en archivos de recursos, tal como se describe en este documento y en Proporcionar recursos .
  • El comportamiento de la interfaz de usuario, por otra parte, es impulsado por su código Java. Por ejemplo, si los usuarios introducen datos que deben formatearse o clasificarse de forma diferente dependiendo de la configuración regional, utilizarían Java para manejar los datos mediante programación. Este documento no cubre cómo localizar su código Java

Siempre es una buena práctica extraer strings de IU del código de tu app y conservarlas en un archivo externo. Android facilita esta tarea con un directorio de recursos en cada proyecto del sistema operativo.

Si creo su proyecto con herramientas del Android SDK (lea Cómo crear un proyecto en Android), las herramientas crean un directorio res/ en el nivel superior del proyecto. El directorio res/ contiene subdirectorios para varios tipos de recursos. También hay algunos archivos predeterminados, como res/values/strings.xml, que contiene los valores de tu string.

Agregar los valores de string para cada configuración regional en el archivo correspondiente.

En tiempo de ejecución, el sistema Android usa un conjunto correspondiente de recursos de string basado en la configuración regional actual del dispositivo del usuario.

Por ejemplo, a continuación se indican algunos archivos diferentes de recursos de strings para distintos idiomas.

Inglés (configuración regional predeterminada), /values/strings.xml:

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

    <string name="title">My Application
    <string name="hello_world">Hello World!

Español, /values-es/strings.xml:

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

    <string name="title">Mi Aplicación
    <string name="hello_world">Hola Mundo!

Nota: Puede usar un calificador de configuración regional (o cualquier calificador de configuración) en cualquier tipo de recurso, como lo harías si deseas proporcionar versiones localizadas del elemento de diseño de tu mapa de bits. Para más información, consulta Localización.

Usar los recursos de string

Puede hacer referencia a sus recursos de string en el código fuente y en otros archivos XML usando el nombre del recurso definido por el atributo namedel elemento .

En su código fuente, puede hacer referencia a un recurso de string con la sintaxis R.string.. Existen diferentes métodos disponibles que aceptan un recurso de string de esta manera.

Por ejemplo:

// Get a string resource from your app's Resources String hello = getResources().getString(R.string.hello_world); // Or supply a string resource to a method that requires a string TextView textView = new TextView(this); textView.setText(R.string.hello_world);

En otros archivos XML, puedes hacer referencia a un recurso de string con la sintaxis @string/ siempre que el atributo XML acepte un valor de string.

Por ejemplo:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />
Paso 1:

Crear un nuevo proyecto Hello World.

Paso 2:
Abrir el archivo main_activity.xml y personalice el texto como desee.

Utilice la pestaña Diseño y cree una nueva traducción haciendo clic en el botón globo.

Paso 3:

Ahora Android Studio genera un nuevo archivo xml en esta ruta de acceso: res / values / strings.

Resultados.

Por qué los recursos predeterminados son importantes

Siempre que la aplicación se ejecute en una configuración regional para la que no haya proporcionado texto específico de la configuración regional, Android cargará las cadenas res/values/strings.xml de res/values/strings.xml . Si este archivo predeterminado está ausente o si falta una cadena que su aplicación necesita, su aplicación no se ejecutará y mostrará un error. El ejemplo siguiente ilustra lo que puede suceder cuando el archivo de texto predeterminado está incompleto.

Ejemplo:

El código Java de una aplicación se refiere a sólo dos cadenas, text_a y text_b . Esta aplicación incluye un archivo de recursos localizados ( res/values-en/strings.xml ) que define text_a y text_b en inglés. Esta aplicación también incluye un archivo de recursos predeterminado ( res/values/strings.xml ) que incluye una definición para text_a , pero no para text_b :

Cuando esta aplicación se inicia en un dispositivo con la configuración regional en inglés, la aplicación puede ejecutarse sin ningún problema, porque res/values-en/strings.xml contiene ambas cadenas de texto res/values-en/strings.xml .
Sin embargo, el usuario verá un mensaje de error y un botón de cierre de la fuerza cuando esta aplicación se inicia en un dispositivo establecido en un idioma que no sea el inglés. La aplicación no se cargará.
Para evitar esta situación, asegúrese de que existe un archivo res/values/strings.xml y que define cada cadena res/values/strings.xml . La situación se aplica a todos los tipos de recursos, no sólo a las cadenas: Debe crear un conjunto de archivos de recursos predeterminados que contengan todos los recursos que su aplicación requiere: diseños, dibujos, animaciones, etc. Recursos .

 

 

Android de Como ENCUENTRA el recurso de coincidencia Óptima

Cuando  solicita  un recurso para el cual sea proporciona Alternativas, Android selecciona qué recurso alternativo ,como utilizar en Tiempo de ejecucion, según la configuración del dispositivo real. Para demostrar como Android selecciona un recurso alternativo, suponga que cadauino de los siguientes elementos de diseño contienen versiones diferentes de las mismas imágenes:

dibujable /
dibujable-es /
dibujable-fr-RCA /
dibujable-en-puerto /
dibujable-en-NoTouch-12key /
dibujable-puerto-LDPI /
dibujable-puerto-NoTouch-12key /

Y suponga que la configuracion del dispositivo es la siguiente:

Configuracion regional = en-GB
Orientación de la Pantalla = port
densidad de píxeles de la Pantalla = hdpi
tipo de pantalla táctil = notouch
director Método de entrada de texto =12key

Al comparar la configuracion del Dispositivo con los Recursos Alternativos Disponibles, Android Selecciona Elementos de Diseño de drawable-en-port.

Para Decidir Qué Recursos Como utilizar, El Sistema se basa en la siguiente lógica:

Figura 2: Diagrama de Flujo de la forma en la cual sea ENCUENTRA Android el recurso de coincidencia Óptima.

  1. Eliminar os Archivos de recursos que se contradicen con la configuración del Dispositivo.El Directorio drawable-fr-rCA/se elimina porque se contradice con la configuración regional en-GB.
    dibujable /
    dibujable-es /
    dibujable-fr-RCA /
    dibujable-en-puerto /
    dibujable-en-NoTouch-12key /
    dibujable-puerto-LDPI /
    dibujable-puerto-NoTouch-12key /
    

    Excepción: La densidad de píxeles de la Pantalla es el unico calificador Que No se Elimina DEBIDO A una contradicción. AUNQUE la densidad de la Pantalla del Dispositivo es IPAP, drawable-port-ldpi/no se Elimina Porque TODAS LAS densidades de Pantalla se consideran Como una coincidencia En Este punto.

  2. Elegir el (Próximo) calificador de alcalde precedencia de la Lista ( tabla 2 ). (Comenzar con MCC y continuar en forma descendente).
  3. ¿Alguno de los Directorios de recursos INCLUYE Este calificador?
    • La Respuesta Si es que no, volver al paso 2 y examinar · el siguiente calificador. (In the example, La Respuesta es “no” Hasta Que se Alcanza el calificador de idioma).
    • Si La Respuesta es sí, continuar con el paso 4.
  4. ELIMINAR los Directorios de recursos Que No INCLUYEN Este calificador. En the example, El Sistema Elimina Todos Los Que No Directorios INCLUYEN UN calificador de idioma:
dibujable /
dibujable-es /
dibujable-en-puerto /
dibujable-en-NoTouch-12key /
dibujable-puerto-LDPI / 
dibujable-puerto-NoTouch-12key /

Excepción: Si el calificador en cuestión f es la densidad de píxeles de la Pantalla, Android slecciona la opción que más coincida con la densidad de la Pantalla del Dispositivo. En general, Aandroid reduce  su preferecica a  una imagen original, en la directiva más grande antes que ampliar una imagen mas pequeña que las originales.

  1. Volver y repetir los Pasos 2, 3 y 4 Hasta Que Quede solitario Directorio de la ONU. En el ejemplo, la Orientación de la Pantalla Es El Próximo calificador para el cual sea existen coincidencias. Por lo del tanto, se eliminan los Recursos Que No se especifican Una Orientación de Pantalla:
    dibujable-es /
    dibujable-en-puerto /
    dibujable-en-NoTouch-12key /
    

    El Directorio Que Queda es drawable-en-port.

Si bien este procedimiento se ejecuta párrafo cada recurso: solicitado, el  Sistema Optimiza algunos adj: Aún más: aspectos. Un example of this Optimización Es Que Una Vez Que se conoce la configuration del Dispositivo, El Sistema podria ELIMINAR los Recursos Alternativos Que Nunca coinciden. EJEMPLO Por, si el idioma de configuration es inglés ( “en”), los Directorios de recursos Que Tienen ONU calificador de idioma establecido en Otro idioma ¿Que hay mar ingles Nunca de INCLUYEN en el conjunto de recursos comprobados (sin embargo, la ONU Directorio de Recursos pecado el calificador de idioma sí se includes).

Cuando Se seleccionan Recursos SEGÚN los calificadores del Tamaño de la Pantalla, El Sistema utilizará los Recursos Diseñados Para Una Pantalla Más Pequeña Que la Pantalla SI real sin EXISTEN Recursos Que coincidan mejor (por Ejemplo, Una Pantalla de Tamaño Grande utilizará Recursos De Una Pantalla de Tamaño normal de Si es Necesario). Sin embargo, si Los Únicos Recursos Disponibles Presentan ONU Tamaño superiores al de la Pantalla real, El Sistema sin los Usara y tu application fallará si ningún Otro recurso que coincidiera con la configuration del Dispositivo (POR EJEMPLO, SI Todos Los Recursos de Diseño estan etiquetados con el calificador xlarge, Pero el Dispositivo es Una Pantalla de Tamaño normal).

Nota: La precedencia del calificador (en la tabla 2 ) es mas Importante Que la Cantidad de calificadores que coinciden exactamente con el Dispositivo. Por Ejemplo, en el paso 4 mencionado anteriormente, la última Opción de la Lista INCLUYE tres calificadores que coinciden exactamente con el Dispositivo (orientation, tipo de pantalla táctil y Método de entrada), MIENTRAS Que drawable-enTiene Un solitario PARÁMETRO Que coinciden (idioma). Sin embargo, el idioma Tiene alcalde precedencia Que ESTOS Otros calificadores, por lo del tanto, drawable-port-notouch-12keyse Elimina.

Anuncios

Alarma con estación meteorológica


También decidió utilizar un servidor MQTT para subir esta información en la web por lo que se puede desde cualquier lugar, tener un vistazo a la información meteorológica captada por este prototipo.

Elementos del montaje:

  1. nodeMCU (regulador Micro,  versión 0.9)
  2. Pantalla LCD – 16 x 2
  3. Botones – 3
  4. Sensor de temperatura DHT11
  5. Timbre o zumbador
  6. Placa de prototipos tamaño  mini
  7. Cables de puente
  8. Resistencia de 1000 Ω – 3
  9. Caja de madera para montar todas las cosas dentro.

Asignación de pines y planificación

Bien, así que vamos a hablar acerca de cómo tenía que distribuir los pasadores entre todos los componentes.

La pantalla LCD

La pantalla LCD,  necesita al menos 6 pines de I/O interfaz con el microcontrolador. Puede darse como sigue: Habilitar, register select, D04, D05, D06 D07.

  • Enable – pin I/O digital 0
  • Seleccione Registro – pin I/O digital 1
  • D04 – pin I/O digital 2
  • D05 – pin I/O digital 3
  • D06 – pin I/O digital 4
  • D07 – pin I/O digital 5

Los botones

Hay tres botones que vamos a usar, por lo queo bviamente  necesitaríamos tres pins de I/O digitales,

  • LeftButton – pin I/O digital 6
  • CenterButton – pin I/O digital 7
  • RightButton – pin I/O digital 8

El zumbador

El puede ser conectado al pin I/O digital 9.

El sensor de temperatura DHT11

Este sensor tiene un pin de salida y sigue para el pin de I/O digital 10

 

Ensamblaje

En una caja de madera ser practican agujeros para el lcd  y lo botones y entonces es hora de montar todo dentro de esa caja.

  1. Creo que tenemos que empezar con los botones. Usé un palito de helado estrecho para hacer una base para los botones.
  2. Luego tomar el nodeMCU y las placa de prototipos y pegarloo a la base de la caja con cinta de doble cara.
  3. Entonces conectar los botones a los pines de I/O digitales apropiados.
  4. En tercer lugar, colocar  la pantalla LCD y luego agarrarla bien a la caja con algunas cintas desde el interior. .
  5. Hacer las conexiones de la pantalla LCD.
  6. Luego conectar el timbre o buzzer en el interior de la caja con cinta de doble cara y conectar su terminal positivo al pin digital 9
  7. El sensor DHT11 tiene tres piness: 5v, gnd y la salida. Por lo tanto el pin de salida irá al pin digital 10 de la nodeMCU . 5v y tierra son obvias dónde deben ir.
  8. También para agregar, DHT11 es lo único que se quedará fuera de la caja para detectar la temperatura exterior. .

 

El código

El código qeu ha escrito Techovator0819      es cerca de 450 líneas de longitud. y cuenta  con  algunas bibliotecas importantes que se necesitan para descargar  asi que lo primero es asegúrarse de tener el IDE de Arduino instalado asi como tener los drivers del  esp8266 instaladas también. Si no lo ha hecho, haga clic aquí.

El primer paso antes de ver  el código, es entender la funcionalidad de nuestro dispositivo y el código en consecuencia:

  • Nestro WB(weather box)  accede a internet y recupera la información de tiempo apropiado a través de una llamada a la API.
  • También  tomara  la temperatura del medio ambiente  con un sensor propio y enviara esa información a un corredor de MQTT.
  • También podría mantener alarmas y temporizadores para usted.
  • También es capaz de mostrar hora y fecha.

Todo , esto significa que necesitamos integrar todas estas funciones bajo un título o código.

¿Cuáles son las bibliotecas que necesitamos?

  1. Librería LiquidCrystal . Como estamos usando una pantalla LCD como la principal interfaz entre usted y el NodeMCU, esta biblioteca es indispensable. Paranuestra comodidad, esta biblioteca, por defecto, es una biblioteca integrada en el IDE de Arduino.
  2. Biblioteca de ESP8266WiFi . Esta biblioteca permite el ESP8266 conectar con el Wifi y tener acceso a internet. Esta librería viene en un paquete que debe descargar durante la instalación del ESP8266 en el administrador de la placa.
  3. Biblioteca de ArduinoJson . Cuando se llama a la API, los datos que usted recibirá estaran en formato JSON (JavaScript Object Notation). Así que si quiere convertirlo a un formato utilizable, necesita analizarlo. Y la biblioteca de ArduinoJson lo hace por nosotros.
  4. Biblioteca para el sensor DHT11.
  5. Biblioteca en tiempo de. Para mantener a nuestro tiempo. Las funciones de biblioteca se enumeran aquí.
  6. Biblioteca de TimeAlarms . Se utiliza para que nos establezcan alarmas y temporizadores. Las funciones de biblioteca se enumeran aquí.

Las dos últimas bibliotecas deben utilizarse juntos. Puede usar la biblioteca en tiempo de forma independiente pero no de la biblioteca de TimeAlarms.


La llamada de API

 

The API Call

 

 

 

 

Lo más importante es una llamada a la API es la API key. Estoy conectando a la página web openweathermap.org para obtener toda la información de tiempo. Así que hay que seguir el procedimiento para abrir una cuenta allí y obtener un API key y es absolutamente gratis. Para llamar a la API key,
El primer paso es conectarse al servidor.

En segundo lugar, usted necesita utilizar su API key en la URL.Usted deberá utilizar el método GET para recuperar los datos de la URL.

Para hacer los datos disponibles en un formato utilizable,necesita para luego almacenar los datos en una cadena.

Los datos que reciba serán en formato JSON. Así que hay que analizarlo.

Y luego, se almacenan la información deseada en algunas variables globales que se pueden utilizar en cualquier lugar en el código.

     El siguiente es un ejemplo de código  para demostrar cómo funciona. Esta parte básicamente declara las bibliotecas utilizadas, crea las variables y objetos de la biblioteca a consultar.

include <ArduinoJson.h>
#include <ESP8266WiFi.h>
String result; 
// la cadena en la que se almacenarán los datos después de la llamada a la API
char servername[]="api.openweathermap.org"; //mombre servidor
String APIKEY = "YOUR_API_KEY"; //el API key
String CityID = "1264527"; //el  ID de la ciudad

//Asignación de sus variables globales para almacenar la información meteorológica recibida
String Description;
String Place;
float Temperature;
float Humidity;
float w;
WiFiClient client; >

Código de configuración básica.

void setup()

{

// Ponga su código de configuración aquí, para ejecutar una vez:
Serial.begin(9600);
WiFi.begin(“your ssid”, “your password”);

//empieza  conexion WIFI
while(WiFi.status() != WL_CONNECTED)

{

// espera hasta que se establezca la conexión
Serial.print(“.”);
delay(500);
}
Serial.println(“Connectado!”);
Serial.println(WiFi.localIP());   //imprime direccion  IP
}<

Código para crear una función que obtiene los datos.

void weatherData(){

if (client.connect(servername, 80)) {

// inicia la conexión del cliente, comprueba la conexión
client.println(“GET /data/2.5/weather?id=”+CityID+”&units=metric&APPID=”+APIKEY);

//// llama a la api usando el método get antes de la URL. Nota: La URL utiliza la clave api.
Serial.println(“Server esta accesible”);
client.println();
}
else { //  si el servidor no esta disponible
Serial.println(“fallo de conexion  “); //mensaje de errorsi no esta conectado el cliente
Serial.println();
}
result = “”;

//Hace que la cadena nula de cualquier dato almacenado previamente para almacenar nuevos datos
while (client.available()) { //connected or data available
char c = client.read(); //gets byte from ethernet buffer
result = result+c;
}
Serial.println(result);
result.replace(“[“, ” “);

//Estoy enfrentando un error. Sólo para evitarlo, tengo que escribir esto
result.replace(“]”, ” “);

//y esto tambien.
client.stop(); //para  cliente
Serial.println(“Recieved”);

//Analiza la cadena llamada resultado

StaticJsonBuffer<1024> jbuff;

JsonObject &root = jbuff.parseObject(result);
if (!root.success())
{
Serial.println(“parseObject() failed”);
}

// almacena toda la información deseada en variables temporales.
String location = root[“name”];
float temperature = root[“main”][“temp”];
float humidity = root[“main”][“humidity”];
String description = root[“weather”][“description”];
float wind = root[“wind”][“speed”];

//Transfiere toda la información de las variables temporales a variables globales a las //que puede acceder en cualquier parte del código.
Place = location;
Temperature = temperature;
Humidity = humidity;
w = wind * 3.6;
Description = description;
}

La función de bucle para mostrar todo lo que te quieren en el monitor serie.

void loop() {

weatherData(); //Llama a la función que hemos discutido anteriormente
Serial.println(Temperature);
Serial.println(Place);
Serial.print(“H: “);
Serial.println(Humidity);
Serial.print(w);
Serial.println(” kmph”);
Serial.println(Description);
delay(8000); //retardo de  8 segundos
}

Como vemos  es un ejemplo básico de una llamada a la API y el análisis de datos JSON.

 

MQTT cliente y agente

 

MQTT Client and Broker

 

 

Como hemos visto en este blog el autor h aoptado  por el frameworl Cayyene de MyDevices para salvar la informacion procedente del sensor DHT11

one.jpg

 

 

two.jpg

 

 

 

 

four.jpg

 

 

five.jpg

 

 

Como vemos va  subiendo nuestros datos de los sensores a un corredor de MQTT en internet por lo que podemos ver desde cualquier lugar.
Pesonalmente pienso que el tablero de instrumentos del Cayenne es el más conveniente así queno me sorprende que el autor lo hay usado
Resumidamente esto son los pasos  para usar el servicio
  • En primer lugar, debe crear una cuenta.
  • Después de haber conectado la placa a Cayena se le dirigirá automáticamente a la consola donde se pueden utilizar los widgets personalizados disponibles.
  • Asegúrese de especificar correctamente el canal y corresponden a ese canal para enviar datos en el código.
  • Después de que hayas hecho eso, cree un nuevo proyecto y arrastrar y soltar widgets como de sus dispositivos.
  • El siguiente es un código de ejemplo para que comprendas cómo Protocolo MQTT. También utilizaremos la biblioteca Cayena-MQTT-ESP8266 para hacer las cosas mucho más fácil para nosotros.
    <#include 
    
    char ssid[] = "ssid";
    char wifiPassword[] = "wifiPassword";
    
    char username[] = "MQTT_USERNAME";
    
    char password[] = "MQTT_PASSWORD";
    char clientID[] = "CLIENT_ID";
    
    void setup() {
    
      Serial.begin(9600);
      Cayenne.begin(username, password, clientID, ssid, wifiPassword);
    }
    
    void loop() {
    
     Cayenne.loop(); //this function must be called regularly to keep the connection stable
      float sensorInfo = analogRead(A0);
      Cayenne.virtualWrite(0, sensorInfo); //virtualWrite(channel, data) is function with two parameters. Channel - you want to send the data to and second parameter is the data itself.
    }
  • Después de eso, usted será capaz de enviar y recibir datos sin problemas. Para este , se ha usado sólo dos widgets icono es decir ‘temperatura’ y ‘humedad’.
  • Después de crear una cuenta, haga clic en ‘Add New’.
  • A continuación, haga clic en ‘Dispositivo/Widget’Haga clic en “Traiga su propia cosa”, que es en la parte inferior.Una nueva página aparecerá indicando su nombre de usuario MQTT, contraseña y el ID de cliente que son únicas para usted. Estos se aplicarán en el código para identificar el dispositivo.

Estructura del código final

La longitud total del código es alrededor de 550 líneas.

El código está dividido en dos secciones. Una PageDisplay y otra DecMaker (abreviatura de decisiones). Cada vez que usted pulsa cualquier botón, basado en que (derecha o izquierda), la pantalla mostrará esa página. Cuando en página y el centerButton, el código se moverá a la DecMaker. Dentro de la función DecMaker y basado en qué página estaba finalmente abierta, ejecutará las acciones correspondientes. Puede recibir datos meteorológicos, sensores, alarmas y temporizadores.

Las páginas se muestran según los modos. Los modos son cuatro. Pueden ser,

  1. Inicio modo: para obtener los datos meteorológicos y visualizarlos. Así como percibir el entorno.
  2. Modo set timer – establecer temporizadores para usted
  3. Modo de programar la alarma – establecer alarmas para que usted
  4. Panel de control – cuando tu no en cualquiera de los modos, prefiere podría quedarse en el tablero de instrumentos.

A continuación, vamos a hablar sobre el sketch principal 

Paso 9: El código principal

El siguiente es el código principal.

Para descargar el código, haga clic aquí.

LiquidCrystal lcd(16, 5, 4, 0, 2, 14);
#define rightButton 13
#define centerButton 15
#define leftButton 12
#define buzz 3
int page = 1;
byte leftArrow[8]
{ B00000,
 B00010,
 B00110,
 B01110,
 B11110,
 B01110,
 B00110,
 B00010
};
byte rightArrow[8]{
 B00000,
 B01000,
 B01100,
 B01110,
 B01111,
 B01110,
 B01100,
 B01000
};
byte line[8]
 { B00110,
 B00110,
 B00110,
 B00110,
 B00110,
 B00110,
 B00110,
 B00110
};
String result;
char servername[]="api.openweathermap.org";
String APIKEY = "Your Api key";
String CityID = "Your city ID";</p><p>String Description;<br>String Place;
float Temperature;
float Humidity;
float w;
WiFiClient client;
dht DHT;#define pin 1
int set=1; // for configuring the alarm
int a, b, c; // used to denote the hour, minute and second while setting an alarm</p>
char username[] = "MQTT_username";<br>char password[] = "MQTT_password";
char clientID[] = "Client ID";

void setup() {
 // put your setup code here, to run once:
 Serial.begin(9600);
 WiFi.begin("ssid", "password");
 lcd.print("Weather box");
 delay(2000);
 lcd.clear();
 if (WiFi.status() == WL_CONNECTED){
 Cayenne.begin(username, password, clientID);
 lcd.print("Connected!");
 delay(3000);
 lcd.clear();
 Serial.println(WiFi.localIP());
 } else {
 lcd.print("Not conn");
 delay(3500);
 }
 lcd.clear();
 lcd.begin(16, 2);
 lcd.createChar(0, leftArrow);
 lcd.createChar(1, rightArrow);
 lcd.createChar(3, line);
 
 pinMode(rightButton, INPUT);
 pinMode(centerButton, INPUT);
 pinMode(leftButton, INPUT);
 pinMode(buzz, OUTPUT);
 digitalWrite(buzz, LOW);
 
 setTime(15, 12, 50, 25, 5, 17);
 delay(1000);
}
int val = 1;
int x,y; //for setting timer minutes and seconds
int trig; //for coniguring the timer
int counter = 0;
void loop() {
 // put your main code here, to run repeatedly:
 while(val == 1){
 if (digitalRead(leftButton)==HIGH)
 { val = 0;}
 lcd.clear();
 lcd.print(hour());
 lcd.print(":");
 lcd.print(minute());
 lcd.write(byte(3));
 lcd.print("WiFi:");
 if (WiFi.status() == WL_CONNECTED){
 lcd.print("conn"); } 
 else {
 lcd.print("Nconn");} 
 lcd.setCursor(0, 1);
 lcd.write(byte(0));
 lcd.print("Menu");
 lcd.write(byte(3));
 
 if (digitalRead(centerButton)){
 DHT.read11(pin);
 lcd.print("T:");
 int a = DHT.temperature; //converting float to int
 lcd.print(a);
 int b = DHT.humidity; // converting float to int
 lcd.print(" H:");
 lcd.print(b);
 delay(3000);
 }else {
 date();
 }
 counter++;
 if (counter == 60){
 if (WiFi.status()==WL_CONNECTED){
 Cayenne.loop(); 
 DHT.read11(pin); 
 Cayenne.virtualWrite(1, DHT.temperature);
 Cayenne.virtualWrite(2, DHT.humidity); 
 } 
 counter = 0;
 }
 delay(50);
 }
 while (val != 1){
 delay(200);
 pageDisplay();
 if (digitalRead(rightButton)){
 if (page == 4){
 page = page;
 } else {
 page++;
 }
 pageDisplay();
 
 } else if (digitalRead(leftButton)){
 if (page == 1){
 page = page;
 } else {
 page--;
 }
 pageDisplay();
 
 } else if (digitalRead(centerButton)== HIGH){
 decMaker();
 }
 }
}
void pageDisplay()
{ switch(page){
 case 1:
 lcd.clear();
 lcd.setCursor(6, 0);
 lcd.print("Home");
 lcd.setCursor(15, 0);
 lcd.write(byte(1));
 break;
 case 2:
 lcd.clear();
 lcd.write(byte(0));
 lcd.setCursor(3, 0);
 lcd.print("Set Timer");
 lcd.setCursor(15, 0);
 lcd.write(byte(1));
 break;
 case 3: 
 lcd.clear();
 lcd.write(byte(0));
 lcd.setCursor(3, 0);
 lcd.print("Set Alarm");
 lcd.setCursor(15, 0);
 lcd.write(byte(1));
 break;
 case 4:
 lcd.clear();
 lcd.write(byte(0));
 lcd.setCursor(3, 0);
 lcd.print("Dash Board");
 break;
 default:
 lcd.clear();
 lcd.print("Error 002");
 break;
 }
}
void date(){
 lcd.print(day());
 lcd.print(" ");
 int a = month();
 switch(a){
 case 1:
 lcd.print("Jan");
 break;
 case 2:
 lcd.print("Feb");
 break;
 case 3:
 lcd.print("Mar");
 break;
 case 4:
 lcd.print("Apr");
 break;
 case 5:
 lcd.print("May");
 break;
 case 6:
 lcd.print("Jun");
 break;
 case 7:
 lcd.print("Jul");
 break;
 case 8:
 lcd.print("Aug");
 break;
 case 9: 
 lcd.print("Sep");
 break;
 case 10:
 lcd.print("Oct");
 break;
 case 11:
 lcd.print("Nov");
 break;
 case 12:
 lcd.print("Dec");
 break;
 default:
 lcd.print("005");
 }
 if (day()<10){
 lcd.print(" ");
 }
 lcd.print(year());
 }
void decMaker(){
 switch(page){
 case 1:
 lcd.clear();
 lcd.print(". . .");
 weatherData(); 
 lcd.clear();
 while (digitalRead(leftButton) == LOW){
 weatherData();
 digitalRead(leftButton);
 lcd.setCursor(6, 0);
 lcd.print("IST:");
 lcd.setCursor(5, 1);
 lcd.print(hour());
 lcd.print(":");
 lcd.print(minute());
 delay(3000);
 lcd.clear();
 lcd.print("Wthr in ");
 lcd.print(Place);
 lcd.setCursor(0, 1);
 lcd.print("T:");
 lcd.print(Temperature);
 lcd.setCursor(9, 1);
 lcd.print("H:");
 lcd.print(Humidity);
 delay(3000);
 lcd.clear();
 digitalRead(leftButton);
 lcd.print("Wind: ");
 lcd.print(w);
 lcd.print("kmph");
 lcd.setCursor(0, 1);
 lcd.print(Description);
 delay(2000);
 lcd.clear();
 DHT.read11(pin);
 lcd.print("Room: ");
 lcd.setCursor(0, 1);
 lcd.print("T:");
 lcd.print(DHT.temperature);
 lcd.setCursor(9, 1);
 lcd.print("H:");
 lcd.print(DHT.humidity);
 delay(2000);
 lcd.clear();
 }
 lcd.begin(16, 2); // In my case the lcd doesn't work without this. But don't know why.
 break;
 case 2:
 setTimer();
 break;
 case 3:
 setAlarm();
 Serial.print("THREE");
 lcd.begin(16, 2);
 break;
 case 4:
 Serial.print("FOUR");
 val = 1;
 break;
 default:
 Serial.print("not a valid entry");
 lcd.clear();
 lcd.print("error 001");
 break;
 }
}
void weatherData()
{ if (client.connect(servername, 80)) 
{ //starts client connection, checks for connection
 client.println("GET /data/2.5/weather?id="+CityID+"&units=metric&APPID="+APIKEY);
 Serial.println("Server is accessable");
 client.println();
 } 
 else {
 Serial.println("connection failed"); //error message if no client connect
 Serial.println();
 }
 result = "";
 while (client.available()) { //connected or data available
 char c = client.read(); //gets byte from ethernet buffer
 result = result+c;
 }
 result.replace("[", " ");
 result.replace("]", " ");
 client.stop(); //stop client
 Serial.println("Recieved");
 
 StaticJsonBuffer<1024> jbuff;
 JsonObject &root = jbuff.parseObject(result);
 if (!root.success())
 {
 Serial.println("parseObject() failed");
 }
String location = root["name"];
 float temperature = root["main"]["temp"];
 float humidity = root["main"]["humidity"];
 String description = root["weather"]["description"];
 float wind = root["wind"]["speed"];
Place = location;
 Temperature = temperature;
 Humidity = humidity;
 w = wind * 3.6;
 Description = description;
}
void alarm()
{ Serial.println("Alarm activated");
 lcd.clear();
 lcd.print("Wake up, Lazy");
 for (int i = 0; i <= 10; i++){
 digitalWrite(buzz, HIGH);
 delay(80);
 digitalWrite(buzz, LOW);
 delay(80);
 digitalWrite(buzz, HIGH);
 delay(80);
 digitalWrite(buzz, LOW);
 delay(800);
 }
 digitalWrite(buzz, LOW);
 set = 0;
}
void setAlarm(){
 set = 1;
 int pos = 1;
 a, b, c = 0;
 repeat:
 //timeDisplay();
 lcd.clear(); 
 lcd.setCursor(0, 0); 
 lcd.print(a); 
 lcd.print(":");
 lcd.print(b); 
 lcd.print(":");
 lcd.print(c); 
 lcd.setCursor(0, 1);
 if (pos == 1){ lcd.print("hours");}
 else if (pos == 2){ lcd.print("minutes");}
 else if (pos == 3){lcd.print("seconds");}
 delay(200);
 if (digitalRead(leftButton)){//leftButton
 if (pos == 3)
 {pos = 1;}
 else 
 {pos++;}
 } else if (digitalRead(rightButton)){
 switch (pos){
 case 1:
 if (a == 23){ a = 0;}
 else {a++;}
 break;
 case 2:
 if (b == 59){ b = 0;}
 else {b++;}
 break;
 case 3:
 if (c == 59){ c = 0;}
 else {c++;}
 break;
 }
 } else if (digitalRead(centerButton)){
 confirmAlarm();
 } 
 if (set == 0){
 goto endIt;
 }
 goto repeat;
 endIt:
 Serial.println("Alarm executed successfully");
}

void confirmAlarm()
{ lcd.clear();
 Alarm.alarmOnce(a, b, c, alarm);
 up:
 lcd.setCursor(1, 0);
 lcd.print("Alarm Running");
 lcd.setCursor(3, 1);
 lcd.print(hour());
 lcd.print(":");
 lcd.print(minute());
 lcd.print(":");
 lcd.print(second());
 Alarm.delay(200);
 delay(1);
 lcd.clear();
 //timeDisplay();
 Serial.println("...");
 if (set == 0||digitalRead(centerButton)){goto down;}
 goto up;
 down:
 set = 0;
}
void setTimer(){
 int cur = 1;
 x, y = 0;
 trig = 1;
 roof:
 lcd.clear();
 lcd.setCursor(2, 0);
 lcd.print("minutes: ");
 lcd.print(x);
 lcd.setCursor(2, 1);
 lcd.print("seconds: ");
 lcd.print(y);
 if (cur == true){lcd.setCursor(0, 0); lcd.write(byte(1));}
 else {lcd.setCursor(0, 1); lcd.write(byte(1));}
 delay(200);
 if (digitalRead(rightButton)){
 switch(cur){
 case 1:
 if (x == 20){x=0;}
 else {x++;}
 break;
 case 2:
 if (y == 59){y = 0;}
 else {y++;}
 break;
 default: 
 lcd.clear();
 lcd.print("ERROR 003");
 }
 } else if (digitalRead(leftButton)){
 if (cur == 2){cur = 1;}
 else {cur++;}
 }
 if (digitalRead(centerButton)){
 confirmTimer();
 } else {
 goto roof;
 }
 trig = 0;
 lcd.setCursor(0, 0);
 lcd.print("Timer successful");
 delay(2000);
 lcd.clear();
}</p><p>void confirmTimer(){<br> int z;
 z = x*60 + y;
 Alarm.timerOnce(z, timer);
 lcd.clear();
 
 sky:
 Serial.println(".");
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print("CountDown Timer");
 lcd.setCursor(7, 1);
 lcd.print(z);
 z--;
 Alarm.delay(999);
 delay(1);
 if (trig == 0||digitalRead(centerButton)==HIGH){goto ground;}
 goto sky;
 ground:
 trig = 0;
 lcd.clear();
}
void timer(){
 Serial.println("Boom, timer is on!! :)");
 lcd.clear();
 lcd.setCursor(3, 0);
 lcd.print("Time's Up!");
 for (int i = 0; i<=10; i++){
 for (int j = 0; j<=3; j++){
 digitalWrite(buzz, HIGH);
 delay(70);
 digitalWrite(buzz, LOW);
 delay(70);
 }
 delay(700);
 }
 trig = 0;
}

Mas información en http://www.instructables.com/id/IoT-Weather-Box-with-Custom-Alarms-Timers/

Cambiar permisos en Solaris desde java


Como es sabido , hay 3 atributos básicos en Unix  para archivos simples: lectura, escritura y ejecutar.

  •  R  , es decir permiso de lectura (read):Si tiene permiso de lectura de un archivo, puede ver su contenido.
  • W , es decir  permiso de escritura (write):Si tiene permiso de escritura de un archivo, puede modificar el archivo. Puede agregar, sobrescribir o borrar su contenido.
  • X, es decir permiso de ejecución (execute):Si el archivo tiene permiso de ejecución, entonces puedes decirle al sistema operativo que lo ejecute como si fuera un programa. Si es un programa llamado “foo” lo podremos ejecutar como cualquier comando.

En este punto es muy interesante saber que un script en Cshell  (interprete) necesitara permisos de lectura y ejecución para poderlo lanzar, pero sin embargo un programa compilado  en java( por ejemplo en un jar) solo necesitara permisos de lectura  .

Para  cambiar los permisos tanto en directorios como en ficheros en todas las versiones de unix y variantes   usamos el comando  chmod (change mode)  pudiéndose agregar o remover permisos a uno o mas archivos con + (mas) o – (menos)

La representación octal de chmod es muy sencilla:

  • Lectura tiene el valor de 4
  • Escritura tiene el valor de 2
  • Ejecución tiene el valor de 1

Entonces:

 rwx | 7 | Lectura, escritura y ejecución |
rw- | 6 | Lectura, escritura |
r-x | 5 | Lectura y ejecución |
r– | 4 | Lectura |
-wx | 3 | Escritura y ejecución |
-w- | 2 | Escritura |
–x | 1 | Ejecución |
— | 0 | Sin permisos |

Por lo tanto:

chmod u=rwx,g=rwx,o=rwx | chmod 777 |
chmod u=rwx,g=rx,o= | chmod 760 |
chmod u=rw,g=r,o=r | chmod 644 |
chmod u=rw,g=r,o= | chmod 640 |
chmod u=rw,go= | chmod 600 |
chmod u=rwx,go= | chmod 700 |

Es decir para asignar a  un fichero o directorio permisos totales usaremos  el comando

chmod 777  fichero

Es una tarea habitual  que  nuestras aplicaciones java necesiten cambiar permisos  en el sistema de ficheros no solo windows sino tambien en la maquina donde se ejecutaran ( Solaris, Unix,etc)

La forma tradicional de hacerlo a partir de Jr6   es mediante las primitivas  setReadable, setExecutable  o setWritable  del   objeto fichero (file)

Por ejemplo para dar permisos totales (777) sobre un objeto file,   esta es  la sintaxis a usar:

     file.setReadable(true, false);

     file.setExecutable(true, false);

     file.setWritable(true, false);

Por  desgracia   aunque podamos compilar código java mediante las primitivas  setReadable, setExecutable  o setWritable ,por ejemplo para dar permisos totales (777) sobre un objeto file ,   puede que en la maquina donde se ejecute  nos falle  porque tenga otra versión de java inferior

 

Una solución bastante potente que  resuelve el problema es usar  el metodo untime.getRuntime().exec     que nos permite invocar  a otro programa java o incluso comandos del sistema operativo ( en nuestro  caso chmod 77)

 

Como ejemplo ,  os  muestro una clase que cambia los permisos a 777 un fichero o directorio que se le pase como parámetro:

public static void permisos777 (final String pathname)
{

Process theProcess = null;

//intentamos cambiar los permisos del fichero recien creado
System.out.println(“Cambiamos permisos 777 a “+pathname);
try
{
theProcess = Runtime.getRuntime().exec(“chmod 777 “+ pathname);
}
catch(IOException e)
{
System.out.println(“Error en el método exec()”);
}
//fin de cambio de permisos

}

Como descargar trascripciones de videos de youtube


En YouTube puede encontrar todo tipo de vídeos como películas, series, tutoriales, vídeos musicales, etc donde algunos  tienen subtítulos incrustados que forman parte del mismo vídeo, mientras que otros tienen subtítulos están separados del mismo.

Los subtítulos incrustados no pueden ser descargados de forma directa , pero puede utilizar un servicio en línea, como, para descargar los subtítulos que no están incrustados.

 

En realidad  descargar los subtítulos no incrustados de un vídeo de YouTube con servicos web es muy sencillo

  1. Copie la url del enlace del vídeo de YouTube,
  2. Entre en  http://www.lilsubs.com/                                                                                      
  3. Pegue la URL en el campo correspondiente.
  4. Haga clic en Download y seleccione el idioma en que quiera descargar los subtítulos
  5. Elija la carpeta donde desee almacenar el archivo SRT y haga clic en Guardar.

 

Los archivos srt son ficheros de texto que contienen los subtítulos asociados a un video. Utilizan el formato subrip, en el que se almacena esta información:

  •  Intervalo de tiempo en el que aparece
  • Texto del subtítulo

Al tratarse de archivos de texto hay que tener en cuenta su codificación, que en muchos casos el reproductor no escoge la correcta. Seleccionando la que se ajuste a nuestro idioma se pueden evitar problemas con acentos y símbolos.

• 00:01:02,383 –> 00:01:05,133
• “Campos de Opio, Tíbet”
• 2
• 00:02:21,960 –> 00:02:25,735
• Tú y tus hermanos habéis asesinado a 3 de nuestros hombres.
• 3
• 00:02:25,800 –> 00:02:27,327

 

Es obvio que al ser ficheros de texto podemos manipularlos  eliminando  por ejemplo  todas las cifras   y luego  juntando los textos, pero esto conlleva mucho tiempo  de trabajo que en realidad como vamos a ver  podemos automatizar

A continuación vamos a ver tres herramientas para  gestionar  estos archivos de una forma mas sencillas:

 

 

Usar  una app para convertir un archivo .srt en texto limpio 

Subtitle Edit es una de  las mejores opciones pues vale para todos los archivos y respeta los números.

 

Los  pasos para su uso son muy sencillos

  • Descargue Subtitle Edit
  • Abra un archivo .srt.
  • Pinche en la pestaña ‘Source view’,
  • Vaya al desplegable ‘Format’ escoja ‘Scenarist’ (.txt).

 

  • Así ordenamos por columnas separadas los tiempos y textos. Ahora dale a ‘File > Save as…’ para guardar el archivo .txt.

 

  • Abra el archivo .txt,
  • Copia todo el contenido y péguelo en Excel. Como verás tendrá varias columnas, elimina las primeras (referentes a los tiempos) para quedarse sólo con el contenido.

 

  • Copie el contenido y pégelo en la barra de búsqueda de un navegador para que se ponga el texto de corrido. Cópialo de nuevo y pégalo en un documento para comprobar que está bien.

 

Convertir un archivo .srt en texto limpio directamente con Excel

Este metodo  funciona cuando sólo hay una línea de diálogo por separado.

Puede abrir el .srt con el Bloc de notas, copiar el contenido y pegarlo en Excel, eliminando las filas de información numérica para seleccionarlo todo y pegarlo en un documento aunque es más fácil si  descarga Asap Utilities.

Seleccione las celdas, pinche en este plugin cuando lo instale y dale a ‘Columnas y filas > Selección condicional de fila y columna…’.

En ‘4. Opciones de búsqueda’ elija ‘par filas’ y dele a ‘Aceptar’ para eliminar las filas de los tiempos.

El Excel se quedará como el que se muestra aquí. Selecciona ahora ‘impar filas’ para quitar los números.

Cuando lo haga, dele a ‘Cerrar’. Tendrá ahora sólo el texto pero con muchos saltos de línea. Cópielos y péguelos en la barra de búsqueda de un navegador para que se ponga seguido.

Cópielo de nuevo y péguelo en un documento para comprobar que está bien.

Convertir un archivo .srt en texto limpio con Word

Este método tiene el inconveniente de que se borrarán los números, pero  vale para cualquier .srt.

Abra el archivo captions.srt con Word (o si no te funciona con el Bloc de notas y copies el texto) y deje el puntero al principio del texto.

Vaya a ‘Inicio > Reemplazar’ (o presiona ‘CTRL+B’) y en el desplegable de la lupa escoge ‘Reemplazar’.

Escriba el número 0 en el campo ‘Buscar’, deje vacío el campo ‘Reemplazar’ y presione ‘Remplazar todos’. Luego el número 1 y así hasta el 9. Esto eliminará todos los números.

Copie los símbolos que queden (por ejemplo ::, –> ::,) en ‘Buscar’, deje vacío el campo ‘Reemplazar’ y presione ‘Remplazar todos’. Con esto tendremos sólo letras.

Escriba ^p en ‘Buscar’, deje un espacio en blanco en el campo ‘Reemplazar’ y presione ‘Remplazar todos’. Así sustituirnos los saltos de línea y el texto quedará de corrido.

Si quedan espacios en blanco sustituirlos, copiándolos en ‘Buscar’ y dejando sólo un espacio en ‘Reemplazar’.

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).

Como publicar su app en Amazon parte 2


En un post anterior veimos como registrarnos como desarrollador en Amazon ,así como realizar las primeras pruebas de compatibilidad de nuestro apk

Si todo ha ido bien  al entrar nos debería aparecer  la primera aplicación que subimos para probar la compatibilidad de esta con amazon

Deberia aparecer  algo similar  a esto

notifications.png

En caso de que no aparecer nuestra aplicación , en realidad no hay problema, podemos volver a subir ésta pulsando el botón Add a New App y  a seguir  los pasos que vamos a comentar.

Aspectos generales

En el primer apartado  tendremos que elegir el titulo la categorización y otros aspectos esenciales de la aplicación

aspectos generales.png

Precios

Otro aspecto es elegir si vamos a monetizar la aplicación , parametrización que se realiza justamente en esta opción

 

aviliabulity.png

Descripción

En este apartado  es realmente donde escribimos el texto que publicitara nuestra app en el market de Amazon.

Aquí dado el mercado de la procedencia de Amazon(USA)  , deberemos cumplimentar la descripción ,características y las etiquetas en ingles ( se puede usar cualqueir traductor online) dado que este es el idioma principal y por el momento no se puede cambiar

 

descriptyon

Afortunadamente pulsando en Add Translation podemos añadir una traducción en el idioma de Cervantes  para los apartados anteriormente citados

Iconos

Amazon nos va  a pedir aparte de la imagen del icono incluida en el apk  , tambien otra serie de imágenes en diferentes  formatos , las cuales  seran  mostrada en el propio market

Las directrices de activos de imagen son las siguientes:

  • Pequeño icono114 x 114px PNG (con transparencia)
  • Icono grande 512 x 512px PNG (con transparencia)
  • Capturas de pantalla:Entre 3 y 10 PNGs o JPGs 800 x 480px, 1024 x 600px, 1280 x 720px,1280 x 800px, 1920 x 1080px, 1920 x 1200px, 2560 x 1600px (retrato o paisaje)
  • Imagen promocional (recomendada)1024 x 500px (sólo en el paisaje) PNG o JPG
  • Video (s) :hasta 5 MPEG-2, WMV, MOV, FLV, AVI o H.264 MPEG-4 720 – 1080px de ancho (4: 3 o 16: 9); 1200 kbps o superior    los archivos SFTP mayores de 150 MB via s SFTP

Asimismo  nos piden para la Infraestructura de Fire TV las siguientes  directrices de activos de imagen:

  • Icono de la aplicación 1280 x 720px PNG (sin transparencia)
  • Capturas de pantalla Entre 3 y 10 JPG o PNG (sin transparencia) 1920 x 1080px (paisaje)
  • Imagen de fondo :1920 x 1080px JPG o PNG (sin transparencia)
  • Contenido destacado Logotipo (recomendado)640 x 260px PNG (transparencia opcional)
  • Contenido destacado Fondo (recomendado)1920 x 720px JPG o PNG (sin transparencia)

images.png

Clasificación

Aqui toca  especificar si nuestra aplicación toca tema sensibles (violencia, sexo,etc)

subjecy.png

Final

Por ultimo en esta pantalla podemos cambiar el apk , ver todos los dispositivos soportados los permisos de alplicacion ,version, etc

final.png

Por cierto antes de enviar la aplicación, asegúrese de que su aplicación cumpla los siguientes requisitos y directrices:

  • Contenido de la aplicación: su aplicación cumple los Requisitos de la política de contenido de Amazon Appstore.
  • Imágenes: Usted ha creado y recopilado las imágenes necesarias para el listado de su aplicación, tal y como se describe en Image Guidelines for Amazon Appstore Submission.
  • Pruebas: ha probado su aplicación y su aplicación pasa los casos de prueba descritos en Criterios de prueba para aplicaciones de Amazon Appstore.
  • Orientación por dispositivo: especifique qué dispositivos va a segmentar con su aplicación en su archivo de manifiesto de Android.
  • Ubicación de la instalación: su archivo de manifiesto de Android especifica la ubicación de instalación de su aplicación en los dispositivos Fire TV y Fire tablet. Para la mayoría de las aplicaciones, la configuración de este valor en Almacenamiento externo (preferExternal) proporcionará una mejor experiencia a los usuarios de la aplicación.
  • Perfil de seguridad (sólo GameCircle o dispositivos de dispositivo de Amazon): si su aplicación utiliza GameCircle o API de mensajería de dispositivos de Amazon, prepárese para asociar su aplicación con un perfil de seguridad como parte del proceso de envío.
  • Compile Errors (Errores de compilación): si la aplicación hace referencia a casi 65.000 métodos, tendrá que reducir el número de métodos a los que se hace referencia para evitar errores de compilación cuando envíe su aplicación. Consulte Evitar errores de compilación al enviar su aplicación.

 

 

Como publicar su app en Amazon


Aunque la supremacía de los markets de Google  y Apple son mas que evidentes , el ecosistema de Amazon  va aumentando considerablemente  dia tras dia   conforme Amazon crece a  doble dígito  tanto en ventas como en numero de usuarios .

Precisamente  debido al aumento de penetración de sus fieles  usuarios compuestos por millones de  usuarios de Android, esto nos da una pista de que  su market también es una buena oportunidad pues los desarrolladores afirman incluso hacen mas dinero  con el market de MAzon ya que el 65% de los desarrolladores dicen que” los ingresos totales de Amazon son similares o mejores que otras plataformas” en parte gracias a que los clientes de Amazon están muy comprometidos y muchos desarrolladores han visto mayores ARPU versus plataformas competitivas.

Los desarrolladores en amazon pueden ganar  dinero  a través de varios modelo de negocio: descargas directas, publicidad en las propias aplicaciones y  las ventas in-apps .

El ultimo modelo  permite  vender productos de Amazon a través de las  propias aplicaciones obteniendo una comisión por venta realizada gracias al API de Amazon  así como el SDK que proporcionan .De esta forma pues  permiten monetizar las aplicaciones y juegos con API como, por ejemplo, los anuncios de compra en la aplicación de Amazon y los anuncios para móviles. .

En cuanto las aplicaciones  desarrolladas para Android que incluso pueden estar publicadas en Google Play, la mayoría de estas  también  funcionaran  en la Appstore de Amazon sin necesidad de desarrollo adicional.  lo cual permitirá  alcanzar millones de  clientes en todo el mundo pues  la Appstore de Amazon está disponible en 236 países y territorios, ofreciéndole una base de clientes global al instante.

 

En este post  veremos  las instrucciones en pantalla para crear una cuenta  de desarrollador de Amazon , probar si nuestra app es compatible con el market de amazon , documentar los detalles , especificar los royalties  y por supuesto finalmente  enviar su aplicación para hacerla disponible a la enorme base de clientes de Amazon.

Como se puede ver son muchos pasos , así que vayamos por partes:

 

Primera subida  y test de la aplicación

Para solicitar la inclusión de una  aplicación en  el catálogo de la tienda Apps  en primer lugar  deberá tener  el apk de su aplicación     y acceder a Amazon Appstore Mobile App Distribution Portal

apk.png

En esta pantalla arrastramos el fichero apk en la esquina derecha  donde probaremos  la compatibilidad de su aplicación en Fire y dispositivos Android  (simplemente arrastre y coloque su APK en el  servicio de pruebas de AWS  para obtener resultados en 90 segundos o menos).

 

compatibilidad

 

Si el resultado ha sido satisfactorio , podemos  subir  nuestra aplicación  a la plataforma de Amazon , por lo que   ahora nos pedirá   que nos validemos con nuestra cuenta de amazon para avanzar en el registro de la aplicación( puede ser la cuenta de amazon que usamos habitualmente para comprar=.

 

signn.png

 

Registro como desarrollador e impuestos

Una vez subida la aplicación  y comprobada la compatibilidad del apk  lo siguiente es registrase como  desarrollador de Amazon.

En la   pagina tendrá  que cumplimentar   todos los campos , donde ademas de los datos personales  nos solicitaran una breve descripción de no mas 2000 caracteres sobre el desarrollador , así como si ha tenido en cuenta alguna dirección de correo electrónico  para atender  a los usuarios.

 

resgistro.png

 

Por ciento ,tenga  mucho cuidado en este apartado ,pues lo que se cumplimente aquí, una vez grabado, ya  no se podrá modificar así que es muy importante  que  piense muy bien lo que va  a cumplimentar en los apartados Developer description   y en los servicios que vaya a ofrecer a los potenciales clientes.

Una vez pulsado el botón Save and Continue, lo siguiente es aceptar las condiciones de Amazon :

 

 

registtrox.png

Una vez aceptadas la condiciones,lo siguiente es ingresar los datos bancarios

 

 

pagos

Ya para terminar nos toca ajustar el tema de los impuestos aplicados a nuestras posibles ganancias:

 

royaltie.png

 

Ahora es el momento de cumplimentar el impreso  IRS W-9, W-8 para determinar si sus pagos están sujetos al formulario 1099-MISC o 1042-S del IRS.

Para cumplir con los requisitos del IRS lo más eficientemente posible, se deben contestar todas las preguntas e ingresar toda la información solicitada lo cual para todos los que hablamos español se nos hace bastante lioso

Tenga cuidado para evitar errores ortográficos o para ingresar números de identificación de impuestos incorrectos, lo que puede resultar en un formulario de impuestos invalidado.

Lógicamente se  tiene la obligación de notificar a Amazon de cualquier cambio en su información de identidad fiscal reanudando la entrevista de información tributaria si el cambio podría invalidar su W-9, W-8.

El cambio de circunstancias incluye:

  • Cambio de su nombre legal (por ejemplo, debido al matrimonio o la incorporación)
  • Cambio de dirección de un país a otro
  • Cambio de su número de identificación fiscal (TIN) de su negocio de su número de seguro social (SSN) a un número de identificación del empleador (EIN)
  • Para propósitos de impuestos en los Estados Unidos, es muy importante mencione si es Ud. una persona estadounidense
  • Para propósitos de impuestos federales de los Estados Unidos, se le considera una persona de los Estados Unidos si usted es:Un individuo que es un ciudadano de los Estados Unidos o un extranjero residente de los Estados Unidos,Una asociación, corporación, compañía o asociación creada u organizada en los Estados Unidos o bajo las leyes de los Estados Unidos,Una finca (que no sea una finca extranjera), o
    Un fideicomiso de los Estados Unidos.
  • Para propósitos de impuestos federales de los Estados Unidos, se le considera una persona no estadounidense (extranjera) si usted es:un individuo extranjero no residente,una corporación extranjera,una sociedad extranjera,un fideicomiso extranjero,una propiedad extranjera, cualquier otra persona que no sea una persona de los Estados Unidos.

Bien pongámonos mano a la obra para cumplimentarlo primero marcando si somos o no de U .S.:

 

 

paso1.png

 

Una vez aceptado este paso , lo siguiente es cumplimentar el grueso de formulario empezando por nuestro nombre y dirección postal:

 

 

Asimismo marcaremos si actuamos como intermediarios así como si somos algo que tenga que ver con una empresa:

 

tax6.png

 

tin

 

Al aceptar pulsando “save and continue”   nos da un resumen del documento:

 

 

final

Podemos solicitarlo por papel ,pero lo mejor es hacerlo via electronica pulsando en “Go paperles,I want to receive my Form 1042-S electrinicaly”    así como mas abajo donde pone “I consent to provide my electronic signature” , y  después  marcar  todos  los apartados siguientes:

 

electronic.png

A destacar  que debemos seleccionar  a todos los no residentes en EEUU  en  el apartado “Electronic Signature”  , en la parte que menciona que bajo pena de perjurio, declaramos que hemos examinado la información en este formulario y que,  saber y entender, es verdadera, correcta y completa. Además certificamos bajo pena de perjurio que:

  • Yo soy el individuo que es el beneficiario efectivo (o estoy autorizado a firmar para el individuo que es el beneficiario efectivo) de todos los ingresos a los cuales este formulario se relaciona o estoy usando este formulario para documentarme como un individuo que es propietario o cuenta Titular de una institución financiera extranjera
  • La persona nombrada en la línea 1 de este formulario no es una persona de los Estados Unidos
  • Los ingresos a los que se refiere este formulario son: (a) no relacionados efectivamente con la conducta de un comercio o negocio en los Estados Unidos, (b) están conectados pero no están sujetos al impuesto bajo un tratado de impuesto sobre la renta aplicable, o (c) La participación del socio en los ingresos efectivamente conectados de una asociación
  • La persona nombrada en la línea 1 de este formulario es residente del país tratado incluido en la línea 9 del formulario (si lo hubiere) en el sentido del tratado sobre el impuesto sobre la renta entre los Estados Unidos y ese país
  • Para las transacciones de intermediarios o intercambios de trueque, el beneficiario efectivo es una persona extranjera exenta tal como se define en las instrucciones, y
    Acepto que enviaré un nuevo formulario dentro de 30 días si alguna certificación hecha en este formulario se vuelve incorrecta.

Una vez aceptada esta parte , nos aparecerá que hemos llegado al 100% del proceso de cumplimento   y se nos mostrara el impreso de forma electrónica:

 

finalxxxx.png

Algo muy interesante es imprimirlo directamente  desde esta aplicación para guardarlos   y ya por fin habremos concluido  la primera parte del proceso

 

Bueno  ya hemos resuelto el tema legal  y  ya tenemos cuenta de  desarrollador de  Amazon , asi que   una vez que tengamos el apk   y hayamos pasado los pasos anteriores  ya estamos listos para  desplegar nuestra app y seguir los siguientes pasos que explicaremos en un segundo post.

Mientras tanto sospese si le interesa el programa Amazon Underground que pasamos a comentar en las siguientes lineas:

 

 

Amazon Underground

Una posibilidad para los desarrolladores es también incluir  nuestra app  en amazon undergroud,pero se  requiere cumplir con los siguientes requisitos generales para el programa:

  • Es necesario que la aplicación móvil esté disponible para descargar desde la tienda de Google Play o en la App Store de Apple y que esté monetizada en al menos una de las siguientes maneras:
    • La aplicación está disponible para su compra por una tarifa en todas las tiendas de otras aplicaciones donde se vende.
    • La aplicación contiene elementos en la aplicación que están disponibles para su compra por una tarifa.
  • la aplicación para dispositivos móviles no debe contener ningún elemento de suscripción en la propia aplicación.
  • Las características y la jugabilidad de la versión de Amazon Underground de su aplicación debe ser sustancialmente similar o mejor que la versión no subterránea.
  • Cuando envíe su aplicación a Amazon Appstore, debe hacer que su aplicación esté disponible para su distribución en al menos un dispositivo móvil que no sea de Amazon.

Pasos mínimos requeridos para la presentación de la aplicación

Amazon recomienda  los siguientes pasos para garantizar un proceso de envío fluido al programa Amazon Underground para su aplicación. Ten en cuenta que para Amazon Underground, necesitarás crear y mantener una nueva versión de tu aplicación. Esta nueva aplicación requiere un nombre de paquete único y se debe enviar por separado a la Appstore de Amazon desde cualquier versión existente de la aplicación.

  1. Revise los requisitos de elegibilidad en esta página y en el Programa de Amazon Underground antes de realizar cualquier cambio en su aplicación para verificar que su aplicación cumple con los requisitos del programa.
  2. Reconstruya su aplicación con los cambios de código que haya realizado para Amazon Underground y asigne un nombre de paquete nuevo y único a su aplicación. Por ejemplo, si el nombre original del paquete de su aplicación era “com.company.example”, llame a la versión Amazon Underground del paquete “com.company.example.underground”. Este nombre de paquete debe ser único en todas las plataformas en las que esté disponible la aplicación.
  3. Aplique la marca a su icono de lanzamiento como se describe en la página Migrar su aplicación a Amazon Underground superponiendo el archivo PNG proporcionado por Amazon para aplicar el marco de Amazon Underground al icono de lanzador.
  4. En el Portal de desarrolladores de aplicaciones y juegos de Amazon, comienza el nuevo proceso de envío de aplicaciones para tu aplicación con su nuevo y único nombre de paquete de Android.
    1. Como una nueva aplicación, crea un nuevo paquete de envío para la versión de Amazon Underground de tu aplicación.
    2. En el campo Descripción breve de la aplicación , describe el nuevo valor que ofrece la versión de Amazon Underground de tu aplicación en la versión no subterránea. Llame a cualquier característica que solía ser pagada que ahora están libres.
    3. Si procede, vuelva a crear sus artículos de compra en la aplicación (IAP) como parte de la presentación de su nueva aplicación, manteniendo intactos los precios originales. Incorporar los nuevos SKUs para estos elementos IAP en su aplicación. (Los precios de estos artículos se establecen automáticamente en cero para los usuarios de la versión de Amazon Underground de tu aplicación).
    4. Si su aplicación utiliza cualquiera de las API de Amazon descritas en la siguiente sección, cree una clave de API nueva y separada y actualice la versión de Amazon Underground de su aplicación para usar la nueva clave. (Consulte Migración de su aplicación a Amazon Underground .)
    5. Para abordar los cambios de seguridad en Android OS 5.0 (Lollipop), si su aplicación declara un permiso personalizado, consulte https://forums.developer.amazon.com/articles/2706/android-security-changes-requires-uniquely-defined.html .
    6. Verifique que su aplicación cumpla con los requisitos de elegibilidad detallados en el horario de Amazon Underground .
  5. En las opciones Disponibilidad y Precios , seleccione para Amazon Underground.
  6. En Imágenes , cargue sus activos.
  7. Envíe su aplicación a Amazon Appstore. Su aplicación será revisada antes de ser aceptada en el programa. Si no acepta su aplicación, iterar el paquete de presentación de la aplicación con los cambios necesarios y volver a enviarlos.

Directrices de diseño de aplicaciones

Las siguientes prácticas recomendadas son recomendaciones fuertes de Amazon para el programa Amazon Underground. Si su aplicación se aparta de estas directrices, es posible que su aplicación se rechace o se elimine del programa Amazon Underground. Para obtener más detalles sobre estas recomendaciones, consulte Requisitos de diseño y modificación de aplicaciones y directrices para Amazon Underground .

Asegúrese de que su aplicación de Amazon Underground se adhiera a las siguientes directrices:

  • Títulos Premium : si tu aplicación es un título premium donde los usuarios normalmente pagan por la aplicación en otras plataformas, resalta el valor añadido de tu aplicación en la versión de Amazon Underground. Si la única diferencia entre una versión premium de su aplicación y una gratuita es la eliminación de anuncios en la versión premium, asegúrese de proporcionar características o beneficios adicionales en la versión de Amazon Underground de su aplicación. Las aplicaciones Premium en las que la falta de anuncios en la versión Amazon Underground es la única característica premium no se considerará para el programa.
  • Metadatos de la aplicación: en el paquete de envío a Amazon Appstore, la versión de Amazon Underground de tu aplicación debe conservar la identidad y la marca de la versión no subterránea. Sin embargo, Amazon le anima a utilizar activos y medios actualizados para la versión de Amazon Underground, como capturas de pantalla y descripción de la aplicación, para ayudar a comunicar la propuesta de valor de la versión de Amazon Underground a sus usuarios. Por ejemplo, agregando tachas a los gráficos para los elementos IAP. La descripción de la aplicación no debe incluir referencias a contenido pagado. No copie y pegue la descripción de la aplicación en la versión no subterránea de su aplicación si hace referencia a contenido pagado.
  • Compras en la aplicación (IAP) : la versión de Amazon Underground de su aplicación puede incluir IAP gratuito o ilimitado, siempre y cuando su implementación cumpla con las siguientes pautas:
    • Disponibilidad de elementos de IAP : Todos los elementos de IAP en la versión no subterránea de su aplicación (o elementos equivalentes) deben permanecer en la versión de Amazon Underground de su aplicación para que el cliente tenga la opción de seleccionar de forma gratuita. Esto permite a los clientes ver beneficios inmediatos y entender el valor de “todo gratis”.
    • Desbloqueo de funciones o actualizaciones : para las aplicaciones que utilizan elementos IAP para desbloquear funciones o actualizaciones, asegúrese de que estas características y actualizaciones permanezcan en la aplicación . Un usuario no debe buscar un elemento IAP popular de la versión no subterránea de su aplicación y encontrar que este elemento falta en la versión de Amazon Underground.
  • Anuncios en la aplicación: no puede obligar a los usuarios a ver un anuncio para desbloquear una función o un elemento IAP.
  • Compartición social : no vincule el avance dentro de su aplicación al compartir social. No es posible que su aplicación requiera que un usuario comparta o publique en un sitio de medios sociales para desbloquear una característica o elemento IAP.
  • Progreso del Juego : No implemente lapsos de tiempo o “tiempo de reutilización” para que los clientes de Amazon Underground restrinjan su progreso. Por ejemplo, no requieren que los clientes esperen un cierto número de horas antes de que puedan desbloquear un nuevo nivel.
  • Títulos de Freemium con opción a pagar por la versión libre de anuncios : si su título de freemium incluye un elemento para eliminar anuncios como el único elemento de IAP de la aplicación, su aplicación no se considerará para el programa. Proporcione beneficios adicionales al cliente dentro de la aplicación, como niveles adicionales o moneda dentro de la aplicación.
  • Aplicaciones en segundo plano : no recibirás regalías por el tiempo que la aplicación pase corriendo en segundo plano. Si su aplicación se ejecuta principalmente en segundo plano, es probable que no se considere para Amazon Underground.