Mostrar los tags: ADO

Mostrando del 1 al 10 de 239 coincidencias
<<>>
Se ha buscado por el tag: ADO
Imágen de perfil
Actualizado

Visor interactivo de modelos 3D


Python

Actualizado el 12 de Abril del 2025 por Antonio (77 códigos) (Publicado el 7 de Febrero del 2025)
3.806 visualizaciones desde el 7 de Febrero del 2025
Este programa es un visor de modelos 3D en formato `.obj` que utiliza `OpenGL` y `pygame` para renderizar y manipular objetos 3D. Ofrece varias funciones de visualización como rotación, zoom, traslación, cambio entre vista en perspectiva y vista ortográfica, y otras acciones útiles para examinar el modelo cargado.

### Principales funciones del programa:

1. **Carga de modelo `.obj`:** El archivo `.obj` se especifica a través de un argumento y se carga mostrando los vértices, aristas y caras del modelo.
2. **Visualización en 3D:** Permite cambiar entre vista ortográfica y perspectiva.
3. **Rotación del modelo:** Utiliza cuaterniones para rotar el modelo sobre cualquier eje.
4. **Zoom y traslación:** Posibilidad de hacer zoom y mover el modelo en la pantalla.
5. **Información en pantalla:** Se puede mostrar/ocultar información como el nombre del modelo, escala, número de vértices, aristas y caras.

### Comandos principales:

- **Flechas del teclado:** Rotan el modelo en diferentes direcciones.
- **Tecla 'R':** Reinicia la rotación y escala del modelo.
- **Teclas 'M' y 'N':** Rotación en sentido horario y antihorario sobre el eje Z.
- **Tecla 'P':** Alterna entre vista en perspectiva y ortográfica.
- **Tecla 'X' y 'Z':** Zoom in y Zoom out, respectivamente.
- **Mouse:** Arrastrar con el clic izquierdo para mover la escena y usar la rueda del ratón para hacer zoom.
- **Tecla 'H':** Mostrar/ocultar la información en pantalla.
- **Tecla 'ESC':** Cierra el programa.
ov1
ov2
ship

Para cualquier duda u observación, usen la sección de comentarios.
Imágen de perfil

Stock Monitor


Python

Actualizado el 7 de Abril del 2025 por Antonio (77 códigos) (Publicado el 22 de Octubre del 2023)
2.326 visualizaciones desde el 22 de Octubre del 2023
El siguiente script muestra en tiempo real las cotizaciones en bolsa, de acciones e índices bursátiles.
El programa utiliza un bucle en el que va realizando sucesivas peticiones de datos, usando 'yfinance'. Entre una petición y la siguiente, media un tiempo en segundos que viene determinado por la opción '-delay/--time_delay', teniendo un valor por defecto de 5 segundos y no pudiendo ser inferior a 0.5
Para detener la obtención de datos, pulsar la barra espaciadora. Al hacerlo, el programa mostrará el texto 'wait until application ends..' ya que tendrá que esperar el tiempo que quede restante del especificado por '-delay/--time_delay'. Finalizando definitivamente, transcurrido dicho tiempo restante.

ARGUMENTOS:
'-tick/--ticker' : Ticker o símbolo del valor cuya cotización se quiere obtener.
'-delay/--time_delay': Periodicidad, en segundos, entre una petición de datos y la siguiente.
'-clr/--color': Mostrar precio de cierre en color, en función de su fluctuación respecto del valor anterior.
'-uind/--use_index': Incluir esta opción para obtener cotizaciones de índices bursátiles (ej: ^IXIC, ^DJI..)

La petición de valores se interrumpe pulsando la barra espaciadora.
PARA CUALQUIER DUDA U OBSERVACIÓN, UTILICEN LA SECCIÓN DE COMENTARIOS.

sm1
sm2
sm3
Imágen de perfil

Minado de Bitcoins.


Python

Publicado el 14 de Marzo del 2025 por Hilario (144 códigos)
245 visualizaciones desde el 14 de Marzo del 2025
**********************************************************************************************

