miércoles, 19 de diciembre de 2012

Submódulos con Git

Hola a todos. Últimamente he estado estudiando un poco de Git, y encontré una funcionalidad que puede ser de mucha ayuda cuando tenemos sistemas muy grandes, o muchas dependencias que son desarrolladas en paralelo a nuestro proyecto. Los submódulos nos permiten tener un directorio dentro de nuestro proyecto Git que es a su vez un proyecto Git totalmente a parte. A continuación, veremos como hacer uso de estos:

Agregar submódulo:

$ git submodule add <url del submódulo> <ruta del submódulo>

Ejemplo:

$ git submodule add https://sitio-web.dominio/proyecto.git deps/proyecto

Clonar un proyecto que usa submódulos:

Ahora, cuando clonamos un proyecto que tiene submódulos, estos no se descargan automáticamente, a pesar de que se crean sus directorios. Para descargar los submódulos tenemos que hacer lo siguiente:

# Primero, inicializar todos los submódulos
$ git submodule init
# Luego y por último descargarlos
$ git submodule update

Actualizar submódulos:

Cuando desarrollamos submódulos en paralelo con nuestro proyecto principal, a menudo queremos estar actualizando nuestras dependencias, para esto, bastará con entrar al directorio donde tenemos nuestro submódulo y hacer pull (git pull), o si lo que queremos es actualizar todos los submódulos al mismo tiempo:

$ git submodule foreach git pull

Si lo que queremos es eliminar un submódulo que ya no usaremos, debemos seguir varios pasos:

1. Lo primero es abrir el archivo .gitmodules y eliminar las lineas que contengan información de este módulo. Este archivo luce así:

[submodule "deps/zlib"]
        path = deps/zlib
        url = git@github.com:sigifredo/zlib.git
[submodule "deps/libgit2"]
        path = deps/libgit2
        url = git@github.com:sigifredo/libgit2.git
Archivo: .gitmodules

Debemos eliminar las lineas en negrilla.

2. También tendremos que abrir el archivo .git/config y eliminar la configuración del submódulo. De nuevo, el archivo luce así:

[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
        hideDotFiles = dotGitOnly
[remote "origin"]
        url = git@github.com:sigifredo/gito.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "development"]
        remote = origin
        merge = refs/heads/development
[submodule "deps/zlib"]
        url = git@github.com:sigifredo/zlib.git
[submodule "deps/libgit2"]
        url = git@github.com:sigifredo/libgit2.git
Archivo: .git/config

Debemos eliminar las lineas en negrilla.

3. Por último, debemos eliminar el directorio del submódulo de la siguiente manera:

$ git rm --cached <dirección del submódulo>

Ejemplo:

$ git rm --cached deps/proyecto

Estos son los procedimientos básicos para trabajar con los submódulos de Git. Espero les sea de mucha ayuda en su proceso de desarrollo. Un saludo.

Referencias:
- Página oficial del proyecto: http://git-scm.com/
- Git Book (en ingles): http://git-scm.com/book

viernes, 16 de noviembre de 2012

Instalar y configurar gVim en Windows

Primero, descargar el software necesario:

- gVim para Windows.
http://www.vim.org/download.php

- Fuente (DejaVu Mono): es la predeterminada en las consolas de Linux (KDE y GNOME):
http://dejavu-fonts.org/wiki/Download



Luego de instalado gVim y la fuente DejaVu Mono, editamos el archivo de configuración de gVim C:\Program Files (x86)\Vim\_vimrc

y cambiamos su contenido por el siguiente código:

version 6.0
set guifont=DejaVu_Sans_Mono:h9:cANSI
set helplang=es
syntax on


domingo, 8 de julio de 2012

Jugar con varios realmlists en WoW

Actualmente me encuentro jugando World of Warcraft en un par de servidores, y me he encontrado con lo incómodo que es cambiar el archivo realmlists cada que voy a cambiar de servidor o versión del juego. Por esta razón he creado una aplicación simple que permite guardar los servidores en los que jugamos, y la ruta donde se encuentran los juegos. La aplicación la pueden descargar en este link https://sourceforge.net/projects/switchrl/. Se ha desarrollado bajo licencia GPLv3 así que es de libre distribución.





La aplicación cuenta con una sección llamada Directorio, en la cual guardaremos los directorios a WoW. En mi caso tengo dos versiones de este, entonces he guardado las dos rutas. Y la sección Servidor donde guardaremos los servidores en los que queremos jugar. Para iniciar el juego, seleccionamos el servidor y el directorio y presionamos Iniciar. Espero sea que esta aplicación les sea de utilidad. Un saludo.

