Herramientas Informaticas

Categoría: ¿Qué es un programa?

🔥 Grandes cambios y mejoras en el Boilerplate CodeIgniter: Multilenguaje, UX y Seguridad

Entrada fija


El desarrollo de aplicaciones modernas exige algo más que código funcional. Requiere una experiencia de usuario sólida, escalabilidad, seguridad y, sobre todo, una correcta internacionalización 🌍. En este artículo te explico todos los cambios y ajustes recientes aplicados al boilerplate, enfocados en mejorar la gestión de idiomas, autenticación, usabilidad y compatibilidad multiplataforma.


🚀 Internacionalización real: sistema multilenguaje mejorado

Uno de los cambios más importantes fue la optimización del sistema de traducciones. Ahora el boilerplate permite trabajar fácilmente con múltiples idiomas sin duplicar lógica ni romper vistas.

Se agregaron y ajustaron traducciones completas para:

  • 🇬🇧 Inglés
  • 🇩🇪 Alemán
  • 🇮🇹 Italiano
  • 🇮🇩 Indonesio
  • 🌍 Esperanto

Esto permite que el sistema pueda escalar internacionalmente sin modificar el core de la aplicación.

📌 Ejemplo de uso correcto del sistema de idiomas

<?= lang('Auth.showPassword') ?>

Este enfoque mantiene el código limpio, reutilizable y compatible con futuras extensiones.


🔐 Mostrar contraseña: mejora UX sin comprometer seguridad

Se agregó la opción de mostrar u ocultar la contraseña mediante un checkbox, algo esencial hoy en día para mejorar la experiencia del usuario, especialmente en dispositivos móviles 📱.

El texto del checkbox también es traducible:

<?= lang('Auth.showPassword') ?? 'Show password' ?>

De esta forma, si una traducción no existe, el sistema usa un fallback automáticamente.


🎨 Interfaz adaptable: PC, tablet y móvil

Todos los formularios fueron ajustados para verse correctamente en:

  • 🖥️ Computadoras de escritorio
  • 📱 Teléfonos móviles
  • 📲 Tablets

Se cuidaron márgenes, tamaños de fuente y alineación para garantizar una experiencia consistente sin importar el dispositivo.


🧠 Organización de idiomas: estructura clara y mantenible

Los archivos de idioma ahora están mejor organizados por contexto:

  • Global
  • Permisos
  • Roles
  • Menús
  • Usuarios
  • Autenticación

Esto facilita:

  • ✔️ Mantenimiento
  • ✔️ Escalabilidad
  • ✔️ Nuevos idiomas

🛠️ Compatibilidad total con WordPress (documentación)

Un punto clave fue documentar correctamente el código para que pueda mostrarse en WordPress sin que el CMS intente interpretar PHP.

Ejemplo correcto de código documentado:

<?= lang('Admin.Auth.showPassword') ?>

Esto permite compartir documentación técnica sin errores visuales ni de seguridad.


📈 SEO técnico y legibilidad

Se mejoraron:

  • 📌 Encabezados jerárquicos (H1, H2, H3)
  • 📌 Palabras clave relacionadas con CodeIgniter y boilerplates
  • 📌 Lectura natural para humanos 🤝 buscadores

Esto hace que el proyecto no solo sea bueno técnicamente, sino también visible en buscadores 🔍.


🔥 Conclusión

Estos cambios convierten al boilerplate en una base mucho más sólida, moderna y preparada para proyectos reales. No se trata solo de agregar funciones, sino de hacerlo bien: con orden, traducciones, UX y documentación clara.

Si estás construyendo un proyecto serio con CodeIgniter, estos ajustes marcan la diferencia entre un sistema básico y uno profesional 💼.

🚀 Seguiremos mejorando y optimizando el proyecto paso a paso.

🚀 Guía Definitiva: Openfire + MariaDB + Pidgin en Linux Mint 22

Entrada fija

🚀 Guía Maestra 2025: Cómo Instalar Openfire en Linux Mint 22 con MariaDB y Pidgin

Domina la mensajería instantánea privada con el servidor XMPP más potente del mundo. Guía completa de instalación, seguridad y despliegue.

Índice de Contenidos


🧐 Introducción: El poder de XMPP y Openfire

