Como cada compañía maneja códigos diferentes para averiguar el número de teléfono, se deben seguir los siguientes pasos si se desea obtener el número de la sim card que tiene actualmente nuestro celular.


1. Identificar el operador telefónico del cual se desea conocer el número, esto debido a que cada operador maneja un código diferente, a continuación se muestra el código a marcar dependiendo del operador telefónico (solo en Colombia).
  • Claro: *611#
  • Tigo: *255*4#
  • Movistar: *#61#
  • Avantel: 85532 (solo mensaje de texto)
  • Móvil Éxito: *255*4#
  • Virgin Colombia: *111*3*3#
  • ETB: *#62#
  • Flash Mobile Colombia: *555#
2. Se debe marcar el código (dependiendo del operador) en el celular y simplemente se oprime el botón de llamada (como si se fuese a llamar a cualquier número, pero en este caso se marca el código correspondiente del operador).
En el caso de Avantel tendrás que enviar un mensaje de texto al 85532 con la palabra numero, sin la tilde.

3. Finalmente, se espera un momento y en el celular se recibe un pequeño mensaje con el número de teléfono. Ejemplo: MSISDN: 3151234567.

Listo eso es todo, mucha suerte y ojalá les sirva esta información.

Fuente:
Hola,

Por si no lo saben, cuando se utiliza Spring Boot este por defecto escribe los logs que se generen mediante la librería: java.util.logging, por la consola del IDE, pero si se desea estos logs se pueden escribir en un fichero.


Al igual que la activación del nivel a DEBUG la configuración para activar el fichero de log sigue el mismo principio de configuración de Spring Boot.

Se debe tener en cuenta que estos ficheros que se crean rotan por defecto cada 10Mb.

Las propiedades para indicar el fichero donde escribir los logs son:
  • logging.file
  • logging.path
Nota:
Esto también aplica para SLF4J (Simple Logging Facade for Java proporciona una API de registro Java a través de un simple patrón de fachada. El servidor de registro subyacente se determina en tiempo de implementación y puede ser java.util.logging, log4j, logback o tinylog.​) mediante el import lombok.extern.slf4j.Slf4j;

El ejemplo funcional que se usará a continuación es con logging.file, en el yaml, se debe escribir el siguiente código:

logging:
file.name: /Users/myNameIs/Documents/pruebaLog.log
pattern:
console: "%d [%t] %-5level %logger{36} - %msg%n"
file: "%d [%t] %-5level %logger{36} - %msg%n"
level:
com.m2evorah: INFO
org.springframework: INFO
org.hibernate: ERROR

Ese bloque de código permite registrar en el archivo los logs de tipo INFO y ERROR. Tengan muy en cuenta la indentación (mover un bloque de texto hacia la derecha insertando espacios o tabuladores, para así separarlo del margen izquierdo y distinguirlo mejor del texto adyacente) en el archivo yaml, porque sino les puede fallar.

La salida del archivo pruebaLog.log es:

[com.prueba.comun.programacion.miaplicacion.utilidades.Utilidades]

2021-02-18 13:06:41,928 [http-nio-0.0.0.0-80-exec-4] INFO c.b.c.s.m.c.PrincipalMain - MS Spring Boot, iniciando la ejecucion de la prueba...

Nota:
Si quieren imprimir otro tipo de nivel en el archivo log, solo deben jugar con los parámetros dentro del level.

Listo, cada vez que el Application del Spring Boot se ejecuta (se despliega la aplicación), se crea el archivo externo donde se almacenan los logs en la ruta definida en el yaml, eso es todo, mucha suerte.

Fuentes:

Hola,

Si requieren saber cuantos años tiene una persona a partir de la fecha de nacimiento en Java, teniendo en cuenta los meses y los años, pueden checkear el siguiente código:




import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.util.*;

/**
* Metodo encargado de a partir de una fecha de nacimiento, obtener los años, meses y días que tiene una persona de nacida.
*
* @param pStrFechaNacimiento Define la fecha de nacimiento
* @param pStrFormatoFechaNac Define el formato de la fecha de nacimiento
* @return un entero con la edad de la persona
*/
public static int obtenerEdadExactaDesdeFechaNacimiento(String pStrFechaNacimiento, String pStrFormatoFechaNac) {

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pStrFormatoFechaNac);
LocalDate fechaNacimiento = LocalDate.parse(pStrFechaNacimiento, dateTimeFormatter);
LocalDate fechaActual = LocalDate.now();

Period periodo = Period.between(fechaNacimiento, fechaActual);

