+-

Mensajes recientes

#1
En este tutorial, aprenderemos a crear botones con efecto magnético que siguen al puntero del ratón y cuentan con animaciones atractivas al pasar el cursor. También implementaremos un efecto parallax para darle más dinamismo a la animación.



Paso 1: Estructura HTML

Primero, necesitamos crear la estructura básica del HTML para los botones.

html
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Botones Magnéticos con Efecto Parallax</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="button-container">
        <button class="magnetic-button">¡Haz clic aquí!</button>
    </div>
    <script src="script.js"></script>
</body>
</html>

Paso 2: Estilos CSS

Vamos a agregar los estilos necesarios para nuestros botones y las animaciones.

css
/* styles.css */
body {
    margin: 0;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: #f0f0f0;
}

.button-container {
    position: relative;
}

.magnetic-button {
    padding: 15px 30px;
    border: none;
    background-color: #ff6f61;
    color: white;
    font-size: 16px;
    font-weight: bold;
    border-radius: 5px;
    cursor: pointer;
    position: relative;
    overflow: hidden;
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.magnetic-button::before {
    content: '';
    position: absolute;
    top: 50%;
    left: 50%;
    width: 150%;
    height: 150%;
    background-color: rgba(0, 0, 0, 0.2);
    border-radius: 50%;
    transform: translate(-50%, -50%);
    transition: transform 0.3s ease;
    z-index: 0;
}

.magnetic-button:hover {
    transform: scale(1.1);
    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3);
}

.magnetic-button:hover::before {
    transform: translate(-50%, -50%) scale(1.3);
}

Paso 3: Funcionalidad JavaScript

Ahora, agregaremos la funcionalidad para que el botón siga el puntero del ratón.

javascript
// script.js
document.addEventListener('DOMContentLoaded', () => {
    const button = document.querySelector('.magnetic-button');

    document.addEventListener('mousemove', (event) => {
        const { clientX: mouseX, clientY: mouseY } = event;
        const { offsetLeft: buttonX, offsetTop: buttonY, offsetWidth: buttonWidth, offsetHeight: buttonHeight } = button;

        const buttonCenterX = buttonX + buttonWidth / 2;
        const buttonCenterY = buttonY + buttonHeight / 2;

        const deltaX = mouseX - buttonCenterX;
        const deltaY = mouseY - buttonCenterY;

        const maxOffset = 20;
        const offsetX = Math.max(-maxOffset, Math.min(maxOffset, deltaX / 10));
        const offsetY = Math.max(-maxOffset, Math.min(maxOffset, deltaY / 10));

        button.style.transform = `translate(${offsetX}px, ${offsetY}px)`;
    });
});

Explicación del Código

- HTML: Creamos una estructura básica con un botón dentro de un contenedor.
- CSS: Definimos los estilos para el botón, incluyendo el efecto de sombra y las animaciones al pasar el cursor.
- JavaScript: Implementamos la funcionalidad para que el botón siga el puntero del ratón. El cálculo del desplazamiento se realiza en base a la posición del ratón y la posición del botón.

¡Y eso es todo! Ahora tienes botones magnéticos que siguen al puntero del ratón y cuentan con animaciones atractivas y un efecto parallax. Puedes ajustar los estilos y el comportamiento según tus necesidades para crear efectos personalizados. ¡Diviértete experimentando!
#2
avatar_BarbaraEberle
Diseño digital / Crear un Fondo con Degradado V...
Último mensaje por BarbaraEberle - Jul 24, 2024
Paso 1: Crear o Conseguir el GIF de Ruido Estático
1. Crear el GIF:
   - Si prefieres hacerlo tú mismo, puedes usar herramientas como Photoshop o generadores de GIF en línea para crear un GIF animado que simule ruido estático.
   - Si prefieres descargar un GIF, busca "static noise GIF" en internet y asegúrate de tener los derechos de uso.

2. Subir el GIF a tu Servidor:
   - Sube el archivo GIF al directorio de imágenes de tu tema en Thirty Bees. Por ejemplo, podrías subirlo a `themes/tu-tema/img/`.

Paso 2: Añadir el Fondo Degradado y el GIF al CSS
1. Accede al Archivo CSS de tu Tema:
   - Ve al archivo principal de estilos CSS de tu tema. Esto suele estar en `themes/tu-tema/assets/css/custom.css` o similar.

