martes, 2 de mayo de 2023

La Dieta Neri

La Dieta Neri

Introducción

Sin duda es para muchos seguir y cumplir una dieta de forma estricta y efectiva una de las tareas más arduas, a la altura de gestas como dejar una adicción. No se me ocurren muchos ejemplos más que se puedan comparar con realizar una dieta, pues es algo que requiere gran fuerza de voluntad, y en general, somos capaces de llevar a cabo grandes empresas sin que suponga para nosotros tanto esfuerzo, y esto es, según creo, debido a que seguir unos hábitos alimentarios que van contra nuestros deseos son, excepto cuando se hace por razones médicas, totalmente opcionales, y nos debatimos continuamente con el dilema de saltarla o seguirla. El tema psicológico es, desde mi punto de vista, el más importante a la hora de tener éxito en una dieta, y por este motivo, existen individuos que son capaces de comer libremente durante largos periodos de tiempo para, en un momento determinado, abocarse a una dieta durante ciertos meses, hasta conseguir el objetivo propuesto, y esto lo hacen de forma periódica sin que suponga algo demasiado complicado. En cambio para muchos esto es una quimera, e incluso, para casos como el mio, que me considero una persona con fuerte voluntad, inalcanzable. Múltiples veces he sido capaz de hacer deporte, algo que no me gusta nada, durante largos periodos, logrando tímidas bajadas de peso, pues no era capaz de acompañarlo con nuevos hábitos alimenticios. Del mismo modo he realizados ayunos intermitentes, pero en mi caso, los beneficios obtenidos tras semanas o meses, se han evaporado rápidamente cuando se han abandonado momentáneamente, volviendo al punto de partida.

Insisto en que el aspecto psicológico es primordial, especialmente para casos como el mío, y es por esto que he decidido postear mi seguimiento de la dieta, como mecanismo de compromiso conmigo mismo. Pero esto no puede ser bastante, por supuesto, y esta dieta que pienso seguir durante el tiempo suficiente para poder establecer una opinión formada de su efectividad, está basada profundamente en el aspecto psicológico y neurológico, más que en el número de calorías ingeridas, aunque por supuesto, el hecho de seguir la dieta de forma estricta obliga al que la sigue a comer de forma saludable y baja en calorías. 

Fundamentos

Como decía anteriormente la dieta enfoca el aspecto mental para lograr el éxito, y para ello es necesario comprometerse con uno mismo y ser capaz de no desfallecer antes de tiempo.

Y para comprometerse de lleno uno no puede hacerlo haciendo lo de siempre, es más, es necesario un cambio radical, desde la raíz, para saber marcar de forma clara cuando estamos cumpliendo y cuando no. 

Sin más, comparto el aspecto clave de la dieta, que aunque es breve, es claro y determinado y no puede llevar a confusión: sólo se pueden consumir alimentos sin ningún tipo de procesado, exceptuando el cocinado, ya sea hervido, a la plancha o al horno.

Y cuando me refiero al procesado lo hago de forma amplia, incluyendo en este grupo cualquier alimento que no venga tal como llega a nuestra cocina de la naturaleza. Del mismo modo, entran como procesados cualquier saborizante, como el azúcar o la sal, o cualquier proceso que se produzca, como el exprimido, por lo que dejamos fuera también el aceite de cualquier tipo. 

El asunto de la sal o los edulcorantes, así como cualquier elemento que haga los alimentos más sabroso, es clave, y deben de evitarse no solo por estar procesados. Uno de los objetivos que la dieta persigue es volver a educar a nuestro cerebro, dándole a probar el sabor real de los alimentos, para disfrutar de ellos con el tiempo sin necesidad de aditivos.

Un caso especial es el arroz, ya que el arroz blanco sí tiene un procesado, siendo más adecuado el integral. Sin embargo, puesto que la dieta es rica en fibra, sugiero permitir el arroz hervido. Del mismo modo, y ya que no es recomendable la leche directamente de la ubre de la vaca, se permite la leche entera.

Otra licencia que en mi caso me permito es el café, ya que no veo necesario comprar grano, hornearlo y molerlo yo mismo.

Como observamos, no se hace ningún tipo de restricción en cuanto a calorías, pero claro está que no invita al abuso, al menos al principio. Sí que opino que se debe hacer un control de ingesta de fruta y frutos secos, para no sobrepasarse, así como de las carnes excesivamente grasas, como lo es la panceta. Tampoco se define un número de comidas diarias, por lo que se pueden hacer tanto como el usuario de la dieta prefiera, aunque considero que es importante realizar las 5 comidas recomendadas para no estresar el cuerpo demasiado.

