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 [ACTUALIZADO]

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).

Continue reading

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