About José Pérez Martínez

Mi nombre es José Pérez Martínez. Soy Ingeniero Técnico en Informática de Sistemas por la Universidad de Alicante. Tengo un máster en Tecnologías de la Información (con mención de calidad) y actualmente estoy cursando mis estudio de doctorado con el grupo de investigación en CAD/CAM/CAE de la Universidad de Alicante (http://www.dtic.ua.es/unicad/). El manuscrito de mi proyecto fin de máster en scribd. La presentación del proyecto en youtube. Soy un entusiasta de Linux (mi distribución favorita es Debian). Comencé usando Mandrake (ahora Mandriva), Red Hat y también he usado (y uso) Ubuntu, pero personalmente me quedo con Debian. De mi época como estudiante me gusta mucho el estudio de los sistemas operativos, la programación en C/C++ a bajo nivel y desde que descubrí el toolkit Qt soy un firme defensor suyo. Desde el año 2007 aprox. trabajo con el lenguaje de descripción hardware VHDL, de hecho tuve el privlegio de compartir una publicación docente: Diseño de procesadores con VDHL Tengo experiencia en VHDL, Handel-C, Matlab y las herramientas de la suite de desarrollo ISE de Xilinx.

Cómo unir commits en git en uno sólo [ACTUALIZADO]

En ocasiones ocurre que necesitamos juntar varios commits the git. Casó típico: en tu trabajo diario con git vas cumpliendo poco a poco mini hitos que te pones, pero a la hora de compartir el trabajo o de enviar los cambios a un repositorio compartido sólo se permite enviar el trabajo en un único commit agrupado.

¿Cómo solucionarlo? La solución se llama hacer un squash de los commits.

Continue reading

Como hacer un usuario Administrador en Windows

En Windows, una forma fácil de hacer que un usuario se administrador (pertenezca al grupo Administrador) es abrir un CMD con privilegios elevados (como administraodr) y ejecutar el comando:

> net localgroup Administrators (UserLoginName) /add

Podemos verificar que la acción ha sido un éxito con el comando:

> net localgroup "Administrators"

Nombre de alias   Administrators 
Comentario

Miembros
-------------------------------------------------------------------
Administrator
UsuarioLocal*
Dominio\UsuarioExterno*

Se ha completado el comando correctamente.

* son ejemplos de usuarios y dominios que no existen

 

Log de mensajes HTTP en Mule 4

Introducción

Mule es ESB (Enterprise Service Bus) Se usa para enviar/recibir mensajes heterogéneos entre diferentes productos/consumidores.

Admite muchos componentes de transporte y servicio como JMS, SOAP, JBI, BPEL, EJB, AS/400, HTTP, JDBC, TCP, UDP, SMTP, FILE, FTP y más.

Como en Internet el idioma padre es HTTP vamos a ver cómo hacer logging de las peticiones y respuestas HTTP que pasan por mule.

Continue reading

Configurar SSH para usar diferentes pares de claves con bitbucket y otros servicios git

Introducción

Normalmente uso git como herramienta de control de código fuente. Por lo general el escenario que me he encontrado es una única cuenta en mi equipo. Ya que en equipo personal hago mis pruebas con bitbucket y en el trabajo con el servidor GIT que ponga a mi disposición la empresa.

En la actualidad, trabajo con un servidor GIT centralizado pero algunas entidades con las que colaboramos en el trabajo tienen sus propios servidores GIT. Esto plantea un escenario nuevo. Ya que si usas git sobre protocolo HTTP te da igual pero hoy en día por cuestiones de seguridad es muy recomendable SSH y en este caso es donde aparece el “problema”.

No es un problema, claro, pero para poder trabajar contra varios servidores con claves de acceso RSA para SSH diferentes es necesario configurar un poco el equipo. El siguiente ejemplo lo he hecho en Windows 10 con Git Bash pero en un shell de GNU/Linux o macOS sugpongo que irá igual (o muy parecido).

Escenario

Para evitar usar URLS reales (cosa que no puedo) vamos a suponer que dispongo de uno o mas servidores git de mi empresa, para los cuales tengo un usuario único y una pareja de claves SSH generadas (id_rsa y id_rsa.pub) en mi directorio ~./ssh.

Ocurre que ahora he de comunicarme con un servidor nuevo que está fuera de mi entorno habitual, por ejemplo bitbucket.org. En este caso mis claves (id_rsa y id_rsa.pub) no me sirven para acceder a al protocolo git+ssh,

Solución

Parte 1, nuevas claves

La primera parte es sencilla, consiste en generar unos ficheros de claves nuevos

Ejecutamos el comando ssh-keygen e indicamos que queremos crear el fichero ~/.ssh/id_rsa_bitbucket. Nos pedira un <password>, el cual introducimos dos veces y habrá generado los ficheros id_rsa_bitbucket y id_rsa_bitbucket.pub. Éstos tendrán un aspecto similar a esto:

id_rsa_bitbucket
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDjVQNgBj
...
N3mBPX+icCZSO9RBVvAO39vYLTg=
-----END OPENSSH PRIVATE KEY-----
id_rsa_bitbucket.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHFIAvWdrhT9xbM+iwp+PL1fWhXrr8P+Lp...... PsdWU= usuario@domain

Luego nos queda añadir estas claves al agente SSH local, ejecutamos el comando eval $(ssh-agent) y luego añadirmos la clave con ssh-add ~/.ssh/id_rsa_bitbucket. Nos pedirá la clave que hemos introducido en el paso del ssh-keygen.

Aún nos queda algo para que todo esto funcione.

Paso 2,, crear una configuración para cada Host SSH

Para que nuestro cliente SSH sepa qué pareja de claves pública y privada debe usar en cada conexión es necesario que se lo indiquemos, pues de otra forma siempre usará las por defecto, es decir, (id_rsa y id_rsa.pub).

Creamos el fichero ~/.ssh/config y añadimos este contenido:

Host bitbucket.org
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa_bitbucket

Host *
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa

Y con esto estaría, básicamente para toda conexión que vaya a un host bitbucket.org usaría las claves que acabamos de crear y para el resto las que ya existían.

Verificación

Podemos ver que esto funciona correctamente con la siguiente prueba:

$ ssh -T git@bitbucket.org
authenticated via ssh key.
You can use git to connect to Bitbucket. Shell access is disabled

REFERENCIAS

  1. Set up an SSH key
  2. SSH config file for OpenSSH client

Cómo recuperar un ZIP de una versión antigua de un commit en Git

Introducción

En ocasiones, estamos desarrollando y queremos obtener una versión anterior de un proyecto. Lo normal es hacer uso de los tags, ¿pero qué hacer cuando no se dispone de  un tag marcando una versión completa? Se puede obtener un zip del proyecto simplemente indicando el código hash del commit deseado.

Solución

Podemos usar el comando git archive, así

git archive --format zip --output example.zip <codigo_hash_commit>

Referencias

  1. Comando git-archive

Selección en bloque / columna en Notepad++

Notepad++ (https://notepad-plus-plus.org/downloads/) es un editor para ver y modificar ficheros en diferentes lenguajes y formatos de forma rápida y sencilla.

Tiene una funcionalidad muy interesante que es seleccionar en bloque/columnas. De forma típica los editores seleccionan líneas pero si dejamos pulsada la tela ALT mientras seleccionamos con el ratón podremos marcan un bloque o columna de texto y ya realizar las típica operaciones de COPIAR, CORTAR, PEGAR, etc.

Espero que sea útil, a mi me es de mucha ayuda manejando ficheros de datos CSV, SQL, etc.

Para que sirve using en c#

La instrucción using:

using(var disposableObject = new object_that_implements_IDisposable()) { ... }

es una construcción usada para ahorra código al usar una estructura que implemente IDisposable cómo esta:

var disposableObject = new object_that_implements_IDisposable()
try
{
    ...
}
finally
{
    if(disposableObject != null)
    {
        ((IDisposable)your_object).Dispose();
    }
}

Esta instrucción sólo tiene sentido para declarar objetos que implementen el interfaz IDisposable

Referenciausing (Instrucción, Referencia de C#)

Descargar carpeta WEB completa con CURL

Introducción

Supongamos que queremos descargar un contenido WEB. Por ejemplo, en la siguiente imagen vemos un caso real de unos XML modelo publicados por la administración pública (pero podría ser una página HTML con sus imágenes, etc.):

Solución

La forma de hacerlo usando wget sería:

wget --no-parent -r http[s]://dominio.com/ruta/directorio/descargar

Con esto, se crea una carpeta con el nombre del dominio y la estructura de carpetas publicadas en el servidor y todos los documentos referendo los enlaces disponibles desde la ruta indicada.

NOTA: Para poder usar WGET con SSL (https) leer mi post anterior.

***ADICONAL**: Parametros adicionales en https://www.guyrutenberg.com/2014/05/02/make-offline-mirror-of-a-site-using-wget/

Instalar WGET en Windows

Introducción

WGET es una de esas herramientas prácticamente indispensables para muchos desarrolladores (o incluso usuarios). Al igual que CURL nos facilita la vida con respecto a trabajar con el protocolo HTTP WGET es genial para obtener recursos vía HTTP.

Cuidado GniWin WGET no tiene soporte para SSL!! Esta compilación para Windows (https://sourceforge.net/projects/gnuwin32/files/wget/) ha sido un gran aliado durante muchos años pero no soporta SSL y por desgracia no nos será de ayuda trabajando con HTTPS.

En su lugar podemos descargar (https://eternallybored.org/misc/wget/) esta versión con total soporte a OpenSSL 1.1.1a.

Elegimos la última versión y la arquitectura x32 o x64 (hoy en día, 64 bits lo más probable). A remarcar el soporte SSL, ZLIB (para peticiones comprimidas), etc.

Espero que sea de ayuda!

MySQL Query Log

Introducción

En ocasiones queremos depurar qué consulta se ejecuta de forma efectiva en la base de datos (por ejemplo al usar consultas preparadas o un ORM) y la forma de hacer cuando usamos como SGBD MySQL es activar el General Query Log.

Este Log es un registro de las consultas que va ejecutando el servidor MySQL. Además, hay que tener presente que este log se debe activar sólo cuando estamos depurando una funcionalidad puntual pues en servidores muy activos puede crecer hasta alcanzar un gran tamaño.

Uso de General Query Log

Lo primero es editar el firchero my.cnf  (o my.ini en windows) y buscar la sección [mysqld]. En ella pondremos las opciones:

general_log_file = /path/to/query.log
general_log      = 1

Tras reiniciar el servidor mysql, podemos abrir el fichero de log y ejecutar varias consultas:

$ mysql -uroot mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 212
Server version: 5.7.21 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select User, Host from user;
+---------------+-----------+
| User          | Host      |
+---------------+-----------+
| tienda        | %         |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+
4 rows in set (0.00 sec)

El fichero de log generado por el servidor contiene:


wampmysqld, Version: 5.7.21-log (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: /tmp/mysql.sock
Time                 Id Command    Argument
2018-11-20T10:55:09.930402Z	    2 Connect	root@localhost on mysql using TCP/IP
2018-11-20T10:55:09.934477Z	    2 Query	select @@version_comment limit 1
2018-11-20T10:55:20.218671Z	    2 Query	select User, Host from user
2018-11-20T10:55:21.721707Z	    2 Quit	

Y estas son las sentencias que se ejecutan en MySQL.

Referencias