Publicado el

Buscador en excel con carga de imágenes (macro/VBA)

Buscador Excel con Imágenes

Hace poco un familiar me pidió ayuda para realizar una búsqueda en excel pero con la particularidad de mostrar una imagen relacionada con el resultado de la búsqueda. Lo que necesitaba hacer se lograba habilitando las macros y programando un poco en Visual Basic. Tenía mucho tiempo sin utilizar Visual Basic (desde el colegio xD), así que investigando un poco logré el objetivo.

A continuación les explico cómo lo solucioné en Excel 2007, haciendo un buscador simple de personas donde mostraremos la información encontrada y una imagen correspondiente a la nacionalidad de la persona encontrada, empecemos entonces.

Lo primero que deben hacer es habilitar la opción Programador de Excel, deben ver algo como se muestra en la imagen:

Excel Opción Programador

En caso contrario deben habilitarlo y dependerá de la versión de excel que tengan, pueden ver este enlace para habilitar la opción Click Aquí.

Si necesitaramos hacer un buscador de puro texto, podemos utilizar la función BuscarV; podemos ver su uso en el enlace Click Aquí.

En nuestro caso esta función BuscarV no es suficiente, pues necesitamos mostrar una imagen relacionada y para lograr esto debemos programar un poco. La idea es entonces detectar el cambio del contenido de una celda y de acuerdo al valor de dicha celda mostrar una imagen relacionada. Antes debemos tener una carpeta con las imágenes a cargar, nombradas con el atributo de búsqueda para relacionarlas implícitamente y poderlas cargar. En nuestro ejemplo esta carpeta de imágenes se llama banderas y nuestro atributo elegido fue el id, cómo se muestra en la imagen.

Directorio Ubicación Imágenes

Teniendo nuestras imágenes, debemos ahora insertar un control activex de imagen en donde se mostrará la imagen buscada. Para lograr esto nos vamos a la sección de controles, menú insertar y en la opción Imagen (control activex). En la imagen a continuación se puede observar:

Control Activex Imagen

Ahora debemos capturar el evento “change” (cambio) de la hoja de calculo, para reaccionar si afectan nuestra celda de búsqueda. Tenemos que abrir entonces el cuadro de edición de Visual Basic dando click a la opción de ver código en el menú controles del Programador. En la siguiente imagen se puede observar:

Abrir Manejador Código

Ahora insertamos el código a continuación en nuestra hoja, que en nuestro caso se llama Hoja1. El código insertado se encargará de manejar el evento, buscar la imagen según el id ingresado, y en caso que no la encuentre colocar una imagen comodín.

Private Sub Worksheet_Change(ByVal Target As Range)
    ' Variable para almacenar la ruta de la imagen
    Dim ImagenRuta As String
    
    ' Ruta de la imagen de acuerdo al id ingresado
    ImagenRuta = ThisWorkbook.Path & "\banderas\" & Range("D4").Text & ".ico"
    
    On Error Resume Next
    
    ' Se intenta cargar la imagen
    Image1.Picture = LoadPicture(ImagenRuta)
    
    ' Manejamos el error en caso que no se encuentre la imagen
    ' colocando una imagen comodin
    If Err Then
        ImagenRuta = ThisWorkbook.Path & "\banderas\logoPC.jpg"
        Image1.Picture = LoadPicture(ImagenRuta)
    End If

End Sub

Ya con este último paso guardamos y debemos ver nuestra imagen al buscar por un id en nuestro cuadro de búsqueda.

Resultado Final

Si quieren probar el ejemplo lo pueden descargar en el enlace Click Aquí.

Publicado el

Mis Comandos Gits

Mis Comandos Gits

En la actualidad tener el poder de un manejador de versiones es indispensable, nos aporta cierta libertad y control a la hora de desarrollar y mantener una aplicación. Por lo general casi todos los desarrollos tiene un manejador de versiones que controla y administra su código fuente.

Aunque he utilizado SVN y GIT, hoy en día el más utilizado sin duda alguna es GIT. Saber manejar GIT es una habilidad indispensable en el mundo del desarrollo de software.

En este post compartiré los comandos GIT que he utilizado en mi quehacer.

– Clonar un repositorio

$>git clone <repository> <directorio>

Por ejemplo:

$>git clone https://github.com/WordPress/WordPress.git UnaWeb

– Ver el estado actual del repositorio para el brach actual

$>git status

– Cambiar de brach

$>git checkout <branch>

Por ejemplo:

$>git checkout develop

– Agregar archivos para un commit

$>git add <archivo_o_directorio>

