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;

}


Hola,

Si necesitan consultar el id de un ApiKey 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.


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 obtener los datos de un ApiKey, como el Id.
*
* @param pStrValorApiKey Define el valor del Apikey
* @return un String
*/
@Override
public String obtenerApiKeyId(String pStrValorApiKey) throws BusinessException {

try (APIGatewayClient apiGatewayClient = APIGatewayClient.create()) {

AwsRequestOverrideConfig awsRequestOverrideConfig = AwsRequestOverrideConfig.builder().build();
GetApiKeysRequest apiKeyRequest = GetApiKeysRequest.
builder().limit(1000000).includeValues(true).requestOverrideConfig(awsRequestOverrideConfig).build();

GetApiKeysResponse getApiKeyResponse = apiGatewayClient.getApiKeys(apiKeyRequest);

for (int i = 0; i < getApiKeyResponse.items().size(); i++) {
if (getApiKeyResponse.items().get(i).value().equals(pStrValorApiKey)) {
return getApiKeyResponse.items().get(i).id();
}
}

}

throw new BusinessException("Error consultando los datos del ApiKey: " + pStrValorApiKey);

}
Hola,

Este fin de semana estaba viendo la increíble película Tenet de Christopher Nolan, la cual acaba de salir y hablaron sobre la paradoja del abuelo, entonces decidí profundizar mas a fondo sobre ella y a continuación les comparto por aquí, lo que encontré:


¿Qué es la paradoja del abuelo?

Se parte del supuesto de que una persona realiza un viaje a través del tiempo y mata al padre biológico de su padre/madre biológico (abuelo del viajero), antes de que este conozca a la abuela del viajero y puedan concebir. Entonces, el padre/madre del viajero (y por extensión, ese viajero) nunca habrá sido concebido, de tal manera que no habrá podido viajar en el tiempo; al no viajar al pasado, su abuelo entonces no es asesinado, por lo que el hipotético viajero sí es concebido; entonces sí puede viajar al pasado y asesinar a su abuelo, pero no sería concebido, y así indefinidamente.

Una variante de la paradoja del abuelo es la paradoja de Hitler o la paradoja del asesinato de Hitler, un tropo bastante frecuente en la ciencia ficción, en el que el protagonista viaja en el tiempo para asesinar a Adolf Hitler antes de que este provoque la Segunda Guerra Mundial. Esto no impide necesariamente el mismo viaje en el tiempo pero dicho asesinato, al conseguir evitar la Segunda Guerra Mundial, elimina precisamente el motivo para dicho viaje y también elimina el conocimiento de la utilidad de dicho viaje. De no haber existido la Segunda Guerra Mundial, entonces no habría motivo para viajar al pasado para matar a Hitler. Además, las consecuencias de la existencia de Hitler son tan grandes y globales que, para cualquier persona nacida después de la guerra, es probable que su nacimiento haya sido influenciado de alguna manera por sus efectos, y, por lo tanto, la paradoja del abuelo se aplicaría directamente de alguna manera. 

Posible solución:

Para solucionar esta paradoja se parte de que la materia física viaja tanto en el espacio como en el tiempo. Pero en el caso probable que pudieras viajar a un tiempo superior a años, según el trabajo publicado en la revista Classical and Quantum Gravity, vio 36, Number 20, tu cuerpo físico que llamaremos yo 0, Y0, sometido al cambio de pasar desde un extremo al otro de mundo distintos ya te convierte en otro yo, Y1 y viajarías al pasado, qué llamaremos P0. Si en ese pasado P0, matas a tu abuelo, no significa que no vas a existir en el futuro que llamaremos F0. Existes porque vienes del futuro F0 y existes en ese futuro F0, con el Y0, hasta que vas al pasado P0. A continuación se cambia desde ese momento tanto el pasado al que viajas como el futuro de donde viniste. El futuro F0 sigue sin ti y se convierte en Futuro 1, F1 y tú eres tú pero con otra apariencia física Y1 y empiezas a crear un nuevo pasado P1 que desembocará en otro futuro distinto tanto del F0 como del F1 y llamémoslo F2. Tú no podrás coexistir en varios futuros ni te podrás encontrar con tu otro yo, pues sólo hay un original que irá cambiando físicamente que va de allí para allá creando vidas distintas. Si intentaras regresar al futuro F0, volverías a sufrir cambios en tu propio yo, serías un Yo 2, Y2 ,situado en el mismo momento donde lo dejaste, y el futuro ya no será ni F0, ni F1, ni F2, será F3, es otro distinto, y te encontrarás con una realidad diferente con un yo modificado a cuando viajaste por primera vez y no sabras cuál será porque nunca estuviste ahí. El futuro seguirá siendo futuro eternamente y no podrás saber qué pasará.

Fuente:

https://es.wikipedia.org/wiki/Paradoja_del_viaje_en_el_tiempo