julio 2019

C – Obtener y formatear fecha actual

Fecha actual en ANSI C

En este post te voy a mostrar a obtener la fecha actual en C, además de formatearla (para extraer el año, mes, día, etcétera). Las funciones que vamos a ver son: time, localtime y strftime.

Con la función time obtenemos el tiempo (como entero) actual. Usando localtime obtenemos un struct de tipo tm, necesario para más tarde formatear la fecha con strftime.

Aunque suena complicado al inicio, la verdad es que es muy sencillo.

Continue reading…

PHP – Ordenar arreglo por fecha y hora

Ordenar array por datetime en PHP

En este post te mostraré cómo ordenar un arreglo que tiene fecha y hora, usando PHP y la función sort, usort y strcmp.

En el primer ejemplo vamos a ordenar un arreglo plano, que tiene únicamente fechas; en el segundo vamos a ver cómo ordenar un arreglo que tiene un datetime dentro de otro arreglo.

Continue reading…

Instalar servidor SSH sobre Termux en Android

Servidor SSH en Termux usando OpenSSH

En este post te mostraré cómo instalar un servidor SSH en Termux para que puedas iniciar sesión de forma remota.

La ventaja de esto es que podrás conectarte desde una PC u otro lugar en donde puedes conectar un teclado (ya que con el teclado del teléfono es complicado)

Vamos a usar el servidor openssh y veremos la forma de autenticar usando contraseña, o usando claves públicas y privadas.

Nota: recuerda configurar e instalar Termux, y no olvides ejecutar termux-setup-storage como en el tutorial que cito.

Instalar OpenSSH y herramientas

Comenzamos actualizando los repositorios, e instalando el paquete openssh:

pkg upgrade

pkg install openssh

En ambos casos, si pregunta, elegimos que sí escribiendo la letra Y.

También es necesario instalar net-tools y procps con:

pkg install net-tools (averiguar IP)

pkg install procps (matar procesos)

pkg install nano (para editar archivos)

Ajustes de OpenSSH

La configuración de OpenSSH está en $PREFIX/etc/ssh/sshd_config y podemos verla navegando con cd $PREFIX/etc/sshd y después usar cat sshd_config:

Autenticación con contraseña activa

El parámetro PasswordAuthentication está en yes, así que podemos ingresar con un usuario y contraseña en lugar de claves públicas y privadas.

Más adelante vamos a ver cómo cambiar este parámetro, ya que la autenticación con contraseña no es recomendada.

Iniciar y detener demonio SSH

Para iniciar el demonio, es decir, escuchar conexiones, se ejecuta:

sshd

Para matarlo o detenerlo, se usa:

pkill sshd

pkill viene con procps, por eso era necesario instalarlo.

Nota: se escucharán conexiones en el puerto 8022.

Conexión a servidor SSH en Android

Ya estamos escuchando conexiones SSH, pero todavía no sabemos nuestro usuario, contraseña e IP.

Averigua tu usuario escribiendo:

whoami

Ahora ponle una contraseña segura ejecutando:

passwd

Mostrar usuario con whoami y cambiar contraseña usando passwd

Finalmente mira cuál IP tienes, escribiendo:

ifconfig

(este comando viene con las net-tools)

Cuando tengas esos datos ya puedes conectarte desde otro lugar. Si usas linux en el terminal cliente ejecuta:

ssh TU_IP -p 8022

En caso de que uses Putty, rellena los campos y listo.

Cualquiera de los dos métodos, te llevará al proceso de autenticación, escribe el usuario y la contraseña y ya está.

Conexión a servidor SSH en Termux, usando Putty en Windows

Ya puedes administrar tu “servidor” de Linux sobre Android de manera remota.

Si muestra un aviso sobre “the server’s host key” haz click en

Nota: no se recomienda para nada usar autenticación con usuario y contraseña, lo mejor y más seguro es usar claves públicas y privadas.

Autenticación con clave pública y privada

Este método es el que se recomienda, pues agrega más seguridad y evita ataques de fuerza bruta.

Comenzamos preparando nuestro dispositivo creando el folder .ssh y el archivo authorized_keys; además de darles permiso.

Esto lo puedes hacer desde tu dispositivo o usando un cliente SSH (es decir, vamos a configurar las claves, pero por el momento, antes de configurarlas, podemos usar todavía la autenticación no segura)

Los comandos son:

El siguiente paso es generar un par de claves usando Putty como se ve en este tutorial detallado.

Si seguiste bien el tutorial de generación de claves públicas y privadas, tu conexión de Putty debe verse así (fíjate en la parte superior, dice Authenticating with public key):

Usar Putty y clave pública para una nueva sesión SSH en Android

Desactivar autenticación con contraseña

Ahora que ya tienes autenticación por clave pública y privada, desactiva (lo recomiendo altamente, por la seguridad) la autenticación por contraseña.

Navega hasta $PREFIX/etc/ssh/ y modifica el archivo sshd_config usando si quieres nano sshd_config; en donde dice PasswordAuthentication escribe no.