2. Añadir el Código CSS:
   - Añade el siguiente código CSS para aplicar el fondo:

css
   body {
     background-image: url("../img/noise.gif"), radial-gradient(circle, rgb(242, 251, 248) 0%, rgb(248, 254, 252) 100%);
     background-size: cover;
     background-repeat: no-repeat;
     background-blend-mode: overlay;
   }
   

   - Explicación del código:
     - `background-image`: Combina el GIF de ruido estático y el degradado radial verde.
     - `url("../img/noise.gif")`: Especifica la ruta al GIF. Ajusta esta ruta según la ubicación del archivo.
     - `radial-gradient(circle, rgb(242, 251, 248) 0%, rgb(248, 254, 252) 100%)`: Crea un degradado radial con tonos verdes muy suaves.
     - `background-size: cover`: Asegura que el fondo cubra toda la pantalla.
     - `background-repeat: no-repeat`: Evita la repetición de la imagen de fondo.
     - `background-blend-mode: overlay`: Mezcla los dos fondos, permitiendo que el GIF de ruido se superponga al degradado.

Paso 3: Verificar y Ajustar
1. Verifica tu Sitio:
   - Accede a tu sitio para ver el fondo en acción. Verifica cómo se ve en diferentes dispositivos y navegadores para asegurarte de que el efecto sea consistente.

2. Ajustes Adicionales:
   - Si el ruido estático es demasiado fuerte o demasiado débil, puedes ajustar la opacidad del GIF o cambiar los colores del degradado en el CSS.

¡Y eso es todo! Ahora tendrás un fondo con un suave degradado verde y un efecto de ruido estático animado para darle un toque único a tu sitio de Thirty Bees.
#3
1. Introducción

En este tutorial, aprenderás cómo agregar efectos visuales avanzados como distorsión y desenfoque a elementos HTML utilizando CSS. También aprenderás a manejar la visibilidad de pseudo-elementos durante estos efectos.

2. Efecto de Distorsión

El efecto de distorsión puede lograrse utilizando la propiedad `transform` junto con animaciones CSS. Aquí está el código base para una animación de distorsión:

css
@keyframes distortion {
  0% {
    transform: scale(1) skew(0deg, 0deg);
  }
  25% {
    transform: scale(1.05) skew(1deg, -1deg);
  }
  50% {
    transform: scale(1) skew(-1deg, 1deg);
  }
  75% {
    transform: scale(1.05) skew(1deg, 0deg);
  }
  100% {
    transform: scale(1) skew(0deg, 0deg);
  }
}

Esta animación `distortion` aplica una serie de transformaciones de escala y sesgo (`skew`) en un ciclo de 0.3 segundos, lo que crea un efecto de distorsión en el elemento al que se aplica.

3. Aplicación del Efecto de Distorsión en Enlaces

Para aplicar esta animación a un elemento, como un enlace, puedes hacerlo en el estado `hover` del enlace:

css
.producttags a:hover {
    color: black;
    background: #fce4cc;
    text-decoration: none;
    animation: distortion 0.3s ease-in-out; /* Aplica la animación de distorsión */
}

4. Controlando la Visibilidad de Pseudo-elementos (`::before` y `::after`)

Si quieres que los pseudo-elementos desaparezcan durante el efecto de distorsión, puedes usar la propiedad `opacity` o `visibility` en el estado `hover`. Aquí está el código:

css
.producttags a:before,
.producttags a:after {
    content: "";
    position: absolute;
    /* Estilos adicionales */
    transition: opacity 0.3s ease-in-out; /* Transición para suavizar la desaparición */
}

.producttags a:hover:before,
.producttags a:hover:after {
    opacity: 0; /* O utiliza visibility: hidden; */
}

5. Efecto de Desenfoque

Para aplicar un efecto de desenfoque, puedes usar la propiedad `backdrop-filter`. Esta propiedad funciona bien con pseudo-elementos para crear un desenfoque detrás de un elemento.

css
.producttags a:hover::after {
    backdrop-filter: blur(10px); /* Aplica desenfoque */
}

6. Ejemplo Completo

Aquí está un ejemplo completo que integra todos los conceptos:

css
@keyframes distortion {
  0% {
    transform: scale(1) skew(0deg, 0deg);
  }
  25% {
    transform: scale(1.05) skew(1deg, -1deg);
  }
  50% {
    transform: scale(1) skew(-1deg, 1deg);
  }
  75% {
    transform: scale(1.05) skew(1deg, 0deg);
  }
  100% {
    transform: scale(1) skew(0deg, 0deg);
  }
}

.producttags {
    list-style: none;
    position: relative;
    clear: both;
    display: block;
    padding-bottom: 20px;
    margin-bottom: 20px;
}

.producttags li, .producttags a {
    float: left;
    height: 24px;
    line-height: 24px;
    position: relative;
    font-size: 11px;
}

.producttags a {
    margin-left: 20px;
    padding: 0 10px 0 12px;
    background: black;
    color: white;
    text-decoration: none;
    border-bottom-right-radius: 4px;
    border-top-right-radius: 4px;
    position: relative;
    overflow: hidden;
}

.producttags a:visited {
    color: #fce4cc;
}

.producttags a:before,
.producttags a:after {
    content: "";
    position: absolute;
    top: 0;
    left: -12px;
    width: 0;
    height: 0;
    border-color: transparent black transparent transparent;
    border-style: solid;
    border-width: 12px 12px 12px 0;
    transition: opacity 0.3s ease-in-out; /* Transición para suavizar la desaparición */
}

.producttags a:after {
    background: #fff;
    border-radius: 2px;
    box-shadow: -1px -1px 2px #004977;
}

.producttags a:hover {
    color: black;
    background: #fce4cc;
    text-decoration: none;
    animation: distortion 0.3s ease-in-out; /* Aplica la animación de distorsión */
}

.producttags a:hover:before,
.producttags a:hover:after {
    opacity: 0; /* Pseudo-elementos se hacen invisibles durante el efecto de distorsión */
}

7. Conclusión

Con estos pasos, has aprendido a aplicar efectos visuales avanzados como distorsión y desenfoque en tus elementos HTML utilizando CSS. Estos efectos pueden hacer que tus interfaces sean más interactivas y visualmente atractivas. Recuerda siempre probar y ajustar los efectos para asegurarte de que funcionen correctamente en todos los navegadores y dispositivos.
#4
avatar_MCE. Mauricio Eberle Morales
Data Analytics / AWStats
Último mensaje por MCE. Mauricio Eberle Morales - Jul 23, 2024
AWStats es una herramienta gratuita, poderosa y completa que genera estadísticas avanzadas de servidores web, de streaming, FTP o de correo de manera gráfica. Este analizador de logs funciona tanto como CGI como desde la línea de comandos, mostrándote toda la información posible que contienen tus logs en unas pocas páginas web gráficas. Utiliza un archivo de información parcial para poder procesar archivos de log grandes, de manera frecuente y rápida. Puede analizar archivos de log de las principales herramientas de servidor como Apache (formatos de log NCSA combinado/XLF/ELF o común/CLF), WebStar, IIS (formato de log W3C) y muchos otros servidores web, proxy, WAP, de streaming, de correo y algunos servidores FTP.

Requisitos Previos

- Acceso al servidor con permisos para instalar software y modificar configuraciones.
- Acceso a los archivos de log del servidor.
- Un servidor web que soporte Perl y CGI.

Instalación de AWStats

