Cesar Systems

Herramientas Informaticas

🛠️ Actualización técnica: validación y subida de imágenes + controlador seguro en boilerplateproducts 🖼️

Entrada fija

🛠️ Actualización técnica: validación y subida de imágenes + controlador seguro en boilerplateproducts 🖼️

En este cambio abordamos varios problemas prácticos que afectaban la subida de imágenes y la robustez del endpoint admin/products/save. Objetivos principales:

  • ✅ Permitir JPG/JPEG además de PNG (y manejar HEIC de iPhone).
  • ✅ Soportar subida desde móvil (cámara/galería).
  • ✅ Validar tipo y tamaño en cliente y servidor (pasamos de 2 MB a 5 MB).
  • ✅ Enviar la imagen con FormData solo si existe y evitar errores por selectores incorrectos.
  • ✅ Mejorar el controlador en CodeIgniter 4: validaciones, rutas absolutas, manejo seguro de archivos, respuestas JSON y logging. 📦

1 — Problema inicial 🐞

  • El JS validaba solo image/png, por lo que bloqueaba .jpg/.jpeg. ❌
  • Selectores inconsistentes (.imagenProducto vs #imagenProducto) => riesgo de undefined. ⚠️
  • El controlador PHP aceptaba únicamente PNG, hacía var_dump, usaba rutas relativas y agarraba excepciones equivocadas. 🧨
  • Tamaño máximo 2 MB; se solicitó ampliar a 5 MB. 📈
  • No había protocolo JSON consistente entre frontend y backend. 🧩

2 — Cambios en el frontend (JS) 📱

Qué se cambió (resumen)

  • Validación de tipos permitidos: image/png, image/jpeg, image/jpg. ✅
  • Detección y rechazo de HEIC (iPhone) con aviso o rechazo según preferencia. 🚫🧾
  • Límite de tamaño subido: 5 MB (maxSize = 5 * 1024 * 1024). 📏
  • Uso de FormData solamente si el archivo existe. 🎒
  • Unificación de selectores: usar id="imagenProducto" y mantener class para preview. 🧭
  • e.preventDefault() y bloqueo/rehabilitación del botón con complete. 🔒➡️🔓
  • dataType: "json" en AJAX con fallback a texto plano para compatibilidad. 🔁
  • Mensajes Toast claros y amigables. 🔔

Snippet — parte clave del JS (resumido)

// ... (código resumido; validar tipo, tamaño 5MB, añadir FormData solo si existe)
var maxSize = 5 * 1024 * 1024; // 5 MB
if (imagenProducto.size > maxSize) {
    Toast.fire({ icon: 'error', title: "La imagen pesa más de 5 MB." });
    $btn.removeAttr("disabled");
    return;
}

3 — Cambios en el backend (Controlador CodeIgniter 4) ⚙️

Objetivos del backend

  • Aceptar PNG y JPG/JPEG. 🟢
  • Validar tamaño (5 MB). 📦
  • Evitar var_dump en producción. 🚫
  • Usar FCPATH para mover archivos a public/images/products. 📁
  • Crear carpeta si no existe. 🧱
  • Devolver JSON con estado ok|error y message. 💬
  • Borrar la imagen anterior de forma segura al actualizar. 🧹
  • Manejar excepciones generales correctamente. 🔒

Snippet — método save() resumido

// Validación de archivo
$maxSize = 5 * 1024 * 1024;
$allowed = ['png','jpg','jpeg'];
if ($imagenProducto && $imagenProducto->isValid()) {
    $ext = strtolower($imagenProducto->getClientExtension() ?: '');
    if (!in_array($ext, $allowed)) {
        return $this->response->setStatusCode(415)->setJSON(['status'=>'error','message'=>lang('empresas.imageExtensionIncorrect')]);
    }
    if ($imagenProducto->getSize() > $maxSize) {
        return $this->response->setStatusCode(413)->setJSON(['status'=>'error','message'=>lang('empresas.imageTooLarge')]);
    }
    $datos['routeImage'] = $imagenProducto->getRandomName();
}

4 — Configuración del servidor y notas operativas 🖥️

  • PHP (php.ini): aumentar upload_max_filesize y post_max_size por encima de 5 MB (ej. 8M). 🔧
  • Nginx: client_max_body_size 8M;. ⚠️
  • Permisos: public/images/products debe ser escribible por el proceso web (ej. www-data). 🛡️
  • Seguridad: siempre validar MIME real y extensión en el servidor — no confiar en JS. 🔍
  • Backups: si las imágenes son críticas, considera mantener copia antes de unlink. 💾

5 — Pruebas que hicimos y checklist para QA 🧪✅

Pruebas realizadas:

  • Subida desde desktop: JPG, PNG. 💻
  • Subida desde móvil: cámara (Android/Chrome) y galería. 📱
  • Subida desde iPhone (HEIC) → detectado y rechazado con mensaje. 🍏🚫
  • Reemplazo de imagen de producto: antiguo archivo borrado y nuevo movido. 🔁
  • Validación de tamaños: >5MB rechazado, <5MB aceptado. ⚖️
  • Manejo de respuesta JSON en frontend y fallback a texto. 🔄

Checklist para QA / PR:

  • [ ] ✅ El input tiene id="imagenProducto" y accept="image/png, image/jpeg" (o accept="image/*" si se quiere cámara directa).
  • [ ] ✅ Validación en JS y servidor coincide (5 MB).
  • [ ] ✅ images/products existe y es escribible en staging/prod.
  • [ ] ✅ Mensajes Toast claros para cada caso (HEIC, tamaño, formato).
  • [ ] ✅ Al actualizar producto, la imagen anterior se borra sólo si corresponde.
  • [ ] ✅ Tests unitarios / integración pasan (si existen).
  • [ ] ✅ composer.lock no fue tocado por estos cambios (si aplica).

6 — Mensajes de commit / PR recomendados ✍️

Commit:
fix(products): accept jpeg/png, validate size 5MB, handle uploads safely

Descripción PR sugerida:

  • Frontend: validar JPG/JPEG + PNG, rechazar HEIC, aumentar tamaño a 5MB, enviar FormData solo si existe, unificar selectores y mejorar UX (disable button + toast).
  • Backend (CI4): aceptar jpg/png, validar tamaño, usar FCPATH para almacenamiento, crear carpeta si no existe, devolver JSON, borrar imagen anterior de forma segura, mejorar manejo de errores y logging.

Incluye checklist de QA y capturas de la subida desde móvil/desktop.


7 — Próximos pasos recomendados 🚀

  • ✂️ Optimizar imágenes: redimensionar/comprimir en cliente o servidor para ahorrar espacio y tiempo de subida.
  • ♻️ Soportar HEIC: implementar conversión con Imagick o servicio externo si quieres aceptar HEIC automáticamente.
  • 🧪 Automatizar pruebas: agregar tests para multipart upload y para el flujo de reemplazo/borrado de imágenes.
  • 🔁 Pipeline CI/CD: en staging hacer composer update si fuera necesario, probar y en producción usar composer install (lockfile).

8 — Conclusión 🎯

Estos cambios hacen la subida de imágenes más robusta, amigable para móviles y segura en el servidor. El frontend ahora maneja errores con mensajes claros y el backend devuelve JSON estructurado para un manejo predecible en la UI. Además, ampliamos el límite a 5 MB y arreglamos detalles clásicos como rutas relativas y selectores inconsistentes. ✅

🐪 Guía Completa: Cómo instalar Ollama en tu PC y correr Llama 3 de Meta

Entrada fija

🐪 Guía Completa: Cómo instalar Ollama en tu PC y correr Llama 3 de Meta

En los últimos años, el desarrollo de modelos de lenguaje grandes (LLMs, por sus siglas en inglés) ha avanzado a pasos agigantados. Uno de los más destacados es Llama 3, creado por Meta, que ha logrado competir con modelos comerciales como GPT-4 o Claude, pero con una característica esencial: puede usarse gratis y de forma local gracias a herramientas como Ollama.

Este tutorial busca ser una guía detallada para que cualquier persona pueda instalar Ollama en su computadora, descargar el modelo Llama 3 y comenzar a usarlo sin complicaciones. Nos tomaremos el tiempo de explicar no solo los pasos técnicos, sino también los requisitos, configuraciones recomendadas, posibles errores comunes y cómo integrar Ollama en diferentes entornos de desarrollo.


🔹 1. ¿Qué es Ollama y por qué usarlo?

Ollama es una plataforma que facilita correr modelos de lenguaje grandes en tu computadora de forma local. Esto significa que:

  1. No dependes de la nube: puedes tener tu propio ChatGPT casero sin enviar datos a terceros.
  2. Privacidad total: lo que escribes y lo que el modelo responde se queda en tu PC.
  3. Sin costos ocultos: no necesitas pagar por tokens o suscripciones.
  4. Compatible con diferentes modelos: no solo Llama 3, también Mistral, Phi, Gemma, entre otros.

Meta liberó Llama 3 en abril de 2024 con variantes de 8B y 70B parámetros, entrenados en una enorme cantidad de datos. El modelo de 8B es más ligero y puede correr en una PC con 8-16 GB de RAM, mientras que el de 70B requiere estaciones mucho más potentes (64 GB+ y GPU dedicadas).

Gracias a Ollama, la instalación y uso de Llama 3 se reduce a un par de comandos, sin necesidad de compilar ni configurar manualmente librerías de inteligencia artificial.


🔹 2. Requisitos previos

📌 Hardware mínimo recomendado

  • CPU: procesador moderno con soporte AVX2 (casi todos desde 2015 en adelante).
  • RAM:
  • 8 GB para modelos pequeños.
  • 16 GB o más para un uso fluido.
  • GPU (opcional):
  • NVIDIA con CUDA 11 o superior.
  • Apple Silicon (M1, M2, M3) aprovecha la GPU integrada.
  • Espacio en disco: entre 5 GB y 50 GB, dependiendo del tamaño del modelo.

📌 Software compatible

  • Linux: Ubuntu, Debian, Mint, Fedora, Arch y derivados.
  • macOS: versiones modernas, tanto Intel como Apple Silicon.
  • Windows: requiere WSL2 con Ubuntu (Windows 11 recomendado).

🔹 3. Instalación de Ollama

🐧 En Linux (ejemplo: Ubuntu / Mint / Debian)

curl -fsSL https://ollama.com/install.sh | sh
ollama --version

🍏 En macOS

  1. Descarga el instalador desde la página oficial:
    👉 https://ollama.com/download
  2. Arrastra Ollama.app a la carpeta de Aplicaciones.
  3. Verifica en terminal:
ollama --version

🪟 En Windows 11 (usando WSL2)

wsl --install

Dentro de Ubuntu en WSL2:

curl -fsSL https://ollama.com/install.sh | sh
ollama --version

🔹 4. Descargar e instalar Llama 3

  • Para la versión ligera (8B parámetros):
ollama pull llama3
  • Para la versión grande (70B parámetros):
ollama pull llama3:70b

Ver modelos instalados:

ollama list

🔹 5. Usar Llama 3 con Ollama

ollama run llama3

Ejemplo:

>>> Hola, ¿qué es Ollama?
Ollama es una herramienta que permite correr modelos de lenguaje grandes de manera local en tu computadora.

🔹 6. Integración con APIs y otros lenguajes

Ollama expone una API local en http://localhost:11434

Ejemplo en Python

import requests

response = requests.post("http://localhost:11434/api/generate", json={
  "model": "llama3",
  "prompt": "Explícame la fotosíntesis en 3 líneas"
})

for line in response.iter_lines():
    if line:
        print(line.decode())

Ejemplo en Node.js

import fetch from "node-fetch";

const res = await fetch("http://localhost:11434/api/generate", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    model: "llama3",
    prompt: "Resume la historia de México en 5 puntos"
  })
});

const data = await res.text();
console.log(data);

🔹 7. Consejos de rendimiento

  1. Prefiere GPU si está disponible.
  2. Usa el modelo correcto según tu RAM.
  3. Administra la memoria cerrando apps pesadas.
  4. Mantén Ollama actualizado.

🔹 8. Problemas comunes y soluciones

  • Comando ollama no encontrado → reinicia terminal o source ~/.bashrc
  • El modelo no descarga → revisa internet y usa ollama pull llama3 --retry
  • Se queda sin RAM → usa modelos pequeños o swap
  • Velocidad lenta en CPU → usa GPU compatible

🔹 9. Comparación con otras herramientas

  • LM Studio → interfaz gráfica.
  • text-generation-webui → muy configurable.
  • GPT4All → multiplataforma.

Ollama destaca por su simplicidad y API unificada.


🔹 10. Aplicaciones prácticas

  1. Asistente personal offline.
  2. Generación de textos.
  3. Tutor académico.
  4. Ayuda en programación.
  5. Automatización de procesos.

🔹 11. Seguridad y privacidad

  • Tus datos no salen de tu PC.
  • Puedes trabajar con información sensible.
  • Ideal para empresas e investigadores.

🔹 12. Próximos pasos

  • Explorar otros modelos:
ollama pull mistral
ollama pull gemma
  • Crear un servidor web con Ollama.
  • Conectar a un frontend en React o Vue.
  • Usarlo en VS Code como asistente de programación.

✅ Conclusión

Instalar Ollama y usar Llama 3 en tu PC es un proceso sencillo que abre un mundo de posibilidades.

  • Principiantes: basta con ollama run llama3.
  • Desarrolladores: la API permite integrarlo en proyectos.
  • Usuarios preocupados por privacidad: toda la IA corre en tu PC.

En definitiva, Ollama + Llama 3 es una combinación poderosa que democratiza la inteligencia artificial.

🤖✨ Cómo Crear un Bot de Minecraft con Mineflayer en 1.19.4 (Guía Completa )

Entrada fija

🤖✨ Cómo Crear un Bot de Minecraft con Mineflayer en 1.19.4 (Guía Completa)


🌍 Introducción

¿Alguna vez soñaste con tener un compañero virtual en Minecraft que se mueva, explore, minee y hasta construya a tu lado? 😎 Pues en esta guía te voy a enseñar cómo crear un bot automático en Minecraft Java 1.19.4 usando la librería Mineflayer de Node.js.

Lo mejor es que no necesitas ser un programador experto: con un par de comandos y un archivo listo para usar, tendrás a tu amiguito digital siguiendo tus pasos en tu mundo o servidor favorito.

Imagina que entras a tu survival y al lado tuyo aparece un robot trabajador que nunca se cansa, que busca madera, que coloca bloques y que puede convertirse en tu guardaespaldas minero. 🚀

Y para hacerlo aún más fácil, al final de esta publicación te dejo 📥 un enlace de descarga con el código completo listo para correr.


🛠️ Requisitos previos

Antes de meternos en el mundo de los bots, necesitas tener a la mano:

  • Una PC con Linux, Windows o macOS 🖥️
  • Minecraft Java Edition 1.19.4 instalado 🎮
  • Node.js (versión 18 o superior)

🔑 Tip: Puedes comprobar tu versión de Node.js con:

node -v

Si no tienes Node.js, lo instalas desde nodejs.org (elige la versión LTS para máxima estabilidad).


📂 Creación del proyecto

Primero vamos a organizar todo en una carpeta para el bot:

mkdir bot_minecraft
cd bot_minecraft

Dentro de esa carpeta vivirá nuestro bot y todo su código. 🏠


📦 Instalación de las librerías necesarias

Mineflayer depende de varias librerías que se pueden instalar de un solo golpe:

npm init -y && npm install mineflayer mineflayer-pathfinder mineflayer-pvp mineflayer-auto-eat prismarine-viewer

Explicación rápida de qué es cada cosa:

  • mineflayer → El núcleo que permite crear el bot.
  • mineflayer-pathfinder → Para que el bot sepa moverse por el mapa 🌍.
  • mineflayer-pvp → Para que el bot pueda pelear ⚔️.
  • mineflayer-auto-eat → Para que el bot coma solito 🍖.
  • prismarine-viewer → Para ver en un navegador lo que el bot ve 👀.

Con eso ya tienes todo lo necesario instalado en la carpeta node_modules/.


📝 El archivo del bot

Aquí normalmente te pondría todo el código, pero para no saturar esta publicación y hacerlo más cómodo, te dejo el código listo para descargar en un archivo ZIP:

📥 Descargar bot_minecraft.zip

📥 Descargar bot desde Telegram_minecraft.zip

Dentro del ZIP encontrarás:

  • bot.js → El código del bot
  • package.json → Configuración del proyecto
  • Carpeta de dependencias

🚀 Ejecutando el bot

Una vez descargado y descomprimido el proyecto, solo entras a la carpeta y ejecutas:

node bot.js

El bot se conectará automáticamente a tu servidor o mundo local de Minecraft (según lo configures en bot.js).


🎮 Interacción con el bot

¿Qué puede hacer el bot que preparamos?

✅ Se mueve por el mundo buscando madera\
✅ Si no encuentra madera, sigue caminando indefinidamente hasta hallarla\
✅ Puede minar bloques y recogerlos ⛏️\
✅ Puede colocar bloques y construir estructuras 🏗️\
✅ Tiene un cuerpo visible (no es invisible como los típicos bots fantasma 👻)\
✅ Siempre aparece a tu lado al conectarse 🤝

🔑 Extra: con los comandos de chat (por ejemplo, escribiendo !follow o !stop en Minecraft) podrás darle órdenes directas.


🛑 Resolviendo errores comunes

🔹 Error: “Cannot read properties of null (reading ‘version’)”\
👉 Esto pasa si tu versión de Node.js es muy vieja o si instalaste mal las librerías.\
✅ Solución: actualiza Node.js a la 18+ y reinstala dependencias con:

rm -rf node_modules package-lock.json
npm install

🔹 El bot aparece invisible\
👉 Faltaba configurar el renderizado del jugador. En el código del ZIP ya está corregido para que aparezca a tu lado con cuerpo completo.

🔹 SyntaxError: Unexpected end of input\
👉 Pasaba porque el archivo se cortaba al copiar/pegar. ✅ En el ZIP viene completo.


💡 Trucos y extras

  • Si activas el prismarine-viewer, puedes abrir en tu navegador una ventana que muestra lo que ve el bot:
  http://localhost:3000
  • Puedes conectar varios bots al mismo tiempo para hacer un ejército minero 🪓🛡️.
  • El bot puede programarse para farmear mobs, pescar automáticamente 🎣 o incluso cantar corridos sinaloenses en el chat (sí, lo puedes hacer 🤠).

🔥 Conclusión

Crear un bot de Minecraft no solo es divertido, también es una excelente forma de aprender programación con Node.js. Al final del día, tendrás un amigo digital que camina, explora y construye contigo en cualquier mundo.

Y lo mejor: este bot está pensado para Minecraft Java 1.19.4, con todo corregido para que se vea el cuerpo y aparezca a tu lado desde el inicio.

Así que ya sabes, arma tu carpeta, instala las librerías, descarga el ZIP y lánzate a explorar el mundo con tu nuevo compañero 🤖✨.

📥 Descargar bot_minecraft.zip

📥 Descargar bot_minecraft.zip Desde Telegram

📢 Adiós Skype, Hola Teams: El Gran Cambio de Microsoft en 2025

Entrada fija

📢 Adiós Skype, Hola Teams: El Gran Cambio de Microsoft en 2025

🌍 Un ícono que marcó una era

Durante más de dos décadas, Skype fue sinónimo de llamadas por internet. Para millones de personas alrededor del mundo, la primera videollamada que hicieron con familiares, amigos o colegas fue gracias a este software.

Skype nació en 2003, mucho antes de que Zoom, WhatsApp o Google Meet existieran. Su propuesta fue revolucionaria: hablar con alguien al otro lado del planeta gratis (o muy barato) solo usando una conexión a internet.

Sin embargo, los tiempos cambian. Y en mayo de 2025, Microsoft decidió apagar oficialmente Skype y reemplazarlo con algo nuevo: Microsoft Teams (versión gratuita).

Este anuncio marca el fin de un capítulo nostálgico, pero también abre la puerta a una nueva etapa en la forma de comunicarnos.


🔄 ¿Por qué Microsoft retiró Skype?

Podemos resumirlo en tres grandes razones:

  1. Evolución tecnológica
    Skype fue innovador en su momento, pero su arquitectura se fue quedando atrás frente a plataformas más modernas. Teams está construido sobre una infraestructura más robusta y escalable.
  2. Unificar la comunicación
    Microsoft ya había dado el primer paso en 2021, integrando Skype Empresarial dentro de Teams para las empresas. Ahora, el movimiento es completo: consumidores y compañías en la misma plataforma.
  3. Competencia feroz
    Zoom, Google Meet, WhatsApp y Telegram ofrecen funciones que antes eran exclusivas de Skype. Microsoft necesitaba un servicio competitivo y actualizado.

📅 ¿Cuándo ocurrió el cambio?

  • El 5 de mayo de 2025, Microsoft cerró oficialmente Skype (versión para consumidores).
  • Desde esa fecha, los usuarios ya no pueden iniciar sesión en la app tradicional.
  • El sitio web oficial de Skype redirige automáticamente a Microsoft Teams Free.

Para quienes crecieron con Skype, puede sentirse como el fin de una era. Pero Microsoft asegura que todo fue pensado para hacer la transición lo más sencilla posible.


👥 ¿Qué pasa con mis contactos y chats?

Una de las grandes preocupaciones era: ¿y mis contactos?

Microsoft implementó un sistema de migración automática:

  • Puedes iniciar sesión en Teams Free con tu misma cuenta de Skype.
  • Tus contactos y conversaciones aparecen allí.
  • Incluso el saldo de llamadas pagadas (si tenías crédito en Skype) se mantiene disponible en Teams o en el portal web.

Además, se dio un periodo de transición en el que era posible chatear desde Skype con alguien en Teams Free y viceversa, para que nadie quedara desconectado de un día para otro.


🆚 Skype vs Teams: ¿qué cambia?

Aunque ambos permiten llamadas y videollamadas, Teams Free es mucho más que Skype.

Lo que ya conocías de Skype:

  • Llamadas y videollamadas gratis.
  • Chats de texto y grupos.
  • Posibilidad de llamar a teléfonos fijos o móviles pagando crédito.

Lo que ofrece Teams Free además:

  • Calendario integrado para coordinar reuniones.
  • Comunidades y grupos temáticos, como mini redes sociales.
  • Compartir archivos y trabajar en documentos de Office al mismo tiempo.
  • Videollamadas más estables gracias a la infraestructura de Teams usada en empresas.
  • Sincronización con Outlook y OneDrive.

En resumen: Skype era una app de comunicación; Teams es un hub de colaboración completo.


💻 La transición para usuarios habituales

Microsoft preparó guías y opciones para que nadie se perdiera en el proceso.

  • Si solo usabas Skype para llamadas casuales, Teams Free te resultará similar, aunque con una interfaz más moderna.
  • Si lo usabas para trabajo remoto, Teams Free es aún mejor: está diseñado para la productividad.
  • Si solo querías mantener contacto con tu familia en el extranjero, seguirás pudiendo hacerlo igual… solo que ahora con más herramientas.

📜 La nostalgia: ¿por qué Skype fue tan importante?

Antes de hablar de lo que viene, vale la pena mirar atrás.

  • En 2005, Skype ya tenía más de 50 millones de usuarios cuando aún reinaban los SMS y las llamadas carísimas.
  • Durante la década de 2010, Skype se convirtió en la app más usada para entrevistas laborales a distancia.
  • Fue el canal por excelencia para comunicarse con migrantes, estudiantes en el extranjero y familias separadas por fronteras.
  • Incluso Barack Obama y otras figuras públicas lo mencionaron en discursos como ejemplo del poder de internet.

Por todo esto, no es raro que para muchos el cierre de Skype se sienta como despedirse de un amigo viejo.


⏳ La evolución: de MSN Messenger → Skype → Teams

Si hablamos de nostalgia digital, no podemos olvidar a otro gigante que precedió a Skype: MSN Messenger.

  • En los años 2000, MSN Messenger (luego Windows Live Messenger) fue el rey de la mensajería instantánea.
  • Todos recordamos los zumbidos, los emoticonos clásicos y la emoción de ver quién estaba “en línea”.
  • Fue la primera gran red social para millones de jóvenes en todo el mundo.

Pero pronto el mundo digital pidió más: ya no bastaba con enviar texto. Queríamos voz y video.

Ahí entró Skype, que desde 2003 revolucionó la comunicación. Microsoft lo compró en 2011 y lo convirtió en el reemplazo oficial de Messenger, que cerró en 2013.

Skype se convirtió en el estándar de las videollamadas y acompañó a toda una generación en la globalización digital.

Hoy, en 2025, el relevo lo toma Teams Free.

👉 MSN Messenger (chat)Skype (voz y video)Teams (colaboración total).

Cada uno representó su época:

  • Messenger, la era social juvenil.
  • Skype, la era de la conexión global a distancia.
  • Teams, la era de la productividad híbrida, donde la vida personal y laboral convergen en línea.

Más que un final, es una evolución natural. Messenger caminó para que Skype corriera, y Skype corrió para que Teams volara.


📲 ¿Cómo descargar y usar Teams Free?

Si todavía no lo has probado, aquí está el camino más sencillo:

  1. Ve a la tienda de aplicaciones de tu móvil (Android o iOS) y busca Microsoft Teams.
  2. Descárgala y abre sesión con tu cuenta de Microsoft (la misma que usabas en Skype).
  3. Automáticamente tendrás tus contactos migrados.
  4. Empieza a explorar las nuevas funciones: crear comunidades, fijar reuniones, compartir archivos y más.

También puedes usar Teams Free desde el navegador en teams.microsoft.com.


🔐 ¿Y qué pasa con mis datos?

Microsoft aseguró que:

  • Todos los datos de Skype (chats, contactos, historial) estarán disponibles para exportar hasta enero de 2026.
  • Después de esa fecha, los servidores de Skype eliminarán la información que no haya sido migrada.
  • Si prefieres no usar Teams, puedes descargar un archivo con tu historial de chats y conservarlo.

💡 Consejos para adaptarse al cambio

  1. Explora las comunidades: si usabas grupos de Skype, ahora puedes probar los espacios de Teams, que son más organizados.
  2. Integra tu calendario: programa tus videollamadas familiares con recordatorios.
  3. Prueba las reacciones y emojis animados: dan más vida a las conversaciones.
  4. Configura notificaciones para que no te sature; Teams puede ser más insistente que Skype.
  5. Si usabas créditos de Skype para llamar a teléfonos, revisa en Teams cómo usarlos todavía.

🌟 Lo bueno y lo malo del cambio

👍 Ventajas

  • Mejor tecnología y estabilidad en llamadas.
  • Más funciones que facilitan la colaboración.
  • Integración con otras herramientas de Microsoft.
  • Una sola plataforma tanto para usuarios casuales como para empresas.

👎 Desventajas

  • Skype era más ligero y simple; Teams puede sentirse más “pesado”.
  • Usuarios mayores pueden tardar en adaptarse.
  • La nostalgia: perder una app histórica siempre duele.

🏢 ¿Y las empresas?

El camino empresarial ya estaba claro desde antes: Skype Empresarial desapareció en 2021 para ser reemplazado por Teams.

Esto significa que ahora, por primera vez, consumidores y empresas usan la misma plataforma. Una ventaja importante: menos confusión, más compatibilidad.


🎭 Un cambio que refleja el mundo actual

El retiro de Skype no es solo un movimiento de negocios. Es también un reflejo de cómo la comunicación digital ha cambiado.

  • En 2003, hacer una videollamada era ciencia ficción.
  • En 2025, es parte de la rutina diaria de trabajo, estudio y vida social.
  • Hoy pedimos más: colaboración, documentos en la nube, reuniones grupales estables, comunidades digitales.

Skype cumplió su papel en su tiempo. Ahora, Teams toma la posta para esta nueva etapa.


🔮 ¿Qué podemos esperar en el futuro?

Microsoft apunta a que Teams sea la plataforma central de comunicación del ecosistema Windows y Microsoft 365.

Esto significa:

  • Más integración con IA (resúmenes automáticos de reuniones, traducciones en tiempo real, asistentes virtuales).
  • Mejor compatibilidad con aplicaciones de terceros.
  • Experiencias más fluidas entre móvil, PC y web.

En cierto modo, Skype caminó para que Teams pudiera correr.


📝 Conclusión: un adiós con sabor a evolución

El fin de Skype puede parecer un golpe nostálgico, pero en el fondo es un paso lógico. La tecnología cambia, y Microsoft eligió dar un salto hacia una plataforma que no solo conecta, sino que también facilita la colaboración y la productividad.

Para quienes usaron Skype durante años, es como despedirse de una herramienta que nos acercó cuando más lo necesitábamos. Pero la buena noticia es que sus funciones no desaparecen: renacen y se multiplican en Teams Free.

Así que la próxima vez que hagas una videollamada en Teams, recuerda: estás usando el legado de Messenger y Skype, pero con superpoderes modernos.

🚀 Nueva actualización lav1.5.1 — Manejo mejorado de Imagen de Perfil en Boilerplate

Entrada fija

🚀 Nueva actualización lav1.5.1 — Manejo mejorado de Imagen de Perfil en Boilerplate

La versión lav1.5.1 introduce una de las mejoras más esperadas en el flujo de autenticación y gestión de usuarios: la capacidad de manejar de forma nativa la imagen de perfil, con validación robusta, soporte para valores NULL en base de datos y un avatar por defecto cuando no se encuentra la imagen.

Este release no solo mejora la experiencia visual y de usabilidad, sino que también fortalece la integración de datos del usuario dentro de las vistas del sistema. A continuación, presentamos en detalle todos los cambios, mejoras y la forma recomendada de actualizar tu proyecto.


✨ Principales Novedades

🔹 1. Imagen de perfil con validación

Ahora el sistema valida si el campo profile_image existe en la base de datos y contiene un valor válido.

  • Si el campo está vacío o en NULL, se muestra automáticamente un avatar genérico.
  • Si el archivo no existe en el servidor, el sistema también utiliza el avatar por defecto.

🔹 2. Avatar por defecto

El avatar por defecto se toma de la CDN oficial de AdminLTE:

https://cdn.jsdelivr.net/npm/admin-lte@3.0.2/dist/img/avatar.png

🔹 3. Integración en el Header y Sidebar

La imagen de perfil ahora aparece en dos áreas clave:

  • Navbar (parte superior) junto al nombre de usuario.
  • Sidebar (menú lateral) dentro del panel de usuario.

🔹 4. Comando de actualización de esquema

Con esta versión se incluyen nuevos campos y tablas, por lo que añadimos el comando:

php spark boilerplate:update

Este comando sincroniza tu base de datos con los cambios de la versión actual.


📦 Cómo actualizar a lav1.5.1

1. Actualizar dependencias con Composer

Ejecuta en la raíz de tu proyecto:

composer update julio101290/boilerplate

Esto descargará la nueva versión y reemplazará los archivos necesarios.

2. Ejecutar la actualización de esquema

Después de actualizar el código, corre el comando:

php spark boilerplate:update

Este proceso migrará las tablas y añadirá los nuevos campos, entre ellos el de profile_image.

3. Limpiar cachés y asegurarte de que todo carga

php spark cache:clear
php spark config:clear

🛠 Cambios Técnicos Detallados

Validación en vistas

Ejemplo de uso en el header:

<a href="<?= base_url(route_to('user-profile')) ?>" class="nav-link d-flex align-items-center">
    <img src="<?= user()->profile_image && file_exists(FCPATH . 'uploads/profiles/' . user()->profile_image) 
        ? base_url('uploads/profiles/' . user()->profile_image) 
        : 'https://cdn.jsdelivr.net/npm/admin-lte@3.0.2/dist/img/avatar.png' ?>"
        class="avatar-img img-circle bg-gray mr-2 elevation-<?= config('Boilerplate')->theme['navbar']['user']['shadow'] ?>"
        alt="<?= user()->username ?>" height="32">
    <?= user()->username ?>
</a>

Ejemplo en el sidebar:

<div class="image">
    <img src="<?= user()->profile_image && file_exists(FCPATH . 'uploads/profiles/' . user()->profile_image) 
        ? base_url('uploads/profiles/' . user()->profile_image) 
        : 'https://cdn.jsdelivr.net/npm/admin-lte@3.0.2/dist/img/avatar.png' ?>"
        class="img-circle elevation-<?= config('Boilerplate')->theme['sidebar']['user']['shadow'] ?>"
        alt="User Image">
</div>

Cambios en la Base de Datos

  • Se añade el campo profile_image a la tabla de usuarios.
  • Este campo acepta NULL de manera nativa.
  • Si no se define, la vista renderiza automáticamente el avatar por defecto.

Compatibilidad

  • Compatible con PostgreSQL y MariaDB.
  • No requiere cambios manuales en tablas previas: el comando php spark boilerplate:update se encarga de todo.

🔒 Beneficios de Seguridad

  • No se exponen rutas inválidas de imágenes.
  • Se evita el error de “imagen rota”.
  • Se normalizan los valores NULL.
  • Mejora la experiencia del usuario manteniendo consistencia en toda la interfaz.

📊 Ejemplo Visual del Cambio

Antes (versión anterior):

  • Los usuarios sin foto aparecían con un ícono roto.
  • Los campos NULL no eran validados correctamente.

Ahora (lav1.5.1):

  • Todos los usuarios tienen avatar visible.
  • Integración estética y funcional en Navbar y Sidebar.

📝 Changelog resumido

  • ✅ Validación de profile_image en todas las vistas principales.
  • ✅ Avatar por defecto cuando el campo está vacío o NULL.
  • ✅ Compatibilidad con PostgreSQL y MariaDB.
  • ✅ Nuevo comando php spark boilerplate:update.
  • ✅ Correcciones menores en estilos de AdminLTE.

🚀 Guía Paso a Paso de Migración

  1. Respaldar tu proyecto actual.
  2. Ejecutar:
   composer update julio101290/boilerplate
  1. Correr la migración:
   php spark boilerplate:updatecommand
  1. Limpiar caché.
  2. Verificar que los usuarios aparecen con sus fotos de perfil o con el avatar por defecto.

📌 Notas Finales

Este release v1.5.1 marca un paso adelante en la personalización de Boilerplate.
Ahora cada usuario tiene una experiencia más consistente y profesional dentro de la aplicación.

👉 Si quieres revisar el código y los commits de esta versión:
🔗 Release en GitHub

🌠 ¡Atención, cieleros de Sinaloa! 🌠

Entrada fija

🌠 ¡Atención, cieleros de Sinaloa! 🌠

✨ El cometa C/2025 K1 (ATLAS) iluminará nuestros cielos en 2025 ✨

En octubre y noviembre de 2025, el cometa C/2025 K1 (ATLAS) será visible desde Sinaloa, ofreciendo un espectáculo celestial que no te puedes perder. Este cometa, descubierto por el sistema de telescopios ATLAS, promete ser uno de los eventos astronómicos más destacados del año.


🔭 ¿Qué es el cometa C/2025 K1 (ATLAS)?

El cometa C/2025 K1 (ATLAS) es un visitante periódico del Sistema Solar. Se espera que alcance su máximo acercamiento a la Tierra el 25 de noviembre de 2025, a una distancia de aproximadamente 60.3 millones de kilómetros. Durante este período, el cometa será visible a simple vista en cielos oscuros y sin contaminación lumínica.


🌌 ¿Cuándo y dónde verlo en Sinaloa?

Desde Sinaloa, el cometa será más visible en las madrugadas de octubre a diciembre de 2025, especialmente entre las 4:30 y las 6:00 am, cuando se elevará sobre el horizonte este. En zonas rurales o alejadas de la contaminación lumínica, como la playa de Topolobampo o áreas cercanas a la sierra, las condiciones de observación serán ideales.


🌟 ¿Cómo se verá el cometa?

Se espera que el cometa C/2025 K1 (ATLAS) sea visible a simple vista como una estrella difusa con una cola tenue, similar a una “nube luminosa” desplazándose lentamente por el cielo. Con binoculares de 10×50, se podrá apreciar mejor su coma (núcleo brillante) y la cola que se extiende hacia el espacio profundo.


🧭 Consejos para observar el cometa

Para disfrutar al máximo de este fenómeno astronómico, sigue estos consejos:

  • Busca un lugar oscuro: Aléjate de las luces de la ciudad para evitar la contaminación lumínica.
  • Usa binoculares: Unos binoculares de 10×50 te permitirán observar detalles del cometa.
  • Adapta tus ojos a la oscuridad: Permite que tus ojos se acostumbren a la oscuridad durante al menos 20 minutos.
  • Comparte la experiencia: Invita a amigos y familiares a unirse a la observación.

📸 Equipos económicos para astrofotografía del cometa

Si deseas capturar imágenes del cometa, aquí tienes algunas opciones económicas:

🎥 Cámaras recomendadas

  • Cámara Quasar USB 2MP para telescopio: Ideal para principiantes, ofrece buena resolución para capturar imágenes del cometa.
  • Cámara Ocular WiFi 4MP para telescopios y astrofotografía: Permite visualizar y capturar imágenes en tiempo real desde tu dispositivo móvil.

🔭 Telescopios recomendados

  • Celestron Telescopio Newtoniano Astromaster 130EQ: Con una apertura de 130 mm, ofrece una excelente relación calidad-precio para observación y astrofotografía.
  • Telescopio Astronómico Profesional Apertura 70mm, Distancia Focal 300mm: Compacto y ligero, ideal para principiantes y observación lunar.

📅 Calendario de observación (octubre – diciembre 2025)

FechaHora recomendadaDirecciónNotas adicionales
15/10/20255:00 amEstePrimer avistamiento visible
25/11/20254:45 amEsteMáximo acercamiento a la Tierra
15/12/20255:15 amEsteÚltima oportunidad de observación

🌠 ¡No te lo pierdas!

Este será un evento astronómico memorable para todos en Sinaloa. Marca las fechas en tu calendario, prepara tus binoculares o telescopios, y comparte esta experiencia con tus seres queridos. ¡El universo nos invita a maravillarnos una vez más!

🎶🎤 Karaoke en Linux con PipeWire, JACK, Carla y OBS: ¡Tu Estudio Casero de Voz en Tiempo Real! 🔥💻🎧

Entrada fija

🎤 Karaoke en Linux con Carla + PipeWire + JACK 🚀

¿Te imaginas tener tu propio sistema de karaoke en Linux, con efectos en la voz y música de YouTube funcionando en tiempo real y con máxima calidad de audio?
En esta guía aprenderás a montar un rack profesional de karaoke usando:

  • PipeWire (motor de audio moderno de Linux 🎧)
  • JACK (para enrutamiento de baja latencia ⚡)
  • Carla (host de plugins VST/LV2 🎛️)
  • Helvum (patchbay gráfico para conexiones 🔗)
  • OBS Studio (para grabar o transmitir tu karaoke en vivo 📺)

🔧 Instalación de dependencias

Primero, asegúrate de tener todo lo necesario. En Ubuntu, Linux Mint o Debian puedes instalarlo con:

sudo apt update
sudo apt install pipewire pipewire-audio-client-libraries pipewire-jack carla carla-plugins carla-lv2 helvum qjackctl obs-studio ladspa-sdk calf-plugins zam-plugins

👉 Esto incluye:

  • Carla + plugins para los efectos de voz (reverb, delay, EQ, compresores, etc.).
  • Helvum para enrutar entradas/salidas.
  • OBS Studio para grabar o transmitir tu karaoke.
  • Calf Plugins y ZAM Plugins 🎶 que te darán una gran variedad de efectos profesionales.

🎚️ Configuración de Carla

  1. Abre Carla una vez manualmente.
  2. Carga un nuevo rack (carxp).
  3. Añade los efectos que quieras para tu voz (por ejemplo:
  • Calf Reverb 🌌
  • ZamTube 🎸
  • Calf Equalizer 🎚️
  • Calf Compressor 🔊
    ).
  1. Guarda tu configuración en:
/home/tu_usuario/Escritorio/KaraokeRack.carxp

⚠️ Reemplaza tu_usuario por tu nombre de usuario real en Linux.


🚀 Script de Karaoke en Tiempo Real

Este script inicia todo automáticamente en máxima prioridad de tiempo real, con efectos de voz y música de fondo:

#!/bin/bash
# Script Karaoke optimizado para tiempo real máximo
# Adaptado por julio101290

CARXP_PATH="/home/tu_usuario/Escritorio/KaraokeRack.carxp"

if [ ! -f "$CARXP_PATH" ]; then
    echo "❌ ERROR: No se encuentra el archivo $CARXP_PATH"
    exit 1
fi

echo "🔹 Iniciando QJackCtl con PipeWire (tiempo real)..."
pw-jack qjackctl -d alsa -r 48000 -p 64 -n 2 &

sleep 1.5

echo "🔹 Iniciando Carla con rack de karaoke..."
pw-jack carla --no-lv2-init "$CARXP_PATH" &

sleep 1

echo "🔹 Iniciando Helvum (Patchbay gráfico)..."
helvum &

sleep 0.5

echo "🔹 Iniciando OBS Studio (opcional)..."
pw-jack obs &

echo "✅ Karaoke listo. Voz y música de fondo mezcladas en tiempo real máximo."

Guárdalo como karaoke.sh, dale permisos y ejecútalo:

chmod +x karaoke.sh
./karaoke.sh

🎵 Flujo de Audio

Con este sistema, el flujo de audio quedará así:

🎤 Micrófono → Carla (efectos) → JACK/PipeWire → OBS/Altavoces
🎶 Música (YouTube/Spotify) → PipeWire → Carla/OBS

Todo sincronizado en baja latencia (2-6 ms) para que cantes sin desfase.


🎛️ Cómo añadir más efectos

En Carla puedes agregar efectos como si fuera un pedalboard virtual.
Algunos plugins recomendados:

  • ReverbCalf Reverb 🌌
  • DelayCalf Delay ⏱️
  • EQCalf Equalizer 8 Band 🎚️
  • CompresorCalf Compressor 💥
  • AutoTune (opcional)x42-autotune 🎤

📺 Karaoke en YouTube + OBS

Si quieres grabar o transmitir:

  1. Abre OBS Studio.
  2. Selecciona en fuente de audioMonitor de Carla/JACK.
  3. Añade una ventana del navegador o captura de pantalla con YouTube.
  4. ¡Listo! 🔴 Puedes grabar o transmitir karaoke en vivo con efectos y música de fondo.

🚀 Optimización de Latencia

  • Usa -p 64 en JACK para buffers muy bajos.
  • Si tu PC es potente, puedes probar -p 32 ⚡.
  • Activa en Linux la opción de baja latencia en kernel (si está disponible).
  • Usa htop para verificar que carla, jack y pipewire tienen prioridad en CPU.

🎉 Conclusión

Con esta configuración:

✅ Tendrás un sistema de karaoke profesional en Linux.
✅ Podrás usar efectos en tu voz en tiempo real.
✅ Controlarás el audio con Carla y Helvum fácilmente.
✅ Podrás grabar o transmitir en OBS sin problemas.
✅ Todo con PipeWire + JACK en máxima calidad.

🔥 Ahora sí, conecta el micro, abre tu lista de YouTube y canta como un rockstar desde Linux.
🎤✨🎶

PCH🚨 Minix Oculto en tu CPU: El “Sistema Operativo Fantasma” que Puede Tomar el ControlPCH

Entrada fija

🚨 Minix Oculto en tu CPU: El “Sistema Operativo Fantasma” que Puede Tomar el Control

💻 ¿Sabías que tu computadora puede estar corriendo un sistema operativo secreto, incluso antes de que tu Windows o Linux arranquen?
Se llama Minix, y no está en tu disco duro: vive dentro del chip de tu procesador, oculto a los ojos del usuario.


🔍 ¿Qué es este Minix?

  • No es un virus
    Es un sistema operativo basado en Minix 3, integrado por Intel dentro del Intel Management Engine (IME).
  • Dónde vive
    Está embebido en el Platform Controller Hub (PCH), en un procesador secundario independiente.
  • Independencia total
    Funciona incluso si tu computadora está “apagada” (mientras tenga corriente conectada).
  • Compatibilidad universal
    Corre sin importar si usas Windows, Linux, MacOS… ¡da igual! El Minix oculto sigue activo.

🎯 ¿Para qué fue creado?

Según Intel, su objetivo es:

  • Administración remota corporativa (Intel Active Management Technology).
  • Diagnóstico y mantenimiento a bajo nivel.
  • Soporte técnico incluso si el sistema principal no arranca.

En teoría, es para ayudar a empresas a manejar flotas de computadoras… pero también abre puertas a preocupaciones serias.


⚠ Riesgos de seguridad

  1. Acceso total al hardware
  • Puede leer y modificar la memoria RAM.
  • Acceder a discos duros y tráfico de red.
  1. Control remoto invisible
  • Permite encender, apagar o reinstalar el sistema desde Internet.
  • No depende de tu firewall o antivirus, porque usa su propia conexión de red.
  1. Puerta trasera potencial
  • Si alguien (fabricante, gobierno o hacker) obtiene las llaves, puede tomar control absoluto.
  1. Historial de vulnerabilidades
  • En 2017 se descubrieron fallos que permitían acceso remoto no autenticado.
  • El firmware es propietario y cerrado, por lo que no hay transparencia.

🔒 ¿Se puede desactivar?

No del todo. Intel ME es necesario para que el equipo arranque.
Sin embargo, existe una neutralización parcial:

  • Herramienta: me_cleaner
  • Método: recortar el firmware y dejarlo en modo HAP (High Assurance Platform), reduciendo funciones de red y control remoto.
  • Riesgo: si el proceso falla, la placa puede quedar inutilizable. No es una solución 100% segura ni recomendada para usuarios sin experiencia técnica.

📌 En resumen

🔹 Tu computadora probablemente tenga un sistema operativo secreto llamado Minix corriendo en segundo plano.
🔹 Fue diseñado para administración remota, pero le da poder absoluto a quien tenga acceso.
🔹 Existen métodos para “dormirlo”, pero no para eliminarlo por completo sin consecuencias.

💡 Consejo: Si manejas información sensible, investiga tu hardware y considera usar placas base y procesadores sin Intel ME, o con opciones de firmware libre que lo limiten.


📢 La próxima vez que enciendas tu PC, recuerda: no estás solo, alguien más ya estaba ahí antes que tú. 🕵️‍♂️

🎥📥 ¡Descarga Fácil y Rápido tus Videos y Audios de YouTube! 🎶💻

Entrada fija

🎥📥 ¡Descarga Fácil y Rápido tus Videos y Audios de YouTube! 🎶💻

¿Quieres tener tus videos favoritos de YouTube disponibles siempre, sin conexión? ¿O tal vez solo quieres guardar el audio para tus playlists? ¡Esta app es justo lo que necesitas! 🚀✨


🔥 ¿Qué es este programa?

Una herramienta GRATIS, sencilla y potente para descargar videos o solo audios de YouTube con la mejor calidad disponible. Perfecta para Windows y fácil de usar, sin complicaciones. 🎉


🚀 Características que amarás

  • 🎬 Descarga videos en alta definición
  • 🎵 Extrae solo el audio (MP3) para tus canciones favoritas
  • 🖥️ Interfaz moderna y amigable con estilo retro de terminal
  • 📂 Selecciona fácilmente dónde guardar tus archivos
  • Barra de progreso clara para que veas cómo avanza la descarga
  • 🔗 Valida URLs para evitar errores y frustraciones
  • 🔄 Descarga en segundo plano, sin congelar la app
  • 📁 Botón para abrir la carpeta de descarga inmediatamente

💡 ¿Por qué elegir este programa?

  • 🎉 100% Gratis y sin anuncios molestos
  • 🔒 Privacidad total — No se envía ningún dato externo
  • Ligero y rápido — Funciona bien en cualquier PC moderna
  • 🐍 Basado en Python, código limpio y abierto (si quieres explorar)
  • 💻 Compatible con Windows 7 y superiores sin instalaciones complicadas

🛠️ ¿Cómo usarlo? ¡Súper fácil!

  1. ✂️ Copia y pega la URL del video de YouTube
  2. 🔘 Elige entre descargar el video o solo el audio
  3. 📂 Selecciona la carpeta donde quieres guardar tu archivo
  4. ▶️ Haz clic en “Descargar” y mira la barra de progreso
  5. 📁 Al terminar, abre tu carpeta con un solo clic

📥 Descarga ahora

(Próximamente versión Android y más)


🖥️ Requisitos mínimos

  • Windows 7 o superior
  • Internet para descargar los videos
  • Espacio en disco suficiente para guardar tus archivos
  • No necesita instalación, solo ejecuta el archivo

📞 Soporte y contacto

¿Dudas o sugerencias? Escríbeme:
🌐 Visita mi blog: Shalom Now


⚠️ Nota importante

Esta herramienta es para uso personal y educativo. ¡Respeta los derechos de autor y las políticas de YouTube! 🙏


🎉 ¡Empieza a guardar y disfrutar tus videos favoritos OFFLINE hoy mismo! 🎉

🤖 Descargador de YouTube 2.0: Guía Definitiva de tu App Ciberpunk 💻

Entrada fija

🤖 Descargador de YouTube 2.0: Guía Definitiva de tu App Ciberpunk 💻

¡Hola! Has creado una aplicación increíblemente sofisticada. Con la incorporación de hilos, una barra de progreso y una interfaz de usuario con un estilo de terminal retro, este proyecto merece una publicación completa y visualmente atractiva.

A continuación, te presento el manual completo, en formato Markdown, que incluye tu código exacto y una explicación exhaustiva de cada una de sus nuevas características, desde la instalación hasta su uso.


Requisitos Esenciales 🛠️

  • Un sistema operativo Linux (la guía se basa en distribuciones como Ubuntu/Debian).
  • Una terminal.
  • El archivo cc_icon.png en el mismo directorio de tu script, si quieres que la aplicación muestre el ícono.

Paso 1: Preparando tu Entorno Python 🐍

Si ya tienes Python y pip instalados, puedes saltarte este paso. Si no, sigue estas instrucciones para prepararte.

Actualización del Sistema

Siempre es una buena práctica comenzar con una actualización de tus paquetes.

sudo apt-get update
sudo apt-get upgrade

Instalación de Python y pip

Estos comandos instalarán tanto el intérprete de Python como su gestor de paquetes.

sudo apt-get install python3
sudo apt-get install python3-pip

Para verificar que todo está en orden, ejecuta estos comandos y asegúrate de que se muestre un número de versión.

python3 --version
pip3 --version

Paso 2: Configuración e Instalación de Librerías 📦

Ahora que tu entorno base está listo, es vital usar un entorno virtual (venv) para aislar tu proyecto y mantenerlo ordenado.

Creando y Activando el Entorno Virtual

Crea una carpeta para tu proyecto, navega a ella y activa el entorno virtual.

mkdir descargador_yt_ciberpunk
cd descargador_yt_ciberpunk
python3 -m venv venv
source venv/bin/activate

Instalando las Bibliotecas Adicionales

Tu aplicación usa varias bibliotecas que no vienen por defecto. Con el entorno virtual activo, instala todas las dependencias con un solo comando.

pip install pytubefix

pytubefix es la biblioteca principal para la descarga. Los otros módulos que utilizas, como tkinter, ttk, threading y os, son parte de la librería estándar de Python y no necesitan instalación adicional.


Paso 3: ¡El Código Completo! Tu App Ciberpunk en Acción 💻

A continuación, se presenta el código completo. Es una obra de ingeniería que combina lógica robusta con una interfaz de usuario avanzada. Copia y pega el código exactamente como está en un archivo llamado descargador.py.

import tkinter as tk
from tkinter import ttk, messagebox, filedialog
from pytubefix import YouTube
from pytubefix.exceptions import RegexMatchError
import threading
import re
import os
import webbrowser --- Lógica de la Aplicación --- def es_url_youtube(url):
"""Valida si la cadena proporcionada es una URL de YouTube."""
patron = r"^(https?://)?(www.)?(youtube.com|youtu.be)/.+$"
return re.match(patron, url) is not None def progreso_descarga(stream, chunk, bytes_remaining):
"""Función para actualizar la barra de progreso."""
total_size = stream.filesize
bytes_descargados = total_size - bytes_remaining
porcentaje = (bytes_descargados / total_size) * 100
barra_progreso['value'] = porcentaje
ventana.update_idletasks() def descarga_completada(stream, file_path):
"""Función que se llama cuando la descarga se completa."""
estado.set("¡Descarga completada!")
messagebox.showinfo("Éxito", f"Descarga completada en: {file_path}")
boton_descargar.config(state=tk.NORMAL)
boton_abrir_carpeta.config(state=tk.NORMAL)
ruta_descarga_final = os.path.dirname(file_path)
boton_abrir_carpeta.config(command=lambda: os.startfile(ruta_descarga_final) if os.name == 'nt' else os.system(f'open "{ruta_descarga_final}"') if os.name == 'darwin' else os.system(f'xdg-open "{ruta_descarga_final}"'))
barra_progreso['value'] = 0 def descargar_video():
url = entrada_url.get()
carpeta = ruta_descarga.get()
descargar_audio_solo = opcion_descarga.get() == "audio" if not url: messagebox.showwarning("Advertencia", "Por favor, ingresa una URL de YouTube.") return if not es_url_youtube(url): estado.set("URL inválida.") messagebox.showerror("Error", "La URL ingresada no es una URL válida de YouTube.") return try: boton_descargar.config(state=tk.DISABLED) boton_abrir_carpeta.config(state=tk.DISABLED) estado.set("Validando URL...") yt = YouTube(url, on_progress_callback=progreso_descarga, on_complete_callback=descarga_completada) estado.set(f"Descargando: {yt.title} ({'Audio' if descargar_audio_solo else 'Video'})") if descargar_audio_solo: audio = yt.streams.filter(only_audio=True).order_by('abr').desc().first() if audio: audio.download(output_path=carpeta, filename=f"{yt.title}.mp3") else: raise Exception("No se encontraron streams de audio disponibles.") else: video = yt.streams.get_highest_resolution() if video: video.download(output_path=carpeta) else: raise Exception("No se encontraron streams de video de alta resolución disponibles.") except RegexMatchError: estado.set("Error: URL de YouTube no válida.") messagebox.showerror("Error", "La URL proporcionada no parece ser una URL válida de YouTube.") boton_descargar.config(state=tk.NORMAL) boton_abrir_carpeta.config(state=tk.DISABLED) barra_progreso['value'] = 0 except Exception as e: estado.set(f"Error en la descarga: {e}") messagebox.showerror("Error", str(e)) boton_descargar.config(state=tk.NORMAL) boton_abrir_carpeta.config(state=tk.DISABLED) barra_progreso['value'] = 0 def elegir_carpeta():
carpeta = filedialog.askdirectory()
if carpeta:
ruta_descarga.set(carpeta) def iniciar_descarga():
hilo = threading.Thread(target=descargar_video)
hilo.start() def abrir_enlace_acerca_de():
webbrowser.open_new_tab("https://shalom-now.blogspot.com/") --- Lógica de la Animación de Escritura --- palabras_animacion = ["FAST", "EASY", "FREE", "MP3"]
palabra_idx = 0
letra_idx = 0
cursor_visible = True def animar_escritura():
global palabra_idx, letra_idx
palabra_actual = palabras_animacion[palabra_idx] if letra_idx < len(palabra_actual): texto_dinamico.set(palabra_actual[:letra_idx + 1]) letra_idx += 1 ventana.after(150, animar_escritura) else: ventana.after(1500, animar_borrado) def animar_borrado():
global palabra_idx, letra_idx
if letra_idx > 0:
texto_dinamico.set(palabras_animacion[palabra_idx][:letra_idx - 1])
letra_idx -= 1
ventana.after(100, animar_borrado)
else:
palabra_idx = (palabra_idx + 1) % len(palabras_animacion)
ventana.after(500, animar_escritura) def animar_cursor():
global cursor_visible
if cursor_visible:
etiqueta_cursor.config(text="")
else:
etiqueta_cursor.config(text="|")
cursor_visible = not cursor_visible
ventana.after(500, animar_cursor) --- Configuración de la Interfaz Gráfica --- ventana = tk.Tk()
ventana.title("Descargador de YouTube")
ventana.geometry("800x600")
ventana.resizable(True, True)
ventana.configure(bg="#000000") Cargar icono de Creative Commons try:
icono_cc_img = tk.PhotoImage(file="cc_icon.png")
ventana.iconphoto(True, icono_cc_img)
except tk.TclError:
pass Variables de Tkinter (movidas después de crear la ventana) ruta_descarga = tk.StringVar()
estado = tk.StringVar(value="Esperando URL…")
opcion_descarga = tk.StringVar(value="video")
texto_dinamico = tk.StringVar(value="") Estilo estilo = ttk.Style()
estilo.theme_use("clam") estilo.configure("TLabel", font=("Courier", 11), background="#000000", foreground="#00ff00")
estilo.configure("TEntry", font=("Courier", 11), fieldbackground="#0d0d0d", foreground="#00ff00", borderwidth=1, relief="solid")
estilo.configure("TButton", font=("Courier", 11), padding=6, borderwidth=1, relief="solid", background="#00ff00", foreground="#000000")
estilo.map("TButton", background=[('active', '#009900')]) Estilo para la barra de progreso estilo.configure("Custom.Horizontal.TProgressbar", thickness=25, troughcolor="#0d0d0d", background="#00ff00") estilo.configure("TRadiobutton", font=("Courier", 10), background="#000000", foreground="#00ff00")
estilo.configure("TLabelframe", background="#000000", borderwidth=1, relief="solid")
estilo.configure("TLabelframe.Label", font=("Courier", 11), background="#000000", foreground="#00ff00")
estilo.configure("Header.TLabel", font=("Courier", 24, "bold"), background="#000000", foreground="#00ff00") Widgets usando grid layout frame_header = tk.Frame(ventana, bg="#000000")
frame_header.grid(row=0, column=0, columnspan=3, padx=20, pady=(20, 10), sticky="ew")
frame_header.columnconfigure(0, weight=1) etiqueta_estatica = tk.Label(frame_header, text="DESCARGADOR YT ", font=("Courier", 12), bg="#000000", fg="#00ff00", justify="right")
etiqueta_estatica.pack(side=tk.LEFT)
etiqueta_dinamica = tk.Label(frame_header, textvariable=texto_dinamico, font=("Courier", 12), bg="#000000", fg="#00ff00")
etiqueta_dinamica.pack(side=tk.LEFT)
etiqueta_cursor = tk.Label(frame_header, text="|", font=("Courier", 12), bg="#000000", fg="#00ff00")
etiqueta_cursor.pack(side=tk.LEFT) animar_escritura()
animar_cursor() ttk.Label(ventana, text="URL del video de YouTube:").grid(row=1, column=0, padx=20, pady=(10, 5), sticky="w")
entrada_url = ttk.Entry(ventana)
entrada_url.grid(row=1, column=1, columnspan=2, padx=20, pady=(10, 5), sticky="ew") frame_opciones = ttk.LabelFrame(ventana, text="Opciones de Descarga")
frame_opciones.grid(row=2, column=0, columnspan=3, padx=20, pady=10, sticky="ew")
frame_opciones.columnconfigure(0, weight=1) radio_video = ttk.Radiobutton(frame_opciones, text="Video (Máxima Calidad)", variable=opcion_descarga, value="video")
radio_video.grid(row=0, column=0, padx=20, pady=5, sticky="w") radio_audio = ttk.Radiobutton(frame_opciones, text="Solo Audio (Máxima Calidad)", variable=opcion_descarga, value="audio")
radio_audio.grid(row=1, column=0, padx=20, pady=5, sticky="w") ttk.Label(ventana, text="Carpeta de Descarga:").grid(row=3, column=0, padx=20, pady=(10, 5), sticky="w")
entrada_carpeta = ttk.Entry(ventana, textvariable=ruta_descarga, state="readonly")
entrada_carpeta.grid(row=3, column=1, padx=20, pady=(10, 5), sticky="ew")
boton_elegir_carpeta = ttk.Button(ventana, text="Elegir…", command=elegir_carpeta)
boton_elegir_carpeta.grid(row=3, column=2, padx=(0, 20), pady=(10, 5), sticky="w") boton_descargar = ttk.Button(ventana, text="Descargar", command=iniciar_descarga)
boton_descargar.grid(row=4, column=0, columnspan=3, padx=20, pady=(20, 10), sticky="ew") barra_progreso = ttk.Progressbar(ventana, orient=tk.HORIZONTAL, mode='determinate', style="Custom.Horizontal.TProgressbar")
barra_progreso.grid(row=5, column=0, columnspan=3, padx=20, pady=10, sticky="ew") ttk.Label(ventana, textvariable=estado, foreground="#ff00ff").grid(row=6, column=0, columnspan=3, padx=20, pady=5, sticky="w") boton_abrir_carpeta = ttk.Button(ventana, text="Abrir Carpeta", state=tk.DISABLED)
boton_abrir_carpeta.grid(row=7, column=0, columnspan=3, padx=20, pady=(10, 20), sticky="ew") frame_acerca_de = ttk.LabelFrame(ventana, text="Acerca de")
frame_acerca_de.grid(row=8, column=0, columnspan=3, padx=20, pady=(20, 10), sticky="ew") etiqueta_acerca_de = ttk.Label(frame_acerca_de, text="Este programa permite descargar videos o solo el audio de videos de YouTube. La descarga se realizará siempre con la máxima calidad disponible para la opción seleccionada.")
etiqueta_acerca_de.grid(row=0, column=0, padx=10, pady=5, sticky="w") enlace_acerca_de = ttk.Label(frame_acerca_de, text="Más información", cursor="hand2", foreground="#00ff00")
enlace_acerca_de.grid(row=1, column=0, padx=10, pady=5, sticky="w")
enlace_acerca_de.bind("", lambda e: abrir_enlace_acerca_de()) ventana.columnconfigure(1, weight=1)
frame_opciones.columnconfigure(0, weight=1)
frame_acerca_de.columnconfigure(0, weight=1) ventana.mainloop()

🇲🇽 MÉXICO: El país con la MEJOR tecnología fiscal… ¡y la PEOR para elegir a sus gobernantes! 😡

Entrada fija

🇲🇽 MÉXICO: El país con la MEJOR tecnología fiscal… ¡y la PEOR para elegir a sus gobernantes! 😡📄🗳️

¿Sabías que México tiene uno de los sistemas de facturación más avanzados del mundo… pero seguimos votando como en el siglo pasado? 😲


💻 LA SUPREMACÍA FISCAL: CFDI 4.0