Por ejemplo:

$>git add hola.txt

En caso que queramos agregar todos los archivos modificados:

$>git add -A

– Crear un commit

git commit -m "<mensaje>"

– Subir un commit (o los commits agregados) al servidor

git push

– Actualizar el repositorio descargándose los últimos commits

git pull

– Ver las diferencias de un archivo dado

git diff <archivo>

– Crear un branch

git branch <nombre>

– Mezclar un branch

En caso que queramos mezclar el branch master con el branch develop, nos ubicamos en el branch master y realizamos la siguiente secuencia de comandos:

git checkout master

git merge develop

git push

En caso que queramos que se mantenga la línea del branch aún mezclado utilizamos los siguientes comandos:

git checkout master

git merge --no-ff develop

git push

Si llegase a existir conflictos en el branch a mezclar en algún archivo, debemos primeramente corregir los conflictos y hacer commit y luego un push.

– Crear una etiqueta, recuerde que se coloca la etiqueta al último commit subido.

git tag <nombre>

– Subir las etiquetas al servidor

git push --tags

– Eliminar una etiqueta local y en el servidor

git tag -d <nombreEtiqueta> //Se elimina localmente
git push origin :refs/tags/<nombreEtiqueta> //Se sincroniza con el servidor

– Sincronizar con el último commit, descartando todos los demás cambios en el repositorio local

git fetch origin && git reset --hard origin/master && git clean -f -d

– Generar archivo zip con mejoras entre dos commits. Algunas veces el ambiente de producción no cuenta con git, por lo tanto debemos generar un archivo zip con las mejoras que deseamos subir, para actualizar el ambiente de producción, en este caso utilizamos el comando:

 Línea del tiempo
  |-> commmit ae04000 (último)
  |
  |-> commit 8c3b9d5 (anterior)

git archive -o ../latest.zip <commit último> $(git diff --name-only <commit anterior>  <commit último>)

Comando Ejemplo:

git archive -o ../latest.zip ae04000 $(git diff --name-only 8c3b9d5 ae04000)

Nota: Recuerde que los cambios del commit anterior no son agregados, si nos necesitamos debemos ir un commit más atrás.
Fuente: stackoverflow-zip-latest-committed-changes-only

– Eliminar el último commit sin afectar los archivos modificados:

git reset HEAD~1

Fuente: aprendegit-como-deshacer-el-ultimo-commit-en-git

Publicado el

Códigos de Afiliación

Cupones de Afiliación

En la actualidad hay plataformas (web o móviles) que nos resuelven muchos problemas, ya sea pedir un vehículo para que nos traslade de un punto a otro, comida, mercado, dinero, aprender, etc… La diversidad de aplicaciones es amplia, estas aplicaciones nos regalan cupones de afiliación para que las probemos y evaluemos. A continuación les muestro las aplicaciones que he probado y su respectivo código de afiliación para que se animen a probarlas.

Merqueo

Merqueo plataforma web y móvil que permite mercar (hacer mercado) de forma online; Se encuentra actualmente en Colombia. Utilizando mi código de afiliación usted tendrá el costo del domicilio cubierto por los primeros 30 días.

Rappi

Rappi plataforma web y móvil que permite mercar (hacer mercado), sacar dinero, comprar tecnología, e incluso hasta contratar a un rapitendero para hacer mandados o encomiendas (todo desde su plataforma); Se encuentra en Colombia y en México. Utilizando mi código de afiliación usted tendrá 15.000 Pesos (COP) en su primera compra.

*Sólo válido para compras con TC

Uber Eats

Uber Eats plataforma móvil que permite pedir comida en restaurantes de forma online; Se encuentra en Colombia y en muchos países. Utilizando mi código de afiliación usted tendrá 15.000 Pesos (COP) en su primera compra.

*Sólo válido para compras con TC

Uber

Uber plataforma móvil que permite contratar a socios conductores para transladarte de un punto a otro; Se encuentra en Colombia y en muchos países. Utilizando mi código de afiliación usted tendrá 6.000 Pesos (COP) en su primer viaje.

*Sólo válido para compras con TC

Publicado el

Seguridad en Apache

Seguridad en Apache

Apache es unos de los servidores webs más populares. Cuando elegimos utilizarlo es importante tomar algunas previsiones para evitar que usuarios maliciosos puedan vulnerar nuestro servidor.

Una de las previsiones más importante es ocultar información, o mejor dicho mostrar sólo lo necesario. Por lo general cuando instalamos Apache, él nos muestra por defecto información que se nos puede volver en nuestra contra; como por ejemplo las versiones de software utilizados.

