Linux y Git se llevan a las mil maravillas y tal es su integración, que nuestro usuario del sistema operativo es el que se usa por defecto en Git. Además ya tenemos una clave privada y pública generadas para poder trabajar con SSH.
Pero... ¿Qué pasa si mi usuario del repositorio Git con el que tengo que trabajar no es el mismo que el que uso en el sistema?
En Linux, para bien o para mal siempre se rellenará ese usuario automáticamente con el del sistema y nunca te lo preguntará. Únicamente te pedirá la clave, que obviamente no sirve de nada porque el usuario no es el que debiera.
Una forma rápida y sencilla para solucionar este inconveniente, es incluir el usuario dentro de la URL del repositorio.
ssh://user@domain:port/path/repo.git
Suele ser bueno explicitar lo máximo posible la información de conexión dentro de la URL, sobre todo el puerto si no es el de por defecto. En el caso de SSH, el puerto por defecto es 22.
Para modificar la URL del repositorio remoto podemos usar el siguiente comando:
De esta forma en vez del usuario del sistema, se usará el que especifiquemos por URL y sólo restará meter la clave para poder operar con el repositorio deseado, o si fuera el caso, subiremos la clave pública SSH al servidor del repositorio para poder operar sin usar claves.
Lo primero que hice fue comprobar si alguna de mis cuentas había sido robada y se estaba distribuyendo de alguna forma en la red. Para ello lo más fácil es entrar en “Have I been pawned?“ como ya se comentó en el post "Clef – Inicio de sesión fácil y seguro":
Efectivamente una de mis direcciones de email asociada a las credenciales de acceso que usé para hacer uso de los servicios de hosting, había sido comprometida y estaba circulando por la red. Lo siguiente que hice fue comprobar si la combinación del email y el password de la cuenta comprometida los había utilizado en otra cuenta para otro servicio. Es decir, si había reciclado la contraseña. ¡Gracias a Dios!, no fue el caso. Esto fue posible gracias a que conservo un listado de todas mis cuentas, encriptado fuertemente con una contraseña maestra acorde a la fortaleza del encriptado (actualmente existen servicios de este tipo que se denominan baúles de contraseñas). Esto me llevo a una par de reflexiones.
La primera es sobre a quien hacemos garante de nuestros datos cuando nos registramos en un servicio web. Cómo guarda la información, qué medidas de seguridad implementa el servicio, qué hace con los datos (si mercantiliza los datos)... Habitualmente confiamos en los servicios o simplemente no nos resulta preocupante lo que pueda pasar con esos datos. En la mayor parte de las veces ni se llega a esta reflexión, lo que resulta aún más preocupante.
Como segunda reflexión está el lado de los datos que decidimos introducir en el servicio web. Si son verdaderos o falsos los datos que damos (en el caso de que puedan serlo), qué tipo de credenciales de acceso usamos, si podemos eliminar la cuenta creada y el servicio borra totalmente nuestros datos aportados, así como toda la información generada... Pero lo que tenemos que tener en cuenta sobre todo, es que nunca debiéramos usar la misma contraseña en dos servicios, puesto que nunca vamos a tener la garantía de que nunca serán robadas las cuentas del servicio web y puede que tampoco sepamos con certeza las medidas de seguridad que está implementando el servicio. LA REUTILIZACIÓN DE CONTRASEÑAS NUNCA ES ACONSEJABLE EN NINGÚN CASO.
A día de hoy tenemos multitud de credenciales de acceso para diversos servicios web y es habitual caer en la mala práctica de reutilizar contraseñas. Esto es muy peligroso porque puede ser comprometida las credenciales dadas a un servicio, y que estas se usen en otro que pueda comprometer algo más que los propios datos e información que damos, como la contratación o variación de servicios contratados de manera online.
Si eres demasiado perezoso como para gestionar varias credenciales para cada uno de los servicios web de los que haces uso, te recomiendo que le eches un ojo al post:
Se trata de un servicio gratuito de autenticación e inicio de sesión único, simple y seguro.
Si tras leer este post, eres ahora un poco más consciente de lo que implica la reutilización de una contraseña, y además sabes que lo has hecho, te recomiendo el ejercicio de cambiar las contraseñas de todas aquellas credenciales de acceso para las que hayas reutilizado una contraseña.
El tiempo pasa y la tecnología cambia mejorándose y haciéndose más cómoda y rápida. Los sistemas operativos cómo núcleo y base para la ejecución de programas no son ajenos a ello, y lejos de solamente evolucionar, tienen la difícil tarea de mantener la compatibilidad con lo ya existente.
En el caso concreto de Windows, el cual cumplirá 35 años el próximo 20 de Noviembre, existe multitud de software que ha sido desarrollado. De manera nativa Windows ha intentado ofrecer compatibilidad con el software desarrollado para sistemas anteriores, ya sea de manera implícita sin que el usuario tuviese que hacer nada o explícita, permitiendo que el usuario elija la compatibilidad de manera manual desde propiedades del archivo.
Por norma general estas opciones suelen bastar para hacer funcionar buena parte del software antiguo o también denominado Abandonware.
En el caso particular de los juegos suelen ser especialmente útiles estas opciones, permitiendo correr juegos que se diseñaron para sistemas operativos anteriores. En la práctica, y para la gran parte de los casos, las opciones facilitadas por las versiones de Windows más actuales, nos resuelven la papeleta para poder correr dichos juegos.
En casos particulares esto a veces no es suficiente y los juegos a pesar de funcionar, contienen errores gráficos que afectan a la interpretación de los colores originales del juego. Un caso en el que se comprueba fácilmente estos fallos, es el juego de "Age of Empires 2" si se ejecuta, por ejemplo, en un Windows 7.
El fallo en la interpretación de los colores es causado por la corrupción de la paleta de colores. El causante de que se corrompan los colores es el proceso "explorer.exe" que se ejecuta en todo momento en el sistema, encargado de gestionar toda la interacción que hay en el escritorio (iconos del escritorio, barra de navegación...).
El problema viene dado porque dicho proceso tiene problemas de funcionamiento para modos de vídeo con color de 16 bits sin aceleración gráfica. Puesto que el proceso explorer presenta dicho problema, el cierre del mismo antes de lanzar el juego, solucionará el problema de corrupción de la paleta de colores.
Un solución práctica consiste en cerrar el proceso explorer, lanzar el juego y volver a lanzar el proceso explorer cuando se cierre el juego. Para ello basta con crear un archivo con extensión ".bat", por ejemplo "Lanzador.bat".
Dentro del fichero escribiremos las siguientes líneas:
Este archivo Lanzador.bat es un script que nos lanza el ejecutable (.EXE) que queramos tras cerrar el proceso explorer mediante el comando "taskkill", y queda a la espera de que termine el ejecutable para poder volver a lanzarlo con el comando "start".
Esta solución simple y sencilla es válida para todos aquellos programas y juegos que presenten errores en la paleta de colores.
Habitualmente una de las cosas que nos interesa medir cuando programamos código, es el tiempo de ejecución. Identificar las secciones de código que más impactan en el tiempo de ejecución total, nos permite optimizar el código y disminuir el tiempo de ejecución general de todo nuestro código.
En C++ hay varias formas de hacerlo, pero dependiendo de cómo lo implementemos y qué cabeceras usemos, podemos encontrarnos que al compilar nuestro código en ciertos sistemas no nos funcione. El siguiente ejemplo muestra cómo medir tiempos en una sección de código utilizando cabeceras estándar de C++:
#include <iostream>
#include <ctime>
unsigned t0, t1;
t0=clock()
// Code to execute
t1 = clock();
double time = (double(t1-t0)/CLOCKS_PER_SEC);
cout << "Execution Time: " << time << endl;
La función "clock" retorna el tiempo consumido por el programa medido en ticks, que junto con la macro "CLOCKS_PER_SEC" nos permite traducir los ticks a segundos.