Alimentos permitidos

Entonces consideramos como permitidos los alimentos no procesados, siendo algunos de ellos:
  • Frutas
  • Verduras
  • Carnes
  • Pescados
  • Frutos secos
  • Arroz
  • Leche entera

Alimentos prohibidos

Ya que lo son la mayoría enumeraremos sólo algunos, a modo de ejemplo, y para clarificar:
  • Aceite
  • Sal
  • Azúcar
  • Pasta
  • Embutidos
  • Fiambres
  • Quesos
  • Latas
  • Pan

Observaciones

Dejo en manos de cada uno las variaciones que decida, como por ejemplo, el que yo hago con el café, con el que no veo ahora que pueda prescindir.

Sí que hago énfasis en cambio en las pequeñas trampas en las que podemos caer, en aras de hacer este tránsito más llevadero, e insistir en que no debemos alterar las comidas para hacerlas más sabrosas, puesto que el sabor de los alimentos tal cuál son es clave en la dieta.

Progreso


2-05-2023
Día de inicio de la dieta. Mi peso inicial es de 92 kilos.

12-05-2023
Diez días después los resultados son prometedores. He perdido dos kilos, pasando de 92 a 90, en la primera semana. Después de esos primeros días, y visto que sobrellevar la dieta a largo plazo será más duro de lo esperado, he considerado permitirme algunos cambios. He vuelto a utilizar la sacarina en el café, de una forma muy moderada, aunque espero volver a eliminarla posteriormente. Además, aderezo las verduras y ensaladas con un poco de aceite y sal. Me habré saltado la dieta alrededor de una de cada 5 comidas. Tras la primera semana me preocupa haberme quedado estancado, por lo que estaré atento a los próximos días para ver si sigo con la perdida de peso, y en caso de que no, habré de esforzarme más en no saltarme la dieta tan frecuentemente. 

viernes, 30 de octubre de 2020

Trucos para conseguir recetas sabrosas

 


Cuando quieres impresionar a tus invitados sin duda un buen punto es conquistarlos por el estómago. Una receta adecuada y sabrosa sin duda les dejará en el recuerdo un sentimiento de una velada magnífica. Pero, ¿cómo conseguir que tus platos sean sabrosos? Te damos unos consejos a continuación:

  1. No tengas prisa. El tiempo empleado en la elaboración de una receta es clave a la hora de conseguir un resultado sobresaliente. Sin duda las prisas a la hora de cocinar se notan en el resultado e incluso pueden arruinar un plato que debiera ser selecto. Rehogar ciertos ingredientes menos de lo necesario, freír en aceite que no tiene la temperatura correcta o no dejar reposar el tiempo suficiente pueden echar a perder la receta aunque el producto sea de primera categoría. Por lo tanto tómate tu tiempo para elaborar el plato, escoge el momento adecuado para elaborarlo o, si es para tomar en el momento, que no te importe que tus invitados tengan que esperar un poco. Si el resultado es bueno la espera valdrá la pena.



  2. Escoge bien el producto. Aunque no es esencial que el producto usado sea de la máxima calidad consigue unos ingredientes adecuados y si puede ser de temporada, ya se encontrarán en el punto perfecto para su consumo. Si se trata de carne o pescado desplázate a ese establecimiento que sabes que tienen el mejor producto y consulta con el dependiente cuál es el mejor producto para los fines que persigues. Si tus pretensiones son grandes y tu bolsillo no te lo permite plantéate una receta más asequible a tu presupuesto antes que un plato espectacular pero decepcionante a la hora de consumirlo. Después estará en tus manos sacarle el máximo provecho a la compra realizada y para ello lo más importante es seguir el consejo anterior.


  3. Aprenda como hacerlo. Busque en libros o en Internet la mejor manera de hacer la receta. No improvises ni arriesgues porque puede estropear el plato y el tiempo que le has dedicado. Recuerda que cocinar debe ser un placer tanto cuando se hace como cuando se come, y un resultado inesperado hará que tu ánimo se desmorone. Lee varias recetas en diferentes lugares y elige la más adecuada según tus condiciones particulares, y una vez elegida, síguela sin saltarte pasos ni cambiar el orden ni los ingredientes. Para estar muy seguro de la receta elegida, consulta fuentes fiables, como libros con buenas valoraciones por críticos especializados o blogs o webs con buenas críticas de usuarios que los han elaborado. Consulta los comentarios si los hay para despejar algunas dudas que puedan surgir. Si es una receta que has hecho previamente, no te vendrá mal echarle un vistazo a la receta para que no olvides algún paso o ingrediente importante.