México lo logró. Con el CFDI 4.0, cada factura:
✅ Se valida en tiempo real.
✅ Usa códigos QR.
✅ Tiene firma digital.
✅ Tiene catálogos centralizados.
✅ Llega directo al SAT.
✅ Es obligatoria para todos.

Nada se escapa. Cada peso está vigilado. Cada producto clasificado. Cada pago documentado.

💰 El SAT puede decir en segundos quién compró, cuánto, cuándo, cómo y con qué régimen fiscal. ¡Y tú no puedes ni saber qué hizo tu diputado con tu dinero!


👥 ¿Y la transparencia política?

Cuando se trata de saber:

  • ¿Quién financió la campaña del candidato?
  • ¿Cuánto dinero público usó el gobernador en “consultorías”?
  • ¿Qué empresa ganó ese contrato millonario?
  • ¿Cuántos bienes tiene ese alcalde?

🥴 No hay QR.
🥴 No hay validación automática.
🥴 No hay datos cruzados.
🥴 No hay plataformas públicas reales.

Los ciudadanos no pueden rastrear el dinero político como el SAT rastrea nuestras facturas.


🤔 ¿Por qué no usan la misma tecnología para la democracia?

¡Muy simple! Porque…

Quizás si ponen esa tecnología en lo político… los corruptos temen PERDER EL PODER. 💥

🤫 No conviene tener un “SAT político” que detecte desviaciones, financiamientos ilegales, obras infladas o fortunas sospechosas.

Porque si cada gasto público tuviera que validarse como un CFDI…
👉 Muchos estarían en la cárcel.
👉 Otros jamás serían reelegidos.
👉 Y varios partidos desaparecerían.


🌍 ¿Qué otros países lo están haciendo mejor?

Aquí una lista de países que usan tecnología fiscal de primer nivel (algunos ya la aplican también al gobierno digital):

🌎 País🧠 Tecnología Fiscal
🇧🇷 BrasilNota Fiscal Electrónica (NF-e), validación centralizada.
🇨🇱 ChileDTE, interoperable y con control público.
🇵🇱 PoloniaKSeF: control fiscal automatizado, factura electrónica obligatoria.
🇩🇰 DinamarcaRechaza facturas en papel, todo digital, todo trazable.
🇸🇬 SingapurAdopta PEPPOL, sistema abierto y controlado.
🇲🇽 MéxicoCFDI 4.0: líder mundial en estructura y control… fiscal, no político.

⚖️ México podría tener la democracia más digital del planeta…

…Pero en vez de usar esta tecnología para analizar gobiernos, seguimos atrapados en:

❌ Campañas llenas de promesas.
❌ Votos sin análisis.
❌ Gobernantes que no rinden cuentas.
❌ Obras públicas sin trazabilidad.


🔥 ¿Y si hubiera un “SAT de la democracia”?

📊 Que analice cada peso gastado por los gobiernos.
📲 Que permita buscar a cada político por CURP y ver:

  • Sus contratos.
  • Sus facturas.
  • Su patrimonio.
  • Sus promesas incumplidas.

👀 ¡Imagínate entrar a una app y ver cuántos millones ha cobrado un diputado por no hacer nada en 3 años!


💡 Conclusión:

👉 México tiene la capacidad técnica para vigilar cada factura que tú emites.
👉 Pero no tiene la voluntad política para vigilar a quienes administran tus impuestos.

🎯 Porque si aplican el mismo nivel de control al poder… ELLOS LO PIERDEN.


🚨 El dato final que indigna:

El SAT puede auditarte si emites mal una factura de $50 pesos…
Pero nadie audita al político que desapareció millones.


🗳️ ¡Exige tecnología para la democracia, no solo para cobrarte impuestos!

🔁 Comparte si crees que México necesita un CFDI político YA.
📢 Que se fiscalice TODO: desde tortillas hasta el presupuesto federal.

🚨 La CURP Biométrica en México: ¿Avance Digital o Amenaza a la Privacidad? 🇲🇽

Entrada fija

🚨 La CURP Biométrica en México: ¿Avance Digital o Amenaza a la Privacidad? 🇲🇽

“No se puede cambiar una huella digital como se cambia una contraseña.” — Derechos Digitales


🔎 1. ¿Qué es la CURP Biométrica?

La CURP biométrica es la nueva forma de identificación obligatoria en México, aprobada en 2025, que incluirá:

  • 📷 Fotografía del rostro
  • 🔍 Huellas dactilares
  • 👁 Escaneo del iris
  • ✍️ Firma electrónica

Su objetivo declarado es combatir la desaparición de personas y modernizar el sistema de identificación nacional. Pero… ¡no todo es tan claro!


🤔 2. ¿Voluntaria o Obligatoria?

Aunque el gobierno afirma que su uso es voluntario, la ley establece que:

  • Será la única forma de identificación para trámites oficiales y privados
  • No contar con ella podría impedir el acceso a servicios públicos

⚠️ Esto genera una contradicción legal y una forma de consentimiento forzado.


😯 3. Riesgos para tu Privacidad

♻️ Datos irremplazables

Tus huellas o iris no pueden cambiarse si se filtran o roban. ¡Y eso ya ha pasado antes en México!

🚫 Falta de supervisión

Tras la desaparición del INAI, no hay autoridad autónoma que vigile el uso de tus datos.

📊 Vigilancia masiva

El sistema podría rastrear tus:

  • Consultas médicas
  • Movimientos financieros
  • Uso de transporte
  • Ubicación en tiempo real

🔒 4. Lo que dicen los expertos

Organizaciones como R3D y Derechos Digitales advierten que:

  • No hay garantías legales suficientes
  • Podría discriminar a personas trans, adultas mayores o con huellas deterioradas
  • Está diseñado más para vigilar que para proteger

“Es un sistema coercitivo que castiga a quien no quiera entregar sus datos biométricos.” — R3D


🚀 5. Argumentos del Gobierno

El director de la Agencia Digital, Pepe Merino, afirma que:

  • La CURP biométrica no es obligatoria
  • Solo se usará en casos con investigación de desaparición
  • La base de datos no estará centralizada

⚠️ Pero estas afirmaciones contrastan con el contenido real de las leyes aprobadas.


🌐 6. Comparación Internacional

  • En Brasil, el Tribunal Supremo prohibió un sistema similar por ser inconstitucional
  • En Europa, la Convención 108+ exige protección legal robusta y supervisión independiente
  • En India, su base de datos AADHAAR ha sido hackeada múltiples veces

⛔️ 7. Peligros reales

RiesgoConsecuencia
🔎 Filtración de datosNo puedes cambiar tu iris o huella
🚫 DiscriminaciónPoblaciones vulnerables excluidas
🕵️‍♂️ Vigilancia sin límitesGeolocalización, perfilamiento, vigilancia financiera
🙅‍ No hay contrapesosNo hay INAI, ni jueces que supervisen

📊 8. Lo que opina la gente

  • ❌ 49% no confía en que el gobierno protegerá sus datos
  • ❌ 49% está en desacuerdo con los datos biométricos obligatorios

¿Y si cambian de gobierno y usan esa base para vigilar opositores?” — Usuario en redes


🤝 9. ¿Qué podemos hacer como ciudadanos?

  • 🔎 Informarte con fuentes independientes
  • ✉️ Exigir leyes con protección biométrica real
  • 🚪 Participar en colectivos de derechos digitales
  • 🙏 Pedir que vuelva una autoridad como el INAI

🚫 Conclusión: ¡No es un simple trámite!

La CURP biométrica, tal como está diseñada, representa un riesgo real para tu privacidad, tus derechos y tu seguridad.

❌ No es segura
❌ No es voluntaria
❌ No tiene vigilancia independiente

⚡️ Solo con leyes claras, tecnología responsable y participación ciudadana podremos evitar que esta medida se convierta en una herramienta de control masivo.


🔖 Fuentes consultadas

“Si no luchas por tus datos, algún día serán usados contra ti.”

¡Vivir del Código y la Cripto sin Ser Rastreado! El Plan Realista para Programadores que Quieren Salir del Sistema

Entrada fija

¡Vivir del Código y la Cripto sin Ser Rastreado! El Plan Realista para Programadores que Quieren Salir del Sistema

Imagina trabajar desde un pueblo remoto en México, sin cuentas bancarias, sin SAT, sin jefe, sin facturas. Solo tú, tu laptop, internet y una wallet llena de cripto. Este no es un sueño conspiranoico: es una realidad alcanzable para programadores que buscan independencia total.

Si ya tienes experiencia en PHP, CodeIgniter o Laravel, y estás harto del sistema, esta guía te mostrará cómo convertirte en un programador pseudónimo que vive y gana en criptomonedas.


📅 El Contexto: Por Qué Salirse del Sistema

México tiene uno de los regímenes fiscales más agresivos de Latinoamérica. El SAT ahora puede rastrear:

  • Tus cuentas bancarias.
  • Facturas emitidas.
  • Actividad en plataformas digitales.
  • E incluso apps como MercadoPago, Stripe o Paypal.

¿Y qué ofrece el sistema a cambio? Impuestos, inseguridad, inflación y un estilo de vida limitado.

Pero gracias al auge de la tecnología descentralizada (blockchain, Web3, criptomonedas), puedes vivir y trabajar fuera de todo esto, sin esconderte, y sin renunciar a buenos ingresos.


👨‍💻 El Perfil Ideal: Programador con Experiencia Web2

No necesitas ser experto en Ethereum o Solana. Si sabes:

  • PHP (CodeIgniter o Laravel)
  • HTML/CSS/JS básico
  • MySQL/PostgreSQL

…ya tienes las bases para empezar. La transición a Web3 es más fácil de lo que parece, y muchas DAOs y startups buscan desarrolladores con experiencia “real” en proyectos funcionales.


✨ Etapas del Plan para Salir del Sistema y Vivir de Cripto

✅ Fase 1: Anonimato Digital y Seguridad

Antes de ganar dinero, necesitas proteger tu identidad:

  • Crea correo anónimo (ProtonMail o Tutanota).
  • Usa alias en GitHub, Telegram y Nostr.
  • Instala una wallet segura (Metamask, Monerujo, Sparrow).
  • Usa Brave + VPN (Mullvad) o directamente Tor.

✅ Fase 2: Entrenamiento en Web3 y Automatización

Con tu experiencia en Laravel o PHP:

  • Aprende Solidity y Ethers.js (CryptoZombies es perfecto para empezar).
  • Crea frontales con Laravel + Vue o React conectados a Metamask.
  • Aprende automatización con Python para bots y tareas cripto.

✅ Fase 3: Primeros Ingresos Pseudónimos

Regístrate en:

  • Gitcoin.co: bounties, grants y hackatones.
  • Dework.xyz: tareas remuneradas por DAOs.
  • TalentLayer.org: trabajos freelance Web3.
  • Nostr + Lightning tips (para contenido y herramientas libres).

Ganas en ETH, USDC, DAI o tokens de proyectos. Sin SAT. Sin bancos.

✅ Fase 4: Vivienda y Economía Real

Con ingresos estables:

  • Compra terreno en zona rural ($50,000–150,000 MXN).
  • Construye cabaña, camper o domo ($80,000–150,000 MXN).
  • Instala energía solar básica ($10,000 MXN).
  • Internet: Starlink ($2,300/mes) o LTE con antena externa.

Puedes vivir con $10,000–15,000 MXN/mes, incluso menos si cultivas.


⚡ Tecnologías y Lenguajes Más Demandados en Web3

CategoríaLenguaje / TechComentario
Smart contractsSolidityEstándar de Ethereum y cadenas EVM
Frontend descentralizadoReact, TypeScript, Ethers.jsPara conectar DApps con Metamask
Automatización y botsPython, Node.jsScripts para trading, arbitraje, NFTs
Blockchain bajo nivelRust, GoSolana, Polkadot, Cosmos
Privacidad y ZKCircom, SnarkJS, NoirZero Knowledge Proofs
Backend y APIsNode.js, LaravelConexiones Web3 y paneles de control

💸 Ingresos Estimados en Cripto (MXN)

Nivel de experienciaIngresos USD/MesPesos aprox.
Principiante$300 – $600$5,000 – $10,500
Intermedio$800 – $2,000$14,000 – $35,000
Avanzado$2,500 – $5,000$43,000 – $87,000
Experto/auditor$6,000+$100,000+

Y vives con $12,000 MXN o menos en una zona rural. El resto puedes ahorrarlo en BTC, XMR o stablecoins.


📆 Cronograma Realista para Salir del Sistema

MesObjetivoTareas principales
1Anonimato y walletsAlias, correo, Metamask, VPN
2Aprendizaje Solidity + Web3CryptoZombies, Remix, conectar contratos
3Primeros proyectosLaravel + Vue con Web3.js, subir a GitHub
4-5Primeros ingresosGitcoin, Dework, clientes p2p
6-8Comprar terrenoTrato directo, sin notario si es informal
9-12Vida 100% descentralizadaCabaña, Starlink, alimentación local

🚀 Historias Reales (Resumen)

  • Dev pseudónimo @0xRebel: Vive en Oaxaca rural, gana $3,000 USD/mes y gasta $8,000 MXN. Casi todo su dinero lo tiene en cripto.
  • Whitehat en Code4rena: Gana $8,000 USD mensuales revisando contratos Solidity. Vive en Uruguay sin rastro bancario.
  • Creador Nostr: Recibe tips en Lightning publicando herramientas y scripts open source.

🔐 Conclusión: Se Puede

Si eres programador, ya tienes lo necesario para salir del sistema y vivir libre con cripto. Solo necesitas:

  • Aprender lo esencial de Web3.
  • Operar con disciplina y bajo perfil.
  • Trabajar, ganar y gastar fuera del circuito bancario.

No es fácil. No es instantáneo. Pero es totalmente posible.

¡Hazlo por libertad, por privacidad, o simplemente por convicción!


🧾 Guía práctica: ¿Cómo calcular tu finiquito en México?

Entrada fija

🧾 Guía práctica: ¿Cómo calcular tu finiquito en México?

Cuando termina una relación laboral, ya sea por renuncia, despido justificado o despido injustificado, es tu derecho recibir un finiquito o liquidación, dependiendo del caso.

A continuación, te explicamos qué se incluye, cómo calcularlo y cómo defenderte si estás ante una negociación legal.


✅ ¿Qué incluye un finiquito?

En caso de renuncia o separación voluntaria, el patrón debe pagarte:

  1. Aguinaldo proporcional
  2. Vacaciones proporcionales
  3. Prima vacacional
  4. Salarios pendientes (si no se pagaron los últimos días)
  5. Otros conceptos (bonos, comisiones, utilidades, etc.)

💥 ¿Qué incluye una liquidación por despido injustificado?

Si fuiste despedido sin causa legal justificada, tienes derecho a:

  1. Todo lo anterior (finiquito completo)
  2. 3 meses de salario como indemnización
  3. 20 días de salario por cada año trabajado
  4. Prima de antigüedad (12 días por año, incluso si tienes menos de 15 años)
  5. Salarios caídos (en juicio, si procede)

📊 Ejemplo genérico con datos ficticios:

Situación: Trabajador con más de 4 años de antigüedad, salario diario aproximado, y salida reciente de la empresa.

ConceptoMonto aproximado
Aguinaldo proporcionalSegún días trabajados en el año actual
Vacaciones proporcionalesSegún lo acumulado en el ciclo anual
Prima vacacional25% sobre vacaciones proporcionales (por ley)
Total finiquito (renuncia)Suma de los conceptos anteriores
Indemnización 3 meses3 × salario mensual integrado
20 días por año trabajadoPor cada año completo, se multiplica × 20 días
Prima de antigüedad12 días × cada año, topado a 2 UMAs diarias
Total con indemnización completaSuma de todo lo anterior

📎 Puedes descargar una plantilla en Excel con las fórmulas aquí:
👉 Descargar Excel del cálculo de finiquito


🧠 Recomendaciones al acudir a Conciliación y Arbitraje

  1. Lleva tus recibos de nómina XML (son prueba válida ante la ley, incluso si no tienes contrato físico).
  2. ✅ Verifica que la fecha de ingreso y antigüedad estén correctas en el XML (FechaInicioRelLaboral).
  3. ✅ Si firmaste una renuncia previamente o en blanco, puedes impugnarla.
  4. ✅ No firmes ningún finiquito o renuncia sin entender sus términos. Solicita copia.
  5. ✅ La PROFEDET te puede asesorar gratis (sin necesidad de abogado particular).
  6. ⚖️ Tienes 2 meses desde la fecha del despido para demandar.

📚 Referencias legales


📌 Conclusión

El finiquito y la liquidación no son favores: son derechos. Saber cómo se calculan y cómo reclamarlos es clave para que no se te niegue lo que te corresponde.

Si deseas ayuda para llenar tu Excel con tus datos reales o necesitas calcular automáticamente con tus archivos XML, puedo ayudarte.

🐧 Qué hacer después de instalar Linux Mint 22 XFCE: Guía práctica para desarrolladores y usuarios avanzados

Entrada fija

🐧 Qué hacer después de instalar Linux Mint 22 XFCE: Guía práctica para desarrolladores y usuarios avanzados

Linux Mint 22 XFCE es una distribución ligera, estable y amigable para quienes buscan un entorno eficiente sin perder potencia. Tras instalarla, lo ideal es optimizar el sistema para desarrollo, productividad y administración. Esta guía está basada en una sesión real de uso (extraída de comandos del historial bash) y evitará errores comunes como intentar instalar Emesene (que ya no es compatible).

✅ 1. Actualiza el sistema

Primero lo primero: asegurarse de tener todo al día.

sudo apt update && sudo apt upgrade -y

💻 2. Instalar herramientas de virtualización (VirtualBox)

Hay dos caminos: instalación manual desde el sitio oficial o vía repositorio.

Opción 1: Script oficial

cd ~/Descargas/
wget https://download.virtualbox.org/virtualbox/7.1.12/VirtualBox-7.1.12-169651-Linux_amd64.run
chmod +x VirtualBox-7.1.12-169651-Linux_amd64.run 
sudo ./VirtualBox-7.1.12-169651-Linux_amd64.run

Opción 2: Desde repositorios

sudo apt install virtualbox virtualbox-ext-pack -y

🌐 3. Instalar herramientas de conexión remota

Remmina es ideal para conectarte a otros escritorios (RDP, VNC, etc.)

sudo apt install remmina -y

🧰 4. Instalar herramientas básicas para desarrolladores

Software útil

sudo apt install software-properties-common wget curl git unzip -y

🐘 5. PHP 8.3 + Composer

Instalación de PHP 8.3 y módulos necesarios para desarrollo web:

sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install php8.3 php8.3-cli php8.3-common php8.3-mbstring php8.3-xml php8.3-mysql php8.3-curl php8.3-zip php8.3-gd php8.3-intl php8.3-soap php8.3-sqlite3 -y

Verifica:

php -v

Instalar Composer