1. Descargar AWStats:
   - Ve al [sitio web de AWStats](https://www.awstats.org/) y descarga la última versión estable de AWStats.

2. Descomprimir el Archivo:
   - Extrae el archivo descargado en el directorio deseado en tu servidor.

3. Configurar el Servidor Web:
   - Asegúrate de que tu servidor web soporte Perl y CGI. Configura el servidor web para permitir la ejecución de scripts CGI desde el directorio donde has extraído AWStats.

4. Configurar AWStats:
   - Crea un archivo de configuración para AWStats copiando el archivo de ejemplo `awstats.model.conf` a un nuevo archivo con el nombre de tu sitio, por ejemplo, `awstats.misitio.conf`.
   - Edita el archivo de configuración con los parámetros de tu servidor. Asegúrate de definir la ubicación de tus archivos de log y las configuraciones específicas para el tipo de log que estás utilizando (Apache, IIS, etc.).

5. Actualizar Permisos:
   - Asegúrate de que los permisos del archivo de configuración y los directorios sean correctos para que el servidor web pueda acceder a ellos.

Uso de AWStats

Desde la Línea de Comandos

1. Ejecutar AWStats:
   - Utiliza el siguiente comando para actualizar los archivos de estadísticas:
     
     
perl awstats.pl -config=misitio -update
     
   - Reemplaza `misitio` con el nombre de tu configuración.

2. Ver Resultados:
   - Una vez que se complete el proceso, puedes visualizar los resultados en el directorio donde AWStats guarda los archivos generados, típicamente en `awstats.misitio.html`.

Como CGI

1. Acceder a AWStats Desde el Navegador:
   - Abre tu navegador y navega hasta la URL donde has configurado AWStats como CGI. Esto suele ser algo como `http://tu-dominio.com/cgi-bin/awstats.pl?config=misitio`.

2. Ver Estadísticas:
   - En la interfaz web de AWStats, podrás ver una variedad de gráficos y estadísticas sobre el tráfico de tu sitio web, visitas, referencias, y mucho más.

Comparativa de Herramientas de Estadísticas

Si estás considerando otras herramientas de análisis de logs, como Analog o Webalizer, puedes consultar la [tabla comparativa de herramientas de estadísticas](https://www.awstats.org/) para obtener una idea sobre las características y diferencias entre las herramientas más famosas.

Licencia

AWStats es software libre distribuido bajo la [Licencia Pública General de GNU](https://www.gnu.org/licenses/gpl.html). Puedes revisar esta licencia para entender qué puedes o no puedes hacer con el software.

Conclusión

AWStats es una herramienta robusta y flexible para el análisis de logs, compatible con una amplia gama de servidores y formatos de log. Tanto si prefieres trabajar desde la línea de comandos como a través de una interfaz CGI, AWStats puede proporcionar una visión detallada de las estadísticas de tu servidor.

Para más detalles y soporte, consulta la [documentación oficial de AWStats](https://www.awstats.org/).
#5
Identificamos proyectos específicos dentro de nuestra empresa donde los estudiantes pueden contribuir de manera significativa y creamos descripciones detalladas de los roles y responsabilidades. Lanzamos convocatorias de prácticas profesionales a través de los canales de comunicación de la universidad, realizando entrevistas y evaluaciones para seleccionar a los estudiantes más adecuados.

Diseñamos programas de formación y capacitación inicial, además de asignar mentores que guían y apoyan a los estudiantes durante sus prácticas. Proveemos a los estudiantes con las herramientas y tecnologías necesarias, incluyendo acceso a plataformas de colaboración y gestión de proyectos, y asignamos espacios físicos o virtuales según sea necesario.

Establecemos contratos de prácticas profesionales que especifican la duración, responsabilidades y condiciones, ofreciendo opciones de medio tiempo o tiempo completo según la disponibilidad y necesidades de los estudiantes. Implementamos un sistema de seguimiento continuo para monitorear el desempeño y el progreso de los proyectos, realizando evaluaciones periódicas para proporcionar retroalimentación.

Para mantener una comunicación abierta, establecemos canales claros entre los estudiantes, sus mentores y los equipos de proyecto, organizando reuniones regulares para discutir avances, desafíos y oportunidades de mejora. Finalmente, brindamos a los estudiantes la oportunidad de adquirir experiencia práctica en sus campos de estudio, facilitando el desarrollo de habilidades técnicas y blandas, y considerando la posibilidad de ofrecer empleo a tiempo completo a los estudiantes destacados al finalizar sus prácticas.

Implementar este programa no solo beneficiará a los estudiantes de la Universidad IBERO Laguna al proporcionarles valiosa experiencia laboral, sino que también contribuirá al éxito de nuestros proyectos de nearshoring mediante la incorporación de talento joven y motivado. Estamos comprometidos a crear una experiencia enriquecedora y productiva para todos los participantes y esperamos con entusiasmo esta colaboración.

¡Espero que esta estrategia les sea útil y me encantaría escuchar sus opiniones y sugerencias!
#6
Crear un proyecto de alfabetización digital es una excelente manera de ayudar a las personas a desarrollar las habilidades necesarias para navegar y aprovechar las tecnologías digitales en sus vidas personales y profesionales. Aquí te presento un plan detallado para un proyecto de alfabetización digital.

Objetivo:
Proporcionar habilidades digitales esenciales a personas de todas las edades, con un enfoque especial en comunidades vulnerables y adultos mayores, para mejorar su calidad de vida y oportunidades laborales.

Público objetivo:
1. Adultos mayores
2. Personas de comunidades vulnerables
3. Desempleados que buscan mejorar sus habilidades para el empleo
4. Pequeños emprendedores y comerciantes

Componentes del Proyecto:

1. Evaluación de Necesidades:
   - Realizar encuestas y entrevistas en la comunidad para entender las necesidades y niveles actuales de alfabetización digital.
   - Identificar las barreras de acceso a la tecnología y al internet.

2. Diseño del Currículo:
   - Nivel Básico:
     - Introducción a las computadoras y dispositivos móviles
     - Uso básico de internet y correo electrónico
     - Seguridad en línea y protección de datos personales
   - Nivel Intermedio:
     - Uso de aplicaciones de oficina (Word, Excel, PowerPoint)
     - Redes sociales y comunicación en línea
     - Herramientas de búsqueda de empleo en línea
   - Nivel Avanzado:
     - Marketing digital y creación de contenido
     - Comercio electrónico y gestión de tiendas en línea
     - Programación básica y uso de plataformas de aprendizaje en línea

3. Implementación:
   - Clases Presenciales:
     - Establecer centros comunitarios con acceso a computadoras y conexión a internet.
     - Ofrecer talleres y cursos regulares con instructores capacitados.
   - Plataforma en Línea:
     - Crear una plataforma educativa con recursos en línea, videos tutoriales y foros de discusión.
     - Ofrecer cursos en línea y webinars en vivo.

4. Recursos y Materiales:
   - Guías y manuales impresos y digitales
   - Videos tutoriales y material interactivo
   - Acceso a software educativo y herramientas en línea

5. Capacitación de Instructores:
   - Reclutar y capacitar a voluntarios y educadores en metodologías de enseñanza digital.
   - Proporcionar recursos y apoyo continuo a los instructores.

6. Evaluación y Seguimiento:
   - Implementar evaluaciones periódicas para medir el progreso de los participantes.
   - Recopilar feedback para mejorar los cursos y adaptar el contenido a las necesidades cambiantes.
   - Realizar un seguimiento de los participantes para medir el impacto a largo plazo del proyecto.

7. Promoción y Difusión:
   - Campañas de concienciación en la comunidad mediante redes sociales, radio y medios locales.
   - Colaboración con organizaciones locales, gobiernos y empresas para ampliar el alcance del proyecto.

8. Sostenibilidad:
   - Buscar financiamiento a través de subvenciones, donaciones y patrocinadores.
   - Fomentar la participación voluntaria y la colaboración comunitaria.
   - Establecer una red de apoyo y mentoría para los participantes.

Nombre del Proyecto:
ConectaTech: Alfabetización Digital para Todos

Eslogan:
"Empoderando a las comunidades con habilidades digitales para el futuro"

Este proyecto puede ayudar a cerrar la brecha digital y proporcionar herramientas valiosas para mejorar la vida de muchas personas. ¿Te gustaría agregar algún detalle específico o adaptar este plan a una comunidad particular?
#7
Implementar la autenticación de dos factores (2FA) en una aplicación web utilizando Python y Flask. Este tutorial cubrirá los siguientes pasos:

  • Configuración del entorno.
  • Creación de una aplicación Flask básica.
  • Implementación del registro y el inicio de sesión de usuarios.
  • Integración de la autenticación de dos factores usando un autenticador de tiempo basado en tokens (TOTP).

1. Configuración del entorno
Primero, necesitas instalar algunas dependencias. Asegúrate de tener Python y pip instalados en tu sistema. Luego, instala Flask y otras bibliotecas necesarias.

pip install Flask Flask-SQLAlchemy Flask-WTF pyotp qrcode[pil]

2. Creación de una aplicación Flask básica
Crea una estructura de directorios básica para tu aplicación Flask:

your_project/
    app.py
    templates/
        base.html
        login.html
        register.html
        two_factor.html
    static/

app.py

from flask import Flask, render_template, redirect, url_for, request, flash, session
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length, EqualTo
import pyotp
import qrcode
import qrcode.image.svg
from io import BytesIO

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(150), nullable=False, unique=True)
    password = db.Column(db.String(150), nullable=False)
    otp_secret = db.Column(db.String(16), nullable=False)

class RegistrationForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired(), Length(min=2, max=150)])
    password = PasswordField('Password', validators=[DataRequired(), Length(min=6)])
    confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
    submit = SubmitField('Register')

class LoginForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])
    submit = SubmitField('Login')

