Hola Mundo!

Mi nombre es Cesar y actualmente me dedico al análisis y desarrollo de aplicaciones en plataformas Web. esto ya desde el el 2006 a la fecha… en este tiempo he tenido que aprender varios lenguajes de código para desarrollar (y en muchos casos parchar o modificar) aplicaciones para diversos clientes y empresas.

Había iniciado este sitio como un repositorio de código personal… pero ha estado agarrando vuelo, por lo que estoy pensando en potenciarlo más, ordenando mejor el contenido y publicando todas las paltas que vaya encontrando, la idea es principalmente compartir la buena información con todos aquellos que les gusta teclear como campeones.

Clase simple para convertir String a Fechas

Clase simple que valida la entrada de la cadena con un formato de fecha, si cumple con los formatos esperados, entonces crear el objeto LocalDate, de lo contrario retorna un nulo

Este es un ejemplo simple del uso de expresiones regulares para validar la forma de la cadena de entrada antes de ejecutar la conversión de la información, lo cual da un primer manejo simple de la información al momento de evaluar el dato a convertir, aunque regexp no evalúa la validez de la fecha (por ejemplo si es 32 de enero lo toma como verdadero) evalúa realmente que la forma de la cadena sea correcta.


import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
import java.util.regex.Pattern;

/**
 * Simple class to handle the date objects and
 * parse from string to LocalDate
 */
public final class DateUtil {

    /**
     * Parse a String to DateLocal object in several formats
     * @param inputDate String with in date shape
     * @return LocalDate from the input string, null if is not valid
     */
    public static LocalDate parseFromString (String inputDate) {

        DateTimeFormatter standardFormat;

        LocalDate parsedStringDate = null;

        // Validate date format d/MMM/yyyy ex. 24/Apr/2021
        if (Pattern.compile("^[0-9]{2}\\/(\\w)+\\/[0-9]{4}$").matcher(inputDate).matches()) {
            standardFormat = DateTimeFormatter.ofPattern("d/MMM/yyyy", Locale.ENGLISH);
            parsedStringDate = LocalDate.parse(inputDate, standardFormat);
        }

        // Validate date format d-MMM-yy ex. 24-Apr-21
        if (Pattern.compile("^[0-9]{2}\\-(\\w)+\\-[0-9]{2}$").matcher(inputDate).matches()) {
            standardFormat = DateTimeFormatter.ofPattern("d-MMM-yy", Locale.ENGLISH);
            parsedStringDate = LocalDate.parse(inputDate, standardFormat);
        }

        // Return date object or Null
        return parsedStringDate;
    }
    
}

Acá dejo un ejemplo de uso de esta clase


public class Main {

    public static void main(String[] args) {
        String stringDate = "24-Apr-21";
        System.out.println( DateUtil.parseFromString(stringDate).toString() );
    }

}

Conversión de cadena de texto a DATETIME

Consultas que convierten y manipulan un objeto DATETIME de SQL Server

Una de las funcionalidades que , aunque en ocasiones son un dolor de cabeza, son interesantes de conocer, ya que nos permiten manejar de mejor forma la información que tenemos en base de datos, ya sea para mostrar por pantalla o para la exportación de datos para ser consumidos por alguna persona, y siempre es bueno que lo entreguemos la información en el formato más natural posible, ya que la gran mayoría de los usuarios son personas comunes y corrientes y no seres sobrenaturales a-dimensionales como los informáticos que entendemos el glorioso valor de un TIMESTAMP. Es por ello que presento la siguiente funcionalidad que he ocupado por mucho tiempo y no había notado que no lo había compartido, es por ello que les presento una pequeña porción, pero muy útil, del uso de unas funcionalidades muy básicas en el manejo de fechas usando como fuente una fecha que viene en cadena de texto, esto porque en muchas ocasiones me he topado con el hecho que los datos vienen desde la fuente en String del tipo YYYYMMDD, pero, calma, que no panda el cúnico… porque hay solución.

Para la transformación del dato de texto a Datetime usé la función CAST de SqlServer y luego de transformarlo a fecha, le resté un mes con la función DATEADD y finalmente le di un formato como yo necesito. Sin más acá les dejo el código sencillo y espero que más que útil para más de alguno.

-- Obtención de un objeto DATETIME desde una cadena de texto

SELECT CAST('20200101' AS DATETIME)  AS fecha