System.out.printf("La edad de la persona es: %s años, %s meses y %s días",
periodo.getYears(), periodo.getMonths(), periodo.getDays());

return periodo.getYears();

}

En donde el parámetro pStrFechaNacimiento hace referencia a la fecha de nacimiento desde la cual se va a obtener la edad, y el parámetro pStrFormatoFechaNac hace referencia al formato de la fecha de nacimiento, por ejemplo: 

pStrFechaNacimiento = "20/06/1993" y pStrFormatoFechaNac = "dd/MM/yyyy"

También funciona pasandolé los parámetros así:

pStrFechaNacimiento = "1993/06/20" y pStrFormatoFechaNac = "yyyy/MM/dd"

Si se desea, se puede adicionar este metodo dentro de un try catch, para controlar las excepciones que puedan ocurrir de tipo ParseException: Unparseable date.
Hola,

Si de pronto han tenido esta duda, aquí les dejo la respuesta más simple y detallada.


Los microservicios son tanto un estilo de arquitectura como un modo de programar software. 

Con los microservicios, las aplicaciones se dividen en sus elementos más pequeños e independientes entre sí. A diferencia del enfoque tradicional y monolítico de las aplicaciones, en el que todo se compila en una sola pieza, los microservicios son elementos independientes que funcionan en conjunto para llevar a cabo las mismas tareas. Cada uno de esos elementos o procesos es un microservicio. 

Este enfoque de desarrollo de software valora el nivel de detalle, la sencillez y la capacidad para compartir un proceso similar en varias aplicaciones. Es un elemento fundamental de la optimización del desarrollo de aplicaciones hacia un modelo nativo de la nube.

Tomado en:



Hola,

Si necesitan insertar un ApiKey en un plan de uso mediante código (en este caso Java) y solo les aparece para hacerlo con CLI (interfaz de línea de comandos de AWS), pueden utilizar el siguiente código, eso sí, deben pasarle el ApiKey y el ID del plan de uso del cual desean obtener los datos.


A nivel del build.gradle va esto:

dependencies {

implementation 'com.amazonaws:aws-lambda-java-core:1.2.0'
/**
* AWS
*/
compile group: 'com.amazonaws', name: 'aws-java-sdk-dynamodb', version: '1.11.789'

compile group: 'software.amazon.awssdk', name: 'core', version: '2.0.0-preview-9'

compile group: 'software.amazon.awssdk', name: 'api-gateway', version: '2.0.0-preview-9'

compile group: 'software.amazon.awssdk', name: 'cognitoidp', version: '2.0.0-preview-9'

compile group: 'com.amazonaws', name: 'aws-java-sdk-ec2', version: '1.11.923'


compile group: 'com.amazonaws', name: 'aws-java-sdk-api-gateway', version: '1.11.923'
compile "org.slf4j:slf4j-simple:1.6.1"

}

A nivel de la clase propia del método, va esto:
import com.amazonaws.regions.Regions;
import com.amazonaws.services.apigateway.AmazonApiGateway;
import com.amazonaws.services.apigateway.AmazonApiGatewayClientBuilder;
import software.amazon.awssdk.core.AwsRequestOverrideConfig;
import software.amazon.awssdk.services.apigateway.APIGatewayClient;
import software.amazon.awssdk.services.apigateway.model.GetApiKeysRequest;
import software.amazon.awssdk.services.apigateway.model.GetApiKeysResponse;
import java.util.logging.Level;
import java.util.logging.Logger;

private static final java.util.logging.Logger log = Logger.getLogger("NombreClaseDelCodigo");