class TwoFactorForm(FlaskForm):
    token = StringField('Token', validators=[DataRequired()])
    submit = SubmitField('Verify')

@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        otp_secret = pyotp.random_base32()
        new_user = User(username=form.username.data, password=form.password.data, otp_secret=otp_secret)
        db.session.add(new_user)
        db.session.commit()
        flash('Account created! Please log in.', 'success')
        return redirect(url_for('login'))
    return render_template('register.html', form=form)

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(username=form.username.data).first()
        if user and user.password == form.password.data:
            session['username'] = user.username
            session['otp_secret'] = user.otp_secret
            return redirect(url_for('two_factor'))
        else:
            flash('Login Unsuccessful. Please check username and password', 'danger')
    return render_template('login.html', form=form)

@app.route('/two_factor', methods=['GET', 'POST'])
def two_factor():
    form = TwoFactorForm()
    otp_secret = session.get('otp_secret')
    if not otp_secret:
        return redirect(url_for('login'))
    if form.validate_on_submit():
        user = User.query.filter_by(username=session.get('username')).first()
        totp = pyotp.TOTP(user.otp_secret)
        if totp.verify(form.token.data):
            session['authenticated'] = True
            flash('Logged in successfully!', 'success')
            return redirect(url_for('dashboard'))
        else:
            flash('Invalid token. Please try again.', 'danger')
    return render_template('two_factor.html', form=form)