En el panorama tecnológico actual, la soberanía de los datos es una prioridad tanto para empresas como para usuarios individuales. Openfire surge como la solución definitiva. Es un servidor de colaboración en tiempo real (RTC) bajo licencia dual (Open Source y Comercial) que utiliza el protocolo XMPP (Jabber).

¿Por qué Linux Mint 22? Al estar basado en Ubuntu 24.04 LTS, Mint ofrece una estabilidad sin precedentes, ideal para servicios que deben estar activos las 24 horas del día. Combinar Openfire con MariaDB nos permite manejar no solo texto, sino transferencia de archivos pesados, grupos de chat (MUC) y cifrado de extremo a extremo. 🔒

📋 Requisitos del Sistema

Antes de comenzar la instalación de Openfire, asegúrate de que tu sistema cumple con lo siguiente:

  • Sistema Operativo: Linux Mint 22 (Wilma) o superior.
  • Memoria RAM: Mínimo 2GB (4GB recomendados para más de 100 usuarios).
  • Almacenamiento: 1GB para el software, más espacio adicional para el historial en MariaDB.
  • Privilegios: Acceso root o usuario en el grupo sudo.

☕ Paso 1: Instalación de Java (OpenJDK)

Openfire es una aplicación escrita en Java, por lo que este es el componente más crítico. Linux Mint 22 soporta perfectamente OpenJDK 17 o 21.

Ejecuta los siguientes comandos para actualizar los repositorios e instalar el entorno de ejecución:

sudo apt update
sudo apt install openjdk-17-jre -y

Verifica la instalación con: java -version. Deberías ver una salida que confirme la versión 17 de OpenJDK. Este paso es vital para evitar errores de ejecución en el binario de Openfire. ✨

🗄️ Paso 2: Configuración de MariaDB para Openfire

Usar la base de datos interna (HSQLDB) está bien para pruebas de 5 minutos, pero para un servidor real, MariaDB es obligatorio. Ofrece mejor rendimiento, backups más sencillos y mayor integridad de datos.

Instalar el servidor de base de datos

sudo apt install mariadb-server -y

Crear la base de datos y el usuario

Entra a la consola de MariaDB:

sudo mariadb

Una vez dentro, ejecuta estos comandos SQL para preparar el terreno:

CREATE DATABASE openfire CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'openfire_user'@'localhost' IDENTIFIED BY 'TuClaveSegura2025';
GRANT ALL PRIVILEGES ON openfire.* TO 'openfire_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Nota SEO: Usar utf8mb4 garantiza que tus usuarios puedan enviarse Emojis 🔥 sin que el servidor arroje errores de caracteres.

📥 Paso 3: Instalación de Openfire (El proceso principal)

Ahora procedemos a la instalación del servidor. En Linux Mint 22, lo más limpio es usar el paquete Debian oficial.

Descarga del paquete

Visita la web oficial de Ignite Realtime o usa wget para bajar la última versión estable (ejemplo versión 4.9.0):

wget https://www.igniterealtime.org/downloadServlet?filename=openfire/openfire_4.9.0_all.deb -O openfire.deb

Ejecución de la instalación

Instala el paquete usando dpkg. Esto configurará automáticamente los scripts de inicio en systemd:

sudo dpkg -i openfire.deb

Gestión del servicio

Asegúrate de que el servicio esté activo y habilitado para que inicie siempre que enciendas tu PC/Servidor:

sudo systemctl enable openfire
sudo systemctl start openfire
sudo systemctl status openfire

🌐 Paso 4: El Asistente de Configuración Web

Con el servicio corriendo, el resto de la magia ocurre en el navegador. Abre Firefox o Chrome y ve a:

http://localhost:9090

Pasos del Asistente:

  1. Idioma: Selecciona “Español”.
  2. Ajustes del Servidor: Define tu dominio (ej: chat.tuempresa.com). Si es local, usa la IP.
  3. Base de Datos: Elige “Conexión estándar a la base de datos”.
  4. Configuración JDBC:
    • Driver: MySQL.
    • URL: jdbc:mysql://localhost:3306/openfire?rewriteBatchedStatements=true&characterEncoding=UTF-8
    • Usuario: openfire_user
    • Contraseña: TuClaveSegura2025
  5. Perfil: Elige “Default” para guardar usuarios en la base de datos (a menos que uses LDAP).
  6. Admin: Define el correo y la contraseña para el usuario admin. No olvides esta clave, ¡es la llave maestra! 🗝️