/**
* Metodo encargado de insertar un ApiKey en un plan de uso.
*
* @param pStrApiKey Define el ApiKey del usuario a insertar.
* @param pStrPlanID Define el Id del plan de uso al cual se va insertar el usuario.
*/
public boolean insertarApiKeyEnPlanDeUso(String pStrApiKey, String pStrPlanID) {

try {

/*
* instancia del cliente en amazon
*/
AmazonApiGateway apiGateway = AmazonApiGatewayClientBuilder.standard().withRegion(Regions.US_EAST_1).build();

/*
* se consulta el apikeyid en dynamodb
*/
String apiKeyId = obtenerApiKeyId(pStrApiKey);

/*
* Use existing usage plan
*/
com.amazonaws.services.apigateway.model.CreateUsagePlanKeyRequest usagePlanReq
= new com.amazonaws.services.apigateway.model.CreateUsagePlanKeyRequest();
usagePlanReq.setUsagePlanId(pStrPlanID);//ID del UsagePlan nuevo
usagePlanReq.setKeyId(apiKeyId);//ID del ApiKey del usuario que se va a eliminar del plan
usagePlanReq.setKeyType("API_KEY");

log.log(Level.INFO, "id[{0}] Antes de insertar en el plan de uso con ID: {1} ",
new Object[]{Thread.currentThread().getId(), pStrPlanID});

/*
* adiciona el ApiKey al nuevo plan de uso
*/
apiGateway.createUsagePlanKey(usagePlanReq);

log.log(Level.INFO, "id[{0}] Se inserto el ApiKey: {1} en el plan de uso: {2} exitosamente.",
new Object[]{Thread.currentThread().getId(), strApiKey, strPlanID});

return true;

} catch (Exception exception) {
log.log(Level.WARNING, "id[{0}] Exception en el metodo insertarApiKeyEnPlanDeUso(), la advertencia es: {1} ",
new Object[]{Thread.currentThread().getId(), exception});
}

return false;

}
Hola,
Si alguna vez han escuchado sobre la marca de Caín y no saben que es, aquí les dejo esta pequeña entrada.

¿Qué es la Marca de Caín?

En el cristianismo, la maldición de Caín y la marca de Caín se refieren a los pasajes bíblicos del capítulo 4 del Libro del Génesis, donde Dios declaró que Caín, el primogénito de Adán y Eva, estaba maldito y colocó sobre él una marca como señal de que el que osara matarlo o lastimarlo provocaría la ira de Dios.


Referencias bíblicas

La Biblia se refiere a la maldición de Caín en el capítulo cuarto del Libro del Génesis. En este capítulo se habla de Caín y Abel, hijos de Adán y Eva. Caín, el mayor, araba los campos mientras que Abel cuidaba rebaños. Finalmente cada uno de los dos hermanos hizo un sacrificio a Dios; Caín sacrificó el fruto de su cosecha y Abel sacrificó los mejores animales de su rebaño. Como Dios aceptó el sacrificio de Abel, ​pero no así la ofrenda de Caín, éste se enojó muchísimo y mató a Abel en el campo. Cuando Dios pidió explicación a Caín por la muerte de Abel, Dios le maldijo diciendo :

¿Qué has hecho? La voz de la sangre de tu hermano clama a mí desde la tierra. Ahora pues, maldito seas tú de la tierra, que abrió su boca para recibir de tu mano la sangre de tu hermano. Cuando labres la tierra, no te volverá a dar su fuerza; errante y vagabundo serás en la tierra.
Gen. 4:10-12​

En un acto de ironía la maldición de Dios estaba dirigida estrictamente a arrebatar a Caín el beneficio de su principal habilidad, la agricultura. Cuando Caín afirmó que cualquiera que lo encontrara lo mataría, Dios le respondió: 'No será así; si alguien mata a Caín, será vengado siete veces. Y Dios puso una marca en Caín para que quien quiera que se encontrase con él no lo matara y así fue.​ Así Caín se alejó de la presencia del Señor y se fue a vivir a la región llamada Nod, al oriente de Edén.​

Interpretaciones a lo largo de los siglos III y XIX
  • De acuerdo con algunos investigadores algunas de las primeras interpretaciones de la Biblia en el cristianismo sirio combinaban la maldición y la marca de Caín, e interpretaban la maldición como la piel negra.​ Interpretaban que al sentirse Caín rechazado y según el texto bíblico “su rostro se ensombreció” y que el cambio de color de la piel de Caín se hizo permanente.
  • Efrén el Sirio (306-378) afirma que Abel era brillante como la luz/pero su asesino (Caín) era oscuro como la oscuridad.
  • En el cristianismo armenio, en el llamado “Libro de Adán” (siglo V-VI d. C.) está escrito: Y el Señor estaba enfurecido con Caín. Tocó el rostro de Caín con lluvia, que se ennegreció como carbón, y su rostro se quedó negro.​
  • El libro irlandés Saltair na Rann (El Salterio en Verso, 988) muestra al arcángel Gabriel anunciando a Adán El oscuro e irresponsable Caín va a matar a Abel​.
  • Según la beata y mística católica Anne Catherine Emmerich: “Los descendientes se hicieron cada vez más oscuros. Los hijos de Ham, hijo de Noé, eran más morenos que los de Shem. Las razas más nobles son siempre de color más claro. Quienes heredaron la marca (de Caín) engendraban hijos con la misma marca, y a medida que su corrupción se incrementaba, la marca también se incrementó hasta cubrir todo el cuerpo y la gente se volvió cada vez más oscura. Pero al principio no existía gente completamente negra, las personas se volvieron negras progresivamente”.