El archivo de configuración de Apache varía según la versión del sistema operativo. En el caso de linux varia también según la distribución, por lo general existen estas dos rutas de acuerdo a nuestra distribución de linux:

//CentOS, Fedora, RHEL
/etc/httpd/conf/httpd.conf

//Debian, Ubuntu
/etc/apache/apache2.conf  

Configuración de Apache

Esconder la versión de apache en los headers de las solicitudes.

ServerTokens Prod

Esconder la firma de las páginas por defecto (404, 500, etc..).

ServerSignature Off

Deshabilitar el listado de directorio, se debe eliminar la opción Indexes de la etiqueta directory del la carpeta principal.

<Directory /var/www/>
        Options FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Evitar que el navegador ejecute archivos con extensiones desconocidas click aquí para más información.

Header set X-Content-Type-Options: "nosniff"

Evitar el clickjacking via header.

Header set X-Frame-Options: "sameorigin"

Además si queremos prevenir el clickjacking con Javascript, podemos leer el siguiente artículo:

Prevenir el clickjacking con Javascript

Deshabilitar el metodo TRACE.

TraceEnable Off

Deshabilitar los métodos HTTP que no se utilicen, por ejemplo dejaremos sólo los métodos GET y POST en etiqueta directory del la carpeta principal.

<LimitExcept POST GET>
   deny from all
</LimitExcept>

Deshabilitar el acceso a las carpetas .git .svn ó cualquier carpeta oculta.

<DirectoryMatch "/\.git">
   Require all denied
</DirectoryMatch>

Otra recomendación importante es deshabilitar los módulos que no se utilicen para minimizar posibles brechas de seguridad que puedan tener los mismo.

Haciendo estas configuraciones le dificultarás la tarea a los usuarios maliciosos que quieran vulnerar tu Apache. Si quieres profundizar un poco más te recomiendo estos artículos:

Cómo Mejorar La Seguridad De Un Servidor Web Apache

8 Consejos de seguridad servidores Apache
Configuración de Apache

Publicado el

Diferentes formas de ejecutar una función en JavaScript

Ejecutar Funciones JS

JavaScript provee varias formas de llamar a una función, las cuales son muy usadas por los frameworks. Les explico con un ejemplo:

var nombre = 'Pedro';

function funcHola (nombre)
{
	nombre = nombre || this.nombre;
	return 'Hola ' + nombre;
}

La llamada común:

console.log(funcHola(nombre)); //--> Hola Pedro

Pero existen otras dos formas de ejecutar una función, utilizando el método call o apply que provee las funciones en JavaScript (objeto función). Ejemplo:

//Llamada con el método call
console.log(funcHola.call(this, nombre));

//Llamada con el método apply
console.log(funcHola.apply(this, [nombre]));

Seguramente se preguntarán para que sirven estos dos métodos que provee las funciones en la vida real. Yo les contesto con una pregunta muy simple, ¿Cómo harías para ejecutar una función pasada por parámetro, en un ámbito (scope) específico?. Veamos un ejemplo:

function funcSaludar(saludo)
{
	console.log(saludo()); //--> Hola Pedro
	console.log(saludo("José")); //--> Hola José
	console.log(saludo.call({nombre:"Antonio"})); //--> Hola Antonio
	console.log(saludo.call({nombre:"Antonio"}, "José")); //--> Hola José
}

funcSaludar(funcHola);

Entonces usando call ó apply podemos controlar el ámbito de una función. Un ejemplo puntual de su uso, se puede ver en JQuery al crear un plugin:

//https://learn.jquery.com/plugins/basic-plugin-creation/
(function ( $ ) {
 
    $.fn.greenify = function() {
        this.css( "color", "green" );
        return this;
    };
 
}( jQuery ));
Publicado el

¿Rediseñar tu logo? Esta fue mi experiencia

Logo Antes y Después

¿Necesitas proyectar una idea, empresa o marca personal? sin duda alguna el logo es nuestro primer aliado. Algunos pensarán que el proceso de diseño o rediseño del logo es muy fácil (esa puede ser nuestra primera impresión si sólo vemos el resultado final) y muchas veces desconocemos por completo el proceso de creación. Diseñar (o rediseñar) un logo es un proceso netamente creativo y conceptual, este debe tener un significado de fondo que defina su identidad y marque su propia presencia (me gusta pensar que un logo es como el escudo o bandera de un país, con significados conceptuales de fondo).