Llegado este punto adelante con tu arte y deslúmbralos con tu comida. Deja que sean ellos los que opinen libremente. No les crees expectativas al respecto para que todo sea una grata sorpresa para el paladar.

Bon Appetit!


lunes, 20 de julio de 2020

Subir, listar y eliminar archivos en AWS S3 desde aplicación de nodejs


En este post intentaré acercar desde mi experiencia el uso de Amazon s3 para el almacenamiento de archivos desde un aplicación de servidor en Node.js. Para ello crearemos una aplicación básica en Express en la que mediante un formulario enviaremos archivos al servidor que se encargará de subirlos a un bucket de S3. Del mismo modo accederemos a nuestro bucket para obtener el listado de los archivos almacenados y eliminaremos los que queramos. Haremos uso de las librerías aws-sdk para acceder a la API de Amazon,  y de Multer para la transferencia de archivos cliente-servidor. Pasaré por alto las explicaciones sobre la creación de la aplicación en sí para centrarme en el uso de la SDK de AWS. Empecemos.

Creando la Aplicación

Necesitaremos instalar tanto Express como Multer y por supuesto la sdk ejecutando desde la terminal el comando siguiente:
	
    npm i express multer aws-sdk
    
Para evitar confusiones dejo aquí abajo las versiones que he utilizado para el ejemplo.

    "aws-sdk": "2.701.0",
    "express": "4.17.1",
    "multer": "1.4.2"

Ahora crearemos el servidor de express, en este ejemplo lo haré de manera básica:

	const express = require("express")

	const app = express()

	app.use(express.static('public'))

	app.get('/', (req, res) => {
            res.render('index')
	})

	app.listen(8000, () => console.log('App in port 8000'))
Lo siguiente es crear nuestra vista 'index.html' donde estará nuestro formulario para cargar los archivos que queramos almacenar en Amazon S3.


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>S3 con Node.js</title>
</head>
<body>
    <form action="/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="uploadFiles" multiple>
        <input type="submit" value="Send">
    </form>
</body>
</html>

 
El formulario enviará los archivos a la ruta POST "/upload" que después crearemos. Le decimos al input que admita varias entradas con el atributo "multiple" y para que pueda procesar los archivos "enctype="multipart/form-data"". Tendremos lo siguiente:

 
Requerimos Multer y lo configuramos para guardar los archivos en una carpeta llamada "uploads":


const multer = require('multer')({
    dest: path.join(__dirname, 'uploads'),
})


De momento mostraremos los archivos cargados:


app.post('/upload', multer.array('uploadFiles'), (reqres=> {
    res.json(req.files)
})



Subiendo archivos a S3

En este punto ya tenemos los archivos en nuestro servidor y los podemos procesar accediendo a ellos mediante el atributo "path". En nuestro caso solo queremos subirlos a nuestro bucket, así que requeriremos la libreria "aws-sdk" y la prepararemos para ello. En este punto ya debemos tener nuesta instancia de S3 creada asi como el bucket y haber obtenido las claves de acceso


const AWS = require('aws-sdk')
const fs = require('fs')

//-> Le pasamos nuestros datos
AWS.config.update({
    accessKeyId: 'nuestra-Key-ID,
    secretAccessKey: 'nuestra-Secret-Key',
    region: 'la región escogida, p.ej: "us-east-1a"
})

Recuerda guardar tus claves siempre en lugar seguro y acceder a ellas mediante variables de entorno. Si vas a compartir tu código en un repo añade el archivo donde tengas las claves (.env) a tu .gitignore.

Ahora modificamos nuestra función de la ruta POST para que al cargarlos en el servidor subirlos directamente a S3:


app.post('/upload', multer.array('uploadFiles'), async (reqres=> {
     
    req.files.forEach(async file => {
        const s3 = new AWS.S3()
        const s3params = {
            Bucket: 'nombre-del-bucket',
            Body: fs.createReadStream(file.path),
            Key: file.originalname
        }
    
        const imageUploaded = await s3.upload(s3params, function (err) {
            if (err) {
                throw new Error("Error"err)
            }
        }).promise()
    
        console.log('imageUploaded', imageUploaded.Location)
    
         fs.unlink(file.path, err => {
            if(err) console.error(err)
        })
    })

    res.send('Files Uploaded')
        
})


Una vez cargados los eliminamos de nuestro servidor con "fs.unlink".

Listando los archivos del bucket

Si vamos a nuestra consola de AWS podremos ver nuestros objetos alojados en ele bucket, pero nosotros queremos mostrarlos en nuestra apicación. Para ello creamos el endpoint correspondiente:


app.get('/objects', (reqres=> {
    res.send('Objects')
})


Pero vamos a devolver un json con los nuestros archivos. Para esto tenemos el método "listObjectsV2". 


app.get('/objects'async (reqres=> {

    const s3 = new AWS.S3()
    const s3params = {
        Bucket: S3_BUCKET_NAME
    }

    const objects = await s3.listObjectsV2(s3params, function(errdata) {
        if(err){
            throw new Error("Error"err)
        }
    }).promise()

    res.json(objects.Contents)

})


Si queremos filtrar los resultados en los parámetros añadiremos "Prefix" con el valor que nos interese. Es decir, si quiero mostrar solo los archivos que he guardado en una carpeta llamada "pdf" nuestro objeto s3params quedará así:

        
const s3params = {
    Bucket: S3_BUCKET_NAME,
    Prefix: 'pdf/'
}

Nuestra vista "/objects" nos debería mostrar un json con la información de los archivos:

[{"Key":"file1.pdf","LastModified":"2020-07-19T08:28:01.000Z","ETag":"\"db07bd7afbd0769aca43b4da1b7d7d41\"","Size":1950,"StorageClass":"STANDARD"}, {"Key":"file2.txt","LastModified":"2020-07-19T08:27:23.000Z","ETag":"\"47f35abe7d9134d156fd1f38a4655d77\"","Size":1962,"StorageClass":"STANDARD"}]


Eliminando archivos

Para eliminar archivos del bucket "aws-sdk" nos ofrece el método "deleteObject". Solo tenemos que pasarle al objeto params el nombre del archivo.

Para simplificarlo crearemos el endpoint y le pasaremos en la ruta el nombre del archivo que queremos eliminar. Nuestro servidor quedaría asi: 


app.get('/delete/:key'async (reqres=> {

    const s3 = new AWS.S3()
    const s3params = {
        Bucket: S3_BUCKET_NAME,
        Key: req.params.key 
    }
    
    await s3.deleteObject(s3params, function(errdata){
        if (err) {
            console.error(err)            
            throw new Error("Error"err)
        }

    }).promise()    

    res.json({ Deleted: req.params.key })
})


 Entonces para eliminar el primer archivo de la lista visitaremos "http://localhost:8000/delete/file1.pdf". Obtendríamos: 

{"Deleted":"file1.pdf"}

Con el método "deleteObjects" (en plural) podemos eliminar varios archivos. la diferencia es que en s3params debemos incluir la llave "Delete: { Objects: "array de objetos" }". Por ejemplo:

           
const s3params = {
    Bucket: S3_BUCKET_NAME,
    Delete: { Objects: [{ Key: key1 }, { Key: key2 }, ...] }
}



Hay muchas más opciones, como eliminar un bucket entero, etc. Para no complicarlo más lo dejaremos así. 

Nada más. Un saludo y comentad abajo cualquier duda que tengáis. Gracias.





sábado, 9 de mayo de 2020

Notch. El hombre detrás de Minecraft.

El 4 de enero Markus Alexej Persson, también conocido como "Notch", lanzaba una pregunta en Twitter a sus seguidores. La cuestión era decidir si realizaba nuevos videojuegos pequeños y gratuitos, o bien iniciaba un nuevo proyecto más ambicioso, un nuevo estudio para el desarrollo de videojuegos más importantes.

El creador de Minecraft se embolsó 2500 millones de dólares cuando Microsoft adquirió el estudio Mojang fundado por el mismo Markus. No solo compraba el popular juego sino también la marca, pues Minecraft es un negocio que va mucho más allá del mundo de los videojuegos y es capaz de generar ingresos con juguetes, ropa, libros y todo tipo de artículos basados en su inmenso universo. Minecraft ha evolucionado increíblemente y sus posibilidades son infinitas. Skins, mods, addons y una multitud de opciones hacen que Minecraft sea más que un juego.

Notch programó su primer videojuego con 8 años y forma parte de la organización de superdotados Mensa. Se ha visto envuelto en ciertas polémicas por declaraciones suyas en redes. Sin entrar en detalle lo cierto es que Microsoft se ha desvinculado totlamente del nombre de Markus Persson.

En cualquier caso, estaremos pendiente de los siguientes pasos de Notch.

viernes, 8 de mayo de 2020

SSL y Https fácil y rápido sin Wordpress ni cPanel

Aprende a obtener un certificado SSL, instalarlo y configurarlo para cualquier aplicación en Nodejs.

Puede ser un auténtico dolor de cabeza y una pérdida de tiempo considerable conseguir que nuestro sitio web luzca con el preciado candadito verde que confirma que nuestra web utiliza el protocolo SSL que asegura la encriptación de la información. En este artículo he querido ofrecer una forma de conseguir https para nuestra web de una forma rápida, sencilla y gratis, así que... al turrón!

Primero debemos estar seguros de que nuestra aplicación está corriendo en el puerto 80 pues será necesario posteriormente para que se pueda acceder a los archivos que posteriormente incluiremos en nuestro proyecto. Una vez sabemos que cumplimos con este requisito seguiremos los siguientes pasos:
  1. Dirígete a "https://sslforfree.com". Ingresa tu nombre de dominio. No es necesario introducir "www" pues lo añadirá por nosotros.


    Clicaremos en "Create Free SSL Certificate". Se nos abrirá una página y deberemos elegir la opción "Manual Verification". Más abajo clicaremos en "Manually Verify Domain" y descargaremos los dos archivos que nos pide.
  2. Ahora debemos incluir estos dos archivos en nuestro proyecto. Estos archivos deben ser accesibles desde el cliente por lo que deben estar en nuestra carpeta pública, generalmente "public" o "static". En la raíz de ésta carpeta crearemos una nueva carpeta cuyo nombre debe ser ".well-known". No olvides el punto inicial. Si tienes problemas para crear esta carpeta en Windows hazlo directamente en tu editor de código. Es posible que esta carpeta no sea visible desde el explorador de archivos si no tienes la opción activada de ver las carpetas ocultas. Dentro de ".well-known" crearemos una nueva carpeta llamada "acme-challenge" que será donde incluyamos los archivos descargados. Si todo lo hemos hecho bien probaremos los enlaces que nos muestra "SSL For Free" un poco más abajo. Al clicar debemos obtener una respuesta del servidor con los archivos.
    Si nos responde un error del tipo "Cannot GET /.well-known/acme-challenge/..." deberemos revisar que hayamos colocado bien los archivos y que sean accesibles.
  3. Si hemos superado el paso anterior ya podemos descargar el certificado dándole al botón "Download SSL Certificate". Ésto nos descargará un .zip con 3 archivos: "private.key", "certificate.crt" y "ca_bundle.crt". Descomprimiremos el zip y los archivos los guardaremos en una carpeta en la raíz de nuestro proyecto (fuera de nuestra carpeta pública) y la llamaremos SSL, por ejemplo. Recuerda incluir esta carpeta en tu .gitignore si subes el proyecto a algún repositorio público como github.
  4. Ahora nos queda configurar nuestra app para que el servidor acceda a nuestros certificados.
          
            const app = require('./server');
            const http = require ('http'); 
            const https = require ('https'); 
            const fs = require('fs');
            const path = require('path');
            
            const private_key = fs.readFileSync(path.join(__dirname, './SSL/private.key'));
            const certificate = fs.readFileSync(path.join(__dirname, './SSL/certificate.crt');
            const ca_bundle = fs.readFileSync(path.join(__dirname, './SSL/ca_bundle.crt'));
          
            https.createServer({ 
                key: private_key, 
                cert: certificate, 
                ca: ca_bundle 
            }, app)
            .listen(443, () => console.log('Server listening on port 443'));
            
            http.createServer((req, res) => {
                res.writeHead(301, { "Location": "https://" + req.headers['host'] + req.url});
                res.end();
            })
            .listen(80, () => console.log('Server listening on port 80');
          
      
    Varias cosas: hemos creado un servidor tanto http como un servidor https al que le hemos pasado nuestra app de express importada de "/server.js". Al servidor https le pasamos como primer parámetro nuestros archivos descargados y guardados, en mi caso, en la carpeta SSL. A nuestro servidor http que escuchará en el puerto 80 le diremos que haga una redirección 301 a nuestro dominio con "https".
  5. No olvidemos abrir nuestro puerto 443 desde nuestro hosting para que se pueda acceder desde Internet. Si hemos hecho las cosas bien nuestra aplicación ya debería aparecer como segura. El certificado tiene 3 meses de duración. Antes de que expire bastará con volver a generar los archivos y sustituirlos por los nuevos. De nuevo totalmente gratis.

    Un saludo y espero que les sirva.