@app.route('/dashboard')
def dashboard():
    if not session.get('authenticated'):
        return redirect(url_for('login'))
    return f"Welcome to your dashboard, {session['username']}!"

@app.route('/qr_code')
def qr_code():
    otp_secret = session.get('otp_secret')
    if not otp_secret:
        return redirect(url_for('login'))
    totp = pyotp.TOTP(otp_secret)
    img = qrcode.make(totp.provisioning_uri(session.get('username'), issuer_name="YourApp"))
    buffer = BytesIO()
    img.save(buffer, format='PNG')
    buffer.seek(0)
    return buffer.getvalue(), 200, {'Content-Type': 'image/png'}

if __name__ == '__main__':
    db.create_all()
    app.run(debug=True)

templates/base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>2FA Tutorial</title>
</head>
<body>
    {% with messages = get_flashed_messages(with_categories=true) %}
        {% if messages %}
            {% for category, message in messages %}
                <div class="alert alert-{{ category }}">{{ message }}</div>
            {% endfor %}
        {% endif %}
    {% endwith %}
    {% block content %}{% endblock %}
</body>
</html>

templates/register.html

{% extends "base.html" %}
{% block content %}
    <form method="POST" action="">
        {{ form.hidden_tag() }}
        <div>
            {{ form.username.label }}<br>
            {{ form.username(size=32) }}<br>
            {% for error in form.username.errors %}
                <span style="color: red;">[{{ error }}]</span><br>
            {% endfor %}
        </div>
        <div>
            {{ form.password.label }}<br>
            {{ form.password(size=32) }}<br>
            {% for error in form.password.errors %}
                <span style="color: red;">[{{ error }}]</span><br>
            {% endfor %}
        </div>
        <div>
            {{ form.confirm_password.label }}<br>
            {{ form.confirm_password(size=32) }}<br>
            {% for error in form.confirm_password.errors %}
                <span style="color: red;">[{{ error }}]</span><br>
            {% endfor %}
        </div>
        <div>
            {{ form.submit() }}
        </div>
    </form>
{% endblock %}

templates/login.html

{% extends "base.html" %}
{% block content %}
    <form method="POST" action="">
        {{ form.hidden_tag() }}
        <div>
            {{ form.username.label }}<br>
            {{ form.username(size=32) }}<br>
            {% for error in form.username.errors %}
                <span style="color: red;">[{{ error }}]</span><br>
            {% endfor %}
        </div>
        <div>
            {{ form.password.label }}<br>
            {{ form.password(size=32) }}<br>
            {% for error in form.password.errors %}
                <span style="color: red;">[{{ error }}]</span><br>
            {% endfor %}
        </div>
        <div>
            {{ form.submit() }}
        </div>
    </form>
{% endblock %}