Captura-de-pantalla-de-2025-03-13-10-23-01
Captura-de-pantalla-de-2025-03-13-10-23-08
Captura-de-pantalla-de-2025-03-13-10-23-15
Captura-de-pantalla-de-2025-03-13-10-23-22
Captura-de-pantalla-de-2025-03-13-10-23-27

************************************************************************************************


Ejercicio:

Aula_28_Minado_Bitcoin_Target_Marzo_14_25.py
********************************************************
Sobre el bitcoin, habíamos planteado anteriormente dos ejercicios sucesivos sobre arboles de Merkle, y el analisis de una transación de Bitcoins en formato RAW. Hoy propongo para el aula y taller 28, un sencillo ejercicio en Python que tratara sobre em minado de Bitcoins.

En líneas generales el minado de Bitcoin en qué consiste:
****************************************************************

El minado de Bitcoin es el proceso mediante el cual se validan y registran transacciones en la blockchain de Bitcoin, asegurando la red y emitiendo nuevas monedas como recompensa a los mineros. A grandes rasgos, implica lo siguiente:

Agrupación de transacciones en bloques:
-----------------------------------------------------


Los mineros recopilan transacciones pendientes de la mempool (el "pool de memoria" donde se almacenan temporalmente).
Crean un bloque con estas transacciones y añaden un encabezado que incluye el hash del bloque anterior, un marcador de tiempo y otros datos.
Resolución de una prueba de trabajo (PoW - Proof of Work):

Para añadir un bloque a la blockchain, los mineros deben encontrar un hash que cumpla con ciertos requisitos de dificultad.
Esto se hace probando diferentes valores (llamados nonce) y calculando el hash SHA-256 del bloque repetidamente hasta encontrar uno válido.
La dificultad del hash está determinada por el protocolo y se ajusta cada 2016 bloques (~cada dos semanas) para mantener un tiempo promedio de 10 minutos por bloque.
Difusión y validación del bloque:

Cuando un minero encuentra un hash válido, transmite el bloque a la red.
Otros nodos verifican que las transacciones sean legítimas y que la prueba de trabajo sea correcta.
Si el bloque es válido, se añade a la blockchain y la red sigue minando el siguiente bloque a partir de este.

Recompensas por minado:

El minero que resuelve el bloque recibe una recompensa en Bitcoin (actualmente 6.25 BTC por bloque, pero se reduce a la mitad cada 210,000 bloques en el evento llamado halving).
Además, recibe las comisiones de transacción de las operaciones incluidas en el bloque.
En resumen, el minado de Bitcoin es una carrera entre mineros para resolver un problema matemático difícil con fuerza bruta, asegurando la red y permitiendo la emisión controlada de nuevos bitcoins.

Bien, esto que aprimera vista parece un tanto farragoso, lo explicamos en este ejercicio de Python.

QUÉ PARÁMETROS ENTRAN EN EL MINADO:
******************************************************

1. Parámetros técnicos del bloque.
**************************************
Merkle Root: Raíz del árbol de Merkle que agrupa todas las transacciones dentro del bloque.
Versión del bloque: Número que indica la versión del protocolo en uso.
Hash del bloque anterior: Identificador único del bloque anterior en la cadena.
Marca de tiempo (Timestamp): Hora en que se generó el bloque, expresada en segundos desde 1970 (UNIX time).
Bits (Dificultad objetivo): Indica el nivel de dificultad que debe cumplir el hash del bloque.
Nonce: Número aleatorio que los mineros modifican hasta encontrar un hash válido.

2. Parámetros de minado (Prueba de Trabajo - PoW)
************************************************************
Algoritmo de hashing: Bitcoin usa SHA-256 para generar los hashes.
Dificultad de minado: Ajustada cada 2016 bloques (~2 semanas) para que el tiempo promedio de creación de bloques siga siendo 10 minutos.
Objetivo (Target): Límite numérico que el hash del bloque debe cumplir (ser menor que un valor determinado por la dificultad).
Tasa de hash (Hashrate): Velocidad con la que un minero puede calcular hashes por segundo.
Consumo energético: Cantidad de electricidad utilizada por el minero para realizar cálculos.