Hola,

Si de pronto te has preguntado que significa aceptar las cookies en una página web, la respuesta es la siguiente:



Al aceptar las cookies se esta permitiendo que la página o sitio web tome datos como:

  • el idioma del navegador, 
  • los intereses en función de la ubicación, 
  • guardar o no el usuario, entre otros... 

En la actualidad las páginas están obligadas a mostrar un mensaje de advertencia, donde indican que el sitio web puede utilizar cookies para funcionar correctamente.

El objetivo principal de las cookies es recopilar datos de los visitantes para fines estadísticos, ofrecer determinados servicios y principalmente conocer mejor al usuario que ingresa en el sitio web.

Basado en:

https://www.redeszone.net/tutoriales/internet/que-es-aceptar-cookies-web/


Hola,

Si necesitan eliminar un ApiKey de un plan de uso mediante código (en este caso Java) y solo les aparece para hacerlo con CLI (interfaz de línea de comandos de AWS), pueden utilizar el siguiente código, eso sí, deben pasarle el ApiKey y el ID del plan de uso del cual desean obtener los datos.


A nivel del build.gradle va esto:

dependencies {

implementation 'com.amazonaws:aws-lambda-java-core:1.2.0'
/**
* AWS
*/
compile group: 'com.amazonaws', name: 'aws-java-sdk-dynamodb', version: '1.11.789'

compile group: 'software.amazon.awssdk', name: 'core', version: '2.0.0-preview-9'

compile group: 'software.amazon.awssdk', name: 'api-gateway', version: '2.0.0-preview-9'

compile group: 'software.amazon.awssdk', name: 'cognitoidp', version: '2.0.0-preview-9'

compile group: 'com.amazonaws', name: 'aws-java-sdk-ec2', version: '1.11.923'


compile group: 'com.amazonaws', name: 'aws-java-sdk-api-gateway', version: '1.11.923'
compile "org.slf4j:slf4j-simple:1.6.1"

}

A nivel de la clase propia del método, va esto:
import com.amazonaws.regions.Regions;
import com.amazonaws.services.apigateway.AmazonApiGateway;
import com.amazonaws.services.apigateway.AmazonApiGatewayClientBuilder;
import software.amazon.awssdk.core.AwsRequestOverrideConfig;
import software.amazon.awssdk.services.apigateway.APIGatewayClient;
import software.amazon.awssdk.services.apigateway.model.GetApiKeysRequest;
import software.amazon.awssdk.services.apigateway.model.GetApiKeysResponse;
import java.util.logging.Level;
import java.util.logging.Logger;

private static final java.util.logging.Logger log = Logger.getLogger("NombreClaseDelCodigo");

/**
* Metodo encargado de eliminar un ApiKey de un plan de uso.
*
* @param pStrApiKey Define el ApiKey a eliminar.
* @param pStrPlanID Define el Id del plan de uso que se va a eliminar.
*/
public boolean eliminarApiKeyDePlanUso(String pStrApiKey, String pStrPlanID) {

try {

/*
* instancia del cliente de Amazon
*/
AmazonApiGateway apiGateway = AmazonApiGatewayClientBuilder.standard().withRegion(Regions.US_EAST_1).build();

/*
* se consulta el apikeyid en DynamoDB
*/
String apiKeyId = this.obtenerApiKeyId(pStrApiKey);

com.amazonaws.services.apigateway.model.DeleteUsagePlanKeyRequest deleteRequest =
new com.amazonaws.services.apigateway.model.DeleteUsagePlanKeyRequest();
deleteRequest.setKeyId(apiKeyId);//ID del ApiKey del usuario que se va a eliminar del plan
deleteRequest.setUsagePlanId(pStrPlanID);//ID del UsagePlan que se va a eliminar

/*
* elimina el usuario del plan de uso
*/
apiGateway.deleteUsagePlanKey(deleteRequest);

log.log(Level.INFO, "id[{0}] Se elimino el ApiKey: {1} del plan de uso: {2} exitosamente.",
new Object[]{Thread.currentThread().getId(), pStrApiKey, pStrPlanID});

return true;

} catch (Exception exception) {
log.log(Level.WARNING, "id[{0}] Exception en el metodo eliminarApiKeyDePlanUso(), " +
"la advertencia es: {1} ",
new Object[]{Thread.currentThread().getId(), exception});
}

return false;

}