curl -sS https://getcomposer.org/installer -o composer-setup.php
HASH=$(curl -sS https://composer.github.io/installer.sig)
php -r "if (hash_file('sha384', 'composer-setup.php') === '$HASH') { echo 'Verificado correctamente'.PHP_EOL; } else { echo 'ERROR: Archivo corrupto'.PHP_EOL; unlink('composer-setup.php'); }"
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
composer --version
rm composer-setup.php

🧪 6. Xdebug para depuración con NetBeans o VS Code

sudo apt install php8.3-xdebug -y

Agrega la configuración al final del archivo:

sudo tee -a /etc/php/8.3/cli/php.ini > /dev/null << 'EOF'

[xdebug]
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=127.0.0.1
xdebug.client_port=9003
xdebug.idekey=netbeans-xdebug
EOF

🖥️ 7. Instalar herramientas gráficas populares

Visual Studio Code

wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
sudo install -o root -g root -m 644 packages.microsoft.gpg /usr/share/keyrings/
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" | sudo tee /etc/apt/sources.list.d/vscode.list
sudo apt update
sudo apt install code

DBeaver (cliente de base de datos)

wget https://dbeaver.io/files/dbeaver-ce_latest_amd64.deb
sudo apt install gdebi-core -y
sudo gdebi dbeaver-ce_latest_amd64.deb

☕ 8. Instalar JDK, Scala y Git

sudo apt install default-jdk scala git -y

🐘 9. XAMPP

Si usas XAMPP:

wget https://sourceforge.net/projects/xampp/files/XAMPP%20Linux/8.2.12/xampp-linux-x64-8.2.12-0-installer.run
chmod +x xampp-linux-x64-8.2.12-0-installer.run
sudo ./xampp-linux-x64-8.2.12-0-installer.run

📦 10. Clonar y configurar proyectos personales

cd ~/fuentes/
git clone https://github.com/julio101290/ci4jcposv2
cd ci4jcposv2/
composer update
php spark migrate
php spark db:seed BoilerplateSeeder
php spark serve

💬 11. Mensajería y comunicación

Telegram Desktop

flatpak install flathub org.telegram.desktop

Pidgin (alternativa a clientes antiguos)

sudo apt install pidgin -y

⚠️ No recomendado

Durante el proceso se intentó compilar e instalar Emesene, una aplicación obsoleta que ya no tiene soporte. Se desaconseja seguir este camino ya que requiere instalar Python 2.7 manualmente y compilar bibliotecas GTK antiguas.


🧠 Consejo final

💡 Si planeas trabajar con múltiples versiones de PHP, asegúrate de usar update-alternatives para configurarlas correctamente:

sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.3 83

✅ Conclusión

Linux Mint 22 es una plataforma robusta para usuarios intermedios y avanzados. Tras su instalación, puedes transformar tu sistema en un entorno completo de desarrollo y productividad con solo unos cuantos comandos. Esta guía te lleva paso a paso, evitando errores comunes y enfocándose en herramientas modernas, seguras y mantenidas.


¿Quieres que esta publicación sea un artículo en PDF o compartible en Markdown? Puedo generártelo.

🎸 Cómo compilar e instalar correctamente gxplugins.lv2 en Linux Mint (y Debian/Ubuntu)

Entrada fija

🎸 Cómo compilar e instalar correctamente gxplugins.lv2 en Linux Mint (y Debian/Ubuntu)

Los GxPlugins.lv2 son una colección de efectos LV2 inspirados en equipos de guitarra reales. Perfectos para usar con Guitarix, Carla o cualquier host compatible con LV2. Aunque no están disponibles directamente como paquete .deb, puedes compilarlos fácilmente.

Aquí te muestro cómo hacerlo correctamente.


✅ 1. Instalar dependencias necesarias

Abre la terminal y ejecuta:

sudo apt update
sudo apt install git build-essential lv2-dev libgtk-3-dev libsndfile1-dev libsamplerate0-dev

También se recomienda instalar Guitarix si aún no lo tienes:

sudo apt install guitarix

📥 2. Clonar el repositorio (¡con submódulos!)

Este paso es fundamental. Clona el repositorio incluyendo los submódulos, así:

git clone --recurse-submodules https://github.com/brummer10/gxplugins.lv2.git
cd gxplugins.lv2

Si ya clonaste sin submódulos, puedes corregirlo así:

git submodule update --init --recursive

🛠️ 3. Compilar todos los plugins

Desde la raíz del repositorio, compila con:

make -j$(nproc)

Este comando usará todos los núcleos de tu CPU y compilará todos los efectos disponibles.


📂 4. Instalar los plugins

Para instalarlos en tu sistema:

make install

Esto copiará los plugins a ~/.lv2 o /usr/local/lib/lv2.


🎛️ 5. Usar en Guitarix

Abre Guitarix y revisa la lista de efectos. Deberías encontrar los nuevos plugins como:

  • GxSD1
  • GxFuzzFace
  • GxSunFace
  • GxSlowGear
  • GxPlexi
  • GxSuperFuzz
  • … y muchos más.

¡Listos para integrarlos en tu cadena de señal!


⚠️ Problemas comunes y soluciones

ProblemaSolución
Plugins no aparecenAsegúrate de que ~/.lv2 o /usr/local/lib/lv2 estén en la ruta de búsqueda de tu host
Makefile no encontradoAsegúrate de estar en el directorio raíz del repositorio
Faltan efectosClonaste sin --recurse-submodules, corrige con git submodule update --init --recursive
Permisos en instalaciónUsa sudo make install si quieres instalar a nivel global

🧪 Bonus: ¿Dónde se instalan?

Los efectos LV2 van a una carpeta como:

  • ~/.lv2/GxSD1.lv2/
  • o globalmente en: /usr/local/lib/lv2/

Estos contienen los archivos .ttl, binarios .so, íconos, etc.


✅ Conclusión

Compilar e instalar gxplugins.lv2 es sencillo cuando sigues los pasos adecuados. Con ellos, puedes ampliar tus capacidades de procesamiento de audio en Linux con efectos que suenan auténticamente analógicos y ochenteros.

Si tocas rock, metal, synthwave o cualquier estilo vintage, estos plugins son esenciales.

🪙 Diferencias entre Litecoin y Ripple (XRP)

Entrada fija

🪙 Diferencias entre Litecoin y Ripple (XRP)

Una comparación completa entre Litecoin (LTC) y Ripple (XRP): velocidad, usos ideales, descentralización y más.


⚖️ Diferencias Principales

CaracterísticaLitecoin (LTC)Ripple (XRP)
Año de creación20112012
FundadorCharlie LeeRipple Labs (empresa privada)
Propósito principalSer “la plata” al “oro” de Bitcoin (uso general)Sistema para transferencias interbancarias rápidas
Algoritmo de consensoProof of Work (PoW) – ScryptXRP Ledger Consensus Protocol
Tiempo por bloque~2.5 minutos~4 segundos
Velocidad de transacción56 TPS aprox.~1,500 TPS aprox.
Costo de transacciónMuy bajo (< 1 centavo)Extremadamente bajo (~0.0001 XRP)
DescentralizaciónModeradamente descentralizadoParcialmente descentralizado (control de validadores)
Oferta máxima84 millones LTC100 mil millones XRP
MineríaSí (Scrypt PoW)No (preminado)
EnfoqueTransferencias P2P, pagos y ahorroTransferencias bancarias globales y liquidez

⚡ Velocidad y Escalabilidad

MétricaLitecoinRipple (XRP)
Tiempo promedio de transacción2.5 minutos3 a 5 segundos
Capacidad de transacciones por segundo (TPS)~56~1,500+
Finalidad de la transacciónNecesita confirmaciones posterioresCasi instantánea

🏆 Ganador en velocidad: Ripple (XRP)


🧭 ¿Cuándo Usar Cada Uno?

✅ Usar Litecoin cuando:

  • Buscas una alternativa a Bitcoin para pagos cotidianos.
  • Prefieres tarifas bajas con minería descentralizada.
  • Deseas participar como minero o validar sin permisos.
  • Te interesa almacenar valor en una red abierta.

✅ Usar Ripple (XRP) cuando:

  • Necesitas transferencias bancarias globales casi instantáneas.
  • Priorizas la eficiencia sobre la descentralización.
  • Quieres participar en remesas o sistemas de liquidez institucional.
  • Necesitas integración en sistemas corporativos (RippleNet, ODL).

🔓 Descentralización

🔹 Litecoin:

  • Usa prueba de trabajo (PoW), nodos distribuidos.
  • Mineros compiten de forma abierta.
  • Más alineado con los principios de Bitcoin.

🔸 Ripple (XRP):

  • Sin minería, validadores limitados (Ripple Labs tiene gran control).
  • Parte del suministro aún está en poder de la empresa.
  • Red más rápida, pero menos descentralizada.

🧠 Conclusión

Necesitas…Usa…
Transacciones rápidas, baratas y segurasRipple (XRP)
Mayor descentralización y uso como dineroLitecoin (LTC)

Ambos proyectos tienen fortalezas distintas. Ripple está diseñado para instituciones financieras, mientras que Litecoin es una criptomoneda más tradicional y descentralizada.


¿Te gustó esta comparación? ¡Guárdala, compártela o imprímela como guía rápida!

Cambios Políticos, Económicos y Sociales para el 24 de Julio de 2026: Un Horizonte en Transformación

Entrada fija

Cambios Políticos, Económicos y Sociales para el 24 de Julio de 2026: Un Horizonte en Transformación

“Los cambios no ocurren de la noche a la mañana, pero el 24 de julio de 2026 podría ser una fecha clave en la historia de este siglo.”

A medida que el mundo avanza hacia la segunda mitad de la década de 2020, el 24 de julio de 2026 se perfila como una fecha significativa en la que se podrían estar materializando profundas transformaciones políticas, económicas y sociales. Este artículo analiza, con base en tendencias reales y proyecciones confiables, qué podría estar ocurriendo globalmente y en algunas regiones clave en ese preciso momento.


🌏 Panorama Político Internacional

1. Estados Unidos: Preámbulo a una Elección Decisiva

En julio de 2026, Estados Unidos estará a tan solo unos meses de celebrar sus elecciones presidenciales de noviembre. Las campañas estarán en su punto más álgido, marcadas por una fuerte polarización política, discursos sobre inmigración, regulación tecnológica, tensiones con China y un debate creciente sobre el papel de la inteligencia artificial.

Podría haber un resurgimiento de candidatos independientes o de terceros partidos debido al desencanto general con el bipartidismo. Este ambiente tenso también podría derivar en protestas sociales o incluso episodios de violencia política.

2. Europa: Reconfiguración de Poderes y Políticas de Defensa

El Parlamento Europeo habrá cambiado su composición en 2024, y para 2026 varios países estarán transitando hacia nuevos equilibrios internos. Alemania, por ejemplo, habrá aprobado un presupuesto con inversiones sin precedentes (€126 mil millones), enfocadas en defensa, transición energética y digitalización.

Francia, España e Italia podrían estar bajo gobiernos de coalición, con tensiones sociales por la inflación, la migración y el desempleo juvenil.

3. América Latina: Nuevos Gobiernos, Viejos Retos

México habrá tenido elecciones presidenciales en 2024. Para julio de 2026, la nueva administración estará a medio camino, con una opinión pública dividida entre las expectativas de cambio y la realidad de los retos persistentes como la inseguridad, el narcotráfico, la corrupción y la pobreza estructural.

Brasil estará entrando en fase electoral, con un clima polarizado y con temas como el Amazonas, el agronegocio y la justicia social en la agenda.

4. Rusia y China: Consolidación Autoritaria

En Rusia, la expansión de poderes autoritarios continuará, especialmente si no hay avances diplomáticos tras el vencimiento del tratado nuclear New START (febrero 2026). En China, Xi Jinping podría estar reforzando su control mediante mayor censura, control digital y vigilancia algorítmica, aunque enfrentando tensiones con Occidente por temas comerciales y de derechos humanos.


📈 Transformaciones Económicas en Marcha

1. Crecimiento Global Desigual

El crecimiento económico mundial rondará el 2.8% a 2.9% para 2026, según proyecciones del Banco Mundial y Allianz Research. Este crecimiento será modesto y desigual:

  • EE.UU.: Podría estar saliendo de una recesión moderada sufrida en 2025, con una tasa de desempleo cercana al 6% y debates intensos sobre el gasto fiscal.
  • Zona Euro: Con crecimientos bajos pero sostenidos (1.3% a 1.5%), impulsados por inversión verde y digital.
  • India: Emergente como líder global, con un crecimiento del PIB superior al 6% y un ecosistema tecnológico en expansión.
  • América Latina: Atrapada entre el proteccionismo, la deuda y los precios internacionales de commodities.

2. Inflación Persistente, Aunque Controlada

La inflación global se estabilizará alrededor del 2.5% al 3%, con variaciones significativas:

  • En Europa y Japón, las tasas de interés seguirán siendo moderadas.
  • En América Latina, la inflación seguirá siendo un problema estructural en países como Argentina y Venezuela, pero más controlada en Chile, Perú y México.

3. Avance de la Inteligencia Artificial y Automatización

Sectores como salud, manufactura, servicios financieros y logística serán profundamente transformados por la IA. Empresas que adopten soluciones de automatización y análisis predictivo verán mayores beneficios.

Las Big Tech seguirán expandiéndose, pero podrán enfrentar regulaciones antimonopolio y mayor escrutinio en temas de privacidad y empleo.

4. Mercados Financieros: Volatilidad y Esperanza

Según Morgan Stanley, podría haber una “recuperación en rodaje”, con los mercados bursátiles creciendo cerca del 12% para mediados de 2026. Se verá un impulso por:

  • Reducción de tasas de interés.
  • Adopción de IA.
  • Recuperación de las cadenas de suministro.

Los sectores ganadores: tecnología, energía limpia, salud digital y ciberseguridad.


🌍 Cambios Sociales en Perspectiva

1. Envejecimiento Global y Crisis Demográfica

Las proyecciones indican que la mayor parte del planeta estará en declive demográfico para 2026:

  • Asia Oriental (China, Japón, Corea) sufrirá una caída de población y una crisis en sistemas de pensiones.
  • Europa enfrentará un envejecimiento acelerado.
  • América Latina se aproximará a una transición demográfica que traerá retos en salud, empleo joven y educación.

2. Sociedad Polarizada y Demandante

La tensión social crecerá en muchas regiones:

  • Desigualdad económica creciente.
  • Falta de acceso a vivienda y servicios.
  • Frustración juvenil ante empleos precarios.

Esto podría traducirse en protestas, movimientos sociales y mayor demanda de justicia climática y equidad.

3. Avance del Control Digital y Nuevas Regulaciones

Con la digitalización completa de muchos servicios, se extenderá el uso de identidad digital, reconocimiento facial, vigilancia algorítmica y control sobre la información. Esto generará nuevos dilemas sobre la privacidad, la libertad y el control estatal.

Los estados democráticos podrán implementar leyes para proteger derechos digitales, mientras que regímenes autoritarios aumentarán la censura.

4. Medio Ambiente y Acción Climática

En 2026, el cambio climático ya no será una predicción futura, sino una realidad visible:

  • Ola de calor en Europa y Norteamérica.
  • Sequías prolongadas en Sudamérica y África.
  • Eventos extremos frecuentes (huracanes, incendios forestales, tormentas).

Esto activará movimientos ciudadanos y políticas públicas para acelerar la transición hacia energías limpias y descentralizadas.


🚀 Conclusión: Una Fecha Clave en el Horizonte Global

El 24 de julio de 2026 podría parecer una fecha más en el calendario, pero en realidad se sitúa en un punto de inflexión de la historia contemporánea. Lo que se está construyendo para ese entonces está marcado por los siguientes pilares:

  • Reordenamiento geopolítico: nuevas alianzas, amenazas emergentes, consolidación de potencias autoritarias.
  • Desafíos económicos complejos: transiciones tecnológicas, nuevos ciclos de deuda, competencia comercial global.
  • Cambios sociales disruptivos: envejecimiento, crisis climática, revoluciones culturales digitales.

Estamos en la antesala de un nuevo orden mundial. El rumbo que tomen los gobiernos, las empresas y las sociedades en este tiempo será determinante para el futuro inmediato del planeta.


“El futuro no se predice, se construye. Y el 24 de julio de 2026 puede ser un gran ladrillo en esa obra colectiva llamada humanidad.”

🚀 Komodo Wallet: El Refugio Seguro para Transferencias desde LBRY 📲⚡

Entrada fija

🚀 Komodo Wallet: El Refugio Seguro para Transferencias desde LBRY 📲⚡

🌐 En medio del caos, Komodo sigue firme

En los últimos meses, muchos usuarios del ecosistema LBRY y su token nativo LBC (LBRY Credits) han experimentado un fenómeno preocupante: el bloqueo progresivo de transacciones y el retiro del soporte por parte de múltiples billeteras y exchanges. La presión regulatoria, especialmente desde organismos como la SEC de EE.UU., ha empujado a plataformas como Bittrex, CoinEx e incluso algunas DEX a retirar el soporte para LBC, dificultando enormemente su uso.

Sin embargo, Komodo Wallet ha demostrado ser una excepción valiosa y resiliente en este entorno hostil.


🔗 ¿Qué es Komodo Wallet?

Komodo Wallet es una billetera multi-activo desarrollada por el ecosistema Komodo Platform, conocida por su enfoque descentralizado, interoperabilidad y soporte a blockchains alternativas. A través de AtomicDEX, Komodo permite swaps entre múltiples criptos sin depender de custodios centralizados, lo cual va muy de la mano con la filosofía de LBRY.

🧩 Komodo es compatible con tokens como LBC, incluso cuando otros servicios han cesado su soporte.


📤 Transferencias desde LBRY a Komodo: ¿Por qué sigue siendo posible?

LBRY Desktop (y Odysee como frontend) aún permiten el retiro de LBC, pero requieren que el usuario tenga una billetera que reconozca correctamente las direcciones y la red de LBRY.

Las direcciones Komodo (KMD) son compatibles con el protocolo subyacente de LBRY, ya que ambos derivan de tecnologías similares (como Bitcoin y Zcash forks). Por eso, una dirección de Komodo puede recibir LBC directamente, siempre que se use una billetera que no filtre o restrinja estos activos.

🔒 Sin censura, sin bloqueo

Mientras billeteras como Trust Wallet o Exodus han eliminado el soporte, Komodo ha mantenido su neutralidad tecnológica y sigue permitiendo la gestión de LBC, lo cual es esencial para los creadores que desean retirar sus ganancias desde LBRY.


⚙️ ¿Cómo transferir LBC desde LBRY a Komodo Wallet?

  1. Descarga Komodo Wallet (o AtomicDEX) desde el sitio oficial:
    👉 https://komodoplatform.com/atomicdex
  2. Crea una nueva billetera y guarda tu frase de recuperación.
  3. Busca el activo LBC en la lista de tokens disponibles.
  4. Obtén tu dirección de depósito de LBC.
  5. En LBRY Desktop, ve a “Recompensas” o “Billetera” y selecciona Enviar.
  6. Pega tu dirección de Komodo y transfiere la cantidad deseada de LBC.
  7. En pocos minutos, verás los fondos reflejados en Komodo Wallet.

⚠️ Importante: Komodo no es un exchange custodio. Tú tienes el control total de tus claves privadas.


🧠 ¿Por qué es importante esto para la descentralización?

La supervivencia de tokens como LBC, en medio del ataque regulatorio, depende en gran parte de la existencia de herramientas como Komodo Wallet, que no están sujetas a censura, ni dependen de licencias bancarias centralizadas.

Mientras los exchanges tradicionales eliminan pares de LBC por miedo a la SEC, Komodo representa la última línea de defensa para los activos libres y soberanos.


🧪 ¿Qué futuro tiene esta integración?

Komodo ha expresado interés en fortalecer el soporte de tokens olvidados por los grandes exchanges, promoviendo así un ecosistema inclusivo. Esto podría significar incluso mayor integración con LBRY/Odysee o la posibilidad de integrar nuevas funciones para creadores.


🌟 Conclusión

Si eres un creador en LBRY, un entusiasta de la descentralización, o simplemente alguien que aún cree en el valor del token LBC, Komodo Wallet es tu mejor aliado hoy.

Mientras otros cierran las puertas, Komodo mantiene abierta la libertad financiera. No se trata solo de transferencias: se trata de resistencia digital, de tener control sobre tus activos y de poder seguir creando sin depender de gigantes centralizados.

✊ ¡Larga vida a LBRY y gracias Komodo por seguir creyendo en la libertad del internet!


📚 Referencias

🌐 El Renacer de LBRY Credits (LBC): Cripto, Censura y Comunidad 🔥

Entrada fija

🌐 El Renacer de LBRY Credits (LBC): Cripto, Censura y Comunidad 🔥

“La descentralización no muere, solo se bifurca.” — Comunidad LBRY


📈 ¿Qué está pasando con LBC? ¡Sorpresa en los gráficos!

En un ecosistema cripto lleno de incertidumbre, LBRY Credits (LBC) ha sorprendido con un movimiento que nadie vio venir: una subida del 130% en julio de 2025, pasando de $0.0064 a $0.0148 USD, según CoinGecko.

📊 Datos Clave:

FechaPrecio (USD)% Cambio Diario
1 Jul 20250.0064
15 Jul 20250.0112+75%
25 Jul 20250.0148+32%

Este inesperado repunte ocurre a pesar del cierre oficial de LBRY Inc., lo que ha provocado un renovado interés por parte de usuarios, desarrolladores y defensores de la descentralización.


⚖️ LBRY Inc. vs SEC: Una historia de resistencia

En 2023, la Securities and Exchange Commission (SEC) demandó a LBRY Inc., argumentando que su token LBC era un valor no registrado. Aunque el caso no fue tan mediático como el de Ripple (XRP), su impacto fue significativo:

  • LBRY Inc. se vio obligada a cerrar oficialmente en octubre de 2023.
  • Su fundador Jeremy Kauffman anunció que el proyecto no continuaría con respaldo corporativo.

Pero eso no fue el fin… sino el comienzo de una nueva etapa.


🔁 ¿Por qué LBC sigue vivo?

A pesar de la debacle legal, el token LBC sigue teniendo utilidad real en la red. Aquí las razones más importantes:

🪙 1. Propinas y recompensas en Odysee

Plataformas como Odysee —que nació como una interfaz para la red LBRY— **aún utilizan LBC para:

  • Dar propinas a creadores de contenido.
  • Recompensar la interacción de usuarios.
  • Promover videos con boosts de visibilidad.

🌱 2. Incentivo comunitario

La comunidad ha mantenido viva la cadena de bloques. Usuarios veteranos siguen distribuyendo contenido, tokens y desarrollando nuevas ideas.


🛠️ La comunidad toma el control: Forks y futuros

💡 Forks como solución

Tras el cierre de LBRY Inc., surgieron forks comunitarios del protocolo, entre ellos:

  • Spee.ch Reborn: para almacenamiento descentralizado.
  • Liberdus: un fork basado en privacidad.
  • Chaincrunch: enfocado en video-censorship resistance.

🧰 Herramientas activas

ProyectoFunción
LBRY DesktopCliente oficial aún mantenido
LBRYNetAPI para conectarse al protocolo
LBRYCastNodo ligero para validación

Todo mantenido por desarrolladores voluntarios en GitHub.


💬 Un símbolo de libertad digital

Más allá del precio, LBC representa algo más profundo:

🔓 Una alternativa a la censura.
🧩 Un refugio digital para creadores independientes.
🤝 Un símbolo de resistencia comunitaria.

Con el aumento de censura en plataformas centralizadas, LBC y Odysee siguen atrayendo usuarios que buscan espacios libres.


🚀 ¿Qué impulsa el nuevo interés?

🧠 1. Narrativa anti-censura

LBC se ha convertido en un estandarte simbólico para quienes promueven la libertad de expresión digital.

🪄 2. Nostalgia + especulación

Con el revival de viejos proyectos cripto, LBC atrajo la mirada de traders nostálgicos… y oportunistas.

👨‍💻 3. Movimiento open source

La comunidad de código abierto ha tomado el control. Desde nuevas interfaces ligeras, hasta plugins para compartir contenido P2P, el desarrollo sigue activo.


🔮 ¿Y el futuro?

Aunque el camino legal fue brutal, el protocolo LBRY no murió, y su token LBC:

  • Sigue siendo útil para miles de usuarios.
  • Tiene un valor simbólico inmenso.
  • Posee una comunidad resiliente que se rehúsa a rendirse.

“Descentralizar no es solo una arquitectura, es una filosofía.”


📚 Fuentes y Referencias


¡Comparte este artículo si tú también crees que la descentralización merece una segunda oportunidad! 🚀🌐

🎚️ Manual completo: Cómo montar un mini estudio de guitarra en Linux con PipeWire + JACK + Guitarix + OBS

Entrada fija

🎚️ Manual completo: Cómo montar un mini estudio de guitarra en Linux con PipeWire + JACK + Guitarix + OBS

✍️ Autor: julio101290
🖥️ Probado en: Linux Mint 22.1 y compatibles con Ubuntu 22.04+
🎸 Interfaz de audio usada: Behringer UMC202HD


🔧 1. Instalación de paquetes necesarios

Abre la terminal y ejecuta:

sudo apt update
sudo apt install guitarix qjackctl helvum obs-studio pipewire-audio-client-libraries pipewire-jack

Esto instala:

  • Guitarix: amplificador y efectos para guitarra
  • QJackCtl: interfaz para gestionar conexiones JACK
  • Helvum: visualización y enrutamiento de audio
  • OBS Studio: para grabación y streaming
  • PipeWire: sistema moderno de audio que reemplaza a JACK/PulseAudio

🔄 2. Habilitar PipeWire con soporte JACK

systemctl --user enable --now pipewire pipewire-pulse pipewire-jack

Esto asegura que PipeWire maneje PulseAudio y tenga compatibilidad con JACK para usar Guitarix y OBS sin conflictos.


🧪 3. Verifica que estás usando PipeWire

pactl info

Busca que diga:

Nombre del servidor: PulseAudio (on PipeWire ...)

✅ Si aparece eso, estás listo.


📜 4. Crear el script de inicio automático

1. Crear archivo:

nano ~/Escritorio/iniciar_guitarix_obs.sh

2. Pega este contenido:

#!/bin/bash

# Inicia QJackCtl (JACK con soporte PipeWire)
pw-jack qjackctl &

# Espera a que JACK se inicialice correctamente
sleep 2

# Inicia Guitarix (procesador de guitarra)
pw-jack guitarix &

# Espera para asegurar que Guitarix esté listo
sleep 2

# Inicia Helvum (enrutador gráfico JACK/PipeWire)
helvum &

# Espera un poco para la interfaz de audio
sleep 1

# Inicia OBS Studio para grabación o transmisión
pw-jack obs &

3. Hazlo ejecutable:

chmod +x ~/Escritorio/iniciar_guitarix_obs.sh

🖱️ 5. Crear ícono lanzador en el escritorio

1. Crear archivo .desktop:

nano ~/Escritorio/iniciar_estudio.desktop

2. Pega esto:

[Desktop Entry]
Name=Iniciar Estudio Guitarix
Comment=Lanza Guitarix + JACK + OBS
Exec=gnome-terminal -- bash -c "~/Escritorio/iniciar_guitarix_obs.sh; exec bash"
Icon=utilities-terminal
Terminal=true
Type=Application
Encoding=UTF-8
Categories=AudioVideo;

3. Dar permisos:

chmod +x ~/Escritorio/iniciar_estudio.desktop

🎧 6. Conexión de audio (enrutamiento)

Cuando abras el script:

  • Helvum te mostrará gráficamente las conexiones de audio
  • Conecta así:
system:capture_1 (tu guitarra) → guitarix:input_L
guitarix:output_L / output_R → system:playback_1 / 2 (monitores o audífonos)
guitarix:output_L / R → OBS Studio (para grabación)
Firefox → system:playback (YouTube de fondo)

Todo lo puedes hacer arrastrando líneas en Helvum.


🔁 ¿Quieres que el script inicie al prender la computadora?

mkdir -p ~/.config/autostart
cp ~/Escritorio/iniciar_estudio.desktop ~/.config/autostart/

✅ Resultado

Con un solo clic:

  • Inicia JACK vía PipeWire
  • Ejecuta Guitarix para procesar tu guitarra
  • Abre OBS para grabar
  • Y muestra Helvum para conectar todo fácilmente

🧠 Consejos extra

  • Si OBS no capta audio: ve a Fuentes → Añadir → Audio Input Capture (JACK) o enrútalo con Helvum
  • Puedes agregar efectos LADSPA en Guitarix
  • Usa Calf Plugin Host para compresión, reverb o EQ externos

¿Te gustó esta guía? No dudes en compartir o dejar un comentario si quieres la versión en PDF o Markdown.

¿Está Siendo Desmantelado LBRY por Presión de la SEC? El Caso LBC y el Futuro de la Descentralización

Entrada fija

¿Está Siendo Desmantelado LBRY por Presión de la SEC? El Caso LBC y el Futuro de la Descentralización

Introducción

LBRY fue uno de los proyectos pioneros en ofrecer una red descentralizada para la publicación y monetización de contenido, con su token nativo LBC (LBRY Credits). Pero en los últimos meses, LBC ha desaparecido progresivamente de múltiples exchanges, tanto centralizados como descentralizados, dejando a muchos usuarios con activos atrapados y sin liquidez. ¿Qué ocurrió realmente? ¿Fue un fallo tecnológico, una caída del interés… o presión estatal?

Este análisis desglosa lo que pasó con LBRY y cómo el gobierno, en especial la SEC (Securities and Exchange Commission) de Estados Unidos, puede desmantelar incluso proyectos descentralizados sin necesidad de tocar una sola línea de código.

1. El Caso LBRY vs. SEC

¿Qué es LBRY?

LBRY fue creado como un protocolo blockchain que permite a los usuarios compartir contenido (videos, publicaciones, música) sin intermediarios. Su token LBC se usaba para pagar por contenido, apoyar creadores y realizar microtransacciones dentro del ecosistema.

La demanda de la SEC

En marzo de 2021, la SEC presentó una demanda contra LBRY Inc., la empresa detrás del desarrollo del protocolo, acusándola de vender valores no registrados mediante la emisión de LBC, incluso sin haber hecho una ICO formal.

El fallo judicial

En noviembre de 2022, el tribunal falló a favor de la SEC, declarando que LBC era un valor bajo la ley estadounidense. Esto generó consecuencias graves para el ecosistema, ya que incluso las ventas secundarias entre usuarios quedaron bajo amenaza.

2. La desaparición de LBC en exchanges

Tras el fallo:

  • Exchanges como CoinEx, BitMart, MXC y Hotbit eliminaron LBC.
  • Bittrex US cerró sus mercados para clientes estadounidenses.
  • Incluso algunos DEX dejaron de ofrecer pares de LBC debido a la baja liquidez y el riesgo legal.

¿Por qué también los DEX?

Aunque los DEX no son controlados directamente por gobiernos, las plataformas y front-ends prefieren evitar problemas legales. Además, los proveedores de liquidez abandonaron el token tras la sentencia, dejando pares sin volumen.

3. ¿Es esto censura financiera?

Sí, aunque indirectamente. Lo que pasó con LBC demuestra cómo un gobierno puede marginalizar una criptomoneda sin necesidad de prohibirla expresamente.

  • Técnicamente: El protocolo sigue vivo, los tokens existen, puedes correr nodos.
  • En la práctica: No hay liquidez ni adopción. Se volvió inviable para el usuario común.

4. ¿Cómo puede el gobierno controlar criptomonedas descentralizadas?

Los gobiernos pueden limitar una red cripto a través de los siguientes medios:

MecanismoEjemplo
Demandas legalesSEC vs LBRY, SEC vs Ripple
Prohibiciones de listadosExchanges eliminan tokens “en riesgo”
Presión a desarrolladoresArresto de desarrollador de Tornado Cash
Regulación de rampas de entrada/salidaKYC forzado en wallets y exchanges

5. ¿Qué significa esto para la descentralización real?

Niveles de descentralización:

NivelCaracterísticasRiesgo
1. TotalNodos distribuidos, sin empresa detrás (ej. Monero, Bitcoin)Baja censura, difícil de eliminar
2. ParcialRed abierta con empresa de desarrollo (ej. Ethereum, XRP)Presión legal sobre fundadores
3. CentralizadaControl total de empresa o figura única (ej. FTX, Terra)Fácilmente colapsables

6. Lecciones del caso LBRY

  • La descentralización debe ser real y completa: Si dependes de una empresa, puedes ser desmantelado.
  • El marco legal es importante: Aunque el código sea libre, la ley puede limitarlo.
  • La comunidad es clave: Sin una red fuerte de usuarios y nodos independientes, los proyectos mueren.

7. ¿Qué hacer si aún tienes LBC?

Opciones actuales:

  • Algunos exchanges internacionales aún permiten el intercambio, como Bittrex Global (fuera de EE. UU.).
  • Puedes conservar el token en wallets como LBRY Desktop u Odysee.
  • Trading P2P en foros o grupos privados.

Sin embargo, la liquidez y la utilidad del token están prácticamente extintas.

8. Alternativas verdaderamente descentralizadas

Si buscas redes resistentes a la censura, considera:

ProyectoDescripción
Monero (XMR)Criptomoneda centrada en la privacidad total.
IPFS + FilecoinAlmacenamiento de archivos descentralizado.
NostrRed social descentralizada, sin servidores centrales.
KeetMensajería y videollamadas P2P sin servidores.
ZoraPlataforma NFT sin control corporativo.

Conclusión

El caso de LBRY es una advertencia clara: una descentralización parcial no basta. Aunque el código sobreviva, el sistema puede ser asfixiado desde afuera mediante leyes, regulación financiera y censura social.

Si queremos una verdadera libertad en la web y en las finanzas, debemos construir infraestructuras libres de permisos, resistentes a la censura y no dependientes de ninguna entidad legal.

¿Te interesa migrar tus contenidos o tokens a plataformas libres y resistentes? Déjame tu comentario y seguimos explorando juntos.

💸 La Criptomoneda Más Fácil y Descentralizada de Usar en 2025: Litecoin (LTC)

Entrada fija

💸 La Criptomoneda Más Fácil y Descentralizada de Usar en 2025: Litecoin (LTC)

En un mundo donde la libertad financiera es cada vez más importante, muchas personas se preguntan:

¿Qué criptomoneda es la más fácil de usar, rápida y realmente descentralizada?

La respuesta más sólida sigue siendo Litecoin (LTC).


✅ ¿Por qué Litecoin?

  • Extremadamente fácil de usar: Puedes enviar y recibir pagos usando solo una dirección, sin configuraciones técnicas. Compatible con billeteras como Trust Wallet, Exodus, Atomic, Electrum-LTC, entre otras.
  • Velocidad y bajo costo: Confirmaciones en ~2 minutos (4 veces más rápido que Bitcoin) y tarifas de red menores a $0.01 USD.
  • Altamente compatible: Usada en cajeros, comercios, exchanges y apps descentralizadas. Puedes convertirla fácilmente desde Trust Wallet o Binance.
  • Totalmente descentralizada: Litecoin no depende de ninguna autoridad central. Se asegura con minería distribuida (Proof of Work) y no puede ser censurada.
  • Resiliente y estable: Más de 12 años sin interrupciones desde 2011. Desarrollo constante y sin disputas internas.

🛠️ ¿Cómo empiezo con Litecoin?

  1. Descarga una app confiable, como Trust Wallet o Exodus.
  2. Activa LTC en la lista de monedas.
  3. Recibe fondos desde otro usuario o compra desde Binance, Kraken o un cajero cripto.
  4. ¡Listo! Puedes enviar, recibir o intercambiar con total libertad.

🆚 Comparativa con otras criptomonedas

CriptomonedaFacilidad de usoDescentralizaciónVelocidadComisión
Litecoin (LTC)✅ Muy fácil✅ Muy alta✅ Rápida✅ Muy baja
Bitcoin (BTC)MediaAltaLentaAlta
Ethereum (ETH)ComplejaMediaVariableAlta
Solana (SOL)MediaBajaMuy rápidaMuy baja
Ripple (XRP)Fácil❌ CentralizadaRápidaBaja

🔒 ¿Qué tan segura es?

  • Red de minería global con alto poder de cómputo.
  • Transacciones irreversibles, resistentes a censura.
  • No depende de bancos, gobiernos ni plataformas.

📚 Fuentes y referencias


💬 Conclusión

Si quieres empezar en el mundo cripto con algo que sea:

  • Fácil de entender
  • Rápido y económico
  • Descentralizado y libre

Litecoin (LTC) es tu mejor opción en 2025.

Notas de Lanzamiento para v1.1.3 – Implementación de Notas de Crédito

Entrada fija

Notas de Lanzamiento para v1.1.3 – Implementación de Notas de Crédito

Introducción

La versión v1.1.3 de boilerplateSells introduce la funcionalidad de notas de crédito, una adición clave que permite gestionar ajustes de ventas, devoluciones y correcciones, cumpliendo con los estándares de facturación electrónica CFDI 4.0 requeridos en México. Esta actualización amplía las capacidades del sistema para generar documentos fiscales en formatos PDF y XML, mejorando la experiencia para usuarios que necesitan herramientas robustas para la gestión de ventas.

Cambios Realizados

Los cambios principales se centran en la adición de nuevas rutas en el archivo src/Config/Routes.php y actualizaciones en controladores, modelos, vistas y la base de datos para soportar la funcionalidad de notas de crédito. A continuación, se detallan los cambios específicos basados en el commit 84b72249259196bc228e99a95be3599fdacd3023:

Nuevas Rutas para Notas de Crédito

Se añadieron las siguientes rutas en src/Config/Routes.php para gestionar notas de crédito:

  • Recurso Principal
  • notascredito
    • Métodos: GET, POST, PUT, DELETE
    • Descripción: Maneja la lista, creación, edición y eliminación de notas de crédito. Incluye un filtro de permiso permission:listaNotaCredito-permission (excepto para el método show).
    • Ejemplo de uso: Listar todas las notas de crédito o crear una nueva.
  • Filtro de Notas de Crédito
  • GET notasCredito/(:any)/(:any)/(:any)/(:any)/(:any)/(:any)
    • Descripción: Permite filtrar notas de crédito con múltiples parámetros, útil para búsquedas avanzadas.
    • Ejemplo de uso: Filtrar notas de crédito por fecha, cliente u otros criterios.
  • Edición de Nota de Crédito
  • GET editNotaCredito/(:any)
    • Descripción: Muestra el formulario para editar una nota de crédito específica.
    • Ejemplo de uso: Modificar los detalles de una nota de crédito existente.
  • Eliminación de Pagos
  • DELETE pagos/delete/(:any)
    • Descripción: Permite eliminar pagos asociados a una nota de crédito.
    • Ejemplo de uso: Cancelar un pago relacionado con una devolución.
  • Timbrado de Nota de Crédito
  • GET timbrarNotaCredito/(:any)
    • Descripción: Timbra (certifica) una nota de crédito para cumplir con requisitos fiscales del SAT.
    • Ejemplo de uso: Generar un comprobante fiscal válido para una nota de crédito.
  • Generación de PDF
  • GET xml/generarPDFDesdeNotaCredito/(:any)
    • Descripción: Genera un PDF a partir de una nota de crédito utilizando datos XML.
    • Ejemplo de uso: Crear un documento PDF para enviar al cliente.
  • GET xml/generarPDFNotaCredito/(:any)
    • Descripción: Genera un PDF directamente para una nota de crédito.
    • Ejemplo de uso: Visualizar o descargar el PDF de una nota de crédito.
  • GET xml/generarPDFDesdeRemNotaCredito/(:any)
    • Descripción: Genera un PDF a partir de una remisión vinculada a una nota de crédito.
    • Ejemplo de uso: Crear un PDF para una nota de crédito relacionada con una remisión.
  • Creación de Nueva Nota de Crédito
  • GET newNotaCredito
    • Descripción: Muestra el formulario para crear una nueva nota de crédito.
    • Ejemplo de uso: Iniciar el proceso de emisión de una nota de crédito.
  • Guardado de Nota de Crédito
  • POST notasCredito/save
    • Descripción: Guarda una nueva nota de crédito o actualiza una existente.
    • Ejemplo de uso: Confirmar los datos de una nota de crédito.
  • Obtención de XML Enlazados
  • GET xmlenlace/getXMLEnlazadosNotaCredito/(:any)
    • Descripción: Obtiene los archivos XML vinculados a una nota de crédito, útil para auditorías fiscales.
    • Ejemplo de uso: Descargar XML para cumplir con requisitos del SAT.

Otros Cambios

  • Controladores, Modelos y Vistas:
  • Se actualizaron o crearon nuevos controladores (por ejemplo, NotasCreditoController, FacturaElectronicaController, XmlController) para manejar la lógica de las notas de crédito.
  • Los modelos se modificaron para incluir consultas relacionadas con la gestión de notas de crédito.
  • Se añadieron o actualizaron vistas en app/Views/ para soportar los formularios y la generación de documentos PDF.
  • Base de Datos:
  • Se incluyeron migraciones en app/Database/Migrations/ para agregar tablas o campos necesarios para almacenar datos de notas de crédito, como una posible tabla credit_notes o campos adicionales en tablas existentes.
  • Cumplimiento con CFDI 4.0:
  • La funcionalidad se diseñó para cumplir con los requisitos de facturación electrónica del SAT en México, incluyendo el timbrado y la generación de XML.

Impacto

Esta actualización mejora significativamente boilerplateSells, permitiendo a los usuarios:

  • Gestionar notas de crédito de manera integral (crear, editar, eliminar, filtrar).
  • Generar documentos fiscales en PDF y XML, compatibles con CFDI 4.0.
  • Cumplir con normativas fiscales mexicanas, ampliando la utilidad del sistema para negocios que manejan devoluciones o ajustes.

Imágenes

A continuación, se incluyen marcadores de posición para capturas de pantalla que ilustran las nuevas funcionalidades. Reemplaza las rutas con las imágenes reales generadas desde el sistema.

  1. Lista de Notas de Crédito
    image Descripción: Captura de pantalla de la interfaz que muestra el listado de notas de crédito.
  2. Formulario de Creación de Nota de Crédito
    image Descripción: Formulario para ingresar los detalles de una nueva nota de crédito.
  3. Formulario de Edición de Nota de Crédito
    image
    Descripción: Interfaz para modificar una nota de crédito existente.
  4. PDF Generado de Nota de Crédito
image

Descripción: Ejemplo de un documento PDF generado para una nota de crédito.

Conclusión

La versión v1.1.3 de boilerplateSells introduce una funcionalidad robusta para la gestión de notas de crédito, alineada con los requisitos de CFDI 4.0. Esta adición mejora la capacidad del sistema para manejar transacciones complejas, como devoluciones y ajustes, y refuerza su valor para negocios que requieren cumplimiento fiscal en México. Los usuarios ahora pueden generar documentos fiscales válidos en formatos PDF y XML, con una interfaz optimizada para la gestión de notas de crédito.

Referencia al Commit: 84b72249259196bc228e99a95be3599fdacd3023

Full Changelog: https://github.com/julio101290/boilerplateSells/compare/v1.1.2…v1.1.3

🚀 Descubre Facturación Fácil con CI4JCPOX: Sistema Moderno en CodeIgniter 4.5

Entrada fija

¿Buscas un sistema de facturación rápido, seguro y flexible que puedas instalar en tu servidor Ubuntu con mínimo esfuerzo?

¡Te presento CI4JCPOX, una solución basada en CodeIgniter 4.5 que potencia tu negocio con funcionalidades completas y tecnología moderna!


🌟 ¿Por qué elegir CI4JCPOX?

  • Basado en CodeIgniter 4.5, el framework PHP ligero y rápido
  • Uso de MariaDB para bases de datos robustas y eficientes
  • Integración lista con Apache y PHP para un entorno LAMP completo
  • Código abierto y fácil de personalizar para tus necesidades
  • Instalación rápida gracias a un script automatizado para Ubuntu Server 24.04 en AWS EC2 o cualquier VPS Linux

⚙️ ¿Qué incluye este sistema?

  • Gestión completa de facturas y clientes
  • Interfaz web limpia y responsiva
  • Migraciones y seeders para inicializar la base de datos sin complicaciones
  • Configuración segura con usuario y base de datos dedicados
  • Preparado para crecer y adaptarse a tu negocio

🛠️ Cómo instalar CI4JCPOX en Ubuntu Server 24.04 (AWS EC2)

He preparado un script automático para que en pocos minutos tengas todo listo: LAMP, base de datos, configuración de CodeIgniter y Apache con VirtualHost.

Paso 1: Descarga el script de instalación

cd ~
curl -O https://raw.githubusercontent.com/julio101290/ci4jcposv2/main/instalar_ci4_facturacion.sh

Paso 2: Dale permisos de ejecución

chmod +x instalar_ci4_facturacion.sh

Paso 3: Ejecuta el script como root

sudo ./instalar_ci4_facturacion.sh

✅ ¿Qué hace este script por ti?

  • Actualiza y prepara tu servidor Ubuntu
  • Instala Apache, MariaDB y PHP con todas las extensiones necesarias
  • Crea la base de datos facturacion y un usuario seguro con permisos
  • Instala el proyecto CI4JCPOX usando Composer en /var/www/html/facturacion
  • Configura Apache para servir el proyecto con un VirtualHost dedicado
  • Ejecuta migraciones y seeders para inicializar la base de datos
  • Deja todo listo para que accedas a tu sistema por IP o dominio

🌐 Accede a tu sistema

Abre tu navegador y entra a:

http://TU_IP_PUBLICA/

¡Listo para comenzar a facturar!


🔒 Seguridad y permisos

El script también se encarga de ajustar permisos para que Apache pueda servir correctamente la aplicación sin problemas de acceso.


📂 Código y más información

Puedes revisar y descargar el script completo desde GitHub:

https://github.com/julio101290/ci4jcposv2/blob/main/instalar_ci4_facturacion.sh


¿Quieres ayuda o personalización?

No dudes en contactarme para soporte, mejoras o integraciones personalizadas. ¡Estoy aquí para ayudarte a llevar tu facturación al siguiente nivel!


¡Empieza hoy mismo con CI4JCPOX y transforma tu sistema de facturación!

Ficha Técnica: ci4jcposv2 – Versión 1.0.4 (Actualizada)

Entrada fija

Información General

CampoDetalles
Proyectoci4jcposv2
Versión1.0.4
Fecha de LanzamientoNo especificada (publicada en GitHub)
Repositoriogithub.com/julio101290/ci4jcposv2/releases/tag/v1.0.4
FrameworkCodeIgniter 4
ObjetivoMejorar la flexibilidad de URLs y la estabilidad en el manejo de errores, incluyendo errores 404, manteniendo la interfaz y funcionalidades del sistema.

Cambios Principales

1. URLs Dinámicas en CodeIgniter

  • Descripción: Implementación de URLs dinámicas para facilitar la configuración en diferentes entornos (desarrollo, pruebas, producción).
  • Beneficios:
    • Mayor portabilidad entre servidores sin ajustes manuales.
    • Simplificación de la configuración para usuarios finales.
    • Adaptabilidad a dominios variables sin modificar el código.
  • Implementación Técnica:
    • Configuración probable en app/Config/App.php para definir baseURL dinámicamente:phppublic $baseURL = env('app.baseURL', 'http://localhost/');
    • Uso de variables de entorno en .env para establecer la URL base.
    • Uso de funciones como base_url() o site_url() para generar rutas adaptables.

2. Manejo de Errores sin Salir del Sistema

  • Descripción: Mejora en el manejo de errores, incluyendo errores 404, para mostrar mensajes claros al usuario sin interrumpir el flujo de la aplicación, manteniendo los menús y otras funcionalidades activas.
  • Beneficios:
    • Experiencia de usuario mejorada con mensajes de error integrados en la interfaz del sistema.
    • Mantiene la navegación (menús, barras laterales, etc.) visible y funcional.
    • Mayor estabilidad al evitar cierres inesperados.
    • Facilita la depuración para desarrolladores.
  • Implementación Técnica:
    • Función error404():phppublic function error404() { $titulos["title"] = "Error 404"; $titulos["subtitle"] = "Ruta no encontrada"; return view('error404', $titulos); }
      • Ubicación: Probablemente en un controlador personalizado (e.g., ErrorController en app/Controllers) o en el controlador base para manejar errores 404.
      • Propósito: Renderiza una vista personalizada (error404.php) cuando se accede a una ruta inexistente, pasando un array $titulos con el título y subtítulo de la página para mantener consistencia con el diseño de la aplicación.
      • Impacto:
        • Al usar return view(‘error404’, $titulos), la vista de error se integra en el sistema, mostrando los menús, barras de navegación y otras funcionalidades definidas en el layout principal (e.g., un template con header, footer y sidebar).
        • Evita que el sistema muestre el error 404 predeterminado de CodeIgniter o PHP, que podría interrumpir la experiencia del usuario.
        • Permite al usuario seguir navegando sin salir del sistema, ya que la vista error404 se carga dentro del contexto de la aplicación.
      • Detalles de la Vista:
        • La vista error404.php (en app/Views/error404.php) probablemente utiliza el layout principal de la aplicación, incluyendo menús y elementos de la interfaz.
        • Ejemplo hipotético de error404.php:php<?= $this->extend('layouts/main') ?> <?= $this->section('content') ?> <div class="container"> <h1><?= esc($title) ?></h1> <p><?= esc($subtitle) ?></p> <p>La página que buscas no existe. Por favor, verifica la URL o regresa al <a href="<?= base_url() ?>">inicio</a>.</p> </div> <?= $this->endSection() ?>
        • Esto asegura que la página de error 404 mantenga el diseño consistente (menús, estilos, etc.) y permita al usuario continuar interactuando con el sistema.
    • Configuración Adicional:
      • Posible ajuste en app/Config/Exceptions.php para redirigir errores 404 a esta función:phppublic $errorViewPrefix = 'errors/';
      • Validaciones mejoradas en controladores para prevenir errores críticos antes de que se desencadenen.

Análisis de Cambios en el Código

Archivos Modificados (Inferidos)

  • app/Config/App.php: Ajuste de baseURL para URLs dinámicas.
  • app/Config/Exceptions.php: Configuración para personalizar el manejo de errores, incluyendo la redirección a error404().
  • Controladores:
    • Controlador con la función error404() (e.g., app/Controllers/ErrorController.php).
    • Lógica para capturar errores 404 y renderizar la vista correspondiente.
  • Vistas:
    • app/Views/error404.php: Vista personalizada para errores 404, integrada con el layout principal para mostrar menús y otras funcionalidades.
  • Archivo .env: Configuración de app.baseURL para URLs dinámicas.
  • Rutas (app/Config/Routes.php):
    • Posible definición de una ruta personalizada para errores 404:php$routes->set404Override('App\Controllers\ErrorController::error404');

Estructura de Cambios

  • URLs Dinámicas:
    • Lógica para detectar automáticamente el dominio o usar variables de entorno.
    • Simplificación de la configuración de rutas.
  • Manejo de Errores:
    • Implementación de error404() para manejar rutas no encontradas de manera elegante.
    • Uso de vistas personalizadas que extienden el layout principal, asegurando que los menús y funcionalidades permanezcan accesibles.
    • Captura de excepciones mediante try-catch o configuraciones globales.

Beneficios y Mejoras

AspectoDescripción
FlexibilidadURLs dinámicas permiten despliegues en múltiples entornos sin cambios manuales.
EstabilidadLa función error404() y vistas personalizadas evitan cierres inesperados, mostrando errores de forma integrada.
UsabilidadMantiene menús y funcionalidades visibles en la página de error, permitiendo al usuario continuar navegando.
MantenibilidadMensajes de error claros y vistas personalizadas facilitan la depuración.
EscalabilidadSistema más robusto para entornos de producción con múltiples usuarios.

Detalles de la Función error404()

  • Código:phppublic function error404() { $titulos["title"] = "Error 404"; $titulos["subtitle"] = "Ruta no encontrada"; return view('error404', $titulos); }
  • Análisis:
    • Parámetros: No recibe parámetros, ya que es una función estática para manejar errores 404.
    • Datos Enviados: Pasa un array $titulos con title y subtitle a la vista error404.php.
    • Vista: La vista error404 probablemente usa el layout principal de la aplicación (mediante extend en CodeIgniter) para mantener la consistencia visual y funcional.
    • Integración: Al renderizar una vista personalizada, el sistema muestra el error dentro del contexto de la aplicación, preservando menús, barras laterales y otras funcionalidades.
  • Beneficio Específico:
    • Evita el comportamiento predeterminado de CodeIgniter (mostrar un error genérico o página en blanco).
    • Permite al usuario regresar al inicio o navegar a otras secciones sin salir del sistema.
    • Mejora la experiencia del usuario al presentar errores de manera profesional y coherente con el diseño.

Notas Técnicas

  • Dependencias: Sin cambios reportados; compatible con PHP 7.4+ y dependencias estándar de CodeIgniter 4.
  • Compatibilidad: No se esperan rompimientos, pero se recomienda probar la vista error404 y las URLs dinámicas en entornos de desarrollo.
  • Recomendaciones:
    • Configurar app.baseURL en .env para URLs dinámicas.
    • Personalizar error404.php para alinear el diseño con la aplicación (colores, estilos, menús).
    • Verificar que $routes->set404Override esté configurado en Routes.php para redirigir errores 404 a error404().
    • Probar la navegación desde la página de error para asegurar que los menús y funciones sean accesibles.

Limitaciones del Análisis

  • Falta de Changelog Detallado: El enlace no proporciona un changelog específico ni commits detallados.
  • Suposiciones: La implementación de error404() se infiere basada en el código proporcionado y prácticas de CodeIgniter 4.
  • Sugerencia: Revisar los commits entre versiones 1.0.3 y 1.0.4 para confirmar los cambios exactos.

Conclusión

La versión 1.0.4 de ci4jcposv2 introduce mejoras clave en URLs dinámicas y manejo de errores, destacando la función error404() que renderiza una vista personalizada para errores 404, manteniendo menús y funcionalidades activas. Esto asegura una experiencia de usuario fluida y una aplicación más estable y profesional. Los desarrolladores deben verificar la configuración de rutas y personalizar la vista error404.php para maximizar los beneficios.

¿Necesitas más ayuda? Si deseas un análisis detallado de otros controladores, ajustes en la vista error404.php, o soporte con la implementación, comparte más detalles o solicita ejemplos específicos.


Esta ficha actualizada incorpora la función error404() con un enfoque claro en su rol para mantener la interfaz y funcionalidades del sistema. Si necesitas ajustes adicionales (e.g., formato HTML, ejemplos de vistas, o más detalles técnicos), házmelo saber.

🚀 Nuevo Commit en el Boilerplate de Julio101290 Clonación de usuarios con roles y permisos incluidos

Entrada fija

🛠️ ¿Qué trae este commit?
¡Una mejora poderosa en la gestión de usuarios! Ahora puedes clonar un usuario existente incluyendo sus roles y permisos, ahorrando tiempo y evitando errores en la configuración manual.


📌 Cambios destacados:

✅ Nueva ruta:

phpCopiarEditaruser/manage/{id}/clone → UserController::clone

✅ Nuevo método clone($id) en UserController:

  • Carga los datos del usuario original
  • Preselecciona sus roles y permisos
  • Reutiliza la vista de creación para facilitar el registro

✅ Vistas y controladores adaptados para soportar esta funcionalidad de manera limpia y eficiente.


📁 Archivos modificados:

  • Config/Routes.php
  • Controllers/UserController.php
  • Views/users/form.php (si aplica)
  • Otras optimizaciones menores en rutas y estructuras

🎯 Beneficios:

  • 🔄 Reutilización rápida de perfiles
  • 🔐 Mejor gestión de permisos
  • ⏱️ Ahorro de tiempo para administradores

💡 ¿Tienes muchos usuarios con permisos similares?
¡Ahora puedes clonarlos en segundos y mantener todo bajo control! ⚙️👥


🧠 Commit por: @julio101290
📁 Repositorio: Boilerplate

Cómo instalar LAMP (Linux, Apache, MariaDB, PHP) en Ubuntu Server 24.04 y configurarlo para CodeIgniter 4.5

Entrada fija

Cómo instalar LAMP (Linux, Apache, MariaDB, PHP) en Ubuntu Server 24.04 y configurarlo para CodeIgniter 4.5

Esta guía te explica cómo preparar un servidor Ubuntu 24.04 con el stack LAMP y CodeIgniter 4.5, incluyendo Composer para manejar dependencias PHP.

1. Actualiza el sistema

sudo apt update && sudo apt upgrade -y

2. Instala Apache

sudo apt install apache2 -y
sudo systemctl status apache2

3. Instala MariaDB

sudo apt install mariadb-server mariadb-client -y
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo mysql_secure_installation

4. Instala PHP y extensiones necesarias

sudo apt install php php-mysql php-intl php-curl php-xml php-mbstring php-cli unzip -y
php -v

5. Activa mod_rewrite

sudo a2enmod rewrite
sudo systemctl restart apache2
sudo nano /etc/apache2/sites-available/000-default.conf

Añade esto dentro del bloque <VirtualHost *:80>:

<Directory /var/www/html>
    AllowOverride All
</Directory>
sudo systemctl restart apache2

6. Instala Composer

sudo apt install curl php-cli php-mbstring git unzip -y
cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php
HASH="$(curl -sS https://composer.github.io/installer.sig)"
php -r "if (hash_file('sha384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
rm composer-setup.php
composer --version

7. Descargar CodeIgniter 4.5

cd /var/www/html
sudo rm index.html
sudo composer create-project codeigniter4/appstarter ci4
sudo chown -R www-data:www-data ci4
sudo chmod -R 755 ci4

8. Configura Apache para CodeIgniter

sudo nano /etc/apache2/sites-available/ci4.conf

Pega lo siguiente:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/ci4/public
    ServerName localhost

    <Directory /var/www/html/ci4/public>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/ci4_error.log
    CustomLog ${APACHE_LOG_DIR}/ci4_access.log combined
</VirtualHost>
sudo a2ensite ci4.conf
sudo a2dissite 000-default.conf
sudo systemctl reload apache2

9. Crear base de datos y usuario en MariaDB

sudo mariadb
CREATE DATABASE ci4db;
CREATE USER 'ci4user'@'localhost' IDENTIFIED BY 'tu_password_segura';
GRANT ALL PRIVILEGES ON ci4db.* TO 'ci4user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

10. Configurar la base de datos en CodeIgniter

sudo nano /var/www/html/ci4/app/Config/Database.php
public $default = [
    'DSN'      => '',
    'hostname' => 'localhost',
    'username' => 'ci4user',
    'password' => 'tu_password_segura',
    'database' => 'ci4db',
    'DBDriver' => 'MySQLi',
    // resto de configuraciones...
];

11. Verifica en el navegador

Abre tu navegador y visita:

http://TU_IP_O_DOMINIO/

Deberías ver la página de bienvenida de CodeIgniter 4.5.

✅ ¡Entorno LAMP + CodeIgniter 4.5 listo!

Ahora puedes comenzar a desarrollar tus proyectos PHP modernos con CodeIgniter y MariaDB.

📘 Documentación de psql-backup

Entrada fija
  1. ¿Qué es psql-backup?
  2. Características principales
  3. Instalación vía Composer
  4. ¿Cómo se usa?
  5. Detalles técnicos
  6. Descarga y restauración
  7. Licencia

📦 ¿Qué es psql-backup?

psql-backup es una librería PHP creada por julio101920 (el compa que respalda hasta los tamales si le das chance). Sirve para hacer backups de PostgreSQL desde PHP, y si no tienes pg_dump, no pasa nada, la librería se rifa con puro PHP.


✨ Características principales

  • Backup con pg_dump (si está instalado)
  • Respaldo alternativo 100% PHP
  • ZIP automático para PostgreSQL
  • Clase lista para usar: PostgreSQLBackup
  • Compatible con CodeIgniter 4
  • Soporte para MariaDB y PostgreSQL

⚙️ Instalación vía Composer

Para instalar:

composer require julio101290/psql-backup

Importa la clase donde la necesites:

use PostgresqlBackupManager\PostgreSQLBackup;

🚀 ¿Cómo se usa?

Ejemplo sencillo:

$pdo = new PDO("pgsql:host=localhost;port=5432;dbname=testdb", "usuario", "clave");
$backup = new PostgreSQLBackup($pdo, "testdb", "usuario", "clave", "localhost", 5432, __DIR__ . "/respaldos");
$archivoSQL = $backup->backup(true);

Y para restaurar:

$backup->restore($archivoSQL);

🔍 Detalles técnicos

  • Verifica si pg_dump está disponible
  • Usa ZIP solo si es PostgreSQL (pa’ que no se diga que no es eficiente)
  • El modo PHP lee todas las tablas y datos y crea un .sql como dios manda

📥 Descarga y restauración

¿Necesitas restaurar un respaldo ZIP? No hay problema, la clase detecta si es ZIP y lo descomprime solita:

if (pathinfo($archivoSQL, PATHINFO_EXTENSION) === 'zip') {
    $zip = new ZipArchive();
    $zip->open($archivoSQL);
    $zip->extractTo("/ruta/temp");
    $archivoExtraido = "/ruta/temp/archivo.sql";
    $backup->restore($archivoExtraido);
}

📝 Licencia

MIT. Úsala con gusto, respáldate con estilo y si puedes invítame un taco 🌮

🎯 ¡Potencia tu productividad con DBeaver en Linux Mint Xia! 🐧💻

Entrada fija

🎯 ¡Potencia tu productividad con DBeaver en Linux Mint Xia! 🐧💻

¿Trabajas con bases de datos y buscas una herramienta poderosa, gratuita y de código abierto?
¡Conoce DBeaver! ✨

  • ✅ Conectarte a múltiples bases de datos (MySQL, PostgreSQL, Oracle, SQLite y más)
  • ✅ Editar y visualizar datos con una interfaz limpia
  • ✅ Ejecutar queries y analizar resultados en tiempo real
  • ✅ Trabajar con diagramas ER, backups y herramientas avanzadas

🎨 Compatible con tu escritorio Linux Mint Xia (Xfce), ligero y hermoso.


🛠️ ¿Cómo instalar DBeaver en Linux Mint Xia?

¡Súper fácil! Solo sigue estos pasos en la terminal:

sudo apt update
sudo apt install gdebi wget -y
wget https://dbeaver.io/files/dbeaver-ce_latest_amd64.deb
sudo gdebi dbeaver-ce_latest_amd64.deb

💡 ¡Y listo! Puedes abrirlo desde el menú o escribiendo dbeaver en la terminal.


🌟 DBeaver + Linux Mint Xia = El combo perfecto para desarrolladores y analistas!

#LinuxMint #DBeaver #BasesDeDatos #OpenSource #Productividad #Xfce #SQLTools #DevLife

🧠 Cómo convertir Visual Studio Code en el entorno ideal para PHP en Linux Mint (¡con formato automático como en NetBeans!)

Entrada fija

🧠 Cómo convertir Visual Studio Code en el entorno ideal para PHP en Linux Mint (¡con formato automático como en NetBeans!)

Si vienes de NetBeans y ahora estás usando Visual Studio Code (VS Code), probablemente extrañes esa característica tan útil de formatear automáticamente el código PHP con Ctrl+Shift+F.

¡Buenas noticias! Puedes lograr exactamente lo mismo (¡y mejor!) en VS Code. En esta guía te muestro cómo dejarlo todo listo paso a paso:


✅ Paso 1: Instalar Visual Studio Code en Linux Mint

Abre una terminal y ejecuta estos comandos para agregar el repositorio oficial de Microsoft e instalar VS Code:

sudo apt update
sudo apt install wget gpg
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
sudo install -o root -g root -m 644 packages.microsoft.gpg /usr/share/keyrings/
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] \
https://packages.microsoft.com/repos/code stable main" | sudo tee /etc/apt/sources.list.d/vscode.list
sudo apt update
sudo apt install code