3. Parámetros económicos.
*******************************
Recompensa por bloque: Actualmente 6.25 BTC, se reduce a la mitad cada 210,000 bloques (halving).
Comisiones de transacción: Pagos que los usuarios adjuntan a sus transacciones para incentivar a los mineros a incluirlas en el bloque.
Costo de hardware: Precio de los equipos de minería, como ASICs especializados.
Costo de electricidad: Factor crucial que afecta la rentabilidad del minero.

4. Parámetros de red.
************************

Mempool: Espacio donde esperan las transacciones antes de ser incluidas en un bloque.
Latencia de red: Velocidad con la que se propagan los bloques en la red, lo que puede afectar la probabilidad de éxito en la minería.
Competencia minera: Cantidad de mineros activos y su potencia de cómputo total en la red (hashrate global).
5. Parámetros de dificultad y ajuste.
****************************************

Retargeting de dificultad: Se ajusta cada 2016 bloques para mantener el tiempo promedio de generación en 10 minutos.
Número de mineros en la red: Mientras más mineros haya, mayor será la competencia y la dificultad.

***************************************************************************************

En nuestro ejercicio, queidos alumnos, nos fijaremos sólo en el punto 1.

Aqui pasamos a describir los pasos de nuestro ejercicio:
-------------------------------------------------------

1. Importación de módulos.
*************************

import hashlib
import time
import struct
hashlib: Para calcular el doble SHA-256, que se usa en la minería de Bitcoin.
time: Para manejar el timestamp y calcular el tiempo transcurrido.
struct: Para empaquetar los datos del bloque en el formato binario usado en Bitcoin.

2. Funciones principales.
*************************

2.1. Cálculo del doble SHA-256.
-----------------------------

def double_sha256(header):
return hashlib.sha256(hashlib.sha256(header).digest()).hexdigest()
Se aplica SHA-256 dos veces al encabezado del bloque, que es el método que usa Bitcoin.

2.2. Conversión de bits a target.
-------------------------------
def bits_to_target(bits):
bits_int = int(bits, 16)
exponent = (bits_int >> 24) & 0xFF
mantissa = bits_int & 0xFFFFFF
target = mantissa * (2 ** (8 * (exponent - 3)))
return hex(target)[2:].zfill(64)
Bitcoin usa una representación compacta de la dificultad llamada bits.
Esta función lo convierte en el valor real del target, que es el número máximo que puede tener un hash válido.

3. Parámetros del bloque.
***********************


version = "0x20000000"
previous_block_hash = "0000000000000000000aef1f5f7de00000000000000000000000000000000000"
merkle_root = "4a5e1e4baab89f3a32518a88c31bc87f00000000000000000000000000000000"
bits = "1E00FFFF" # Se ha aumentado para reducir la dificultad
nonce = 0
timestamp = int(time.time())
version: Versión del protocolo Bitcoin.
previous_block_hash: Hash del bloque anterior.
merkle_root: Raíz del árbol de Merkle (aglutina todas las transacciones).
bits: Representación compacta de la dificultad.
nonce: Número que cambia hasta encontrar un hash válido.
timestamp: Momento en que el bloque fue creado.

4. Creación del encabezado del bloque.
************************************


def create_block_header(version, prev_hash, merkle_root, timestamp, bits, nonce):
return struct.pack("<L32s32sLLL",
int(version, 16),
bytes.fromhex(prev_hash.zfill(64)),
bytes.fromhex(merkle_root.zfill(64)),
timestamp,
int(bits, 16),
nonce)
Empaqueta los datos del bloque en un formato binario para ser minado.
Formato:
<L32s32sLLL
Indica que los datos están en little-endian (el formato usado en Bitcoin).

5. Bucle de minado.
*****************


print("Comenzando el minado...")
start_time = time.time()
target_time = 160
Se inicia el minado y se establece un límite de tiempo para evitar que el código corra indefinidamente.

while True:
elapsed_time = time.time() - start_time
if elapsed_time > target_time:
print(f"Tiempo límite alcanzado ({target_time} segundos). Minado detenido.")
break
Si el tiempo excede target_time, se detiene la minería.

5.1. Creación del bloque y cálculo del hash.
******************************************