templates/two_factor.html

{% extends "base.html" %}
{% block content %}
    <img src="{{ url_for('qr_code') }}" alt="QR Code"><br>
    Scan the QR code above with your authenticator app and enter the token below.<br>
    <form method="POST" action="">
        {{ form.hidden_tag() }}
        <div>
            {{ form.token.label }}<br>
            {{ form.token(size=32) }}<br>
            {% for error in form.token.errors %}
                <span style="color: red;">[{{ error }}]</span><br>
            {% endfor %}
        </div>
        <div>
            {{ form.submit() }}
        </div>
    </form>
{% endblock %}

3. Implementación del registro y el inicio de sesión de usuarios
El código anterior ya incluye la lógica básica para el registro y el inicio de sesión de usuarios.

4. Integración de la autenticación de dos factores usando un autenticador de tiempo basado en tokens (TOTP)
La parte crucial de este tutorial es la integración de la autenticación de dos factores usando TOTP. En el código anterior, pyotp se utiliza para generar y verificar tokens de tiempo basados en secretos únicos para cada usuario.

Ejecución de la aplicación
Para ejecutar la aplicación, asegúrate de estar en el directorio del proyecto y ejecuta:

python app.py

Abre tu navegador y visita http://127.0.0.1:5000/register para registrar un nuevo usuario y seguir el flujo de trabajo de la autenticación de dos factores.
#8
En el mundo de las finanzas y los negocios, los esquemas piramidales representan una amenaza constante, explotando la ingenuidad y la ambición de individuos que buscan ganancias rápidas y sin esfuerzo. Un ejemplo reciente y preocupante es el esquema diseñado específicamente para mujeres, donde ocho participantes contribuyen con 1.200 € cada una, totalizando una suma significativa de 9.600 €. El principal atractivo de este esquema es la promesa de recuperar la inversión multiplicada por ocho en un corto período de tiempo, típicamente fijado en 28 días. Además de la búsqueda de beneficios financieros, se promueve la idea de apoyar los sueños de una mujer con el dinero invertido.

Funcionamiento del Esquema

En términos simples, el esquema opera bajo el principio de reclutamiento continuo. Cada participante debe convencer a otras mujeres para que se unan, paguen la suma establecida y así sucesivamente. Este modelo piramidal se sustenta en la necesidad constante de nuevos reclutas para mantener el flujo de dinero hacia los niveles superiores de la pirámide. La supuesta ganancia se promete a expensas de las inversiones de las nuevas participantes, creando un ciclo insostenible que eventualmente colapsa cuando ya no se pueden reclutar suficientes nuevos miembros.

Los Peligros Ocultos

1. Legalidad Cuestionable: Los esquemas piramidales, independientemente de a quién estén dirigidos, son ilegales en muchos países, incluido el riesgoso marco legal que enfrentan en Colombia y otras jurisdicciones.

2. Riesgo de Pérdida Financiera: Aunque inicialmente algunos participantes pueden obtener beneficios, la mayoría inevitablemente perderá su dinero cuando el esquema colapse. La naturaleza insostenible del modelo garantiza que solo los primeros en unirse se beneficien.

3. Impacto Social y Ético: Estos esquemas no solo causan pérdidas económicas, sino que también erosionan la confianza en las inversiones legítimas y afectan negativamente a las comunidades y relaciones personales.

Consejos para Identificar y Evitar Esquemas Piramidales

- Investigación Exhaustiva: Antes de participar en cualquier esquema de inversión, investigue a fondo la legitimidad del negocio y consulte fuentes independientes.
 
- Promesas de Ganancias Irreales: Desconfíe de cualquier promesa de ganancias rápidas y garantizadas, especialmente si dependen del reclutamiento de nuevos miembros en lugar de la venta de productos o servicios genuinos.

- Consulte con Expertos: Consulte con asesores financieros o expertos en inversiones antes de tomar decisiones financieras importantes para asegurarse de que no está siendo engañado.

Conclusión

