Configurar el meld como herramienta externa para el diff del git

El meld es una herramienta que nos sirve para visualizar los cambios en nuestros repositorios, en linux lo podemos instalar con la siguiente instrucción:

sudo apt-get install meld 

Una vez que tengamos el meld lo podemos engancharlo con el git para que nos muestre las diferencias, para esto lo primero que tenemos que hacer es un pequeño y simple guion que reciba los argumentos enviados en por el git diff y los ordene para ejecutar el meld, a este archivo le vamos a llamar myDiff:

Creando el archivo:

#Creamos el archivo 
touch ~/.config/myDiff 

#le damos permisos de ejecución 
chmod +x ~/.config/myDiff 

Una vez que tengamos el archivo creado y con los permisos adecuados le agregamos el siguiente código:

#!/bin/sh

meld $2 $5

Nota: tambien puedes simplemente ejecutar echo 'meld $2 $5' > ~/.config/myDiff y esto escribiria sobre el archivo el contenido del guion.

Enganchando el git con el meld

Una de las opciones de configuración del git es la de poder sustituir su diff por cualquier otra herramienta externa, veamos como hacerlo:

git config --global ~/.config/myDiff 

Probando

Lista la proxiama vez que ejecutes:

git diff 

Y existan cambios, estos seran enviados al guion ~/.config/myDiff el cual abrira el meld

fuentes:

Cola de archivos del filezilla (queue.xml).

El filezilla es un cliente ftp con varias caracteristicas personalizables interesantes de las cuales guarda bitacolas y archivos de configuraciones para cada usuario de nuestro sistema operativo(ya que funciona en Linux, Mac y Windows). El directorio donde se almacena estos archivos cambia dependiendo del sistema operativo por ejemplo:

#en el caso de linux /home/nombre_usuario/.filezilla/ 
#en el caso de windows C:\Documents and Settings\nombre_usuario\Application Data\FileZilla\queue.xml 
#en el caso de MAC. #No lo se, si alguien lo sabe favor de comentarlo para que lo agregue. 

En mi caso mi maquina que tiene linux y mi usuario es fitorec por lo cual mi directorio es: /home/fitorec/.filezilla/ si revisamos estos archivos veremos la siguiente lista:

/home/fitorec/.filezilla/

 |-- bookmarks.xml <- Marcadores 
 |-- filezilla.xml <- Configuraciones y los datos de la ultima conexión
 |-- filters.xml <- Filtros
 |-- layout.xml <- Interfas grafica
 |-- lockfile <- No lo se,en mi caso estaba vacio.
 |-- queue.xml <- Cola de archivos(este es el que nos interesa por ahora).
 |-- recentservers.xml <- Lista de datos sobre las ultimas conexiones.
 `-- sitemanager.xml 

Estos archivos son muy interesantes y que espero describirlos con
detalles en entradas siguientes, sin embargo en esta entrada describire
las caracteristicas del archivo queue.xml este archivo almacena la cola de archivos que tienen un proceso pendiente(subir/baja el archivo) y que nos muestra el filezilla, como se puede ver en la siguiente imagen:

 

Mas especificamente en la parte inferior de la pantalla del filezilla es donde nos muestra la cola de archivos:

 

Como podemos ver nos muestra la siguiente información:

  • información de la conexión
    • Usuario
    • Servidor
  • Lista de archivos pendientes de los cuales para cada uno muestra informacion:
    • Ruta del archivo local.
    • Dirección si se va a descargar o subir del servidor.
    • Ruta del archivo remoto.
    • Tamaño del archivo.
    • Prioridad.
  • El numero total de archivos en la cola.
  • El tamaño en KB( kilobytes ) de la cola.

Ahora si abrimos el que nos aparece cuando

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<FileZilla3>
 <Queue>
 <Server>
  <Host>nombre_servidor.com</Host>
  <Port>21</Port>
  <Protocol>0</Protocol>
  <Type>0</Type>
  <User>fitorec</User>
  <Pass>contraseñaXXX</Pass>
  <Logontype>1</Logontype>
  <TimezoneOffset>0</TimezoneOffset>
  <PasvMode>MODE_DEFAULT</PasvMode>
  <MaximumMultipleConnections>0</MaximumMultipleConnections>
  <EncodingType>Auto</EncodingType>
  <BypassProxy>0</BypassProxy>
 <File>
  <LocalFile>/home/fitorec/proyecto/proyecto_actual/images/foto1.png</LocalFile>
  <RemoteFile>foto1.png</RemoteFile>
  <RemotePath>1 0 6 images</RemotePath>
  <Download>0</Download>
  <Size>5388</Size>
  <TransferMode>1</TransferMode>
 </File>
 <File>
  <LocalFile>/home/fitorec/proyecto/proyecto_actual/js/script.js</LocalFile>
  <RemoteFile>script.js</RemoteFile>
  <RemotePath>1 0 11 public_html 6 images 2 js</RemotePath>
  <Download>1</Download>
  <Size>2000</Size>
  <TransferMode>1</TransferMode>
 </File>
 </Server>
</Queue>
</FileZilla3> 

Descripción del archivo

Este archivo es un documento en formato xml desgraciadamente no pude
localizar el
dtd (la definción de los datos) que me definiera el contenido, asi que tratare de explicar lo que entendi del mismo:

estructura básica

La estructura basica es la siguiente:

<FileZilla3>
<Queue>
 <Server>
 <File> <!-- documento 1 --> </File>
 <File> <!-- documento 2 --> </File>
 </Server>
 <Server>
  <-- servidor 2 -->
 </Server>
</Queue>
</FileZilla3> 

Como vemos existe un <FileZilla3> el cual contiene una cola
<Queue> que asu vez contiene servidores <Server> los cuales
contiene archivos pendientes en dicha cola <File>.

FileZilla3

Este es el contenedor principal el cual hace referencia a la
definicion de datos para filezilla version 3 el cual acepta multiples
conexiones con servidores por medio de pestañas.

Queque

Es la cola, este es un subcontenedor el cual describe el documento en
si, veran como comentaba el filezilla almacena distinta información la
cual esta dividida en archivos en formato xml cada documento tiene
un nombre que refiere al contenido del documento en este caso el
domento es queque.xml y por lo contiene el elemento </Queue> en el
caso de los marcadores existe bookmarks.xml el cual tiene una
estructura parecida a:

<FileZilla3>
  <Bookmark>
  .... 
 </Bookmark>
 </FileZilla3> 

En el caso de las ultimas conexciones veremos existe el docmento
recentservers.xml el cual tiene una estructura similar a:

<FileZilla3>
 <RecentServers>
  <Server>
   <!-- servidor 1 -->
  </Server>
 </RecentServers>
</FileZilla3> 

Nota: Cuando abrimos nuestro filezilla y abrimos una conexion nueva esta se
almacena automaticamente en el documento recentservers.xml.

Server

Este contenedor almacena informacion del servidor asi como de su
acceso, la información que contiene es, host, puerto, usuario,
contraseña, modo pasivo/activo, códificación, etc.. entre otras.

File

Este se encuentra contenido dentro de un servidor (<Server>) e indica un
documento, un ejemplo es el siguiente:

<File>
 <LocalFile>/home/fitorec/proyecto/proyecto_actual/js/script.js</LocalFile>
 <RemoteFile>script.js</RemoteFile>
 <RemotePath>1 0 11 public_html 6 images 2 js</RemotePath>
 <Download>1</Download>
 <Size>2000</Size>
 <TransferMode>1</TransferMode>
</File> 

LocalFile: archivo local (en
nuestra maquina).
RemoteFile : nombre remoto(en el servidor).
RemotePath: directorio remoto.
Download: sentido (descargar=1 ó subir=0).
Size Tamaño de la trasferencia.

Se me ocurren varias ideas como alterar este documento de la cola
archivos del filezilla, a partir de los cambios en un
directorio que tenga un control de versiones(git,mercurial ó svn).

De esta forma al abrir el filezilla estaria listo para realizar la
trasferencia indicada.

  

Bodegón de barro – otra faceta mia

En este espacio he publicado muchas cosas respecto a programación, linux, desarrollo web e ilustraciones graficas echas con computadoras pero… muy poco sobre mi, hoy quiero compartir otra faceta.

Recuerdo que desde niño tuve una gran pasión por la pintura de echo yo pensaba estudiar algo más relacionado con artes plasticas, al estudiar la preparatoria obte por una orientada a ciencias y humanidades, para ese entonces empesaba aprender algo de reparación de computadoras, al concluir la preparatoria por diversos motivos(que quizas alguna vez cuente), decidi alejarme de mi cuidad natal(Oaxaca de Juarez), asi que opte por estudiar computación pese a que en ese momento todavia me gustaba más la pintura.

Actualmente no tengo preferencia por alguna sin embargo me desarrollo mas en la computación.

El gusto por la pintura radica en que me es una forma tambien de expresarme al tiempo me relaja.Un bodejón siempre es poco expresivo, hoy lo pongo por que es solo un preambulo de una serie de pinturas y dibujos con algunos pensamiento que estare poniendo.

Eliminando com gimp información de los metadatos (exif) en imagenes que publicamos por Internet

Las camaras digitales suelen guardar información en cada fotografia, a estos datos suelen seguir una expecificación llamada exif (Exchangeable image file format) que describe una serie de formatos.

En ocaciones he leido de personas que han recuperado sus camaras/laps robadas por medio de fotografias publicadas por Internet. Por otra parte puede llegar a ser peligroso  que por medio de alguna imagen que publicas en Internet cualquier persona pueda llegar a saber que modelo de telefono celular tienes, camara digital o laptop, pues sitios como face, google, etc.. extrae esta información y la usan a su beneficio.

Puedes verificar estos datos por medio del comando exif, para esto es necesario instalarlo.

#instalando exif en ubuntu linux
apt-get install exif

Ahora si p.e tenemos una imagen llamada IMG184.jpg podemos ver sus datos de la siguiente manera:

exif IMG184.jpg

Esto nos deberia de mostrar algo como:

--------------------+----------------------------------------------------------
Etiqueta            |Valor
--------------------+----------------------------------------------------------
Descripción de la im|
Fabricante          |SONY
Modelo              |DSC-W110
Orientación         |Valor desconocido 0
Resolución X        |72.00
Unidad de resolución|Pulgadas
Resolución Y        |72.00
Software            |Picasa 3.0
Fecha y hora        |2009:05:23 11:43:38
Posicionamiento YCbC|co-situado
Ajuste de imagen PRI|28 bytes de datos indefinidos
Compresión          |Compresión JPEG
Resolución X        |72.00
Resolución Y        |72.00
Unidad de resolución|Pulgadas
Tiempo de exposición|1/40 seg.
Número F/Apertura   |f/2.8
Programa de exposici|Programa normal
Velocidad ISO       |400
Versión Exif        |Versión Exif 2.21
Fecha y Hora (origin|2009:05:23 11:43:38
Fecha y Hora (digita|2009:05:23 11:43:38
Configuración de com|Y Cb Cr -
Bits comprimidos por|4.00
Ajuste de exposición|0.00 EV
Valor máximo de aper|3.00 EV (f/2.8)
Modo de métrica     |Patrón
Fuente de luz       |Desconocido
Flash               |El flash se disparó, modo automático, luz de retorno detec
Distancia focal     |5.3 mm
Nota del fabricante |8508 bytes de datos indefinidos
FlashPixVersion     |FlashPix Version 1.0
Espacio de color    |Error interno (valor desconocido 65535)
PixelXDimension     |1600
PixelYDimension     |1200
Fuente de archivo   |DSC
Tipo de escena      |Directamente fotografiado
Render personalizado|Proceso normal
Modo de exposición  |Exposición automática
Balance de blancos  |Balance de blancos automático
Tipo de captura de e|Estándar
Contraste           |Normal
Saturación          |Normal
Nitidez             |Normal
Índice de interopera|R98
Versión de interoper|0100

Ahora si no quieres instalar dicho programa existe una herramienta de mineria de datos denominada foca, la cual existe un demo que funciona en linea, aqui puedes verificar los metadatos de tu imagen:

http://www.informatica64.com/foca/default.aspx

Quitando datos exif con gimp.

Lo primero que hacemos es abrir la imagen, le damos guardar como y remplazamos el archivo para que nos aparezca el siguiente mensaje:

remplazar

remplazar

Una vez que le demos remplazar debemos de deplezar las opciones avanzadas desactivamos el chekbox de “Guardar datos exif”:

Algo extra puedes hacer es guardar esta configuración como preterminada.

Ejemplo Manejo de eventos con Javascript & Mootools – Teclado

Vegeta movimiento con el evento del teclado
Vegeta movimiento con el evento del teclado

Hace un par de meses que di mi taller Mootools en la academia de software libre, uno de  los ejemplos que di fue el de manejo de eventos con el teclado, aqui programe un monito que se mueve y que dejo pendiente el código para en un futuro hacer algún game.

Codigo & ejemplo en linea: <http://vivoenhuajuapan.com/eventos-teclado-ejemplo/>

 

poco que escribir, mucho trabajo

Dejo esta entrada rápida, ya que he abandonado mucho mi blog, veran esta semana inicio con un amigo un proyecto de adoptar un paquete de debian http://www.debian.org/devel/wnpp/rfa_bypackage como a el le late perl (y a mi tambien) estare trabajando algo con perl, por otra parte en estos momentos estoy elaborando 2 proyectos en PHP uno enfocado al turismo y otro es una plataforma de desarrollo web el cual se llamara Acaneu(ayuda mutua) este ultimo espero sacarlo durante el trascurso de este año(2011).

Sin mas dejo alguna ilustración rápida espero sea de su agrado :¬),

algo_de_trabajo

algo_de_trabajo

P.d Agrego la img base:

base-dibujo-mano

base-dibujo-mano

Como instalar un repositorio privado y remoto con git en servidor con ssh + clientes linux

Como instalar un repositorio remoto con git en servidor + clientes linux

instalando_git_servidor en linux

instalando git servidor en linux

La siguiente configuración fue probada en debian lenny como servidor y ubuntu , trisquel 4.5 como maquinas clientes.

Nota1:

Para otras distribuciones de Linux se recomienda adaptar los pasos a las variantes y caracteristicas de la configuración de git especificas de nuestra distribución.

Nota2:

Se entiende que el lector tiene conocimientos básicos de linux y su interacción con con el CLI, conexiones ssh, claves publicas y privadas.

Previo y Configuración del servidor

El Git al ser un sistema manejador de versiones distribuido y no centralizado(como subversión), lo único necesario antes de empezar es: tener git en el servidor y en las máquinas clientes.

Por cuestión de seguridad y facilidad de la administración cuando existen múltiples desarrolladores, lo que se recomienda es crear un usuario git en el S.O. y apuntar sus archivos(que seran capetas de proyectos) a la carpeta de opciones /opt/ y su interprete hacia el interprete proporcionado por git.

adduser #introducimos los datos que nos pide 

Editamos el registro del usuario git el archivo /etc/passwd quedan la configuración algo como:

git:x:1000:1000::/home/git:/usr/bin/git-shellgit:x:1000:1000::/home/git:/usr/bin/git-shell 

Para concluir con la configuración del servidor hay que darle al usuario git permisos para escritura en el directorio /opt/ y debemos también agregar un usuario administrador que sera el que pueda crear nuevos proyectos, al que llamaremos(usuario_admin) .

Agregando nuevo proyecto

Una vez esto, desde alguna máquina cliente creamos una carpeta de nuestro nuevo repositorio:

mkdir miApp
cd miApp git init 

Partiendo del concepto que el git es un sistema distribuido y que la carpea.git en el servidor es en esencia nuestra carpeta .git( con pequeñas diferencias ), nos podemos enviar los archivos de nuestra carpeta .git a nuestro servidor(olvidándonos de cosas como git clone —bare mi_proyecto.git):

scp -rp .git usuario_admin@miDominio.net://opt/mi_proyecto.git 

Ojo: no podremos utilizar el usuario git ya que por seguridad el shell-git desactiva las conexiones ssh p.e.

ssh git@miDominio.net PTY allocation request failed on channel 0 fatal: unrecognized command 'gitosis-serve schacon@quaternion' Connection to gitserver closed. 

agreando brazo origin y finalizando la configuración

Ahora desde la misma máquina cliente podemos añadir el branch origin:

git remote add origin ssh://git@miDominio.net/opt/mi_proyecto.git 

Nota: observe que el brazo se agrego hacia el usuario git.

Listo lo ultimo es probar que todo funcione:

touch README git add README git commit -m "message for change log" git push -u origin master 

Descargando el proyecto.

Los usuarios que tengan el acceso del usuario git podran integrarse al proyecto como:

git clone ssh://git@miDominio.net/opt/mi_proyecto.git 

Y listo!..

Fuentes:

Tema para phpmyadmin.

Hace un tiempo hice una plantilla para el phpmyadmin ya que no me gusta el que viene por defecto, hoy la comparto:

phpmyadmin theme dark orange

phpmyadmin theme dark orange

¿Como instalar?

Descargue el proyecto descomprima la carpeta y adentro ejecute como superusuario:

 ./install.sh 

Para mayores informes visitar el micrositio oficial del proyecto:

http://fitorec.github.com/phpmyadmin_theme_dark_orange/