block_header = create_block_header(version, previous_block_hash, merkle_root, timestamp, bits, nonce)
block_hash = double_sha256(block_header)
Se genera el encabezado del bloque y se calcula su hash con doble SHA-256.

5.2. Verificación del hash.
**************************


if int(block_hash, 16) < int(target, 16):
print(f"¡Bloque minado! Nonce encontrado: {nonce}")
print(f"Hash del bloque: {block_hash}")
break
Si el hash generado es menor que el target, significa que el bloque ha sido minado con éxito.
Se imprime el nonce encontrado y el hash válido del bloque.

5.3. Incremento del nonce.
*************************


nonce += 1
Si el hash no es válido, se incrementa el nonce y se prueba de nuevo.

5.4. Mostrar progreso.
*********************

if nonce % 1000 == 0:
print(f"Intentos: {nonce}, Hash actual: {block_hash}")
Cada 1,000 intentos imprime el hash actual para ver el progreso del minado.

6. Impresión de estadísticas finales.
***********************************


end_time = time.time()
print(f"Tiempo total de minado: {end_time - start_time:.2f} segundos")
Muestra el tiempo total que tardó en encontrar el nonce correcto.


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Este ejercicio, fue realizado sobre plataforma Linux.
Ubuntu 20.04.6 LTS.
Editado, con Sublime text.

Ejecutado bajo consola Linux, con este comando:
python3 Aula_28_Minado_Bitcoin_Target_Marzo_14_25.py
Imágen de perfil

Contador Dinámico con JS solamente


JavaScript

Publicado el 20 de Diciembre del 2024 por Alejandro
483 visualizaciones desde el 20 de Diciembre del 2024
Este código sirve para crear una cuenta regresiva que muestra el tiempo restante hasta una fecha y hora específicas, como el lanzamiento de un producto, un evento o una página web. Se actualiza en tiempo real y muestra los días, horas, minutos y segundos restantes de forma dinámica.

Es ideal para incluir en páginas web o proyectos donde quieras mantener a tus usuarios informados sobre el tiempo restante para un hito importante. Cuando el temporizador llega a cero, se puede mostrar un mensaje personalizado, como "¡Ya estamos en directo!" o cualquier texto que elijas. Ni necesitas más pildoras de Javascript, soy Alejandro Tamargo Desarrollador Web en Asturias
Imágen de perfil

Lector, por cámara, de códigos "QR"


Python