En esta ocasión les mostraré cómo rediseñé mi viejo logo, al nuevo y modero logo que cuento ahorita. En este proceso estuve siempre acompañado por el talento creativo de Xolotram, quienes fueron los encargados de plasmar mi idea conceptual.

El proceso de rediseño contó básicamente de 5 pasos, los cuales explicaré a continuación:

1.) Exploración de conceptos.

En mi logo evidentemente utilizo la inicial de mi primer nombre, más todo mi primer apellido (como mi dominio), además me gusta utilizar el PC para describir de forma simplificada mi nombre y apellido (caso que pega muy bien con mi profesión). Haciéndole saber esto al diseñador, mi primer paso fue explorar conceptos (básicamente es explorar todas las ideas posibles que se apegarán con mi requerimiento inicial). En esta llúvia de ideas salió parte de mi logo actual, se puede ver el resultado de este primer paso en la siguiente imagen:

Exploración de Conceptos
Exploración de Conceptos

2.) Estudio específico del logo seleccionado.

Explorando los conceptos propuestos seleccioné el logo nro 10 y 11 primeramente. Y Evaluando estos dos logos seleccionados por su simplicidad me quedé finalmente con el logo 10. Ya contando con un concepto base, quería explorar ahora algunos tipos de letras unidos con la propuesta de logo simplificado en color verde, surguiendo el siguiente estudio tipográfico:

3.) Estudio del tamaño.

En el paso anterior se exploraron diversas tipografías, donde se eligió el tipo de letra Stout Deco porque erá muy coherente con el logo base y fue por consiguiente la que me gustó. Ahora nos hace falta escoger el tamaño de la letra, su posición con respecto al logo base y la unión entre las letras, además se aprovechó para ir explorando los posibles colores del logo. De toda esta solicitud salieron las siguientes composiciones:

4.)Estudio del Color.

En el paso anterior me quedé con la tercer tamaño y decidí explorar el logo en varias tonalidades de verdes y grises. De allí se originó el siguiente estudio del color:

5.) Logo final (Manual de imagen corporativa)

En el paso anterior me quedé con el logo que presenta los siguientes tonos FOCOLTONE 3380 80%, FOCOLTONE 3380 80% y H: #8E8E8D. Ahora simplemente era ver el logo en sus diversas facetas y sus posibles usos, de aquí surgió el siguiente manual de imagen corporativa que especifica el diseño del logo y sus posibles usos.

Ya con este último paso culminamos el rediseño del logo a una imagen más moderna. Espero que este artículo los guíe un poco en la contrucción (o rediseño) de sus logos, pues para cualquier persona que no este vinculado directamente al área de diseño les cuesta un poco (es mi caso) y con este artículo quiero minimizar esta brecha de desconocimiento. Recuerden que al ser el rediseño (o la construcción) del logo un trabajo creativo, estos pasos pueden variar y dependerán del profesional que los asesore, lo importante siempre será que ustedes estén satisfecho con el resultado final. En mi caso estoy muy agradecido con Xolotram por su excelente trabajo y esta demás decir que lo recomiendo a ojos cerrados.

Nota: Si ustedes cuentan con otros artículos que puedan complementar este, pueden dejar los enlaces en los comentarios para agregarlos como enlaces relacionados, y contar así con la mejor información posibles sobre el tema (No sabemos cuando nos tocará tocar el tema nuevamente y contar con la mejor información ,sin duda alguna es de mucha ayuda).

Publicado el

ChatSim, mensajeria ilimitada en todo el mundo. Mi experiencia personal

ChatSim

Seguramente cuando han viajado fuera de su país de residencia (sea por turismo o trabajo), les gustaría estar siempre comunicados desde el instante que se bajan del avión. La alternativa más conocida (pero extremadamente costosa) es activar el roaming de nuestro operador. Seguramente a muchos nos bastaría contar simplemente con las aplicaciones de mensajería más conocidas como: WhatsApp, Telegram ó Facebook Messenger; Esto es posible gracias a ChatSim.

ChatSim es una SimCard física que utiliza el servicio de roaming para permitirnos chatear (sin importar el país donde estemos) por las aplicaciones de mensajería instantánea más conocidas, las cuales son: WhatsApp, Telegram, Facebook Messenger, BBM, WeChat, QQi, Line, Hike y Kakao. Esta SimCard te asigna un nro telefónico ingles (+44) limitado para que funcione en estas aplicaciones de mensajería, no permite recibir mensajes de texto (SMS) ni llamadas, sólo los mensajes de texto de confirmación/activación de las aplicaciones que soporta. Al activar la SimCard de ChatSim en www.chatsim.com, viene con un servicio anual de mensajes ilimitados, que se puede renovar anualmente. En caso de necesitar llamar o enviar mensajes multimedia (fotos, audio o video) debes contar con créditos. Estos créditos se cargan desde la página web de ChatSim y varia el consumo según el país donde estamos utilizando el servicio. Ustedes pueden obtener 1000 créditos en su activación inicial utilizando el siguiente cupon CAMRHIJ4 (yo lo utilicé y me funcionó) para que prueben las llamadas o mensajes multimedia.