domingo, 11 de diciembre de 2011

Instalar MinGW Qt4 y CMake

Primero, tenemos que descargar el software necesario:

- Qt SDK:
http://qt.nokia.com/downloads
- CMake:
http://cmake.org/cmake/resources/software.html


Instalación y configuración de Qt SDK:
1- Ejecutamos el archivo descargado, y esperamos que se prepare la información para la instalación:





2- A continuación, escogemos el tipo de instalación Personalizada (Custom):



3- Seleccionamos los componentes necesarios para usar MinGW y Qt:



4- Aceptamos la licencia e instalamos:



5- Luego de terminar la instalación, agregamos MinGW y Qt a las variables del sistema (especificamente en la variable PATH). Este proceso es diferente en cada versión de Windows, por eso no especificaremos como llegar a la configuración de las variables de entorno. Las rutas que agregaremos al PATH del sistema serán:

- C:\QtSDK\mingw\bin
- C:\QtSDK\Desktop\Qt\4.7.4\mingw\bin


A continuación instalamos CMake:
Este proceso de instalación es trivial para el usuario de Windows. Lo único que se debe tener encuenta es especifiar durante la instalación, que se debe agregar CMake al PATH del sistema:



Ahora temenos nuestro sistema listo para usar. Para construir nuestro programa abriremos una consola de MS-DOS, e iremos a la dirección donde está guardado nuestro proyecto. Crearemos una carpeta donde compilaremos nuestro código fuente y e esta digitaremos el siguiente comando:

> cmake -G "MinGW Makefiles" ..


Y para compilar:

> mingw32-make

lunes, 31 de octubre de 2011

Pasar arreglo de un archivo a otro de PHP con GET

Hola a todos. El día de hoy les traigo un "truco" que recientemente usé en una página web que hice para la universidad.

Es posible que tengamos la necesidad de pasar un arreglo completo de un archivo a otro de PHP y resulta muy incómodo pasar cada uno de sus componentes. Para esto, lo que haremos será serializar el arreglo con la función serialize de PHP, y la cadena resultante la codificaremos con urlencode para ser pasada a otro archivo. En el otro archivo solo tendremos que decodificar la cadena con la función urldecode y deserializarla con unserialize.

Archivo emisor:
arr['ind'] = 4;

$val = urlencode(serialize(arr));

header('Location: recptor.php?s=$var');


Archivo receptor:
$s = unserialize(urldecode(stripslashes($_GET['s'])));
echo $s['ind'];


Así el echo de la última linea nos mostrará "4".

viernes, 28 de octubre de 2011

Obtener ID luego de insertar un registro en SQL

Supongamos que tenemos la siguiente tabla en nuestra base de datos:

tabla
idEntero autoincrementable
campo1varchar(10)
campo2varchar(30)
campo3varchar(30)


El problema ocurre cuando hacemos una inserción en la base de datos y necesitamos saber cual fue el id con el que quedó nuestro registro.

La solución a este problema llega a nosotros gracias a la clausula RETURNING. Miremos como sería nuestra consulta:

INSERT INTO tabla (campo1, campo2, campo3) VALUES ('c1', 'c2', 'c3') RETURNING id;

La anterior consulta inserta el registro en la tabla tabla y retorna el id con el que queda este. Ahora si nuestra intensión es guardar este valor en una variable dentro de una función SQL podemos hacerlo así:


CREATE FUNCTION funcion (VARCHAR, VARCHAR, VARCHAR) RETURN INTEGER
AS$$
DECLARE
id_t INTEGER;
BEGIN
INSERT INTO tabla (campo1, campo2, campo3) VALUES ($1, $2, $3)
RETURNING id INTO id_t;
RETURN id_t;
END;
$$LANGUAGE plpgsql;

Función hecha en PostgreSQL


La clausula "RETURINIG id INTO id_t" podemos usarlo independiente del gestor de bases de datos que estemos usando.

martes, 20 de septiembre de 2011

Eliminar Wine completamente

Hola a todos. Si quieres eliminar Wine completamente de tu sistema Linux, usando solo los comandos de desinstalación no es suficiente. Veremos entonces lo necesarios para purgar completamente Wine:

$ aptitude purge wine
$ rm -rf $HOME/.wine
$ rm -f $HOME/.config/menus/applications-merged/wine*
$ rm -rf $HOME/.local/share/applications/wine
$ rm -f $HOME/.local/share/desktop-directories/wine*
$ rm -f $HOME/.local/share/icons/????_*.xpm