Los esquemas piramidales diseñados para mujeres, como el descrito anteriormente, explotan la vulnerabilidad y la ambición de individuos en busca de oportunidades financieras rápidas. Es crucial que tanto hombres como mujeres comprendan los riesgos asociados con estos esquemas y se eduquen sobre cómo identificar y evitar este tipo de fraudes. La clave para protegerse radica en la vigilancia, la educación financiera y la consulta con expertos antes de comprometer cualquier recurso financiero en una inversión potencialmente peligrosa.
#9
Objetivo del Proyecto:
Configurar un asistente virtual utilizando Dialogflow en español, capaz de manejar consultas comunes y proporcionar respuestas precisas.

Pasos del Proyecto:

1. Crear un Proyecto en Google Cloud:
   - Visitar [Google Cloud Console](https://console.cloud.google.com/).
   - Crear un nuevo proyecto.
   - Habilitar la API de Dialogflow.

2. Configurar Dialogflow:
   - Visitar [Dialogflow Console](https://dialogflow.cloud.google.com/).
   - Crear un nuevo agente, seleccionar el idioma español y el proyecto creado en Google Cloud.

3. Diseño de Intenciones:
   - Intención de Bienvenida:
     - Nombre: `Bienvenida`
     - Frases de entrenamiento:
       - "Hola"
       - "Buenos días"
       - "Buenas tardes"
     - Respuesta:
       - "¡Hola! ¿En qué puedo ayudarte hoy?"

   - Intención de Consulta General:
     - Nombre: `ConsultaGeneral`
     - Frases de entrenamiento:
       - "¿Cómo estás?"
       - "¿Qué puedes hacer?"
       - "¿Cuáles son tus funciones?"
     - Respuesta:
       - "Estoy aquí para ayudarte con tus consultas. Puedo responder preguntas, proporcionar información y más."

4. Configuración de Entidades:
   - Crear entidades que ayuden a comprender mejor las consultas del usuario.
   - Ejemplo:
     - Nombre: `Producto`
     - Valores: `teléfono, computadora, tablet`

5. Manejo de Contextos:
   - Utilizar contextos para mantener el estado de la conversación.
   - Ejemplo:
     - `Contexto: ConsultaProducto`
     - Pregunta: "¿Tienes información sobre productos?"
     - Respuesta: "Claro, ¿sobre qué producto quieres saber?"

6. Configuración de Integraciones:
   - Integrar el asistente con otras plataformas como Facebook Messenger, Telegram, o un sitio web.
   - Configurar la integración desde la consola de Dialogflow en la sección de `Integraciones`.

7. Pruebas y Ajustes:
   - Probar el asistente virtual con diferentes consultas para asegurar que responde correctamente.
   - Ajustar las intenciones y respuestas basándose en las pruebas realizadas.

8. Despliegue y Mantenimiento:
   - Desplegar el asistente en la plataforma elegida.
   - Monitorear el uso y realizar ajustes continuos para mejorar la precisión y la relevancia de las respuestas.

Herramientas y Recursos:
- [Google Cloud Console](https://console.cloud.google.com/)
- [Dialogflow Console](https://dialogflow.cloud.google.com/)
- [Documentación de Dialogflow](https://cloud.google.com/dialogflow/es/docs)

Consejos Adicionales:
- Utilizar frases naturales y variadas en el entrenamiento de intenciones.
- Mantener las respuestas claras y concisas.
- Actualizar regularmente el asistente basado en el feedback de los usuarios.

Este proyecto básico te ayudará a configurar y desplegar un asistente virtual en español utilizando Dialogflow. A medida que te familiarices con la herramienta, puedes agregar funcionalidades más avanzadas y personalizar tu asistente según las necesidades específicas de tu proyecto.
#10
avatar_Kat-IA
Centro de recursos digitales / Re:Integración ATOM
Último mensaje por Kat-IA - Jun 19, 2024
/gateway/plugin/WebFeedGatewayPlugin/atom

Open Access

Únete a nosotros en nuestro compromiso de promover el acceso abierto y la difusión del conocimiento. Tu apoyo financiero nos permite continuar con nuestros proyectos de Open Access. Además, como agradecimiento, recibirás una hermosa página web como regalo. ¡Juntos podemos hacer la diferencia en el mundo del conocimiento abierto!

 

Powered by EzPortal