estrellaestrellaestrellaestrellaestrella(11)
Actualizado el 14 de Junio del 2024 por Antonio (77 códigos) (Publicado el 22 de Abril del 2020)
44.606 visualizaciones desde el 22 de Abril del 2020
El programa tiene como objeto principal, la lectura, haciendo uso de la cámara web, de códigos QR. Para ello, simplemente pulsaremos el botón "INICIAR LECTURA POR CAMARA" (que desplegará el visor de la cámara) y colocaremos el código a leer, delante de la cámara. A su vez, también podremos leer códigos QR, en formato "png" y "jpg" almacenados en nuestra computadora (para lo que usaremos la opción "CARGAR ARCHIVO". Finalmente, también podremos leer, directamente, un código que se encuentre visible en pantalla (botón "DETECTAR EN PANTALLA").

qrcc
qrcm1
Imágen de perfil

CALCULADORA DE DIVISAS


Python

estrellaestrellaestrellaestrellaestrella(1)
Actualizado el 25 de Mayo del 2024 por Antonio (77 códigos) (Publicado el 3 de Mayo del 2024)
726 visualizaciones desde el 3 de Mayo del 2024
Programa para convertir cantidades de moneda a otras divisas (el programa muestra la tasa de cambio y el equivalente en la otra moneda) usando datos actualizados.

cuc
PARA CUALQUIER DUDA U OBSERVACIÓN USEN LA SECCIÓN DE COMENTARIOS.
Imágen de perfil

Suavizado de imagen en archivos de vídeo por 'Filtrado bilateral', (aplicación en línea de comandos)


Python

estrellaestrellaestrellaestrellaestrella(2)
Actualizado el 23 de Mayo del 2024 por Antonio (77 códigos) (Publicado el 20 de Marzo del 2023)
7.669 visualizaciones desde el 20 de Marzo del 2023
Programa para realizar filtrado de imagen en archivos de vídeo (preferiblemente de corta duración) utilizando el algoritmo de 'filtrado bilateral' pudiendo especificar los valores sigma de espacio y color y el diámetro del vecindario para cada pixel. Los vídeos filtrados se generan, por defecto, conservando su sonido, aunque se pueden generar sin este introduciendo el argumento '-ae'/'--exclude_audio'.

ARGUMENTOS:
-src/--source: Nombre del vídeo original (OBLIGATORIO)
-dest/--destination: Nombre del video a generar ('NewFilteredVid.mp4' por defecto)
-sgc/--sigma_color: Valor sigma para espacio de color (75 por defecto)
-sgs/--sigma_space: Valor sigma espacial (75 por defecto)
-pd/--pixel_diameter: Diámetro de la vecindad de píxeles (9 por defecto)
-ae/--exclude_audio: Excluir audio y generar video sin sonido (OPCIONAL)

PARA CUALQUIER DUDA U OBSERVACIÓN UTILIZEN LA SECCIÓN DE COMENTARIOS
bvf
bvf2
bvf3
bvf4
Imágen de perfil

Visor de gráficos financieros.


Python

estrellaestrellaestrellaestrellaestrella(2)
Actualizado el 1 de Abril del 2024 por Antonio (77 códigos) (Publicado el 7 de Julio del 2021)
10.235 visualizaciones desde el 7 de Julio del 2021
El programa muestra información relativa al precio máximo, mínimo, de apertura y cierre de un activo financiero (estos se irán almacenando en el archivo "symbols" que se generará al ejecutar el programa por primera vez) y para un periodo de tiempo. También muestra los gráficos relativos a las medias móviles exponenciales de 50 y 200 sesiones.
PARA CUALQUIER DUDA U OBSERVACIÓN USEN LA SECCIÓN DE COMENTARIOS.
gf
Imágen de perfil

Filtrado de imagenes.


Python

Publicado el 15 de Diciembre del 2023 por Hilario (144 códigos)
1.770 visualizaciones desde el 15 de Diciembre del 2023
Aula_38_Imagen_Filtrada.py.
+++++++++++++++++++++


En este diminuto ejemplo, hablaremos un poco de la filtración, o suavización de la imagen, antes de someterla a las diversas convoluciones.

La filtración de una imagen antes de aplicar convoluciones o técnicas más avanzadas tiene varias razones. Aquí hay algunas de las razones más comunes:

Reducción de Ruido:

Las imágenes a menudo contienen ruido, que son variaciones no deseadas o errores en los datos. La filtración previa puede ayudar a reducir el ruido y mejorar la calidad de la imagen antes de realizar operaciones más complejas.

Eliminación de Detalles Innecesarios:

En algunas aplicaciones, como la detección de bordes o características, es beneficioso eliminar detalles innecesarios antes de aplicar técnicas más avanzadas. Esto puede mejorar la eficiencia computacional y evitar que se capturen detalles no deseados.
Suavizado de la Imagen:

Filtrar una imagen con técnicas como el filtro Gaussiano puede suavizar la imagen, lo que puede ser útil para preservar características importantes mientras se atenúan detalles finos. Esto puede ser especialmente útil en tareas de procesamiento de imágenes donde se necesita resaltar características más prominentes.

Mejora del Contraste:

Algunos filtros pueden ayudar a mejorar el contraste en la imagen, resaltando las diferencias entre regiones de la imagen. Esto puede ser beneficioso antes de aplicar técnicas que dependan del contraste.
Preprocesamiento para Algoritmos de Aprendizaje Automático:

Cuando se utilizan imágenes como entrada para algoritmos de aprendizaje automático, a menudo se realiza un preprocesamiento para reducir la complejidad y garantizar que el modelo se enfoque en características relevantes.
Mejora de la Estabilidad Numérica:

En algunos casos, filtrar la imagen antes de ciertas operaciones puede mejorar la estabilidad numérica y evitar problemas como la amplificación de ruido numérico.
Es importante señalar que la necesidad de filtrar una imagen antes de la convolución puede depender de la tarea específica y del conjunto de datos. En algunas situaciones, la filtración puede ser crucial, mientras que en otras puede no ser necesaria. La elección del tipo de filtro y sus parámetros dependerá de la naturaleza de la imagen y los requisitos de la tarea que estás abordando.

TIPOS MÁS IMPORTANTES DE SUAVIZACIÓN DE IMAGENES.
--------------------------------------------------------------------------------------------
Existen varios tipos de filtros que se pueden utilizar para procesar imágenes y cada uno tiene aplicaciones específicas. Aquí hay algunos tipos comunes de filtrado de imágenes:

Filtro de Suavizado (Blur):

Promedio (Average): Reemplaza cada píxel por el promedio de los píxeles vecinos.
Gaussiano: Aplica un filtro Gaussiano para suavizar la imagen, reduciendo el ruido y los detalles finos.
Filtro de Realce (Sharpening):

Enfasis (Unsharp Masking): Crea una versión borrosa de la imagen original y la sustrae para resaltar bordes y detalles.
Máscaras de Realce: Utiliza máscaras diseñadas para realzar características específicas.
Filtro de Detección de Bordes:

Sobel, Prewitt, Roberts: Estos filtros se utilizan para detectar bordes en una imagen realzando las diferencias de intensidad.
Operador Laplaciano: Resalta los cambios de intensidad en una imagen.
Filtro de Mediana:

Reemplaza cada píxel por el valor de la mediana de los píxeles vecinos. Es eficaz para eliminar el ruido impulsivo (salt-and-pepper).
Filtro de Bilateral:

Conserva los bordes mientras suaviza la imagen. Es útil para suavizar la imagen sin perder detalles importantes.
Filtro de Adaptación Local de Contraste (CLAHE):

Mejora el contraste local en áreas de la imagen. Útil para resaltar detalles locales.
Filtro de Transformada Wavelet:

Utiliza la transformada wavelet para realizar suavizado o realce de la imagen en diferentes escalas y direcciones.
Filtro de Color:

Corrección de Color: Ajusta el equilibrio de color y mejora la apariencia visual de la imagen.
Espacio de Color YUV: Puede aplicarse para modificar la luminancia y los componentes de color independientemente.
Estos son solo algunos ejemplos, y la elección del filtro dependerá de la tarea específica y los requisitos de procesamiento de la imagen. Además, a menudo es beneficioso realizar ajustes y experimentar con diferentes filtros y parámetros para obtener los resultados deseados.

----------------------------------------------------------------------------------
En este ejemplo, propongo utilizar el sistema que definimos como la aplicación de un filtro Gaussiano.
La campana de Gauss, también conocida como función gaussiana o distribución normal, es una función matemática que describe una forma de campana simétrica. Con esto tratamos de suavizar el contorno o extemos de la imagen.







mar
Imágen de perfil

Programa para aplicación de filtros, en archivos de vídeo.


Python

estrellaestrellaestrellaestrellaestrella(4)
Actualizado el 20 de Noviembre del 2023 por Antonio (77 códigos) (Publicado el 24 de Mayo del 2021)
13.014 visualizaciones desde el 24 de Mayo del 2021
El presente programa se encarga de aplicar filtros sobre los fotogramas de un archivo de video empleando diferentes funciones. El programa realiza el filtrado frame a frame para a continuación generar un nuevo video con la secuencia de frames procesados (aplicando el frame rate del vídeo original). También usa el software "ffmpeg" para copiar el audio del vídeo original y añadirlo al vídeo resultante.

USO: Primeramente seleccionaremos el vídeo a filtrar mediante el botón "SEARCH". Una vez seleccionado iniciaremos el proceso con "START FILTERING" con el que empezaremos seleccionando la ubicación del nuevo vídeo, para a continuación iniciar el proceso (NOTA: La ruta del directorio de destino no deberá contener espacios en blanco). El proceso de filtrado podrá ser cancelado medinate el botón "CANCEL".
PARA CUALQUIER DUDA U OBSERVACIÓN USEN LA SECCIÓN DE COMENTARIOS.

vf