Herramientas Informaticas

Autor: juliocesar20200413 Página 4 de 139

Desarrollador web apasionado y gusto por la buena musica

🧰 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 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.

📷 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.

Página 4 de 139

Creado con WordPress & Tema de Anders Norén