✅ Paso 2: Instalar PHP y Composer (si no los tienes)

En la misma terminal, instala PHP y sus extensiones comunes:

sudo apt install php-cli php-common php-mbstring php-xml php-curl php-zip php-gd

Y luego Composer:

sudo apt install composer

✅ Paso 3: Instalar extensiones esenciales para PHP

Abre Visual Studio Code y presiona Ctrl+P, luego escribe:

ext install bmewburn.vscode-intelephense-client
ext install kokororin.vscode-phpfmt
ext install xdebug.php-debug

🔹 ¿Qué hace cada extensión?

  • PHP Intelephense: autocompletado, documentación, detección de errores.
  • phpfmt: formatea el código PHP automáticamente (como NetBeans).
  • PHP Debug: permite depurar con Xdebug.

✅ Paso 4: Configurar el formateador por defecto para PHP

Abre VS Code, presiona Ctrl+Shift+P y escribe: Preferencias: Abrir configuración (JSON).

Agrega o edita lo siguiente:

{
  "[php]": {
    "editor.defaultFormatter": "kokororin.vscode-phpfmt",
    "editor.formatOnSave": false
  }
}

¿Prefieres que se formatee al guardar? Cambia formatOnSave a true.


✅ Paso 5: Cambiar el atajo a Alt + Shift + F para formatear (como en NetBeans)

🖱 Opción 1: Desde el menú

  1. Abre VS Code.
  2. Ve a Archivo > Preferencias > Métodos abreviados de teclado.

⌨ Opción 2: Usando atajo

Presiona Ctrl + K y luego Ctrl + S.

Luego:

  1. En la barra de búsqueda escribe: format document.
  2. Ubica la acción: Editor: Format Document.
  3. Haz clic en el lápiz ✎ y selecciona “Cambiar combinación de teclas”.
  4. Presiona: Alt + Shift + F y confirma.

¡Listo! Ahora puedes formatear tu código PHP como lo hacías en NetBeans.


✅ (Opcional) Personaliza el estilo de formato con phpfmt.ini

Para controlar cómo se acomoda el código, crea un archivo phpfmt.ini en tu proyecto o en tu carpeta personal con este contenido:

passes = ["PSR2KeywordsLowerCase", "PSR2LnAfterNamespace", "PSR2CurlyOpenNextLine"]
indent_with_space = true
psr1 = true
psr2 = true

Más opciones en: phpfmt tools (GitHub).


🎯 Resultado final

  • ✅ Código PHP se formatea automáticamente con Alt+Shift+F.
  • ✅ Autocompletado inteligente y validación en tiempo real.
  • ✅ Depuración de código con Xdebug.
  • ✅ Más rápido y moderno que NetBeans.

🗨 Conclusión

Visual Studio Code no solo reemplaza a NetBeans, ¡lo supera!

Ligero, potente, extensible y totalmente configurable, VS Code puede ser tu nuevo editor favorito para proyectos PHP en Linux Mint.

¿Te gustaría una plantilla base ya configurada para clonar desde GitHub? ¡Pídela y te la preparo!


#PHP #VisualStudioCode #LinuxMint #DevTips #NetBeansToVSCode #VSCodePHP #OpenSourceTools #DesarrolloWeb #CodeClean

🎯 ¿Vas a montar un ERP con base de datos? ¡No gastes de más! 💸

Entrada fija

🔍 Si estás evaluando entre un VPS o una instancia AWS EC2, aquí va la verdad que muchos no te cuentan:


🚀 VPS Tradicional: tu mejor aliado para un ERP estable y económico

✅ Ideal para: Odoo, ERPNext, Dolibarr, Tryton
✅ Precio fijo desde $5 USD/mes
✅ Base de datos incluida (MySQL, PostgreSQL)
✅ Fácil de administrar y mantener
✅ Sin sorpresas en la factura

🧩 Perfecto para pequeñas empresas, freelancers o quien busca control total sin complicarse.


☁️ AWS EC2: poderoso pero más costoso y complejo

🔧 Paga por uso: CPU, red, almacenamiento, tráfico
🔧 Para usar base de datos recomendada, necesitas RDS (otro costo extra)
🔧 Ideal si necesitas alta escalabilidad, integración con S3, Lambda, etc.
🧠 Requiere conocimientos técnicos más avanzados

📈 Excelente para grandes empresas o arquitecturas distribuidas.


💡 ¿Qué elegir para tu ERP?

👉 Si quieres ahorrar y mantenerlo simple: VPS es el camino.
👉 Si tu ERP crecerá rápidamente y necesitas integraciones cloud: AWS puede valer la pena.


🔧 ¿Necesitas ayuda para instalar un ERP como Odoo o ERPNext en un VPS?
¡Escríbeme y te paso la guía completa paso a paso! 📩

#ERP #VPS #AWS #Odoo #ERPNext #NegociosDigitales #Tecnología #TransformaciónDigital #Empresas #Software

🎯 Cómo lanzar una instancia EC2 con Ubuntu 24.04 lista para montar tu página web 🚀

Entrada fija

¿Quieres montar tu sitio web en la nube? Aquí te explico cómo lanzar una instancia EC2 en Amazon Web Services (AWS) con Ubuntu 24.04 y configurarla con un grupo de seguridad que te permita publicar tu página web en minutos. ✅

🔧 Paso 1: Lanza la instancia EC2

  1. Entra a la consola de AWS y ve a EC2 > Instancias > Lanzar Instancia.
  2. Nombre: Ponle un nombre descriptivo (ej. ServidorWeb-Ubuntu24).
  3. AMI: Selecciona Ubuntu Server 24.04 LTS (HVM), SSD Volume Type.
  4. Tipo de instancia: Puedes usar t2.micro si estás en el nivel gratuito.
  5. Par de claves: Crea uno nuevo o selecciona uno existente para acceder por SSH.
  6. Grupo de seguridad: Aquí es clave. Crea uno con las siguientes reglas:
    • ✅ Tipo: SSH, Puerto: 22, Origen: Mi IP
    • ✅ Tipo: HTTP, Puerto: 80, Origen: 0.0.0.0/0
    • ✅ Tipo: HTTPS, Puerto: 443, Origen: 0.0.0.0/0
  7. Revisa y lanza la instancia.

🔌 Paso 2: Conéctate vía SSH

ssh -i "tu-clave.pem" ubuntu@<IP-Pública>

🍃 Paso 3: Instala el stack básico para tu página web
Actualiza el sistema e instala un servidor web (como Nginx o Apache):

sudo apt update && sudo apt upgrade -y
sudo apt install nginx -y

Verifica que funcione:

http://localhost

🔍 También puedes acceder desde el navegador:
http://<IP-Pública-de-tu-instancia>

📁 Sube tus archivos HTML o usa Git para clonar tu proyecto web dentro de /var/www/html/.

🧠 Consejo extra: Si vas a usar un dominio propio, asegúrate de apuntar los DNS a la IP de tu instancia EC2. Puedes usar Let’s Encrypt para HTTPS gratuito con Certbot.


💡 ¡Listo! Ya tienes tu servidor Ubuntu 24.04 en AWS listo para servir páginas web. Ideal para desarrolladores, estudiantes o emprendedores que quieren su web en línea rápido y sin complicaciones.

¿Quieres que te comparta un script que automatice esto? ¡Déjamelo saber! 👇

#AWS #EC2 #Ubuntu24 #DevOps #WebHosting #Linux #CloudComputing

Guía Completa: Instalar LAMPP con PostgreSQL y CodeIgniter 4 en Ubuntu 24.04 (EC2 AWS)

Entrada fija

Esta guía te muestra cómo dejar una instancia EC2 (Ubuntu 24.04) lista para usar CodeIgniter 4 con Apache, PostgreSQL y HTTPS.


✨ 1. Requisitos Previos

  • Una instancia EC2 Ubuntu 24.04 corriendo
  • Acceso SSH a la instancia (archivo .pem)
  • Un dominio apuntando a la IP de tu instancia (para usar HTTPS)
  • Puertos 22, 80 y 443 abiertos en el grupo de seguridad

⚙️ 2. Actualizar el sistema

sudo apt update && sudo apt upgrade -y

🔧 3. Instalar Apache, PHP y extensiones necesarias

sudo apt install apache2 php php-pgsql php-intl php-xml php-mbstring php-curl php-zip php-cli unzip git -y
sudo a2enmod rewrite

📃 4. Instalar PostgreSQL y configurar base de datos

sudo apt install postgresql postgresql-contrib -y

Crear base de datos y usuario:

sudo -u postgres psql

Dentro de psql:

CREATE DATABASE facturacion;
CREATE USER ci4user WITH PASSWORD 'ci4password';
GRANT ALL PRIVILEGES ON DATABASE facturacion TO ci4user;
\c facturacion
ALTER SCHEMA public OWNER TO ci4user;
GRANT USAGE, CREATE ON SCHEMA public TO ci4user;
\q

📁 5. Instalar Composer y CodeIgniter 4

cd /var/www/html
sudo composer create-project codeigniter4/appstarter facturacion
sudo chown -R www-data:www-data facturacion
sudo chmod -R 775 facturacion/writable

🚪 6. Configurar Apache Virtual Host

Edita o crea el archivo:

sudo nano /etc/apache2/sites-available/tusitio.com.conf

Contenido:

<VirtualHost *:80>
    ServerName tusitio.com
    DocumentRoot /var/www/html/facturacion/public

    <Directory /var/www/html/facturacion/public>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/facturacion_error.log
    CustomLog ${APACHE_LOG_DIR}/facturacion_access.log combined
</VirtualHost>

Activar sitio:

sudo a2dissite 000-default.conf
sudo a2ensite tusitio.com.conf
sudo systemctl reload apache2

🔒 7. Instalar Certbot para HTTPS

sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache -d tusitio.com --non-interactive --agree-tos -m admin@tusitio.com --redirect

🔢 8. Configurar CodeIgniter 4 con PostgreSQL

Edita el archivo .env dentro de /var/www/html/facturacion/:

database.default.hostname = localhost
database.default.database = facturacion
database.default.username = ci4user
database.default.password = ci4password
database.default.DBDriver = Postgre
database.default.port = 5432