🐦 Paso 5: Conectando el Cliente Pidgin

Ahora que el servidor está “vivo”, necesitamos que los usuarios hablen entre sí. Pidgin es el cliente ideal por su estabilidad en Linux Mint.

Instalación:

sudo apt install pidgin -y

Configuración de cuenta:

Abre Pidgin y añade una cuenta con estos datos:

  • Protocolo: XMPP.
  • Usuario: El nombre de usuario que creaste en el panel de Openfire.
  • Dominio: La IP del servidor o nombre de dominio configurado.
  • Pestaña Avanzado: Si estás en una red local, en “Servidor de conexión” coloca la IP interna del servidor.

¡Listo! Ahora puedes añadir amigos por su nombre de usuario y empezar a chatear. 😍

💎 ¿Por qué usar Openfire? Ventajas y Estrategia SEO

Implementar esta solución no es solo un capricho técnico, es una estrategia de eficiencia operativa:

  • Costos Cero: No pagas por usuario (como en Slack). Si tienes 1,000 empleados, el ahorro es masivo.
  • Cifrado SSL/TLS: Puedes forzar que todas las conexiones sean cifradas, evitando ataques de hombre en el medio (MITM). 🛡️
  • Plugins: Puedes instalar el plugin de Off-the-Record (OTR) Messaging para conversaciones que no dejan rastro ni siquiera en la base de datos.
  • Historial de Auditoría: Registra quién habló con quién y cuándo (esencial para cumplimiento legal).

🛠️ Mantenimiento y Seguridad Avanzada

Para que tu servidor Openfire en Linux Mint 22 sea indestructible, sigue estas recomendaciones de mantenimiento:

1. Seguridad del Firewall (UFW)

Solo abre los puertos necesarios. En tu terminal:

sudo ufw allow 5222/tcp  # Puerto para clientes
sudo ufw allow 9090/tcp  # Consola de administración
sudo ufw allow 7777/tcp  # Transferencia de archivos

2. Respaldos Automáticos

No confíes en la suerte. Crea un cron job para respaldar tu base de datos MariaDB diariamente:

mysqldump -u openfire_user -pTuClave openfire > /home/tuusuario/backups/openfire_$(date +%F).sql

3. Monitoreo de Logs

Si algo falla, la respuesta siempre está en los logs. Puedes verlos en tiempo real con:

tail -f /var/log/openfire/openfire.log

🚀 Conclusión: Tu Red, Tus Reglas

Instalar Openfire en Linux Mint 22 es un proyecto gratificante que eleva la seguridad de cualquier organización. Has pasado de depender de terceros a ser el administrador de tu propio nodo de comunicación mundial. ¡Felicidades! 🎉

¿Tienes dudas con los certificados SSL de Let’s Encrypt para Openfire? ¡Escríbeme en los comentarios y lo resolvemos!

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.

Como convertir Web hecha en PHP8 con FrameWork CodeIgniter 4 en una APP de Escritorio

code

git clone https://github.com/electron/electron-quick-start.git

en el archivo package.json lo dejamos de la siguiente manera

	{

	"build": {
	"appId": "com.electron.example",
	"compression": "maximum"
	},
	"name": "XML2PDF CFDI",

	"version": "2.0.0",

	"description": "Una pequeña aplicación para convertir el CFDI XML a PDF",

	"main": "main.js",

	"compression": "maximum",

	"scripts": {

	"***": null,
	"pro:windows": "electron-builder --win"

	},
	"repository": "https://github.com/electron/electron-quick-start",  

	"keywords": [
	"CFDI",
	"XML",
	"PDF",
	"tutorial"
	],
	"author": "Julio Cesar Leyva Rodriguez",
	"license": "CC0-1.0",
	"devDependencies": {
	"electron": "^21.2.3",
	"electron-builder": "^22.14.13",
	"electron-packager": "^17.1.1"
	},
	"dependencies": {
	"modclean": "^3.0.0-beta.1"
	}
	}

