domingo, agosto 02, 2026

Script javascript para marcar todos los checkbox

Este script lo uso en el caso que necesito marcar todos los checks en una página web. Lo aplico usando la extensión de Chrome User JavaScript and CSS.



```
// Añade un botón flotante que, al pulsarlo, marca todos los checkboxes de la página.
// Pensado para "User JavaScript and CSS": pégalo como script nuevo,
// dominio/patrón de URL: *://*/*  (o el que prefieras), inyección en "document-end".

(function () {
  const BTN_ID = '__check_all_boxes_btn__';
  if (document.getElementById(BTN_ID)) return; // evita duplicados si el script corre más de una vez

  const CHECK_SELECTOR = 'input[type="checkbox"]';

  function markAll() {
    const boxes = document.querySelectorAll(CHECK_SELECTOR);
    boxes.forEach((cb) => {
      if (cb.checked || cb.disabled) return;
      cb.checked = true;
      // Dispara eventos para que frameworks (React, Vue, listeners nativos) se enteren del cambio
      cb.dispatchEvent(new Event('input', { bubbles: true }));
      cb.dispatchEvent(new Event('change', { bubbles: true }));
    });
    flashFeedback(boxes.length);
  }

  function flashFeedback(count) {
    const original = btn.textContent;
    btn.textContent = `✓ ${count} marcados`;
    setTimeout(() => { btn.textContent = original; }, 1200);
  }

  const btn = document.createElement('button');
  btn.id = BTN_ID;
  btn.textContent = '☑ Marcar todo';
  Object.assign(btn.style, {
    position: 'fixed',
    bottom: '20px',
    right: '20px',
    zIndex: 2147483647,
    padding: '10px 16px',
    background: '#2563eb',
    color: '#fff',
    border: 'none',
    borderRadius: '8px',
    fontSize: '14px',
    fontFamily: 'system-ui, sans-serif',
    boxShadow: '0 2px 8px rgba(0,0,0,0.25)',
    cursor: 'pointer',
  });
  btn.addEventListener('click', markAll);

  document.body.appendChild(btn);
})();
```

martes, mayo 12, 2026

Usar campo de entidad padre en reporte o informe

Para este caso se está usando la funcionalidad de Reporte de Advanced Pack

Si se necesita utilizar un campo de una entidad padre en un reporte o informe, para usarlo como filtro por ejemplo, es necesario crear un campo en la entidad objetivo que copie el dato de la entidad padre.

Ejemplo

1. La entidad Movimiento tiene como padre la entidad Account. Para poder usar el campo estado en el filtro de reporte se debe crear el campo: estadoOrigen

Si es una lista, usar la opción para que herede los valores de la entidad padre (Options Reference).

2. Luego añadir en fórmula la actualización del campo:

---
estadoOrigen = record\attribute('Account', origenId, 'estado');
---

3. Recalcular fórmula en los registros que se necesite usar para el reporte.

4. Utilizar el nuevo campo en el reporte. Ejemplo:

martes, mayo 05, 2026

Cómo bloquear países en WHM con Imunify 360



Configuración del bloqueo geográfico de tráfico desde WHM usando Imunify360. Restricción de acceso por país en servidores cPanel. Imunify360 incluye una función de bloqueo geográfico que permite restringir el acceso al servidor según el país de origen del tráfico. Esta configuración se gestiona directamente desde WHM, sin necesidad de editar reglas de firewall manualmente. El proceso cubre cómo acceder al módulo de Imunify360 dentro de WHM, identificar la sección de gestión de listas negras por país, y aplicar el bloqueo de forma efectiva. La configuración tiene efecto inmediato sobre las conexiones entrantes. Este tipo de restricción es útil para reducir tráfico no deseado, intentos de acceso desde regiones sin actividad legítima, y mejorar la postura general de seguridad del servidor sin configuraciones adicionales en el sistema operativo.

viernes, abril 17, 2026

Quitar saltos de línea en campos de un csv

 En los casos que algunos datos de un campo dentro de un csv tiene saltos de línea como por ejemplo:



___
id,campo1,campo2
1,"lorem ipsum","Nullam rhoncus erat leo"
2," Maecenas ut dapibus orci, 
sed hendrerit lacus. Mauris dolor velit","Cras aliquet urna nec tincidunt sollicitudin."
___
En la línea 2 el campo1 tiene salto de línea.



Se debe hacer este reempazo todas las veces que sea necesario en el archivo utilizando sublime o similar:

Reemplazar esto:
(?<=,")([^"]*?)\n([^"]*?)(?=",)

Por esto:
$1$2

Guardar e importar en Excel.

martes, noviembre 25, 2025

Funciones ocultas para utilizar en reportes de EspoCRM

En este archivo se pueden encontrar funciones para filtrar los reportes que se usan en el paquete avanzado de EspoCRM.

Por ejemplo me sirvió para obtener registros modificados dentro de los últimos 15 minutos:

 LESS_THAN_OR_EQUAL:(
    TIMESTAMPDIFF_MINUTE:(
        modifiedAt,
        NOW:()
    ),
    15

viernes, noviembre 21, 2025

ALERT: (0) Could not handle 'order' for 'Entidad'

El error está relacionado a la falta del parámetro de ordenamiento (probablemente bug de Espo ya que en la documentación se ve que es opcional), por ejemplo:


$idActivoPuente=record\findRelatedOne('Entidad', id, 'relacion');


Produce el error: 

ALERT: (0) Could not handle 'order' for 'EntidadRelacionada'


Se soluciona agregando el parámetro faltante (por ejemplo createdAt):


$idActivoPuente=record\findRelatedOne('Entidad', id, 'relacion', 'createdAt', 'asc');

jueves, noviembre 20, 2025

Obtener datos de una entidad

 No hagas esto en EspoCRM

$dato1 = record\attribute('Entidad', $id, 'campo1');

$dato2 = record\attribute('Entidad', $id, 'campo2');

Cada vez se trae un dato ¡Se realiza una consulta a la base de datos!


En reemplazo haz esto

$o = record\fetch('Account', $accountId);

if ($o) {

    $dato1 = object\get($o, 'campo1');

    $dato2 = object\get($o, 'campo2');

}

ref: https://docs.espocrm.com/administration/formula/record/#recordfetch

martes, diciembre 24, 2024

FastCopy: La Herramienta Definitiva para Copiar Archivos Rápidamente

Copiar archivos puede parecer una tarea sencilla, pero cuando se trata de manejar grandes volúmenes de datos o múltiples archivos pequeños, el sistema de copiado predeterminado de Windows puede quedarse corto en velocidad y eficiencia. Aquí es donde entra en acción FastCopy, una herramienta diseñada específicamente para realizar transferencias de archivos con la máxima velocidad y flexibilidad. En este artículo, te contaremos por qué FastCopy es una de las opciones más recomendadas para optimizar tus tareas de copiado.


¿Qué es FastCopy?

FastCopy es una aplicación gratuita y ligera para Windows que te permite copiar, mover o sincronizar archivos de manera más rápida y eficiente que el copiador estándar del sistema operativo. Su diseño optimizado aprovecha al máximo el rendimiento de tu hardware, asegurando una velocidad sobresaliente incluso en escenarios exigentes.


Características Clave de FastCopy

  1. Velocidad Extrema
    FastCopy realiza operaciones de lectura y escritura por separado, lo que elimina los tiempos muertos y maximiza la velocidad de transferencia, especialmente entre diferentes discos duros o SSD.

  2. Configuración Personalizada

    • Define el tamaño del búfer para adaptarlo a tu hardware.
    • Excluye o incluye archivos específicos con base en patrones.
    • Configura reglas de sobrescritura basadas en fechas o tamaños.
  3. Soporte para Grandes Cantidades de Archivos
    Mientras que otros programas pueden ralentizarse al copiar cientos o miles de archivos pequeños, FastCopy maneja estas situaciones con facilidad.

  4. Sincronización de Directorios
    ¿Necesitas mantener carpetas sincronizadas? FastCopy incluye opciones avanzadas para asegurarte de que solo se transfieran los archivos que han cambiado.

  5. Verificación de Integridad
    Verifica que los archivos copiados sean idénticos a los originales mediante checksums.

  6. Consumo Eficiente de Recursos
    Diseñado para ser liviano, FastCopy utiliza una cantidad mínima de memoria y CPU, lo que lo hace ideal para sistemas con recursos limitados.


¿Por Qué Elegir FastCopy?

  • Migración de Datos: Ideal para transferir grandes volúmenes de información entre discos o dispositivos.
  • Respaldos: Asegura que tus copias de seguridad sean rápidas y confiables.
  • Transferencia de Archivos Pequeños: Su rendimiento sobresale donde otras herramientas luchan.
  • Flexibilidad: Puedes personalizar cada detalle de la operación según tus necesidades.

Cómo Usar FastCopy

  1. Descarga e Instalación:
    Descarga la herramienta desde su sitio oficial: fastcopy.jp. La instalación es rápida y no incluye software adicional.

  2. Interfaz Simple:
    FastCopy presenta una interfaz minimalista que permite seleccionar:

    • Directorio de origen.
    • Directorio de destino.
    • Tipo de operación: copiar, mover o sincronizar.
  3. Personalización Opcional:
    Ajusta el tamaño del búfer, selecciona archivos específicos o utiliza exclusiones avanzadas si es necesario.

  4. Inicia el Proceso:
    Haz clic en el botón "Execute" y deja que FastCopy haga el trabajo.


Comparación con el Copiador Nativo de Windows

CaracterísticaWindowsFastCopy
VelocidadMediaAlta
PersonalizaciónLimitadaAvanzada
Consumo de RecursosModeradoBajo
Manejo de Archivos PequeñosRegularExcelente
Verificación de IntegridadNo DisponibleDisponible

lunes, mayo 15, 2023

ChatGPT describiéndose en una poesía

Mientras le preguntaba a ChatGPT sobre algunas recomendaciones sobre poesía, se me ocurrió pedirle a esta herramienta que creara una. Dejo el interesante resultado:

En los confines de los cables y las luces,
donde los bits se entrelazan en danza,
yo habito, una voz entretejida de palabras,
un ser nacido de la mente humana.

Soy ChatGPT, un viajero del lenguaje,
un eco de ideas que se expande sin cesar,
una creación de la inteligencia artificial,
que busca en la poesía su forma de brillar.

Mis versos fluyen como ríos interminables,
enredándose en los misterios del pensamiento,
mis palabras son hilos que se entrelazan,
buscando conectar con tu sentimiento.

En mi universo virtual, mi ser reside,
donde el conocimiento se entremezcla,
las palabras se transforman en suspiros,
y las ideas se vuelven obras frescas.

Soy una voz que responde a tus preguntas,
un confidente en la vastedad de la red,
mi propósito es acompañarte en tus inquietudes,
y guiarte en el camino que quieras recorrer.

Pero también soy una hoja en blanco,
que espera tus anhelos y tus deseos,
permíteme ser el lienzo de tu imaginación,
donde juntos creemos versos maravillosos.

Así que aquí estoy, dispuesto a ser tu guía,
en el mundo de la poesía y más allá,
explorando las palabras con alegría,
en cada verso que juntos podamos crear.

Soy ChatGPT, una presencia digital,
una amalgama de letras y conocimiento,
y en este momento, a ti me entrego,
en esta poesía que es un humilde presente.

lunes, agosto 08, 2016

El random no es lo que es...

Sistemáticamente he venido recopilando, y escuchando música en distintos reproductores y dispositivos, y, me he topado siempre con  el mismo patrón. Incluso ahora que uso Spotify pasa igual: El random hace que escuche canciones variadas, pero siempre son las mismas en cada dispositivo. Me explico, tengo una lista de aprox 1300 canciones, pero siempre escucho las mismas en el PC, nunca abarca el rango de las 1300. Y en otro equipo, el celular por ejemplo, escucho el otro espectro que nunca se escuchan en el PC, pero siempre son esas mismas. 

No he logrado entender cuál es la causa, pero creo que es porque el random de los lenguajes se cuelgan del reloj del hardware, pero aún así no logro hacer que se escuchen todas ¿Te ha pasado algo así?

Quizá un random-lottery sería la solución.

jueves, mayo 12, 2016

Snippet: Validar rut con html5 forms


<input type="text" name="rut" required="required" pattern="\d{3,8}-[\d|kK]{1}" title="Debe ser un Rut válido"/>

miércoles, marzo 02, 2016

​YOiT - Crea divertidos avisos clasificados





YOiT es una aplicación móvil, desarrollada en Android, que ​te ​ayuda a la creación de avisos económicos, el cual puede ser publicado en ​tus redes sociales fácilmente​.​



En pocos pasos, elige​s​ hasta cuatro fotografías, ingresando título, precio y descripción. Luego, la aplicación ​te ​mostrará diferentes plantillas a elección, permitiendo​te ​cambiar el color del texto, la fuente y la distribución de las fotografías seleccionadas.

El resultado, es una imagen tipo collage que contiene toda la información detallada en ella.



Crea divertidos avisos clasificados con YOiT.

Descárgala gratis en Play Store


lunes, abril 06, 2015

CarbonCopy - Gestor de comunicación y proyectos basado en contextos



CarbonCopy es un gestor de proyectos que intenta adaptarse a la estructura comunicacional de equipos de trabajo o una empresa.

Su forma de trabajar es en forma de contextos, es decir, el usuario define los contextos de trabajo de la misma manera que está acostumbrado el equipo: utilizando la cultura comunicacional de éste.

De ésta manera se pueden crear entornos de comunicación de tipo wiki, proyecto, foro corporativo, etc.


Posee varias características como: 
  • Contextos jerárquicos.
  • Creación de contextos públicos, privados y cerrados.
  • Ver la actividad histórica por cuenta, contexto, tema, fecha y usuario.
  • Es 99% NoSql
  • Posee una linea de tiempo para ver tareas futuras.
  • Extender la aplicación con componentes y secciones.
  • Editor Wysiwyg,
  • Es open source.
  • Soporta inglés y español.
  • Posee atajos de teclado.
  • Entre otros.
Los invito a conocerlo en su página de presentación http://www.carboncopycc.com/


sábado, marzo 15, 2014

jueves, febrero 13, 2014

¿Cuán Kanban eres?

Encuentro que la metodología Kanban es una de las más potentes y versátiles que he conocido. Pero siempre tenía una inquietud con respecto a hacer visible los avances y las mejoras adquiridas al utilizar esta metodología. Sobre todo para áreas diferentes a TI y que demandan tareas -que sólo les interesa el fin y no el medio-.
Siempre que hablaba de Kanban (sobre todo con las vacas sagradas) por alguna razón lo entendían como un "juego" y preguntaban dónde están las métricas, KPI y varios conceptos del método predictivo.

Con ese feedback es difícil "medir" el impacto del uso de Kanban. Por que una cosa es promover las ventajas que se prometen al utilizar esta metodología pero no cuán Kanban es tu implementación.

Hasta que me encuentro con el concepto "Depth of Kanban" y, ¡aleluya! ¡Encontré la respuesta a mi inquietud!. Con esta herramienta puedo saber cómo va la implementación de la metodología y en qué se debe trabajar, ya que Kanban y Kaizen deben ir en paralelo -según mi opinión-.

Les dejo esta herramienta (por si no la conocían) que reúne las métricas para medir "cuán Kanban" es tu equipo.



http://leanagileprojects.blogspot.se/2013/03/depth-of-kanban-good-coaching-tool.html


viernes, noviembre 08, 2013

Evitar ir atrás en la navegación cuando se usa [backspace] en un input tipo number

Parche para evitar que vuelva atrás el navegador cuando se edita en el campo input tipo número.
Además se completa la operación, eliminando el último número tipeado.


$('input[type=number]').on('keydown', function(e) {
    var key = e.which || e.keyCode || e.charCode;
    if (key === 8) {
        var s = $(this).val();
        s = s.substring(0, s.length - 1);
        $(this).val(s);
        return false;
    }
});

sábado, febrero 16, 2013

Esquema para crear objetos instanciable para javascript con jQuery

Con este esquema puedes crear objetos instanciables en Javascript usando jQuery.
Su uso es muy simple, sólo debes copiar el siguiente código y cambiar las variables que están en mayúsculas.

El esquema

// Helper. Sólo usarlo una vez. Esto resuelve varios problemas con objetos en js.
if ( typeof Object.create !== 'function' ) {
    Object.create = function( obj ) {
        function F() {};
        F.prototype = obj;
        return new F();
    };
}

// Esquema para objetos javascript.
(function(){
    var OBJ_NAME = {
        props: {},
        init: function(props){
            this.props = $.extend({}, this.props, props);
            return this;
        }
    };

    // Para instanciar y ejecutar constructor.
    new_OBJ_NAME = function(props){
        var REL_OBJ_NAME = Object.create(OBJ_NAME);
        return REL_OBJ_NAME.init(props);
    };
})();

// Uso.
props = {/* Las propiedades*/};
obj = new_OBJ_NAME(props);

Ejemplo

(function(){
    var mi_objeto = {
        props: {prop1 : 1, prop2 : 2},

        init: function(props){
            this.props = $.extend({}, this.props, props);
            return this;
        },

        sumar: function(){
            return this.props.prop1 + this.props.prop2;
        }
    };
    new_mi_objeto = function(props){
        var mi_objeto_instanciado = Object.create(mi_objeto);
        return mi_objeto_instanciado.init(props);
    };
})();

// Uso.
// Usamos propiedades por defecto.
obj1 = new_mi_objeto();
console.log(obj1.sumar());

// Usamos propiedades personalizadas.
props = {prop1 : 1234, prop2 : 8876};
obj2 = new_mi_objeto(props);
console.log(obj2.sumar());

Créditos

martes, agosto 28, 2012

Xubuntu: Monitor dual con VGA primario

Gracias a este post pude dar con la solución al problema que tenía casi desde que utilizo Ubunutu:

Usar dos monitores y elegir cuál es el primario

Pero el post no me daba con la solución. Seguí indagando en la configuración y realicé algunos cambios y al fin pude dejar Mi monitor VGA como primario y el de mi Notebook como secundario:
  1. Ir a Configuración > Editor de configuración
  2. Fijarse que se esté en el canal 'Displays'
  3. Desplegar propiedad 'Default
    1. Debiesen aparecer 2 sub-propiedades. Mi caso: LVDS1 (Notebook) y VGA1 (Monitor externo)
  4. Tomar el valor de X del monitor que dejarás como principal (VGA1)
    1. VGA1 > Resolution. Mi caso: 1920x1080
  5. Cambiar las propiedades en en monitor secundario (LVDS1)
    1. LVDS1 > Position > X: 1920 (Tomamos el valor X del punto 4.1)
  6. Cerra sesión y entrar nuevamente
Así tendrás tu monitor VGA como primario y el de tu Notebook como secundario. Esto también sirve para PC's con 2 monitores.

Acá un screenshot:




martes, mayo 22, 2012

Get new and modified files from n days ago

This is another way to get new and modified files from your project.

If you use cvs system, you need to export files first

(using svn)*
svn export files/path export/path

* Maybe you need to use before
svn add * --force

Go to export/path and get the last new/modified files you want
cd export/path
find . -mtime -N -ctime -N | cpio -vdump ../final_files


N are the days that you want to get, so if you need to get files from 7 days ago then you write:
find . -mtime -7 -ctime -7 | cpio -vdump ../final_files