Asegúrate de descomentar las líneas (quitar # al inicio)


📆 9. Ejecutar migraciones de CodeIgniter

cd /var/www/html/facturacion
sudo php spark migrate

Si da error de permisos:

sudo chown -R www-data:www-data writable
sudo chmod -R 775 writable

🎉 Resultado Final

Ya puedes acceder a tu sitio en:

https://tusitio.com

Con CodeIgniter 4 funcionando sobre PostgreSQL, Apache y HTTPS en una instancia EC2 Ubuntu 24.04.


🚀 Extras (opcional)

  • Usa php spark serve para desarrollo local
  • Configura Git para control de versiones
  • Usa .htaccess para seguridad y redirecciones

¡Listo! Tienes una pila LAPP (Linux, Apache, PostgreSQL, PHP) totalmente funcional con CodeIgniter 4.

Cómo instalar Composer en Linux Mint 21.3 (Xia)

Entrada fija

Cómo instalar Composer en Linux Mint 21.3 (Xia)

Sigue estos pasos desde la terminal para instalar Composer correctamente:

1️⃣ Instalar PHP y dependencias

sudo apt update
sudo apt install php-cli unzip curl

2️⃣ Descargar el instalador de Composer

curl -sS https://getcomposer.org/installer -o composer-setup.php

3️⃣ Verificar integridad del instalador (opcional)

HASH=$(curl -sS https://composer.github.io/installer.sig)
php -r "if (hash_file('sha384', 'composer-setup.php') === '$HASH') { echo 'Verificado correctamente'.PHP_EOL; } else { echo 'ERROR: Archivo corrupto'.PHP_EOL; unlink('composer-setup.php'); }"

4️⃣ Instalar Composer globalmente

sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

5️⃣ Verificar instalación

composer --version

🧹 Eliminar instalador (opcional)

rm composer-setup.php

¡Listo! Ya tienes Composer instalado en tu sistema.

🐘 Cómo Instalar PHP 8.3 en Linux Mint (Xfce / Cinnamon / Mate)

Entrada fija

🐘 Cómo Instalar PHP 8.3 en Linux Mint (Xfce / Cinnamon / Mate)

¿Estás usando Linux Mint y necesitas instalar PHP 8.3 para tus proyectos web o Laravel? ¡Estás en el lugar correcto! En esta guía paso a paso te muestro cómo instalar PHP 8.3 fácilmente, incluyendo extensiones comunes como intl, curl, mbstring y más.


✅ Requisitos Previos

  • Linux Mint 21.x (basado en Ubuntu)
  • Terminal con acceso sudo

📦 Paso 1: Actualiza tu sistema

sudo apt update && sudo apt upgrade -y

🔗 Paso 2: Agrega el repositorio oficial de PHP

sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

🧰 Paso 3: Instala PHP 8.3 con extensiones recomendadas

sudo apt install php8.3 php8.3-cli php8.3-common php8.3-mbstring php8.3-xml php8.3-mysql php8.3-curl php8.3-zip php8.3-gd php8.3-intl -y

¿Para qué sirve php8.3-intl? Es una extensión muy útil para trabajar con formatos internacionales, fechas, validaciones, y localización. Es requerida por muchos frameworks como Laravel y Symfony.


🔍 Paso 4: Verifica que PHP 8.3 se haya instalado

php -v

Deberías ver algo como:

PHP 8.3.x (cli) (built: ...)

⚙️ Paso 5 (opcional): Configura Apache o Nginx

Apache:

sudo a2dismod php7.4  # o la versión anterior que tengas
sudo a2enmod php8.3
sudo systemctl restart apache2

Nginx:

sudo apt install php8.3-fpm -y
sudo systemctl restart php8.3-fpm
sudo systemctl restart nginx

🎉 ¡Listo!

Ya tienes PHP 8.3 corriendo en tu sistema Linux Mint con todas las extensiones necesarias, incluyendo php8.3-intl. Estás listo para trabajar con Laravel, Symfony, WordPress, o cualquier otro proyecto moderno en PHP.


💬 ¿Tienes dudas o errores?

Déjalos en los comentarios y estaré encantado de ayudarte. 🙌

🎥 Cómo instalar Vertical Canvas en OBS Studio en Linux Mint 21.3 “Xia”

Entrada fija

🎥 Cómo instalar Vertical Canvas en OBS Studio en Linux Mint 21.3 “Xia”

Si eres creador de contenido y usas OBS Studio para grabar o hacer stream, probablemente te interese usar un lienzo vertical para contenido en formato 9:16 (TikTok, Shorts, Reels, etc.).

✅ Comando que me funcionó:

flatpak install flathub com.obsproject.Studio.Plugin.VerticalCanvas

Este comando instala directamente el plugin Vertical Canvas desde Flathub para la versión Flatpak de OBS Studio.

📌 Requisitos previos:

  • Tener OBS Studio instalado desde Flatpak. Si no lo tienes, instálalo con:
    flatpak install flathub com.obsproject.Studio
  • Verifica que Flathub esté habilitado:
    flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

🧪 ¿Cómo usar Vertical Canvas?

  1. Abre OBS Studio.
  2. Ve a Herramientas > Vertical Canvas.
  3. Configura tu lienzo vertical para grabaciones o transmisiones en formato móvil.

🔄 Consejo: Si ya tenías OBS abierto, reinícialo después de instalar el plugin para que aparezca en el menú.

🎯 Con esta herramienta, grabar contenido en vertical es mucho más fácil y profesional.

¿Te funcionó también? ¡Cuéntamelo en los comentarios!

#OBSStudio #LinuxMint #VerticalCanvas #Streaming #Flatpak #ContenidoVertical

🔍 Cómo Activar el Zoom con Compiz en Linux Mint 21.3 “Xia” (MATE Edition)

Entrada fija

🔍 Cómo Activar el Zoom con Compiz en Linux Mint 21.3 “Xia” (MATE Edition)

¿Estás usando Linux Mint 21.3 “Xia” con el escritorio MATE y quieres mejorar la accesibilidad o simplemente disfrutar de un zoom elegante tipo GNOME o macOS? ¡Estás de suerte!

En esta guía te explico cómo activar el zoom de escritorio usando Compiz, el gestor de ventanas con efectos visuales avanzados que sigue siendo compatible con MATE en Mint Xia.


🧠 ¿Por qué Compiz en Mint Xia?

Linux Mint 21.3 Xia con escritorio MATE es ligero, rápido y estable. Pero, por defecto, no incluye un zoom de escritorio completo como lo tienen GNOME o KDE. Aquí entra Compiz, que ofrece:

  • Zoom dinámico con el ratón o teclado
  • Seguimiento del puntero
  • Efectos visuales atractivos
  • ¡Y mucha personalización!

✅ Paso a Paso: Zoom con Compiz en Mint 21.3 Xia

1. 🛠 Instalar Compiz y sus herramientas

sudo apt update
sudo apt install compiz compizconfig-settings-manager compiz-plugins

2. 🔁 Reemplazar el gestor de ventanas por Compiz

compiz --replace &
disown

Ahora estás usando Compiz como gestor de ventanas. Deberías notar efectos visuales activos de inmediato.

3. ⚙️ Activar el plugin de zoom

ccsm

Luego:

  • Activa el plugin Enhanced Zoom Desktop
  • Configura atajos cómodos como:
Super (tecla Windows) + rueda del ratón → Zoom In/Out
Super + = para acercar
Super + - para alejar
Super + 0 para resetear

🚀 Haz que Compiz se inicie automáticamente en Xia

Para no ejecutar el comando cada vez que inicias sesión:

  1. Abre MenúAplicaciones al inicio
  2. Haz clic en Agregar
  3. Completa con:
    • Nombre: Compiz
    • Comando: compiz –replace
    • Comentario: Inicia Compiz como gestor de ventanas

💡 Extras: ¿Qué más puedes hacer con Compiz?

  • Ventanas gelatinosas
  • Cubo de escritorios 3D
  • Esquinas activas (Exposé)
  • Transparencias, sombras, animaciones

Todo accesible desde ccsm. Solo activa lo que necesites.


🟢 Conclusión

Si usas Linux Mint 21.3 “Xia” MATE Edition, puedes mejorar mucho tu experiencia visual activando zoom dinámico con Compiz. Es ideal para personas con baja visión, presentaciones o simplemente para trabajar con más comodidad.

¿Te funcionó en tu equipo? ¿Quieres añadir más efectos o dejarlo aún más liviano? ¡Déjame tu experiencia en los comentarios! 👇

🎉 ¡Actualización! Ahora tu descargador de YouTube en Python también baja subtítulos

Entrada fija

🎉 ¡Actualización! Ahora tu descargador de YouTube en Python también baja subtítulos

¿Ya creaste tu app para descargar videos de YouTube con interfaz gráfica y arte ASCII? ¡Excelente! Ahora te traigo una mejora súper útil: descargar automáticamente los subtítulos si están disponibles. Aquí te explico qué cambió y cómo funciona.


🆕 ¿Qué incluye esta actualización?

  • ✅ Detecta si hay subtítulos disponibles (en español o inglés).
  • ✅ Los descarga en formato .srt.
  • ✅ Guarda los subtítulos en la misma carpeta que el video.
  • ✅ Notifica al usuario si no hay subtítulos disponibles.

🔧 ¿Cómo funciona?

Cuando pegas la URL del video y haces clic en “Descargar video”, la app ahora:

  1. Descarga el video como antes.
  2. Revisa si el video tiene subtítulos en español (es) o inglés (en).
  3. Si encuentra alguno, los convierte a .srt y los guarda.
  4. Muestra una notificación confirmando ambos archivos (video y subtítulos), o indica que no se encontraron subtítulos.

💡 Detalles técnicos

  • Usa la biblioteca pytubefix para extraer subtítulos.
  • Detecta tanto subtítulos manuales como automáticos (a.en).
  • El archivo de subtítulos se nombra con el título del video, con extensión .srt.

🐍 ¿Necesito actualizar algo?

Sí. Asegúrate de tener la versión más reciente de pytubefix. Puedes instalarla o actualizarla con este comando:

pip install -U pytubefix

📷 Vista general de la app

La app conserva su diseño clásico en consola con una ventana gráfica simple, amigable, y un toque especial con arte ASCII. Ahora además te avisa si los subtítulos están disponibles:

Estado: Video descargado. Subtítulos encontrados y guardados.

O, si no hay subtítulos:

Estado: Video descargado. No se encontraron subtítulos.

🧪 Código completo del programa actualizado


import tkinter as tk
from tkinter import ttk, messagebox, filedialog
from pytubefix import YouTube
import threading
import os

def descargar_video():
    url = entrada_url.get()
    carpeta = ruta_descarga.get()

    if not url:
        messagebox.showwarning("Advertencia", "Por favor, ingresa una URL de YouTube.")
        return

    try:
        boton_descargar.config(state=tk.DISABLED)
        estado.set("Descargando video...")

        yt = YouTube(url)
        video = yt.streams.filter(progressive=True, file_extension='mp4').order_by('resolution').desc().first()

        if not video:
            raise Exception("No se encontró un stream compatible.")

        video_path = video.download(output_path=carpeta)
        estado.set("Video descargado. Buscando subtítulos...")

        # Descargar subtítulos si existen
        captions = yt.captions
        caption = None

        if 'es' in captions:
            caption = captions['es']
        elif 'a.en' in captions:
            caption = captions['a.en']
        elif 'en' in captions:
            caption = captions['en']

        if caption:
            srt = caption.generate_srt_captions()
            titulo_archivo = yt.title.replace(" ", "_").replace("/", "_") + ".srt"
            ruta_srt = os.path.join(carpeta, titulo_archivo)
            with open(ruta_srt, "w", encoding="utf-8") as f:
                f.write(srt)
            estado.set("Video y subtítulos descargados.")
            messagebox.showinfo("Completado", f"Video y subtítulos guardados:\n{video_path}\n{ruta_srt}")
        else:
            estado.set("Video descargado. No se encontraron subtítulos.")
            messagebox.showinfo("Completado", f"Video descargado:\n{video_path}\n(No se encontraron subtítulos)")

    except Exception as e:
        estado.set("Error en la descarga.")
        messagebox.showerror("Error", str(e))
    finally:
        boton_descargar.config(state=tk.NORMAL)

def elegir_carpeta():
    carpeta = filedialog.askdirectory()
    if carpeta:
        ruta_descarga.set(carpeta)

def iniciar_descarga():
    hilo = threading.Thread(target=descargar_video)
    hilo.start()

# Crear ventana
ventana = tk.Tk()
ventana.title("Descargador de YouTube con Subtítulos")
ventana.geometry("600x460")
ventana.resizable(False, False)
ventana.configure(bg="#ffffff")

# Variables
ruta_descarga = tk.StringVar()
estado = tk.StringVar(value="Esperando URL...")

# Arte ASCII
ascii_art = r"""
 __     __     ______     __         ______     __   __    
/\ \  _ \ \   /\  __ \   /\ \       /\  ___\   /\ "-.\ \   
\ \ \/ ".\ \  \ \ \/\ \  \ \ \____  \ \  __\   \ \ \-.  \  
 \ \__/".~\_\  \ \_____\  \ \_____\  \ \_____\  \ \_\\"\_\ 
  \/_/   \/_/   \/_____/   \/_____/   \/_____/   \/_/ \/_/ 
"""
etiqueta_ascii = tk.Label(
    ventana,
    text=ascii_art,
    font=("Courier", 10),
    bg="#ffffff",
    fg="#cc0000",
    justify="left"
)
etiqueta_ascii.pack(pady=(5, 0))

# Estilo
estilo = ttk.Style()
estilo.theme_use("clam")
estilo.configure("TButton", font=("Segoe UI", 10), padding=6)
estilo.configure("TLabel", font=("Segoe UI", 10), background="#ffffff")
estilo.configure("TEntry", font=("Segoe UI", 10))

# Widgets
ttk.Label(ventana, text="URL del video de YouTube:").pack(pady=10)
entrada_url = ttk.Entry(ventana, width=60)
entrada_url.pack(pady=5)

frame_carpeta = ttk.Frame(ventana)
frame_carpeta.pack(pady=10)

ttk.Entry(frame_carpeta, textvariable=ruta_descarga, width=45).pack(side=tk.LEFT, padx=(0, 10))
ttk.Button(frame_carpeta, text="Elegir carpeta", command=elegir_carpeta).pack(side=tk.LEFT)

boton_descargar = ttk.Button(ventana, text="Descargar Video", command=iniciar_descarga)
boton_descargar.pack(pady=15)

ttk.Label(ventana, textvariable=estado, foreground="blue").pack(pady=5)

ventana.mainloop()

🚀 ¿Qué sigue?

Próximas mejoras que puedes añadir:

  • Selección manual de idioma de subtítulos.
  • Conversión automática a .txt.
  • Compatibilidad con listas de reproducción.

¿Te gustaría que te ayude con alguna de estas mejoras? ¡Déjamelo saber en los comentarios!

🐧💚 Cómo Instalar OBS Studio con Eliminación de Fondo en Linux Mint Xia (Xfce) – ¡Rápido, sin errores y sin croma verde! 🎥✨

Entrada fija

🐧💚 Cómo Instalar OBS Studio con Eliminación de Fondo en Linux Mint Xia (Xfce) – ¡Rápido, sin errores y sin croma verde! 🎥✨

¿Usas Linux Mint Xfce (Xia) y quieres eliminar el fondo de tu webcam en OBS sin usar pantalla verde ni sufrir con dependencias rotas?

🎯 ¡Esta es la guía que buscabas! Con solo 2 comandos Flatpak tendrás OBS Studio con Background Removal funcionando como magia.


📦 ¿Qué necesitas?

  • ✅ Tener Flatpak habilitado (Linux Mint lo trae por defecto)
  • ✅ Conexión a Internet
  • ✅ Una cámara web decente
  • ✅ ¡Y ganas de brillar en tus streams, reuniones o clases! 🌟

🧙‍♂️ 1. Los comandos mágicos

Abre tu terminal y ejecuta:

flatpak install flathub com.obsproject.Studio

🔹 Esto instala la versión oficial y estable de OBS Studio desde Flathub.

Ahora, añade el plugin de eliminación de fondo:

flatpak install flathub com.obsproject.Studio.Plugin.BackgroundRemoval

🔹 ¡Y listo! Ahora OBS tendrá la opción de quitar el fondo de tu cámara sin necesidad de croma verde.


🧪 2. Cómo activar Background Removal

  1. Ejecuta OBS con este comando:
  2. Agrega una fuente de cámara (Video Capture Device).
  3. Haz clic derecho sobre la fuente → Filtros.
  4. En la sección “Efectos” haz clic en + → elige Background Removal.
  5. Ajusta el tipo de eliminación: segmentation, blur o custom background.

🎨 Resultado visual

📷 ANTES
Fondo antes de limpiar
📷 DESPUÉS
Fondo removido con plugin

💡 ¿Por qué usar esta solución Flatpak?

  • ✔️ Sin dependencias rotas
  • ✔️ Sin compilar nada
  • ✔️ Funciona perfecto en Linux Mint Xfce (Xia)
  • ✔️ Actualizado desde Flathub
  • ✔️ 100% visual y funcional desde el primer clic

🧠 ¿A quién le sirve?

  • 🎮 Streamers: Tu juego + tú, sin fondo feo
  • 🎓 Profesores y estudiantes: Más foco en ti
  • 🎥 Youtubers: Look profesional sin invertir en un estudio
  • 🗣️ Gente en reuniones virtuales: Adiós al cuarto desordenado 😅

❤️ ¿Te sirvió?

Compártelo con tus compas linuxeros. Y si quieres una versión con imágenes reales, video demo o un instalador automático para Linux Mint, ¡dímelo en los comentarios!

📘 Manual de instalación de PHP 8.2 en Deepin 23

Entrada fija

📘 Manual de instalación de PHP 8.2 en Deepin 23

Instalación de PHP 8.2 compilado desde fuente, con extensiones clave y configuración por PATH.


🔧 1. Instalar dependencias necesarias

sudo apt update
sudo apt install -y \
  build-essential \
  autoconf \
  bison \
  re2c \
  libxml2-dev \
  libcurl4-openssl-dev \
  libjpeg-dev \
  libpng-dev \
  libwebp-dev \
  libxpm-dev \
  libzip-dev \
  libssl-dev \
  libreadline-dev \
  libonig-dev \
  libicu-dev \
  libxslt-dev \
  pkg-config \
  wget \
  tar \
  unzip

📥 2. Descargar y descomprimir PHP 8.2

cd /tmp
wget https://www.php.net/distributions/php-8.2.18.tar.gz
tar -xzf php-8.2.18.tar.gz
cd php-8.2.18

⚙️ 3. Configurar para compilación

./configure --prefix=/opt/php8 \
  --with-openssl \
  --with-zlib \
  --with-curl \
  --with-readline \
  --enable-mbstring \
  --enable-intl \
  --enable-soap \
  --enable-opcache \
  --enable-bcmath \
  --enable-ftp \
  --enable-exif \
  --enable-sockets \
  --with-zip \
  --with-xsl \
  --with-gettext \
  --with-iconv \
  --with-pdo-mysql \
  --with-mysqli \
  --with-pdo-sqlite \
  --enable-fpm

🧱 4. Compilar e instalar

make -j$(nproc)
sudo make install

🧩 5. Activar PHP 8.2 por defecto usando $PATH

Agrega al final de tu archivo ~/.bashrc:

export PATH=/opt/php8/bin:$PATH

Aplica los cambios con:

source ~/.bashrc

✅ 6. Verificar instalación

php -v

Deberías ver algo como:

PHP 8.2.18 (cli) (built: ...)

🛠️ 7. Crear archivo php.ini (opcional)

sudo cp php.ini-development /opt/php8/lib/php.ini
nano /opt/php8/lib/php.ini

📦 8. Instalar Composer (opcional)

/opt/php8/bin/php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
/opt/php8/bin/php composer-setup.php
sudo mv composer.phar /usr/local/bin/composer

📚 9. Verificar extensiones cargadas

php -m

Debes ver extensiones como:

curl
intl
mbstring
openssl
readline
xsl
zip

📌 10. Alias útiles (opcional)

Agrega también a ~/.bashrc:

alias php="/opt/php8/bin/php"
alias phpize="/opt/php8/bin/phpize"
alias php-config="/opt/php8/bin/php-config"
alias composer="/opt/php8/bin/php /usr/local/bin/composer"

Y aplica con:

source ~/.bashrc

🎉 ¡Listo!

PHP 8.2 está instalado y funcionando con extensiones clave, sin afectar el sistema base de Deepin.

¡Descubre Linux Mint 22.1 “Xia”! Night Light y Rendimiento Potenciado.

Entrada fija

✨ Tu Escritorio, Más Hermoso Que Nunca

Prepárate para enamorarte de Cinnamon 6.4, el entorno de escritorio que se renueva con un tema por defecto espectacular: ¡diseño moderno, esquinas redondeadas y una sensación “flotante” que te encantará! Navegar por tu sistema nunca se vio tan bien.


 Descanso para tus Ojos con Night Light

¡Dile adiós a la fatiga visual! Con la nueva función Night Light, Linux Mint 22.1 ajusta automáticamente el color de tu pantalla para proteger tus ojos, especialmente durante la noche. ¡Tu vista te lo agradecerá! 


 Más Rápido y Eficiente “Bajo el Capó”

No solo es bonito, ¡también es potente! Gracias a la modernización de APT, la gestión de paquetes es ahora más rápida y estable, con traducciones impecables y un rendimiento que notarás. Además, Pipewire es el nuevo servidor de sonido por defecto, lo que significa un audio impecable y una mejor compatibilidad con tus apps favoritas.


 Pequeños Detalles, Gran Diferencia

  • Nemo ahora soporta miniaturas de archivos .ora.
  • Bulky te ayuda a limpiar los nombres de tus archivos.
  • Modos de energía para que tu sistema se adapte a ti.
  • ¡Y mucho más!

Basado en Ubuntu 24.04 LTS y con el Kernel 6.8, “Xia” es sinónimo de estabilidad y soporte a largo plazo hasta 2029.

¿Listo para transformar tu experiencia Linux? ¡Descarga ya Linux Mint 22.1 “Xia” y descubre un sistema operativo diseñado para deleitarte!


¡Corre la voz y comparte esta buena noticia! ¿Cuál es la característica que más te emociona de “Xia”?

🛠️ Guía Fácil: Cómo Instalar OSPOS (Open Source Point of Sale)

Entrada fija

🛒✨ ¿Buscas un sistema de punto de venta eficiente y gratuito? Descubre OSPOS ✨🛒

¿Eres emprendedor o dueño de un negocio y necesitas controlar tus ventas, inventario y clientes sin pagar costosas licencias?

OSPOS (Open Source Point of Sale) es la solución perfecta para ti:

  • ✅ 100% gratuito y de código abierto
  • ✅ Control de inventario y stock en tiempo real
  • ✅ Gestión de clientes y proveedores
  • ✅ Informes detallados de ventas
  • ✅ Soporte para múltiples idiomas y monedas
  • ✅ Interfaz web accesible desde cualquier navegador

🔧 ¡Personalizable y fácil de instalar en tu propio servidor o en la nube!

📦 Descárgalo en: https://github.com/opensourcepos/opensourcepos

¿Ya lo usas? Cuéntanos tu experiencia en los comentarios 👇


🛠️ Guía Fácil: Cómo Instalar OSPOS (Open Source Point of Sale)

Requisitos previos:

  • PHP 7.4 o superior
  • MySQL o MariaDB
  • Apache o Nginx
  • Composer
  • Git (opcional)

🔸 Opción 1: Instalación en Windows con XAMPP

  1. Instala XAMPP
    Descárgalo desde: https://www.apachefriends.org/index.html
  2. Descarga OSPOS
    Desde: Releases en GitHub
    Extrae el zip en: C:\xampp\htdocs\ospos
  3. Crea la base de datos
    Abre phpMyAdmin y crea una base de datos llamada ospos
  4. Importa la base de datos
    Usa el archivo database/database.sql
  5. Configura la conexión
    Edita application/config/database.php y cambia: 'username' => 'root', 'password' => '', 'database' => 'ospos', 'hostname' => 'localhost',
  6. Accede a OSPOS
    Ve a http://localhost/ospos/public
    Usuario: admin | Contraseña: pointofsale

🔸 Opción 2: Instalación en Linux (Ubuntu/Debian)

  1. Instala dependencias sudo apt update sudo apt install apache2 mariadb-server php php-mysql php-intl php-bcmath php-curl php-zip unzip git composer
  2. Descarga OSPOS cd /var/www/html sudo git clone https://github.com/opensourcepos/opensourcepos.git ospos cd ospos
  3. Crea la base de datos sudo mysql -u root CREATE DATABASE ospos; EXIT; mysql -u root ospos < database/database.sql
  4. Configura la conexión
    Edita application/config/database.php
  5. Permisos sudo chown -R www-data:www-data /var/www/html/ospos sudo chmod -R 755 /var/www/html/ospos
  6. Accede desde el navegador
    Ve a http://localhost/ospos/public

🧪 Solución de Problemas Comunes

  • Pantalla en blanco: Verifica versión de PHP y que mod_rewrite esté habilitado
  • No carga CSS/JS: Asegúrate de entrar por /public
  • Errores de permisos: Verifica carpetas application/cache y public/uploads

¿Te gustaría una guía en PDF o video? ¡Déjalo en los comentarios!


#OSPOS #PuntoDeVenta #OpenSource #Emprendimiento #Gratis

🧰 Cómo instalar Composer en Deepin Linux 23

Entrada fija

🧰 Cómo instalar Composer en Deepin Linux 23

Composer es el gestor de dependencias más popular para PHP. Esta guía te mostrará cómo instalarlo correctamente en Deepin Linux 23 paso a paso.


✅ Paso 1: Verificar si PHP está instalado

Abre una terminal y ejecuta:

php -v

Si no tienes PHP instalado, puedes hacerlo con:

sudo apt update
sudo apt install php-cli php-mbstring unzip curl

✅ Paso 2: Descargar e instalar Composer

Ejecuta estos comandos en la terminal:

cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php

(Opcional) Verifica la integridad del instalador:

HASH=$(curl -sS https://composer.github.io/installer.sig)
php -r "if (hash_file('sha384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

Instala Composer de forma global:

sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

✅ Paso 3: Verificar la instalación

Comprueba que Composer se instaló correctamente:

composer --version

Deberías ver algo como:

Composer version 2.x.x 202x-xx-xx

🔄 ¿Cómo actualizar Composer?

Para actualizar Composer más adelante:

composer self-update

📌 Notas finales

  • Composer se instala globalmente, por lo que puedes usarlo desde cualquier proyecto PHP.
  • Si deseas desinstalarlo, simplemente elimina el archivo /usr/local/bin/composer.

🎉 ¡Listo! Ya tienes Composer instalado y funcionando en tu sistema Deepin 23. Puedes comenzar a gestionar tus dependencias PHP de manera profesional.

🚀 Cómo Instalar Apache, PHP, MariaDB y Certbot en Deepin 23 (Servidor LAMP + HTTPS)

Entrada fija


🎯 Objetivo

En esta guía aprenderás a configurar un servidor web local con Apache, PHP y MariaDB en Deepin 23 y utilizar un alias personalizado como tusitio.localhost para tus desarrollos. Ideal para entornos de prueba de proyectos como Laravel, WordPress, etc.

1. 🔄 Actualizar el sistema

sudo apt update && sudo apt upgrade -y

2. 🌐 Instalar Apache

sudo apt install apache2 -y
sudo systemctl status apache2

Verifica accediendo a http://localhost.

3. 🐘 Instalar PHP y módulos necesarios

sudo apt install php libapache2-mod-php php-mysql php-cli php-xml php-curl php-mbstring php-zip php-gd -y
php -v

4. 🛢️ Instalar MariaDB

sudo apt install mariadb-server mariadb-client -y
sudo systemctl status mariadb

5. 🔐 Asegurar MariaDB

sudo mariadb
ALTER USER 'root'@'localhost' IDENTIFIED BY 'TuContraseñaSegura';
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host!='localhost';
DROP DATABASE IF EXISTS test;
FLUSH PRIVILEGES;
EXIT;

6. 🛠️ Crear VirtualHost local tusitio.localhost

sudo mkdir -p /var/www/tusitio
sudo nano /etc/apache2/sites-available/tusitio.conf

Pega el siguiente contenido:

<VirtualHost *:80>
    ServerAdmin admin@localhost
    ServerName tusitio.localhost
    DocumentRoot /var/www/tusitio

    <Directory /var/www/tusitio>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/tusitio_error.log
    CustomLog ${APACHE_LOG_DIR}/tusitio_access.log combined
</VirtualHost>

Habilitar el sitio y reiniciar Apache:

sudo a2ensite tusitio.conf
sudo systemctl reload apache2

7. 📝 Añadir alias en /etc/hosts

sudo nano /etc/hosts

Agrega al final del archivo:

127.0.0.1   tusitio.localhost

8. 🚀 Probar

Crea un archivo de prueba:

echo "<?php echo 'Hola desde tusitio.localhost'; ?>" | sudo tee /var/www/tusitio/index.php

Abre en el navegador: http://tusitio.localhost

✅ Resultado

ComponenteEstado
ApacheActivo
PHPFuncional
MariaDBProtegida
Alias localtusitio.localhost operativo

📌 Conclusión

Ya tienes un entorno de desarrollo web local usando un alias personalizado (tusitio.localhost) ideal para trabajar de forma organizada, simulando servidores reales. Puedes replicar este proceso para todos tus proyectos locales.

🖥️ Cómo instalar xRDP con XFCE en Deepin 23.1

Entrada fija

¿Quieres acceder de forma remota a tu escritorio Deepin? Aquí tienes una guía paso a paso para instalar xRDP con el entorno XFCE en Deepin 23.1. Ideal para sesiones remotas rápidas y ligeras.

🔧 Requisitos previos

  • Deepin 23.1 instalado
  • Acceso como usuario con privilegios de sudo

📜 Script completo (xrdp_deepin23_instalar.sh)

Este script automatiza toda la instalación y configuración:

#!/bin/bash

echo "=== Instalando xRDP y XFCE en Deepin 23.1 ==="

# Actualizar repositorios
sudo apt update

# Instalar XFCE y plugins útiles
sudo apt install -y xfce4 xfce4-whiskermenu-plugin xfce4-weather-plugin \
xfce4-volumed-pulse thunar-vcs-plugins thunar-media-tags-plugin thunar-gtkhash

# Instalar xRDP y backend Xorg
sudo apt install -y xrdp xorgxrdp freerdp2-x11

# Configurar XFCE como entorno por defecto para RDP
echo 'exec env -u SESSION_MANAGER -u DBUS_SESSION_BUS_ADDRESS startxfce4' | sudo tee /etc/xrdp/startwm.sh
sudo chmod +x /etc/xrdp/startwm.sh

# Habilitar e iniciar servicio xRDP
sudo systemctl enable xrdp
sudo systemctl restart xrdp

echo "✅ Instalación completa. Puedes conectarte vía RDP y usar XFCE."

🚀 Cómo ejecutar el script


# Guardar el script
nano xrdp_deepin23_instalar.sh

# Pegar el contenido, guardar y cerrar (Ctrl+O, Enter, Ctrl+X)

# Dar permisos de ejecución
chmod +x xrdp_deepin23_instalar.sh

# Ejecutar el script
./xrdp_deepin23_instalar.sh

✅ Resultado

Una vez completado, podrás conectarte por RDP a tu máquina Deepin y usar el entorno XFCE. Esto no afecta tu escritorio local Deepin (DDE).

🧩 Consejo adicional

Evita tener la sesión iniciada localmente con el mismo usuario antes de conectarte por RDP, ya que xRDP no admite sesiones gráficas múltiples con el mismo usuario.

📦 Cómo convertir tu script de Python en un archivo EXE con interfaz gráfica

Entrada fija

Ya creaste tu aplicación para descargar videos de YouTube con una interfaz bonita y arte ASCII. Ahora te gustaría compartirla con otros sin que tengan que instalar Python, ¿cierto? Aquí te enseño cómo convertir tu script en un archivo ejecutable .exe de un solo archivo, listo para usar en Windows.


🧰 Requisitos previos

Debes tener instalado:

  • Python 3.10 o 3.11 (recomendado)
  • pip funcionando
  • El script principal, por ejemplo: descargador_youtube.py

🔧 Paso 1: Instalar pyinstaller

Abre una terminal (CMD o PowerShell) y ejecuta:


pip install pyinstaller

📦 Paso 2: Crear el archivo EXE de un solo archivo

Usa el siguiente comando para generar un ejecutable compacto:


pyinstaller --onefile --noconsole descargador_youtube.py

Opciones importantes:

  • --onefile: empaqueta todo en un solo archivo .exe
  • --noconsole: oculta la ventana de consola al abrir (ideal para apps con interfaz gráfica)

📂 Paso 3: Buscar el archivo generado

Después de ejecutar el comando, se generarán carpetas como dist y build. Tu ejecutable estará en la carpeta dist:


/dist/descargador_youtube.exe

¡Ese es el archivo que puedes compartir con otros usuarios de Windows! No necesitan instalar Python ni dependencias.


🧪 Paso 4: Probar el EXE

Haz doble clic en el archivo descargador_youtube.exe. Si todo salió bien, verás tu interfaz gráfica funcionando con arte ASCII incluido. Puedes elegir la carpeta, pegar una URL de YouTube y descargar.


🐞 ¿Problemas comunes?

  • 🔁 Si el video no descarga, asegúrate de estar usando pytubefix y no pytube.
  • 🖼 Si ves un error con tkinter, asegúrate de que tu Python lo incluya (instalación completa desde python.org).
  • 🛠 ¿No funciona en otra PC? Usa la opción --add-data si tienes archivos externos o logos.

💡 Bonus: crear un icono personalizado

Si tienes un ícono (.ico), puedes usarlo así:


pyinstaller --onefile --noconsole --icon=icono.ico descargador_youtube.py

📤 Compartir tu app

Ahora puedes subir el .exe a Google Drive, Dropbox o empaquetarlo en un archivo ZIP para compartir fácilmente.


🚀 ¿Quieres más?

  • Convertir a ejecutable en Linux o macOS
  • Versión con barra de progreso
  • Soporte para listas de reproducción

Déjamelo saber en los comentarios 👇

🎬 Cómo Crear un Descargador de Videos de YouTube con Interfaz Gráfica en Python

Entrada fija

🎬 Cómo Crear un Descargador de Videos de YouTube con Interfaz Gráfica en Python

¿Quieres tu propia app para descargar videos de YouTube de forma sencilla? Aquí te explico cómo hacerlo con Python, usando una interfaz gráfica moderna y arte ASCII decorativo. Usaremos pytubefix para evitar errores comunes como el 400 Bad Request.


✅ Paso 1: Instala las dependencias

Abre la terminal y escribe:


pip install pytubefix

🧱 Paso 2: Código completo del programa

Crea un archivo llamado descargador_youtube.py y copia el siguiente contenido:


import tkinter as tk
from tkinter import ttk, messagebox, filedialog
from pytubefix import YouTube
import threading

def descargar_video():
    url = entrada_url.get()
    carpeta = ruta_descarga.get()

    if not url:
        messagebox.showwarning("Advertencia", "Por favor, ingresa una URL de YouTube.")
        return

    try:
        boton_descargar.config(state=tk.DISABLED)
        estado.set("Descargando video...")

        yt = YouTube(url)
        video = yt.streams.filter(progressive=True, file_extension='mp4').order_by('resolution').desc().first()

        if not video:
            raise Exception("No se encontró un stream compatible.")

        video.download(output_path=carpeta)
        estado.set("¡Descarga completada!")
        messagebox.showinfo("Éxito", f"Video descargado: {yt.title}")
    except Exception as e:
        estado.set("Error en la descarga.")
        messagebox.showerror("Error", str(e))
    finally:
        boton_descargar.config(state=tk.NORMAL)

def elegir_carpeta():
    carpeta = filedialog.askdirectory()
    if carpeta:
        ruta_descarga.set(carpeta)

def iniciar_descarga():
    hilo = threading.Thread(target=descargar_video)
    hilo.start()

# Crear ventana
ventana = tk.Tk()
ventana.title("Descargador de YouTube")
ventana.geometry("600x460")
ventana.resizable(False, False)
ventana.configure(bg="#ffffff")

# Variables
ruta_descarga = tk.StringVar()
estado = tk.StringVar(value="Esperando URL...")

# Arte ASCII decorativo
ascii_art = r"""
 __     __     ______     __         ______     __   __    
/\ \  _ \ \   /\  __ \   /\ \       /\  ___\   /\ "-.\ \   
\ \ \/ ".\ \  \ \ \/\ \  \ \ \____  \ \  __\   \ \ \-.  \  
 \ \__/".~\_\  \ \_____\  \ \_____\  \ \_____\  \ \_\\"\_\ 
  \/_/   \/_/   \/_____/   \/_____/   \/_____/   \/_/ \/_/ 
"""
etiqueta_ascii = tk.Label(
    ventana,
    text=ascii_art,
    font=("Courier", 10),
    bg="#ffffff",
    fg="#cc0000",
    justify="left"
)
etiqueta_ascii.pack(pady=(5, 0))

# Estilo
estilo = ttk.Style()
estilo.theme_use("clam")
estilo.configure("TButton", font=("Segoe UI", 10), padding=6)
estilo.configure("TLabel", font=("Segoe UI", 10), background="#ffffff")
estilo.configure("TEntry", font=("Segoe UI", 10))

# Widgets
ttk.Label(ventana, text="URL del video de YouTube:").pack(pady=10)
entrada_url = ttk.Entry(ventana, width=60)
entrada_url.pack(pady=5)

frame_carpeta = ttk.Frame(ventana)
frame_carpeta.pack(pady=10)

ttk.Entry(frame_carpeta, textvariable=ruta_descarga, width=45).pack(side=tk.LEFT, padx=(0, 10))
ttk.Button(frame_carpeta, text="Elegir carpeta", command=elegir_carpeta).pack(side=tk.LEFT)

boton_descargar = ttk.Button(ventana, text="Descargar Video", command=iniciar_descarga)
boton_descargar.pack(pady=15)

ttk.Label(ventana, textvariable=estado, foreground="blue").pack(pady=5)

ventana.mainloop()

🧪 Paso 3: Ejecuta tu aplicación


python descargador_youtube.py

🎨 Resultado del arte ASCII


 __     __     ______     __         ______     __   __    
/\ \  _ \ \   /\  __ \   /\ \       /\  ___\   /\ "-.\ \   
\ \ \/ ".\ \  \ \ \/\ \  \ \ \____  \ \  __\   \ \ \-.  \  
 \ \__/".~\_\  \ \_____\  \ \_____\  \ \_____\  \ \_\\"\_\ 
  \/_/   \/_/   \/_____/   \/_____/   \/_____/   \/_/ \/_/ 

💡 Siguientes pasos sugeridos

  • Agregar barra de progreso visual
  • Soporte para listas de reproducción
  • Conversión a MP3 automática

¿Te gustaría que publique otra guía con alguna de estas mejoras? ¡Déjame un comentario! 🚀

¿Por qué deberías usar JOIN en lugar de FROM tabla1, tabla2 con condiciones en WHERE?

Entrada fija

¿Por qué deberías usar JOIN en lugar de FROM tabla1, tabla2 con condiciones en WHERE?

Cuando escribimos consultas SQL que involucran varias tablas, existen dos enfoques comunes para realizar combinaciones (joins) entre ellas:

1. JOIN explícito (moderno y recomendado):


SELECT *
FROM empleados e
JOIN departamentos d ON e.id_departamento = d.id;

2. JOIN implícito (forma antigua):


SELECT *
FROM empleados e, departamentos d
WHERE e.id_departamento = d.id;

Aunque ambos métodos pueden producir los mismos resultados, usar JOIN explícito es la práctica recomendada. Aquí te explicamos por qué:

1. Claridad y legibilidad

El uso de JOIN deja explícita la intención del programador: combinar datos entre tablas mediante una condición clara.

Comparación:


-- JOIN explícito
FROM empleados e
JOIN departamentos d ON e.id_departamento = d.id

-- JOIN implícito
FROM empleados e, departamentos d
WHERE e.id_departamento = d.id

Con más tablas, el estilo implícito se vuelve difícil de leer y mantener.

2. Separación de responsabilidades: combinación vs. filtrado

Con JOIN, las condiciones de unión van en ON, y los filtros en WHERE. Esto mejora la comprensión y evita errores como olvidar una condición de unión.

3. Evita productos cartesianos accidentales

Si olvidas una condición en el estilo implícito, puedes crear un producto cartesiano por accidente:


SELECT *
FROM empleados e, departamentos d;

Esto combinará todas las filas de ambas tablas, lo cual rara vez es lo que se desea.

4. Compatibilidad con OUTER JOIN

El estilo con FROM ... WHERE ... no permite correctamente LEFT, RIGHT o FULL JOIN.


SELECT *
FROM empleados e
LEFT JOIN departamentos d ON e.id_departamento = d.id;

Esto es imposible de hacer con el estilo antiguo sin JOIN.

5. Mejor soporte por los optimizadores de consultas

Los motores SQL modernos analizan mejor las consultas estructuradas con JOIN, permitiendo optimizaciones más eficientes.

🔚 Conclusión

Aunque el estilo implícito aún funciona, su uso está desaconsejado.

Usar JOIN te da:

  • Mayor claridad y mantenimiento.
  • Separación entre unión y filtros.
  • Soporte completo para combinaciones externas.
  • Menos riesgo de errores y resultados inesperados.

En resumen:
Siempre que necesites unir tablas, usa JOIN explícito. Es más claro, más seguro y más flexible.

Instalación de PostgreSQL en Linux Mint 22.1 “Xia”

Entrada fija

Cómo instalar y configurar PostgreSQL en Linux Mint 22.1 “Xia”

En esta guía rápida aprenderás a instalar PostgreSQL en Linux Mint 22.1, además de configurarlo para permitir el acceso remoto y autenticación mediante contraseña.

✅ Paso 1: Instalar PostgreSQL

sudo apt update
sudo apt install wget ca-certificates

echo "deb http://apt.postgresql.org/pub/repos/apt/ noble-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo tee /etc/apt/trusted.gpg.d/postgresql.asc

sudo apt update
sudo apt install postgresql

Verifica que el servicio esté activo:

sudo systemctl status postgresql

🔧 Paso 2: Configurar PostgreSQL para acceso remoto

Editar el archivo postgresql.conf para que escuche en todas las interfaces:

sudo nano /etc/postgresql/16/main/postgresql.conf
# Cambia la línea:
#listen_addresses = 'localhost'
# Por:
listen_addresses = '*'

Editar el archivo pg_hba.conf para permitir conexiones remotas:

sudo nano /etc/postgresql/16/main/pg_hba.conf

# Añadir al final:
host    all             all             192.168.1.0/24         md5

Reiniciar PostgreSQL para aplicar cambios:

sudo systemctl restart postgresql

🔐 Paso 3: Crear usuario con contraseña

sudo -i -u postgres
psql

CREATE USER nombre_usuario WITH PASSWORD 'tu_contraseña';
ALTER ROLE nombre_usuario WITH LOGIN;
CREATE DATABASE mibase OWNER nombre_usuario;

\q
exit

💻 Paso 4: Probar conexión remota

Desde otro equipo con cliente PostgreSQL:

psql -h ip_del_servidor -U nombre_usuario -d mibase

.

📷 Cómo instalar V380 Pro en Linux Mint (paso a paso)

Entrada fija

Si tienes cámaras IP que usan la app V380 Pro y estás en Linux Mint, probablemente te has encontrado con que no hay versión oficial para Linux. Pero no te preocupes: puedes instalar la versión de Windows usando Wine. Aquí te explico cómo hacerlo fácilmente:


✅ Paso 1: Instalar Wine

Abre la terminal y ejecuta estos comandos uno por uno:

sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine64 wine32

Esto instalará Wine, que te permite ejecutar aplicaciones de Windows en Linux.


✅ Paso 2: Verifica que Wine está instalado

Escribe en la terminal:

wine --version

Deberías ver algo como wine-7.0 (o la versión más reciente).


✅ Paso 3: Descarga el instalador de V380 Pro para Windows

Puedes conseguirlo desde la web oficial o desde sitios confiables. El archivo se llamará algo como:

V380ProSetup.exe

Guárdalo en tu carpeta Descargas.


✅ Paso 4: Ejecuta el instalador

En la terminal, navega a la carpeta donde está el archivo:

cd ~/Descargas

Luego, ejecuta el instalador con Wine:

wine V380ProSetup.exe

⚠️ Asegúrate de usar el nombre exacto del archivo. Si tiene espacios o mayúsculas, escríbelo tal como aparece, o arrástralo directamente a la terminal para que escriba la ruta automáticamente.


✅ Paso 5: Sigue el proceso de instalación

Aparecerá una ventana como si estuvieras en Windows. Instala la aplicación normalmente.


✅ Paso 6: Abre V380 Pro desde Linux

Una vez instalado, puedes ejecutarlo con un comando como este, normalmente se puede ver desde el menu y el comando puede ser diferente:

wine ~/.wine/drive_c/Program\ Files/V380\ Pro/V380Pro.exe

(ajusta la ruta si fue instalado en otra carpeta).

También puedes buscarlo en el menú de aplicaciones de Linux, ya que Wine a veces crea accesos directos automáticamente.


✅ ¿Y funciona bien?

En general, funciona, aunque puede que algunas funciones como audio o notificaciones no sean 100% estables. Pero para ver las cámaras, cambiar configuraciones básicas y grabar, es suficiente.

🎥 Detección de Personas en Video y Grabación Automática Usando Python y OpenCV

Entrada fija

En este artículo explicaremos cómo crear un sistema de detección de personas que grabe automáticamente la pantalla solo cuando se detecta presencia humana. Este proyecto es útil si usas cámaras IP o software como V380 y deseas una forma eficiente de grabar únicamente cuando hay movimiento humano en una región específica del escritorio.


✅ ¿Qué hace este script?

  • Captura un área definida de la pantalla (donde aparece el video de la cámara).
  • Usa un modelo de inteligencia artificial para detectar personas.
  • Comienza a grabar cuando detecta presencia humana.
  • Detiene la grabación si no se ve nadie por un período definido.
  • Guarda los videos automáticamente con marcas de tiempo.

🧠 Tecnologías y librerías usadas

  • OpenCV: procesamiento de imágenes y video.
  • mss: captura rápida de pantalla.
  • NumPy: procesamiento eficiente de matrices.
  • datetime y time: control de tiempo.
  • Modelo Caffe SSD preentrenado: para detección de rostros/personas.

📦 Requisitos

Asegúrate de tener Python 3.8+ (funciona en 3.12) y las siguientes librerías instaladas:

pip install opencv-python numpy mss

También necesitas dos archivos de modelo descargados:

  • deploy.prototxt
  • res10_300x300_ssd_iter_140000.caffemodel

Se pueden obtener desde los repositorios oficiales de OpenCV o desde:

wget https://raw.githubusercontent.com/opencv/opencv/master/samples/dnn/face_detector/deploy.prototxt .

wget https://github.com/opencv/opencv_3rdparty/raw/dnn_samples_face_detector_20170830/res10_300x300_ssd_iter_140000_fp16.caffemodel -O res10_300x300.caffemodel

🧾 El código completo

import cv2
import numpy as np
import time
from mss import mss
from datetime import datetime

# === Configuraciones ===
monitor = {"top": 100, "left": 100, "width": 640, "height": 480}

prototxt = "deploy.prototxt"
model = "res10_300x300_ssd_iter_140000.caffemodel"
NO_PERSON_TIMEOUT = 5

net = cv2.dnn.readNetFromCaffe(prototxt, model)
sct = mss()
recording = False
video_writer = None
last_person_time = 0

def detect_person(frame):
    blob = cv2.dnn.blobFromImage(cv2.resize(frame, (300, 300)), 1.0,
                                 (300, 300), (104.0, 177.0, 123.0))
    net.setInput(blob)
    detections = net.forward()

    for i in range(detections.shape[2]):
        confidence = detections[0, 0, i, 2]
        if confidence > 0.6:
            return True
    return False

def start_recording(filename, frame_size, fps=20):
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    return cv2.VideoWriter(filename, fourcc, fps, frame_size)

print("🔍 Monitoreando... Presiona ESC para salir.")

while True:
    frame = np.array(sct.grab(monitor))
    frame = cv2.cvtColor(frame, cv2.COLOR_BGRA2BGR)

    person_detected = detect_person(frame)
    current_time = time.time()

    if person_detected:
        last_person_time = current_time
        if not recording:
            filename = datetime.now().strftime("grabacion_%Y%m%d_%H%M%S.mp4")
            video_writer = start_recording(filename, (monitor["width"], monitor["height"]))
            print(f"🟢 Persona detectada – grabando en: {filename}")
            recording = True
    else:
        if recording and (current_time - last_person_time > NO_PERSON_TIMEOUT):
            print("🔴 No hay persona – deteniendo grabación.")
            recording = False
            video_writer.release()
            video_writer = None

    if recording and video_writer is not None:
        video_writer.write(frame)

    cv2.imshow("Vista", frame)
    if cv2.waitKey(1) == 27:  # ESC
        break

# Limpieza
if video_writer:
    video_writer.release()
cv2.destroyAllWindows()

🛠️ Cómo ajustar a tu uso

  • Cambia las coordenadas de monitor según dónde esté la imagen de la cámara en tu pantalla.
  • Puedes modificar el umbral de confianza (confidence > 0.6) si detecta demasiado o poco.
  • Cambia el tiempo NO_PERSON_TIMEOUT si quieres que espere más o menos antes de cortar la grabación.

📂 Salidas

  • Videos guardados en la misma carpeta, con nombre grabacion_YYYYMMDD_HHMMSS.mp4.
  • No graba sonido (ideal para privacidad o rendimiento).

🖥️ Requisitos mínimos de hardware

  • CPU moderna (Intel i5 o Ryzen 5 en adelante recomendado).
  • RAM: 4 GB mínimo (8+ recomendado).
  • Sistema operativo: Linux o Windows.
  • Sin GPU necesaria, ya que el modelo es liviano.

Cómo Sobrescribir o Extender Clases en CodeIgniter 4.5: Caso Práctico con DataTables

Entrada fija

En muchos proyectos de desarrollo web con CodeIgniter 4, nos encontramos con la necesidad de modificar o extender clases de terceros sin alterar el código fuente original. Esto es especialmente común al trabajar con bibliotecas como Hermawan\DataTables, ampliamente utilizada para integrar DataTables con Eloquent y Query Builder.

Uno de los escenarios más comunes es sobrescribir la clase DataTableColumnDefs, ya sea para agregar soporte adicional (como compatibilidad con PostgreSQL) o personalizar cómo se gestionan las columnas y filtros de búsqueda.

En este artículo te mostraré cómo sobrescribir o extender esta clase correctamente en CodeIgniter 4.5, sin comprometer la mantenibilidad de tu proyecto.


🔍 ¿Por qué deberías sobrescribir una clase?

Modificar directamente los archivos de una librería externa puede parecer una solución rápida, pero es una mala práctica. Estas son algunas razones para evitarlo:

  • ❌ Pierdes la capacidad de actualizar el paquete con Composer.
  • ❌ Rompes el principio de separación de responsabilidades.
  • ✅ Extender o sobrescribir desde tu propia aplicación es más limpio y seguro.

🧱 Ejemplo: DataTableColumnDefs

La clase Hermawan\DataTables\DataTableColumnDefs es responsable de definir las columnas que serán procesadas por la tabla, sus alias, si son ordenables, buscables, etc.

Supongamos que quieres modificar el método getSearchable() para agregar compatibilidad con PostgreSQL (por ejemplo, usando CAST a texto y comillas dobles).


✅ Opción 1: Extender la clase original

Paso 1: Crea una nueva clase en app/Libraries

<?php

namespace App\Libraries;

use Hermawan\DataTables\DataTableColumnDefs;

class MyDataTableColumnDefs extends DataTableColumnDefs
{
    public function getSearchable()
    {
        // Aquí tu versión modificada del método original
        return parent::getSearchable(); // Puedes personalizarla como desees
    }
}

Paso 2: Usa tu clase en lugar de la original

use App\Libraries\MyDataTableColumnDefs;

$dt = new MyDataTableColumnDefs($builder);

🔁 Puedes sobrescribir cualquier otro método, como add, remove, o initFromBuilder.


✅ Opción 2: Reemplazar completamente la clase original

⚠️ Solo se recomienda si estás seguro de que no actualizarás el paquete regularmente.

Paso 1: Copia la clase original a app/Libraries/DataTableColumnDefs.php

Paso 2: Cambia el namespace

use App\Libraries\MyDataTableColumnDefs;

$dt = new MyDataTableColumnDefs($builder);

Paso 3: Modifica lo que necesites

Paso 4: Usa tu versión

use App\Libraries\MyDataTableColumnDefs;

$dt = new MyDataTableColumnDefs($builder);

✅ Opción 3: Sobrescribir vía Composer Autoload

Esta es una opción elegante y avanzada si necesitas que tu clase se cargue en lugar de la original sin cambiar el nombre.

Paso 1: Edita composer.json

"autoload": {
    "psr-4": {
        "Hermawan\\DataTables\\": "app/Overrides/DataTables/"
    }
}

Paso 2: Crea el archivo sobrescrito

app/Overrides/DataTables/DataTableColumnDefs.php

Paso 3: Copia el contenido original, modifica lo necesario

Paso 4: Ejecuta:

composer dump-autoload

✨ ¡Listo! CodeIgniter usará tu versión personalizada sin modificar el paquete original.


🎯 Conclusión

Sobrescribir o extender clases en CodeIgniter 4.5 te da la flexibilidad de adaptar librerías a tus necesidades sin sacrificar actualizaciones futuras o buenas prácticas de desarrollo. Ya sea para añadir soporte a PostgreSQL, cambiar la lógica de filtrado o mejorar la compatibilidad con tus modelos, hacerlo correctamente asegura que tu aplicación sea más escalable y mantenible.

¿Qué Base de Datos Elegir? Comparativa de MariaDB, PostgreSQL y SQL Server

Entrada fija
  • Si buscas una solución gratuita, potente, extensible y con una gran comunidad, ideal para una amplia variedad de aplicaciones (web, móviles, empresariales) y si no dependes fuertemente del ecosistema Microsoft: PostgreSQL es una excelente opción. Su robustez y características avanzadas lo hacen muy versátil.
  • Si necesitas una solución gratuita, con buen rendimiento y alta compatibilidad con MySQL, especialmente si ya tienes experiencia con MySQL o planeas una migración sencilla: MariaDB es una alternativa sólida.
  • Si tu infraestructura ya está fuertemente basada en productos Microsoft, necesitas una integración perfecta con ellos, un amplio conjunto de herramientas empresariales y soporte comercial robusto, y el presupuesto no es la principal limitante: SQL Server sería la opción más adecuada.

En resumen:

  • PostgreSQL: Versátil, potente, de código abierto, ideal para diversas aplicaciones.
  • MariaDB: Gratuita, buen rendimiento, compatible con MySQL.
  • SQL Server: Óptimo para entornos Microsoft, con amplias funcionalidades comerciales.

Para tomar la mejor decisión, te recomiendo considerar los siguientes factores específicos para tu situación en Los Mochis:

  • Requisitos de tu aplicación: ¿Qué tipo de datos manejarás? ¿Qué tipo de consultas realizarás? ¿Necesitas características específicas como geodatos?
  • Tamaño y escalabilidad esperada: ¿Cuánto crecerá tu base de datos y tu aplicación?
  • Experiencia de tu equipo: ¿Con qué base de datos están más familiarizados tus desarrolladores y administradores?
  • Presupuesto: ¿Puedes asumir los costos de licencia de SQL Server?
  • Infraestructura existente: ¿Qué sistemas operativos utilizas? ¿Necesitas una integración estrecha con otras herramientas?
  • Soporte local: ¿Hay experiencia y soporte técnico disponible en Los Mochis para alguna de estas bases de datos en particular?

Considerando que trabajarás con CodeIgniter 4, tanto MariaDB como PostgreSQL son excelentes opciones y muy populares en la comunidad de PHP y CodeIgniter. SQL Server también puede funcionar bien, pero podría tener algunas consideraciones adicionales.

MariaDB con CodeIgniter 4:

  • Ventajas:
    • Compatibilidad Directa: CodeIgniter 4 tiene un excelente soporte para MySQL, y dado que MariaDB es altamente compatible, la configuración y el uso serán muy sencillos.
    • Rendimiento: Puede ofrecer un buen rendimiento para aplicaciones web desarrolladas con CodeIgniter 4.
    • Facilidad de Uso: Muchos desarrolladores PHP están familiarizados con MySQL/MariaDB, lo que podría facilitar el desarrollo y la administración.
    • Código Abierto y Gratuito: Sin costos de licencia, lo cual es atractivo para muchos proyectos.
    • Comunidad: Amplia comunidad de usuarios de PHP y MySQL/MariaDB.
  • Desventajas:
    • Menos Características Avanzadas: Comparado con PostgreSQL, podría carecer de algunas características más avanzadas si tu aplicación en el futuro las necesitara (tipos de datos más complejos, extensiones como PostGIS, etc.).

PostgreSQL con CodeIgniter 4:

  • Ventajas:
    • Características Potentes: Ofrece características avanzadas que podrían ser útiles para aplicaciones más complejas (tipos de datos JSON, arrays, funciones avanzadas, etc.).
    • Integridad de Datos: Conocido por su robustez y cumplimiento de los estándares SQL, lo que puede contribuir a una mayor integridad de los datos.
    • Extensiones: La capacidad de extender su funcionalidad con extensiones como PostGIS para datos geoespaciales es una gran ventaja si tu aplicación lo requiere.
    • Rendimiento Sólido: Funciona muy bien con aplicaciones web y puede manejar grandes volúmenes de datos y consultas complejas de manera eficiente.
    • Comunidad: Una comunidad fuerte y activa dentro del mundo de PHP y PostgreSQL.
  • Desventajas:
    • Curva de Aprendizaje Ligeramente Mayor: Si no estás familiarizado con PostgreSQL, podría haber una pequeña curva de aprendizaje en comparación con MySQL/MariaDB.
    • Configuración Inicial: La configuración inicial podría tener algunos pasos ligeramente diferentes en comparación con MySQL/MariaDB.

SQL Server con CodeIgniter 4:

  • Ventajas:
    • Potencia y Funcionalidades: Ofrece un conjunto robusto de características empresariales.
    • Integración (si usas Windows Server): Si tu servidor corre en Windows Server, la integración podría ser más sencilla en algunos aspectos.
  • Desventajas:
    • Costo de Licencia: El costo de las licencias puede ser un factor limitante.
    • Configuración Adicional: La configuración para que CodeIgniter 4 se conecte a SQL Server podría requerir algunos pasos adicionales y la instalación de drivers específicos.
    • Menor Popularidad en el Mundo PHP: Aunque funciona, no es tan comúnmente utilizado con PHP como MariaDB o PostgreSQL, por lo que la comunidad y los ejemplos específicos para CodeIgniter 4 podrían ser menores.

¿Cuál es la mejor opción para CodeIgniter 4 ?

Considerando que se usara CodeIgniter 4, tanto MariaDB como PostgreSQL son excelentes opciones.

  • Si buscas simplicidad, familiaridad (si vienes de MySQL), buen rendimiento para aplicaciones web típicas y una configuración sencilla con CodeIgniter 4, MariaDB es una opción muy sólida y popular.
  • Si anticipas que tu aplicación podría necesitar características más avanzadas en el futuro, valoras la integridad de los datos, o quieres tener la flexibilidad de usar extensiones potentes como PostGIS, PostgreSQL es una opción fantástica y cada vez más popular en la comunidad PHP.

Mi recomendación general para CodeIgniter 4 sería:

  • Si no tienes necesidades muy específicas y buscas una solución probada y sencilla, elige MariaDB. Es muy probable que cumpla con todos tus requisitos para la mayoría de las aplicaciones web.
  • Si prevés que tu aplicación crecerá en complejidad o necesitará características más avanzadas, o si simplemente prefieres la potencia y las características de PostgreSQL, entonces esta sería una excelente elección. CodeIgniter 4 tiene un buen soporte para PostgreSQL.

SQL Server podría ser una buena opción si ya tienes una fuerte inversión en el ecosistema Microsoft y esa es la base de datos estándar en tu entorno. Sin embargo, para un proyecto nuevo con CodeIgniter 4, MariaDB o PostgreSQL suelen ser opciones más comunes y con una integración más directa en el mundo del desarrollo PHP.

En resumen, para CodeIgniter 4, te recomendaría inclinarte por MariaDB por su simplicidad y compatibilidad directa, o por PostgreSQL si anticipas necesidades más avanzadas en el futuro. Ambas son excelentes bases de datos y funcionarán muy bien con el framework. ¡La elección final dependerá de tus requisitos específicos!

CodeIgniter 4 Boilerplate Carta Porte

Entrada fija
Latest Stable Version
Total Downloads
Latest Unstable Version
License

   

image

CodeIgniter 4 Boilerplate Carta Porte

library to generate carta porte complement CFDI 4.0

CodeIgniter 4 Que es Carta Porte

La Carta Porte es un documento fiscal digital que se utiliza en México para amparar el traslado de bienes y mercancías dentro del territorio nacional. Su principal función es acreditar la legal posesión de la mercancía durante su transporte, así como proporcionar información detallada sobre el origen y destino de la misma.

Aquí hay algunos puntos clave sobre la Carta Porte:

  • Documento fiscal digital: Es un comprobante fiscal electrónico (CFDI) al que se le incorpora el complemento Carta Porte.
  • Ampara el traslado de mercancías: Acredita la legal estancia y/o tenencia de los bienes o mercancías durante su traslado en territorio nacional.
  • Identifica el origen y destino: Proporciona información detallada sobre el lugar de donde provienen las mercancías y a dónde se dirigen.
  • Combate el contrabando: Ayuda a prevenir el contrabando y la competencia desleal entre empresas transportistas.
  • Facilita la trazabilidad: Permite rastrear la mercancía durante todo su recorrido.
  • Contrato de transporte: Funciona como un contrato legal entre el remitente, el transportista y el destinatario, estableciendo los términos y condiciones del transporte.

En resumen, la Carta Porte es un documento esencial para el transporte de mercancías en México, ya que garantiza la legalidad, seguridad y trazabilidad de los bienes durante su traslado.

Requerimientos

  • PhpCfdi\SatCatalogos
  • julio101290/boilerplatelog
  • hermawan/codeigniter4-datatables

Instalación

Ejecutar Comandos para la instalación de la librería

composer require phpcfdi/sat-catalogos

composer require hermawan/codeigniter4-datatables

composer require julio101290/boilerplatelog

composer require julio101290/boilerplatecompanies

composer require julio101290/boilerplatestorages
composer require julio101290/boilerplatecartaporte

Ejecutar los comando de migración de las tablas y sembrado de los datos

php spark boilerplatecompanies:installcompaniescrud

php spark boilerplatelog:installlog

php spark boilerplatestorages:installstorages

php spark boilerplatecartaporte:installcartaporte

Creamos el Menú Ejemplo

image

Listo

image
image

Usage

You can find how it works with the read code routes, controller and views etc. Finnally… Happy Coding!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions are very welcome.

License

This package is free software distributed under the terms of the MIT license.

Deepin Screenshot en Zorin OS 16.2: Solución al problema de copiado al portapapeles

Entrada fija

Deepin Screenshot es una herramienta de captura de pantalla incluida en el sistema operativo Deepin, conocida por su facilidad de uso y sus múltiples opciones de edición y compartición. Sin embargo, algunos usuarios de Zorin OS 16.2 han reportado un problema al intentar copiar imágenes al portapapeles.

Este artículo te guiará a través de una solución efectiva para este inconveniente.

El problema

En Zorin OS 16.2, la función de copiar al portapapeles de Deepin Screenshot puede fallar, impidiendo que los usuarios peguen las capturas de pantalla en otras aplicaciones.

La solución

La solución propuesta implica desinstalar la versión actual de Deepin Screenshot e instalar una versión anterior que no presenta este problema.

Pasos a seguir:

  1. Desinstala la versión actual: Abre una terminal y ejecuta el siguiente comando:
sudo apt remove deepin-screenshot

Descarga la versión 4.0.11-1: Descarga los paquetes .deb de Deepin Screenshot versión 4.0.11-1.

https://launchpad.net/ubuntu/+source/deepin-screenshot/4.0.11-1/+build/14479350

Serian las siguientes que estan en la imagen
image

Puedes encontrarlos en los siguientes enlaces de Telegram:
https://t.me/CesarSystems/3381

https://t.me/CesarSystems/3382

  1. Instala la versión 4.0.11-1:
    • Abre una terminal y navega a la carpeta donde descargaste los archivos .deb.
    • Instala el paquete principal con el siguiente comando: Bash
    • sudo dpkg -i deepin-screenshot_4.0.11-1_amd64.deb
    • Instala el paquete de símbolos de depuración con el siguiente comando: Bash
    • sudo dpkg -i deepin-screenshot-dbgsym_4.0.11-1_amd64.ddeb
  2. Verifica la instalación: Abre Deepin Screenshot y realiza una captura de pantalla. Intenta copiar la imagen al portapapeles y pegarla en otra aplicación para confirmar que el problema se ha solucionado.

Conclusión

Siguiendo estos pasos, podrás solucionar el problema de copiado al portapapeles en Deepin Screenshot en Zorin OS 16.2 y disfrutar de todas las funcionalidades de esta útil herramienta.

Si tienes alguna pregunta o comentario, no dudes en dejarlo en la sección de comentarios.

¡Esperamos que esta guía te sea de gran ayuda!

CodeIgniter 4 Boilerplate Ubicaciones ( Carta Porte)

Entrada fija
Latest Stable Version
Total Downloads
Latest Unstable Version
License

   

image

CodeIgniter 4 Boilerplate Ubicaciones ( Carta Porte)

Biblioteca a ubicaciones, requerida para carta portuaria (Carta Porte) CFDI 4.0

Requerimientos

  • PhpCfdi\SatCatalogos
  • julio101290/boilerplatelog
  • hermawan/codeigniter4-datatables

Instalación

Ejecutar Comandos

composer require phpcfdi/sat-catalogos

composer require hermawan/codeigniter4-datatables
	
composer require julio101290/boilerplatelog

composer require julio101290/boilerplatecompanies

composer require julio101290/boilerplatestorages

composer require julio101290/boilerplatetypesmovement

composer require julio101290/boilerplatequotes

composer require julio101290/boilerplatecomprobanterd

composer require julio101290/boilerplatesells

composer require julio101290/boilerplatelocations

Ejecutar Comandos de migración de las tablas y sembrado de los datos

php spark boilerplatecompanies:installcompaniescrud

php spark boilerplatelog:installlog

php spark boilerplatestorages:installstorages

php spark boilerplatetypesmovement:installtypesmovement

php spark boilerplatequotes:installquotes

php spark boilerplatecomprobanterd:installcomprobanterd

php spark boilerplatequotes:installsells

php spark boilerplatelocations:installlocations

Ejemplo para crear el Menú

image

Listo

image

Usage

You can find how it works with the read code routes, controller and views etc. Finnally… Happy Coding!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions are very welcome.

License

This package is free software distributed under the terms of the MIT license.

CodeIgniter 4 Boilerplate Complemento De Pago

Entrada fija
Latest Stable Version
Total Downloads
Latest Unstable Version
License

   

image

CodeIgniter 4 Boilerplate Complemento de Pago

Libreria para generar el complemento de pago de las facturas pagadas en PPD

Requerimientos

  • PhpCfdi\SatCatalogos
  • julio101290/boilerplatelog
  • hermawan/codeigniter4-datatables
  • hermawan/boilerplatesells

Instalación

Ejecutar Comandos

composer require julio101290/boilerplatelog

composer require julio101290/boilerplatecompanies

composer require phpcfdi/sat-catalogos

composer require hermawan/codeigniter4-datatables

composer require julio101290/boilerplatestorages

composer require julio101290/boilerplatetypesmovement

composer require julio101290/boilerplatequotes

composer require julio101290/boilerplatecomprobanterd

composer require julio101290/boilerplatesells

composer require julio101290/boilerplatecomplementopago

Ejecutar comandos de migración y sembrado de base de datos

php spark boilerplatecompanies:installcompaniescrud

php spark boilerplatelog:installlog

php spark boilerplatestorages:installstorages

php spark boilerplatetypesmovement:installtypesmovement

php spark boilerplatequotes:installquotes

php spark boilerplatecomprobanterd:installcomprobanterd

php spark boilerplatequotes:installsells

php spark boilerplatecomplementopago:installcomplementopago

Creamos el Menu, Ejemplo

image

Listo ya podemos hacer complementos de pago

image
image

Usage

You can find how it works with the read code routes, controller and views etc. Finnally… Happy Coding!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions are very welcome.

License

This package is free software distributed under the terms of the MIT license.

CodeIgniter 4 Boilerplate Ventas

Entrada fija
Latest Stable Version
Total Downloads
Latest Unstable Version
License

   

CodeIgniter 4 Boilerplate Ventas

Biblioteca CodeIgniter4 Boilerplatesells para generar ventas con formato de impresión PDF, CFD4.0 Factura para enviar a los clientes por correo electrónico.

Requerimientos

  • PhpCfdi\SatCatalogos
  • julio101290/boilerplatelog
  • hermawan/codeigniter4-datatables

Instalación

Ejecutar Comandos

composer require phpcfdi/sat-catalogos

composer require hermawan/codeigniter4-datatables

composer require julio101290/boilerplatelog

composer require julio101290/boilerplatecompanies

composer require julio101290/boilerplatestorages

composer require julio101290/boilerplatetypesmovement

composer require julio101290/boilerplatequotes

composer require julio101290/boilerplatecomprobanterd

composer require julio101290/boilerplatesells

Ejecutar comandos de migracion y sembrado

php spark boilerplatecompanies:installcompaniescrud

php spark boilerplatelog:installlog

php spark boilerplatestorages:installstorages

php spark boilerplatetypesmovement:installtypesmovement

php spark boilerplatequotes:installquotes

php spark boilerplatecomprobanterd:installcomprobanterd

php spark boilerplatequotes:installsells

Creamos el menu, Ejemplo

image

Listo, vemos algunos ejemplo de funcionamiento

image
image
image
image
image
image
image

Usage

You can find how it works with the read code routes, controller and views etc. Finnally… Happy Coding!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions are very welcome.

License

This package is free software distributed under the terms of the MIT license.

CodeIgniter 4 Boilerplate CFDI Series Electrónicas

Entrada fija
Latest Stable Version
Total Downloads
Latest Unstable Version
License

   

image

CodeIgniter 4 Boilerplate CFDI Series Electrónicas

Biblioteca para la administración de series electrónicas CRUD CFDI para facturas, notas de crédito, pagos etc.

Requerimientos

  • julio101290/boilerplatelog
  • hermawan/codeigniter4-datatables

Instalación

Ejecutar Comandos

composer require phpcfdi/sat-catalogos

composer require hermawan/codeigniter4-datatables

composer require julio101290/boilerplatelog

composer require julio101290/boilerplatecompanies

composer require julio101290/boilerplatecfdielectronicseries

Ejecutar comandos para el sembrado y migración de las tablas

php spark boilerplatecompanies:installcompaniescrud

php spark boilerplatelog:installlog

php spark boilerplatecfdielectronicseries:installcfdielectronicseries

Creando el Menú, Ejemplo

image

Listo

image

Usage

You can find how it works with the read code routes, controller and views etc. Finnally… Happy Coding!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions are very welcome.

License

This package is free software distributed under the terms of the MIT license.

CodeIgniter 4 Boilerplate CFDI Descarga Masiva

Entrada fija
Latest Stable Version
Total Downloads
Latest Unstable Version
License

   

image

CodeIgniter 4 Boilerplate CFDI Descarga Masiva

Biblioteca para la Descarga Masiva de Facturas Electrónicas CFDI del SAT, solo requiere Certificado Fiel, Clave y Contraseña.

Requerimientos

  • PhpCfdi\SatCatalogos
  • julio101290/boilerplatelog
  • hermawan/codeigniter4-datatables
  • phpcfdi/cfditopdf
  • phpcfdi/cfdi-to-json”
  • phpcfdi/xml-cancelacion

Instalación

Ejecutar Comandos

composer require phpcfdi/sat-catalogos

composer require hermawan/codeigniter4-datatables

composer require julio101290/boilerplatelog

composer require julio101290/boilerplatecompanies

composer require julio101290/boilerplatestorages

composer require julio101290/boilerplatetypesmovement

composer require julio101290/boilerplatequotes

composer require julio101290/boilerplatecfdidescargamasiva

Ejecutar comando de migración y sembrado

php spark boilerplatecompanies:installcompaniescrud

php spark boilerplatelog:installlog

php spark boilerplatestorages:installstorages

php spark boilerplatetypesmovement:installtypesmovement

php spark boilerplatequotes:installquotes

Creando el menu, Ejemplo

image

Listo

image

Usage

You can find how it works with the read code routes, controller and views etc. Finnally… Happy Coding!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions are very welcome.

License

This package is free software distributed under the terms of the MIT license.

CodeIgniter 4 Boilerplate CFDI

Entrada fija
Latest Stable Version
Total Downloads
Latest Unstable Version
License

   

image

CodeIgniter 4 Boilerplate CFDI

Biblioteca para la administración de facturas electrónicas mexicanas CFDI, impresión, carga, descarga, etc.

Requerimientos

  • PhpCfdi\SatCatalogos
  • julio101290/boilerplatelog
  • hermawan/codeigniter4-datatables
  • phpcfdi/cfditopdf
  • phpcfdi/cfdi-to-json”
  • phpcfdi/xml-cancelacion

Instalación

Ejecutar comandos

composer require phpcfdi/sat-catalogos

composer require hermawan/codeigniter4-datatables

composer require julio101290/boilerplatelog

composer require julio101290/boilerplatecompanies

composer require julio101290/boilerplatestorages

composer require julio101290/boilerplatetypesmovement

composer require julio101290/boilerplatecfdi


Ejecutar comandos de migración y sembrado

php spark boilerplatecompanies:installcompaniescrud

php spark boilerplatelog:installlog

php spark boilerplatestorages:installstorages

php spark boilerplatetypesmovement:installtypesmovement

php spark boilerplatequotes:installquotes

php spark boilerplatecfdi:installcfdi

Creando el ménu, Ejemplo grafico

image

Listo

image
image
image
image

Usage

You can find how it works with the read code routes, controller and views etc. Finnally… Happy Coding!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions are very welcome.

License

This package is free software distributed under the terms of the MIT license.

CodeIgniter 4 Boilerplate Arqueo de Caja

Entrada fija
Latest Stable Version
Total Downloads
Latest Unstable Version
License

   

CodeIgniter 4 Boilerplate Arqueo de caja

CodeIgniter4 Boilerplate Arqueo de caja, este modulo servira para abrir y cerrar las cajas en una fecha determinada.

El funcionamiento es que al abrir la caja todas las ventas realizadas se ingresaran a ese arqueo, el cual va a generar un reporte de cuales ventas son a credito y cuales a contado.

Al registrar el arqueo de caja capturamos cuando hay en caja actualmente y cuanto hay en el reconteo de efectivo

Requerimientos

  • PhpCfdi\SatCatalogos
  • julio101290/boilerplatelog
  • hermawan/codeigniter4-datatables

Instalación

Ejecutar los siguientes comandos

composer require phpcfdi/sat-catalogos

composer require hermawan/codeigniter4-datatables

composer require julio101290/boilerplatelog

composer require julio101290/boilerplatecompanies

composer require julio101290/boilerplatestorages

composer require julio101290/boilerplatetypesmovement

composer require julio101290/boilerplatequotes

composer require julio101290/boilerplatecashtonnage

Ejecutar los comandos para la migración de tablas y sembrado de datos

php spark boilerplatecompanies:installcompaniescrud

php spark boilerplatelog:installlog

php spark boilerplatestorages:installstorages

php spark boilerplatetypesmovement:installtypesmovement

php spark boilerplatequotes:installquotes

php spark boilerplatecashtonnage:installcashtonnage

Creamos el menú, Como se ve en la imagen

image

Listo

image
image
image

Usage

You can find how it works with the read code routes, controller and views etc. Finnally… Happy Coding!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions are very welcome.

License

This package is free software distributed under the terms of the MIT license.

CodeIgniter 4 Boilerplate Catalogo de Vehiculos

Entrada fija
Latest Stable Version
Total Downloads
Latest Unstable Version
License

   

CodeIgniter 4 Boilerplate Catalogo de Vehiculos

CodeIgniter4 Boilerplatevehicles CRUD MVC tipo captura Vehículo y vehículos para facturas y Carta Mexicana Porte y módulo de taller

Requerimientos

  • PhpCfdi\SatCatalogos
  • julio101290/boilerplatelog
  • hermawan/codeigniter4-datatables

Instalación

Ejecutar Comandos

composer require phpcfdi/sat-catalogos

composer require hermawan/codeigniter4-datatables

composer require julio101290/boilerplatelog

composer require julio101290/boilerplatecompanies

composer require julio101290/boilerplatestorages

composer require julio101290/boilerplatetypesmovement

composer require julio101290/boilerplatevehicles

Ejecutar comandos para la migración y sembrado

php spark boilerplatecompanies:installcompaniescrud

php spark boilerplatelog:installlog

php spark boilerplatestorages:installstorages

php spark boilerplatetypesmovement:installtypesmovement

php spark boilerplatevehicles:installvehicles

Creamos el menú para el tipo de vehiculo, Ejemplo

image

Creamos el menú para el vehiculo, ejemplo

image

Listo

image
image

Usage

You can find how it works with the read code routes, controller and views etc. Finnally… Happy Coding!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions are very welcome.

License

This package is free software distributed under the terms of the MIT license.

CodeIgniter4 BoilerplatecomprobanteRD CRUD Para el Control De comprobantes de Republica Dominicana

Entrada fija
Latest Stable Version
Total Downloads
Latest Unstable Version
License

   

CRUD Para el Control De comprobantes de Republica Dominicana

CodeIgniter4 Boilerplatecomprobanterd CRUD MVC tipo de captura comprobante para facturas RD

Requerimientosw

  • PhpCfdi\SatCatalogos
  • julio101290/boilerplatelog
  • hermawan/codeigniter4-datatables

Instalación

Ejecutar Comandos

composer require phpcfdi/sat-catalogos

composer require hermawan/codeigniter4-datatables

composer require julio101290/boilerplatelog

composer require julio101290/boilerplatecompanies

composer require julio101290/boilerplatestorages

composer require julio101290/boilerplatetypesmovement

composer require julio101290/boilerplatecomprobanterd

Ejecutar comandos de migración y sembrado

php spark boilerplatecompanies:installcompaniescrud

php spark boilerplatelog:installlog

php spark boilerplatestorages:installstorages

php spark boilerplatetypesmovement:installtypesmovement

php spark boilerplatecomprobanterd:installcomprobanterd

Creamos el menú, Ejemplo

image

Listo

image
image

Usage

You can find how it works with the read code routes, controller and views etc. Finnally… Happy Coding!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions are very welcome.

License

This package is free software distributed under the terms of the MIT license.

CodeIgniter 4 Boilerplate Cotizaciones

Entrada fija
Latest Stable Version
Total Downloads
Latest Unstable Version
License

   

image

CodeIgniter 4 Boilerplate Cotizaciones

Biblioteca CodeIgniter4 Boilerplatequotes para generar cotizaciones con formato de impresión PDF para enviar a los clientes

Requerimientos

  • PhpCfdi\SatCatalogos
  • julio101290/boilerplatelog
  • hermawan/codeigniter4-datatables

Instalación

Ejecutar Comandos para integrar librerias al proyecto

composer require phpcfdi/sat-catalogos

composer require hermawan/codeigniter4-datatables

composer require julio101290/boilerplatelog

composer require julio101290/boilerplatecompanies

composer require julio101290/boilerplatestorages

composer require julio101290/boilerplatetypesmovement

Ejecutar comandos de migración y sembrado

php spark boilerplatecompanies:installcompaniescrud

php spark boilerplatelog:installlog

php spark boilerplatestorages:installstorages

php spark boilerplatetypesmovement:installtypesmovement

Creamos el menú, Ejemplo

image

Listo

image
image
image

Usage

You can find how it works with the read code routes, controller and views etc. Finnally… Happy Coding!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions are very welcome.

License

This package is free software distributed under the terms of the MIT license.

CodeIgniter 4 Boilerplate Inventory

Entrada fija
Latest Stable Version
Total Downloads
Latest Unstable Version
License

   

CodeIgniter 4 Boilerplate Inventory

CodeIgniter4 Boilerplateinventory Create entries, exits and inventory transfer

Requirements

  • PhpCfdi\SatCatalogos
  • julio101290/boilerplatelog
  • hermawan/codeigniter4-datatables

Installation

Run commands

composer require phpcfdi/sat-catalogos

composer require hermawan/codeigniter4-datatables

composer require julio101290/boilerplatelog

composer require julio101290/boilerplatecompanies

composer require julio101290/boilerplatestorages

composer require julio101290/boilerplatetypesmovement

composer require julio101290/boilerplateinventory

Run command for migration and seeder

php spark boilerplatecompanies:installcompaniescrud

php spark boilerplatelog:installlog

php spark boilerplatestorages:installstorages

php spark boilerplatetypesmovement:installtypesmovement

boilerplateinventory:installinventory

Make the Menu, Example

image
image

Ready

image
image

Usage

You can find how it works with the read code routes, controller and views etc. Finnally… Happy Coding!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions are very welcome.

License

This package is free software distributed under the terms of the MIT license.

CodeIgniter 4 Boilerplate Catalogo de proveedores

Entrada fija
Latest Stable Version
Total Downloads
Latest Unstable Version
License

   

CodeIgniter 4 Boilerplate Proveedores

CodeIgniter4 Boilerplatesuppliers CRUD MVC para captura de proveedores, con campos como empresa, nombre, apellido y campos para CDFI 4.0

Requerimientos

  • PhpCfdi\SatCatalogos
  • julio101290/boilerplatelog
  • hermawan/codeigniter4-datatables

Instalación

Ejecutar Comandos

composer require phpcfdi/sat-catalogos

composer require hermawan/codeigniter4-datatables

	composer require julio101290/boilerplatelog

composer require julio101290/boilerplatecompanies

composer require julio101290/boilerplatesuppliers

Ejecutar comandos de migración y sembrado

php spark boilerplatecompanies:installcompaniescrud

php spark boilerplatelog:installlog

php spark boilerplatestorages:installstorages

php spark boilerplatesuppliers:installsuppliers

Creando el menú, Ejemplo

image

Listo

image

Usage

You can find how it works with the read code routes, controller and views etc. Finnally… Happy Coding!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions are very welcome.

License

This package is free software distributed under the terms of the MIT license.

CodeIgniter 4 Boilerplate Tipos de Movimiento de inventario

Entrada fija

CodeIgniter 4 Boilerplate Tipos de inventario

CodeIgniter4 Boilerplatetypesmovement CRUD MVCfor the types of movement inventory, with fields as companye, description, type Input/Output, and it’s transfer

Requerimientos

  • PhpCfdi\SatCatalogos
  • julio101290/boilerplatelog
  • hermawan/codeigniter4-datatables

Instalación

Ejecutar comandos

composer require phpcfdi/sat-catalogos

composer require hermawan/codeigniter4-datatables

composer require julio101290/boilerplatelog

composer require julio101290/boilerplatecompanies

composer require julio101290/boilerplatestorages

composer require julio101290/boilerplatetypesmovement

Ejecutar comandos de migración y sembrado

php spark boilerplatecompanies:installcompaniescrud

php spark boilerplatelog:installlog

php spark boilerplatestorages:installstorages

php spark boilerplatetypesmovement:installtypesmovement

Crea el menu, ejemplo

image

Listo

image

Usage

You can find how it works with the read code routes, controller and views etc. Finnally… Happy Coding!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions are very welcome.

License

This package is free software distributed under the terms of the MIT license.

CodeIgniter 4 Boilerplate Almacenes

Entrada fija
Latest Stable Version
Total Downloads
Latest Unstable Version
License

   

CodeIgniter 4 Boilerplate Almacenes

CodeIgniter4 Boilerplatecompanies CRUD MVC contiene almacenamientos de captura para inventario, con los campos Compañía, Código, Nombre, Operación inicial, Tipo, sucursal, etc.

Requerimientos

  • PhpCfdi\SatCatalogos
  • julio101290/boilerplatelog
  • hermawan/codeigniter4-datatables

Instalación

Ejecutar Comandos

composer require phpcfdi/sat-catalogos

composer require hermawan/codeigniter4-datatables

composer require julio101290/boilerplatelog

composer require julio101290/boilerplatecompanies

composer require julio101290/boilerplatestorages

Ejecutar Comandos para los archivos de migración y sembrado

php spark boilerplatecompanies:installcompaniescrud

php spark boilerplatelog:installlog

php spark boilerplatestorages:installstorages

Creando el Menu

image

Listo

image
image

Usage

You can find how it works with the read code routes, controller and views etc. Finnally… Happy Coding!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions are very welcome.

License

This package is free software distributed under the terms of the MIT license.

Guía de Instalación de Boilerplate Productos en CodeIgniter 4

Entrada fija
Latest Stable Version
Total Downloads
Latest Unstable Version
License

   

CodeIgniter 4 Boilerplate Catalogo de Productos CFDI V4.0

CodeIgniter4 Boilerplateproducts CRUD MVC contiene categoría de captura y producto CRUD por empresa, contiene nombre, inventario de administrador, facturas de campos SAT

Requerimientos

  • PhpCfdi\SatCatalogos
  • julio101290/boilerplatelog
  • hermawan/codeigniter4-datatables
  • julio101290/boilerplatecompanies
  • julio101290/boilerplatebranchoffice

Intalación

Ejecutar Comandos

composer require phpcfdi/sat-catalogos

composer require hermawan/codeigniter4-datatables

composer require julio101290/boilerplatelog

composer require julio101290/boilerplatecompanies

composer require julio101290/boilerplatebranchoffice

composer require julio101290/boilerplateproducts

Ejecutar Comandos de Migración y Sembrado

php spark boilerplatecompanies:installcompaniescrud

php spark boilerplatelog:installlog

php spark boilerplatebranchoffice:installbranchoffice

php spark boilerplateproducts:installproducts

BaseController.php Config

Agrega SAT Catalogos Factory y usa variables globales desde la conexión DNS con SQLite

como se ve en la parte inferior

 <?php

namespace App\Controllers;

use CodeIgniter\Controller;
use CodeIgniter\HTTP\CLIRequest;
use CodeIgniter\HTTP\IncomingRequest;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;

//ADD
use PhpCfdi\SatCatalogos\Factory;

/**
 * Class BaseController
 *
 * BaseController provides a convenient place for loading components
 * and performing functions that are needed by all your controllers.
 * Extend this class in any new controllers:
 *     class Home extends BaseController
 *
 * For security be sure to declare any new methods as protected or private.
 */
abstract class BaseController extends Controller
{
    /**
     * Instance of the main Request object.
     *
     * @var CLIRequest|IncomingRequest
     */
    protected $request;

    /**
     * An array of helpers to be loaded automatically upon
     * class instantiation. These helpers will be available
     * to all other controllers that extend BaseController.
     *
     * @var array
     */
    protected $helpers = [];
    public $catalogosSAT;
    public $unidadesSAT;
    /**
     * Be sure to declare properties for any property fetch you initialized.
     * The creation of dynamic property is deprecated in PHP 8.2.
     */
    // protected $session;

    /**
     * Constructor.
     */
    public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
    {
        // Do Not Edit This Line
        parent::initController($request, $response, $logger);

        // Preload any models, libraries, etc, here.

        // E.g.: $this->session = \Config\Services::session();
        
        date_default_timezone_set("America/Mazatlan");

	//ADD
        $dsn = "sqlite:".ROOTPATH."writable/database/catalogossat.db";
        $factory = new Factory();
        $satCatalogos = $factory->catalogosFromDsn($dsn);
        $this->catalogosSAT = $satCatalogos;
        
       
       
    }
}

Crear carpeta y descargar Catálogos SAT de Base de Datos

Crear el menú de categorias

image

Crear el menú de Productos

image

Listo

image
image
image

Usage

You can find how it works with the read code routes, controller and views etc. Finnally… Happy Coding!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions are very welcome.

License

This package is free software distributed under the terms of the MIT license.

CodeIgniter 4: Herramienta de Respaldo para Bases de Datos

Entrada fija
Latest Stable Version
Total Downloads
Latest Unstable Version
License

CodeIgniter 4 Boilerplate Backup

Esta biblioteca es una extensión del texto estándar de CodeIgniter4, diseñada específicamente para facilitar la interacción con bases de datos a través de un enfoque intuitivo y eficiente. Con una interfaz sencilla de base de datos de copias de seguridad para MariaDB/MySQL, permite a los desarrolladores gestionar respaldos de manera rápida y segura, eliminando la complejidad que a menudo acompaña a estos procesos. Además, cuenta con diversas funcionalidades adicionales, como la programación de tareas automáticas y la restauración fácil de datos, lo que la convierte en una herramienta esencial para aquellos que buscan optimizar el manejo de sus bases de datos en aplicaciones web.

Instalación

Ejecutar el siguiente comando

composer require julio101290/boilerplatbackup

Ejecutar el siguiente comando para crear las tablas y sembrar los datos de los permisos

php spark boilerplatebackup:installbackup

Crear el menú tal cual se ve en la imagen

Listo

Uso

Puede descubrir cómo funciona con las rutas de lectura de código, el controlador y las vistas, etc. Finalmente… ¡Feliz codificación!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contribuciones

Las contribuciones son muy bienvenidas.

License

This package is free software distributed under the terms of the MIT license.

Instalación y Uso de Boilerplate Settings en CodeIgniter 4

Entrada fija

CodeIgniter 4 Boilerplate Settings

Esta biblioteca es una extensión para configuraciones globales de plantilla Boilerplate. Puede guardar el nombre de la compañía, el número de teléfono, el correo electrónico y cambiar el idioma en toda la aplicación CodeIgniter 4.

Instalación

Ejecutar comando

composer require julio101290/boilerplatesettings

Ejecutar el comando para la migración y sembrado

php spark boilerplatesettings:installsettings

Creamos el menu

image

Listo al final queda asi

image

Usage

You can find how it works with the read code routes, controller and views etc. Finnally… Happy Coding!

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions are very welcome.

License

This package is free software distributed under the terms of the MIT license.

Crear Funciones LPAD y RPAD en SQL Server 2012

Entrada fija

Aunque SQL Server 2012 no cuenta con las funciones LPAD y RPAD de forma nativa, podemos crear funciones personalizadas que simulen su comportamiento.

Funciones personalizadas para LPAD y RPAD en SQL Server 2012:

SQL

CREATE FUNCTION dbo.LPAD (@string VARCHAR(MAX), @length INT, @pad_char CHAR(1))
RETURNS VARCHAR(MAX)
AS
BEGIN
    WHILE LEN(@string) < @length
        SET @string = @pad_char + @string;
    RETURN SUBSTRING(@string, 1, @length);
END;

CREATE FUNCTION dbo.RPAD (@string VARCHAR(MAX), @length INT, @pad_char CHAR(1))
RETURNS VARCHAR(MAX)
AS
BEGIN
    WHILE LEN(@string) < @length
        SET @string = @string + @pad_char;
    RETURN SUBSTRING(@string, 1, @length);
END;

Usa el código con precaución.

Explicación:

  • dbo.LPAD:
    • Recibe una cadena, una longitud deseada y un carácter de relleno.
    • Mientras la longitud de la cadena sea menor a la longitud deseada, agrega el carácter de relleno al inicio de la cadena.
    • Finalmente, devuelve un substring de la cadena resultante con la longitud especificada.
  • dbo.RPAD:
    • Funciona de manera similar a LPAD, pero agrega el carácter de relleno al final de la cadena.

Ejemplo de uso:

SQL

SELECT dbo.LPAD('hola', 10, '*') AS resultado_lpad,
       dbo.RPAD('mundo', 10, '-') AS resultado_rpad;

Usa el código con precaución.

Resultado:

resultado_lpadresultado_rpad
******holamundo——-

Exportar a Hojas de cálculo

Consideraciones:

  • Esquema: Asegúrate de reemplazar dbo con el esquema correcto en tu base de datos.
  • Tipos de datos: Estas funciones están diseñadas para cadenas de caracteres (VARCHAR). Puedes adaptarlas para otros tipos de datos si es necesario.
  • Rendimiento: Para un gran volumen de datos, considera crear índices en las columnas relevantes para mejorar el rendimiento de las consultas.
  • Funciones nativas: Si estás utilizando una versión más reciente de SQL Server, es posible que ya cuentes con las funciones LPAD y RPAD de forma nativa. Consulta la documentación de tu versión específica.

Ventajas de crear funciones personalizadas:

  • Flexibilidad: Puedes personalizar las funciones para adaptarse a tus necesidades específicas.
  • Reutilización: Una vez creadas, puedes utilizar estas funciones en múltiples consultas.
  • Legibilidad: El código es más fácil de entender y mantener.

Con estas funciones personalizadas, podrás realizar operaciones de relleno de cadenas en SQL Server 2012 de manera similar a como lo harías con las funciones LPAD y RPAD en otras bases de datos.

OFERTAS MERCADO PAGO

¡Hola! 👋
Te regalo $ 100 de descuento para que uses en Mercado Pago por primera vez.
Aprovéchalo para:
● Comprar en Mercado Libre
● Pagar con Debit Mastercard®
● Recargar tu celular
● Pagar tus servicios
¡El descuento aplica para un pago mínimo de $ 200 y es válido hasta 7 días! 🤑
Descarga la app para activar tu descuento:
https://mpago.li/1C1TreU

OFERTAS CAFFENIO

Quiero regalarte $30 para que disfrutes de una bebida en CAFFENIO. Para aceptarlos, regístrate en https://recomendados.caffenio.com/ncFd1Tuwta

Instalador Completo: Inno Setup + MariaDB 11.5

Entrada fija

Subscribe to continue reading

Subscribe to get access to the rest of this post and other subscriber-only content.

Página 1 de 141

Creado con WordPress & Tema de Anders Norén