en main.js lo dejamos haci lo que hara es cargar la url y levantar el servicio de php

	// Modules to control application life and create native browser window

	const {app, BrowserWindow} = require('electron')

	const path = require('path')

	const exec = require('child_process').exec;

	  
	  

	function execute(command, callback) {

	exec(command, (error, stdout, stderr) => {

	callback(stdout);

	});

	};

	  
	  

	// call the function

	execute('Ejecutar.bat', (output) => {

	console.log(output);

	});

	  

	function createWindow () {

	// Create the browser window.

	const mainWindow = new BrowserWindow({

	width: 800,

	height: 600,

	webPreferences: {

	preload: path.join(__dirname, 'preload.js')

	}

	})

	  

	// and load the index.html of the app.

	mainWindow.setMenu(null)

	mainWindow.loadURL('http://localhost:8097')

	  

	// Open the DevTools.

	// mainWindow.webContents.openDevTools()

	}

	  

	// This method will be called when Electron has finished

	// initialization and is ready to create browser windows.

	// Some APIs can only be used after this event occurs.

	app.whenReady().then(() => {

	createWindow()

	  

	app.on('activate', function () {

	// On macOS it's common to re-create a window in the app when the

	// dock icon is clicked and there are no other windows open.

	if (BrowserWindow.getAllWindows().length === 0) createWindow()

	})

	})

	  

	// Quit when all windows are closed, except on macOS. There, it's common

	// for applications and their menu bar to stay active until the user quits

	// explicitly with Cmd + Q.

	app.on('window-all-closed', function () {

	if (process.platform !== 'darwin') app.quit()

	})

	  

	// In this file you can include the rest of your app's specific main process

	// code. You can also put them in separate files and require them here.

ahora posicionados en la carpeta \electron-quick-start> corremos el siguiente comando

npm install

Después creamos el paquete-ejecutable con el siguiente comando

electron-packager . -platform=win32 -arch=x64 ConversorXMLPDF

y nos genera los archivos necesarios
image

Creamos una carpeta en C: llamada aplicación o como ustedes quieran llamarle y copiamos el contenido, la carpeta del proyecto del codeigniter y los archivos ejecutable de PHP con los que trabajan, pueden copiar los del xampp y con el que debugean a través de netbeans
quedaría de la siguiente forma

image

ConvertidorXMLPDF seria el proyecto en codeigniter, php8 son los binarios necesarios para ejecutar código php, este lo pueden extraer de xampp y lo demas son los archivos de electronJS

Ahora en el archivo de configuración de código igniter en config/app.php en la base URL la dejamos asi

public $baseURL = '[http://localhost:8097/](http://localhost:8097/)';

El archivo Ejecutar.bat es el que va iniciar todo el codeigniter y dentro de el va el siguiente codigo

@echo off

php8\php.exe convertidorXMLPDF/spark serve --port 8097

El archivo Ejecutar.bat se ejecuta automáticamente al abrir el ejecutable

Y listo ahora solo queda hacer el instalador pero lo dejamos para otro manual.

1.2. ¿Qué es un programa?

Un programa es una secuencia de instrucciones que especifican cómo ejecutar una computación. La computación puede ser algo matemático, como solucionar un sistema de ecuaciones o determinar las raíces de un polinomio, pero también puede ser una computación simbólica, como buscar y reemplazar el texto de un documento o (aunque parezca raro) compilar un programa.

Las instrucciones (comandos, órdenes) tienen una apariencia diferente en lenguajes de programación diferentes, pero existen algunas funciones básicas que
se presentan en casi todo lenguaje:

entrada: Recibir datos del teclado, o un archivo u otro aparato.

salida: Mostrar datos en el monitor o enviar datos a un archivo u otro aparato.

matemáticas: Ejecutar operaciones básicas de matemáticas como la adición y la multiplicación.

operación condicional: Probar la veracidad de alguna condición y ejecutar una secuencia de instrucciones apropiada.
repetición: Ejecutar alguna acción repetidas veces, normalmente con alguna variación.

Lo crea o no, eso es todo. Todos los programas que existen, por complicados que sean, están formulados exclusivamente con tales instrucciones. Así, una manera de describir la programación es: El proceso de romper una tarea en tareas cada vez más pequeñas hasta que estas tareas sean suficientemente simples para ser ejecutadas con una de estas instrucciones simples.

Quizás esta descripción sea un poco ambigua. No se preocupe. Lo explicaremos con más detalle con el tema de los algoritmos.

Creado con WordPress & Tema de Anders Norén