-- resultado 
-- 01/01/2020 0:00:00


-- Resta de un mes a la fecha obtenida desde una cadena de texto

SELECT dateadd(month, -1, CAST('20200101' AS DATETIME))  AS fecha

-- resultado
-- 01/12/2019 0:00:00
                               
                               
-- Formatea una fecha a un patrón de fecha definido por el usuario
                               
SELECT format( dateadd(month, -1, CAST('20200101' AS DATETIME)), 'dd-MM-yyyy HH:mm:ss')  AS fecha

-- resultado
-- 01/12/2019 0:00:00

Dibujos domingueros

Acá unos dibujos que hice para pasar el domingo y soltar la mano, la verdad que de hace un rato no dibujaba y necesitaba retomar este hobbie que por lo general lo uso para reducir la ansiedad y el stress cuando estoy programando.. y necesito un poco de aire porque me he quedado estancado.

Crear tablas temporales SQLServer

Ejemplo para crear tablas temporales para la base de datos SQLServer (versión 2012) pero que tanbién sirve para versiones más actualizadas

En muchas ocasiones para resolver un problema en SQLServer en el cual debo extraer información desde una o varias tablas de la base de datos, necesito crear tablas temporales dentro de los procedimientos almacenados, esto para el cruce de información más ordenado y eficiente. a continuación les dejo un ejemplo de script sencillo que tiene por objetivo la creación de una tabla temporal que implementa unos indices que son necesarios para que el motor de base de datos busque al información dentro de esta tabla de forma rápida y eficiente.

CREATE TABLE #tabla_temporal (
	 id_tabla BIGINT
	,cd_columna_01 BIGINT
	,gl_columna_02
)
CREATE NONCLUSTERED INDEX idx_tabla_temporal ON #tabla_temporal ([id_tabla])


-- Otras formas de definir indices

-- Indice no ordenado
CREATE INDEX idx_tabla_temporal ON #tabla_temporal (id_tabla);

-- Indice a partir de 2 columnas
CREATE UNIQUE INDEX idx_tabla_temporal ON #tabla_temporal (id_tabla asc, cl_columna_01 asc)

Lista de meses del año en arreglo con PHP

Clase útil con método para el retorno de una lista Tupla de código-descripción del mes

Esta es una de esas cosas que son simples de hacer… pero si están en Internet ya creadas es mejor cortar y pegar, por esta razón he disponibilizado esta información para quien la necesite, es básicamente una clase UTIL con un método estático para su llamada directa que retorna una lista tupla con el código del mes y el nombre descriptivo, a continuación su implementación y llamada al método

/**
 *  Listado de meses en español
 */
 
class Util {

    /**
     * Lista de meses
     */
    public static function Meses () {
        return  [
                  '01' => 'Enero'
                 ,'02' => 'Febrero'
                 ,'03' => 'Marzo'
                 ,'04' => 'Abril'
                 ,'05' => 'Mayo'
                 ,'06' => 'Junio'
                 ,'07' => 'Julio'
                 ,'08' => 'Agosto'
                 ,'09' => 'Septiembre'
                 ,'10' => 'Octubre'
                 ,'11' => 'Noviembre'
                 ,'12' => 'Diciembre'
                ];
    }

}

// USO Util::Meses() retorna un arreglo de tuplas donde el id es el código y el valor en nombre

Implementación alternativa a Google Maps

Hace un tiempo atrás hice una implementación con Google Maps para la búsqueda de una dirección y despliegue de la dirección encontrada en un mapa, la verdad funcionaba como los dioses hasta antes de la limitante de Google a su api MAPS, la cual dejó una cuota de 1 render de mapa por día de forma gratuita y si se desea que la api continúe funcionando sólo hay que registrar la tarjeta de crédito y pagar, rogando que el número de usos del mapa sean los mínimos posibles y que el sitio no vaya a ser blanco de ataques que llamen constantemente la aplicación (DDoS).

La buena noticia es que existen alternativas que permiten la implementación del servicio de forma simple y lo mejor de todo gratuitas, hice uso del servicio de mapas https://leafletjs.com y otro servicio https://nominatim.org el cual traduce una dirección de texto a coordenadas, la implementación que realicé es bien sencilla y puede tener fallas pero es más que nada para tener una idea del como realizar la solución usando estos servicios, espero que les ayude

See the Pen API de direcciones by Cesar Gonzalez (@donpandix) on CodePen.