Actualmente sólo he utilizado el servicio de ChatSim desde Colombia y funciona de maravilla, para este país se conecta a la red de Movistar funcionando muy bien (lo que si me ha parecido costoso es el consumo de datos para los mensajes multimedia, pero funciona).

Espero probar esta SimCard en mis viajes venideros (locales e internacionales) y comentarles mi experiencia acá, pues la promesa de utilizar ilimitadamente (sólo texto) las aplicaciones de mensajería mas conocidas en cualquier país me cautivo (tengo que certificar y validar dicha promesa).

En caso que ustedes estén interesado en comprar esta SimCard, en Colombia la pueden comprar en Linio (como la compré yo) por el enlace: https://www.linio.com.co/p/sim-card-chatsim-world-comunicate-en-150-paises-evita-roaming-internacional–wzms1r o directamente al vendedor que está detrás del artículo de Linio, el cual es: tiendainterconexionmovil.com

Publicado el

Móvil Éxito, telefonía virtual en Colombia (excelente alternativa para los turistas).

Movil Exito

Unas de las opciones más económicas y de fácil acceso para los turista que viajen a Colombia (si deseas contar con telefonía, datos y mensajería) es la que ofrece Móvil Éxito.

Móvil Éxito es una operadora telefónica virtual montada sobre la infraestructura de Tigo que ofrece paquetes prepagados de voz, datos y mensajería a precios competitivos. Lo interesante de estos paquetes es que lo compras una sola vez y consumes el paquete hasta que te acabes el combo contratado o se te venza el lapso de tiempo de valides (no estando casado con las típicas renovaciones de las operadoras telefónicas tradicionales). Todas estas características son ideales para los turistas que permanecen en el país temporalmente (y bueno para el ciudadano local que desee ahorrar, es también muy conveniente).

¿Dónde compras la SimCard Móvil Éxito?
Desde cualquier supermercado Éxito, Carulla ó SurtiMax.

¿Cómo consultas tu saldo actual?
Marcando el código USSD: *3333#

¿Cómo consulta tus mensajes de voz?
Debes marcar *123 y seguir las instrucciones.

¿Cómo configurar el APN en un dispositivo Android?

Android APN
Android APN

En caso de necesitar configurar los APNs de otro sistema operativo (IOS ó Windows Phone), pueden consultar aquí

Publicado el

MySQL, importar archivo SQL desde consola

Importar datos SQLs en MySQL es muy sencillo a través de PHPMyAdmin, ya sea desde la opción importar o directamente ejecutando el SQL. La cosa se complica cuando son muchos datos y el archivo SQL pesa más que el permitido por la opción importar ó, en el ejecutador de SQL web se hace pesado hacer un simple cortar y pegar(ctr + c y ctrl + v) debido a la gran cantidad de información. Es en este punto donde se hace necesario saber cómo ejecutar un archivo SQL directamente desde la consola del MySQL, para lograrlo haremos los siguientes pasos:

1° Lo primero que debemos hacer es autenticarnos en MySQL. En mi caso desde Windows utilizando XAMPP, me ubico en la carpeta bin de MySQL desde una consola CMD y ejecutamos el siguiente comando:

C:\xampp\mysql\bin> mysql.exe -u<usuario> -p<contraseña>

2° Una vez allí ya ingresamos en la consola de nuestra base de datos MySQL y debemos seleccionar ahora la base de datos a la cual cargaremos los datos SQL. Para lograr tal objetivo hacemos uso del comando USE de MySQL, quedando entonces:

MariaDB [(none)]> use <base_datos>

3° Ahora ya tenemos seleccionada la base de datos a la cual queremos cargar el archivo SQL. Nos quedaría entonces cargar el archivo SQL, para ello utilizaremos el comando SOURCE como se muestra a continuación:

MariaDB [nombre_base_datos]> source <archivo_sql>

Al ejecutar este último comando el interprete MySQL ejecutará cada unas de las líneas contenidas en el archivo SQL y nos responderá la consola directamente, como se muestra en la siguiente imagen:

Importar Archivo En MySQL
Importar Archivo En MySQL