Guarda los cambios (CTRL + O, luego ENTER si usas nano) y reinicia el servidor SSH; esto hazlo desde la app de Termux pues si lo haces por SSH la conexión se romperá (obviamente)

Detén el servidor con pkil sshd y después vuelve a iniciarlo con sshd.

Así es como termina este tutorial; recuerda que tengo más material interesante sobre Termux, Linux y Android en mi blog.

Finalmente, dejo una referencia a la wiki de Termux.

Uso de Django Admin – El panel de control de Django

Panel de control de Django

En este post te mostraré cómo crear un usuario para entrar a Django admin, registrar un modelo y administrarlo desde el panel de control.

Una de las cosas que hacen de Django uno de los mejores frameworks (sin importar el lenguaje de otros frameworks) es el llamado Django Admin, que es un panel de control que permite administrar todos los modelos.

Es decir, el código ya está hecho por nosotros, los formularios también y lo mejor es que cada uno está dispuesto para cada tipo de dato.

Nota: esta es la parte 3 del tutorial de Django. Mira la parte 1, y la parte 2.

Continue reading…

Tutorial de Django: bases de datos, migraciones y modelos

Esta es la continuación de un post anterior sobre la creación de una app con Django, el framework de Python.

En la entrada anterior vimos una pequeña introducción a Django, las vistas, las URLs y todo lo necesario para comenzar.

Ahora veremos cómo:

  • Trabajar con bases de datos y migraciones en Django
  • Crear modelos que van a representar entidades dentro de las bases de datos
  • Generar migraciones y tablas de la base de datos usando Django

Recuerda que puedes ver la parte anterior aquí, y el código en GitHub aquí.

Continue reading…

App de notas con PHP – Ejemplo de código

En este post te voy a explicar y mostrar un ejemplo de código con PHP, MySQL, Twig y Bootstrap en donde se gestionan notas y usuarios.

La app de notas es totalmente responsiva y hecha completamente con PHP, usando MySQL para la persistencia de datos.

El correo es posible gracias a Twig para renderizar la vista, y PHPMailer para enviarlos.

  • Un usuario puede ver, crear, editar y eliminar notas
  • Cualquier usuario puede registrarse usando su correo electrónico
  • Los usuarios pueden cambiar su contraseña
  • Para que el usuario se registre, se debe verificar el correo electrónico
  • Los usuarios pueden resetear su contraseña olvidada
  • Un usuario no puede ver ni modificar las notas de otro usuario
  • Las notas guardadas deben guardar la fecha y hora de creación

Como lo ves, está muy enfocado a la gestión de usuarios.

Continue reading…

Mi caja de herramientas para PHP

Desde hace algunos meses he estado intentando encontrar el punto perfecto para desarrollar con PHP sin usar ningún framework como Laravel o CodeIgniter.

Como desarrolladores, queremos algo que sea sólido, fácil de usar y confiable; además de que tenga rica documentación y su uso sea entendible.

Hoy vengo a presentar mi caja de herramientas que uso al desarrollar con PHP, la cual podría ser llamada framework.

También quiero mostrar cómo es que se pueden juntar las herramientas para tener una base sólida de desarrollo con PHP.

Nota: puedes ver la plantilla en GitHub.

Continue reading…

Validación en PHP, usando Valitron

En este post te mostraré a validar los datos que el usuario ingresa en PHP ya sea a través de un formulario o de otras fuentes; usando la librería Valitron, que funciona muy bien para validar en PHP.

El repositorio de esta librería está aquí, y su uso es simple, además de que no requiere ningún framework o dependencia externa.

Un extra que tiene esta librería de validación de PHP es que permite mostrar los mensajes en idioma español.

Nota: el código que se expone aquí, es decir, la demostración, está en mi GitHub.

Continue reading…

PHP: diferencia entre array_merge y array_merge_recursive

En este post te voy a explicar la diferencia entre dos funciones de PHP que sirven para combinar arreglos: array_merge y array_merge_recursive.

En resumen, la diferencia es que array_merge combina arreglos y si encuentra claves repetidas toma el valor del último arreglo, y array_merge_recursive crea un array nuevo cuando encuentra claves repetidas.

Estoy seguro de que lo vas a entender mejor con un ejemplo que demuestra la diferencia entre array_merge_recursive y array_merge.

Continue reading…

Programación con Python y bases de datos

En este post te muestro cómo conectar Python 3 a varios motores de bases de datos, por ejemplo, MySQL / MariaDB, SQLite, SQL Server, PostgreSQL y SQLite 3.

Las bases de datos son un aspecto fundamental en los sistemas de información, pues permiten guardar y leer información de cualquier tipo.

Python provee la interfaz DB API 2.0 para conectar a todas las bases de datos usando la misma API o interfaz de programación de aplicaciones.

Python y bases de datos como MongoDB, MySQL, PostgreSQL, SQL Server, SQLite | ejemplos de código

Existen muchos motores de bases de datos que pueden ser consumidos con Python.

Continue reading…